Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение определившегося номера с сотового телефона (через com порт) / 2 сообщений из 2, страница 1 из 1
31.03.2005, 17:31
    #32991759
Ю_Игорь
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определившегося номера с сотового телефона (через com порт)
Задача получить номер звонящего и разорвать соединение. (телефон 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
01.04.2005, 09:49
    #32992555
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определившегося номера с сотового телефона (через com порт)
читать статью Аллена Денвера в MSDN.А также что пишут в ихбт. Но сделать по определению будет утомительно. Во всяком случае, для поиска своей ошибки статью прочитать надо. Можно поискать готовые компоненты для работы с
COM портом. Для BCB есть недорогие VCL компоненты, для VC я не знаю, смотреть самостоятельно.
Ещё для отладки может помочь программа Portmon, которая показывает все сигналы, проходящие через COM порт.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получение определившегося номера с сотового телефона (через com порт) / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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