master/domain.c
branchstable-1.3
changeset 1745 07fd94c5119d
parent 1744 7bc131b92039
child 1752 b01562a45602
equal deleted inserted replaced
1744:7bc131b92039 1745:07fd94c5119d
   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;