src/dcf.c
changeset 478 4306e851d95c
parent 476 08cdcb021beb
child 587 c175351a6994
equal deleted inserted replaced
477:ec7654f71964 478:4306e851d95c
    41                                UNS8 subIndex, UNS8 count, UNS8 dataType, void *data, SDOCallback_t Callback, UNS8 endianize);
    41                                UNS8 subIndex, UNS8 count, UNS8 dataType, void *data, SDOCallback_t Callback, UNS8 endianize);
    42 
    42 
    43 
    43 
    44 static void send_consise_dcf_loop(CO_Data* d,UNS8 nodeId);
    44 static void send_consise_dcf_loop(CO_Data* d,UNS8 nodeId);
    45 
    45 
       
    46 /* Seek to next NodeID's DCF */
       
    47 #define SEEK_NEXT_DCF() \
       
    48    	nodeId=(nodeId+1) % d->dcf_odentry->bSubCount; \
       
    49    	if(nodeId==0) nodeId=1; \
       
    50    	d->dcf_cursor = NULL;
       
    51 
    46 /**
    52 /**
    47 **
    53 **
    48 **
    54 **
    49 ** @param d
    55 ** @param d
    50 ** @param nodeId
    56 ** @param nodeId
    51 */
    57 */
    52 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
    58 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
    53 {
    59 {
    54   UNS32 abortCode;
    60   UNS32 abortCode = 0;
    55 
    61 
    56   if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
    62   if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED)
    57     {
    63     {
    58       MSG_ERR(0x1A01, "SDO error in consise DCF", abortCode);
    64       MSG_ERR(0x1A01, "SDO error in consise DCF", abortCode);
    59       MSG_WAR(0x2A02, "server node : ", nodeId);
    65       MSG_WAR(0x2A02, "server node : ", nodeId);
    60     }
    66     }
    61 
    67 
    62   closeSDOtransfer(d, nodeId, SDO_CLIENT);
    68   closeSDOtransfer(d, nodeId, SDO_CLIENT);
       
    69   /* Timedout ? */
       
    70   if(abortCode == SDOABT_TIMED_OUT){
       
    71     /* Node may not be ready, try another one */
       
    72     /* Warning, this might leed to endless attempts */
       
    73     /* if node does never answer */
       
    74 	SEEK_NEXT_DCF()
       
    75   }
    63   send_consise_dcf_loop(d,nodeId);
    76   send_consise_dcf_loop(d,nodeId);
    64 }
    77 }
    65 
    78 
    66 
    79 
    67 /**
    80 /**
   180       		d->dcf_request--;
   193       		d->dcf_request--;
   181       		(*d->post_SlaveBootup)(d, nodeId);
   194       		(*d->post_SlaveBootup)(d, nodeId);
   182       	}
   195       	}
   183  	}
   196  	}
   184  	
   197  	
   185    	/* Check the next element*/
   198 	SEEK_NEXT_DCF()
   186    	nodeId=(nodeId+1) % d->dcf_odentry->bSubCount;
       
   187    	if(nodeId==0)nodeId=1;
       
   188    	d->dcf_cursor = NULL;
       
   189 
       
   190   }
   199   }
   191 
   200 
   192 }
   201 }