⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sms.h

📁 用AVR控制GPRM模块。用于远程通讯等等
💻 H
📖 第 1 页 / 共 2 页
字号:
//const prog_uchar cshcg[]={"初始化成功"};
//const prog_uchar cshsb[]={"初始化失败"};
//const prog_uchar xdhhmcg[]={"写电话号码成功"};
//const prog_uchar xdhhmsb[]={"写电话号码失败"};
//const prog_uchar send_error[]={"发送错误"};
//const prog_uchar unknow[]={"未知错误"};
//const prog_uchar qqfs[]={"请求发送"};
//const prog_uchar sdzqdx[]={"收到正确短信"};
//const prog_uchar sdljdx[]={"收到垃圾短信"};
//const prog_uchar nyxddxx[]={"你有新的短消息"};

const prog_uchar shouwei_mima[]={"1234"};
const prog_uchar botelv[]={"botelv"};
const prog_uchar zhujihaoma[]={"zhujihaoma"};
const prog_uchar duanxinzhongxin[]={"duanxinzhongxin"};



const prog_uchar ATZ_r[]={"ATZ\r"};
const prog_uchar ATE0_r[]={"ATE0\r"};
const prog_uchar AT_CMGF_0_r[]={"AT+CMGF=0\r"};
const prog_uchar AT_CMEE_1_r[]={"AT+CMEE=1\r"};
const prog_uchar AT_CPBS_SM_r[]={"AT+CPBS=\"SM\"\r"};
const prog_uchar ATV0_r[]={"ATV0\r"};

const prog_uchar AT_CPBW[]={"AT+CPBW="};
const prog_uchar d_y[]={",\""};
const prog_uchar y_d_129_d_y[]={"\",129,\""};
const prog_uchar y_r[]={"\"\r"};

const prog_uchar AT_CPBR[]={"AT+CPBR="};
const prog_uchar _r[]={"\r"};

const prog_uchar AT_CMGD[]={"AT+CMGD="};

const prog_uchar AT_CMGS[]={"AT+CMGS="};


const prog_uchar AT_CMGL_r[]={"AT+CMGL=4\r"};


#define mima_weishu 4 //密码长度
#define phone_number_weishu 13 //电话号码长度
#define baud_rate_weishu 4//波特率设置的长度

char mima[6] __attribute__((section(".eeprom")))={"123400"};//密码的EEPROM变量
char baud_rate[6] __attribute__((section(".eeprom")))={"9600"};//波特率的EEPROM变量
char phone_number[16] __attribute__((section(".eeprom")))={"8613930193305"};//回复的电话号码的EEPROM变量
char center_number[16] __attribute__((section(".eeprom")))={"8613800311500"};//短信中心号码
//15832126493

// 短消息参数结构,编码/解码共用
// 其中,字符串以0结尾
typedef struct {
    char SCA[16];       // 短消息服务中心号码(SMSC地址)
    char TPA[16];       // 目标号码或回复号码(TP-DA或TP-RA)
    char TP_PID;        // 用户信息协议标识(TP-PID)
    char TP_DCS;        // 用户信息编码方式(TP-DCS)
    char TP_SCTS[16];   // 服务时间戳字符串(TP_SCTS), 接收时用到
    char TP_UD[161];    // 原始用户信息(编码前或解码后的TP-UD)
    char index;         // 短消息序号,在读取时用到
} SM_PARAM;

// 电话号码参数结构,编码/解码共用
// 其中,字符串以0结尾
typedef struct {
    char NUM[16];       // 电话号码
    char NAME[16];       // 电话姓名
    char index;         // 电话号码序号
} SM_PHON;

/**************************************************************   
功能:初始化GSM状态
参数:pData目标字符串指针      
返回: 目标字符串长度
编写人:王志辉
时间:2007年8月7日
是否测试:是
****************************************************************/     
uchar gsmInit(void)
{
	char ans[32];//应答串
    int nLength=0;
	WriteCommRam(ATZ_r, 4);//恢复默认设置
	nLength = ReadComm(ans);
    if (nLength==0||strstr(ans, "OK")== NULL)//如果无返回信息或者返回信息中无OK则设置错误   
		return 0xff;//返回错误代码0xff
    WriteCommRam(ATE0_r, 5);//不回显字符
    nLength = ReadComm(ans);
	if (nLength==0||strstr(ans, "OK")== NULL)
		return 0xff;// ECHO OFF
    WriteCommRam(AT_CMGF_0_r, 10);//设置PDU模式
    nLength = ReadComm(ans);
	if (nLength==0||strstr(ans, "OK")== NULL)
		return 0xff;// ECHO OFF
    WriteCommRam(AT_CMEE_1_r, 10);//设置错误返回格式
    nLength = ReadComm(ans);
	if (nLength==0||strstr(ans, "OK")== NULL)
		return 0xff;// ECHO OFF
    WriteCommRam(AT_CPBS_SM_r, 13);//电话号码选择
    nLength = ReadComm(ans);
	if (nLength==0||strstr(ans, "OK")== NULL)
		return 0xff;// ECHO OFF
    WriteCommRam(ATV0_r, 5);//设置DCF响应格式
    nLength = ReadComm(ans);
	if (nLength==0||strncmp(ans, "0\r",2)!=0)
		return 0xff;// ECHO OFF
	return 0;
}
/**************************************************************   
功能:读取短消息 用+CMGL代替+CMGR,可一次性读出全部短消息
参数:pMsg: 短消息缓冲区,必须足够大    
返回: 短消息条数
编写人:王志辉
时间:2007年8月7日
是否测试:是
****************************************************************/     
int gsmReadMessage(SM_PARAM* pMsg)
{
    int nLength;        // 串口收到的数据长度
    int nMsg;           // 短消息计数值
    char* ptr;          // 内部用的数据指针
    char cmd[16]={0};       // 命令串
    //char ans[256];     // 应答串
    nMsg = 0;
    ptr = smsinput_buf;
    strcpy_P(cmd,AT_CMGL_r);// 生成命令
    WriteComm(cmd, strlen(cmd));    // 输出命令串
    nLength = ReadCommd();    // 读应答数据
    // 根据能否找到"+CMS ERROR"决定成功与否
    if(nLength > 0 && strncmp(smsinput_buf, "+CMS ERROR",10) != 0)
    {
        // 循环读取每一条短消息, 以"+CMGL:"开头
        while((ptr = strstr(ptr, "+CMGL:")) != NULL)
        {
            ptr += 6;        // 跳过"+CMGL:"
            sscanf(ptr, "%d", &pMsg->index);    // 读取序号
            //TRACE(" index=%d\n",pMsg->index);
            ptr = strstr(ptr, "\r\n");    // 找下一行
            ptr += 2;        // 跳过"\r\n"
            gsmDecodePdu(ptr, pMsg);    // PDU串解码
            pMsg++;        // 准备读下一条短消息
            nMsg++;        // 短消息计数加1
        }
    }
    smsinput_Length=0;//清零smsinput_Length
	read_ustart1_ok=0;//清零read_ustart1_ok
    return nMsg;
}
/**************************************************************   
功能:发送短消息
参数:pMsg: 源PDU参数指针    
返回: 发送是否成功
编写人:王志辉
时间:2007年8月7日
是否测试:是
****************************************************************/     
uchar gsmSendMessage(SM_PARAM* pSrc)
{
    int nPduLength;//PDU串长度
    unsigned char nSmscLength;    // SMSC串长度
    int nLength;                  // 串口收到的数据长度
    char cmd[16];                 // 命令串
    //char pdu[256];                // PDU串
    char ans[32];                // 应答串
    nPduLength = gsmEncodePdu(pSrc, smsinput_buf);    // 根据PDU参数,编码PDU串
    strcat(smsinput_buf, "\x01a");         // 以Ctrl-Z结束
    gsmString2Bytes(smsinput_buf, &nSmscLength, 2);    // 取PDU串中的SMSC信息长度
    nSmscLength++;        // 加上长度字节本身
    // 命令中的长度,不包括SMSC信息长度,以数据字节计  
	strcpy_P(cmd,AT_CMGS);
	sprintf(cmd+8, "%d",nPduLength / 2 - nSmscLength);//植入电话号码位置
	strcat_P(cmd,_r);
    WriteComm(cmd, strlen(cmd));    // 先输出命令串
    nLength = ReadComm(ans);   // 读应答数据
    // 根据能否找到"\r\n> "决定成功与否
    if(nLength==4&& strncmp(ans, "\r\n> ",4)==0)
    {
        gsmEncodePdu(pSrc, smsinput_buf);
		strcat(smsinput_buf, "\x01a"); 
        WriteComm(smsinput_buf, strlen(smsinput_buf));        // 得到肯定回答,继续输出PDU串
        nLength = ReadComm(ans);       // 读应答数据
        // 根据能否找到"+CMS ERROR"决定成功与否
        if(nLength > 0 && strncmp(ans,"+CMS ERROR",10) != 0)
        {
            return 0;
        }
     }
    return 0xff;
}
// 删除短消息
// index: 短消息序号,从1开始
uchar gsmDeleteMessage(int index)
{
    int nLength;          // 串口收到的数据长度
    char cmd[16]={0};         // 命令串
    char ans[32]={0};        // 应答串
	strcpy_P(cmd,AT_CMGD);
	sprintf(cmd+8, "%d",index);//植入电话号码位置
	strcat_P(cmd,_r);
    // 输出命令串
    WriteComm(cmd, strlen(cmd));
    // 读应答数据
    nLength = ReadComm(ans);
    // 根据能否找到"+CMS ERROR"决定成功与否
    if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
    {
        return 0;
    }
    return 0xff;
}
/**************************************************************   
功能:读取电话本中的内容
参数:phon:电话号码指针
返回: 是否成功
编写人:王志辉
时间:2007年8月10日
是否测试:是
****************************************************************/    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -