Better debugging output for SDO dictionaries.
This commit is contained in:
parent
9fd6548b84
commit
cd884f45d0
44
master/fsm.c
44
master/fsm.c
|
|
@ -614,7 +614,7 @@ void ec_fsm_master_action_process_states(ec_fsm_t *fsm
|
|||
|| slave->error_flag) continue;
|
||||
|
||||
if (master->debug_level) {
|
||||
EC_DBG("Fetching SDO dictionary of slave %i.\n",
|
||||
EC_DBG("Fetching SDO dictionary from slave %i.\n",
|
||||
slave->ring_position);
|
||||
}
|
||||
|
||||
|
|
@ -1052,8 +1052,10 @@ void ec_fsm_master_sdodict(ec_fsm_t *fsm /**< finite state machine */)
|
|||
// SDO dictionary fetching finished
|
||||
|
||||
if (master->debug_level) {
|
||||
EC_DBG("Finished fetching SDO dictionary of slave %i.\n",
|
||||
slave->ring_position);
|
||||
unsigned int sdo_count, entry_count;
|
||||
ec_slave_sdo_dict_info(slave, &sdo_count, &entry_count);
|
||||
EC_DBG("Fetched %i SDOs and %i entries from slave %i.\n",
|
||||
sdo_count, entry_count, slave->ring_position);
|
||||
}
|
||||
|
||||
// restart master state machine.
|
||||
|
|
@ -2320,7 +2322,6 @@ void ec_fsm_coe_dict_check(ec_fsm_t *fsm /**< finite state machine */)
|
|||
|
||||
void ec_fsm_coe_dict_response(ec_fsm_t *fsm /**< finite state machine */)
|
||||
{
|
||||
ec_master_t *master = fsm->master;
|
||||
ec_datagram_t *datagram = &fsm->datagram;
|
||||
ec_slave_t *slave = fsm->slave;
|
||||
uint8_t *data, mbox_prot;
|
||||
|
|
@ -2375,17 +2376,11 @@ void ec_fsm_coe_dict_response(ec_fsm_t *fsm /**< finite state machine */)
|
|||
|
||||
sdo_count = (rec_size - 8) / 2;
|
||||
|
||||
if (master->debug_level) {
|
||||
EC_DBG("Fetching %i SDOs.\n", sdo_count);
|
||||
}
|
||||
|
||||
for (i = 0; i < sdo_count; i++) {
|
||||
sdo_index = EC_READ_U16(data + 8 + i * 2);
|
||||
if (!sdo_index) {
|
||||
// sometimes index is 0... ???
|
||||
if (master->debug_level) {
|
||||
EC_DBG("Received SDO with index 0x0000.\n");
|
||||
}
|
||||
EC_WARN("SDO dictionary of slave %i contains index 0x0000.\n",
|
||||
slave->ring_position);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -2457,7 +2452,9 @@ void ec_fsm_coe_dict_desc_request(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE SDO description request failed.\n");
|
||||
EC_ERR("Reception of CoE SDO description"
|
||||
" request failed on slave %i.\n", slave->ring_position);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2482,7 +2479,9 @@ void ec_fsm_coe_dict_desc_check(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE mailbox check datagram failed.\n");
|
||||
EC_ERR("Reception of CoE mailbox check datagram failed on slave %i.\n",
|
||||
slave->ring_position);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2524,7 +2523,8 @@ void ec_fsm_coe_dict_desc_response(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE SDO description response failed.\n");
|
||||
EC_ERR("Reception of CoE SDO description"
|
||||
"response failed on slave %i.\n", slave->ring_position);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2651,7 +2651,8 @@ void ec_fsm_coe_dict_entry_request(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE SDO entry request failed.\n");
|
||||
EC_ERR("Reception of CoE SDO entry request failed on slave %i.\n",
|
||||
slave->ring_position);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2676,7 +2677,8 @@ void ec_fsm_coe_dict_entry_check(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE mailbox check datagram failed.\n");
|
||||
EC_ERR("Reception of CoE mailbox check datagram failed on slave %i.\n",
|
||||
slave->ring_position);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2708,7 +2710,6 @@ void ec_fsm_coe_dict_entry_check(ec_fsm_t *fsm /**< finite state machine */)
|
|||
|
||||
void ec_fsm_coe_dict_entry_response(ec_fsm_t *fsm /**< finite state machine */)
|
||||
{
|
||||
ec_master_t *master = fsm->master;
|
||||
ec_datagram_t *datagram = &fsm->datagram;
|
||||
ec_slave_t *slave = fsm->slave;
|
||||
ec_sdo_t *sdo = fsm->coe_sdo;
|
||||
|
|
@ -2719,7 +2720,8 @@ void ec_fsm_coe_dict_entry_response(ec_fsm_t *fsm /**< finite state machine */)
|
|||
if (datagram->state != EC_DATAGRAM_RECEIVED
|
||||
|| datagram->working_counter != 1) {
|
||||
fsm->coe_state = ec_fsm_error;
|
||||
EC_ERR("Reception of CoE SDO description response failed.\n");
|
||||
EC_ERR("Reception of CoE SDO description"
|
||||
" response failed on slave %i.\n", slave->ring_position);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2842,10 +2844,6 @@ void ec_fsm_coe_dict_entry_response(ec_fsm_t *fsm /**< finite state machine */)
|
|||
return;
|
||||
}
|
||||
|
||||
if (master->debug_level) {
|
||||
EC_DBG("Finished fetching SDO descriptions.\n");
|
||||
}
|
||||
|
||||
fsm->coe_state = ec_fsm_end;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -960,6 +960,33 @@ int ec_slave_validate(const ec_slave_t *slave, /**< EtherCAT slave */
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
/**
|
||||
Counts the total number of SDOs and entries in the dictionary.
|
||||
*/
|
||||
|
||||
void ec_slave_sdo_dict_info(const ec_slave_t *slave, /**< EtherCAT slave */
|
||||
unsigned int *sdo_count, /**< number of SDOs */
|
||||
unsigned int *entry_count /**< total number of
|
||||
entries */
|
||||
)
|
||||
{
|
||||
unsigned int sdos = 0, entries = 0;
|
||||
ec_sdo_t *sdo;
|
||||
ec_sdo_entry_t *entry;
|
||||
|
||||
list_for_each_entry(sdo, &slave->sdo_dictionary, list) {
|
||||
sdos++;
|
||||
list_for_each_entry(entry, &sdo->entries, list) {
|
||||
entries++;
|
||||
}
|
||||
}
|
||||
|
||||
*sdo_count = sdos;
|
||||
*entry_count = entries;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* Realtime interface
|
||||
*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -281,6 +281,9 @@ int ec_slave_has_subbus(const ec_slave_t *);
|
|||
|
||||
int ec_slave_validate(const ec_slave_t *, uint32_t, uint32_t);
|
||||
|
||||
void ec_slave_sdo_dict_info(const ec_slave_t *,
|
||||
unsigned int *, unsigned int *);
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue