⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gprs.h

📁 gprs开发使用程序
💻 H
📖 第 1 页 / 共 3 页
字号:
\n 2、            AT+STIN  工具箱指示。  
\n 3、            AT+STGI  获得从SIM卡发来的预期命令的信息。  
\n 4、            AT+STCR  主动提供的结果:工具箱控制反应。
\n 	
*/

/*!	\defgroup	Codeing	编码方式
	\n 短消息收发有关的规范主要包括GSM 03.38、GSM 03.40和GSM 07.05。前二者着重描述SMS的技术实现(含
	编码方式),后者则规定了SMS的DTE-DCE接口标准(AT命令集)。
	\n
	\n 一共有三种方式来发送和接收SMS信息:Block Mode, Text Mode和PDU Mode。Block Mode已是昔日黄花,
	前很少用了。Text Mode是纯文本方式,可使用不同的字符集,从技术上说也可用于发送中文短消息,但国
	内手机基本上不支持,主要用于欧美地区。PDU Mode被所有手机支持,可以使用任何字符集,这也是手机默
	认的编码方式。Text Mode比较简单,而且不适合做自定义数据传输,我们就不讨论了。下面介绍的内容,
	是在PDU Mode下发送和接收短消息的实现方法。
	\n
	\n 在PDU Mode中,可以采用三种编码方式来对发送的内容进行编码,它们是7-bit、8-bit和UCS2编码。7-bit
	编码用于发送普通的ASCII字符,它将一串7-bit的字符(最高位为0)编码成8-bit的数据,每8个字符可"压缩"成
	7个;8-bit编码通常用于发送数据消息,比如图片和铃声等;而UCS2编码用于发送Unicode字符。PDU串的用户
	信息(TP-UD)段最大容量是140字节,所以在这三种编码方式下,可以发送的短消息的最大字符数分别是160、
	140和70。这里,将一个英文字母、一个汉字和一个数据字节都视为一个字符。
	\n 需要注意的是,PDU串的用户信息长度(TP-UDL),在各种编码方式下意义有所不同。7-bit编码时,指原始短
	消息的字符个数,而不是编码后的字节数。8-bit编码时,就是字节数。UCS2编码时,也是字节数,等于原始短
	消息的字符数的两倍。如果用户信息(TP-UD)中存在一个头(基本参数的TP-UDHI为1),在所有编码方式下,用户
	信息长度(TP-UDL)都等于头长度与编码后字节数之和。如果采用GSM 03.42所建议的压缩算法(TP-DCS的高3位为
	001),则该长度也是压缩编码后字节数或头长度与压缩编码后字节数之和。
	\n
	\n PDU串表面上是一串ASCII码,由'0'-'9'、 'A'-'F'这些数字和字母组成。它们是8位字节的十六进制数,
	或者BCD码十进制数。PDU串不仅包含可显示的消息本身,还包含很多其它信息,如SMS服务中心号码、目标
	号码、回复号码、编码方式和服务时间等。发送和接收的PDU串,结构是不完全相同的。我们先用两个实际
	的例子说明PDU串的结构和编排方式。
	\n
	\n 7-bit编码举例
	\n 下面以一个具体的例子说明7-bit编码的过程。我们对英文短信"Hello!"进行编码:
	\image html images\7-Bit.jpg
	\n 将源串每8个字符分为一组(这个例子中不满8个)进行编码,在组内字符间压缩,但每组之间是没有什么联系的

	\n 例1 发送:SMSC号码是+8613800250500,对方号码是13851872468,消息内容是"Hello!"。从手机发出的
	PDU串可以是
	\n 08 91 68 31 08 20 05 05 F0 11 00 0D 91 68 31 58 81 27 64 F8 00 00 00 06 C8 32 9B FD 0E 01
	\n 对照规范,具体分析:

	\image html images\UCS2Coding.JPG

	\n 例2 接收:SMSC号码是+8613800250500,对方号码是13851872468,消息内容是"你好!"。手机接收到的
	PDU串可以是
	\n 08 91 68 31 08 20 05 05 F0 84 0D 91 68 31 58 81 27 64 F8 00 08 30 30 21 80 63 54 80 06 4F 60 59 7D 00 21
	\n 对照规范,具体分析:
	\image html images\UCS2DeCode.JPG
	\n 若基本参数的最高位(TP-RP)为0,则没有回复地址的三个段。从Internet上发出的短消息常常是这种情形。
	\n 注意号码和时间的表示方法,不是按正常顺序顺着来的,而且要以'F'将奇数补成偶数。

	\n UCS2编码举例
	
	\n (一)UCS2  编码原理 
	\n 所谓 UCS2  编码,是将单个的字符(1-2  个字节)按 ISO/IEC10646  的规定,转变为 6 位 的 Unicode 宽字符。即将单个的字符转换为由四位的 0 - 9 、 A - F  
母组成的字符串。待发送的消息以 UCS2  码的形式进行发送。 
	\n  
	\n (二)发送 PDU  串的编制分析 
	\n 通过 UCS2  编码我们得到中文 Unicode  码,接着就可以进行发送 PDU  串的编制了。从表 
面上看,PDU  串是 ASCII  码串,同样由 '0' - '9' 、 'A '- 'F' 这些数字和字母组成。它
们是 8  位字节的十六进制数,或者BCD  码十进制数。PDU  串除了包含所发送的消息本
外,还包含很多其它参数信息,如服务中心号码、目标号码和编码方式等。现用一个实例说
明发送 PDU  串的结构和编排方式。 
	\n 例:08 91 683108100005F0 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01 
	\n 参照规范,具体分析: 
	\n 分段含义解释说明 
	\n 08 SMSC  地址信息的长度共 8  个八位字节(包括 91) 
	\n 91 SMSC  地址格式(TON/NPI)  用国际格式号码(在前面加 '+' ) 
	\n 68 31 08 10 00 05 F0 SMSC 地址 8613800100500,补 'F'  凑成偶数个。
	\n 31  基本参数(TP-MTI/VFP)  要求发送回复 
	\n 00  消息基准值(TP-MR) 0 
	\n 0D  目标地址数字个数共 13  个十进制数 
	\n 91  目标地址格式(TON/NPI) 
	\n A1:国内格式 
	\n 91:国际格式 
	\n 81:未知,+86  可带可不带。 
	\n 683119109991F2   目标地址(TP-DA) 8613910199192,补 'F'凑成偶数个。  
	\n 00  协议标识(TP-PID)  是普通 GSM  类型,点到点方式 
	\n 08 
	\n 用户信息编码方式 
	\n (TP-DCS) 
	\n 00:表示 7-bit  编码, 08:表示 UCS2  编码, 
	\n 04:表示 8-bit  编码。 
	\n C2  有效期(TP-VP) 5  分钟 
	\n 06  用户信息长度(TP-UDL)  实际长度 6  个字节 
	\n 60 A8 59 7D FF 01  用户信息(TP-UD)  "您好!" 
 	\n 
	\n 这里需要注意的几点: 
	\n ①.比较 SMSC  地址分段:68 31 08 10 00 05 F0  与真实 SMSC  地址 8613800100500F(为 了凑足 14 
	位,在末尾补 F),不难发现只需将前者奇偶位对调即可得到后者。同样,目标地址分段 683119109991F2  
	与实际目标地址 13910199192F  之间的关系也是如此。 
	\n ②.若"SMSC  地址信息的长度"分段的值为 00,则意味着 SMSC  地址字符串的长度为零, PDU 串的
	"SMSC  地址格式"段和"SMSC  地址"段将省去。且将使用 SIM  卡设置的 SMSC 地址。 
	\n 上例中的 PDU  串变为: 
	\n 00 31 00 0D 91 683119109991F2 00 08 C2 06 60A8597DFF01 
	\n ③.  对于用户信息长度,可通过 VB  中的 Len  函数求得,如"您好!",用 Len("您好!") 得到是 3,那么
	3*2=6  即为用户信息长度 06(这里要转换为 16  进制,并且是两位)。 
	\n ④.用户信息(TP-UD)段最大容量是 140  字节,所以在 UCS2  编码方式下,可发送短消息的最大字符数
	是 70  个。
 	\n 
	\n (三)UCS2  解码 
	\n 在接收消息时,可能不仅收到 UCS2  格式编码的 PDU  串,也可能是 7bit  编码格式(TP-DCS  为 00)
	或 8bit  编码格式(TP-DCS  为 04)的 PDU  串。
	\n 
	\n (四)接收 PDU  串的编制分析 
	\n 接收 PDU  串和发送 PDU  串结构是不完全相同的。通过一个实例来分析,假定收到的短消 息其 PDU  串为: 
	\n 08 91 68 31 08 10 00 05 F0 04 0D 91 68 31 19 10 99 91 F2 00 08 40 40 60 31 35 30 23 06 60 A8 59 7D FF 01 
	\n 参照规范,具体分析:
	\n 分段含义解释说明 
	\n 08 SMSC  地址信息的长度共 8  个八位字节(包括 91) 
	\n 91 SMSC  地址格式(TON/NPI)  用国际格式号码(在前面加 '+' ) 
	\n 68 31 08 10 00 05 F0 SMSC 地址 8613800100500,补 'F' 凑成偶数个。  
	\n 84  基本参数(TP-MTI/MMS/RP)  接收,无更多消息,有回复地址 
	\n 0D  回复地址数字个数共 13  个十进制数(不包括 91  和 'F' ) 
	\n 91  回复地址格式(TON/NPI)  国际格式 
	\n 68 31 19 10 99 91 F2  回复地址(TP-RA) 8613910199192,补 'F' 凑成偶数个。
	\n 00  协议标识(TP-PID)  是普通 GSM  类型,点到点方式 
	\n 08  用户信息编码方式(TP-DCS) UCS2  编码 
	\n 40 90 10 31 35 30 23  服务时间戳(TP-SCTS) 2004-09-01 13:53:03 
	\n 06  用户信息长度(TP-UDL)  实际长度 6  个字节 
	\n 60 A8 59 7D FF 01  用户信息(TP-UD)  "您好!" 
 	\n 
	\n 通过分析,我们可以获取其中的有用信息。如:短信服务中心号码是+8613800100500, 
	\n 发送方号码是 13910199192,发来的消息内容是"您好!",以及发送时间是:2004-09-01 13:53:03。
	\n 
*/

/*!	\defgroup	COMPDESING 详细设计
	\n 本演示程序主要实现的功能:打电话(含挂机),接听电话(含挂机),发送短消息,接收短消息。
	\n 在软件结构上按上述功能分为4个模块:打电话模块,接电话模块,发送短消息模块,接收短消息模块。
	\n 程序拥用两个线程:主线程,用于打电话模块,发送短消息模块。
	\n 				  子线程,用于接电话模块,接收短消息模块。

	\n 整个软件结构如下图所示:
	\image html images\DesignStru.jpg
	\n 各模块说明
	\n 1) 打电话模块
	\n 输入项目:电话号码
	\n 输出项目:拨号信号
	\n 2)接电话模块
	\n 输入项目:新听电话信号
	\n 输出项目:输出接成功提示或挂机失败提示
	\n 3)发送短消息模块
	\n 输入项目:电话号及短消息内容
	\n 输出项目:发送短消息成功提示或失败提示
	\n 4)接收短消息模块
	\n 输入项目:短消息存放位置
	\n 输出项目:短消息内容,读取短消息状态(成功或失败)
	\n 
	\n (二)算法
	\n 短消息编码方式:
	\n PDU编码:7-Bit编码、8-Bit编码、UCS2编码。
	\n 仔细请见  编码方式
	\n
	\n 3.3	模块所选用的算法
	\n 1) 打电话
	\image html images\CallPro.JPG
	\n 2)接电话
	\image html images\RevCallPro.JPG
	\m
	\n 3)发送短消息
	\image html images\SendMsgPro.JPG
	\n
	\n 4)接收短消息
	\image html images\RevMsgPro.JPG

*/

/////////////////////////////////////////////////////////////////////////////
// CGPRSApp:
// See GPRS.cpp for the implementation of this class
//

class CGPRSApp : public CWinApp
{
public:
	CGPRSApp();

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CGPRSApp)
	public:
	virtual BOOL InitInstance();
	//}}AFX_VIRTUAL

// Implementation

	//{{AFX_MSG(CGPRSApp)
		// NOTE - the ClassWizard will add and remove member functions here.
		//    DO NOT EDIT what you see in these blocks of generated code !
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft eMbedded Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GPRS_H__B92CFA9C_B6A6_4777_8729_89EA31D0E9A0__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -