Skip to content
Snippets Groups Projects
Commit 7fffe696 authored by Florian Pose's avatar Florian Pose
Browse files

Check for data sizes when reading Pdo assignment/mapping from CoE.

parent 7ec21e12
No related branches found
No related tags found
No related merge requests found
...@@ -14,9 +14,10 @@ Version 1.4.0: ...@@ -14,9 +14,10 @@ Version 1.4.0:
* Adapt remaining examples. * Adapt remaining examples.
* READMEs for examples. * READMEs for examples.
* Update documentation. * Update documentation.
* Check for sizes of uploaded Sdos when reading mapping from CoE.
* Attach Pdo names from SII or Coe dictioary to Pdos read via CoE. * Attach Pdo names from SII or Coe dictioary to Pdos read via CoE.
* Add a -n (numeric) switch to ethercat command. * Add a -n (numeric) switch to ethercat command.
* Remove Eoe cylces and Idle cycles.
* Store Sdo abort code in sdo_request_t and output it in user space.
Future issues: Future issues:
......
...@@ -216,6 +216,14 @@ void ec_fsm_coe_map_state_pdo_count( ...@@ -216,6 +216,14 @@ void ec_fsm_coe_map_state_pdo_count(
return; return;
} }
if (fsm->request.data_size != sizeof(uint8_t)) {
EC_ERR("Invalid data size %u returned when uploading Sdo 0x%04X:%02X "
"from slave %u.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex,
fsm->slave->ring_position);
fsm->state = ec_fsm_coe_map_state_error;
return;
}
fsm->sync_subindices = EC_READ_U8(fsm->request.data); fsm->sync_subindices = EC_READ_U8(fsm->request.data);
if (fsm->slave->master->debug_level) if (fsm->slave->master->debug_level)
...@@ -280,6 +288,15 @@ void ec_fsm_coe_map_state_pdo( ...@@ -280,6 +288,15 @@ void ec_fsm_coe_map_state_pdo(
return; return;
} }
if (fsm->request.data_size != sizeof(uint16_t)) {
EC_ERR("Invalid data size %u returned when uploading Sdo 0x%04X:%02X "
"from slave %u.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex,
fsm->slave->ring_position);
fsm->state = ec_fsm_coe_map_state_error;
return;
}
if (!(fsm->pdo = (ec_pdo_t *) if (!(fsm->pdo = (ec_pdo_t *)
kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) { kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) {
EC_ERR("Failed to allocate Pdo.\n"); EC_ERR("Failed to allocate Pdo.\n");
...@@ -323,6 +340,14 @@ void ec_fsm_coe_map_state_pdo_entry_count( ...@@ -323,6 +340,14 @@ void ec_fsm_coe_map_state_pdo_entry_count(
return; return;
} }
if (fsm->request.data_size != sizeof(uint8_t)) {
EC_ERR("Invalid data size %u returned when uploading Sdo 0x%04X:%02X "
"from slave %u.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex,
fsm->slave->ring_position);
fsm->state = ec_fsm_coe_map_state_error;
return;
}
fsm->pdo_subindices = EC_READ_U8(fsm->request.data); fsm->pdo_subindices = EC_READ_U8(fsm->request.data);
if (fsm->slave->master->debug_level) if (fsm->slave->master->debug_level)
...@@ -377,7 +402,13 @@ void ec_fsm_coe_map_state_pdo_entry( ...@@ -377,7 +402,13 @@ void ec_fsm_coe_map_state_pdo_entry(
return; return;
} }
{ if (fsm->request.data_size != sizeof(uint32_t)) {
EC_ERR("Invalid data size %u returned when uploading Sdo 0x%04X:%02X "
"from slave %u.\n", fsm->request.data_size,
fsm->request.index, fsm->request.subindex,
fsm->slave->ring_position);
fsm->state = ec_fsm_coe_map_state_error;
} else {
uint32_t pdo_entry_info; uint32_t pdo_entry_info;
ec_pdo_entry_t *pdo_entry; ec_pdo_entry_t *pdo_entry;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment