计算机应用 | 古代文学 | 市场营销 | 生命科学 | 交通物流 | 财务管理 | 历史学 | 毕业 | 哲学 | 政治 | 财税 | 经济 | 金融 | 审计 | 法学 | 护理学 | 国际经济与贸易
计算机软件 | 新闻传播 | 电子商务 | 土木工程 | 临床医学 | 旅游管理 | 建筑学 | 文学 | 化学 | 数学 | 物理 | 地理 | 理工 | 生命 | 文化 | 企业管理 | 电子信息工程
计算机网络 | 语言文学 | 信息安全 | 工程力学 | 工商管理 | 经济管理 | 计算机 | 机电 | 材料 | 医学 | 药学 | 会计 | 硕士 | 法律 | MBA
现当代文学 | 英美文学 | 通讯工程 | 网络工程 | 行政管理 | 公共管理 | 自动化 | 艺术 | 音乐 | 舞蹈 | 美术 | 本科 | 教育 | 英语 |

智能家居系统的设计与实现网络毕业论文(7)

2013-09-04 01:05
导读:在该类中,关键的函数为gsmDecodePdu函数与gsmEncodePdu函数,它们将在智能家居中的对话框类CSmartHomeDlg中被调用。调用方法将在下文给予介绍。gsmDecodePdu函数

    在该类中,关键的函数为gsmDecodePdu函数与gsmEncodePdu函数,它们将在智能家居中的对话框类CSmartHomeDlg中被调用。调用方法将在下文给予介绍。gsmDecodePdu函数与gsmEncodePdu函数分别用来在发短信时根据PDU规范进行编码,以及对串口收到的PDU编码进行解码。编码与解码根据在头文件中定义的短消息结构体进行取值或填充。以下是定义的关于编码方式的常量和填充短消息的数据结构。这些在接收与发送短信时是共用的。

#define GSM_7BIT        0           //7Bit编码方式

#define GSM_8BIT        4           //8Bit编码方式

#define GSM_UCS2        8           //UCS2编码方式

typedef struct {

    char SCA[16];       // 短消息服务中心号码(SMSC地址)

    char TPA[16];       // 目标号码或回复号码(TP-DA或TP-RA)

    char TP_PID;       // 用户信息协议标识(TP-PID)

    char TP_DCS;      // 用户信息编码方式(TP-DCS)

    char TP_SCTS[16];  // 服务时间戳字符串(TP_SCTS), 接收时用到

    char TP_UD[161];   // 原始用户信息(编码前或解码后的TP-UD)

    char index;         // 短消息序号,在读取时用到

} SM_PARAM;

  4.4.2.2 CEncode类各成员函数的作用和工作流程:

  gsmDecodePdu()函数用于接收、阅读短消息。输入源PDU串的指针,目标PDU参数指针,并返回用户信息长度。源PDU串是可打印字符串,如“C8329BFD0E01”,目标PDU参数是字节数据,如“{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}”,在这个函数中,较多的采用了同在一个类中的可打印字符串转换为字节数据的函数gsmString2Bytes;在短消息服务中心(SMSC)和回复号码的字符处理过程中,根据PDU串的编码规范,需要对描述SMSC的字符串段进行两两颠倒,并且去掉经颠倒后的字符串后的最后一个字符——“F”,那就采用了同在一个类中的gsmSerializeNumbers函数;经过数据分离,将PDU串中的描述短信编码位TP-DCS跟规定的数值进行对比,如表示7位码的数值为0,8位码为4,UCS2编码为8等。对比完成后,将用户信息进行对应方式的解码——如7位解码。它的工作流程如图4-13所示。

 SHAPE  \* MERGEFORMAT

图4-13  CEncode类gsmDecodePdu函数工作流程

  gsmEncodePdu()函数用于编制、发送短消息,输入源PDU参数指针,输出目标PDU串指针,并返回目标PDU串长度。源PDU参数是字节信息,如“{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01},目标PDU参数是字节数据,如“C8329BFD0E01”,在这个函数中,较多的采用了同在一个类中的字节数据转换为可打印字符串的函数gsmBytes2String;在短消息服务中心(SMSC)和回复号码的字符处理过程中,根据PDU串的编码规范,需要对描述SMSC号码进行两两颠倒,并且在经颠倒后的字符串后加上一个字符——“F”,那就采用了同在一个类中的gsmInvertNumbers函数;根据描述短信编码的TP-DCS跟规定的数值进行对比,如表示7位码的数值为0,8位码为4,UCS2编码为8等。对比完成后,将用户信息进行对应方式的编码——如7位编码。它的工作流程如图4-14所示。

 SHAPE  \* MERGEFORMAT

图4-14  CEncode类gsmEncodePdu函数工作流程

  gsmString2Bytes函数的作用是将可打印字符串转换为字节数据,如"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01},输入源字符串指针和输出的源字符串长度,输出目标数据指针,返回目标数据的长度。流程图如图4-15所示:

 SHAPE  \* MERGEFORMAT

图4-15  gsmString2Bytes函数工作流程

  其中每两个字符串要整合成一个字节数据,如“C8”要转化为“0xC8”,故第一个字符“C”经字符转化为十六进制后要左移四位,使其成为“0xC0”,再与经过转换的低四位进行相或;然后计数器加2,源字符串和目标数据的指针往后移一个单位,继续处理下面的字符,直到计数器值的大小等于要处理的源字符串长度,则将处理好的数据输出。字符转化为十六进制的原理是:数字字符与0字符相减,得到它们的ASCII码之差,这个差就是这个字符所要表达的数字大小,如字符‘8’就转换成了数字类型的8,用二进制表示就是1000。而A、B、C、D、E、F等字符是与‘A’的ASCII码值相减,再加上10,就可以得到其表达的十六进制数值。如‘F’减去‘A’得到5,再加10,得到15,实质上就是十六进制中F所对应的十进制数15。

gsmBytes2String函数的功能与gsmString2Bytes函数相反,工作流程如图4-16所示。

 SHAPE  \* MERGEFORMAT

图4-16  gsmBytes2String函数工作流程

  其中低四位是每个字节数据与0x0f位与得到。每四位表达的数值为0~15,而在tab数组中,从tab[0]到tab[15],对应的字符为‘0’到‘9’和‘A’到‘F’,通过此算法可以达到由数值型到字符型的转换,最后完成整条字节数据到字符串的转换。

  gsmEncode7bit函数的作用是7bit编码。输入源字符串指针和源字符串的长度,输出目标字符串指针和目标编码串长度。工作流程图如图4-17所示。

 SHAPE  \* MERGEFORMAT

图4-17  gsmEncode7bit函数流程

  gsmDecode7bit函数用于7位码的解码,输入源编码串指针和源编码串长度,输出目标字符

上一篇:SNS网络中的若干问题网络毕业论文 下一篇:没有了