powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение определившегося номера с сотового телефона (через com порт)
2 сообщений из 2, страница 1 из 1
Получение определившегося номера с сотового телефона (через com порт)
    #32991759
Ю_Игорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача получить номер звонящего и разорвать соединение. (телефон me45)

В гипертерминале выставляю at+clip=1
и при входящем звонке высвеничается номер


у меня же то не поступают данные из порта. то определившийся номер поступает один раз и чтобы его получить снова нужно закрыть/открыть порт
так же при входящем звонке ATH не разрывает соединение

Посмотрите пожалуйста на код, что посоветуете?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
[code]

HANDLE CGSM_AONDlg::CreateComPort(char *comPortName)
{
    DCB dcb;
    HANDLE hCom = CreateFile(comPortName, GENERIC_READ | GENERIC_WRITE,  0 , NULL, OPEN_EXISTING,  0 , NULL); 
    if (hCom == INVALID_HANDLE_VALUE)
	{
	    Logger("Error CreateFile\n" , m_logDir);
		return  0 ;
	}
    if (!GetCommState(hCom, &dcb)) 
	{
	    Logger("Error GetCommState\n" , m_logDir);
		return  0 ;
	}
    dcb.BaudRate = CBR_19200; 
    dcb.fBinary = TRUE;      
    dcb.ByteSize =  8 ; 
	dcb.Parity = NOPARITY; 
	dcb.StopBits = ONESTOPBIT; 
    if( !SetCommState(hCom, &dcb)) 
	{
	    Logger("Error GetCommState\n" , m_logDir);
		return  0 ;
	}
    COMMTIMEOUTS TOut;
    DWORD TimeOut= 500 ;
    TOut.ReadIntervalTimeout =  100 ; 
    TOut.ReadTotalTimeoutMultiplier =  10 ; 
    TOut.ReadTotalTimeoutConstant = TimeOut; 
    TOut.WriteTotalTimeoutMultiplier =  10 ; 
    TOut.WriteTotalTimeoutConstant = TimeOut; 
    SetCommTimeouts(hCom,&TOut); 
    if (!SetupComm(hCom,  1200 ,  1200 ))
	{
	    Logger("Error GetCommState\n" , m_logDir);
		return  0 ;
	}
    return hCom;
 
 
}
 
void CGSM_AONDlg::OnOpenCom() 
{
 
	m_logDir = "c:\\";
	DWORD readed;
	DWORD write;
             char statusClip[]="AT+CLIP?\r";
	char setClip[]="AT+CLIP=1\r";
	char hangup[]="ATH\r";
 
	HANDLE hCom =  0 ;
 
             time_t  start, timeStatus;
	
             while( 1 )
	{
		time( & start );
		time( & timeStatus );
 
		if(hCom ==  0 )
	                 hCom=CreateComPort("COM1");
		if(hCom !=  0 )
		{
		    Logger("COM opened\n" , m_logDir);
			WriteFile(hCom,setClip,strlen(setClip),&write,NULL);
			Sleep( 50 );
			while( 1 )
			{
                                                   char buf[] = "";
				
				time_t timeCur;
				time( &timeCur );
 
                                                   if( difftime(start,timeCur) >  300  )
				{
					CloseHandle(hCom);	
					hCom =  0 ;
					break;
				}
 
				
				ReadFile(hCom,buf, 1024 ,&readed, NULL);
                
 
				CString strBuf = buf;
                
				if(strBuf.Find("RING") != - 1  )
				{
			                 WriteFile(hCom,hangup,strlen(hangup),&write,NULL);		 
				}
			   
             			if(strBuf.Find("AT+CLIP?") != - 1  )
				{
				    if(strBuf.Find("+CLIP: 1,1") != - 1 )
					{
					    Logger("CLIP OK\n" , m_logDir);
					}
 
					if(strBuf.Find("+CLIP: 0,1") != - 1 )
					{
					    Logger("NO CLIP : +CLIP: 0,1\n" , m_logDir);
				  	    WriteFile(hCom,statusClip,strlen(statusClip),&write,NULL);
					}
				}
	            			
				if( difftime(timeStatus,timeCur) >  15  )
				{
					time( &timeStatus );		
					WriteFile(hCom,statusClip,strlen(statusClip),&write,NULL);
				}
 
			}
		}
		else
			Sleep( 5000 );
	
	}
    

...
Рейтинг: 0 / 0
Получение определившегося номера с сотового телефона (через com порт)
    #32992555
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать статью Аллена Денвера в MSDN.А также что пишут в ихбт. Но сделать по определению будет утомительно. Во всяком случае, для поиска своей ошибки статью прочитать надо. Можно поискать готовые компоненты для работы с
COM портом. Для BCB есть недорогие VCL компоненты, для VC я не знаю, смотреть самостоятельно.
Ещё для отладки может помочь программа Portmon, которая показывает все сигналы, проходящие через COM порт.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение определившегося номера с сотового телефона (через com порт)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]