141 masterSendNMTstateChange (d, nodeId, NMT_Start_Node); |
141 masterSendNMTstateChange (d, nodeId, NMT_Start_Node); |
142 |
142 |
143 } |
143 } |
144 } |
144 } |
145 |
145 |
|
146 #ifdef CO_ENABLE_LSS |
|
147 static void ConfigureLSSNode(CO_Data* d); |
|
148 UNS8 init_step_LSS=1; |
|
149 |
|
150 static void CheckLSSAndContinue(CO_Data* d, UNS8 command) |
|
151 { |
|
152 UNS32 dat1; |
|
153 UNS8 dat2; |
|
154 printf("CheckLSS->"); |
|
155 if(getConfigResultNetworkNode (d, command, &dat1, &dat2) != LSS_FINISHED){ |
|
156 if(command==LSS_IDENT_NON_CONF_SLAVE){ |
|
157 eprintf("Master : There are not no-configured slaves in the net\n", command); |
|
158 return; |
|
159 } |
|
160 else{ |
|
161 eprintf("Master : Failed in LSS comand %d. Trying again\n", command); |
|
162 } |
|
163 } |
|
164 else |
|
165 { |
|
166 init_step_LSS++; |
|
167 |
|
168 switch(command){ |
|
169 case LSS_CONF_NODE_ID: |
|
170 switch(dat1){ |
|
171 case 0: printf("Node ID change succesful\n");break; |
|
172 case 1: printf("Node ID change error:out of range\n");break; |
|
173 case 0xFF:printf("Node ID change error:specific error\n");break; |
|
174 default:break; |
|
175 } |
|
176 break; |
|
177 case LSS_CONF_BIT_TIMING: |
|
178 switch(dat1){ |
|
179 case 0: printf("Baud rate change succesful\n");break; |
|
180 case 1: printf("Baud rate change error: change baud rate not supported\n");break; |
|
181 case 0xFF:printf("Baud rate change error:specific error\n");break; |
|
182 default:break; |
|
183 } |
|
184 break; |
|
185 case LSS_CONF_STORE: |
|
186 switch(dat1){ |
|
187 case 0: printf("Store configuration succesful\n");break; |
|
188 case 1: printf("Store configuration error:not supported\n");break; |
|
189 case 0xFF:printf("Store configuration error:specific error\n");break; |
|
190 default:break; |
|
191 } |
|
192 break; |
|
193 case LSS_SM_SELECTIVE_RESP: |
|
194 printf("Slave in CONFIGURATION mode\n"); |
|
195 break; |
|
196 case LSS_IDENT_SLAVE: |
|
197 printf("node identified\n"); |
|
198 break; |
|
199 case LSS_IDENT_NON_CONF_SLAVE: |
|
200 printf("non-configured remote slave in the net\n"); |
|
201 break; |
|
202 case LSS_INQ_VENDOR_ID: |
|
203 printf("Slave VendorID %x\n", dat1); |
|
204 break; |
|
205 case LSS_INQ_PRODUCT_CODE: |
|
206 printf("Slave Product Code %x\n", dat1); |
|
207 break; |
|
208 case LSS_INQ_REV_NUMBER: |
|
209 printf("Slave Revision Number %x\n", dat1); |
|
210 break; |
|
211 case LSS_INQ_SERIAL_NUMBER: |
|
212 printf("Slave Serial Number %x\n", dat1); |
|
213 break; |
|
214 case LSS_INQ_NODE_ID: |
|
215 printf("Slave nodeid %x\n", dat1); |
|
216 break; |
|
217 } |
|
218 } |
|
219 |
|
220 printf("\n"); |
|
221 ConfigureLSSNode(d); |
|
222 } |
|
223 |
|
224 |
|
225 struct timeval master_prev_time,master_current_time; |
|
226 static void ConfigureLSSNode(CO_Data* d) |
|
227 { |
|
228 UNS32 Vendor_ID=0x12345678; |
|
229 UNS32 Product_Code=0x90123456; |
|
230 UNS32 Revision_Number=0x78901234; |
|
231 UNS32 Serial_Number=0x56789012; |
|
232 UNS32 Revision_Number_high=0x78901240; |
|
233 UNS32 Revision_Number_low=0x78901230; |
|
234 UNS32 Serial_Number_high=0x56789020; |
|
235 UNS32 Serial_Number_low=0x56789010; |
|
236 UNS8 NodeID=0x02; |
|
237 UNS8 Baud_Table=0; |
|
238 UNS8 Baud_BitTiming=3; |
|
239 UNS16 Switch_delay=1; |
|
240 UNS8 LSS_mode=LSS_WAITING_MODE; |
|
241 UNS8 res; |
|
242 eprintf("ConfigureLSSNode-> "); |
|
243 |
|
244 switch(init_step_LSS){ |
|
245 case 1: /* LSS=>identify non-configured remote slave */ |
|
246 eprintf("LSS=>identify non-configured remote slave\n"); |
|
247 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_IDENT_REMOTE_NON_CONF,0,0,CheckLSSAndContinue); |
|
248 break; |
|
249 case 2: /* LSS=>identify node */ |
|
250 eprintf("LSS=>identify node\n"); |
|
251 res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_VENDOR,&Vendor_ID,0); |
|
252 res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_PRODUCT,&Product_Code,0); |
|
253 res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_REV_LOW,&Revision_Number_low,0); |
|
254 res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_REV_HIGH,&Revision_Number_high,0); |
|
255 res=configNetworkNode(&TestMaster_Data,LSS_IDENT_REMOTE_SERIAL_LOW,&Serial_Number_low,0); |
|
256 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_IDENT_REMOTE_SERIAL_HIGH,&Serial_Number_high,0,CheckLSSAndContinue); |
|
257 break; |
|
258 case 3: /*First step : setup Slave's TPDO 1 to be transmitted on SYNC*/ |
|
259 eprintf("LSS=>put in configuration mode\n"); |
|
260 res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_VENDOR,&Vendor_ID,0); |
|
261 res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_PRODUCT,&Product_Code,0); |
|
262 res=configNetworkNode(&TestMaster_Data,LSS_SM_SELECTIVE_REVISION,&Revision_Number,0); |
|
263 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_SM_SELECTIVE_SERIAL,&Serial_Number,0,CheckLSSAndContinue); |
|
264 break; |
|
265 case 4: /* LSS=>inquire nodeID */ |
|
266 eprintf("LSS=>inquire nodeID\n"); |
|
267 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_NODE_ID,0,0,CheckLSSAndContinue); |
|
268 break; |
|
269 case 5: /* LSS=>inquire VendorID */ |
|
270 eprintf("LSS=>inquire VendorID\n"); |
|
271 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_VENDOR_ID,0,0,CheckLSSAndContinue); |
|
272 break; |
|
273 case 6: /* LSS=>inquire Product code */ |
|
274 eprintf("LSS=>inquire Product code\n"); |
|
275 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_PRODUCT_CODE,0,0,CheckLSSAndContinue); |
|
276 break; |
|
277 case 7: /* LSS=>inquire Revision Number */ |
|
278 eprintf("LSS=>inquire Revision Number\n"); |
|
279 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_REV_NUMBER,0,0,CheckLSSAndContinue); |
|
280 break; |
|
281 case 8: /* LSS=>inquire Serial Number */ |
|
282 eprintf("LSS=>inquire Serial Number\n"); |
|
283 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_INQ_SERIAL_NUMBER,0,0,CheckLSSAndContinue); |
|
284 break; |
|
285 case 9: /* LSS=>change the nodeID */ |
|
286 eprintf("LSS=>change the nodeId\n"); |
|
287 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_NODE_ID,&NodeID,0,CheckLSSAndContinue); |
|
288 break; |
|
289 case 10: /* LSS=>change the Baud rate */ |
|
290 eprintf("LSS=>change the Baud rate\n"); |
|
291 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_BIT_TIMING,&Baud_Table,&Baud_BitTiming,CheckLSSAndContinue); |
|
292 break; |
|
293 case 11: |
|
294 eprintf("LSS=>Activate Bit Timing\n"); |
|
295 res=configNetworkNode(&TestMaster_Data,LSS_CONF_ACT_BIT_TIMING,&Switch_delay,0); |
|
296 /*no break;*/ |
|
297 init_step_LSS++; |
|
298 case 12: |
|
299 /*LSS=>store configuration*/ |
|
300 /* It will fail the first time (time out) due to the switch delay */ |
|
301 /* It will fail the second time because it is not implemented in the slave */ |
|
302 eprintf("LSS=>store configuration\n"); |
|
303 res=configNetworkNodeCallBack(&TestMaster_Data,LSS_CONF_STORE,0,0,CheckLSSAndContinue); |
|
304 break; |
|
305 case 13: /* LSS=>put in operation mod */ |
|
306 eprintf("LSS=>put in operation mode\n"); |
|
307 res=configNetworkNode(&TestMaster_Data,LSS_SM_GLOBAL,&LSS_mode,0); |
|
308 break; |
|
309 } |
|
310 } |
|
311 #endif |
|
312 |
146 void TestMaster_preOperational() |
313 void TestMaster_preOperational() |
147 { |
314 { |
148 |
|
149 eprintf("TestMaster_preOperational\n"); |
315 eprintf("TestMaster_preOperational\n"); |
150 ConfigureSlaveNode(&TestMaster_Data, 0x02); |
316 #ifdef CO_ENABLE_LSS |
151 |
317 /* Ask slave node to go in stop mode */ |
|
318 masterSendNMTstateChange (&TestMaster_Data, 0, NMT_Stop_Node); |
|
319 ConfigureLSSNode(&TestMaster_Data); |
|
320 #endif |
152 } |
321 } |
153 |
322 |
154 void TestMaster_operational() |
323 void TestMaster_operational() |
155 { |
324 { |
156 eprintf("TestMaster_operational\n"); |
325 eprintf("TestMaster_operational\n"); |