/******************************************************************************
/ 函数功能:文件系统Shel指令处理
/ 修改日期:2013/9/10 19:04:15
/ 输入参数:输入当前的程序版本
/ 输出参数:none
/ 使用说明:none
******************************************************************************/
void Shell_RTC_Service(void)
{
uint8_t *ptRxd; //用于接收指令处理
//uint8_t *ptTxd; //方便用于指令发送
int i,j,k,l;
//int tx_len,drv;
//uint32_t u32_arg[4];
uint16_t retval;
uint8_t arg[32];
uint32_t tmp_time;
//指令初级过滤
//--------------------------------------------------------------------------
//格式:<->[cmd bytes]<CRLF> 即"-[cmd bytes]\r\n"
//指令必须以"-"开始, 以"\r\n"结束
i = shell_rx_rdy;
if( (i < 2) || ('\r' != shell_rx_buff[i-2]) || ('\n' != shell_rx_buff[i-1]))return;
//长度和前缀过滤
ptRxd = (uint8_t *)shell_rx_buff;
if( (' ' != shell_rx_buff[3]) || ('r' != shell_rx_buff[0]) || (i < 6) ||
('t' != shell_rx_buff[1]) || ('c' != shell_rx_buff[2]) ) return;
//处理指令
//--------------------------------------------------------------------------
ptRxd += 4;
if(StrComp(ptRxd,"rd time")) //按包读取指令
{
RTC_Sprintf_CurrTime((void *)arg);
printf("Time:%s\r\n",arg);
}
else if(StrComp(ptRxd,"rd info\r\n")) //读取RTC信息
{
//打印当前时间和上次复位时间
RTC_Sprintf_CurrTime((void *)arg);
printf("->Time:%s\tResetCounter:%d\r\n",arg,RESET_CNT);
RTC_Sprintf_ResetCurr((void *)arg,&tmp_time);
printf("\tCurrReset:%s\tRun: %d Days, %d hour, %d minute\r\n",
arg,tmp_time/(24*60),(tmp_time%(24*60))/60,tmp_time%60 );
RTC_Sprintf_ResetLast((void *)arg,&tmp_time);
printf("\tNextReset:%s\tRun: %d Days, %d hour, %d minute\r\n",
arg,tmp_time/(24*60),(tmp_time%(24*60))/60,tmp_time%60 );
}
else if(StrComp(ptRxd,"wr time ")) //写时间
{
retval = sscanf((void*)shell_rx_buff,"%*s%*s%*s%d:%d:%d",&i,&j,&k);
if(3 != retval)return; //没有接收到3个输入数据,直接退出
if(RTC_TimeWrite((uint8_t)i,(uint8_t)j,(uint8_t)k) )
{
RTC_Sprintf_CurrTime((void *)arg);
printf("->CurrTime:%s\r\n",arg);
}
else
{
printf("->Error Time Input!\r\n");
shell_rx_rdy = 0; //不用触发错误指令显示
return;
}
}
else if(StrComp(ptRxd,"wr date ")) //写日期
{
retval = sscanf((void*)shell_rx_buff,"%*s%*s%*s%d-%d-%d %d",&i,&j,&k,&l);
if(4 != retval)return; //没有接收到4个输入数据,直接退出
if(RTC_DateWrite((uint16_t)i,(uint8_t)j,(uint8_t)k,(uint8_t)l))
{
RTC_Sprintf_CurrTime((void *)arg);
printf("->CurrTime:%s\r\n",arg);
}
else
{
printf("->Error Date Input!\r\n");
shell_rx_rdy = 0; //shell_rx_rdy为0,表示指令已被处理完毕,否者下个Shell服务继续调用
return;
}
}
else if(StrComp(ptRxd,"help\r\n")) //指令帮助
{
shell_SendStr((void *)RTC_HelpMsg);
}
else return;
//退出处理
//--------------------------------------------------------------------------
shell_rx_rdy = 0; //shell_rx_rdy为0,表示指令已被处理完毕,否者下个Shell服务继续调用
}
/******************************************************************************
*********************************** END ************************************
******************************************************************************/
#endif
|