--- 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