master/fsm_coe.c
changeset 446 8fede404c01f
parent 436 63214beb641d
child 459 f0da52cf6b5b
equal deleted inserted replaced
445:3b7eec329112 446:8fede404c01f
   358         fsm->state = ec_fsm_coe_error;
   358         fsm->state = ec_fsm_coe_error;
   359         return;
   359         return;
   360     }
   360     }
   361 
   361 
   362     if (mbox_prot != 0x03) { // CoE
   362     if (mbox_prot != 0x03) { // CoE
   363         EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   363         EC_ERR("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   364         fsm->state = ec_fsm_coe_error;
   364         fsm->state = ec_fsm_coe_error;
   365 	return;
   365 	return;
   366     }
   366     }
   367 
   367 
   368     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   368     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   547         fsm->state = ec_fsm_coe_error;
   547         fsm->state = ec_fsm_coe_error;
   548         return;
   548         return;
   549     }
   549     }
   550 
   550 
   551     if (mbox_prot != 0x03) { // CoE
   551     if (mbox_prot != 0x03) { // CoE
   552         EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   552         EC_ERR("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   553         fsm->state = ec_fsm_coe_error;
   553         fsm->state = ec_fsm_coe_error;
   554 	return;
   554 	return;
   555     }
   555     }
   556 
   556 
   557     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   557     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   720         fsm->state = ec_fsm_coe_error;
   720         fsm->state = ec_fsm_coe_error;
   721         return;
   721         return;
   722     }
   722     }
   723 
   723 
   724     if (mbox_prot != 0x03) { // CoE
   724     if (mbox_prot != 0x03) { // CoE
   725         EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   725         EC_ERR("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   726         fsm->state = ec_fsm_coe_error;
   726         fsm->state = ec_fsm_coe_error;
   727 	return;
   727 	return;
   728     }
   728     }
   729 
   729 
   730     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   730     if (EC_READ_U16(data) >> 12 == 0x8 && // SDO information
   968         fsm->state = ec_fsm_coe_error;
   968         fsm->state = ec_fsm_coe_error;
   969         return;
   969         return;
   970     }
   970     }
   971 
   971 
   972     if (mbox_prot != 0x03) { // CoE
   972     if (mbox_prot != 0x03) { // CoE
   973         EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   973         EC_ERR("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
   974         fsm->state = ec_fsm_coe_error;
   974         fsm->state = ec_fsm_coe_error;
   975 	return;
   975 	return;
   976     }
   976     }
   977 
   977 
   978     if (rec_size < 6) {
   978     if (rec_size < 6) {
  1208         request->data = NULL;
  1208         request->data = NULL;
  1209     }
  1209     }
  1210     request->size = 0;
  1210     request->size = 0;
  1211 
  1211 
  1212     if (complete_size) {
  1212     if (complete_size) {
  1213         if (!(request->data = (uint8_t *) kmalloc(complete_size + 1, GFP_ATOMIC))) {
  1213         if (!(request->data = (uint8_t *)
  1214             EC_ERR("Failed to allocate %i bytes of SDO data!\n", complete_size);
  1214               kmalloc(complete_size + 1, GFP_ATOMIC))) {
       
  1215             EC_ERR("Failed to allocate %i bytes of SDO data!\n",
       
  1216                    complete_size);
  1215             fsm->state = ec_fsm_coe_error;
  1217             fsm->state = ec_fsm_coe_error;
  1216             return;
  1218             return;
  1217         }
  1219         }
  1218         request->data[complete_size] = 0x00; // just to be sure...
  1220         request->data[complete_size] = 0x00; // just to be sure...
  1219     }
  1221     }
  1226         memcpy(request->data, data + 10, data_size);
  1228         memcpy(request->data, data + 10, data_size);
  1227         request->size = data_size;
  1229         request->size = data_size;
  1228         fsm->toggle = 0;
  1230         fsm->toggle = 0;
  1229 
  1231 
  1230         if (data_size < complete_size) {
  1232         if (data_size < complete_size) {
  1231             EC_WARN("SDO data incomplete (%i / %i).\n", data_size, complete_size);
  1233             EC_WARN("SDO data incomplete (%i / %i).\n",
  1232 
  1234                     data_size, complete_size);
  1233             if (!(data = ec_slave_mbox_prepare_send(slave, datagram, 0x03, 3))) {
  1235 
       
  1236             if (!(data = ec_slave_mbox_prepare_send(slave, datagram,
       
  1237                                                     0x03, 3))) {
  1234                 fsm->state = ec_fsm_coe_error;
  1238                 fsm->state = ec_fsm_coe_error;
  1235                 return;
  1239                 return;
  1236             }
  1240             }
  1237 
  1241 
  1238             EC_WRITE_U16(data, 0x2 << 12); // SDO request
  1242             EC_WRITE_U16(data, 0x2 << 12); // SDO request
  1352         EC_DBG("Upload segment response:\n");
  1356         EC_DBG("Upload segment response:\n");
  1353         ec_print_data(data, rec_size);
  1357         ec_print_data(data, rec_size);
  1354     }
  1358     }
  1355 
  1359 
  1356     if (mbox_prot != 0x03) { // CoE
  1360     if (mbox_prot != 0x03) { // CoE
  1357         EC_WARN("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
  1361         EC_ERR("Received mailbox protocol 0x%02X as response.\n", mbox_prot);
  1358         fsm->state = ec_fsm_coe_error;
  1362         fsm->state = ec_fsm_coe_error;
  1359 	return;
  1363 	return;
  1360     }
  1364     }
  1361 
  1365 
  1362     if (rec_size < 10) {
  1366     if (rec_size < 10) {