DWORD WINAPI _CellularCommReceiveCBThreadFunc()

in source/cellular/comm_if_windows.c [258:300]


DWORD WINAPI _CellularCommReceiveCBThreadFunc( LPVOID pArgument )
{
    DWORD dwCommStatus = 0;
    HANDLE hComm = ( HANDLE ) pArgument;
    BOOL retWait = FALSE;
    DWORD retValue = 0;

    if( hComm == ( HANDLE ) INVALID_HANDLE_VALUE )
    {
        retValue = ERROR_INVALID_HANDLE;
    }

    while( retValue == 0 )
    {
        retWait = WaitCommEvent( hComm, &dwCommStatus, NULL );

        if( ( retWait != FALSE ) && ( ( dwCommStatus & EV_RXCHAR ) != 0 ) )
        {
            if( ( dwCommStatus & EV_RXCHAR ) != 0 )
            {
                rxEvent = true;
            }
        }
        else
        {
            if( ( GetLastError() == ERROR_INVALID_HANDLE ) || ( GetLastError() == ERROR_OPERATION_ABORTED ) )
            {
                /* COM port closed. */
                CellularLogInfo( "Cellular COM port %p closed", hComm );
            }
            else
            {
                CellularLogInfo( "Cellular receiver thread wait comm error %p %d", hComm, GetLastError() );
            }

            retValue = GetLastError();

            break;
        }
    }

    return retValue;
}