equal
deleted
inserted
replaced
267 EC_ERR("Failed to allocate domain datagram!\n"); |
267 EC_ERR("Failed to allocate domain datagram!\n"); |
268 return -1; |
268 return -1; |
269 } |
269 } |
270 |
270 |
271 ec_datagram_init(datagram); |
271 ec_datagram_init(datagram); |
|
272 snprintf(datagram->name, EC_DATAGRAM_NAME_SIZE, |
|
273 "domain%u-%u", domain->index, offset); |
272 |
274 |
273 if (ec_datagram_lrw(datagram, offset, data_size)) { |
275 if (ec_datagram_lrw(datagram, offset, data_size)) { |
274 kfree(datagram); |
276 kfree(datagram); |
275 return -1; |
277 return -1; |
276 } |
278 } |
296 ec_data_reg_t *data_reg; |
298 ec_data_reg_t *data_reg; |
297 ec_slave_t *slave; |
299 ec_slave_t *slave; |
298 ec_fmmu_t *fmmu; |
300 ec_fmmu_t *fmmu; |
299 unsigned int i, j, datagram_count; |
301 unsigned int i, j, datagram_count; |
300 uint32_t pdo_off, pdo_off_datagram; |
302 uint32_t pdo_off, pdo_off_datagram; |
301 uint32_t datagram_offset; |
303 uint32_t datagram_offset, log_addr; |
302 size_t datagram_data_size, sync_size; |
304 size_t datagram_data_size, sync_size; |
303 ec_datagram_t *datagram; |
305 ec_datagram_t *datagram; |
304 |
306 |
305 domain->base_address = base_address; |
307 domain->base_address = base_address; |
306 |
308 |
348 fmmu = &data_reg->slave->fmmus[i]; |
350 fmmu = &data_reg->slave->fmmus[i]; |
349 if (fmmu->domain == domain && fmmu->sync == data_reg->sync) { |
351 if (fmmu->domain == domain && fmmu->sync == data_reg->sync) { |
350 pdo_off = fmmu->logical_start_address + data_reg->sync_offset; |
352 pdo_off = fmmu->logical_start_address + data_reg->sync_offset; |
351 // search datagram |
353 // search datagram |
352 list_for_each_entry(datagram, &domain->datagrams, list) { |
354 list_for_each_entry(datagram, &domain->datagrams, list) { |
353 pdo_off_datagram = pdo_off - datagram->address.logical; |
355 log_addr = EC_READ_U32(datagram->address); |
354 if (pdo_off >= datagram->address.logical && |
356 pdo_off_datagram = pdo_off - log_addr; |
|
357 if (pdo_off >= log_addr && |
355 pdo_off_datagram < datagram->mem_size) { |
358 pdo_off_datagram < datagram->mem_size) { |
356 *data_reg->data_ptr = datagram->data + |
359 *data_reg->data_ptr = datagram->data + |
357 pdo_off_datagram; |
360 pdo_off_datagram; |
358 } |
361 } |
359 } |
362 } |
544 ec_datagram_t *datagram; |
547 ec_datagram_t *datagram; |
545 |
548 |
546 working_counter_sum = 0; |
549 working_counter_sum = 0; |
547 domain->state = 0; |
550 domain->state = 0; |
548 list_for_each_entry(datagram, &domain->datagrams, list) { |
551 list_for_each_entry(datagram, &domain->datagrams, list) { |
|
552 ec_datagram_output_stats(datagram); |
549 if (datagram->state == EC_DATAGRAM_RECEIVED) { |
553 if (datagram->state == EC_DATAGRAM_RECEIVED) { |
550 working_counter_sum += datagram->working_counter; |
554 working_counter_sum += datagram->working_counter; |
551 } |
555 } |
552 else { |
556 else { |
553 domain->state = -1; |
557 domain->state = -1; |