2008-11-04 5 views
1

Я пытаюсь получить CellID с помощью AT-команд, но я не получаю никакого ответа от модема, мой код выглядит ниже, я посылаю команду AT + CCED, но никогда не получаю никакого ответа.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

Я ничего об использовании AT не знаю команды, чтобы получить идентификатор соты, но вы можете использовать интерфейс RIL, чтобы получить идентификатор ячейки. Это может быть проще, чем с помощью команды AT (если вы пытаетесь получить удаленно?)

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

Вы можете использовать функцию RIL_GetCellTowerInfo для получения текущей ячейки башни идентификатор.

1

Моя проблема заключается в том, что на некоторых devicec RIL методы iterface возвращают E_NOTIMPL, и ничего не работает, поэтому я решил, что могу напрямую подключиться к мобильному модему с помощью AT-команд.

У кого-нибудь есть решение такой проблемы, я сражаюсь с ней уже более недели.

+0

У меня есть тот же вызов. Мой HTC Diamond не отвечает на RIL_GetCellTowerInfo (..), и поэтому я искал всю неделю, чтобы попытаться найти решение для получения данных CellID и LAC. У меня возникло соблазн попробовать метод AT-команды. Удалось ли вам получить эту информацию? – 2009-05-16 22:05:45

+0

нет, я до сих пор не получил ответа, используя выше код – michael 2009-05-23 13:36:22

2

Прежде всего, попробуйте L "COM9:" для первого параметра CreateFile.

Заканчивать эту страницу: Device File Names

1

Видимо, я не имею права комментировать .. так: @Sebastian: Я бегу Ril_GetCellTowerInfo на 2 моделях HTC Diamond + HTC Touch Pro + ДТО Fuze. Он работает на всех 4 телефонах. Я был бы рад поделиться некоторым рабочим кодом (в VB.NET), если вам нужна дополнительная помощь.