2008-11-04 6 views
1

나는 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; 


} 

답변

1

셀 ID를 얻을 명령을하지만 당신은 셀 ID를 얻기 위해 RIL 인터페이스를 사용할 수 있습니다. 그것은 AT 명령을 사용하는 것보다 더 간단 할 수 있습니다 (원격 그걸 얻기 위해 노력하지 않는?)

http://msdn.microsoft.com/en-us/library/ms890075.aspx

당신은 현재 셀 타워 ID를 얻기 위해 RIL_GetCellTowerInfo 기능을 사용합니다.

1

내 문제는 일부 devicec RIL iterface 메소드에서 E_NOTIMPL을 반환하고 아무 것도 작동하지 않기 때문에 AT 명령으로 모바일 모뎀으로 직접 tolk 할 수 있다는 것입니다.

누구나 이러한 문제에 대한 해결책을 갖고 있습니까? 지금은 1 주일 이상이 문제와 관련이 있습니다.

+0

나는 똑같은 도전을 가지고 있습니다. 내 HTC 다이아몬드는 RIL_GetCellTowerInfo (..)에 응답하지 않으므로 일주일 내내 CellID 및 LAC 데이터를 가져 오는 솔루션을 찾으려고합니다. AT 명령 방법을 사용해 보았습니다. 이 정보를 성공적으로 얻는 데 어떤 행운이 있었습니까? –

+0

아니요, 위의 코드를 사용하여 답변을 얻지 못했습니다. – michael

2

먼저 CreateFile의 첫 번째 매개 변수에 대해 L "COM9 :"을 시도하십시오.

체크 아웃 페이지 : @Sebastian : 나는 HTC 다이아몬드 + HTC의 터치 프로 + ATT 신관 2 개 모델 Ril_GetCellTowerInfo을 실행 분명히 내가 그렇게 .. 언급을 허용하고 있지 않다 Device File Names

+0

그랬습니다. 성공적으로 COM9를 열었지만 응답을받지 못했습니다. – michael

1

합니다. 4 대의 모든 전화기에서 작동합니다. 좀 더 도움이 필요하면 VB.NET에서 일부 작업 코드를 공유하게되어 기쁩니다.

관련 문제