src/sdo.c
changeset 499 061f12bd838b
parent 495 b2d6307a89fa
child 501 9bec3864a891
equal deleted inserted replaced
498:aae8531341df 499:061f12bd838b
   134     /* Reset timer handler */
   134     /* Reset timer handler */
   135     d->transfers[id].timer = TIMER_NONE;
   135     d->transfers[id].timer = TIMER_NONE;
   136     /*Set aborted state*/
   136     /*Set aborted state*/
   137     d->transfers[id].state = SDO_ABORTED_INTERNAL;
   137     d->transfers[id].state = SDO_ABORTED_INTERNAL;
   138     /* Sending a SDO abort */
   138     /* Sending a SDO abort */
   139     sendSDOabort(d, d->transfers[id].whoami, 
   139     sendSDOabort(d, d->transfers[id].whoami, d->transfers[id].nodeId,
   140 		 d->transfers[id].index, d->transfers[id].subIndex, SDOABT_TIMED_OUT);
   140 		 d->transfers[id].index, d->transfers[id].subIndex, SDOABT_TIMED_OUT);
   141     d->transfers[id].abortCode = SDOABT_TIMED_OUT;
   141     d->transfers[id].abortCode = SDOABT_TIMED_OUT;
   142     /* Call the user function to inform of the problem.*/
   142     /* Call the user function to inform of the problem.*/
   143     if(d->transfers[id].Callback)
   143     if(d->transfers[id].Callback)
   144     	/*If ther is a callback, it is responsible to close SDO transfer (client)*/
   144     	/*If ther is a callback, it is responsible to close SDO transfer (client)*/
   310   if ((! err) && (whoami == SDO_CLIENT)) {
   310   if ((! err) && (whoami == SDO_CLIENT)) {
   311     StopSDO_TIMER(line);
   311     StopSDO_TIMER(line);
   312     d->transfers[line].state = SDO_ABORTED_INTERNAL;
   312     d->transfers[line].state = SDO_ABORTED_INTERNAL;
   313   }
   313   }
   314   MSG_WAR(0x3A22, "Sending SDO abort ", 0);
   314   MSG_WAR(0x3A22, "Sending SDO abort ", 0);
   315   err = sendSDOabort(d, whoami, index, subIndex, abortCode);
   315   err = sendSDOabort(d, whoami, nodeId, index, subIndex, abortCode);
   316   if (err) {
   316   if (err) {
   317     MSG_WAR(0x3A23, "Unable to send the SDO abort", 0);
   317     MSG_WAR(0x3A23, "Unable to send the SDO abort", 0);
   318     return 0xFF;
   318     return 0xFF;
   319   }
   319   }
   320   return 0;
   320   return 0;
   564 ** @param subIndex                                                                                 
   564 ** @param subIndex                                                                                 
   565 ** @param abortCode                                                                                
   565 ** @param abortCode                                                                                
   566 **                                                                                                 
   566 **                                                                                                 
   567 ** @return                                                                                         
   567 ** @return                                                                                         
   568 **/   
   568 **/   
   569 UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS16 index, UNS8 subIndex, UNS32 abortCode)
   569 UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS8 nodeID, UNS16 index, UNS8 subIndex, UNS32 abortCode)
   570 {
   570 {
   571   s_SDO sdo;
   571   s_SDO sdo;
   572   UNS8 ret;
   572   UNS8 ret;
       
   573   UNS8* pNodeIdServer;
       
   574   UNS8 nodeIdServer;
       
   575   UNS16 offset;
       
   576   
   573   MSG_WAR(0x2A50,"Sending SDO abort ", abortCode);
   577   MSG_WAR(0x2A50,"Sending SDO abort ", abortCode);
   574   sdo.nodeId = *d->bDeviceNodeId;
   578   if(whoami == SDO_SERVER)
       
   579   {
       
   580 	sdo.nodeId = *d->bDeviceNodeId;
       
   581   }
       
   582   else
       
   583   {
       
   584     sdo.nodeId = nodeID;
       
   585   }
   575   sdo.body.data[0] = 0x80;
   586   sdo.body.data[0] = 0x80;
   576   /* Index */
   587   /* Index */
   577   sdo.body.data[1] = index & 0xFF; /* LSB */
   588   sdo.body.data[1] = index & 0xFF; /* LSB */
   578   sdo.body.data[2] = (index >> 8) & 0xFF; /* MSB */
   589   sdo.body.data[2] = (index >> 8) & 0xFF; /* MSB */
   579   /* Subindex */
   590   /* Subindex */
  1524 {
  1535 {
  1525   UNS8 i;
  1536   UNS8 i;
  1526   UNS8 err;
  1537   UNS8 err;
  1527   UNS8 line;
  1538   UNS8 line;
  1528   * size = 0;
  1539   * size = 0;
       
  1540   * abortCode = 0;
  1529 
  1541 
  1530   /* Looking for the line tranfert. */
  1542   /* Looking for the line tranfert. */
  1531   err = getSDOlineOnUse(d, nodeId, SDO_CLIENT, &line);
  1543   err = getSDOlineOnUse(d, nodeId, SDO_CLIENT, &line);
  1532   if (err) {
  1544   if (err) {
  1533     MSG_ERR(0x1AF0, "SDO error : No line found for communication with node : ", nodeId); 
  1545     MSG_ERR(0x1AF0, "SDO error : No line found for communication with node : ", nodeId); 
  1548       ( (char *) data)[i] = d->transfers[line].data[i];
  1560       ( (char *) data)[i] = d->transfers[line].data[i];
  1549 # else 
  1561 # else 
  1550     ( (char *) data)[i] = d->transfers[line].data[i];
  1562     ( (char *) data)[i] = d->transfers[line].data[i];
  1551 # endif
  1563 # endif
  1552   } 
  1564   } 
       
  1565   * abortCode = d->transfers[line].abortCode;
  1553   return SDO_FINISHED;
  1566   return SDO_FINISHED;
  1554 }
  1567 }
  1555 
  1568 
  1556 /*!                                                                                                
  1569 /*!                                                                                                
  1557 **                                                                                                 
  1570 **