當(dāng)前位置:首頁 > 芯聞號(hào) > 充電吧
[導(dǎo)讀]實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽長期工作穩(wěn)定//SIM900.C/*************************************************

實(shí)現(xiàn)了收發(fā)短信,并且支持字符短信和PDU格式短信,支持電話撥打與接聽

長期工作穩(wěn)定


//SIM900.C


/*************************************************************************************************************
?*?文件名:			SIM900.c
?*?功能:			STM32?SIM900底層驅(qū)動(dòng)函數(shù)
?*?作者:			cp1300@139.com
?*?創(chuàng)建時(shí)間:		2013-10-16
?*?最后修改時(shí)間:	2013-10-16
?*?詳細(xì):			GSM_CDMA發(fā)送短信等
					2014-04-22:添加字節(jié)超時(shí)與總超時(shí)
*************************************************************************************************************/
#include?"system.h"
#include?"usart.h"
#include?"SIM900.h"
#include?"delay.h"
#include?"string.h"
#include?"ucos_ii.h"
#include?"unicode_gbk.h"
#include?"main.h"


//SIM900通信緩沖區(qū)
u8	SIM900_Buff[SIM900_BUFF_SIZE];	//緩沖區(qū)


//調(diào)試開關(guān)
#define?SIM900_DBUG	0
#if?SIM900_DBUG
	#include?"system.h"
	#define?SIM900_debug(format,...)	uart_printf(format,##__VA_ARGS__)
#else
	#define?SIM900_debug(format,...)	/
/
#endif	//SIM900_DBUG

//所有短信接收緩沖區(qū)
//#define?PDU_BUFF_SIZE	1024*20			//20KB	可以一次讀取50條未讀短信
u8	SmsPduBuff[PDU_BUFF_SIZE];			//PDU數(shù)據(jù)緩沖區(qū)



static?u8?PhoneNumtoPDUChar(u8?*pNum,?char?*pChar,u8?NumLen);		//將電話號(hào)碼字符轉(zhuǎn)換為PDU要求的字符
static?u8?ChartoPhoneNum(char?*pChar,?char?*pNum,?u8?CharLen);		//將字符轉(zhuǎn)換為電話號(hào)碼
static?u32?StringToUnicodeStr(char?*pStr,?char?*pucode,u32?SrtLen);	//將字符串轉(zhuǎn)換為unicode,并存儲(chǔ)為16進(jìn)制樣式的字符串
static?u32?UnicodeStrToString(u8?*pucode,char?*pStr,u32?SrtLen);	//將字符unicode轉(zhuǎn)換為字符串
static?u32?GSM_StringToHex(char?*pStr,?u8?NumDigits);				//將16進(jìn)制樣式字符串轉(zhuǎn)換為16進(jìn)制整型數(shù)(必須保證字符串字母都是大寫)
static?void?GSM_HexToString(u32?HexNum,char?*pStr,?u8?NumDigits);	//將整型數(shù)字轉(zhuǎn)換為16進(jìn)制樣式字符串(字母為大寫,不帶結(jié)束符)
static?int?gsmDecode7bit(const?u8*?pSrc,?char*?pDst,?int?nSrcLength);//7bit編碼解碼
static?int?gsmEncode7bit(const?char*?pSrc,u8*?pDst);
static?u16?GSM_GetU2SCharOffset(char?*pBuff,u16?CharNum);


static?PHONE_NUMBER?SMSServeNumber;									//全局短信中心號(hào)碼




/*************************************************************************************************************************
*?函數(shù)				:	void?SIM900_SetSMSServeNumber(char?*pSMSServeNumber,u8?NumLen)
*?功能				:	設(shè)置全局短信中心號(hào)碼
*?參數(shù)				:	pSMSServeNumber:短信中心號(hào)碼,NumLen:短信中心號(hào)碼長度
*?返回				:	無
*?依賴				:	無
*?作者				:	cp1300@139.com
*?時(shí)間				:	2013-10-25
*?最后修改時(shí)間?	:?	2013-10-25
*?說明				:?	用于發(fā)送短信的時(shí)候進(jìn)行調(diào)用
*************************************************************************************************************************/
void?SIM900_SetSMSServeNumber(char?*pSMSServeNumber,u8?NumLen)
{
	u8?i;
	
	if(NumLen?>?PHONE_NUMBER_MAX_LEN)?NumLen?=?PHONE_NUMBER_MAX_LEN;	//限制電話號(hào)碼長度
	for(i?=?0;i?<?NumLen;i?++)
	{
		SMSServeNumber.PhoneNumBuff[i]?=?pSMSServeNumber[i];
	}
	SMSServeNumber.PhoneNumLen?=?NumLen;
	SMSServeNumber.PhoneNumBuff[SMSServeNumber.PhoneNumLen]?=?'