📄 uartser.c
字号:
static void ClrAdTimeFunc(void)
{
AdVoiceIDPara.status_time = CLOSE_;
StorePubPara(ADVOICEID_);
}
static void ChoiceHitId(INT8U hit_id)
{
HitChoicePara.Hit_id = hit_id;
StorePubPara(HITCHOICE_);
}
static void SaveAdObject(INT8U *ptr,INT8U nums)
{
AdObjectPara.nums = nums;
memcpy((INT8U*)AdObjectPara.object,ptr, nums * sizeof(AD_OBJ));
StorePubPara(ADOBJ_);
}
static void HdlLineLayout(INT8U len)
{
INT16U linenum;
INT8U result;
linenum =AsciiToDec(&Hdlrecbuf[1],len-2);
#if DEBUG_UARTNo_BUSSTATION <=1
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,linenum);
#endif
result = LayoutStation_Line(linenum);
#if DEBUG_UARTNo_BUSSTATION <=1
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,result);
#endif
switch(result)
{
case NOLINE:
OSQPost(AlmTaskMsgQue, MSG_LAYOUT_NOLINE, 0 ,0);
#if DEBUG_UARTNo_BUSSTATION <=1
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "无该线路!!!\n");
#endif
break;
case NOSTATION:
OSQPost(AlmTaskMsgQue, MSG_LAYOUT_NOSTA, 0 ,0);
#if DEBUG_UARTNo_BUSSTATION <=1
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "有不满足条件的站点!!!\n");
#endif
break;
case SUCCESS:
OSQPost(AlmTaskMsgQue, MSG_LAYOUT_SUCCESS, linenum ,0);
#if DEBUG_UARTNo_BUSSTATION <= 1
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "规划成功!!!\n");
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n始发站1:");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.start_sta1);
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n始发站2:");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.start_sta2);
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n终点站1:");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.end_sta1);
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\n终点站2:");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,SpecailStation.end_sta2);
#endif
break;
default:
break;
}
}
#if DEBUG_UARTNo_BUSSTATION <=1
static void GoForward(void)
{
if(Index >= MAX_INDEX)
{
Index = 0;
}
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\nIndex=");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,Index);
RecerGpsData(ManualData[Index++]);
}
static void GoBackward(void)
{
if(Index == 0)
{
Index = MAX_INDEX;
}
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "\nIndex=");
SendFromUART_HEX(DEBUG_UARTNo_BUSSTATION,Index);
RecerGpsData(ManualData[Index--]);
}
static void InStation(void)
{
HdlPullInStation();
}
static void OutStation(void)
{
HdlPullOutStation();
}
static void HdlRepeat(void)
{
HdlManualRepeat();
}
static void HdlSetUpStream(void)
{
SetUpLine();
}
static void HdlSetDownStream(void)
{
SetDownLine();
}
#endif
#if DEBUG_UARTNo_LEDDRV <=1
void GetTest(INT8U *tr);
#endif
static void HdlProc(INT16S len)
{
INT8U hdllen;
INT8U chksum;
INT8U type;
INT8U nums;
memcpy(Hdlrecbuf, &Recerbuf[1], len-2); // 去掉帧头帧尾
hdllen = len -2;
type = Hdlrecbuf[0];
chksum = Hdlrecbuf[hdllen - 1];
if (hdllen >= 1)
{
#if DEBUG_UARTNo_BUSSTATION <=1
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "<receive a frame from UART1>\n");
#endif
if (GetChkSum(Hdlrecbuf , hdllen - 1) == chksum)
{
switch(type)
{
case GPS_DATA:
RecerGpsData(&Hdlrecbuf[1]);
break;
case ADPos_OPEN:
SetAdPosFunc(Hdlrecbuf[1],Hdlrecbuf[2]);
break;
case ADPos_CLOSE:
ClrAdPosFunc();
break;
case ADTime_OPEN:
SetAdTimeFunc(Hdlrecbuf[1],Hdlrecbuf[2]);
break;
case ADTime_CLOSE:
ClrAdTimeFunc();
break;
case HIT_CHOICE:
ChoiceHitId(Hdlrecbuf[1]);
break;
case SIMU_BEGIN:
OpenIndicator();
SetSimuStatus();
OSQPost(AlmTaskMsgQue, MSG_UARTSER_SIMUBEGIN, 0, 0);
break;
case SIMU_END:
CloseIndicator();
ClearSimuStatus();
OSQPost(AlmTaskMsgQue, MSG_UARTSER_SIMUEND, 0, 0);
break;
case AD_OBJECT:
nums = Hdlrecbuf[1];
SaveAdObject(&Hdlrecbuf[2],nums);
break;
case LINE_LAYOUT:
HdlLineLayout(hdllen);
break;
case SYS_TIME:
SetSysTime_Time(&Hdlrecbuf[1]);
#if DEBUG_UARTNo_LEDDRV <=1
case 0x0b:
GetTest(&Hdlrecbuf[1]);
break;
#endif
default:
break;
}
}
else
{
#if DEBUG_UARTNo_BUSSTATION <=1
PrintFromUART(DEBUG_UARTNo_BUSSTATION, "<sorry, check sum error(UART1)>\n");
#endif
}
}
}
static void scanTmrProc(void)
{
INT8U Errorflag;
for (;;)
{
if ((cur = uarts_read(1)) == -1) break;
#if DEBUG_UARTNo_BUSSTATION <=1
if(cur == 0x2e)
{
GoForward();
break;
}
else if (cur == 0x2c)
{
GoBackward();
break;
}
else if (cur == 0x3d)
{
InStation();
break;
}
else if (cur == 0x2d)
{
OutStation();
break;
}
else if (cur == 0x5c)
{
HdlRepeat();
break;
}
else if (cur == 0x5b)
{
HdlSetUpStream();
}
else if (cur == 0x5d)
{
HdlSetDownStream();
}
#endif
if (rlen == 0)
{ /* search flags */
if (cur == 0x7e)
{
Recerbuf[rlen++] = cur;
pre = 0;
}
continue;
}
else
{
if (cur == 0x7e)
{
Recerbuf[rlen] = cur;
if(( rlen>=3)&&(Recerbuf[0] == 0x7e))
{
HdlProc(rlen+1);
}
rlen = 0;
break;
}
}
if (pre == 0x7d)
{
if (cur == 0x02)
{
Recerbuf[rlen++] = 0x7e;
}
else if (cur == 0x01)
{
Recerbuf[rlen++] = 0x7d;
}
else
{
Errorflag = 1;
break;
}
}
else
{
if (cur != 0x7d)
{
Recerbuf[rlen++] = cur;
}
}
pre = cur;
}
if (Errorflag == 1)
{
}
}
void InitUartSer(void)
{
rlen = 0;
#if DEBUG_UARTNo_BUSSTATION <=1
Index = 0;
#endif
uarts_init(1, 57600L);
scantmr = CreateTimer(scanTmrProc, 0);
StartTmr(scantmr, MILTICK, 2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -