232 // write process data |
232 // write process data |
233 EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09); |
233 EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09); |
234 |
234 |
235 rt_sem_wait(&master_sem); |
235 rt_sem_wait(&master_sem); |
236 ecrt_domain_queue(domain1); |
236 ecrt_domain_queue(domain1); |
|
237 rt_sem_signal(&master_sem); |
237 ecrt_master_send(master); |
238 ecrt_master_send(master); |
238 rt_sem_signal(&master_sem); |
|
239 |
239 |
240 rt_task_wait_period(); |
240 rt_task_wait_period(); |
241 } |
241 } |
242 } |
242 } |
243 |
243 |
244 /*****************************************************************************/ |
244 /*****************************************************************************/ |
245 |
245 |
246 void send_callback(void *cb_data) |
246 void request_lock_callback(void *cb_data) |
247 { |
247 { |
248 ec_master_t *m = (ec_master_t *) cb_data; |
248 ec_master_t *m = (ec_master_t *) cb_data; |
249 |
249 rt_sem_wait(&master_sem); |
250 // too close to the next real time cycle: deny access... |
250 } |
251 if (get_cycles() - t_last_cycle <= t_critical) { |
251 |
252 rt_sem_wait(&master_sem); |
252 /*****************************************************************************/ |
253 ecrt_master_send_ext(m); |
253 |
254 rt_sem_signal(&master_sem); |
254 void release_lock_callback(void *cb_data) |
255 } |
|
256 } |
|
257 |
|
258 /*****************************************************************************/ |
|
259 |
|
260 void receive_callback(void *cb_data) |
|
261 { |
255 { |
262 ec_master_t *m = (ec_master_t *) cb_data; |
256 ec_master_t *m = (ec_master_t *) cb_data; |
263 |
257 rt_sem_signal(&master_sem); |
264 // too close to the next real time cycle: deny access... |
|
265 if (get_cycles() - t_last_cycle <= t_critical) { |
|
266 rt_sem_wait(&master_sem); |
|
267 ecrt_master_receive(m); |
|
268 rt_sem_signal(&master_sem); |
|
269 } |
|
270 } |
258 } |
271 |
259 |
272 /*****************************************************************************/ |
260 /*****************************************************************************/ |
273 |
261 |
274 int __init init_mod(void) |
262 int __init init_mod(void) |
290 ret = -EBUSY; |
278 ret = -EBUSY; |
291 printk(KERN_ERR PFX "Requesting master 0 failed!\n"); |
279 printk(KERN_ERR PFX "Requesting master 0 failed!\n"); |
292 goto out_return; |
280 goto out_return; |
293 } |
281 } |
294 |
282 |
295 ecrt_master_callbacks(master, send_callback, receive_callback, master); |
283 ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master); |
296 |
284 |
297 printk(KERN_INFO PFX "Registering domain...\n"); |
285 printk(KERN_INFO PFX "Registering domain...\n"); |
298 if (!(domain1 = ecrt_master_create_domain(master))) { |
286 if (!(domain1 = ecrt_master_create_domain(master))) { |
299 printk(KERN_ERR PFX "Domain creation failed!\n"); |
287 printk(KERN_ERR PFX "Domain creation failed!\n"); |
300 goto out_release_master; |
288 goto out_release_master; |