equal
deleted
inserted
replaced
195 /***************************************************************************/ |
195 /***************************************************************************/ |
196 UNS8 canSend(CAN_PORT fd0, Message *m) |
196 UNS8 canSend(CAN_PORT fd0, Message *m) |
197 { |
197 { |
198 if (fd0 != NULL && s_driver_procs.m_canSend != NULL) |
198 if (fd0 != NULL && s_driver_procs.m_canSend != NULL) |
199 { |
199 { |
|
200 UNS8 res; |
200 driver_data* data = (driver_data*)fd0; |
201 driver_data* data = (driver_data*)fd0; |
201 if ((*s_driver_procs.m_canSend)(data->inst, m)) |
202 LeaveMutex(); |
|
203 res = (*s_driver_procs.m_canSend)(data->inst, m); |
|
204 EnterMutex(); |
|
205 if (res) |
202 return 0; |
206 return 0; |
203 } |
207 } |
204 return 1; |
208 return 1; |
205 } |
209 } |
206 |
210 |
215 driver_data* data = new driver_data; |
219 driver_data* data = new driver_data; |
216 data->d = d; |
220 data->d = d; |
217 data->inst = inst; |
221 data->inst = inst; |
218 data->continue_receive_thread = true; |
222 data->continue_receive_thread = true; |
219 CreateReceiveTask(data, &data->receive_thread, &canReceiveLoop); |
223 CreateReceiveTask(data, &data->receive_thread, &canReceiveLoop); |
|
224 EnterMutex(); |
|
225 d->canHandle = data; |
|
226 LeaveMutex(); |
220 return data; |
227 return data; |
221 } |
228 } |
222 } |
229 } |
223 return NULL; |
230 return NULL; |
224 } |
231 } |
225 |
232 |
226 /***************************************************************************/ |
233 /***************************************************************************/ |
227 int canClose(CAN_PORT fd0) |
234 int canClose(CO_Data * d) |
228 { |
235 { |
229 if (fd0 != NULL && s_driver_procs.m_canClose != NULL) |
236 if (fd0 != NULL && s_driver_procs.m_canClose != NULL) |
230 { |
237 { |
231 driver_data* data = (driver_data*)fd0; |
238 EnterMutex(); |
|
239 driver_data* data = (driver_data*)d->canHandle; |
|
240 d->canHandle = NULL; |
|
241 LeaveMutex(); |
232 data->continue_receive_thread = false; |
242 data->continue_receive_thread = false; |
233 WaitReceiveTaskEnd(&data->receive_thread); |
243 WaitReceiveTaskEnd(&data->receive_thread); |
234 (*s_driver_procs.m_canClose)(data->inst); |
244 (*s_driver_procs.m_canClose)(data->inst); |
235 delete data; |
245 delete data; |
236 return 0; |
246 return 0; |