examples/dc_rtai/dc_rtai_sample.c
changeset 1513 60ca68d853b8
parent 1508 60a116ed3897
child 2024 96e2ae6cce95
child 2421 bc2d4bf9cbe5
equal deleted inserted replaced
1512:388901f44a5e 1513:60ca68d853b8
   236     }
   236     }
   237 }
   237 }
   238 
   238 
   239 /*****************************************************************************/
   239 /*****************************************************************************/
   240 
   240 
   241 void send_callback(ec_master_t *master)
   241 void send_callback(void *cb_data)
   242 {
   242 {
       
   243     ec_master_t *m = (ec_master_t *) cb_data;
       
   244 
   243     // too close to the next real time cycle: deny access...
   245     // too close to the next real time cycle: deny access...
   244     if (get_cycles() - t_last_cycle <= t_critical) {
   246     if (get_cycles() - t_last_cycle <= t_critical) {
   245         rt_sem_wait(&master_sem);
   247         rt_sem_wait(&master_sem);
   246         ecrt_master_send_ext(master);
   248         ecrt_master_send_ext(m);
   247         rt_sem_signal(&master_sem);
   249         rt_sem_signal(&master_sem);
   248     }
   250     }
   249 }
   251 }
   250 
   252 
   251 /*****************************************************************************/
   253 /*****************************************************************************/
   252 
   254 
   253 void receive_callback(ec_master_t *master)
   255 void receive_callback(void *cb_data)
   254 {
   256 {
       
   257     ec_master_t *m = (ec_master_t *) cb_data;
       
   258 
   255     // too close to the next real time cycle: deny access...
   259     // too close to the next real time cycle: deny access...
   256     if (get_cycles() - t_last_cycle <= t_critical) {
   260     if (get_cycles() - t_last_cycle <= t_critical) {
   257         rt_sem_wait(&master_sem);
   261         rt_sem_wait(&master_sem);
   258         ecrt_master_receive(master);
   262         ecrt_master_receive(m);
   259         rt_sem_signal(&master_sem);
   263         rt_sem_signal(&master_sem);
   260     }
   264     }
   261 }
   265 }
   262 
   266 
   263 /*****************************************************************************/
   267 /*****************************************************************************/
   279         ret = -EBUSY; 
   283         ret = -EBUSY; 
   280         printk(KERN_ERR PFX "Requesting master 0 failed!\n");
   284         printk(KERN_ERR PFX "Requesting master 0 failed!\n");
   281         goto out_return;
   285         goto out_return;
   282     }
   286     }
   283 
   287 
   284     ecrt_master_callbacks(master, send_callback, receive_callback);
   288     ecrt_master_callbacks(master, send_callback, receive_callback, master);
   285 
   289 
   286     printk(KERN_INFO PFX "Registering domain...\n");
   290     printk(KERN_INFO PFX "Registering domain...\n");
   287     if (!(domain1 = ecrt_master_create_domain(master))) {
   291     if (!(domain1 = ecrt_master_create_domain(master))) {
   288         printk(KERN_ERR PFX "Domain creation failed!\n");
   292         printk(KERN_ERR PFX "Domain creation failed!\n");
   289         goto out_release_master;
   293         goto out_release_master;