📄 cmsdata.lst
字号:
CX51 COMPILER V7.20 CMSDATA 09/22/2006 14:21:06 PAGE 1
CX51 COMPILER V7.20, COMPILATION OF MODULE CMSDATA
OBJECT MODULE PLACED IN cmsdata.OBJ
COMPILER INVOKED BY: D:\program\keil\C51\BIN\CX51.EXE cmsdata.c LARGE BROWSE DEBUG
line level source
1
2 #include <string.h>
3 #include "cmsdata.h"
4
5
6 int gprs_analyze_msg(char * message)
7 {
8 1 if (strstr(message, "OK") != 0)
9 1 {
10 2 if (strstr(message, "+CMGS:") != 0)
11 2 {
12 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
13 3 // ::PostMessage(threadData.m_hWnd, WM_SMS_SEND_RESPONSE, 0, 0);
14 3 }
15 2 else if (strstr(message, "+CMGR:") != 0)
16 2 {
17 3 return AT_RECV_MSG_CMGR;
18 3 }
19 2 else if (strstr(message, "+CSQ:") != 0)
20 2 {
21 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
22 3 // ::PostMessage(threadData.m_hWnd, WM_SIGNAL_STRENGTH, 0, 0);
23 3 }
24 2 else if (strstr(message, "+CBC:") != 0)
25 2 {
26 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
27 3 // ::PostMessage(threadData.m_hWnd, WM_BATTERY_LEVEL, 0, 0);
28 3 }
29 2 else if (strstr(message, "+CRSL:") != 0)
30 2 {
31 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
32 3 // ::PostMessage(threadData.m_hWnd, WM_RINGER_LEVEL, 0, 0);
33 3 }
34 2 else if (strstr(message, "+CREG:") != 0)
35 2 {
36 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
37 3 // ::PostMessage(threadData.m_hWnd, WM_NETWORK_REGISTRATION, 0, 0);
38 3 }
39 2 else if (strstr(message, "+CGMI") != 0)
40 2 {
41 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
42 3 // ::PostMessage(threadData.m_hWnd, WM_MANUFACTURER_ID, 0, 0);
43 3 }
44 2 else if (strstr(message, "+CGMM") != 0)
45 2 {
46 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
47 3 // ::PostMessage(threadData.m_hWnd, WM_MODEL_ID, 0, 0);
48 3 }
49 2 else if (strstr(message, "+CGMR") != 0)
50 2 {
51 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
52 3 // ::PostMessage(threadData.m_hWnd, WM_REVISION_ID, 0, 0);
53 3 }
54 2 else if (strstr(message, "+CNUM") != 0)
55 2 {
CX51 COMPILER V7.20 CMSDATA 09/22/2006 14:21:06 PAGE 2
56 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
57 3 // ::PostMessage(threadData.m_hWnd, WM_SUBSCRIBER_NUMBER, 0, 0);
58 3 }
59 2 else if (strstr(message, "+CSCS") != 0)
60 2 {
61 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
62 3 // ::PostMessage(threadData.m_hWnd, WM_TE_CHARACTER_SET, 0, 0);
63 3 }
64 2 else if (strstr(message, "+CCLK") != 0)
65 2 {
66 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
67 3 // ::PostMessage(threadData.m_hWnd, WM_TIME, 0, 0);
68 3 }
69 2 else if (strstr(message, "+CRC") != 0)
70 2 {
71 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
72 3 // ::PostMessage(threadData.m_hWnd, WM_CELLULAR_RESULT_CODE, 0, 0);
73 3 }
74 2 else if (strstr(message, "+CR") != 0)
75 2 {
76 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
77 3 // ::PostMessage(threadData.m_hWnd, WM_REPORTING_CONTROL, 0, 0);
78 3 }
79 2 else if (strstr(message, "S0") != 0)
80 2 {
81 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
82 3 // ::PostMessage(threadData.m_hWnd, WM_S0, 0, 0);
83 3 }
84 2 else if (strstr(message, "S7") != 0)
85 2 {
86 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
87 3 // ::PostMessage(threadData.m_hWnd, WM_S7, 0, 0);
88 3 }
89 2 else if (strstr(message, "S8") != 0)
90 2 {
91 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
92 3 // ::PostMessage(threadData.m_hWnd, WM_S8, 0, 0);
93 3 }
94 2 else if (strstr(message, "S10") != 0)
95 2 {
96 3 // threadData.m_rmReceMsg.m_strMessage1 = message;
97 3 // ::PostMessage(threadData.m_hWnd, WM_S10, 0, 0);
98 3 }
99 2 else
100 2 {
101 3 return AT_RECV_MSG_OK;
102 3 }
103 2 }
104 1 else if (strstr(message, "+CMGR:") != 0)
105 1 {
106 2 return AT_RECV_MSG_CMGR;
107 2 }
108 1 else if (strstr(message, "RING") != 0)
109 1 {
110 2 // 振铃
111 2 return AT_RECV_MSG_RING;
112 2 }
113 1 else if (strstr(message, "NO CARRIER") != 0)
114 1 {
115 2 // 无载波
116 2 return AT_RECV_MSG_NO_CARRIER;
117 2 }
CX51 COMPILER V7.20 CMSDATA 09/22/2006 14:21:06 PAGE 3
118 1 else if (strstr(message, "ERROR") != 0)
119 1 {
120 2 // 错误
121 2 return AT_RECV_MSG_ERROR;
122 2 }
123 1 else if (strstr(message, "CMTI") != 0)
124 1 {
125 2 // NEW SMS
126 2 return AT_RECV_MSG_CMTI;
127 2 }else if (strstr(message, ">") != 0)
128 1 {
129 2 return AT_RECV_GET_MSG;
130 2 }
131 1
132 1 return AT_RECV_MSG_NULL;
133 1 }
134
135 // 7bit编码
136 // pSrc: 源字符串指针
137 // pDst: 目标编码串指针
138 // nSrcLength: 源字符串长度
139 // 返回: 目标编码串长度
140 int gprsEncode7bit(const char* pSrc, unsigned char* pDst, int nSrcLength)
141 {
142 1 int nSrc; // 源字符串的计数值
143 1 int nDst; // 目标编码串的计数值
144 1 int nChar; // 当前正在处理的组内字符字节的序号,范围是0-7
145 1 unsigned char nLeft; // 上一字节残余的数据
146 1
147 1 // 计数值初始化
148 1 nSrc = 0;
149 1 nDst = 0;
150 1
151 1 // 将源串每8个字节分为一组,压缩成7个字节
152 1 // 循环该处理过程,直至源串被处理完
153 1 // 如果分组不到8字节,也能正确处理
154 1 while(nSrc<nSrcLength)
155 1 {
156 2 // 取源字符串的计数值的最低3位
157 2 nChar = nSrc & 7;
158 2
159 2 // 处理源串的每个字节
160 2 if(nChar == 0)
161 2 {
162 3 // 组内第一个字节,只是保存起来,待处理下一个字节时使用
163 3 nLeft = *pSrc;
164 3 }
165 2 else
166 2 {
167 3 // 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
168 3 *pDst = (*pSrc << (8-nChar)) | nLeft;
169 3
170 3 // 将该字节剩下的左边部分,作为残余数据保存起来
171 3 nLeft = *pSrc >> nChar;
172 3
173 3 // 修改目标串的指针和计数值
174 3 pDst++;
175 3 nDst++;
176 3 }
177 2
178 2 // 修改源串的指针和计数值
179 2 pSrc++;
CX51 COMPILER V7.20 CMSDATA 09/22/2006 14:21:06 PAGE 4
180 2 nSrc++;
181 2 }
182 1
183 1 // 返回目标串长度
184 1 return nDst;
185 1 }
186 // 7bit解码
187 // pSrc: 源编码串指针
188 // pDst: 目标字符串指针
189 // nSrcLength: 源编码串长度
190 // 返回: 目标字符串长度
191 int gprsDecode7bit(const unsigned char* pSrc, char* pDst, int nSrcLength)
192 {
193 1 int nSrc; // 源字符串的计数值
194 1 int nDst; // 目标解码串的计数值
195 1 int nByte; // 当前正在处理的组内字节的序号,范围是0-6
196 1 unsigned char nLeft; // 上一字节残余的数据
197 1
198 1 // 计数值初始化
199 1 nSrc = 0;
200 1 nDst = 0;
201 1
202 1 // 组内字节序号和残余数据初始化
203 1 nByte = 0;
204 1 nLeft = 0;
205 1
206 1 // 将源数据每7个字节分为一组,解压缩成8个字节
207 1 // 循环该处理过程,直至源数据被处理完
208 1 // 如果分组不到7字节,也能正确处理
209 1 while(nSrc<nSrcLength)
210 1 {
211 2 // 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
212 2 *pDst = ((*pSrc << nByte) | nLeft) & 0x7f;
213 2
214 2 // 将该字节剩下的左边部分,作为残余数据保存起来
215 2 nLeft = *pSrc >> (7-nByte);
216 2
217 2 // 修改目标串的指针和计数值
218 2 pDst++;
219 2 nDst++;
220 2
221 2 // 修改字节计数值
222 2 nByte++;
223 2
224 2 // 到了一组的最后一个字节
225 2 if(nByte == 7)
226 2 {
227 3 // 额外得到一个目标解码字节
228 3 *pDst = nLeft;
229 3
230 3 // 修改目标串的指针和计数值
231 3 pDst++;
232 3 nDst++;
233 3
234 3 // 组内字节序号和残余数据初始化
235 3 nByte = 0;
236 3 nLeft = 0;
237 3 }
238 2
239 2 // 修改源串的指针和计数值
240 2 pSrc++;
241 2 nSrc++;
CX51 COMPILER V7.20 CMSDATA 09/22/2006 14:21:06 PAGE 5
242 2 }
243 1
244 1 // 输出字符串加个结束符
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -