master/fsm_coe.c
changeset 1822 74e6ac2369f4
parent 1794 94e0e1756dec
child 1831 1875b9fea0ba
equal deleted inserted replaced
1821:40321a37d085 1822:74e6ac2369f4
   325         return; // FIXME: request again?
   325         return; // FIXME: request again?
   326 
   326 
   327     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   327     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   328         fsm->state = ec_fsm_coe_error;
   328         fsm->state = ec_fsm_coe_error;
   329         EC_ERR("Failed to receive CoE dictionary request datagram for"
   329         EC_ERR("Failed to receive CoE dictionary request datagram for"
   330                " slave %u (datagram state %u).\n",
   330                " slave %u: ", slave->ring_position);
   331                slave->ring_position, datagram->state);
   331         ec_datagram_print_state(datagram);
   332         return;
   332         return;
   333     }
   333     }
   334 
   334 
   335     if (datagram->working_counter != 1) {
   335     if (datagram->working_counter != 1) {
   336         fsm->state = ec_fsm_coe_error;
   336         fsm->state = ec_fsm_coe_error;
   361     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   361     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   362         return;
   362         return;
   363 
   363 
   364     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   364     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   365         fsm->state = ec_fsm_coe_error;
   365         fsm->state = ec_fsm_coe_error;
   366         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u"
   366         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u: ",
   367                 " (datagram state %u).\n",
   367                slave->ring_position);
   368                slave->ring_position, datagram->state);
   368         ec_datagram_print_state(datagram);
   369         return;
   369         return;
   370     }
   370     }
   371 
   371 
   372     if (datagram->working_counter != 1) {
   372     if (datagram->working_counter != 1) {
   373         fsm->state = ec_fsm_coe_error;
   373         fsm->state = ec_fsm_coe_error;
   419         return; // FIXME: request again?
   419         return; // FIXME: request again?
   420 
   420 
   421     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   421     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   422         fsm->state = ec_fsm_coe_error;
   422         fsm->state = ec_fsm_coe_error;
   423         EC_ERR("Failed to receive CoE dictionary response datagram for"
   423         EC_ERR("Failed to receive CoE dictionary response datagram for"
   424                " slave %u (datagram state %u).\n",
   424                " slave %u: ", slave->ring_position);
   425                slave->ring_position, datagram->state);
   425         ec_datagram_print_state(datagram);
   426         return;
   426         return;
   427     }
   427     }
   428 
   428 
   429     if (datagram->working_counter != 1) {
   429     if (datagram->working_counter != 1) {
   430         fsm->state = ec_fsm_coe_error;
   430         fsm->state = ec_fsm_coe_error;
   570         return; // FIXME: check for response first?
   570         return; // FIXME: check for response first?
   571 
   571 
   572     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   572     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   573         fsm->state = ec_fsm_coe_error;
   573         fsm->state = ec_fsm_coe_error;
   574         EC_ERR("Failed to receive CoE SDO description request datagram for"
   574         EC_ERR("Failed to receive CoE SDO description request datagram for"
   575                " slave %u (datagram state %u).\n",
   575                " slave %u: ", slave->ring_position);
   576                slave->ring_position, datagram->state);
   576         ec_datagram_print_state(datagram);
   577         return;
   577         return;
   578     }
   578     }
   579 
   579 
   580     if (datagram->working_counter != 1) {
   580     if (datagram->working_counter != 1) {
   581         fsm->state = ec_fsm_coe_error;
   581         fsm->state = ec_fsm_coe_error;
   606     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   606     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
   607         return;
   607         return;
   608 
   608 
   609     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   609     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   610         fsm->state = ec_fsm_coe_error;
   610         fsm->state = ec_fsm_coe_error;
   611         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u"
   611         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u: ",
   612                 " (datagram state %u).\n",
   612                 slave->ring_position);
   613                 slave->ring_position, datagram->state);
   613         ec_datagram_print_state(datagram);
   614         return;
   614         return;
   615     }
   615     }
   616 
   616 
   617     if (datagram->working_counter != 1) {
   617     if (datagram->working_counter != 1) {
   618         fsm->state = ec_fsm_coe_error;
   618         fsm->state = ec_fsm_coe_error;
   664         return; // FIXME: request again?
   664         return; // FIXME: request again?
   665 
   665 
   666     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   666     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   667         fsm->state = ec_fsm_coe_error;
   667         fsm->state = ec_fsm_coe_error;
   668         EC_ERR("Failed to receive CoE SDO description response datagram from"
   668         EC_ERR("Failed to receive CoE SDO description response datagram from"
   669                " slave %u (datagram state %u).\n",
   669                " slave %u: ", slave->ring_position);
   670                slave->ring_position, datagram->state);
   670         ec_datagram_print_state(datagram);
   671         return;
   671         return;
   672     }
   672     }
   673 
   673 
   674     if (datagram->working_counter != 1) {
   674     if (datagram->working_counter != 1) {
   675         fsm->state = ec_fsm_coe_error;
   675         fsm->state = ec_fsm_coe_error;
   806         return; // FIXME: check for response first?
   806         return; // FIXME: check for response first?
   807 
   807 
   808     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   808     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   809         fsm->state = ec_fsm_coe_error;
   809         fsm->state = ec_fsm_coe_error;
   810         EC_ERR("Failed to receive CoE SDO entry request datagram for"
   810         EC_ERR("Failed to receive CoE SDO entry request datagram for"
   811                " slave %u (datagram state %u).\n",
   811                " slave %u: ", slave->ring_position);
   812                slave->ring_position, datagram->state);
   812         ec_datagram_print_state(datagram);
   813         return;
   813         return;
   814     }
   814     }
   815 
   815 
   816     if (datagram->working_counter != 1) {
   816     if (datagram->working_counter != 1) {
   817         fsm->state = ec_fsm_coe_error;
   817         fsm->state = ec_fsm_coe_error;
   844         return;
   844         return;
   845 
   845 
   846     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   846     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   847         fsm->state = ec_fsm_coe_error;
   847         fsm->state = ec_fsm_coe_error;
   848         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u"
   848         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u"
   849                 " (datagram state %u).\n",
   849                 ": ", slave->ring_position);
   850                slave->ring_position, datagram->state);
   850         ec_datagram_print_state(datagram);
   851         return;
   851         return;
   852     }
   852     }
   853 
   853 
   854     if (datagram->working_counter != 1) {
   854     if (datagram->working_counter != 1) {
   855         fsm->state = ec_fsm_coe_error;
   855         fsm->state = ec_fsm_coe_error;
   903         return; // FIXME: request again?
   903         return; // FIXME: request again?
   904 
   904 
   905     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   905     if (datagram->state != EC_DATAGRAM_RECEIVED) {
   906         fsm->state = ec_fsm_coe_error;
   906         fsm->state = ec_fsm_coe_error;
   907         EC_ERR("Failed to receive CoE SDO description response datagram from"
   907         EC_ERR("Failed to receive CoE SDO description response datagram from"
   908                " slave %u (datagram state %u).\n",
   908                " slave %u: ", slave->ring_position);
   909                slave->ring_position, datagram->state);
   909         ec_datagram_print_state(datagram);
   910         return;
   910         return;
   911     }
   911     }
   912 
   912 
   913     if (datagram->working_counter != 1) {
   913     if (datagram->working_counter != 1) {
   914         fsm->state = ec_fsm_coe_error;
   914         fsm->state = ec_fsm_coe_error;
  1207         return; // FIXME: check for response first?
  1207         return; // FIXME: check for response first?
  1208 
  1208 
  1209     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1209     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1210         fsm->state = ec_fsm_coe_error;
  1210         fsm->state = ec_fsm_coe_error;
  1211         EC_ERR("Failed to receive CoE download request datagram for"
  1211         EC_ERR("Failed to receive CoE download request datagram for"
  1212                " slave %u (datagram state %u).\n",
  1212                " slave %u: ", slave->ring_position);
  1213                slave->ring_position, datagram->state);
  1213         ec_datagram_print_state(datagram);
  1214         return;
  1214         return;
  1215     }
  1215     }
  1216 
  1216 
  1217     diff_ms = (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
  1217     diff_ms = (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
  1218 
  1218 
  1268     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1268     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1269         return;
  1269         return;
  1270 
  1270 
  1271     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1271     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1272         fsm->state = ec_fsm_coe_error;
  1272         fsm->state = ec_fsm_coe_error;
  1273         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u"
  1273         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u: ",
  1274                 " (datagram state %u).\n",
  1274                 slave->ring_position);
  1275                slave->ring_position, datagram->state);
  1275         ec_datagram_print_state(datagram);
  1276         return;
  1276         return;
  1277     }
  1277     }
  1278 
  1278 
  1279     if (datagram->working_counter != 1) {
  1279     if (datagram->working_counter != 1) {
  1280         fsm->state = ec_fsm_coe_error;
  1280         fsm->state = ec_fsm_coe_error;
  1389         return; // FIXME: request again?
  1389         return; // FIXME: request again?
  1390 
  1390 
  1391     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1391     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1392         fsm->state = ec_fsm_coe_error;
  1392         fsm->state = ec_fsm_coe_error;
  1393         EC_ERR("Failed to receive CoE download response datagram from"
  1393         EC_ERR("Failed to receive CoE download response datagram from"
  1394                " slave %u (datagram state %u).\n",
  1394                " slave %u: ", slave->ring_position);
  1395                slave->ring_position, datagram->state);
  1395         ec_datagram_print_state(datagram);
  1396         return;
  1396         return;
  1397     }
  1397     }
  1398 
  1398 
  1399     if (datagram->working_counter != 1) {
  1399     if (datagram->working_counter != 1) {
  1400         fsm->state = ec_fsm_coe_error;
  1400         fsm->state = ec_fsm_coe_error;
  1496     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1496     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1497         return;
  1497         return;
  1498 
  1498 
  1499     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1499     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1500         fsm->state = ec_fsm_coe_error;
  1500         fsm->state = ec_fsm_coe_error;
  1501         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u"
  1501         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u: ",
  1502                 " (datagram state %u).\n",
  1502                slave->ring_position);
  1503                slave->ring_position, datagram->state);
  1503         ec_datagram_print_state(datagram);
  1504         return;
  1504         return;
  1505     }
  1505     }
  1506 
  1506 
  1507     if (datagram->working_counter != 1) {
  1507     if (datagram->working_counter != 1) {
  1508         fsm->state = ec_fsm_coe_error;
  1508         fsm->state = ec_fsm_coe_error;
  1554         return; // FIXME: request again?
  1554         return; // FIXME: request again?
  1555 
  1555 
  1556     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1556     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1557         fsm->state = ec_fsm_coe_error;
  1557         fsm->state = ec_fsm_coe_error;
  1558         EC_ERR("Failed to receive CoE download response datagram from"
  1558         EC_ERR("Failed to receive CoE download response datagram from"
  1559                " slave %u (datagram state %u).\n",
  1559                " slave %u: ", slave->ring_position);
  1560                slave->ring_position, datagram->state);
  1560         ec_datagram_print_state(datagram);
  1561         return;
  1561         return;
  1562     }
  1562     }
  1563 
  1563 
  1564     if (datagram->working_counter != 1) {
  1564     if (datagram->working_counter != 1) {
  1565         fsm->state = ec_fsm_coe_error;
  1565         fsm->state = ec_fsm_coe_error;
  1714     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1714     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1715         return; // FIXME: check for response first?
  1715         return; // FIXME: check for response first?
  1716 
  1716 
  1717     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1717     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1718         fsm->state = ec_fsm_coe_error;
  1718         fsm->state = ec_fsm_coe_error;
  1719         EC_ERR("Failed to receive CoE upload request for slave %u"
  1719         EC_ERR("Failed to receive CoE upload request for slave %u: ",
  1720                 " (datagram state %u).\n",
  1720                slave->ring_position);
  1721                slave->ring_position, datagram->state);
  1721         ec_datagram_print_state(datagram);
  1722         return;
  1722         return;
  1723     }
  1723     }
  1724 
  1724 
  1725     diff_ms = (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
  1725     diff_ms = (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
  1726 
  1726 
  1776     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1776     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  1777         return;
  1777         return;
  1778 
  1778 
  1779     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1779     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1780         fsm->state = ec_fsm_coe_error;
  1780         fsm->state = ec_fsm_coe_error;
  1781         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u"
  1781         EC_ERR("Failed to receive CoE mailbox check datagram from slave %u: ",
  1782                 " (datagram state %u).\n",
  1782                slave->ring_position);
  1783                slave->ring_position, datagram->state);
  1783         ec_datagram_print_state(datagram);
  1784         return;
  1784         return;
  1785     }
  1785     }
  1786 
  1786 
  1787     if (datagram->working_counter != 1) {
  1787     if (datagram->working_counter != 1) {
  1788         fsm->state = ec_fsm_coe_error;
  1788         fsm->state = ec_fsm_coe_error;
  1863         return; // FIXME: request again?
  1863         return; // FIXME: request again?
  1864 
  1864 
  1865     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1865     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  1866         fsm->state = ec_fsm_coe_error;
  1866         fsm->state = ec_fsm_coe_error;
  1867         EC_ERR("Failed to receive CoE upload response datagram for"
  1867         EC_ERR("Failed to receive CoE upload response datagram for"
  1868                " slave %u (datagram state %u).\n",
  1868                " slave %u: ", slave->ring_position);
  1869                slave->ring_position, datagram->state);
  1869         ec_datagram_print_state(datagram);
  1870         return;
  1870         return;
  1871     }
  1871     }
  1872 
  1872 
  1873     if (datagram->working_counter != 1) {
  1873     if (datagram->working_counter != 1) {
  1874         fsm->state = ec_fsm_coe_error;
  1874         fsm->state = ec_fsm_coe_error;
  2041         return; // FIXME: check for response first?
  2041         return; // FIXME: check for response first?
  2042 
  2042 
  2043     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2043     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2044         fsm->state = ec_fsm_coe_error;
  2044         fsm->state = ec_fsm_coe_error;
  2045         EC_ERR("Failed to receive CoE upload segment request datagram for"
  2045         EC_ERR("Failed to receive CoE upload segment request datagram for"
  2046                " slave %u (datagram state %u).\n",
  2046                " slave %u: ", slave->ring_position);
  2047                slave->ring_position, datagram->state);
  2047         ec_datagram_print_state(datagram);
  2048         return;
  2048         return;
  2049     }
  2049     }
  2050 
  2050 
  2051     if (datagram->working_counter != 1) {
  2051     if (datagram->working_counter != 1) {
  2052         fsm->state = ec_fsm_coe_error;
  2052         fsm->state = ec_fsm_coe_error;
  2077     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  2077     if (datagram->state == EC_DATAGRAM_TIMED_OUT && fsm->retries--)
  2078         return;
  2078         return;
  2079 
  2079 
  2080     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2080     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2081         fsm->state = ec_fsm_coe_error;
  2081         fsm->state = ec_fsm_coe_error;
  2082         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u"
  2082         EC_ERR("Failed to receive CoE mailbox check datagram for slave %u: ",
  2083                 " (datagram state %u).\n",
  2083                slave->ring_position);
  2084                slave->ring_position, datagram->state);
  2084         ec_datagram_print_state(datagram);
  2085         return;
  2085         return;
  2086     }
  2086     }
  2087 
  2087 
  2088     if (datagram->working_counter != 1) {
  2088     if (datagram->working_counter != 1) {
  2089         fsm->state = ec_fsm_coe_error;
  2089         fsm->state = ec_fsm_coe_error;
  2135         return; // FIXME: request again?
  2135         return; // FIXME: request again?
  2136 
  2136 
  2137     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2137     if (datagram->state != EC_DATAGRAM_RECEIVED) {
  2138         fsm->state = ec_fsm_coe_error;
  2138         fsm->state = ec_fsm_coe_error;
  2139         EC_ERR("Failed to receive CoE upload segment response datagram for"
  2139         EC_ERR("Failed to receive CoE upload segment response datagram for"
  2140                " slave %u (datagram state %u).\n",
  2140                " slave %u: ", slave->ring_position);
  2141                slave->ring_position, datagram->state);
  2141         ec_datagram_print_state(datagram);
  2142         return;
  2142         return;
  2143     }
  2143     }
  2144 
  2144 
  2145     if (datagram->working_counter != 1) {
  2145     if (datagram->working_counter != 1) {
  2146         fsm->state = ec_fsm_coe_error;
  2146         fsm->state = ec_fsm_coe_error;