src/sdo.c
changeset 656 f923456f01e5
parent 651 2a36570aa68c
child 657 c0e68a63f600
equal deleted inserted replaced
655:ea1ddcc77acf 656:f923456f01e5
   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);