drivers/unix/unix.c
changeset 454 bc000083297a
parent 442 010c26b9ba89
child 467 40efa79d27dd
equal deleted inserted replaced
453:c74a73474cce 454:bc000083297a
   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