📄 msc_event.c
字号:
//****************************************************//
//短信事件状态控制
//********************//
//短信事件列表
//1-运行报告
//2-系统上电
//3-灯泡数量变化
//4-转速异常
//5-电源转换
//6-灯器转换
//***************************************************//
#define msc_event_c
#include "main.h"
#include "msc_event.h"
//*****************************************************************//
//分解短信,产生事件代码
//结果保存到短信接收事件
//只写入数据和代码,不负责向外传送
//****************************************************************//
void read_sms_1(void)
{
uint n=0;
uint temp=0;
uchar a,c=0;
uchar rx_buf[256];
uchar buf[64];
uchar buf1[16];
uchar buf2[64];
uchar b=0;///b表示要刷新码片
if(read_sms&addr_e)
{
while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //
DelayMs(100);
UART0_Transmitstr("AT+CMGR=1");
CR;
DelayMs(500);
for(n=0;n<255;n++)
{
rx_buf[n]=0;
}
n=0;
while((UART0_DataInReceiveBuffer())&(n<255))
{
rx_buf[n ++] = UART0_ReceiveByte(); //
}
/*while(temp<n)
{
UART0_TransmitByte(rx_buf[temp]);
temp++;
}//监视短信接收*/
//-------------------------分析密码--------------------------------------//
a_conststutob_stu(Password,&buf1[0],8);
if(string_match(n,rx_buf,8,buf1)!=0)
{
eeprom_busy_wait();
eeprom_read_block (&buf[0],&E_mm[0], 16); //读密码
if(string_match(n,rx_buf,16,buf)!=0)
{
//密码效验成功,解释事件。。。。。
//-------------------------具体事件解码-----------------------------------//
if(b==0)//保证每次只处理一条指令
{
a_conststutob_stu(User,&buf1[0],8);
temp=string_match(n,rx_buf,8,buf1);//匹配到的字符串长度
if(temp!=0)
{
c=0;
for(a=0;a<64;a++)//,16*4=64--"135625"
{
buf[c]=rx_buf[temp+a];
c++;
}
c=0;
c=gsmString2Bytes(buf,buf2,64);//打印字符变换
c=0;
for(a=0;a<32;a++)
{
if(buf2[a]!=0)//去掉00
{
buf[c]=buf2[a];
c++;
}
}
eeprom_busy_wait();
b=1;
switch(buf[0])
{
case '0':
{
m_sms=0;
eeprom_write_block (&buf[1], &E_phone[0], 16);//块写入0
break;
}
case '1':
{
m_sms=1;
eeprom_write_block (&buf[1], &E_phone[1], 16);//块写入1
break;
}
case '2':
{
m_sms=2;
eeprom_write_block (&buf[1], &E_phone[2], 16);//块写入2
break;
}
case '3':
{
m_sms=3;
eeprom_write_block (&buf[1], &E_phone[3], 16);//块写入3
break;
}
case '4':
{
m_sms=4;
eeprom_write_block (&buf[1], &E_phone[4], 16);//块写入4
break;
}
case 'A':
{
m_sms=9;
eeprom_write_block (&buf[1], &E_phone[9], 16);//块写入9
break;
}
default:b=0;{break;}
}
Reply=1;
}
}
//-------------------------------------------------------------------------//
if(b==0)
{
// Reply=2;
// b=1;
}
//---------------------------------------------------------//
if(b==0)
{
a_conststutob_stu(New_Password,&buf1[0],16);
temp=string_match(n,rx_buf,16,buf1);//修改密码13
if(temp!=0)
{
c=0;
for(a=0;a<16;a++)//,16*4=64--"135625"
{
buf[c]=rx_buf[temp+a];
c++;
}
eeprom_busy_wait();
eeprom_write_block (&buf[0], &E_mm[0],16);//写入密码 ok
Reply=3;
b=1;
}
}
//--------------------------------------------------------//
if(b==0)
{
a_conststutob_stu(Inquiry_Condition,&buf1[0],16);
if(string_match(n,rx_buf,16,buf1)!=0)//查询状态
{
sms_counts(5); //短信事件=5
b=1;//事件解码成功
}
}
//--------------------------------------------------------//
if(b==0)
{
a_conststutob_stu(New_Name,&buf1[0],16);
temp=string_match(n,rx_buf,16,buf1);//新名称
if(temp!=0)
{
c=0;
for(a=0;a<12;a++)//,3*4=12--"虎头山"
{
buf[c]=rx_buf[temp+a];
c++;
}
eeprom_busy_wait();
eeprom_write_block (&buf[0], &E_name[0], 12);//写入灯塔名 ok
Reply=6;
b=1;
}
}
//---------------------------------------------------//
if(b==0)
{
a_conststutob_stu(SMS_Tel,&buf1[0],16);
if(string_match(n,rx_buf,16,buf1)!=0)//短信电话
{
sms_counts(11); //短信电话0-2
sms_counts(12); //短信电话3-5
sms_counts(13); //短信电话6-9
b=1;
}
}
//---------------------------------------------------//
if(b==0)
{
a_conststutob_stu(Communication_gap,&buf1[0],16);
temp=string_match(n,rx_buf,16,buf1);//通讯间隔
if(temp!=0)
{
c=0;
for(a=0;a<16;a++)//,16*4=64--"135625"
{
buf[c]=rx_buf[temp+a];
c++;
}
c=0;
c=gsmString2Bytes(buf,buf2,16);//打印字符变换
c=0;
for(a=0;a<8;a++)
{
if(buf2[a]!=0)//去掉00
{
buf[c]=buf2[a];
c++;
}
}
a=0;
a=(((buf[2]-48)*10)+(buf[3]-48));
if((a>0)&(a<240))
{
eeprom_busy_wait();
eeprom_write_byte (&E_Communication_time,a);//写码
Reply=19;
b=1;//事件解码成功
}
}
}
//---------------------------------------------------//
if(b==0)
{
a_conststutob_stu(Inquiry_Establishment,&buf1[0],16);
if(string_match(n,rx_buf,16,buf1)!=0)//查询设置
{
sms_counts(7); //短信事件=1 完成
b=1;//事件解码成功
}
}
//---------------------------------------------------//
if((b==1)&(Reply!=0))//指令错误
{
sms_counts(1); //短信事件=1 完成
}
if(b==0)
{
sms_counts(10); //指令错误
}
}
}//需要密码的事件到此结束
//******************************************
//请求密码发送到我的手机,不用检查原密码!!!
a_conststutob_stu(Password88,&buf1[0],16);
if(string_match(n,rx_buf,16,buf1)!=0)//密码??
{
sms_counts(14); //短信事件=1 完成
}
//---------------------------------------------------//
count3s=0;
if(n>30)//ok
{
DelayMs(500);
UART0_Transmitstr("AT+CMGD=1");
CR;
}
read_sms=0;//清除有未读短信标志
n=0; //清空计数器
if(b==1)
{
eeprom_busy_wait();
eeprom_read(); //EEPROM 初始化
}
DelayMs(100);
while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //清空缓冲区
ok=0;
error=0;
}
}
//********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -