162 return (nfak*wd); |
162 return (nfak*wd); |
163 } |
163 } |
164 |
164 |
165 |
165 |
166 /**********************************************************/ |
166 /**********************************************************/ |
167 /* DRIVER sendcallback */ |
167 /* DRIVER lockcallback */ |
168 /**********************************************************/ |
168 /**********************************************************/ |
169 void send_callback(void *cb_data) |
169 void request_lock_callback(void *cb_data) |
170 { |
170 { |
171 EC_RTDM_DRV_STRUCT * pdrvstruc; |
171 EC_RTDM_DRV_STRUCT * pdrvstruc; |
172 |
172 |
173 pdrvstruc = (EC_RTDM_DRV_STRUCT*)cb_data; |
173 pdrvstruc = (EC_RTDM_DRV_STRUCT*)cb_data; |
174 if (pdrvstruc->master) |
174 if (pdrvstruc->master) |
175 { |
175 { |
176 my_mutex_acquire(&pdrvstruc->masterlock,TM_INFINITE); |
176 my_mutex_acquire(&pdrvstruc->masterlock,TM_INFINITE); |
177 ecrt_master_send_ext(pdrvstruc->master); |
177 } |
178 my_mutex_release(&pdrvstruc->masterlock); |
|
179 } |
|
180 } |
178 } |
181 |
179 |
182 /*****************************************************************************/ |
180 /*****************************************************************************/ |
183 |
181 |
184 void receive_callback(void *cb_data) |
182 void release_lock_callback(void *cb_data) |
185 { |
183 { |
186 EC_RTDM_DRV_STRUCT * pdrvstruc; |
184 EC_RTDM_DRV_STRUCT * pdrvstruc; |
187 |
185 |
188 pdrvstruc = (EC_RTDM_DRV_STRUCT*)cb_data; |
186 pdrvstruc = (EC_RTDM_DRV_STRUCT*)cb_data; |
189 if (pdrvstruc->master) |
187 if (pdrvstruc->master) |
190 { |
188 { |
191 my_mutex_acquire(&pdrvstruc->masterlock,TM_INFINITE); |
|
192 ecrt_master_receive(pdrvstruc->master); |
|
193 my_mutex_release(&pdrvstruc->masterlock); |
189 my_mutex_release(&pdrvstruc->masterlock); |
194 } |
190 } |
195 } |
191 } |
196 |
192 |
197 |
193 |
198 |
194 |
199 |
195 |
558 |
554 |
559 // set device name |
555 // set device name |
560 snprintf(&pdrvstruc->mutexname[0],sizeof(pdrvstruc->mutexname)-1,"ETHrtdmLOCK%d",pdrvstruc->masterno); |
556 snprintf(&pdrvstruc->mutexname[0],sizeof(pdrvstruc->mutexname)-1,"ETHrtdmLOCK%d",pdrvstruc->masterno); |
561 EC_RTDM_INFO(pdrvstruc->masterno,"Creating Master mutex %s!\n",&pdrvstruc->mutexname[0]); |
557 EC_RTDM_INFO(pdrvstruc->masterno,"Creating Master mutex %s!\n",&pdrvstruc->mutexname[0]); |
562 my_mutex_create(&pdrvstruc->masterlock,&pdrvstruc->mutexname[0]); |
558 my_mutex_create(&pdrvstruc->masterlock,&pdrvstruc->mutexname[0]); |
563 //ecrt_release_master(mstr); |
559 ecrt_master_callbacks(pdrvstruc->master, request_lock_callback, release_lock_callback, pdrvstruc); |
564 ecrt_master_callbacks(pdrvstruc->master, send_callback, receive_callback, pdrvstruc); |
|
565 EC_RTDM_INFO(pdrvstruc->masterno,"MSTR ATTACH done domain=%u!\n",(unsigned int)pdrvstruc->domain); |
560 EC_RTDM_INFO(pdrvstruc->masterno,"MSTR ATTACH done domain=%u!\n",(unsigned int)pdrvstruc->domain); |
566 pdrvstruc->isattached=1; |
561 pdrvstruc->isattached=1; |
567 ret = 0; |
562 ret = 0; |
568 } |
563 } |
569 |
564 |