|
通过支持AT指令集的手机发送短消息(源代码)(14) int i = 0, j = 0; while( i < nMsgLen ) { if( i < nMsgLen ) sprintf( pCur, "%.2X", BYTE(pMsg[i] >> j pMsg[i+1] << ( 7 - j )) ); else sprintf( pCur, "%.2X", BYTE(pMsg[i] >> j) ); pCur += 2; i ++; j = ( j + 1 ) % 7; if( j == 0 ) i ++; } return( pCur - pResultData ); } void CGSMPhone::Str2StrArr(CString strTemp, CStringArray &sa, char cDelimiter) { sa.RemoveAll(); for( ;; ) { int nPos; if( ( nPos = strTemp.Find( cDelimiter ) ) != -1 ) { sa.Add( strTemp.Left( nPos ) ); strTemp = strTemp.Mid( nPos + 1 ); } else { if( !strTemp.IsEmpty() ) sa.Add( strTemp ); break; } } } bool CGSMPhone::Open(int nPort, int nBaud) { char szPort[15]; wsprintf( szPort, "COM%d", nPort ); m_hIDComDev = CreateFile( szPort, GENERIC_READ GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL FILE_FLAG_OVERLAPPED, NULL ); if( m_hIDComDev == NULL ) return( false ); memset( &m_Overlapped, 0, sizeof( OVERLAPPED ) ); m_Overlapped.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); DCB dcb; dcb.DCBlength = sizeof( DCB ); GetCommState( m_hIDComDev, &dcb ); dcb.BaudRate = nBaud; dcb.ByteSize = 8; if( !SetCommState( m_hIDComDev, &dcb ) !SetupComm( m_hIDComDev, 10000, 10000 ) m_Overlapped.hEvent == NULL ) { DWORD dwError = GetLastError(); if( m_Overlapped.hEvent != NULL ) CloseHandle( m_Overlapped.hEvent ); CloseHandle( m_hIDComDev ); return( false ); } m_bOpened = true;
|