equal
deleted
inserted
replaced
329 // check for master state (optional) |
329 // check for master state (optional) |
330 check_master_state(); |
330 check_master_state(); |
331 |
331 |
332 // check for islave configuration state(s) (optional) |
332 // check for islave configuration state(s) (optional) |
333 check_slave_config_states(); |
333 check_slave_config_states(); |
334 |
334 |
335 #if SDO_ACCESS |
335 #if SDO_ACCESS |
336 // read process data SDO |
336 // read process data SDO |
337 read_sdo(); |
337 read_sdo(); |
338 #endif |
338 #endif |
339 |
339 |
356 add_timer(&timer); |
356 add_timer(&timer); |
357 } |
357 } |
358 |
358 |
359 /*****************************************************************************/ |
359 /*****************************************************************************/ |
360 |
360 |
361 void request_lock_callback(void *cb_data) |
361 void send_callback(void *cb_data) |
362 { |
362 { |
363 down(&master_sem); |
363 ec_master_t *m = (ec_master_t *) cb_data; |
364 } |
364 down(&master_sem); |
365 |
365 ecrt_master_send_ext(m); |
366 /*****************************************************************************/ |
366 up(&master_sem); |
367 |
367 } |
368 void release_lock_callback(void *cb_data) |
368 |
369 { |
369 /*****************************************************************************/ |
|
370 |
|
371 void receive_callback(void *cb_data) |
|
372 { |
|
373 ec_master_t *m = (ec_master_t *) cb_data; |
|
374 down(&master_sem); |
|
375 ecrt_master_receive(m); |
370 up(&master_sem); |
376 up(&master_sem); |
371 } |
377 } |
372 |
378 |
373 /*****************************************************************************/ |
379 /*****************************************************************************/ |
374 |
380 |
379 ec_slave_config_t *sc; |
385 ec_slave_config_t *sc; |
380 #endif |
386 #endif |
381 #if EXTERNAL_MEMORY |
387 #if EXTERNAL_MEMORY |
382 unsigned int size; |
388 unsigned int size; |
383 #endif |
389 #endif |
384 |
390 |
385 printk(KERN_INFO PFX "Starting...\n"); |
391 printk(KERN_INFO PFX "Starting...\n"); |
386 |
392 |
387 master = ecrt_request_master(0); |
393 master = ecrt_request_master(0); |
388 if (!master) { |
394 if (!master) { |
389 ret = -EBUSY; |
395 ret = -EBUSY; |
390 printk(KERN_ERR PFX "Requesting master 0 failed.\n"); |
396 printk(KERN_ERR PFX "Requesting master 0 failed.\n"); |
391 goto out_return; |
397 goto out_return; |
392 } |
398 } |
393 |
399 |
394 sema_init(&master_sem, 1); |
400 sema_init(&master_sem, 1); |
395 ecrt_master_callbacks(master, |
401 ecrt_master_callbacks(master, send_callback, receive_callback, master); |
396 request_lock_callback, release_lock_callback, master); |
|
397 |
402 |
398 printk(KERN_INFO PFX "Registering domain...\n"); |
403 printk(KERN_INFO PFX "Registering domain...\n"); |
399 if (!(domain1 = ecrt_master_create_domain(master))) { |
404 if (!(domain1 = ecrt_master_create_domain(master))) { |
400 printk(KERN_ERR PFX "Domain creation failed!\n"); |
405 printk(KERN_ERR PFX "Domain creation failed!\n"); |
401 goto out_release_master; |
406 goto out_release_master; |
437 } |
442 } |
438 #endif |
443 #endif |
439 |
444 |
440 #if SDO_ACCESS |
445 #if SDO_ACCESS |
441 printk(KERN_INFO PFX "Creating SDO requests...\n"); |
446 printk(KERN_INFO PFX "Creating SDO requests...\n"); |
442 if (!(sdo = ecrt_slave_config_create_sdo_request( |
447 if (!(sdo = ecrt_slave_config_create_sdo_request(sc_ana_in, 0x3102, 2, 2))) { |
443 sc_ana_in, 0x3102, 2, 2))) { |
|
444 printk(KERN_ERR PFX "Failed to create SDO request.\n"); |
448 printk(KERN_ERR PFX "Failed to create SDO request.\n"); |
445 goto out_release_master; |
449 goto out_release_master; |
446 } |
450 } |
447 ecrt_sdo_request_timeout(sdo, 500); // ms |
451 ecrt_sdo_request_timeout(sdo, 500); // ms |
448 #endif |
452 #endif |