changeset 777 | bbbfd27c1bd1 |
parent 644 | 11b21e9a92f6 |
776:30ced15f996f | 777:bbbfd27c1bd1 |
---|---|
61 CO_Data* d; /**< CAN object data*/ |
61 CO_Data* d; /**< CAN object data*/ |
62 } CANPort; |
62 } CANPort; |
63 |
63 |
64 #include "can_driver.h" |
64 #include "can_driver.h" |
65 |
65 |
66 /*Declares the funtion pointers for dll binding or simple protos*/ |
|
67 /*UNS8 DLL_CALL(canReceive)(CAN_HANDLE, Message *); |
|
68 UNS8 DLL_CALL(canSend)(CAN_HANDLE, Message *); |
|
69 CAN_HANDLE DLL_CALL(canOpen)(s_BOARD *); |
|
70 int DLL_CALL(canClose)(CAN_HANDLE); |
|
71 */ |
|
72 CANPort canports[MAX_NB_CAN_PORTS] = {{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,}}; |
66 CANPort canports[MAX_NB_CAN_PORTS] = {{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,}}; |
73 |
67 |
74 #ifndef NOT_USE_DYNAMIC_LOADING |
68 #ifndef NOT_USE_DYNAMIC_LOADING |
75 |
69 |
76 /*UnLoads the dll*/ |
70 /*UnLoads the dll*/ |
118 return handle; |
112 return handle; |
119 } |
113 } |
120 |
114 |
121 #endif |
115 #endif |
122 |
116 |
123 |
|
124 |
|
125 /*Not needed -- canReceiveLoop calls _canReceive directly *//* |
|
126 UNS8 canReceive(CAN_PORT port, Message *m) |
|
127 { |
|
128 return DLL_CALL(canReceive)(port->fd, Message *m); |
|
129 } |
|
130 */ |
|
131 |
|
132 /** |
117 /** |
133 * CAN send routine |
118 * CAN send routine |
134 * @param port CAN port |
119 * @param port CAN port |
135 * @param m CAN message |
120 * @param m CAN message |
136 * @return success or error |
121 * @return success or error |
160 break; |
145 break; |
161 |
146 |
162 EnterMutex(); |
147 EnterMutex(); |
163 canDispatch(((CANPort*)port)->d, &m); |
148 canDispatch(((CANPort*)port)->d, &m); |
164 LeaveMutex(); |
149 LeaveMutex(); |
165 |
|
166 #ifdef __KERNEL__ |
|
167 #ifdef USE_XENO |
|
168 /* periodic task for Xenomai kernel realtime */ |
|
169 rt_task_wait_period(NULL); |
|
170 #endif |
|
171 #endif |
|
172 } |
150 } |
173 } |
151 } |
174 |
152 |
175 /** |
153 /** |
176 * CAN open routine |
154 * CAN open routine |
212 * @param d CAN object data |
190 * @param d CAN object data |
213 * @return success or error |
191 * @return success or error |
214 */ |
192 */ |
215 int canClose(CO_Data * d) |
193 int canClose(CO_Data * d) |
216 { |
194 { |
217 UNS8 res; |
195 int res = 0; |
218 |
196 |
219 ((CANPort*)d->canHandle)->used = 0; |
197 CANPort* port = (CANPort*)d->canHandle; |
220 CANPort* tmp = (CANPort*)d->canHandle; |
198 if(port){ |
221 |
199 ((CANPort*)d->canHandle)->used = 0; |
222 // kill receiver task before port is closed and handle set to NULL |
200 |
223 WaitReceiveTaskEnd(&tmp->receiveTask); |
201 res = DLL_CALL(canClose)(port->fd); |
224 |
202 |
225 // close CAN port |
203 WaitReceiveTaskEnd(&port->receiveTask); |
226 res = DLL_CALL(canClose)(tmp->fd); |
204 |
227 |
205 d->canHandle = NULL; |
228 d->canHandle = NULL; |
206 } |
229 |
207 |
230 return res; |
208 return res; |
231 } |
209 } |
232 |
210 |
233 |
211 |
239 */ |
217 */ |
240 UNS8 canChangeBaudRate(CAN_PORT port, char* baud) |
218 UNS8 canChangeBaudRate(CAN_PORT port, char* baud) |
241 { |
219 { |
242 if(port){ |
220 if(port){ |
243 UNS8 res; |
221 UNS8 res; |
244 //LeaveMutex(); |
222 //LeaveMutex(); |
245 res = DLL_CALL(canChangeBaudRate)(((CANPort*)port)->fd, baud); |
223 res = DLL_CALL(canChangeBaudRate)(((CANPort*)port)->fd, baud); |
246 //EnterMutex(); |
224 //EnterMutex(); |
247 return res; // OK |
225 return res; // OK |
248 } |
226 } |
249 return 1; // NOT OK |
227 return 1; // NOT OK |