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