Windows Mobile 6 AT команды - PullRequest
       21

Windows Mobile 6 AT команды

1 голос
/ 04 ноября 2008

Я пытаюсь получить CellID с помощью AT-команд, но я не получаю никакого ответа от модема, мой код выглядит следующим образом, я отправляю AT + CCED-команду, но никогда не получаю никакого ответа.

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;


}

Ответы [ 4 ]

2 голосов
/ 21 ноября 2008

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

Проверьте эту страницу: Имена файлов устройств

1 голос
/ 18 ноября 2009

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

1 голос
/ 12 ноября 2008

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

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

1 голос
/ 08 ноября 2008

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

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

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

...