diff -r 30ced15f996f -r bbbfd27c1bd1 drivers/unix/unix.c --- a/drivers/unix/unix.c Wed Mar 06 23:50:35 2013 +0100 +++ b/drivers/unix/unix.c Thu Mar 07 11:40:28 2013 +0900 @@ -63,12 +63,6 @@ #include "can_driver.h" -/*Declares the funtion pointers for dll binding or simple protos*/ -/*UNS8 DLL_CALL(canReceive)(CAN_HANDLE, Message *); -UNS8 DLL_CALL(canSend)(CAN_HANDLE, Message *); -CAN_HANDLE DLL_CALL(canOpen)(s_BOARD *); -int DLL_CALL(canClose)(CAN_HANDLE); -*/ CANPort canports[MAX_NB_CAN_PORTS] = {{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,},{0,}}; #ifndef NOT_USE_DYNAMIC_LOADING @@ -120,15 +114,6 @@ #endif - - -/*Not needed -- canReceiveLoop calls _canReceive directly *//* -UNS8 canReceive(CAN_PORT port, Message *m) -{ - return DLL_CALL(canReceive)(port->fd, Message *m); -} -*/ - /** * CAN send routine * @param port CAN port @@ -162,13 +147,6 @@ EnterMutex(); canDispatch(((CANPort*)port)->d, &m); LeaveMutex(); - -#ifdef __KERNEL__ -#ifdef USE_XENO - /* periodic task for Xenomai kernel realtime */ - rt_task_wait_period(NULL); -#endif -#endif } } @@ -214,18 +192,18 @@ */ int canClose(CO_Data * d) { - UNS8 res; - - ((CANPort*)d->canHandle)->used = 0; - CANPort* tmp = (CANPort*)d->canHandle; - - // kill receiver task before port is closed and handle set to NULL - WaitReceiveTaskEnd(&tmp->receiveTask); - - // close CAN port - res = DLL_CALL(canClose)(tmp->fd); - - d->canHandle = NULL; + int res = 0; + + CANPort* port = (CANPort*)d->canHandle; + if(port){ + ((CANPort*)d->canHandle)->used = 0; + + res = DLL_CALL(canClose)(port->fd); + + WaitReceiveTaskEnd(&port->receiveTask); + + d->canHandle = NULL; + } return res; } @@ -241,7 +219,7 @@ { if(port){ UNS8 res; - //LeaveMutex(); + //LeaveMutex(); res = DLL_CALL(canChangeBaudRate)(((CANPort*)port)->fd, baud); //EnterMutex(); return res; // OK