SIM800分析

SIM800分析

 

细节1:
发送链接以后收到
TX:AT+CIPSTART=0,"TCP","mqtt-iot.tslsmart.com","1883"

---RX:

OK

L506_module_receive:

0, CONNECT OK

其实收到的是:
0D 0A 30 2C 20 43 4F 4E 4E 45 43 54 20 4F 4B 0D 0A --17个!

代码:
if ((pst = strstr(otp, "\r\n")) != NULL)
{
	length -= (pst - otp);
	if ((type = read_dat_type(pst, &typeLen)) != GSM_RECEIVE_NULL)
这里otp是原始报文 pst是找到\r\n 
注意strstr定位到\r\n前头!也就是此时pst = strstr(otp, "\r\n")
pst和otp是一样一样的!因为本身就是\r\n打头的!	

细节2:
发送消息是先发AT再发消息
发送消息以后是
L506_write_data

L506_module_receive:

> 

 RX_data_analisys:length = 4 , data=#

> #0D 0A 3E 20 
回答的是\r \n > 空格
这样4个HEX

返回是5 GSM_SEND_READY
然后发信号
                      case GSM_SEND_READY:
                      {
                        xSemaphoreGive(xSocketCmdSemaphore);
                      }break;
这个在发消息里面会采集!!


细节3:
消息发送完成
RX_data_analisys:length = 35 , data=#

0, SEND OK



+RECEIVE,0,4:

 #

上面都是回答的 我们看看这35个字节
0D 0A 
30 2C 20 53 45 4E 44 20 4F 4B 0D 0A 
0D 0A 
2B 52 45 43 45 49 56 45 2C 30 2C 34 
3A 0D 0A 20 02 00 00 

上面例子不好 举例收5个HEX的
+RECEIVE,0,5:
2B 52 45 43 45 49 56 45 2C 30 2C 35 
3A 0D 0A 90 03 

进入解析流程:
0, SEND OK--类型 9--GSM_SEND_OK_TYPE 发信号xSemaphoreGive(xSocketSendSemaphore); 这个在发消息里面会采集!! 和上面一样 也即是AT采集一次 信息以后采集一次



+RECEIVE,0,4:--类型 2--GSM_RECEIVE_TYPE 调到函数里面
类似+RECEIVE,0,137:该你你0socket收到了137个字节

关注一下:ype = read_dat_type(pst, &typeLen)的typeLen
其实它永远是11 就是越过前面的strlen("\r\n+RECEIVE,");
看到后面的那个函数!