equal
deleted
inserted
replaced
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)*/ |
145 (*d->transfers[id].Callback)(d,d->transfers[id].nodeId); |
145 (*d->transfers[id].Callback)(d,d->transfers[id].nodeId); |
146 else if(d->transfers[id].whoami == SDO_SERVER) |
146 else if(d->transfers[id].whoami == SDO_SERVER) |
147 /*Else, if server, reset the line*/ |
147 /*Else, if server, reset the line*/ |
|
148 |
|
149 /*Reset the line if (whoami == SDO_SERVER) or the callback did not close the line. |
|
150 Otherwise this sdo transfer would never be closed. */ |
148 resetSDOline(d, (UNS8)id); |
151 resetSDOline(d, (UNS8)id); |
149 } |
152 } |
150 |
153 |
151 #define StopSDO_TIMER(id) \ |
154 #define StopSDO_TIMER(id) \ |
152 MSG_WAR(0x3A05, "StopSDO_TIMER for line : ", line);\ |
155 MSG_WAR(0x3A05, "StopSDO_TIMER for line : ", line);\ |
518 ** |
521 ** |
519 ** |
522 ** |
520 ** @param d |
523 ** @param d |
521 ** @param nodeId |
524 ** @param nodeId |
522 ** @param whoami |
525 ** @param whoami |
|
526 ** @param line |
|
527 ** |
|
528 ** @return |
|
529 **/ |
|
530 UNS8 getSDOlineToClose (CO_Data* d, UNS8 nodeId, UNS8 whoami, UNS8 *line) |
|
531 { |
|
532 |
|
533 UNS8 i; |
|
534 |
|
535 for (i = 0 ; i < SDO_MAX_SIMULTANEOUS_TRANSFERTS ; i++){ |
|
536 if ( (d->transfers[i].state != SDO_RESET) && |
|
537 (d->transfers[i].nodeId == nodeId) && |
|
538 (d->transfers[i].whoami == whoami) ) { |
|
539 if (line) *line = i; |
|
540 return 0; |
|
541 } |
|
542 } |
|
543 return 0xFF; |
|
544 } |
|
545 |
|
546 |
|
547 /*! |
|
548 ** |
|
549 ** |
|
550 ** @param d |
|
551 ** @param nodeId |
|
552 ** @param whoami |
523 ** |
553 ** |
524 ** @return |
554 ** @return |
525 **/ |
555 **/ |
526 UNS8 closeSDOtransfer (CO_Data* d, UNS8 nodeId, UNS8 whoami) |
556 UNS8 closeSDOtransfer (CO_Data* d, UNS8 nodeId, UNS8 whoami) |
527 { |
557 { |
528 UNS8 err; |
558 UNS8 err; |
529 UNS8 line; |
559 UNS8 line; |
530 err = getSDOlineOnUse(d, nodeId, whoami, &line); |
560 err = getSDOlineToClose(d, nodeId, whoami, &line); |
531 if (err) { |
561 if (err) { |
532 MSG_WAR(0x2A30, "No SDO communication to close for node : ", nodeId); |
562 MSG_WAR(0x2A30, "No SDO communication to close for node : ", nodeId); |
533 return 0xFF; |
563 return 0xFF; |
534 } |
564 } |
535 resetSDOline(d, line); |
565 resetSDOline(d, line); |