コード例 #1
0
ファイル: J1939_stack_test.c プロジェクト: Artogn/J1939_stack
///////////////////////////////////////////////////////////////////////////
// RxThread
// thread to readout the message queue and parse the incoming messages
//
////////////////////////////////////////////////////////////////////////////
DWORD WINAPI RxThread(LPVOID par) 
{
   XLstatus        xlStatus;
  
   unsigned int    msgsrx = RECEIVE_EVENT_SIZE;
   XLevent         xlEvent; 
  
   UNUSED_PARAM(par); 
  
   g_RXThreadRun = 1;

   while (g_RXThreadRun)
   { 
      WaitForSingleObject(g_hMsgEvent,10);

      xlStatus = XL_SUCCESS;
    
      while (!xlStatus)
      {
         msgsrx = RECEIVE_EVENT_SIZE;
         xlStatus = xlReceive(g_xlPortHandle, &msgsrx, &xlEvent);

         if (xlStatus != XL_ERR_QUEUE_IS_EMPTY)
         {
            if (!g_silent)
            {
               printf("%s\n", xlGetEventString(&xlEvent));
            }

            //ResetEvent(g_hMsgEvent);
         }  
      }         
   }

   return NO_ERROR; 
}
コード例 #2
0
ファイル: LIN_Vector_XL.cpp プロジェクト: ETAS-Eder/busmaster
/**
* \brief         Read thread procedure
* \param[in]     pVoid contains the CPARAM_THREADPROC class object
* \return        void
* \authors       Arunkumar Karri
* \date          07.19.2013 Created
*/
DWORD WINAPI CDIL_LIN_VectorXL::LINMsgReadThreadProc_LIN_Vector_XL(LPVOID pVoid)
{
    USES_CONVERSION;

    CPARAM_THREADPROC* pThreadParam = (CPARAM_THREADPROC*) pVoid;
    XLstatus xlStatus = XL_SUCCESS;

    /* Assign thread action to CREATE_TIME_MAP */
    pThreadParam->m_unActionCode = CREATE_TIME_MAP;

    /* Set the event to LIN_Vector_XL driver for wakeup and frame arrival notification */
    //for (UINT i = 0; i < sg_unClientCnt; i++)
    {
        xlStatus = xlSetNotification (g_xlPortHandle[0], &g_hDataEvent[0], 1);
    }

    /* Set the thread action event to first notification event handle */
    if (g_hDataEvent[0] != nullptr)
    {
        pThreadParam->m_hActionEvent = g_hDataEvent[0];
    }


    /* Get the handle to the controller and validate it */
    VALIDATE_POINTER_RETURN_VALUE_LOG(pThreadParam->m_hActionEvent, (DWORD)-1);

    DWORD dwResult = 0;
    unsigned int msgsrx;
    XLevent  xlEvent;

    bool bLoopON = true;

    while (bLoopON)
    {
        WaitForSingleObject(g_hDataEvent[0], INFINITE);
        switch (pThreadParam->m_unActionCode)
        {
            case INVOKE_FUNCTION:
            {
                bool bMoreDataExist;
                msgsrx = RECEIVE_EVENT_SIZE;
                xlStatus = xlReceive(g_xlPortHandle[0], &msgsrx, &xlEvent);
                while (xlStatus == XL_SUCCESS )
                {
                    switch (xlStatus)
                    {
                        case XL_SUCCESS:
                        {
                            if ( g_pouDIL_LIN_Vector_XL != nullptr )
                            {
                                g_pouDIL_LIN_Vector_XL->ProcessLINMsg(xlEvent);
                                bMoreDataExist = true;
                            }
                        }
                        break;

                        default:
                            break;
                    }
                    xlStatus = xlReceive(g_xlPortHandle[0], &msgsrx, &xlEvent);;
                }
            }
            break;
            case EXIT_THREAD:
            {
                bLoopON = false;
            }
            break;
            case CREATE_TIME_MAP:
            {
                //vCreateTimeModeMapping(pThreadParam->m_hActionEvent);
                SetEvent(pThreadParam->m_hActionEvent);
                pThreadParam->m_unActionCode = INVOKE_FUNCTION;
            }
            break;
            default:
            case INACTION:
            {
                // nothing right at this moment
            }
            break;
        }
    }
    SetEvent(pThreadParam->hGetExitNotifyEvent());

    {
        ResetEvent(g_hDataEvent[0]);
        g_hDataEvent[0] = nullptr;
    }
    pThreadParam->m_hActionEvent = nullptr;

    return 0;
}