📄 do_disp.c
字号:
/********************************************************\
* 文件名: Do_Disp.h
* 创建时间:2004年10月20日
* 创建人:
* 版本号: 1.00
* 功能:
*
* 修改历史:(每条详述)
\********************************************************/
#include <msp430x14x.h>
#include "General.h"
#include "Uart01.h"
#include "Define_Bit.h"
#include "Other_Define.h"
#include "Disp_Protocol.h"
#include "Sub_C.h"
#include "W_Protocol.h"
#include "SPI45DB041.h"
#include "D_Buffer.h"
#include "Do_Other.h"
#include "TA_Uart.h"
#include "Handle_Protocol.h"
#include "Do_Handle.h"
#include "M22_AT.h"
#include "Do_SRAM.h"
/*
#include "Main_Init.h"
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Do_GSM.h"
#include "Do_Handle.h"
#include "Do_GPS.h"
#include "Do_Disp.h"
#include "Msp430_Flash.h"
*/
unsigned char Check_Disp_Command(void);
void Disp_Ask_Watch_Status_Echo(void);
void Disp_Ask_Info(unsigned char nCommand,unsigned char nKey_ID,unsigned char nACK);
void Disp_Receive_Info_Echo(unsigned char nCommand,unsigned char nInfo_ID1,unsigned char nInfo_ID2,unsigned char nInfo_ID3,unsigned char nInfo_ID4,unsigned char nACK);
void Disp_Ask_Par(void);
/********************************************************\
* 函数名:Do_Disp_Module()
作用域:外部文件调用
* 功能:
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
补充说明:显示终端数据采用半双工的通讯方式,模拟串口4,不采用握手线,和手柄的通讯方式一样
\********************************************************/
void Do_Disp_Module(void)
{
unsigned int i=0,k=0;
//接收处理来自显示终端的消息包
if( (gDisp_Receive_Over>50)&&(gDisp_Buffer_R_Point>0) )
{
#ifdef Debug_GSM_COM1
Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point/10));
Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point%10));
Send_COM1_Byte('[');
Send_COM1_String(gDisp_Buffer_R,gDisp_Buffer_R_Point);
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
#endif
k=Check_Disp_Command();
gDisp_Buffer_R_Point=0;
switch(k)
{
/********************************************************\
1,显示终端向主控请求主控状态的命令
\********************************************************/
case DISP_ASK_WATCH_STATUS_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
Disp_Ask_Watch_Status_Echo();
break;
}
/********************************************************\
2,接收来自显示终端的信息请求(需要上行到中心请求信息)
\********************************************************/
case DISP_INFO_STATUS_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
SRAM_Init();
//1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
i=SRAM_Read(OTHER_SMS_2);
if(i==VAILD_2)
{
gPublic_Flag &=~ DISP_SEND_INFO_F_1;
if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=7+2;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=7;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
}
else
{
Disp_Ask_Info(DISP_ASK_INFO_UP,gDisp_Buffer_R[4],0);
gPublic_Flag |= DISP_SEND_INFO_F_1;
}
break;
}
/********************************************************\
3,短消息预置的上报
\********************************************************/
case DISP_SMS_SNED_UP:
{
//1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
SRAM_Init();
i=SRAM_Read(OTHER_SMS_2);
if(i==VAILD_2)
{
gPublic_Flag &=~ DISP_SEND_INFO_F_1;
if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
{
gDisp_Buffer[gDisp_Buffer_Point]=7+2;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=7;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
}
else
{
Disp_Ask_Info(DISP_SMS_INFO_UP,gDisp_Buffer_R[4],0);
gPublic_Flag |= DISP_SEND_INFO_F_1;
}
break;
}
/********************************************************\
4,接收来自显示终端接收到主控发送的驾驶员信息的反馈
\********************************************************/
case DISP_RECEIVE_IC_INFO_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
gGet_Driver_Info_Count=0;
gDriver_Info=SEND_DRIVER_INFO_OK;
break;
}
/********************************************************\
4,接收来自显示终端接收到一个下行的信息包的ECHO,需要上行到中心请求
\********************************************************/
/*
case DISP_RECEIVE_INFO_ECHO_UP:
{
Disp_Receive_Info_Echo(DISP_INFO_ECHO_UP,gDisp_Buffer_R[4],gDisp_Buffer_R[5],gDisp_Buffer_R[6],gDisp_Buffer_R[7],0);
break;
}
*/
/********************************************************\
5,接收来自显示终端接收到一个下行的响应(显示终端接收到一个每一分钟的
的时间矫正后,则需要返回的一个响应数据包)
\********************************************************/
case DISP_CLRCLESEND_ECHO_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
break;
}
/********************************************************\
6, 接收来自显示终端和记录仪之间通讯的协议字(主控系统只负责转发)
需要增加重复发送功能
\********************************************************/
case DISP_ASK_RECORDINFO_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
for(k=0;k<gDisp_Buffer_R[2]-5;k++)
{
Send_COM1_Byte(gDisp_Buffer_R[k+4]);
}
break;
}
/********************************************************\
7, 接收来自显示终端的响应(0xAE)
\********************************************************/
case DISP_SET_ECHO_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
//下行文字信息的显示终端收到一屏的响应
if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_ECHO_UP)
{
if(gCommon_Flag&ALLOW_OUT_DISP_F_1)
{
gCommon_Flag|=DISP_SEND_OK_F_1;
}
}
//下行文字信息全部收完后的响应0x4B
else if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_UP)
{
//传递参数:第二级命令字;ID(4个字节);ACK,
Disp_Receive_Info_Echo(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[7],gDisp_Buffer_R[8],gDisp_Buffer_R[9],gDisp_Buffer_R[5]);
}
//来自中心的预先设置短消息的响应0xAE
else if(gDisp_Buffer_R[4]==DISP2_SET_SMS_ECHO_UP)
{
//传递参数:第二级命令字;ID(1个字节);ACK
Disp_Ask_Info(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[5]);
gCommon_Flag|=DISP_SEND_OK_F_1;
}
//来自手柄端口的预先设置短消息的响应字0x04
else if(gDisp_Buffer_R[4]==DISP2_HSET_SMS_ECHO_UP)
{
Send_COM3_Load(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
gCommon_Flag|=DISP_SEND_OK_F_1;
}
//来自手柄端口的初始化显示终端的命令响应0x03
else if(gDisp_Buffer_R[4]==DISP2_CLEAR_ECHO_UP)
{
//返回手柄一个成功信号
Waiting_Allow_Send();
Send_COM3_SubProgram(5,HANDLE_CLEAR_DISP_ECHO,COMMAND_OK);
}
break;
}
/********************************************************\
8, 接收来自显示终端查询主控终端的请求(需要增加显示终端的重复发送)
\********************************************************/
case DISP_ASK_PAR_UP:
{
gDisp_OnLine_Timer=0;
gInternal_Flag|=DISP_ON_F_1;
gStatus1_Flag|=DISPLAY_ON_F_1;
Disp_Ask_Par();
break;
}
/********************************************************\
9,其他
\********************************************************/
default:
break;
}
}
else if( (P6IN&DISP_TEST)
&&((gCommon_Flag&ALLOW_SEND_DISP_F_1)==0) )
{
gCommon_Flag|=ALLOW_SEND_DISP_F_1;
}
//处理向显示终端发送消息包的处理
else if ( (gDisp_Buffer_Point>0) //发送缓冲区中有数据要发送
&&(gDisp_Buffer_R_Point==0) //接收缓冲区的数据指针为0,表示没有接收数据
&&(gHandle_Receive_Over>20) //因为在同一个中断中,必须保证车栽电话没有向主控发送数据
&&(P6IN&DISP_TEST)
&&( (gCommon_Flag&ALLOW_R232_F_1)==0)
&&(gReceive1_Over_Count>20)
&&(gGPS_Receive_Over>20)
&&(gDisp_Timer>30)
&&(gCommon_Flag&ALLOW_SEND_DISP_F_1) )
{
//1,正常的非需要响应的数据
if( ((gCommon_Flag&ALLOW_OUT_DISP_F_1)==0)
&&( (gCommon_Flag&DISP_SEND_OK_F_1)==0) )
{
Send_COM4_String( gDisp_Buffer+2,gDisp_Buffer[0]-2 );
RX4_Ready();
gCommon_Flag&=~ALLOW_SEND_DISP_F_1;
gDisp_Timer=0;
if( gDisp_Buffer[5]==DISP_MAIN_WORD_DOWN )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -