Renamed some fields in ec_sii_request_t to word addressing.
This commit is contained in:
parent
0ee1c38030
commit
ee57578c05
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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 *);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue