2014-05-02 46 views
1

我在C++上编写小程序,她切换调制解调器2G \ 3G模式。 其行不通:-(如何在USB调制解调器上切换2G 3G模式使用C++的华为E171?

PROGRM读取数据形式调制解调器,如果发送AT-命令对应的调制解调器没有回答。

请帮我;-)

// 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; 
} 

回答

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。)

+0

OOGA,thenks //// 其工作 – user3597106

+1

[V.250(HTTP://www.itu。 int/rec/T-REC-V.250-200307-I/en)要求AT命令行应该仅以'\ r'结尾,而不是其他任何东西(例如不是'\ n'而不是'\ r \ n ')。 – hlovdal

+0

@hlovdal您已经链接了一个100页的文档。你指的是哪一页? – ooga

相关问题