diff -r 611d738a1392 -r 29489a43ecee master/slave.c --- a/master/slave.c Mon Mar 05 09:10:02 2007 +0000 +++ b/master/slave.c Mon Mar 05 09:55:39 2007 +0000 @@ -116,7 +116,7 @@ slave->current_state = EC_SLAVE_STATE_UNKNOWN; slave->self_configured = 0; slave->error_flag = 0; - slave->online = 1; + slave->online_state = EC_SLAVE_ONLINE; slave->fmmu_count = 0; slave->coupler_index = 0; @@ -329,6 +329,58 @@ /*****************************************************************************/ /** + * Sets the application state of a slave. + */ + +void ec_slave_set_state(ec_slave_t *slave, /**< EtherCAT slave */ + ec_slave_state_t new_state /**< new application state */ + ) +{ + if (new_state != slave->current_state) { + if (slave->master->debug_level) { + char old_state[EC_STATE_STRING_SIZE], + cur_state[EC_STATE_STRING_SIZE]; + ec_state_string(slave->current_state, old_state); + ec_state_string(new_state, cur_state); + EC_DBG("Slave %i: %s -> %s.\n", + slave->ring_position, old_state, cur_state); + } + slave->current_state = new_state; + } +} + +/*****************************************************************************/ + +/** + * Sets the online state of a slave. + */ + +void ec_slave_set_online_state(ec_slave_t *slave, /**< EtherCAT slave */ + ec_slave_online_state_t new_state /**< new online state */ + ) +{ + if (new_state == EC_SLAVE_OFFLINE && + slave->online_state == EC_SLAVE_ONLINE) { + if (slave->master->debug_level) + EC_DBG("Slave %i: offline.\n", slave->ring_position); + } + else if (new_state == EC_SLAVE_ONLINE && + slave->online_state == EC_SLAVE_OFFLINE) { + slave->error_flag = 0; // clear error flag + if (slave->master->debug_level) { + char cur_state[EC_STATE_STRING_SIZE]; + ec_state_string(slave->current_state, cur_state); + EC_DBG("Slave %i: online (%s).\n", + slave->ring_position, cur_state); + } + } + + slave->online_state = new_state; +} + +/*****************************************************************************/ + +/** */ void ec_slave_request_state(ec_slave_t *slave, /**< ETherCAT slave */ @@ -636,8 +688,8 @@ off += sprintf(buffer + off, " ("); off += ec_state_string(slave->requested_state, buffer + off); off += sprintf(buffer + off, ")\nFlags: %s, %s\n", - slave->online ? "online" : "OFFLINE", - slave->error_flag ? "ERROR" : "ok"); + slave->online_state == EC_SLAVE_ONLINE ? "online" : "OFFLINE", + slave->error_flag ? "ERROR" : "ok"); off += sprintf(buffer + off, "Ring position: %i\n", slave->ring_position); off += sprintf(buffer + off, "Advanced position: %i:%i\n",