From: etisserant Date: Tue, 22 Jul 2008 21:48:48 +0000 (+0000) Subject: getReadResultNetworkDict now returns abortcode. Now, abort message should be sent... X-Git-Url: https://rtime.felk.cvut.cz/gitweb/CanFestival-3.git/commitdiff_plain/a3fb82d219b1a3c151310a3eca6fdeb2657798f9 getReadResultNetworkDict now returns abortcode. Now, abort message should be sent correctly from client. --- diff --git a/include/sdo.h b/include/sdo.h index 5f7e84b..b6bcdde 100644 --- a/include/sdo.h +++ b/include/sdo.h @@ -188,7 +188,7 @@ UNS8 sendSDO (CO_Data* d, UNS8 whoami, s_SDO sdo); * Write a read only object * whoami takes 2 values : SDO_CLIENT or SDO_SERVER */ -UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS16 index, UNS8 subIndex, UNS32 abortCode); +UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS8 nodeId, UNS16 index, UNS8 subIndex, UNS32 abortCode); /** Treat a SDO frame reception * bus_id is hardware dependant diff --git a/src/sdo.c b/src/sdo.c index 827bfcc..48af6da 100644 --- a/src/sdo.c +++ b/src/sdo.c @@ -136,7 +136,7 @@ void SDOTimeoutAlarm(CO_Data* d, UNS32 id) /*Set aborted state*/ d->transfers[id].state = SDO_ABORTED_INTERNAL; /* Sending a SDO abort */ - sendSDOabort(d, d->transfers[id].whoami, + sendSDOabort(d, d->transfers[id].whoami, d->transfers[id].nodeId, d->transfers[id].index, d->transfers[id].subIndex, SDOABT_TIMED_OUT); d->transfers[id].abortCode = SDOABT_TIMED_OUT; /* Call the user function to inform of the problem.*/ @@ -312,7 +312,7 @@ UNS8 failedSDO (CO_Data* d, UNS8 nodeId, UNS8 whoami, UNS16 index, d->transfers[line].state = SDO_ABORTED_INTERNAL; } MSG_WAR(0x3A22, "Sending SDO abort ", 0); - err = sendSDOabort(d, whoami, index, subIndex, abortCode); + err = sendSDOabort(d, whoami, nodeId, index, subIndex, abortCode); if (err) { MSG_WAR(0x3A23, "Unable to send the SDO abort", 0); return 0xFF; @@ -566,12 +566,23 @@ UNS8 sendSDO (CO_Data* d, UNS8 whoami, s_SDO sdo) ** ** @return **/ -UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS16 index, UNS8 subIndex, UNS32 abortCode) +UNS8 sendSDOabort (CO_Data* d, UNS8 whoami, UNS8 nodeID, UNS16 index, UNS8 subIndex, UNS32 abortCode) { s_SDO sdo; UNS8 ret; + UNS8* pNodeIdServer; + UNS8 nodeIdServer; + UNS16 offset; + MSG_WAR(0x2A50,"Sending SDO abort ", abortCode); - sdo.nodeId = *d->bDeviceNodeId; + if(whoami == SDO_SERVER) + { + sdo.nodeId = *d->bDeviceNodeId; + } + else + { + sdo.nodeId = nodeID; + } sdo.body.data[0] = 0x80; /* Index */ sdo.body.data[1] = index & 0xFF; /* LSB */ @@ -1526,6 +1537,7 @@ UNS8 getReadResultNetworkDict (CO_Data* d, UNS8 nodeId, void* data, UNS8 *size, UNS8 err; UNS8 line; * size = 0; + * abortCode = 0; /* Looking for the line tranfert. */ err = getSDOlineOnUse(d, nodeId, SDO_CLIENT, &line); @@ -1550,6 +1562,7 @@ UNS8 getReadResultNetworkDict (CO_Data* d, UNS8 nodeId, void* data, UNS8 *size, ( (char *) data)[i] = d->transfers[line].data[i]; # endif } + * abortCode = d->transfers[line].abortCode; return SDO_FINISHED; }