drivers/win32/drivers_win32.cpp
changeset 149 fe50ada8020b
parent 145 e747d2e26af0
child 150 d2fc5d5f8a36
equal deleted inserted replaced
148:ad3de8730172 149:fe50ada8020b
   195 /***************************************************************************/
   195 /***************************************************************************/
   196 UNS8 canSend(CAN_PORT fd0, Message *m)
   196 UNS8 canSend(CAN_PORT fd0, Message *m)
   197    {
   197    {
   198    if (fd0 != NULL && s_driver_procs.m_canSend != NULL)
   198    if (fd0 != NULL && s_driver_procs.m_canSend != NULL)
   199       {
   199       {
       
   200       UNS8 res;
   200       driver_data* data = (driver_data*)fd0;
   201       driver_data* data = (driver_data*)fd0;
   201       if ((*s_driver_procs.m_canSend)(data->inst, m))
   202       LeaveMutex();
       
   203       res = (*s_driver_procs.m_canSend)(data->inst, m);      
       
   204       EnterMutex();
       
   205       if (res)
   202          return 0;
   206          return 0;
   203       }
   207       }
   204    return 1;
   208    return 1;
   205    }
   209    }
   206 
   210 
   215          driver_data* data = new driver_data;
   219          driver_data* data = new driver_data;
   216          data->d = d;
   220          data->d = d;
   217          data->inst = inst;
   221          data->inst = inst;
   218          data->continue_receive_thread = true;
   222          data->continue_receive_thread = true;
   219          CreateReceiveTask(data, &data->receive_thread, &canReceiveLoop);
   223          CreateReceiveTask(data, &data->receive_thread, &canReceiveLoop);
       
   224 	 EnterMutex();
       
   225          d->canHandle = data;
       
   226          LeaveMutex();
   220          return data;
   227          return data;
   221          }
   228          }
   222       }
   229       }
   223    return NULL;
   230    return NULL;
   224    }
   231    }
   225 
   232 
   226 /***************************************************************************/
   233 /***************************************************************************/
   227 int canClose(CAN_PORT fd0)
   234 int canClose(CO_Data * d)
   228    {
   235    {
   229    if (fd0 != NULL && s_driver_procs.m_canClose != NULL)
   236    if (fd0 != NULL && s_driver_procs.m_canClose != NULL)
   230       {
   237       {
   231       driver_data* data = (driver_data*)fd0;
   238       EnterMutex();
       
   239       driver_data* data = (driver_data*)d->canHandle;
       
   240       d->canHandle = NULL;
       
   241       LeaveMutex();
   232       data->continue_receive_thread = false;
   242       data->continue_receive_thread = false;
   233       WaitReceiveTaskEnd(&data->receive_thread);
   243       WaitReceiveTaskEnd(&data->receive_thread);
   234       (*s_driver_procs.m_canClose)(data->inst);
   244       (*s_driver_procs.m_canClose)(data->inst);
   235       delete data;
   245       delete data;
   236       return 0;
   246       return 0;