From 7fffe6961ae287b26b245d654914481e420f0027 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Thu, 19 Jun 2008 08:06:49 +0000 Subject: [PATCH] Check for data sizes when reading Pdo assignment/mapping from CoE. --- TODO | 3 ++- master/fsm_coe_map.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 08583db2..15957c9f 100644 --- a/TODO +++ b/TODO @@ -14,9 +14,10 @@ Version 1.4.0: * Adapt remaining examples. * READMEs for examples. * 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. * 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: diff --git a/master/fsm_coe_map.c b/master/fsm_coe_map.c index 3a46020a..8d24e7bd 100644 --- a/master/fsm_coe_map.c +++ b/master/fsm_coe_map.c @@ -216,6 +216,14 @@ void ec_fsm_coe_map_state_pdo_count( 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); if (fsm->slave->master->debug_level) @@ -280,6 +288,15 @@ void ec_fsm_coe_map_state_pdo( 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 *) kmalloc(sizeof(ec_pdo_t), GFP_KERNEL))) { EC_ERR("Failed to allocate Pdo.\n"); @@ -323,6 +340,14 @@ void ec_fsm_coe_map_state_pdo_entry_count( 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); if (fsm->slave->master->debug_level) @@ -377,7 +402,13 @@ void ec_fsm_coe_map_state_pdo_entry( 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; ec_pdo_entry_t *pdo_entry; -- GitLab