master/fsm_coe.c
changeset 1035 7fafc1a7451e
parent 998 05a24788f3b2
child 1037 59f191c9185b
equal deleted inserted replaced
1034:36cd81362f10 1035:7fafc1a7451e
  1022     if (slave->master->debug_level) {
  1022     if (slave->master->debug_level) {
  1023         EC_DBG("Download request:\n");
  1023         EC_DBG("Download request:\n");
  1024         ec_print_data(data, 10 + request->data_size);
  1024         ec_print_data(data, 10 + request->data_size);
  1025     }
  1025     }
  1026 
  1026 
       
  1027     fsm->request->jiffies_sent = jiffies;
  1027     fsm->retries = EC_FSM_RETRIES;
  1028     fsm->retries = EC_FSM_RETRIES;
  1028     fsm->state = ec_fsm_coe_down_request;
  1029     fsm->state = ec_fsm_coe_down_request;
  1029 }
  1030 }
  1030 
  1031 
  1031 /*****************************************************************************/
  1032 /*****************************************************************************/
  1050                slave->ring_position, datagram->state);
  1051                slave->ring_position, datagram->state);
  1051         return;
  1052         return;
  1052     }
  1053     }
  1053 
  1054 
  1054     if (datagram->working_counter != 1) {
  1055     if (datagram->working_counter != 1) {
       
  1056         if (!datagram->working_counter) {
       
  1057             unsigned long diff_ms =
       
  1058                 (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
       
  1059             if (diff_ms < fsm->request->response_timeout) {
       
  1060                 if (fsm->slave->master->debug_level) {
       
  1061                     EC_DBG("Slave %u did no respond to Sdo download request. "
       
  1062                             "Retrying after %u ms...\n",
       
  1063                             slave->ring_position, (u32) diff_ms);
       
  1064                     // no response; send request datagram again
       
  1065                     return;
       
  1066                 }
       
  1067             }
       
  1068         }
  1055         fsm->state = ec_fsm_coe_error;
  1069         fsm->state = ec_fsm_coe_error;
  1056         EC_ERR("Reception of CoE download request failed on slave %u: ",
  1070         EC_ERR("Reception of CoE download request failed on slave %u: ",
  1057                 slave->ring_position);
  1071                 slave->ring_position);
  1058         ec_datagram_print_wc_error(datagram);
  1072         ec_datagram_print_wc_error(datagram);
  1059         return;
  1073         return;
  1251     if (master->debug_level) {
  1265     if (master->debug_level) {
  1252         EC_DBG("Upload request:\n");
  1266         EC_DBG("Upload request:\n");
  1253         ec_print_data(data, 10);
  1267         ec_print_data(data, 10);
  1254     }
  1268     }
  1255 
  1269 
       
  1270     fsm->request->jiffies_sent = jiffies;
  1256     fsm->retries = EC_FSM_RETRIES;
  1271     fsm->retries = EC_FSM_RETRIES;
  1257     fsm->state = ec_fsm_coe_up_request;
  1272     fsm->state = ec_fsm_coe_up_request;
  1258 }
  1273 }
  1259 
  1274 
  1260 /*****************************************************************************/
  1275 /*****************************************************************************/
  1279                slave->ring_position, datagram->state);
  1294                slave->ring_position, datagram->state);
  1280         return;
  1295         return;
  1281     }
  1296     }
  1282 
  1297 
  1283     if (datagram->working_counter != 1) {
  1298     if (datagram->working_counter != 1) {
       
  1299         if (!datagram->working_counter) {
       
  1300             unsigned long diff_ms =
       
  1301                 (jiffies - fsm->request->jiffies_sent) * 1000 / HZ;
       
  1302             if (diff_ms < fsm->request->response_timeout) {
       
  1303                 if (fsm->slave->master->debug_level) {
       
  1304                     EC_DBG("Slave %u did no respond to Sdo upload request. "
       
  1305                             "Retrying after %u ms...\n",
       
  1306                             slave->ring_position, (u32) diff_ms);
       
  1307                     // no response; send request datagram again
       
  1308                     return;
       
  1309                 }
       
  1310             }
       
  1311         }
  1284         fsm->state = ec_fsm_coe_error;
  1312         fsm->state = ec_fsm_coe_error;
  1285         EC_ERR("Reception of CoE upload request failed on slave %u: ",
  1313         EC_ERR("Reception of CoE upload request failed on slave %u: ",
  1286                 slave->ring_position);
  1314                 slave->ring_position);
  1287         ec_datagram_print_wc_error(datagram);
  1315         ec_datagram_print_wc_error(datagram);
  1288         return;
  1316         return;