equal
deleted
inserted
replaced
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 |