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); |