master/slave.c
changeset 876 8acdecb5a75e
parent 873 ec01ba291896
child 879 9b395c5646ab
equal deleted inserted replaced
875:c5df898a3618 876:8acdecb5a75e
   436         const uint8_t *data, /**< category data */
   436         const uint8_t *data, /**< category data */
   437         size_t data_size /**< size in bytes */
   437         size_t data_size /**< size in bytes */
   438         )
   438         )
   439 {
   439 {
   440     unsigned int i;
   440     unsigned int i;
       
   441     uint8_t flags;
   441 
   442 
   442     if (data_size != 32) {
   443     if (data_size != 32) {
   443         EC_ERR("Wrong size of general category (%u/32) in slave %u.\n",
   444         EC_ERR("Wrong size of general category (%u/32) in slave %u.\n",
   444                 data_size, slave->ring_position);
   445                 data_size, slave->ring_position);
   445         return -1;
   446         return -1;
   452 
   453 
   453     for (i = 0; i < 4; i++)
   454     for (i = 0; i < 4; i++)
   454         slave->sii.physical_layer[i] =
   455         slave->sii.physical_layer[i] =
   455             (data[4] & (0x03 << (i * 2))) >> (i * 2);
   456             (data[4] & (0x03 << (i * 2))) >> (i * 2);
   456 
   457 
   457     memcpy(&slave->sii.coe_details, data + 5, 1);
   458     // read CoE details
   458     memcpy(&slave->sii.general_flags, data + 0x000b, 1);
   459     flags = EC_READ_U8(data + 5);
       
   460     slave->sii.coe_details.enable_sdo =                 (flags >> 0) & 0x01;
       
   461     slave->sii.coe_details.enable_sdo_info =            (flags >> 1) & 0x01;
       
   462     slave->sii.coe_details.enable_pdo_assign =          (flags >> 2) & 0x01;
       
   463     slave->sii.coe_details.enable_pdo_configuration =   (flags >> 3) & 0x01;
       
   464     slave->sii.coe_details.enable_upload_at_startup =   (flags >> 4) & 0x01;
       
   465     slave->sii.coe_details.enable_sdo_complete_access = (flags >> 5) & 0x01;
       
   466 
       
   467     // read general flags
       
   468     flags = EC_READ_U8(data + 0x000B);
       
   469     slave->sii.general_flags.enable_safeop =  (flags >> 0) & 0x01;
       
   470     slave->sii.general_flags.enable_not_lrw = (flags >> 1) & 0x01;
       
   471 
   459     slave->sii.current_on_ebus = EC_READ_S16(data + 0x0C);
   472     slave->sii.current_on_ebus = EC_READ_S16(data + 0x0C);
   460     slave->sii.has_general = 1;
   473     slave->sii.has_general = 1;
   461     return 0;
   474     return 0;
   462 }
   475 }
   463 
   476