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;
}