diff -r 003cc3c63855 -r f49e5a6b7804 doc/doxygen/html/dcf_8c-source.html --- a/doc/doxygen/html/dcf_8c-source.html Fri Jun 08 09:02:43 2007 +0200 +++ b/doc/doxygen/html/dcf_8c-source.html Fri Jun 08 09:23:56 2007 +0200 @@ -1,6 +1,6 @@
-00001 /* + +dcf.c
Go to the documentation of this file.00001 /* 00002 This file is part of CanFestival, a library implementing CanOpen 00003 Stack. 00004 @@ -40,91 +44,97 @@ 00023 */ 00024 00025 -00035 #include "objacces.h" -00036 #include "sdo.h" -00037 #include "dcf.h" -00038 #include "sysdep.h" -00039 -00040 -00054 extern UNS8 _writeNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index, -00055 UNS8 subIndex, UNS8 count, UNS8 dataType, void *data, SDOCallback_t Callback, UNS8 endianize); +00037 #include "objacces.h" +00038 #include "sdo.h" +00039 #include "dcf.h" +00040 #include "sysdep.h" +00041 +00042 extern UNS8 _writeNetworkDict (CO_Data* d, UNS8 nodeId, UNS16 index, +00043 UNS8 subIndex, UNS8 count, UNS8 dataType, void *data, SDOCallback_t Callback, UNS8 endianize); +00044 +00045 const indextable *ptrTable; +00046 +00053 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId) +00054 { +00055 UNS32 abortCode; 00056 -00057 const indextable *ptrTable; -00058 -00065 static void CheckSDOAndContinue(CO_Data* d, UNS8 nodeId) -00066 { -00067 UNS32 abortCode; -00068 -00069 if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) -00070 { -00071 MSG_ERR(0x1A01, "SDO error in consise DCF", abortCode); -00072 MSG_WAR(0x2A02, "server node : ", nodeId); -00073 } -00074 -00075 closeSDOtransfer(d, nodeId, SDO_CLIENT); -00076 decompo_dcf(d,nodeId); -00077 } -00078 -00087 UNS32 decompo_dcf(CO_Data* d,UNS8 nodeId) -00088 { -00089 UNS32 errorCode; -00090 UNS16 target_Index; -00091 UNS8 target_Subindex; -00092 UNS32 target_Size; -00093 UNS32 res; -00094 ODCallback_t *Callback; -00095 -00096 ptrTable = (*d->scanIndexOD)(0x1F22, &errorCode, &Callback); -00097 if (errorCode != OD_SUCCESSFUL) -00098 { -00099 return errorCode; -00100 } -00101 -00103 while (nodeId < ptrTable->bSubCount){ -00104 UNS32 nb_targets; -00105 -00106 UNS8 szData = ptrTable->pSubindex[nodeId].size; -00107 UNS8* dcfend; -00108 -00109 { -00110 UNS8* dcf = *((UNS8**)ptrTable->pSubindex[nodeId].pObject); -00111 dcfend = dcf + szData; -00112 if (!d->dcf_cursor){ -00113 d->dcf_cursor = (UNS8*)dcf + 4; -00114 d->dcf_count_targets = 0; -00115 } -00116 nb_targets = UNS32_LE(*((UNS32*)dcf)); -00117 } -00118 -00120 if((UNS8*)d->dcf_cursor + 7 < (UNS8*)dcfend && d->dcf_count_targets < nb_targets) -00121 { -00123 target_Index = UNS16_LE(*((UNS16*)(d->dcf_cursor))); d->dcf_cursor += 2; -00124 target_Subindex = *((UNS8*)(((UNS8*)d->dcf_cursor)++)); -00125 target_Size = UNS32_LE(*((UNS32*)(d->dcf_cursor))); d->dcf_cursor += 4; -00126 -00127 /* printf("Master : ConfigureSlaveNode %2.2x (Concise -00128 DCF)\n",nodeId);*/ -00129 res = _writeNetworkDict(d, -00130 nodeId, -00131 target_Index, -00132 target_Subindex, -00133 target_Size, -00134 0, -00135 d->dcf_cursor, -00136 CheckSDOAndContinue, -00138 0); -00141 d->dcf_cursor += target_Size; -00142 d->dcf_count_targets++; -00143 -00144 return ; -00145 } -00146 nodeId++; -00147 d->dcf_cursor = NULL; -00148 } -00150 (*d->preOperational)(); -00151 -00152 } -
Generated on Tue Jun 5 18:32:05 2007 for CanFestival by +00057 if(getWriteResultNetworkDict (d, nodeId, &abortCode) != SDO_FINISHED) +00058 { +00059 MSG_ERR(0x1A01, "SDO error in consise DCF", abortCode); +00060 MSG_WAR(0x2A02, "server node : ", nodeId); +00061 } +00062 +00063 closeSDOtransfer(d, nodeId, SDO_CLIENT); +00064 decompo_dcf(d,nodeId); +00065 } +00066 +00075 UNS32 decompo_dcf(CO_Data* d,UNS8 nodeId) +00076 { +00077 UNS32 errorCode; +00078 UNS16 target_Index; +00079 UNS8 target_Subindex; +00080 UNS32 target_Size; +00081 UNS32 res; +00082 ODCallback_t *Callback; +00083 +00084 ptrTable = (*d->scanIndexOD)(0x1F22, &errorCode, &Callback); +00085 if (errorCode != OD_SUCCESSFUL) +00086 { +00087 return errorCode; +00088 } +00089 +00090 /* Loop on all Nodes supported in DCF subindexes*/ +00091 while (nodeId < ptrTable->bSubCount){ +00092 UNS32 nb_targets; +00093 +00094 UNS8 szData = ptrTable->pSubindex[nodeId].size; +00095 UNS8* dcfend; +00096 +00097 { +00098 UNS8* dcf = *((UNS8**)ptrTable->pSubindex[nodeId].pObject); +00099 dcfend = dcf + szData; +00100 if (!d->dcf_cursor){ +00101 d->dcf_cursor = (UNS8*)dcf + 4; +00102 d->dcf_count_targets = 0; +00103 } +00104 nb_targets = UNS32_LE(*((UNS32*)dcf)); +00105 } +00106 +00107 /* condition on consise DCF string for NodeID, if big enough */ +00108 if((UNS8*)d->dcf_cursor + 7 < (UNS8*)dcfend && d->dcf_count_targets < nb_targets) +00109 { +00110 /* pointer to the DCF string for NodeID */ +00111 target_Index = UNS16_LE(*((UNS16*)(d->dcf_cursor))); d->dcf_cursor += 2; +00112 target_Subindex = *((UNS8*)(((UNS8*)d->dcf_cursor)++)); +00113 target_Size = UNS32_LE(*((UNS32*)(d->dcf_cursor))); d->dcf_cursor += 4; +00114 +00115 /* printf("Master : ConfigureSlaveNode %2.2x (Concise +00116 DCF)\n",nodeId);*/ +00117 res = _writeNetworkDict(d, /* CO_Data* d*/ +00118 nodeId, /* UNS8 nodeId*/ +00119 target_Index, /* UNS16 index*/ +00120 target_Subindex, /* UNS8 subindex*/ +00121 target_Size, /* UNS8 count*/ +00122 0, /* UNS8 dataType*/ +00123 d->dcf_cursor,/* void *data*/ +00124 CheckSDOAndContinue,/* SDOCallback_t +00125 Callback*/ +00126 0); /* no endianize*/ +00127 /* Push d->dcf_cursor to the end of data*/ +00128 +00129 d->dcf_cursor += target_Size; +00130 d->dcf_count_targets++; +00131 +00132 return ; +00133 } +00134 nodeId++; +00135 d->dcf_cursor = NULL; +00136 } +00137 /* Switch Master to preOperational state */ +00138 (*d->preOperational)(); +00139 +00140 } +