📄 cmdprocess.c.bak
字号:
#include "iic.h"
//2007-3-21 20:40
//2007-3-29 20:03
#define GET(x) RecBuf[(x)+3]
//#define MsgErr() {UART_Ack(REC_OK);return;}
#define ASSERT(x,y) {if(RecBuf[(x)+3]>=(y)) {UART_Ack(REC_OK);return;}}
//在CmdProcess中使用的宏:保证x<y,否则发送数据出错信息并退出该函数。
unsigned char CheckCRC()
{
unsigned char xdata i,k;
i=RecCnt-2;//CRC位置
k=RecBuf[i-1];
while(i)
{
i--;
k=k^RecBuf[i];
}
i=RecCnt-2;//CRC位置
if(k==RecBuf[i])
return(1);
else
return(0);
}
void CmdProcess()
{
unsigned int xdata i,k;
if((RecBuf[0]!=MacAddr)&&(RecBuf[0]!=0x00))
return;//非本机且非广播,返回
i=CheckCRC();
if(i==0)
{//CRC出错
UART_Ack(REC_CRC_ERR);
return;
}
switch(RecBuf[2])//信息部
{
case CMD_IDT://绿色通道
{
ASSERT(0,9)
i=GET(0);
if(i==0)
{//禁止通道
MeterSta=MSTA_AUTO;
HourUpdate();//更新所有
PhaseSwitch();
}
else if(i<=8)
{
i-=1;
MeterSta=MSTA_GREENWAY;
CheDaoBuf[2]=GreenWay[i][0];
CheDaoBuf[1]=GreenWay[i][1];
CheDaoBuf[0]=GreenWay[i][2];
SecondCnt=0;
}
}
break;
case CMD_PHASE://相位
{
ASSERT(0,2)//方案号
ASSERT(1,12)//时段号
ASSERT(2,8)//相位号
ASSERT(6,255)//绿灯时间
ASSERT(7,255)//绿闪时间
i=GET(6);
k=GET(7);
if(i<k)//绿灯时间必需大于绿闪时间
{
UART_Ack(MSG_ERR);
return;
}
ASSERT(8,255)//YT
ASSERT(9,255)//RT
//存储相位
}
break;
case CMD_PHASE_GROUP://相位组
break;
case CMD_SYSTEM_TIME://设置时间
{
ASSERT(0,100)//年
ASSERT(1,13)//月
ASSERT(2,32)//日
ASSERT(3,24)//小时
ASSERT(4,60)//分钟
ASSERT(5,60)//秒
//
}
break;
case CMD_ADD_HOLIDAY://增加节假日
{
ASSERT(0,100)//年
ASSERT(1,13)//月
ASSERT(2,32)//日
}
break;
case CMD_DEL_HOLIDAY://删除节假日
{
ASSERT(0,100)//年
ASSERT(1,13)//月
ASSERT(2,32)//日
}
break;
case CMD_ENABLE_HOLIDAY://允许/禁止节假日
ASSERT(0,2)//
break;
case CMD_SET_NODE_ID://设置本机ID
{
ASSERT(0,255)//小于255,大于0
i=GET(0);
if(i==0)
{
UART_Ack(MSG_ERR);
return;
}
}
break;
case CMD_RESTORE://恢复系统默认
break;
default:
UART_Ack(MSG_ERR);
return;
}
UART_Ack(REC_OK);//信息正确解释
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -