家庭固定滅火系統(tǒng)中短消息報警模塊設計
下面詳細說明一下短消息發(fā)送流程。當運動檢測程序檢測到有運動目標出現(xiàn)后,系統(tǒng)便會調(diào)用短消息發(fā)送模塊。這時,程序先獲取要發(fā)送的短消息內(nèi)容和要發(fā)送到的手機號碼,然后設置短消息模式為PDU模式,如果是英文短信則用英文的7-bit編碼方式,如果是中文或者是中、英混合短信,則用中文的UCS2編碼。然后將短消息發(fā)送出去。其發(fā)送流程代碼如下:
∥dst_mb表示短消息要發(fā)送到的目標手機號碼
∥sms_content是短信的內(nèi)容
∥如果發(fā)送成功則返回0,否則返回-1。
sendsms (char*dst_mb,char*sms_content);
write_comm(“AT+CMGF=0 ”,10);∥設置短消息為PDU模式
strcpy(sms->SCA,smsc);∥將短消息中心地址放到結構體sms中
strcpy(sms->TPA,dst_mb);∥設置目標號碼
sms->TP_PID=0;∥GSM類型設置為點到點方式
sms->TP_DCS=0; ∥7-bit編碼
strcpy(sms->TP_UD,sms_content);
encode_pdu(src,pdu);∥將源src編碼為pdu
/*將字節(jié)轉換為字符串,如(0xC8,0x32,0x9B,0xFD,0x0E,0x01)轉換成C8329BFDOE01*/bytestostr (src,dst,len);
/*正常順序的字符串轉換為量量顛倒的字符串,如果長度為奇數(shù),補’F’湊成偶數(shù),如:“8613851872468”-->“683158812764F8”*/invert(src,dst,len);
encode7bit(src,dst,len);/*pdu模式的7-bit編碼
encode8bit(src,dst,len);/*pdu模式的8-bit編碼*/
encodeUCS2(src,dst,len);/*pdu模式的UCS2編碼*/
這里值得一提的是中文短消息的編碼和解碼。GSM短消息中使用的是UTF-8編碼,而實際的計算機上使用的是GB-2312碼,因而存在一個轉換問題。而由于UTF-8和GB-2312編碼之間不存在一一對應的線性關系,因此,只能采用查表的方式進行轉換。
事實上,以上的中文發(fā)送程序也能發(fā)送英文或者中英文混發(fā)。只是這樣發(fā)送英文時,英文字符象中文字符一樣要用兩個字符表示,所以,它和發(fā)送中文一樣,只能發(fā)送70個字符。
2.3 短消息的接收
通過短信接收進程可定時查詢SIM卡,如果有新的短信,則將新的短信讀入、解碼,然后刪除,這樣可以防止由于SIM卡中的短消息滿,而接收不到新的短消息。短信的接收是短信的發(fā)送的逆過程,其數(shù)據(jù)格式和發(fā)送短消息時相同。
接收短信時,系統(tǒng)首先判斷是否要接收短消息。當?shù)弥枰邮斩滔⒑螅捎肁T+CNMI=?來判斷是否有新的短消息,如果有,則用AT+CMGL=1來讀取短消息,并對讀取的每條短消息進行解碼。當讀取一條短信后,即可用AT+CMGD=index,來直接刪除,然后再讀取下一條短消息。直到不再需要讀取短消息。其代碼為:
評論