drivers/unix/unix.c
changeset 777 bbbfd27c1bd1
parent 644 11b21e9a92f6
--- 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