实现了收发短信,并且支持字符短信和PDU格式短信,支持电话拨打与接听
长期工作稳定
//GU900E.C
1. /*************************************************************************************************************
2. * 文件名: GU900E.c
3. * 功能: STM32 GU900E底层驱动函数
4. * 作者:
5. * 创建时间: 2016-5-16
6. * 最后修改时间: 2016-5-16
7. * 详细: GSM_CDMA发送短信等
8. 2014-04-22:添加字节超时与总超时
9. *************************************************************************************************************/
10. #include "system.h"
11. #include "usart.h"
12. #include "GU900E.h"
13. #include "delay.h"
14. #include "string.h"
15. #include "ucos_ii.h"
16. #include "unicode_gbk.h"
17. #include "main.h"
18.
19.
20. //GU900E通信缓冲区
21. u8 GU900E_Buff[GU900E_BUFF_SIZE]; //缓冲区
22.
23.
24. //调试开关
25. #define GU900E_DBUG 0
26. #if GU900E_DBUG
27. #include "system.h"
28. #define GU900E_debug(format,...) uart_printf(format,##__VA_ARGS__)
29. #else
30. #define GU900E_debug(format,...) /\
31. /
32. #endif //GU900E_DBUG
33.
34. //所有短信接收缓冲区
35. //#define PDU_BUFF_SIZE 1024*20 //20KB 可以一次读取50条未读短信
36. u8 SmsPduBuff[PDU_BUFF_SIZE]; //PDU数据缓冲区
37.
38.
39.
40. static u8 PhoneNumtoPDUChar(u8 *pNum, char *pChar,u8 NumLen); //将电话号码字符转换为PDU要求的字符
41. static u8 ChartoPhoneNum(char *pChar, char *pNum, u8 CharLen); //将字符转换为电话号码
42. static u32 StringToUnicodeStr(char *pStr, char *pucode,u32 SrtLen); //将字符串转换为unicode,并存储为16进制样式的字符串
43. static u32 UnicodeStrToString(u8 *pucode,char *pStr,u32 SrtLen); //将字符unicode转换为字符串
44. static u32 GSM_StringToHex(char *pStr, u8 NumDigits); //将16进制样式字符串转换为16进制整型数(必须保证字符串字母都是大写)
45. static void GSM_HexToString(u32 HexNum,char *pStr, u8 NumDigits); //将整型数字转换为16进制样式字符串(字母为大写,不带结束符)
46. static int gsmDecode7bit(const u8* pSrc, char* pDst, int nSrcLength);//7bit编码解码
47. static int gsmEncode7bit(const char* pSrc,u8* pDst);
48. static u16 GSM_GetU2SCharOffset(char *pBuff,u16 CharNum);
49.
50.
51. static PHONE_NUMBER SMSServeNumber; //全局短信中心号码
52.
53.
54.
55.
56. /*************************************************************************************************************************
57. * 函数 : void GU900E_SetSMSServeNumber(char *pSMSServeNumber,u8 NumLen)
58. * 功能 : 设置全局短信中心号码
59. * 参数 : pSMSServeNumber:短信中心号码,NumLen:短信中心号码长度
60. * 返回 : 无
61. * 依赖 : 无
62. * 作者 :
63. * 时间 : 2016-5-17
64. * 最后修改时间 : 2016-5-17
65. * 说明 : 用于发送短信的时候进行调用
66. *************************************************************************************************************************/
67. void GU900E_SetSMSServeNumber(char *pSMSServeNumber,u8 NumLen)
68. {
69. u8 i;
70.
71. if(NumLen > PHONE_NUMBER_MAX_LEN) NumLen = PHONE_NUMBER_MAX_LEN; //限制电话号码长度
72. for(i = 0;i < NumLen;i ++)
73. {
74. SMSServeNumber.PhoneNumBuff = pSMSServeNumber;
75. }
76. SMSServeNumber.PhoneNumLen = NumLen;
77. SMSServeNumber.PhoneNumBuff[SMSServeNumber.PhoneNumLen] = '\0'; //添加结束符
78. GU900E_debug("设置短信中心号码为:%s\r\n",SMSServeNumber.PhoneNumBuff);
79. }
80.
81.
82.
83.
84. /*************************************************************************************************************************
85. * 函数 : bool GSM_CheckNotASCII(char *pBuff,u16 Len)
86. * 功能 : 检查字符串中是否含有非ASCII编码
87. * 参数 : pBuff:字符串缓冲区;Len:长度
88. * 返回 : FALSE:字符串全部为ASCII编码;TRUE:字符串含有非ASCII编码,一般为汉字编码
89. * 依赖 : 无
90. * 作者 :
91. * 时间 : 2016-5-17
92. * 最后修改时间 : 2016-5-17
93. * 说明 : 用于选择发送短信的模式,选择U2S或者7BIT编码