wince下Ras拨号

wince gprs拨号类 基于mobile 进行gprs的拨号 立即下载

利用Ras系列函数再wince系统下进行GPRS拨号,经历了几次修改,但期间太懒没有进行总结,感觉不踏实,今决定回顾代码,能总结多少算多少,然后再慢慢完善此文。

     (1)首先,在wince控制面板创建一个拨号连接,把波特率、串口号、(APN、用户名、密码)等设置后确保能够拨号,然后将注册表信息导出后合成到定制wince系统。接下来就可以在这个系统上做对应的应用程序了。

     (2)检测是否存在设备名为pszDeviceName(如我用的是SIM300W模块,SIMCOM提供驱动,名为SIM300 MUX Modem),类型为modem的设备;

     使用的API:需要调用两次RasEnumDevices来获取Devices列表,然后再比较DeviceName。

     示例代码:

view plaincopy to clipboardprint?
 LPRASDEVINFO pRasDevInfo = NULL;  
 DWORD cb = 0;  
DWORD dwDeviceCount = 0;  
DWORD dwRetVal = ::RasEnumDevices(NULL, &cb, &dwDeviceCount);  
 
if ((0 == dwRetVal||dwRetVal==ERROR_BUFFER_TOO_SMALL) && (0 != cb))  
{  
    *pRasDevInfo = reinterpret_cast<LPRASDEVINFO>(new BYTE[cb]);  
    ASSERT(*pRasDevInfo);  
      
    if (*pRasDevInfo)  
    {  
        (*pRasDevInfo)->dwSize = sizeof(RASDEVINFO);  
        dwRetVal = ::RasEnumDevices(*pRasDevInfo, &cb, &dwDeviceCount);  
    }  
    else 
    {  
        dwDeviceCount = 0;  
    }  
}  
       // pRasDevInfo保存了获取的device列表,列表size等于dwDeviceCount。  
        // device name比较代码省略 
  LPRASDEVINFO pRasDevInfo = NULL;
  DWORD cb = 0;
 DWORD dwDeviceCount = 0;
 DWORD dwRetVal = ::RasEnumDevices(NULL, &cb, &dwDeviceCount);
 
 if ((0 == dwRetVal||dwRetVal==ERROR_BUFFER_TOO_SMALL) && (0 != cb))
 {
  *pRasDevInfo = reinterpret_cast<LPRASDEVINFO>(new BYTE[cb]);
  ASSERT(*pRasDevInfo);
  
  if (*pRasDevInfo)
  {
   (*pRasDevInfo)->dwSize = sizeof(RASDEVINFO);
   dwRetVal = ::RasEnumDevices(*pRasDevInfo, &cb, &dwDeviceCount);
  }
  else
  {
   dwDeviceCount = 0;
  }
 }
        // pRasDevInfo保存了获取的device列表,列表size等于dwDeviceCount。
         // device name比较代码省略

    

    

    (3)设置RASENTRY属性

     使用的API:RasGetEntryProperties ;RasSetEntryProperties

     先使用RasGetEntryProperties(需2次调用)获取默认的属性,然后根据具体的情况修改属性值(如:拨号号码)。

     注:需要保存RasGetEntryProperties获取的lpbDeviceInfo,供后面使用(如保存为成员变量m_pDevConfig)。

     (4)设置APN(CDMA拨号无需设置APN),我是从网上找的,具体的链接不记得了。

     定义结构体

    typedef struct tagDEVMINICFG {
 WORD wVersion;
 WORD wWaitBong; // DevCfgHdr
 DWORD dwCallSetupFailTimer; // CommConfig.ModemSettings
 DWORD dwModemOptions; // CommConfig.ModemSettings
 // MDM_BLIND_DIAL MDM_FLOWCONTROL_SOFT
 // MDM_CCITT_OVERRIDE MDM_FORCED_EC
 // MDM_CELLULAR MDM_SPEED_ADJUST
 // MDM_COMPRESSION MDM_TONE_DIAL
 // MDM_ERROR_CONTROL MDM_V23_OVERRIDE
 // MDM_FLOWCONTROL_HARD
 DWORD dwBaudRate; // DCB
 WORD fwOptions; // DevCfgHdr
 // TERMINAL_PRE TERMINAL_POST
 // MANUAL_DIAL
 BYTE ByteSize; // DCB
 BYTE StopBits; // DCB
 BYTE Parity; // DCB

 BYTE Rerver;

 WCHAR szDialModifier[DIAL_MODIFIER_LEN+1]; // Unique to MiniCfg
 // Dynamic devices configuration
 WCHAR wszDriverName[MAX_NAME_LENGTH+1];
 BYTE pConfigBlob[MAX_CFG_BLOB];
 HANDLE hPort;
} DEVMINICFG, *PDEVMINICFG;

        设置代码段如下:

 TCHAR szATCmd[80]={0};
 _stprintf(szATCmd,_T("+CGDCONT=1,/"IP/",/"%s/""),pszAPN);
 PDEVMINICFG pDev=(PDEVMINICFG)m_pDevConfig;
 pDev->dwBaudRate=dwBauti;         // 波特率
 pDev->dwModemOptions&=~dwFlowControl ; // 硬件流控或软件流控

 int dwDialOff=offsetof(DEVMINICFG,szDialModifier);

#ifdef _WIN32_WCE
 memcpy(m_pDevConfig+dwDialOff,szATCmd, 80*sizeof(TCHAR));
#endif
 
 if (m_pszAPN)
 {
  delete []m_pszAPN;
  m_pszAPN = NULL;
 }
 m_pszAPN = new TCHAR[_tcslen(pszAPN)+1];
 _tcscpy(m_pszAPN, pszAPN);

    (5)连网

     使用的API:RasDial

     分为同步连网和异步连网,一般都是选择异步。

     先设置 RASDIALPARAMS rdParams;

     同步连网: DWORD dwRet =  RasDial(NULL, NULL, &rdParams, 0, NULL, &m_hRasConn);

     异步连网: DWORD dwRet = RasDial(NULL, NULL, &rdParams, 0xffffffff, m_hEventWnd, &m_hRasConn);   

     对RasDial返回值进行判断是否成功执行,如果不成功且m_hRasConn不为NULL,需要调用RasHangUp释放m_hRasConn。

     异步中的m_hEventWnd 为HWND类型, 在主窗口中重写WindowdProc来接收消息。

 

LRESULT CHZG_MainDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: 在此添加专用代码和/或调用基类
 if( message == WM_RASDIALEVENT )  // 收到拨号连接消息
 {
   RASCONNSTATE RasState = (RASCONNSTATE)wParam;

 switch (RasState) 
 {     
 case RASCS_OpenPort:   //正在打开端口
  WriteEvent (TEXT("正在打开端口... "));
  break;
 case RASCS_PortOpened:  //端口已打开
  WriteEvent (TEXT("端口已打开"));
  break;
 case RASCS_ConnectDevice:  //正在连接设备
  WriteEvent (TEXT("正在连接设备..."));
  break;
 case RASCS_Connected :   //连接已建立
  m_Status.SetWindowText(_T("拨号成功"));
  WriteEvent(_T("拨号成功"));
  for(int i=0;i<3;i++)
  {
   MessageBeep(-1);
   Sleep(500);
  }

  m_bDialSucc = 1;     //置标志位
  MyAppCtrl.bInConnecting = true;
  TCP_StartConnThread();
  break;
 case RASCS_Disconnected :  //连接断开
  WriteEvent (TEXT("ras Disconnected"));
  m_bDialSucc = 0;     //置标志位
  break;
 default :
  break;
 }

  }

 return CDialog::WindowProc(message, wParam, lParam);
}

   

    (6)断网

     使用的API:RasHangUp

     调用RasHangUp后,最好是能够判断下是否释放完成。

     如:

  DWORD dwRet=RasHangUp(m_hRasConn);
 
 DWORD dwStatusRet=0;
 RASCONNSTATUS rStatus;
 ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
 rStatus.dwSize = sizeof(RASCONNSTATUS);
 dwStatusRet = RasGetConnectStatus(m_hRasConn, &rStatus);
 long lStart=GetTickCount();
 while(dwStatusRet!=ERROR_INVALID_HANDLE)
 {
  MSG msg;
  while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
  dwStatusRet = RasGetConnectStatus(m_hRasConn, &rStatus);
  if (GetTickCount()-lStart>3000)
  {
   break;
  }
 
  //Sleep(10);
  //dwStatusRet = RasGetConnectStatus(m_hRasConn, &rStatus);
  //if (GetTickCount()-lStart>5000)
  //{
  // break;
  //}
 }
 
 CloseHandle(m_hRasConn);
 m_hRasConn=NULL;

    

    (7) 获取当前活动连接的HRASCONN

     使用API:RasEnumConnections

    (8) HRASCONN的释放

    断网时必须得把此资源完全释放,否则会引起拨号不成功。这点在重连网络的时候要特别留意。

 

    (9)开发中发现,如果正在连网,需要取消,调用 RasHangUp, 有时出现RasHangUp函数阻塞不返回了,总结经验是:当连网过程进入到状态RASCS_DeviceConnected后,没有出现RasHangUp不返回的现象。我不知道Ras里面的机制细节,谁知道的劳烦告诉我,在此先谢谢了!

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/nolatestudy/archive/2011/04/22/6342392.aspx

WinCE下自动拨号软件1.4.3 GPRS AutoDial v1.4.3是WinCE下比较好用的GPRS自动拨号软件。 立即下载

相关推荐

Wince下的拨号程序

Wince下的拨号程序,对于开发基于Wince嵌入式的通信软件有很好的参考价值

VC实现 拨号连接及动态IP地址获取

在Win32 API 函数中有一组用于实现远程连接服务RAS 的函数,利用这些函数通过编程可以实现建立和Internet 的拨号连接,并可获得Internet 分配给主机的动态IP 地址。 一、建立拨号连接API   建立拨号连接是利用函数RasDial() 实现的,该函数调用后立即返回,若成功返回0 值,否则返回非0 值。在拨号连接过程中,回调函数接收连接的状态信息及发生的错误代码。

jiangqin115的专栏 1963

EnumDevices

枚举windows设备文件,当需要得到设备的时候可以把当前设备枚举出来.

RasSetEntryProperties

DWORD RasSetEntryProperties( _In_ LPCTSTR lpszPhonebook, _In_ LPCTSTR lpszEntry, _In_ LPRASENTRY lpRasEntry, _In_ DWORD dwEntryInfoSize, _In_ LPBYTE lpbDeviceInfo, _In_ DWORD

cozil的专栏 2575

WINCE_拨号上网配置.doc

WINCE_拨号上网配置.doc,很详细的介绍了WINCE下的拨号上网流程

【ESP32开发】——开发环境搭建(VSCode+PlatformIO)

本章内容主要介绍ESP32的开发环境搭建(基于VSCode+PlatformIO)的流程与相应的注意事项,避免开发ESP32止于环境搭建!在项目的维护过程中,可以更好地管理和更新代码、调试问题,并且能够快速适应和采用新的功能、库或硬件平台。:VSCode 的代码提示和自动补全功能,以及 PlatformIO 的管理工具,都能帮助你编写规范、格式良好且易于阅读的代码。:Arduino 框架是一种简单、易用的嵌入式开发框架,适用于快速原型开发和小型项目。需要选择对应自己开发的开发板型号。

m0_61934621的博客 8414

wince RAS

RAS功能需要引入#include <ras.h> 相关错误信息需要引入#include <Raserror.h> 功能1:枚举所有活动的连接并hangup指定的gprs RASCONN entries[25]; //::memset(entries,0,sizeof(RASCONN)); DWORD bufsize=0; DWORD numEntries=0...

weixin_34278190的博客 146

SAP SLT REODPS_REPL API 的使用介绍

本文聚焦 SAP 数据复制生态中的 RODPS_REPL(常被误写为 REODPS_REPL),解析其作为 ODP(Operational Data Provisioning)标准接口的核心功能与应用场景。RODPS_REPL 是 SAP 提供的 ABAP 接口集合,支持从 ODP 上下文(如 ODP_SAPI、ODP_CDS)执行初始化装载和增量捕获,被 SAP BW、Datasphere 及第三方工具(如 Azure Data Factory、Qlik Replicate)广泛调用。 关键要点: 核心对

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 226

用Ras的API函数创建一个拨号连接

很久以前我们的项目中曾提到过一个需求,因为拨号连接的设置过于繁琐,希望能够在我们的程序中提供输入几个必要的参数,然后自动生成一个拨号连接。当时我对于RAS也是刚刚接触(其实到现在也只是刚刚入了点门),通过查阅资料知道RasSetEntryProperties加上RasSetEntryDialParams可以实现(如果不清楚的,可以查阅MSDN,里面解释的比较清楚),但是这种方法貌似设置不了mode...

tempsitegoogle 493

【matlab】基于 Simulink 的空调恒温控制系统仿真建模

本文介绍了基于Simulink的空调恒温控制系统仿真建模方法。系统采用PID控制算法,通过传感器测量温度、控制器计算信号、执行器调节功率来实现恒温控制。文章详细阐述了Simulink模型搭建步骤,包括PID控制器、房间热力学特性模拟等模块的实现,并提供了测试流程和多种实际部署场景。该方法可有效验证控制算法性能,优化系统设计,适用于家用、商用、工业及汽车空调系统。未来可结合智能算法和节能优化技术进一步提升系统性能。

走向CTO的路上... 919

RT-DETR改进策略【模型轻量化】| 替换骨干网络为EfficientNet v1 高效的移动倒置瓶颈结构

本文记录的是基于。采用了创新性的方法,通过精心平衡网络和来提升性能。本文将的设计优势融入RT-DETR中,提升RT-DETR的性能与效率,使其在目标检测任务中表现更为出色。本文配置了原模型中的共种不同大小的模型结构,以满足不同的需求。

Limiiiing的博客 531

WINCE下的RAS拨号连接

WINCE WM coredll rasdial GPRS拨号 C#源码

chainway765的专栏 2413

基于单片机的智能温控风扇设计

该智能温控风扇系统的设计目标是根据环境温度自动控制风扇的转速或开关状态,确保用户始终处于舒适的温度范围内。实时温度监测:通过温度传感器(如DS18B20或DHT22)实时监控环境温度。风扇控制:根据温度变化自动调节风扇的转速,温度过高时风扇加速,温度适中时风扇转速降低,达到节能与舒适平衡。LCD显示:通过LCD屏幕实时显示温度信息。无线通信:通过Wi-Fi或蓝牙模块将温度数据发送至手机或云平台,支持远程控制风扇的开关或调节转速。报警功能:温度过高或过低时,蜂鸣器发出警报,提示用户注意。

2201_76125393的博客 1154

WINCE下的RAS拨号连接(二)

关于GPRS的拨号操作的代码,见上一篇:http://blog.youkuaiyun.com/chainway765/article/details/6244960 书接上回。      本文介绍WINCE 6.0下的如何检测出已经建立好的GPRS配置的名称:      调用GPRSConnectNet (此为上文中的函数) 进行拨号的时候,是要输入GPRS连接的名称的,在编写GPRS的拨号工具的时候,

chainway765的专栏 1429

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4122

YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!

在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。

猫天意的博客 248

WinCE 下 RAS 拨号连接的建立和拨号过程

在 CE 下如果系统没有建立拨号网络,要实现上网功能时,就需要通过代码来实现建立拨号网络、拨号实现上网的过程。 以下代码中的参数和拨号所用数值,都是电信 EVDO 的配置。如果换 GSM 或 WCDMA 时,请相应修改。 [cpp] view plain copy    [cpp] view plain

imxiangzi的专栏 586

MOS管基础知识及应用电路Multisim仿真

本文系统介绍了MOS管的基础知识及其在电子电路中的典型应用。首先详细解析了MOS管的基本结构、分类和工作原理,包括NMOS、PMOS及CMOS的特性差异。重点阐述了MOS管的三种放大组态电路(共源、共漏、共栅)及其小信号模型分析。随后通过Multisim仿真验证了MOS管在防反接电路、开关电路、放大电路、逻辑门电路、电平转换电路和开关电源(BUCK、BOOST、BUCK-BOOST)等应用中的实际表现。文章还深入探讨了自给偏压和分压式偏置电路的设计要点。全文通过理论分析与仿真实验相结合的方式,全面展示了MO

XU157303764的博客 1482

WINCE+6410 拨号上网

WINCE+6410 拨号上网     --作者:赖玉平(Auly)aulyp@163.com    我们现在的模块用的是USB接口,然后模拟成一个COM6进行通信,在CE的: 控制面板->网络连接 里要新建一个连接,选择“拨号连接”然后设置好区域代码,还有附加解调器命令+CGDCON,"IP","CMNET",modem选择,与modem的串口通信速率等信息,然后连接,这上可以实现上

3281

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WinCe系统3G和RAS拨号 - 基于 .NET Compact Framework和C++

<br /> <br />在.NET Compact Framework下开发3G应用可以有两个options,1:AT command, 2:RAS。其实RAS最终也是通过AT command来管理3G设备,RAS屏蔽了技术细节,很方便地建立TCP/IP based 的网络连接,所以推荐使用RAS,WinCE本身提供了native API可以直接操作RAS,管理3G设备及其连接。与此同时RAS也支持有线电话拨号,GPRS等应用。<br />RAS简介<br /><br />RAS的详细介绍见 Overvi

wince--linux的专栏 1194

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WinCE 下 RAS 拨号连接的建立和拨号过程----代码示例

原文地址::http://blog.youkuaiyun.com/91program/article/details/8262374 在 CE 下如果系统没有建立拨号网络,要实现上网功能时,就需要通过代码来实现建立拨号网络、拨号实现上网的过程。 以下代码中的参数和拨号所用数值,都是电信 EVDO 的配置。如果换 GSM 或 WCDMA 时,请相应修改。 [cpp]

xqhrs232的专栏 1469

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 如何结束阻塞状态的线程
下一篇: SQLite3 delete限制删除行数的问题
WaveYang
博客等级 码龄22年 14粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值