📄 sms.h
字号:
//+CPBR: 1,"13503332739",129,"8059D0592BFFFF"\CR\LF\CR\LFOK\CR\LF
uchar gsmReadphonebook(SM_PHON *phon)
{
int nLength; // 串口收到的数据长度
char cmd[16]={0}; // 命令串
char ans[128]={0}; // 应答串
char *p;
char *q;
strcpy_P(cmd,AT_CPBR);
sprintf(cmd+8, "%d", phon->index);//植入电话号码位置
strcat_P(cmd,_r);
// 输出命令串
WriteComm(cmd, strlen(cmd));
// 读应答数据
nLength = ReadComm(ans);
// 根据能否找到"+CMS ERROR"决定成功与否
if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
{
p=strchr(ans,'\"');//寻找第一个“
q=strchr(p+1,'\"');//寻找第二个“
memcpy(phon->NUM,p+1,q-p-1);//将电话号码拷贝进去
p=strchr(q+1,'\"');//寻找第三个“
q=strchr(p+1,'\"');//寻找第四个“
memcpy(phon->NAME,p+1,q-p-1);//将电话号码拷贝进去
return 0;
}
return 0xff;
}
/**************************************************************
功能:向电话本中写内容
参数:phon:电话号码指针
返回: 是否成功
编写人:王志辉
时间:2007年8月10日
是否测试:是
****************************************************************/
//AT+CPBW=1,"13503332739",129,"8059D0592BFFFF"\CR
uchar gsmWritephonebook(SM_PHON *phon)
{
int nLength;
char cmd[64]={0};// 命令串
char ans[16]={0};// 应答串
//生成命令串
strcpy_P(cmd,AT_CPBW);
sprintf(cmd+8, "%d", phon->index);//植入电话号码位置
strcat_P(cmd,d_y);
strcat(cmd,phon->NUM);//植入电话号码
strcat_P(cmd,y_d_129_d_y);
strcat(cmd,phon->NAME);//植入电话姓名
strcat_P(cmd,y_r);
//发送命令串
WriteComm(cmd, strlen(cmd));
nLength = ReadComm(ans);
// 根据能否找到"+CMS ERROR"决定成功与否
if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
{
return 0;
}
return 0xff;
}
/**************************************************************
功能:判断密码是否正确
参数:无
返回: 正确:0 错误:0xff
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
uchar judje_mima(SM_PARAM* pMsg)
{
char a[mima_weishu];
eeprom_read_block (&a[0],&mima[0], mima_weishu);//取密码到a
if(memcmp(pMsg->TP_UD,a,3)==0)
return 0;//密码正确返回零
else
return 0xff;//密码错误返回0xff
}
/**************************************************************
功能:将从机发来的信息通过短信发给主机
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void cfsebei_to_sms(void)
{
if(system_state==cf_shebei)//判断系统状态
{
SM_PARAM scs_one;//申请一条短信空间并初始化编码方式协议标识
scs_one.TP_PID=0; // 用户信息协议标识(TP-PID)
scs_one.TP_DCS=0; // 用户信息编码方式(TP-DCS)
scs_one.index=1;
eeprom_read_block (&scs_one.SCA,¢er_number[0],phone_number_weishu);//取短信中心号码
eeprom_read_block (&scs_one.TPA,&phone_number[0],phone_number_weishu);//取对方号码
gsmBytes2String(equsinput_buf, &scs_one.TP_UD, equsinput_Length);//将设备发来的信息转换后存入要发送的短信中
equsinput_Length=0;
gsmSendMessage(&scs_one);
system_state=0;//系统恢复空闲状态
}
}
/**************************************************************
功能:将主机发来的信息通过串口发给从机
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void cfsms_to_sebei(void)
{
uchar a ;
if(system_state==cf_msm)//测试接受短消息
{
SM_PARAM scs_one;
gsmReadMessage(&scs_one);
if(judje_mima(&scs_one)==0)//如果密码正确
{
//WriteTextRom(sdzqdx);//测试用显示“收到正确短信”
//转换密码以后的短信内容
a=gsmString2Bytes(&scs_one.TP_UD[mima_weishu],equsinput_buf,strlen(&scs_one.TP_UD)-mima_weishu);
WriteEqu(equsinput_buf,a);//向从设备发送命令内容
}
//else
//WriteTextRom(sdljdx);//测试用显示“收到垃圾短信”
system_state=0;//系统恢复空闲状态
gsmDeleteMessage(scs_one.index);//删除处理完的短消息
}
}
/**************************************************************
功能:读取电话卡上的固定信息并存入单片机eeprom
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void read_bois(void)
{
SM_PHON phon1;
phon1.index=1;//准备读电话本位置1中的密码
gsmReadphonebook(&phon1);
eeprom_write_block (&phon1.NAME, &mima[0],mima_weishu);//将读到的密码内容存入EEPROM
phon1.index=2;//准备读电话本位置2的波特率设置
gsmReadphonebook(&phon1);
eeprom_write_block (&phon1.NUM, &baud_rate[0],baud_rate_weishu);//将读到的波特率内容存入EEPROM
usart0_baud_set(phon1.NUM[0]);//修改波特率设置
phon1.index=3;//准备读电话本位置3的对方号码
gsmReadphonebook(&phon1);
eeprom_write_block (&phon1.NUM, &phone_number[0],phone_number_weishu);//将读到的短信中心号码存入EEPROM
phon1.index=4;//准备读电话本位置4的短信中心号码
gsmReadphonebook(&phon1);
eeprom_write_block (&phon1.NUM, ¢er_number[0],phone_number_weishu);//将读到的短信中心号码存入EEPROM
}
/**************************************************************
功能:向电话卡中写信息
参数:无
返回: 无
编写人:王志辉
时间:2007年8月23日
是否测试:是
****************************************************************/
void reset_bois(void)
{
SM_PHON phon1;
phon1.index=1;//准备向电话本位置1中写密码
eeprom_read_block (&phon1.NAME,&mima[0],mima_weishu);//读密码存入phon1
phon1.NAME[mima_weishu]='\0';
strcpy_P(&phon1.NUM,shouwei_mima);
gsmWritephonebook(&phon1);
phon1.index=2;//准备向电话本位置2中写波特率
eeprom_read_block (&phon1.NUM,&baud_rate[0],baud_rate_weishu);//读密码存入phon1
strcpy_P(&phon1.NAME,botelv);
gsmWritephonebook(&phon1);
usart0_baud_set(phon1.NUM[0]);//修改波特率设置
phon1.index=3;//准备向电话本位置1中写对方号码
eeprom_read_block (&phon1.NUM,&phone_number[0],phone_number_weishu);//读密码存入phon1
strcpy_P(&phon1.NAME,zhujihaoma);
gsmWritephonebook(&phon1);
phon1.index=4;//准备向电话本位置1中写中心号码
eeprom_read_block (&phon1.NUM,¢er_number[0],phone_number_weishu);//读密码存入phon1
strcpy_P(&phon1.NAME,duanxinzhongxin);
gsmWritephonebook(&phon1);
}
//手动读取电话卡上存储的固定信息
/*void key2(void)
{
if(judge_k2)//测试读取电话号码
{
while(judge_k2)
NOP;
read_bois();
}
}
void key3(void)
{
if(judje_k3)//测试写电话号码
{
while(judje_k3)
NOP;
SM_PHON phon1={"1234567890","wanghaili",1};
if(gsmWritephonebook(&phon1)!=0xff)
WriteTextRom(xdhhmcg);
else
WriteTextRom(xdhhmsb);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -