WINCE+6410 拨号上网
--作者:赖玉平(Auly)aulyp@163.com
我们现在的模块用的是USB接口,然后模拟成一个COM6进行通信,在CE的: 控制面板->网络连接 里要新建一个连接,选择“拨号连接”然后设置好区域代码,还有附加解调器命令+CGDCON,"IP","CMNET",modem选择,与modem的串口通信速率等信息,然后连接,这上可以实现上网。
添加的CE组件有:
CoreOS->Windwos CE devices->commuication services and newworking->networking-wide area network ->Dial up networking
->Autodail
->TAPI
->Virtual Private Networking(VPN)
我们现在要实现的功能是,让用户只点击一个ICON,就能实现上网,不用这么麻烦去设置。
我写了一个应用,通过RAS 接口调用可以实现拨号上网功能,但是,必须指定一个已建立并设好参数的连接,
所以,还得在程序中创建一个网络连接才行,因为我们需要的简化的其实就是让用户输入附加拨号命令(+CGDCONT=1,"IP","CMNET"那么一长串,其实只需要用户输入一个APN和一个电话号码就OK了)。因为针对不同的运营商,这个APN是不同的,所以这个要能给用户设置。
查MSDN得知,调用RasSetEntryProperties加上RasSetEntryDialParams可以实现,但是这种方法貌似设置不了modem的串口属性、附加拨号命令等一些信息,
用RasSetEntryProperties设置一个Entry的属性的时候,如果Entry的参数中指定的EntryName已经存在了,那么就更改已有的Entry的设置,如果不存在,则创建了一个新的Entry,这样就实现了创建拨号连接的功能,
MSDN上关于RasSetEntryProperties函数中的倒数第二个参数的解释说明是说它是一个指向包含设备配置信息的缓冲区的指针,是关于设modem的串口属性、附加拨号命令等,
但是要查阅关于这个配置信息的更多详细内容,就要看TAPI相关的lineGetDevConfig函数,但是TAPI相关知识是相当庞大的一个体系,因为项目时间很紧,
直接在WINCE系统里的控制面板下,进入“网络和拨号连接”,手动新建一个能拨通上网的连接,我命名为“3GCONNECT”
然后写测试程序,调用RasGetEntryProperties()函数,在倒数第二个参数传一个数组,然后打印出正确设置时的lpb里面的值,结果如下:
- lpb 0x001aed00 "0" unsigned char[436]
[0x0] 0x30 '0' unsigned char
[0x1] 0x00 '' unsigned char
[0x2] 0x00 '' unsigned char //等待信用卡音频信号时间
[0x3] 0x00 '' unsigned char
[0x4] 0x78 'x' unsigned char //120 秒这时间之内未建立连接,则取消拨号
[0x5] 0x00 '' unsigned char
[0x6] 0x00 '' unsigned char
[0x7] 0x00 '' unsigned char
[0x8] 0x00 '' unsigned char //串口参数:流控制,0 -- 无 0x20 软件 0x10 硬件
[0x9] 0x01 'r' unsigned char
[0xa] 0x00 '' unsigned char
[0xb] 0x00 '' unsigned char
[0xc] 0x00 '' unsigned char //串口波特率 19200
[0xd] 0x4b 'K' unsigned char
[0xe] 0x00 '' unsigned char
[0xf] 0x00 '' unsigned char
[0x10] 0x00 '' unsigned char // 对应“设备属性”对话框中的“手动拨号(用户提供拨号串)”,
//如果为0x04 表示选上此项
[0x11] 0x00 '' unsigned char
[0x12] 0x08 '' unsigned char //串口数据位 8位
[0x13] 0x00 '' unsigned char //停止位,00- 1位, 02 - 2位
[0x14] 0x00 '' unsigned char //奇偶校验位,00-无,01奇数,02偶数,03标记,04空格
[0x15] 0x00 '' unsigned char
[0x16] 0x2b '+' unsigned char
[0x17] 0x00 '' unsigned char
[0x18] 0x43 'C' unsigned char
[0x19] 0x00 '' unsigned char
[0x1a] 0x47 'G' unsigned char
[0x1b] 0x00 '' unsigned char
[0x1c] 0x44 'D' unsigned char
[0x1d] 0x00 '' unsigned char
[0x1e] 0x43 'C' unsigned char
[0x1f] 0x00 '' unsigned char
[0x20] 0x4f 'O' unsigned char
[0x21] 0x00 '' unsigned char
[0x22] 0x4e 'N' unsigned char
[0x23] 0x00 '' unsigned char
[0x24] 0x54 'T' unsigned char
[0x25] 0x00 '' unsigned char
[0x26] 0x3d '=' unsigned char
[0x27] 0x00 '' unsigned char
[0x28] 0x31 '1' unsigned char
[0x29] 0x00 '' unsigned char
[0x2a] 0x2c ',' unsigned char
[0x2b] 0x00 '' unsigned char
[0x2c] 0x22 '"' unsigned char
[0x2d] 0x00 '' unsigned char
[0x2e] 0x49 'I' unsigned char
[0x2f] 0x00 '' unsigned char
[0x30] 0x50 'P' unsigned char
[0x31] 0x00 '' unsigned char
[0x32] 0x22 '"' unsigned char
[0x33] 0x00 '' unsigned char
[0x34] 0x2c ',' unsigned char
[0x35] 0x00 '' unsigned char
[0x36] 0x22 '"' unsigned char
[0x37] 0x00 '' unsigned char
[0x38] 0x43 'C' unsigned char
[0x39] 0x00 '' unsigned char
[0x3a] 0x4d 'M' unsigned char
[0x3b] 0x00 '' unsigned char
[0x3c] 0x4e 'N' unsigned char
[0x3d] 0x00 '' unsigned char
[0x3e] 0x45 'E' unsigned char
[0x3f] 0x00 '' unsigned char
[0x40] 0x54 'T' unsigned char
[0x41] 0x00 '' unsigned char
[0x42] 0x22 '"' unsigned char
[0x43] 0x00 '' unsigned char
[0x44] 0x00 '' unsigned char后面的全为0
经过改不同的参数然后以上面的方法打出这个参数传回来的值,总结出
所以总结出以下结构体:
typedef struct
{ //offerset
U16INT Reserved1; //0 一般为0x30
U16INT WaitForCreditcard; //0x02 等待信用卡音频信号时间,单位 ;秒
U16INT WaitForConnect; //0x04 这时间之内未建立连接,则取消拨号
U16INT Reserved2; //0x06 一般为0
UINT8 Flowcontrol; // 0x08 串口参数:流控制,0 -- 无 0x20 软件 0x10 硬件
UINT8 Unknow1; // 0x09 一般为1,暂时还不知它是什么作用
U16INT Reserved3; // 0x0a = 00
U16INT BaudRate; //0x0c 串口波特率例如 19200
U16INT Reserved4; // 0x0e =0
U16INT Configbit2; // 0x10 // 对应“设备属性”对话框中的“手动拨号(用户提供拨号串)”,如果为0x04 表示选上此项
UINT8 DataBit; // 0x12 串口数据位 例如:8位
UINT8 StopBit; // 0x13 停止位00- 1位, 02 - 2位