From ee57578c05e2a5355d5827e2a2d5c29366f981ae Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Mon, 9 Jun 2008 14:32:16 +0000 Subject: [PATCH] Renamed some fields in ec_sii_request_t to word addressing. --- master/fsm_master.c | 12 ++++++------ master/fsm_master.h | 12 ++++++------ master/fsm_sii.c | 2 +- master/fsm_sii.h | 2 +- master/slave.c | 25 +++++++++++-------------- 5 files changed, 25 insertions(+), 28 deletions(-) diff --git a/master/fsm_master.c b/master/fsm_master.c index 626a91ac..fbc71a6f 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -324,8 +324,8 @@ int ec_fsm_master_action_process_sii( request->slave->ring_position); fsm->sii_request = request; fsm->sii_index = 0; - ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->word_offset, - request->data, EC_FSM_SII_USE_CONFIGURED_ADDRESS); + ec_fsm_sii_write(&fsm->fsm_sii, request->slave, request->offset, + request->words, EC_FSM_SII_USE_CONFIGURED_ADDRESS); fsm->state = ec_fsm_master_state_write_sii; fsm->state(fsm); // execute immediately return 1; @@ -791,10 +791,10 @@ void ec_fsm_master_state_write_sii( } fsm->sii_index++; - if (fsm->sii_index < request->word_size) { + if (fsm->sii_index < request->nwords) { ec_fsm_sii_write(&fsm->fsm_sii, slave, - request->word_offset + fsm->sii_index, - request->data + fsm->sii_index * 2, + request->offset + fsm->sii_index, + request->words + fsm->sii_index, EC_FSM_SII_USE_CONFIGURED_ADDRESS); ec_fsm_sii_exec(&fsm->fsm_sii); // execute immediately return; @@ -803,7 +803,7 @@ void ec_fsm_master_state_write_sii( // finished writing SII if (master->debug_level) EC_DBG("Finished writing %u words of SII data to slave %u.\n", - request->word_size, slave->ring_position); + request->nwords, slave->ring_position); request->state = EC_REQUEST_SUCCESS; wake_up(&master->sii_queue); diff --git a/master/fsm_master.h b/master/fsm_master.h index 5a1e1092..aa671288 100644 --- a/master/fsm_master.h +++ b/master/fsm_master.h @@ -55,12 +55,12 @@ /** SII write request. */ typedef struct { - struct list_head list; /**< list head */ - ec_slave_t *slave; /**< EtherCAT slave */ - off_t word_offset; /**< SII address in words */ - size_t word_size; /**< data size in words */ - const uint8_t *data; /**< pointer to the data */ - ec_request_state_t state; /**< state of the request */ + struct list_head list; /**< List head. */ + ec_slave_t *slave; /**< EtherCAT slave. */ + uint16_t offset; /**< SII word offset. */ + size_t nwords; /**< Number of words. */ + const uint16_t *words; /**< Pointer to the data words. */ + ec_request_state_t state; /**< State of the request. */ } ec_sii_write_request_t; /*****************************************************************************/ diff --git a/master/fsm_sii.c b/master/fsm_sii.c index d8724e0b..23d6ddb2 100644 --- a/master/fsm_sii.c +++ b/master/fsm_sii.c @@ -117,7 +117,7 @@ void ec_fsm_sii_read(ec_fsm_sii_t *fsm, /**< finite state machine */ void ec_fsm_sii_write(ec_fsm_sii_t *fsm, /**< finite state machine */ ec_slave_t *slave, /**< slave to read from */ uint16_t word_offset, /**< offset to read from */ - const uint8_t *value, /**< pointer to 2 bytes of data */ + const uint16_t *value, /**< pointer to 2 bytes of data */ ec_fsm_sii_addressing_t mode /**< addressing scheme */ ) { diff --git a/master/fsm_sii.h b/master/fsm_sii.h index 7457ea83..17ef44ec 100644 --- a/master/fsm_sii.h +++ b/master/fsm_sii.h @@ -85,7 +85,7 @@ void ec_fsm_sii_clear(ec_fsm_sii_t *); void ec_fsm_sii_read(ec_fsm_sii_t *, ec_slave_t *, uint16_t, ec_fsm_sii_addressing_t); void ec_fsm_sii_write(ec_fsm_sii_t *, ec_slave_t *, uint16_t, - const uint8_t *, ec_fsm_sii_addressing_t); + const uint16_t *, ec_fsm_sii_addressing_t); int ec_fsm_sii_exec(ec_fsm_sii_t *); int ec_fsm_sii_success(ec_fsm_sii_t *); diff --git a/master/slave.c b/master/slave.c index 074f6d62..2255b713 100644 --- a/master/slave.c +++ b/master/slave.c @@ -961,14 +961,14 @@ ssize_t ec_slave_write_sii(ec_slave_t *slave, /**< EtherCAT slave */ // init SII write request INIT_LIST_HEAD(&request.list); request.slave = slave; - request.data = data; - request.word_offset = 0; - request.word_size = size / 2; + request.words = (const uint16_t *) data; + request.offset = 0; + request.nwords = size / 2; - if (request.word_size < 0x0041) { + if (request.nwords < 0x0041) { EC_ERR("SII data too short (%u words)! Mimimum is" " 40 fixed words + 1 delimiter. Dropping.\n", - request.word_size); + request.nwords); return -EINVAL; } @@ -978,18 +978,15 @@ ssize_t ec_slave_write_sii(ec_slave_t *slave, /**< EtherCAT slave */ EC_WARN("SII CRC incorrect. Must be 0x%02x.\n", crc); } - cat_header = (const uint16_t *) request.data - + EC_FIRST_SII_CATEGORY_OFFSET; + cat_header = request.words + EC_FIRST_SII_CATEGORY_OFFSET; cat_type = EC_READ_U16(cat_header); while (cat_type != 0xFFFF) { // cycle through categories - if (cat_header + 1 > - (const uint16_t *) request.data + request.word_size) { + if (cat_header + 1 > request.words + request.nwords) { EC_ERR("SII data corrupted! Dropping.\n"); return -EINVAL; } cat_size = EC_READ_U16(cat_header + 1); - if (cat_header + cat_size + 2 > - (const uint16_t *) request.data + request.word_size) { + if (cat_header + cat_size + 2 > request.words + request.nwords) { EC_ERR("SII data corrupted! Dropping.\n"); return -EINVAL; } @@ -1052,9 +1049,9 @@ ssize_t ec_slave_write_alias(ec_slave_t *slave, /**< EtherCAT slave */ // init SII write request INIT_LIST_HEAD(&request.list); request.slave = slave; - request.data = sii_data; - request.word_offset = 0x0000; - request.word_size = 8; + request.words = (const uint16_t *) sii_data; + request.offset = 0x0000; + request.nwords = 8; if ((ret = ec_slave_schedule_sii_writing(&request))) return ret; // error code