Skip to content
Snippets Groups Projects
Commit f5f663a1 authored by Florian Pose's avatar Florian Pose
Browse files

Added missing queue_external_datagram(); removed tabs.

parent a0c0a87c
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
......@@ -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;
}
......
......@@ -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
}
......
......@@ -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);
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment