【问题标题】:How to switch 2G\3G mode on usb modem Huawei E171 using C++?如何使用 C++ 在 USB 调制解调器华为 E171 上切换 2G\3G 模式?
【发布时间】:2014-06-19 11:35:52
【问题描述】:

我在 C++ 上写过小程序,她切换调制解调器 2G\3G 模式。 它不起作用:-(

程序从调制解调器读取数据,如果发送 AT-Comands 调制解调器没有应答。

请帮帮我;-)

// huawei_mode_switcher 
#include <windows.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(){

    LPCTSTR sPortName = "//./COM13";
    char data[] = "AT^SYSCFG=13,1,3FFFFFFF,2,4";
    DWORD dwSize = sizeof(data); 
    DWORD dwBytesWritten;    
    HANDLE hSerial = CreateFile(sPortName,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

    if(hSerial==INVALID_HANDLE_VALUE){

        if(GetLastError()==ERROR_FILE_NOT_FOUND)
    {
        cout << "com port zanyat\n";
    }
    cout << "other error\n";

}
    else {

    BOOL iRet = WriteFile (hSerial,data,dwSize,&dwBytesWritten,NULL);

    Sleep(100);
        while(1)
    {
        DWORD iSize;
      char sReceivedChar;
      while (true)
      {
            ReadFile(hSerial, &sReceivedChar, 1, &iSize, 0); 
            if (iSize > 0)   
                cout << sReceivedChar;
      }

    }

}


system("pause");
return 0;
}

【问题讨论】:

    标签: c++ usb at-command modem


    【解决方案1】:

    这一行

    DWORD dwSize = sizeof(data);
    

    dwSize 设置为字符串的大小,包括末尾的空字符,我认为您不想发送。并且命令必须以\r 字符结尾。试试:

    char data[] = "AT^SYSCFG=13,1,3FFFFFFF,2,4\r";
    DWORD dwSize = strlen(data);    // use strlen instead of sizeof
    

    (请参阅下面 hlovdal 的评论以供参考。另见 http://en.wikipedia.org/wiki/Hayes_command_set#The_basic_Hayes_command_set。)

    【讨论】:

    • V.250 要求 AT 命令行应仅以 \r 结束,而不是其他任何内容(例如,不是 \n 而不是 \r\n)。
    • @hlovdal 您已经链接了一个 100 页的文档。你指的是哪个页面?
    • 对于以前没有阅读过 V.250 的任何人,请阅读第 5 章语法和过程的所有内容,会有很多有用的信息(有些过时,不太相关的信息以及...)。在 5.2.1 中指定使用 \r 终止 AT 命令行。
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2012-02-22
    • 2015-03-12
    相关资源
    最近更新 更多