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*/ |