139 run_serial_devices(domain1_pd); |
139 run_serial_devices(domain1_pd); |
140 |
140 |
141 // send process data |
141 // send process data |
142 down(&master_sem); |
142 down(&master_sem); |
143 ecrt_domain_queue(domain1); |
143 ecrt_domain_queue(domain1); |
144 up(&master_sem); |
|
145 ecrt_master_send(master); |
144 ecrt_master_send(master); |
|
145 up(&master_sem); |
146 |
146 |
147 // restart timer |
147 // restart timer |
148 timer.expires += HZ / FREQUENCY; |
148 timer.expires += HZ / FREQUENCY; |
149 add_timer(&timer); |
149 add_timer(&timer); |
150 } |
150 } |
151 |
151 |
152 /*****************************************************************************/ |
152 /*****************************************************************************/ |
153 |
153 |
154 void request_lock_callback(void *cb_data) |
154 void send_callback(void *cb_data) |
155 { |
155 { |
156 ec_master_t *m = (ec_master_t *) cb_data; |
156 ec_master_t *m = (ec_master_t *) cb_data; |
157 down(&master_sem); |
157 down(&master_sem); |
158 } |
158 ecrt_master_send_ext(m); |
159 |
159 up(&master_sem); |
160 /*****************************************************************************/ |
160 } |
161 |
161 |
162 void release_lock_callback(void *cb_data) |
162 /*****************************************************************************/ |
|
163 |
|
164 void receive_callback(void *cb_data) |
163 { |
165 { |
164 ec_master_t *m = (ec_master_t *) cb_data; |
166 ec_master_t *m = (ec_master_t *) cb_data; |
|
167 down(&master_sem); |
|
168 ecrt_master_receive(m); |
165 up(&master_sem); |
169 up(&master_sem); |
166 } |
170 } |
167 |
171 |
168 /*****************************************************************************/ |
172 /*****************************************************************************/ |
169 |
173 |
170 int __init init_mini_module(void) |
174 int __init init_mini_module(void) |
171 { |
175 { |
172 int ret = -1; |
176 int ret = -1; |
173 ec_slave_config_t *sc; |
177 ec_slave_config_t *sc; |
174 |
178 |
175 printk(KERN_INFO PFX "Starting...\n"); |
179 printk(KERN_INFO PFX "Starting...\n"); |
176 |
180 |
177 master = ecrt_request_master(0); |
181 master = ecrt_request_master(0); |
178 if (!master) { |
182 if (!master) { |
179 printk(KERN_ERR PFX "Requesting master 0 failed.\n"); |
183 printk(KERN_ERR PFX "Requesting master 0 failed.\n"); |
180 ret = -EBUSY; |
184 ret = -EBUSY; |
181 goto out_return; |
185 goto out_return; |
182 } |
186 } |
183 |
187 |
184 sema_init(&master_sem, 1); |
188 sema_init(&master_sem, 1); |
185 ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master); |
189 ecrt_master_callbacks(master, send_callback, receive_callback, master); |
186 |
190 |
187 printk(KERN_INFO PFX "Registering domain...\n"); |
191 printk(KERN_INFO PFX "Registering domain...\n"); |
188 if (!(domain1 = ecrt_master_create_domain(master))) { |
192 if (!(domain1 = ecrt_master_create_domain(master))) { |
189 printk(KERN_ERR PFX "Domain creation failed!\n"); |
193 printk(KERN_ERR PFX "Domain creation failed!\n"); |
190 goto out_release_master; |
194 goto out_release_master; |