From f5f663a190b0427ecbb89a3b66ba55dd833bc2b9 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Fri, 19 Mar 2010 10:48:16 +0100 Subject: [PATCH] Added missing queue_external_datagram(); removed tabs. --- master/fsm_master.c | 4 +- master/fsm_slave_config.c | 15 +++-- master/fsm_soe.c | 116 +++++++++++++++++++------------------- master/master.c | 8 ++- master/slave_config.c | 4 +- 5 files changed, 77 insertions(+), 70 deletions(-) diff --git a/master/fsm_master.c b/master/fsm_master.c index 37b088e2..b2f70d31 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -426,8 +426,8 @@ int ec_fsm_master_action_process_sdo( if (ec_sdo_request_timed_out(req)) { req->state = EC_INT_REQUEST_FAILURE; if (master->debug_level) - EC_DBG("Internal SDO request for slave %u" - " timed out...\n", slave->ring_position); + EC_DBG("Internal SDO request for slave %u" + " timed out...\n", slave->ring_position); continue; } diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index 1c353003..7a6a4d08 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -812,7 +812,7 @@ void ec_fsm_slave_config_state_sdo_conf( } // All SDOs are now configured. - ec_fsm_slave_config_enter_soe_conf(fsm); + ec_fsm_slave_config_enter_soe_conf(fsm); } /*****************************************************************************/ @@ -824,7 +824,7 @@ void ec_fsm_slave_config_enter_soe_conf( ) { ec_slave_t *slave = fsm->slave; - ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe; + ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe; if (!slave->config) { ec_fsm_slave_config_enter_pdo_sync(fsm); @@ -842,9 +842,10 @@ void ec_fsm_slave_config_enter_soe_conf( fsm->soe_request = list_entry(fsm->slave->config->soe_configs.next, ec_soe_request_t, list); ec_soe_request_copy(&fsm->soe_request_copy, fsm->soe_request); - ec_soe_request_write(&fsm->soe_request_copy); + ec_soe_request_write(&fsm->soe_request_copy); ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy); ec_fsm_soe_exec(fsm_soe); // execute immediately + ec_master_queue_external_datagram(slave->master, fsm_soe->datagram); } /*****************************************************************************/ @@ -856,11 +857,12 @@ void ec_fsm_slave_config_state_soe_conf( ) { ec_slave_t *slave = fsm->slave; - ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe; + ec_fsm_soe_t *fsm_soe = &slave->fsm.fsm_soe; if (ec_fsm_soe_exec(fsm_soe)) { - return; - } + ec_master_queue_external_datagram(slave->master, fsm_soe->datagram); + return; + } if (!ec_fsm_soe_success(fsm_soe)) { EC_ERR("SoE configuration failed for slave %u.\n", @@ -883,6 +885,7 @@ void ec_fsm_slave_config_state_soe_conf( ec_soe_request_write(&fsm->soe_request_copy); ec_fsm_soe_transfer(fsm_soe, fsm->slave, &fsm->soe_request_copy); ec_fsm_soe_exec(fsm_soe); // execute immediately + ec_master_queue_external_datagram(slave->master, fsm_soe->datagram); return; } diff --git a/master/fsm_soe.c b/master/fsm_soe.c index 7ba73571..8f9cd966 100644 --- a/master/fsm_soe.c +++ b/master/fsm_soe.c @@ -77,9 +77,9 @@ void ec_fsm_soe_error(ec_fsm_soe_t *); /** Constructor. */ void ec_fsm_soe_init( - ec_fsm_soe_t *fsm, /**< finite state machine */ - ec_datagram_t *datagram /**< datagram */ - ) + ec_fsm_soe_t *fsm, /**< finite state machine */ + ec_datagram_t *datagram /**< datagram */ + ) { fsm->state = NULL; fsm->datagram = datagram; @@ -90,8 +90,8 @@ void ec_fsm_soe_init( /** Destructor. */ void ec_fsm_soe_clear( - ec_fsm_soe_t *fsm /**< finite state machine */ - ) + ec_fsm_soe_t *fsm /**< finite state machine */ + ) { } @@ -109,9 +109,9 @@ void ec_fsm_soe_transfer( fsm->request = request; if (request->dir == EC_DIR_OUTPUT) { fsm->state = ec_fsm_soe_write_start; - } else { + } else { fsm->state = ec_fsm_soe_read_start; - } + } } /*****************************************************************************/ @@ -165,7 +165,7 @@ void ec_fsm_soe_read_start(ec_fsm_soe_t *fsm /**< finite state machine */) } data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE, - EC_SOE_READ_REQUEST_SIZE); + EC_SOE_READ_REQUEST_SIZE); if (IS_ERR(data)) { fsm->state = ec_fsm_soe_error; return; @@ -254,7 +254,7 @@ void ec_fsm_soe_read_check(ec_fsm_soe_t *fsm /**< finite state machine */) if (datagram->working_counter != 1) { fsm->state = ec_fsm_soe_error; EC_ERR("Reception of SoE mailbox check datagram failed on slave %u: ", - slave->ring_position); + slave->ring_position); ec_datagram_print_wc_error(datagram); return; } @@ -334,15 +334,15 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */) if (rec_size < EC_SOE_READ_RESPONSE_SIZE) { fsm->state = ec_fsm_soe_error; EC_ERR("Received currupted SoE read response (%zu bytes)!\n", - rec_size); + rec_size); ec_print_data(data, rec_size); return; } header = EC_READ_U8(data); - opcode = header & 0x7; + opcode = header & 0x7; incomplete = (header >> 3) & 1; - error_flag = (header >> 4) & 1; + error_flag = (header >> 4) & 1; if (opcode != EC_SOE_OPCODE_READ_RESPONSE) { EC_ERR("Received no read response (opcode %x).\n", opcode); @@ -351,29 +351,29 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */) return; } - if (error_flag) { - req->error_code = EC_READ_U16(data + rec_size - 2); - EC_ERR("Received error response: 0x%04x.\n", - req->error_code); + if (error_flag) { + req->error_code = EC_READ_U16(data + rec_size - 2); + EC_ERR("Received error response: 0x%04x.\n", + req->error_code); fsm->state = ec_fsm_soe_error; return; - } else { - req->error_code = 0x0000; - } + } else { + req->error_code = 0x0000; + } - value_included = (EC_READ_U8(data + 1) >> 6) & 1; - if (!value_included) { - EC_ERR("No value included!\n"); - fsm->state = ec_fsm_soe_error; - return; - } + value_included = (EC_READ_U8(data + 1) >> 6) & 1; + if (!value_included) { + EC_ERR("No value included!\n"); + fsm->state = ec_fsm_soe_error; + return; + } - data_size = rec_size - EC_SOE_READ_RESPONSE_SIZE; - if (ec_soe_request_append_data(req, + data_size = rec_size - EC_SOE_READ_RESPONSE_SIZE; + if (ec_soe_request_append_data(req, data + EC_SOE_READ_RESPONSE_SIZE, data_size)) { - fsm->state = ec_fsm_soe_error; - return; - } + fsm->state = ec_fsm_soe_error; + return; + } if (incomplete) { if (master->debug_level) { @@ -430,7 +430,7 @@ void ec_fsm_soe_write_next_fragment( } data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE, - EC_SOE_WRITE_REQUEST_SIZE + fragment_size); + EC_SOE_WRITE_REQUEST_SIZE + fragment_size); if (IS_ERR(data)) { fsm->state = ec_fsm_soe_error; return; @@ -439,7 +439,7 @@ void ec_fsm_soe_write_next_fragment( EC_WRITE_U8(data, EC_SOE_OPCODE_WRITE_REQUEST | incomplete << 3); EC_WRITE_U8(data + 1, 1 << 6); // only value included EC_WRITE_U16(data + 2, incomplete ? fragments_left : req->idn); - memcpy(data + 4, req->data + fsm->offset, fragment_size); + memcpy(data + 4, req->data + fsm->offset, fragment_size); fsm->offset += fragment_size; if (master->debug_level) { @@ -546,7 +546,7 @@ void ec_fsm_soe_write_check(ec_fsm_soe_t *fsm /**< finite state machine */) if (datagram->working_counter != 1) { fsm->state = ec_fsm_soe_error; EC_ERR("Reception of SoE write request datagram failed on slave %u: ", - slave->ring_position); + slave->ring_position); ec_datagram_print_wc_error(datagram); return; } @@ -588,7 +588,7 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) ec_master_t *master = slave->master; ec_soe_request_t *req = fsm->request; uint8_t *data, mbox_prot, opcode, error_flag; - uint16_t idn; + uint16_t idn; size_t rec_size; if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--) @@ -630,12 +630,12 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) if (rec_size < EC_SOE_WRITE_RESPONSE_SIZE) { fsm->state = ec_fsm_soe_error; EC_ERR("Received currupted SoE write response (%zu bytes)!\n", - rec_size); + rec_size); ec_print_data(data, rec_size); return; } - opcode = EC_READ_U8(data) & 0x7; + opcode = EC_READ_U8(data) & 0x7; if (opcode != EC_SOE_OPCODE_WRITE_RESPONSE) { EC_ERR("Received no write response (opcode %x).\n", opcode); ec_print_data(data, rec_size); @@ -643,30 +643,30 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) return; } - idn = EC_READ_U16(data + 2); - if (idn != req->idn) { - EC_ERR("Received response for wrong IDN 0x%04x.\n", idn); + idn = EC_READ_U16(data + 2); + if (idn != req->idn) { + EC_ERR("Received response for wrong IDN 0x%04x.\n", idn); + ec_print_data(data, rec_size); + fsm->state = ec_fsm_soe_error; + return; + } + + error_flag = (EC_READ_U8(data) >> 4) & 1; + if (error_flag) { + if (rec_size < EC_SOE_WRITE_RESPONSE_SIZE + 2) { + EC_ERR("Received corrupted error response - error flag set," + " but received size is %zu.\n", rec_size); + } else { + req->error_code = EC_READ_U16(data + EC_SOE_WRITE_RESPONSE_SIZE); + EC_ERR("Received error response: 0x%04x.\n", + req->error_code); + } ec_print_data(data, rec_size); fsm->state = ec_fsm_soe_error; - return; - } - - error_flag = (EC_READ_U8(data) >> 4) & 1; - if (error_flag) { - if (rec_size < EC_SOE_WRITE_RESPONSE_SIZE + 2) { - EC_ERR("Received corrupted error response - error flag set," - " but received size is %zu.\n", rec_size); - } else { - req->error_code = EC_READ_U16(data + EC_SOE_WRITE_RESPONSE_SIZE); - EC_ERR("Received error response: 0x%04x.\n", - req->error_code); - } - ec_print_data(data, rec_size); - fsm->state = ec_fsm_soe_error; - return; - } else { - req->error_code = 0x0000; - } + return; + } else { + req->error_code = 0x0000; + } fsm->state = ec_fsm_soe_end; // success } diff --git a/master/master.c b/master/master.c index 3b38af0e..f6d9533d 100644 --- a/master/master.c +++ b/master/master.c @@ -25,6 +25,8 @@ * EtherCAT technology and brand is only permitted in compliance with the * industrial property and similar rights of Beckhoff Automation GmbH. * + * vim: expandtab + * *****************************************************************************/ /** @@ -417,7 +419,7 @@ void ec_master_clear_slaves(ec_master_t *master) ec_master_sdo_request_t, list); list_del_init(&request->list); // dequeue EC_INFO("Discarding SDO request," - " slave %u does not exist anymore.\n", + " slave %u does not exist anymore.\n", slave->ring_position); request->req.state = EC_INT_REQUEST_FAILURE; wake_up(&slave->sdo_queue); @@ -432,7 +434,7 @@ void ec_master_clear_slaves(ec_master_t *master) ec_master_foe_request_t, list); list_del_init(&request->list); // dequeue EC_INFO("Discarding FoE request," - " slave %u does not exist anymore.\n", + " slave %u does not exist anymore.\n", slave->ring_position); request->req.state = EC_INT_REQUEST_FAILURE; wake_up(&slave->foe_queue); @@ -447,7 +449,7 @@ void ec_master_clear_slaves(ec_master_t *master) ec_master_soe_request_t, list); list_del_init(&request->list); // dequeue EC_INFO("Discarding SoE request," - " slave %u does not exist anymore.\n", + " slave %u does not exist anymore.\n", slave->ring_position); request->req.state = EC_INT_REQUEST_FAILURE; wake_up(&slave->soe_queue); diff --git a/master/slave_config.c b/master/slave_config.c index df77c088..6714f857 100644 --- a/master/slave_config.c +++ b/master/slave_config.c @@ -25,6 +25,8 @@ * EtherCAT technology and brand is only permitted in compliance with the * industrial property and similar rights of Beckhoff Automation GmbH. * + * vim: expandtab + * *****************************************************************************/ /** @@ -960,7 +962,7 @@ void ecrt_slave_config_state(const ec_slave_config_t *sc, /*****************************************************************************/ int ecrt_slave_config_idn(ec_slave_config_t *sc, uint16_t idn, - const uint8_t *data, size_t size) + const uint8_t *data, size_t size) { ec_slave_t *slave = sc->slave; ec_soe_request_t *req; -- GitLab