📄 main.c
字号:
for(;KB_RECV_BUFF_LEN > ucTmp_PKBMsg; ucTmp_PKBMsg++)
{
g_aucKBRecvdBuff[ucTmp_PKBMsg] = 0xFF;
}
//正确就写入24C04
if (FlagKBExeOK) //写入电话号码,g_aucKBRecvdBuff[4]~g_aucKBRecvdBuff[9]
{
ClrWdt();
if (BYTES_PER_TEL != PageWrite(g_aucKBRecvdBuff + 4, uiAdd_PKBMsg, BYTES_PER_TEL))
{
FlagKBExeOK = 0;
break;
}
ucTmp_PKBMsg = g_ucTelExist;
if (0 != g_aucKBRecvdBuff[4])
{
/*if (0 == (g_ucTelExist&0x01)) //新设号码将拨不接警中心 // !!!! .
{
g_ucAdemcoEvts = 0;
}*/
g_ucTelExist |= (0x01 << (g_aucKBRecvdBuff[3]-1));
//if (1 == g_aucKBRecvdBuff[3])
{
//g_FlagAdmFail = 0;
}
}
else
{
g_ucTelExist &= ~(0x01 << (g_aucKBRecvdBuff[3]-1));
if (0 == (g_ucTelExist&0xFE))
{
g_FlagCallEnd = 1;
if (g_FlagCalling && (1 != g_ucPhoneIndex))//g_ucAdemcoEvts = 0;
{
Hangup();
}
}
if ((0 == (0x30&g_ucTelExist))
&& (0 != (g_ucAlarmTypes&(0x01<<(ALARM_TYPE_NUM_FORC-1)))))
{
g_FlagCallEnd = 1;
if (g_FlagCalling && ((g_ucPhoneIndex<5) && (1!=g_ucPhoneIndex)))
{
Hangup();
}
}
if (0 == (g_ucTelExist&0x01))//2006-12-18 是否清//不要清
{
g_ucAdemcoEvts = 0;
if (g_FlagCalling && (1 == g_ucPhoneIndex))
{
Hangup();
}
}
//号码清除后判断是否还要拨号
if (g_FlagCallEnd && (0 == g_ucAdemcoEvts))
{
Hangup();
}
}
if (ucTmp_PKBMsg != g_ucTelExist)
{
WriteByte(g_ucTelExist, EEPROM_ADD_TEL_EXIST);
}
}
}
///***************************发送/接收错误,回复执行错误命令
else
{
FlagKBExeOK = 0; //发送/接收错误,但回复执行错误命令。下同。
}
break; //命令高字节g_aucKBRecvdBuff[2]等于0x11结束
//switch (g_aucKBRecvdBuff[2]) 分支
case 0x12:
//撤、布防。1外出,2夜间(留守),3撤防
//不限制撤布防
ucTmp_PKBMsg = g_aucKBRecvdBuff[3] >> 4;
if (6 < ucTmp_PKBMsg)
{
FlagKBExeOK = 0;
break;
}
switch (g_aucKBRecvdBuff[3] & 0x0F)
{
case 0x01: //键盘外出布防
/*if (0 == g_ucAlarmWireZone | g_ucAlmWrlsZn)*/
if ((!g_FlagHasAlarm) && (!g_FlagInDelaying))
{
if (IS_OUT_GUARDING)
{
return; //不回复,不让键盘发声.字键盘自己处理可以break
}
GoToOutGuard();
if (!g_FlagPrtcl41)
{
RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x80,
ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
}
}
else
{
FlagKBExeOK = 0;
}
break;
case 0x02: //键盘留守布防
if ((!g_FlagHasAlarm) && (!g_FlagInDelaying)
&& !(IS_OUT_GUARDING && (g_FlagLckgPwd //2006-10-7
|| (0 == ucTmp_PKBMsg) ))
)
{
if ((!g_FlagPrtcl41) && (!IS_HOME_GUARDING))
{
RcdCntctIDEvt((HOME_GUARD_CTID_INDEX+1)|0x80,
ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
}
GoToHomeGuard();
}
else
{
FlagKBExeOK = 0;
}
break;
case 0x03: //键盘撤防
if ((0 == ucTmp_PKBMsg) || g_FlagLckgPwd) //2006-10-7 add g_FlagLckgPwd
{
FlagKBExeOK=0;
break;
}
if (!g_FlagPrtcl41) //&& ((!IS_LAX_GUARDING) || g_FlagHasAlarm))
{
RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x40,
ucTmp_PKBMsg); //g_aucKBRecvdBuff[LOCATN_KB_ID]);
}
GoToDisguard();
/*if (g_FlagDialOK && (1 == g_ucPhoneIndex))
{
;//空,接警中心时不理撤防
}
else*/
if ((0 == g_ucAdemcoEvts)
|| (2 <= g_ucPhoneIndex))
{
Hangup();
}
break;
default:
FlagKBExeOK = 0;
break;
}
break; //命令高字节g_aucKBRecvdBuff[2]等于0x12结束
//switch (g_aucKBRecvdBuff[2]) 分支
case 0x13: //报警
switch (g_aucKBRecvdBuff[3])
{
case 0x08: //紧急按钮
ucZoneNum_PKBMsg = 0x17;
break;
case 0x09: //胁持密码报警
ucZoneNum_PKBMsg = 0x18;
ucTmp_PKBMsg = g_ucAlarmTypes; //撤防函数会清报警.
GoToDisguard();
g_ucAlarmTypes = ucTmp_PKBMsg;
if (g_FlagPrtcl41)
{
//g_ucAdemcoEvts--; // !! 暂时不考虑事件满的情况
}
else //胁持报警后接警中心不会认为主机处于撤防状态
{
RcdCntctIDEvt((CHANGE_GUARD_CTID_INDEX+1)|0x40, 0x98);
}
break;
case 0x0A: //密码防猜
{
ucZoneNum_PKBMsg = 0; //不需函数ProcZnSign()做报警处理
//ucTmp_PKBMsg = Hex_BCD(BCD_Hex(g_ucHour) + HOURS_LCK_PWD);
ClrWdt16();
//WriteByte(YES, EEPROM_ADD_LCKG_PWD); //2006-12-11
if (g_ucMinute >= 0x30)
{
/*ucTmp_PKBMsg = BCD_Hex(ReadTime(REG_HR));
ucTmp_PKBMsg = Hex_BCD((ucTmp_PKBMsg+1)%24);
WriteByte(ucTmp_PKBMsg, EEPROM_ADD_LCKPWD_HOUR);*/
//与上面的执行结果等价,
WriteByte(Hex_BCD((BCD_Hex(ReadTime(REG_HR)) + 1) % 24),
EEPROM_ADD_LCKPWD_HOUR);
}
else
{
WriteByte(ReadTime(REG_HR), EEPROM_ADD_LCKPWD_HOUR);
}
WriteByte(Hex_BCD((BCD_Hex(g_ucMinute)+30)%60), EEPROM_ADD_LCKPWD_MIN);
//WriteByte(ucTmp_PKBMsg, EEPROM_ADD_LCKPWD_HOUR);
//WriteByte(ReadTime(REG_DATE), EEPROM_ADD_LCKPWD_DATE); //开机不保存,不需要这些
//WriteByte(ReadTime(REG_MONTH), EEPROM_ADD_LCKPWD_MON);
//WriteByte(ReadTime(REG_YR), EEPROM_ADD_LCKPWD_YR);
g_FlagLckgPwd = 1;
//广播是否锁定需密码的操作
//g_aucKBRecvdBuff[4] = 0x09;
SendKBSysInfo(7, 7);
}
break;
default:
ucZoneNum_PKBMsg = 0;
FlagKBExeOK = 0;
break;
}
//if (!FlagKBExeOK) //C51不能正确编译,之后去掉,使用ucZoneNum_PKBMsg区分
{
if (ProcZnSign(ucZoneNum_PKBMsg))
{ //有报警,广播报警
//RecordAlarm(ucZoneNum_PKBMsg);
//SendAlarm();
}
return;//2006-8-23 键盘会响的问题
}
break; //命令高字节g_aucKBRecvdBuff[2]等于0x13结束
//switch (g_aucKBRecvdBuff[2]) 分支
case 0x14: //遥控器对码
if ((0x05 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3]))
{
g_aucAuxSendBuff[0] = AUX_CMD_ADD_RMT_H; //对应遥控器对码,1表示遥控器1对码
g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
//等待辅助CPU对码成功再通知键盘成功
return;
}
else
{
FlagKBExeOK = 0;
}
break; //命令高字节g_aucKBRecvdBuff[2]等于0x14结束
case 0x15: //清除遥控器对码
if (0x99 == g_aucKBRecvdBuff[3])
{ //清除所有遥控器对码
g_aucAuxSendBuff[0] = 0x16;
g_aucAuxSendBuff[1] = 06;
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
}
else if ((0x05 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3]))
{ //清除对应遥控器对码
g_aucAuxSendBuff[0] = AUX_CMD_RMV_RMT_H;
g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
}
else
{
FlagKBExeOK = 0;
}
break;
//switch (g_aucKBRecvdBuff[2]) 分支
case 0x16: //无线防区对码
if ((0x16 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3])
&& IsBCD(g_aucKBRecvdBuff[3]))
{ //无线防区1~8对码
g_aucAuxSendBuff[0] = AUX_CMD_ADD_ZN_H;
g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
//等待辅助CPU对码成功再通知键盘成功
return;
}
else
{
FlagKBExeOK = 0;
}
break;
case 0x17: //清除无线防区对码
if (0x99 == g_aucKBRecvdBuff[3])
{ //清除所有无线防区
g_aucAuxSendBuff[0] = 0x15;
g_aucAuxSendBuff[1] = 0x05;
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
}
else if ((0x16 >= g_aucKBRecvdBuff[3]) && (0 != g_aucKBRecvdBuff[3])
&& IsBCD(g_aucKBRecvdBuff[3]))
{ //清除1~8防区对码
g_aucAuxSendBuff[0] = 0x14;
g_aucAuxSendBuff[1] = g_aucKBRecvdBuff[3];
g_FlagHasAuxMsgSend = 1;
g_aucRepeatAuxMsg[1] = TIMES_AUX_CMD_REPEAT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -