# HG changeset patch # User Florian Pose # Date 1268992096 -3600 # Node ID 219be374227403f50dcbc2453d81adf4c6707c95 # Parent 23d4e121faafad464d3a5eccc1b9774986ad952b Added missing queue_external_datagram(); removed tabs. diff -r 23d4e121faaf -r 219be3742274 master/fsm_master.c --- a/master/fsm_master.c Thu Mar 11 16:50:27 2010 +0100 +++ b/master/fsm_master.c Fri Mar 19 10:48:16 2010 +0100 @@ -426,8 +426,8 @@ 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 -r 23d4e121faaf -r 219be3742274 master/fsm_slave_config.c --- a/master/fsm_slave_config.c Thu Mar 11 16:50:27 2010 +0100 +++ b/master/fsm_slave_config.c Fri Mar 19 10:48:16 2010 +0100 @@ -812,7 +812,7 @@ } // 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 @@ ) { 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 @@ 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 @@ ) { 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 @@ 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 -r 23d4e121faaf -r 219be3742274 master/fsm_soe.c --- a/master/fsm_soe.c Thu Mar 11 16:50:27 2010 +0100 +++ b/master/fsm_soe.c Fri Mar 19 10:48:16 2010 +0100 @@ -77,9 +77,9 @@ /** 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 @@ /** 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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); - fsm->state = ec_fsm_soe_error; - return; - } 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; - } - - data_size = rec_size - EC_SOE_READ_RESPONSE_SIZE; - if (ec_soe_request_append_data(req, + 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; + } + + 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 + 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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); - ec_print_data(data, rec_size); - return; - } - - opcode = EC_READ_U8(data) & 0x7; + rec_size); + ec_print_data(data, rec_size); + return; + } + + 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 @@ return; } - 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; - } else { - req->error_code = 0x0000; - } + 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; + } else { + req->error_code = 0x0000; + } fsm->state = ec_fsm_soe_end; // success } diff -r 23d4e121faaf -r 219be3742274 master/master.c --- a/master/master.c Thu Mar 11 16:50:27 2010 +0100 +++ b/master/master.c Fri Mar 19 10:48:16 2010 +0100 @@ -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 @@ 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 @@ 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 @@ 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 -r 23d4e121faaf -r 219be3742274 master/slave_config.c --- a/master/slave_config.c Thu Mar 11 16:50:27 2010 +0100 +++ b/master/slave_config.c Fri Mar 19 10:48:16 2010 +0100 @@ -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 @@ /*****************************************************************************/ 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;