equal
deleted
inserted
replaced
1777 void ec_fsm_change_start(ec_fsm_t *fsm /**< finite state machine */) |
1777 void ec_fsm_change_start(ec_fsm_t *fsm /**< finite state machine */) |
1778 { |
1778 { |
1779 ec_datagram_t *datagram = &fsm->datagram; |
1779 ec_datagram_t *datagram = &fsm->datagram; |
1780 ec_slave_t *slave = fsm->slave; |
1780 ec_slave_t *slave = fsm->slave; |
1781 |
1781 |
1782 fsm->change_start = get_cycles(); |
1782 fsm->change_jiffies = jiffies; |
1783 |
1783 |
1784 // write new state to slave |
1784 // write new state to slave |
1785 ec_datagram_npwr(datagram, slave->station_address, 0x0120, 2); |
1785 ec_datagram_npwr(datagram, slave->station_address, 0x0120, 2); |
1786 EC_WRITE_U16(datagram->data, fsm->change_new); |
1786 EC_WRITE_U16(datagram->data, fsm->change_new); |
1787 ec_master_queue_datagram(fsm->master, datagram); |
1787 ec_master_queue_datagram(fsm->master, datagram); |
1805 fsm->slave->ring_position); |
1805 fsm->slave->ring_position); |
1806 return; |
1806 return; |
1807 } |
1807 } |
1808 |
1808 |
1809 if (datagram->working_counter != 1) { |
1809 if (datagram->working_counter != 1) { |
1810 if (get_cycles() - fsm->change_start >= (cycles_t) 100 * cpu_khz) { |
1810 if (jiffies - fsm->change_jiffies >= 3 * HZ) { |
1811 fsm->change_state = ec_fsm_error; |
1811 fsm->change_state = ec_fsm_error; |
1812 EC_ERR("Failed to set state 0x%02X on slave %i: Slave did not" |
1812 EC_ERR("Failed to set state 0x%02X on slave %i: Slave did not" |
1813 " respond.\n", fsm->change_new, fsm->slave->ring_position); |
1813 " respond.\n", fsm->change_new, fsm->slave->ring_position); |
1814 return; |
1814 return; |
1815 } |
1815 } |
1819 EC_WRITE_U16(datagram->data, fsm->change_new); |
1819 EC_WRITE_U16(datagram->data, fsm->change_new); |
1820 ec_master_queue_datagram(fsm->master, datagram); |
1820 ec_master_queue_datagram(fsm->master, datagram); |
1821 return; |
1821 return; |
1822 } |
1822 } |
1823 |
1823 |
1824 fsm->change_start = get_cycles(); |
1824 fsm->change_jiffies = jiffies; |
1825 |
1825 |
1826 // read AL status from slave |
1826 // read AL status from slave |
1827 ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); |
1827 ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); |
1828 ec_master_queue_datagram(fsm->master, datagram); |
1828 ec_master_queue_datagram(fsm->master, datagram); |
1829 fsm->change_state = ec_fsm_change_status; |
1829 fsm->change_state = ec_fsm_change_status; |
1867 ec_master_queue_datagram(fsm->master, datagram); |
1867 ec_master_queue_datagram(fsm->master, datagram); |
1868 fsm->change_state = ec_fsm_change_code; |
1868 fsm->change_state = ec_fsm_change_code; |
1869 return; |
1869 return; |
1870 } |
1870 } |
1871 |
1871 |
1872 if (get_cycles() - fsm->change_start >= (cycles_t) 10 * cpu_khz) { |
1872 if (jiffies - fsm->change_jiffies >= 100 * HZ / 1000) { // 100ms |
1873 // timeout while checking |
1873 // timeout while checking |
1874 fsm->change_state = ec_fsm_error; |
1874 fsm->change_state = ec_fsm_error; |
1875 EC_ERR("Timeout while setting state 0x%02X on slave %i.\n", |
1875 EC_ERR("Timeout while setting state 0x%02X on slave %i.\n", |
1876 fsm->change_new, slave->ring_position); |
1876 fsm->change_new, slave->ring_position); |
1877 return; |
1877 return; |
1976 fsm->change_state = ec_fsm_error; |
1976 fsm->change_state = ec_fsm_error; |
1977 EC_ERR("Reception of state ack datagram failed.\n"); |
1977 EC_ERR("Reception of state ack datagram failed.\n"); |
1978 return; |
1978 return; |
1979 } |
1979 } |
1980 |
1980 |
1981 fsm->change_start = get_cycles(); |
1981 fsm->change_jiffies = jiffies; |
1982 |
1982 |
1983 // read new AL status |
1983 // read new AL status |
1984 ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); |
1984 ec_datagram_nprd(datagram, slave->station_address, 0x0130, 2); |
1985 ec_master_queue_datagram(fsm->master, datagram); |
1985 ec_master_queue_datagram(fsm->master, datagram); |
1986 fsm->change_state = ec_fsm_change_check_ack; |
1986 fsm->change_state = ec_fsm_change_check_ack; |
2012 EC_INFO("Acknowleged state 0x%02X on slave %i.\n", |
2012 EC_INFO("Acknowleged state 0x%02X on slave %i.\n", |
2013 slave->current_state, slave->ring_position); |
2013 slave->current_state, slave->ring_position); |
2014 return; |
2014 return; |
2015 } |
2015 } |
2016 |
2016 |
2017 if (get_cycles() - fsm->change_start >= (cycles_t) 100 * cpu_khz) { |
2017 if (jiffies - fsm->change_jiffies >= 100 * HZ / 1000) { // 100ms |
2018 // timeout while checking |
2018 // timeout while checking |
2019 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
2019 slave->current_state = EC_SLAVE_STATE_UNKNOWN; |
2020 fsm->change_state = ec_fsm_error; |
2020 fsm->change_state = ec_fsm_error; |
2021 EC_ERR("Timeout while acknowleging state 0x%02X on slave %i.\n", |
2021 EC_ERR("Timeout while acknowleging state 0x%02X on slave %i.\n", |
2022 fsm->change_new, slave->ring_position); |
2022 fsm->change_new, slave->ring_position); |