src/dcf.c
changeset 204 44ce74232ccb
parent 202 9cfd9211616c
child 207 b6572d0336c3
equal deleted inserted replaced
203:55be5b85501c 204:44ce74232ccb
    22 
    22 
    23 #include "objacces.h"
    23 #include "objacces.h"
    24 #include "sdo.h"
    24 #include "sdo.h"
    25 #include "dcf.h"
    25 #include "dcf.h"
    26 #include "sysdep.h"
    26 #include "sysdep.h"
       
    27 
       
    28 
       
    29 extern UNS8 _writeNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index, 
       
    30 		       UNS8 subIndex, UNS8 count, UNS8 dataType, void *data, SDOCallback_t Callback, UNS8 endianize);
    27 
    31 
    28 const indextable *ptrTable;
    32 const indextable *ptrTable;
    29 
    33 
    30 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
    34 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId)
    31 {
    35 {
    59 		/*Loop on all Nodes supported in DCF subindexes*/
    63 		/*Loop on all Nodes supported in DCF subindexes*/
    60 		while (nodeId < ptrTable->bSubCount){
    64 		while (nodeId < ptrTable->bSubCount){
    61 			UNS32 nb_targets;
    65 			UNS32 nb_targets;
    62 	  		
    66 	  		
    63 	  		UNS8 szData = ptrTable->pSubindex[nodeId].size;
    67 	  		UNS8 szData = ptrTable->pSubindex[nodeId].size;
    64 	  		void* dcfend;
    68 	  		UNS8* dcfend;
    65 	  		
    69 	  		
    66 		  	{
    70 		  	{
    67 			  	void* dcf = *((void**)ptrTable->pSubindex[nodeId].pObject);
    71 			  	UNS8* dcf = *((UNS8**)ptrTable->pSubindex[nodeId].pObject);
    68 		  		dcfend = dcf + szData;
    72 		  		dcfend = dcf + szData;
    69 				if (!d->dcf_cursor)	{
    73 				if (!d->dcf_cursor)	{
    70 					d->dcf_cursor = dcf + 4;
    74 					d->dcf_cursor = (UNS8*)dcf + 4;
    71 					d->dcf_count_targets = 0;
    75 					d->dcf_count_targets = 0;
    72 				}
    76 				}
    73 				nb_targets = UNS32_LE(*((UNS32*)dcf));
    77 				nb_targets = UNS32_LE(*((UNS32*)dcf));
    74 		  	}
    78 		  	}
    75 			
    79 			
    76 			// condition on consise DCF string for NodeID, if big enough
    80 			// condition on consise DCF string for NodeID, if big enough
    77 			if(d->dcf_cursor + 7 < dcfend && d->dcf_count_targets < nb_targets)
    81 			if((UNS8*)d->dcf_cursor + 7 < (UNS8*)dcfend && d->dcf_count_targets < nb_targets)
    78 			{
    82 			{
    79 				// pointer to the DCF string for NodeID
    83 				// pointer to the DCF string for NodeID
    80 				target_Index = UNS16_LE(*((UNS16*)(d->dcf_cursor))); d->dcf_cursor += 2;
    84 				target_Index = UNS16_LE(*((UNS16*)(d->dcf_cursor))); d->dcf_cursor += 2;
    81 				target_Subindex = *((UNS8*)(d->dcf_cursor++));
    85 				target_Subindex = *((UNS8*)(((UNS8*)d->dcf_cursor)++));
    82 				target_Size = UNS32_LE(*((UNS32*)(d->dcf_cursor))); d->dcf_cursor += 4;
    86 				target_Size = UNS32_LE(*((UNS32*)(d->dcf_cursor))); d->dcf_cursor += 4;
    83 					
    87 					
    84 					/*printf("Master : ConfigureSlaveNode %2.2x (Concise DCF)\n",nodeId);*/
    88 					/*printf("Master : ConfigureSlaveNode %2.2x (Concise DCF)\n",nodeId);*/
    85 					res = _writeNetworkDict(d, /*CO_Data* d*/
    89 					res = _writeNetworkDict(d, /*CO_Data* d*/
    86 							nodeId, /*UNS8 nodeId*/
    90 							nodeId, /*UNS8 nodeId*/