equal
deleted
inserted
replaced
188 CAN_HANDLE fd0 = DLL_CALL(canOpen)(board); |
188 CAN_HANDLE fd0 = DLL_CALL(canOpen)(board); |
189 if(fd0){ |
189 if(fd0){ |
190 canports[i].used = 1; |
190 canports[i].used = 1; |
191 canports[i].fd = fd0; |
191 canports[i].fd = fd0; |
192 canports[i].d = d; |
192 canports[i].d = d; |
193 |
193 d->canHandle = (CAN_PORT)&canports[i]; |
194 CreateReceiveTask(&(canports[i]), &canports[i].receiveTask, &canReceiveLoop); |
194 CreateReceiveTask(&(canports[i]), &canports[i].receiveTask, &canReceiveLoop); |
195 |
|
196 EnterMutex(); |
|
197 d->canHandle = (CAN_PORT)&canports[i]; |
|
198 LeaveMutex(); |
|
199 return (CAN_PORT)&canports[i]; |
195 return (CAN_PORT)&canports[i]; |
200 }else{ |
196 }else{ |
201 MSG("CanOpen : Cannot open board {busname='%s',baudrate='%s'}\n",board->busname, board->baudrate); |
197 MSG("CanOpen : Cannot open board {busname='%s',baudrate='%s'}\n",board->busname, board->baudrate); |
202 return NULL; |
198 return NULL; |
203 } |
199 } |
209 * @return success or error |
205 * @return success or error |
210 */ |
206 */ |
211 int canClose(CO_Data * d) |
207 int canClose(CO_Data * d) |
212 { |
208 { |
213 UNS8 res; |
209 UNS8 res; |
214 |
210 |
215 EnterMutex(); |
|
216 ((CANPort*)d->canHandle)->used = 0; |
211 ((CANPort*)d->canHandle)->used = 0; |
217 CANPort* tmp = (CANPort*)d->canHandle; |
212 CANPort* tmp = (CANPort*)d->canHandle; |
218 d->canHandle = NULL; |
213 d->canHandle = NULL; |
219 LeaveMutex(); |
|
220 |
214 |
221 // close CAN port |
215 // close CAN port |
222 res = DLL_CALL(canClose)(tmp->fd); |
216 res = DLL_CALL(canClose)(tmp->fd); |
223 |
217 |
224 // kill receiver task |
218 // kill receiver task |