SimplePCConnect是SimpleTeam提供的一款免费的GSM模块短信息驱动程序。该驱动程序可以通过红外线或数据线方式驱动多种使用 AT Command的设备,例如:Nokia、NEC、Siemens、WaveCOM等等。通过该驱动程序,用户可以发送中文(普通或免提)和英文短信息。第二代驱动主要增加了对二进制数据、WAP Push ( Service Indication / Service Loading ) 、WAP Bookmark、GPRS Setting、MMS Indication和小灵通短信的支持。
提供的驱动程序为DLL文件,适合调用的程序有:Visual Basic、C++ Builder、Visual C&C++、Delphi、Java等等。另外附件中还提供了相关的Visual Basic开发源代码以及函数详细说明。最新版本的驱动完全免费,使用和开发上没有任何限制,也不需要软件授权。
点击这里可以下载该程序:SimplePCConnect2.zip。
一、简单介绍
Simple PC Connect是采用Visual C&C++ 6.0所编写的动态连接调用库。该模块中包含了Windows下的串口调用、AT指令驱动以及短信息PDU格式的编码和解码器等功能。调用该模块中的标准过程,可以驱动多种兼容AT指令的GSM设备。这些GSM设备包括绝大多数Nokia手机(例如:5110、6210等等)、NEC、WaveCOM模块、Falcom模块等等设备,实现短信息的收发。
二、功能介绍
(1)使用Visual C&C++ 6.0编写成DLL模块,可以通过Visual C&C++或Visual Basic等其他程序实现调用。
(2)内部函数简单易用,可以十分容易地实现短信息的收发。
(3)内部支持Unicode 8Bit和7Bit编码/解码,可以实现中文/英文短信息的收发。
(4)内部支持二进制数据、WAP Push(Service Indication / Service Loading)、WAP Bookmark、GPRS Setting和MMS Indication等特殊短信息。
(5)支持以红外线或数据线的方式驱动兼容AT指令的GSM设备。
(6)支持与硬件设备的相互绑定,防止软件被非法拷贝并应用。
三、函数以及说明
Simple PC Connect模块的函数一共可以分为三类函数:模块初始化函数、连接管理函数和发送接收函数。
3.1 模块初始化函数
3.1.1 取得模块相关信息
//Get the information string of the dll moudle.
LPCTSTR _stdcall GetModuleInformation();
【过程描述】获得一个DLL模块描述的字符串(以’\0’结尾)。
【注意问题】
(1)该函数可以随时调用。
3.1.2 初始化模块
//Initialize the module.
BOOL _stdcall InitializePCConnect(UINT nInitializeStatus);
【过程描述】
在Debug版本中,该函数中将初始化一个日志函数。如果能够成功地打开日志文件,那么该函数将返回TRUE,否则返回FALSE。在Release版本中没有如上的处理过程,整个函数直接返回TRUE。
【注意问题】
(1)在开始使用模块的相关函数之前,请先调用该函数。
(2)在Visual Basic中的Boolean和BOOL型可能有一定的差异。因此,采用Native Code编译后的代码在运行的时候可能会出现无法正常使用的问题。此时采用P-Code编译即可。
3.1.3 卸载模块
//Uninitialize the module.
void _stdcall UninitializePCConnect();
【过程描述】
关闭所有设备,并释放已分配的内存。
【注意问题】
(1)在卸载模块之前必须调用该函数。这样可以关闭忘记关闭的设备和释放已分配的内存。否则可能导致串口被长时间占用。
3.2 设备连接管理
3.2.1 初始化连接
//Open the connection with the PC.
BOOL _stdcall OpenPCConnect(UINT nDeviceNumber,LPCTSTR lpszLicence,LPCTSTR lpszSCA);
【过程描述】
该函数将打开nDeviceNumber所指定的串口,并读取设备的相关参数。如果某些参数不在范围内,那么该函数将返回初始化失败。
【注意问题】
(1)该函数会打开串口,并且初始化该串口。在使用完成后,一定要调用ClosePCConnect关闭该设备。
(2)如果lpszLicence不填写或者填写不正确,将不影响连接的打开过程。
(3)短信息中心如果不设置,那么该函数将试图从设备中读取。如果设备中也没有设置,那么设备将返回初始化失败。
(4)引起设备初始化失败的原因比较多,例如:串口尚未连接、电源没有连接、非AT兼容设备、SIM卡没插上、读取序列号失败、读取短信息中心失败等等。
3.2.2 重新打开连接
//Reopen the connection with the PC.
BOOL _stdcall ReopenPCConnect(UINT nDeviceNumber);
【过程描述】
重新快速初始化已经出现严重错误的设备(该设备已经打开,在使用中发生严重错误)。
【注意问题】
(1)该函数仅在设备出现严重错误的时候才使用。
(2)其他时候使用也有效,但是没有实际意义。
(3)不要在发送和接收过程完成之前使用该函数。
3.2.3 关闭连接
//Close the connection with the PC.
void _stdcall ClosePCConnect(UINT nDeviceNumber);
【过程描述】
关闭指定设备,并释放已分配的内存。
【注意问题】
(1)在使用OpenPCConnect建立连接后,都要使用ClosePCConnect实现关闭。
(2)ClosePCConnect只能关闭所指定的设备。
(3)设备关闭,连接也随即关闭。此后将不能在使用发送和接收函数操作该设备。
(4)不要在发送或接收过程完成之前使用该函数。
3.2.4 获得设备授权状态
//Get the authorization.
BOOL _stdcall GetAuthorization(UINT nDeviceNumber);
【过程描述】
获得已打开设备的授权状态。
【注意问题】
(1)在打开设备的时候,请使用正确的lpszLicence将设备初始化。
3.2.5 检查设备是否支持AT指令
//Detect the connection with the PC.
BOOL DetectPCConnect(UINT nDeviceNumber);
【过程描述】
获得已打开设备的授权状态。
【注意问题】
(1)请在该设备打开之前使用该检测指令。
3.3 内容管理函数
3.3.1 参数设置函数
//Set status receipt requested.
void _stdcall SetStatusReceiptRequested(BOOL bStatusReceiptRequested);
//Set reject duplicated.
void _stdcall SetRejectDuplicated(BOOL bRejectDuplicated);
//Set protocol identification.
void _stdcall SetProtocolIdentification(BYTE bProtocolIdentification);
【过程描述】
【注意问题】
(1)通过收条在很大程度获得用户的接收情况。
(2)一般来说不用拒绝重复的MR。
(3)应用协议类型在某些特殊短信息的时候会用到。
(4)这些参数应当在设置内容(SetXXXContent)之前设置。
3.3.2 内容设置函数
//Set the content into the list.
BOOL _stdcall SetUTF8Content(LPCTSTR lpszContent,BOOL bImmediateDisplay);
BOOL _stdcall Set7BitContent(LPCTSTR lpszContent);
BOOL _stdcall SetBinaryContent(LPCTSTR lpszContent,BOOL bHeaderIndication);
【过程描述】
设定待发送的内容。
【注意问题】
(1)SetUTF8BitContent能够设置中文或者中英混合,甚至是其他语言的短信息。但是内容长度不能超过70个Unicode字符。如果超过,则该函数返回FALSE。
(2)Set7BitContent是用来发送纯ASCII码的短信息。内容长度不能超过160个ASCII码。如果超过,则该函数返回FALSE。
(3)如果对多人实行群发,内容在每次发送的时候只需要设置一次即可。这样简化发送过程。
3.3.3 内容清理函数
//Clear the content.
void _stdcall ClearContent();
【过程描述】
清理设定待发送的内容。
【注意问题】
(1)该函数将清理所有的相关内容,使设定内容自动清空。
3.3.4 WAP功能函数
//Set the wap push into the list.
BOOL _stdcall SetWAPPushService(LPCTSTR lpszReference,LPCTSTR lpszDescription,BOOL bImmediately);
//Set the wap bookmark into the list.
BOOL _stdcall SetWAPPushBookmark(LPCTSTR lpszReference,LPCTSTR lpszDescription);
//Set the gprs settting into the list.
BOOL _stdcall SetWAPGPRSSetting(LPCTSTR lpszReference,LPCTSTR lpszDescription);
//Set the mms indication into the list.
BOOL _stdcall SetWAPMMSIndication(LPCTSTR lpszFrom,UINT nSize,LPCTSTR lpszReference);
【过程描述】
从上至下分别设定WAP Push服务,WAP Push书签和WAP GPRS设定。
【注意问题】
(1)URL地址一定要使用http://或者https://开头,否则可能导致异常。
3.4 短信收发函数
3.4.1 发送短信息
//Send the content.
//If not authenticated, then send the advertise at the end of the sending.
BOOL _stdcall SendContent(UINT nDeviceNumber,LPCTSTR lpszTerminalAddress);
【过程描述】
将保存的内容发送到指定的用户。
【注意问题】
(1)在发送前,请先确认设备已经打开。
(2)如果发送成功,那么可以在GetStatus函数中得到Status = 3的状态。
(3)如果发送失败,那么可以在GetStatus函数中得到其他的状态数值。
(4)如果所需要发送的内容被分为多条,那么只要有一条发送失败,那么就直接返回FALSE。
(5)发送函数与接收函数之间已经实现了函数同步处理,因此可以在不同的线程中调用。
(6)一般来说,该函数所需执行的时间相对较长。
(7)如果使用未经授权的设备发送短信息,那么每条正常短信息内容之后都会跟一条广告信息。
(8)如果需要给小灵通发送短信息,请在号码前加106。例如,北京的小灵通号码是80659031,那么目标号码应该是:【106】+『区号』+80659031,即:10601080659031。
3.4.2 接收短信息
//Receive the content.
BOOL _stdcall ReceiveContent(UINT nDeviceNumber,LPSTR lpszTerminalAddress,LPSTR lpszContent);
【过程描述】
从设备中获取接收到的短信息。该函数将只接收文本短信息,屏蔽收条和无法解析的信息(包括数据格式的信息)。
【注意问题】
(1)ReceiveContent并不能每次都返回TRUE。需要有一个虚幻不断地去调用该函数。
(2)如果ReceiveContent返回FALSE,请根据GetStatus函数做相应的处理。
(3)如果从未授权的设备上获取短信息,那么也将获得搀杂着广告信息的短信息。
3.4.3 设备状态函数
//Get the status of the device.
int _stdcall GetStatus(UINT nDeviceNumber);
//Get the error of the device.
int _stdcall GetError(UINT nDeviceNumber);
【过程描述】
获得设备最近一次的状态和错误代码。
【注意问题】
(1)请在每次调用发送和接收函数之后,如果函数返回FALSE,那么就要检测一下设备的状态。根据不同的状态做错误处理。
(2)其他时候使用该函数,是没有实际意义的。
四、安装与使用
Simple PC Connect有两个版本:
(1)Release版本:SimplePCConnect.dll(155,648字节)
(2)Debug版本:SimplePCConnect.dll(1,642,569字节)
使用前,请将该DLL拷贝或安装到Windows的system目录下,通过声明或装载就可以使用该模块中的各个函数。使用方法请参考上面的详细说明。
另外,该模块中可能使用到了Visual C&C++的相关动态连接库。如果你没有该库,请上网下载或者安装Visual C&C++系统。
五、基本调用过程
整个模块的详细调用过程可以参考Visual Basic例子程序的调用过程。这里再简单说明一下:
5.2 发送过程
(1)使用InitializePCConnect初始化模块。
(2)使用OpenPCConnect打开一个指定设备。
(3)使用SetXXXContent设置待发送的内容。
(4)使用SendContent将内容发送到指定的用户手机上。
(5)检测发送结果,进行错误处理。
(6)如果还有用户,那么重复(4)和(5)直到所有的用户都发送完毕。
(7)使用ClosePCConnect关闭一个指定设备。
(8)使用UninitializePCConnect卸载模块。
5.3 接收过程
(1)使用InitializePCConnect初始化模块。
(2)使用OpenPCConnect打开一个指定设备。
(3)使用ReceiveContent接收短信息内容。
(4)检测接收结果,进行错误处理。
(5)不断重复(3)过程,直到整个应用结束。
(6)使用ClosePCConnect关闭一个指定设备。
(7)使用UninitializePCConnect卸载模块。
六、注意问题
6.1 在Visual Basic的接口过程中凡是使用BOOL变量的返回函数有些时候工作不正常。
【解决】
在Visual Basic中的boolean变量为2个字节,而在Visual C&C++中的BOOL为4个字节。建议将函数声明为整数函数,或者使用P-Code(而不是Native Code)编译程序。