📄 main.c
字号:
else if (strcmp(cmd , "TM+WPDP=?\r")==0)//显示所有工作参数
{
///////////////////////////////////////////////////////
dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n",
WorkPara.sLoginMsgPeriod,
WorkPara.sWarnMsgPeriod,
WorkPara.sCarStateMsgPeriod,
WorkPara.sClass1LockDelay_m);
//////////////////////////////////////////////////////
myprintf0("\r\n+WPSB: ");
for(kk=0; kk< (SENSORSNUM-1); kk++)
{
dprintf0("%d:%d,", kk+1, WorkPara.SensorsBound[kk]);
}
dprintf0("%d:%d\r\nOK\r\n", SENSORSNUM, WorkPara.SensorsBound[SENSORSNUM-1]);
//////////////////////////////////////////////////////
flag = 1;
}
else if (strcmp(cmd , "TM+WPTP=?\r")==0)//读取时间设置
{
dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n",
WorkPara.sLoginMsgPeriod,
WorkPara.sWarnMsgPeriod,
WorkPara.sCarStateMsgPeriod,
WorkPara.sClass1LockDelay_m);
flag = 1;
}
else if (strstr(cmd , "TM+WPTP=")!=0)//设置时间参数
{
if (sscanf(cmd, "TM+WPTP=%d,%d,%d,%d\r",
&(WorkPara.sLoginMsgPeriod),
&(WorkPara.sWarnMsgPeriod),
&(WorkPara.sCarStateMsgPeriod),
&(WorkPara.sClass1LockDelay_m)) == 4)
{
dprintf0("\r\n+WPTP: %d,%d,%d,%d\r\nOK\r\n",
WorkPara.sLoginMsgPeriod,
WorkPara.sWarnMsgPeriod,
WorkPara.sCarStateMsgPeriod,
WorkPara.sClass1LockDelay_m);
Myeeprom_write_block( (void *)&WorkPara.sLoginMsgPeriod, (void *)WP_LOGINPERD_ADDR, 2);
Myeeprom_write_block( (void *)&WorkPara.sWarnMsgPeriod, (void *)WP_WARNPERD_ADDR, 2);
flag = 1;
}
else
{
flag = 0;
}
}
else if (strcmp(cmd , "TM+BPRD=D\r")==0)//基本参数恢复为默认值
{
ParaRecover();
ParaInit();
dprintf0("\r\n+BPID: %s%s%s\r\nOK\r\n",
BasicPara.TM_Time,
BasicPara.TM_type,
BasicPara.TM_id
);
dprintf0("\r\n+BPCN: %s\r\nOK\r\n", strlen(BasicPara.CenterGsmNum), BasicPara.CenterGsmNum);
flag = 1;
}
else if (strcmp(cmd , "TM+BPDP=?\r")==0)//display basic para
{
dprintf0("\r\n+BPID: %s%s%s\r\nOK\r\n",
BasicPara.TM_Time,
BasicPara.TM_type,
BasicPara.TM_id
);
dprintf0("\r\n+BPCN: %s\r\nOK\r\n", BasicPara.CenterGsmNum);
flag = 1;
}
//错误命令
if (flag == 1)
{
myprintf0("\r\n#ZF> ");
}
else
{
ErrorConsole();
}
return 0;
}
void ErrorConsole(void)
{
myprintf0("ERROR\r\n#ZF> ");
}
//**************************************************************************
//函数:dprintf0
//功能: 通过串口0格式化输出字符串
//**************************************************************************
void dprintf0(char *format, ...)
{
va_list args;
char buffer[255];
va_start(args,format);
vsprintf(buffer,format,args);
va_end(args);
myprintf0(buffer);
}
//**************************************************************************
//函数:dprintf1
//功能: 通过串口1格式化输出字符串
//**************************************************************************
void dprintf1(char *format, ...)
{
va_list args;
char buffer[255];
va_start(args,format);
vsprintf(buffer,format,args);
va_end(args);
myprintf1(buffer);
}
//**************************************************************************
//函数:tmEventProcess
//功能: 终端事件处理
//**************************************************************************
void tmEventProcess(void)
{
TFrame Frame;
SM_PARAM MySM_PARAM;
if (SysState.fSendLoginMsg.flag == 1)
{
SysState.fSendLoginMsg.flag = 0;
//生成注册消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_LOGIN;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n注册");
SendSms(&MySM_PARAM);
}
}
if (SysState.fSendCarStateMsg.flag == 1)
{
SysState.fSendCarStateMsg.flag = 0;
//生成车辆状态消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_CARSTATE;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n发送车辆状态");
SendSms(&MySM_PARAM);
}
}
if (SysState.fSendSetPataMsg == 1)
{
SysState.fSendSetPataMsg = 0;
//生成工作参数消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_GETWORKPARA;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n工作参数消息");
SendSms(&MySM_PARAM);
}
}
if (SysState.fSendWorkState == 1)
{
SysState.fSendWorkState = 0;
//生成工作状态消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_GETWORKSTATE;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n工作状态消息");
SendSms(&MySM_PARAM);
}
}
if (SysState.fClass1Loack.flag == 1)
{
Myprintf("一级锁闭\n");
SysState.fClass1Loack.flag = 0;
SysState.fSendWorkState = 0;
//生成工作状态消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_GETWORKSTATE;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n一级锁闭消息");
SendSms(&MySM_PARAM);
}
}
if (SysState.fClass2Loack.flag == 1)
{
Myprintf("二级锁闭\n");
SysState.fClass2Loack.flag = 0;
SysState.fSendWorkState = 0;
//生成工作状态消息
Frame.type = F_TYPE_RESPOND;
Frame.code = F_CODE_GETWORKSTATE;
Frame.msglen = 0;
Frame.msg = MySM_PARAM.TP_UD;
tmCreateMsg( &Frame);
MySM_PARAM.TP_UDlen = Frame.msglen;
//发送消息
if (Frame.msglen > 0)
{
myprintf0("\n二级锁闭消息");
// SendSms(&MySM_PARAM);
}
}
}
//**************************************************************************
//函数:Simunator
//功能: 模拟主站发送命令
//输入:cmd=主站命令
//返回:无
//**************************************************************************
int centSimunator(char *cmd, unsigned char *msg)
{
if (strstr(cmd, "ctGetCarState") != 0)
{
return ctGetCarState(msg);
}
if (strstr(cmd, "ctGetWorkPara") != 0)
{
return ctGetWorkPara(msg);
}
if (strstr(cmd, "ctGetWorkState") != 0)
{
return ctGetWorkState(msg);
}
if (strstr(cmd, "ctLoginConfirm") != 0)
{
return ctLoginConfirm(msg);
}
if (strstr(cmd, "ctSetWorkPara") != 0)
{
return ctSetWorkPara(msg);
}
if (strstr(cmd, "ctSetWorkState") != 0)
{
return ctSetWorkState(msg);
}
if (strstr(cmd, "ctNoteTmlogin") != 0)
{
return ctNoteTmlogin(msg);
}
return 0;
}
/*------------------------------------------------------------------------
函数:BitCheck
功能:判断某一否为0还是为1
输入:uc=代检测数,bit=位数
返回: 0=位数错误,1=查询位为0,>1=查询位为1
---------------------------------------------------------------------------*/
unsigned char BitCheck(unsigned char uc, char bit)
{
if (bit > 7)return 0;
return (uc&(1<<bit))+1;
}
/*------------------------------------------------------------------------
函数:SetBit
功能:将某一位置1
输入:uc=源数,bit=位数
输出:uc=目的数
---------------------------------------------------------------------------*/
void SetBit(unsigned char *uc, char bit)
{
if (bit > 7)return;
(*uc)|=(1<<bit);
}
/*------------------------------------------------------------------------
函数:ClearBit
功能:将某一位清0
输入:uc=源数,bit=位数
输出:uc=目的数
---------------------------------------------------------------------------*/
void ClearBit(unsigned char *uc, char bit)
{
if (bit > 7)return;
(*uc)&=(~(1<<bit));
}
/*------------------------------------------------------------------------
函数:GetAnInt
功能:从串中读取一个无符号整数
输入:data=输入串
返回:整数
---------------------------------------------------------------------------*/
unsigned int GetAnUint(unsigned char * data)
{
return (*data)+ *(data+1)*256;
}
///*------------------------------------------------------------------------
//函数:SwitchDetect
//功能:开关量检测,并判断是否需要报警
//方法:对每一路开关量持续采样多次,取次数最多的电平作为当前值
//---------------------------------------------------------------------------*/
//void SwitchDetect(void)
//{
// int times = 100;
// int kk;
// int Hightimes, Lowtimes;
//
//
// /**************检测外部开关量***********************************/
// //第1路开关量
// Hightimes = 0;
// Lowtimes = 0;
// for(kk=0; kk< times; kk++)
// {
// delay_ms(10);
// if (SWITCH_1 == 1)
// {
// Hightimes++;
// }
// else
// {
// Lowtimes++;
// }
// }
// if (Hightimes>Lowtimes)
// {
// SetBit(SysState.SwitchState[(SWITCH_1_ROUTE-1) / 8], (SWITCH_1_ROUTE-1)%8);
// }
// else
// {
// ClearBit(SysState.SwitchState[(SWITCH_1_ROUTE-1) / 8], (SWITCH_1_ROUTE-1)%8);
// }
//
// //第2路开关量
// Hightimes = 0;
// Lowtimes = 0;
// for(kk=0; kk< times; kk++)
// {
// delay_s(1);
// if (SWITCH_2 == 1)
// {
// Hightimes++;
// }
// else
// {
// Lowtimes++;
// }
// }
// if (Hightimes>Lowtimes)
// {
// SetBit(SysState.SwitchState[(SWITCH_2_ROUTE-1) / 8], (SWITCH_2_ROUTE-1)%8);
// }
// else
// {
// ClearBit(SysState.SwitchState[(SWITCH_2_ROUTE-1) / 8], (SWITCH_2_ROUTE-1)%8);
// }
//
//
// /**************判断是否需要报警***********************************/
// for(kk = 0; kk < SWITCH_NUM; kk++)
// {
// //任意一路开关量处于不正常状态,
// //并且报警使能,就向中心报警
// if ((BitCheck(SysState.SwitchState[kk/8], kk%8)) == ((BitCheck(WorkPara.SwitchNomalState[kk/8], kk%8)))
// {
// if ((BitCheck(WorkPara.SwitchWarnEnable[kk/8], kk%8))
// {
// //通知终端向中心报警
// //.......
//
// break;
// }
// }
// }
//}
/*------------------------------------------------------------------------
函数:StartADC
功能:启动ADC,从0路开始对每一路进行多次转换
注意:具体的转换过程由ADC中断完成
---------------------------------------------------------------------------*/
void ADC_Process(void)
{
int timeSlot = 50; //等待ADC完成时间,单位10ms
int Channel, Times;
uint16_t sum;
StartADC();
while(timeSlot)
{
timeSlot--;
delay_ms(10);
if (ADC_data.finished == 1)
{
//计算ADC值
sum = 0;
for(Channel=0; Channel< ADCHANNELMAX; Channel++)
{
//第一次转换无效
for(Times=1; Times<ADCONVERTTIMES;Times++ )
{
sum += ADC_data.AD_Channles[Channel][Times];
}
SysState.SensorsValue[Channel] = sum /8;
dprintf0("\r\n%d:%x", Channel, SysState.SensorsValue[Channel]);
}
break;
}
}
if (timeSlot == 0)
{
CloseADC();
}
}
/*------------------------------------------------------------------------
函数:StartADC
功能:启动ADC,从0路开始对每一路进行多次转换
注意:具体的转换过程由ADC中断完成
---------------------------------------------------------------------------*/
void StartADC(void)
{
//初始化AD数据指针
ADC_data.CurrChannel = 0;
ADC_data.CurrTimes = 0;
ADC_data.finished = 0; //开始进行转换
//Vref=AREF,Right Adjust,channel 0
ADMUX = 0;
//enable AD,enable Int,division factor=64
ADCSRA=_BV(ADEN)|_BV(ADSC)|_BV(ADFR)|_BV(ADIE)|_BV(ADPS2)|_BV(ADPS1);
}
/*------------------------------------------------------------------------
函数:CloseADC
功能:关闭ADC
---------------------------------------------------------------------------*/
void CloseADC(void)
{
ADCSRA = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -