나는 AT 명령을 사용하여 CellID를 얻으려고하지만 모뎀으로부터 응답을 얻지 못합니다. 광산 코드는 다음과 같습니다. AT + CCED 명령을 보내지 만 어떤 응답도받지 못합니다. 나는 AT를 사용하는 방법에 대해 아무것도 몰라Windows Mobile 6 AT 명령
HANDLE hCom;
char * xpos;
char rsltstr[5];
DWORD returnValue;
DWORD LAC;
DWORD CellId;
int bufpos;
DCB dcb;
COMMTIMEOUTS to;
DWORD nWritten;
DWORD event;
DWORD nRead;
char outbuf[20], buf[256];
hCom = CreateFile(L"\\\.\\COM9:",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
if (hCom==NULL || hCom==INVALID_HANDLE_VALUE)
{
TCHAR szBuf[80];
DWORD dw = GetLastError();
// get the most uptodate cells
_stprintf(szBuf, TEXT("CreateFile failed with error %d."), dw);
MessageBox(0, szBuf, TEXT("Error"), MB_OK);
hCom= NULL;
return -1;
}
if (!GetCommState(hCom, &dcb))
{
return -2;
}
dcb.BaudRate= CBR_115200;
dcb.ByteSize= 8;
dcb.fParity= false;
dcb.StopBits= ONESTOPBIT;
if (!SetCommState(hCom, &dcb))
{
return -3;
}
if (!EscapeCommFunction(hCom, SETDTR))
{
return -4;
}
if (!GetCommTimeouts(hCom, &to))
{
return -6;
}
to.ReadIntervalTimeout= 0;
to.ReadTotalTimeoutConstant= 200;
to.ReadTotalTimeoutMultiplier= 0;
to.WriteTotalTimeoutConstant= 20000;
to.WriteTotalTimeoutMultiplier= 0;
if (!SetCommTimeouts(hCom, &to))
{
return -7;
}
if (!SetCommMask(hCom, EV_RXCHAR))
{
return -8;
}
bufpos = 0;
strcpy(outbuf,"AT+CCED=0,5\r");
if (!WriteFile(hCom, outbuf, strlen(outbuf), &nWritten, NULL))
{
return -10;
}
if (nWritten != strlen(outbuf))
{
return -11;
}
if (!WaitCommEvent(hCom, &event, NULL))
{
return -12;
}
while(1)
{
if (!ReadFile(hCom, buf+bufpos, 256 - bufpos, &nRead, NULL))
{
return -13;
}
if (nRead == 0) // <---- it alweys break here
break;
bufpos += nRead;
if (bufpos >= 256)
break;
}
나는 똑같은 도전을 가지고 있습니다. 내 HTC 다이아몬드는 RIL_GetCellTowerInfo (..)에 응답하지 않으므로 일주일 내내 CellID 및 LAC 데이터를 가져 오는 솔루션을 찾으려고합니다. AT 명령 방법을 사용해 보았습니다. 이 정보를 성공적으로 얻는 데 어떤 행운이 있었습니까? –
아니요, 위의 코드를 사용하여 답변을 얻지 못했습니다. – michael