Serial port 检查串行端口GSM调制解调器连接状态

Serial port 检查串行端口GSM调制解调器连接状态,serial-port,gsm,Serial Port,Gsm,我有一个GSM调制解调器连接到一个串行端口,我使用它在某些事件时发送短信 由于它不是即插即用的,我不知道如何检测它的连接状态。像GetCommState这样的WinAPI显然不起作用 我可以定期发送数据包并检查数据是否被使用,但我担心轮询性能和阻塞可能正在使用的缓冲区的风险 那么,有没有其他方法,或者一些基于中断的东西,我可以用来检查是否仍然通过串行端口连接到我的系统 如果能在这方面有任何帮助,我将不胜感激 谢谢。从Windows 7开始,使用来获取有关GSM调制解调器的信息。串行端口是非常原始

我有一个GSM调制解调器连接到一个串行端口,我使用它在某些事件时发送短信

由于它不是即插即用的,我不知道如何检测它的连接状态。像
GetCommState
这样的WinAPI显然不起作用

我可以定期发送数据包并检查数据是否被使用,但我担心轮询性能和阻塞可能正在使用的缓冲区的风险

那么,有没有其他方法,或者一些基于中断的东西,我可以用来检查是否仍然通过串行端口连接到我的系统

如果能在这方面有任何帮助,我将不胜感激


谢谢。

从Windows 7开始,使用来获取有关GSM调制解调器的信息。

串行端口是非常原始的通信设备,它们可以追溯到计算的早期。这就是您插入ASR-33电传打字机开始敲入Fortran程序的原因。他们仍然存在的唯一原因是因为他们很简单,硬件供应商喜欢他们,因为他们不必花钱开发和支持自定义api来使用他们的设备

尽管如此,即使在60年代,计算机也需要查明是否连接了电传打字机。这是通过硬件握手信号实现的。设备通电时,DSR信号(数据集就绪)由设备开启。如果使用.NET SerialPort类,则可以使用SerialPort.DsrHolding属性检查该信号。如果使用winapi,则使用GetCommModemStatus()、MS_DSR_ON标志


这仍然只是告诉您某些设备已连接。如果你想找出是你为之编写程序的调制解调器,那么你可以用一个特定于调制解调器的协议来查询它。没有任何供应商以完全相同的方式实现此功能,但您通常可以使用ATI命令从调制解调器获得标识。有关详细信息,请参阅调制解调器编程手册。

可能不仅仅是Windows 7。正如HansPassant所说,也需要使用Vista和XP.AT命令。标准GSM AT命令手册位于。我尝试了
GetCommModemStatus()
,但似乎无法使其正常工作。请给我一个如何使用它的示例。以及检查条件。在我的例子中,它总是返回奇数变量。