📄 lcddrv.c
字号:
success = TRUE;
if (!PubParaValid(GPRSIP_) || !PubParaValid(MYTEL_)) {
success = FALSE;
} else {
if (MyTel.len == 0) success = FALSE;
if (strlen(GprsIP.ippara[0].apn) == 0) success = FALSE;
if (strlen(GprsIP.ippara[0].tcp_ip) == 0) success = FALSE;
if (strlen(GprsIP.ippara[0].tcp_port) == 0) success = FALSE;
}
if (success) {
GprsIP.ippara[0].isvalid = TRUE;
VirStorePubPara(GPRSIP_);
OnlineMode.gprsonline = 0x01;
VirStorePubPara(ONLINEMODE_);
StoreAllPubPara();
DeactivateGPRS();
ActivateGPRS(CHA_TCP);
SendLCDAck(0xAA, 0x01);
} else {
SendLCDAck(0xAA, 0x02);
}
}
/*
********************************************************************************
* Handler: HdlMsg_0xAD 参数状态查询 add by qzc
********************************************************************************
*/
static void HdlMsg_0xAD(void)
{
INT16U Type;
InitStrm(&strm,(STREAMMEM *)buffer,sizeof(buffer));
if(PubParaValid(SMSTEL_)) //短信中心号
{
WriteBYTE_Strm(&strm,SmsTel.len);
WriteDATA_Strm(&strm,SmsTel.tel,SmsTel.len);
}
else WriteBYTE_Strm(&strm,0);
if(PubParaValid(ALARMTEL_)) //特服号
{
WriteBYTE_Strm(&strm,AlarmTel.len);
WriteDATA_Strm(&strm,AlarmTel.tel,AlarmTel.len);
}
else WriteBYTE_Strm(&strm,0);
if(GprsIsOnline()) WriteBYTE_Strm(&strm,0x01); //GPRS在线
else WriteBYTE_Strm(&strm,0x02);
if(GpsDataValid()) WriteBYTE_Strm(&strm,0x01); //GPS数据有效
else WriteBYTE_Strm(&strm,0x02);
Type=GetAlarmType(); //报警类型
if(Type==0x0101) WriteBYTE_Strm(&strm,0x01);//无报警
else if(Type&0x2000) WriteBYTE_Strm(&strm,0x02);//振动报警
else if(Type&0x4000) WriteBYTE_Strm(&strm,0x03);//开车门报警
else if(Type&0x0400) WriteBYTE_Strm(&strm,0x04);//越界报警
else if(Type&0x0800) WriteBYTE_Strm(&strm,0x05);//超速报警
else if(Type&0x0200) WriteBYTE_Strm(&strm,0x06);//欠压报警
else if(Type&0x0020) WriteBYTE_Strm(&strm,0x07);//抢劫报警
else if(Type&0x0002) WriteBYTE_Strm(&strm,0x08);//测试报警
else WriteBYTE_Strm(&strm,0x09);//未知类型
if(PubParaValid(CALLRHT_)) WriteBYTE_Strm(&strm,0x01);//呼叫限制
else WriteBYTE_Strm(&strm,0x02);
RequestSend_LCD(LCD_ATTR_COMMON,0xAC,GetStrmStartPtr(&strm),GetStrmLen(&strm),0);
}
/*
********************************************************************************
* Handler: HdlMsg_0xE3
********************************************************************************
*/
static void HdlMsg_0xE3(void)
{
INT8U len;
len = lcdrecv.len - 2;
if (len > sizeof(SmsTel.tel)) {
SendLCDAck(0xF3, 0x00);
} else {
SendLCDAck(0xF3, 0x01);
SmsTel.len = DecodeTel(SmsTel.tel, &lcdrecv.buffer[2], len);
StorePubPara(SMSTEL_);
}
}
/*
********************************************************************************
* Handler: HdlMsg_0xE4
********************************************************************************
*/
static void HdlMsg_0xE4(void)
{
INT8U num, pos, i;
pos = 2;
num = lcdrecv.buffer[pos++];
if (num > MAX_LISTENTEL) {
SendLCDAck(0xF4, 0x00);
} else {
SendLCDAck(0xF4, 0x01);
ListenTel.num = num;
for (i = 0; i < num; i++) {
ListenTel.tel[i].tellen = DecodeTel(ListenTel.tel[i].tel, &lcdrecv.buffer[pos], sizeof(ListenTel.tel[i].tel));
pos += sizeof(ListenTel.tel[i].tel);
}
StorePubPara(LISTENTEL_);
}
}
/*
********************************************************************************
* Handler: HdlMsg_0xE7
********************************************************************************
*/
static void HdlMsg_0xE7(void)
{
INT8U pos;
SendLCDAck(0xF7, 0x01);
pos = 2;
AlarmTel.len = DecodeTel(AlarmTel.tel, &lcdrecv.buffer[pos], sizeof(AlarmTel.tel));
pos += sizeof(AlarmTel.tel);
VirStorePubPara(ALARMTEL_);
ReEnterAlarm();
TaxTel.tellen = DecodeTel(TaxTel.tel, &lcdrecv.buffer[pos], sizeof(TaxTel.tel));
pos += sizeof(TaxTel.tel);
VirStorePubPara(TAXTEL_);
AttemperTel.len = DecodeTel(AttemperTel.tel, &lcdrecv.buffer[pos], sizeof(AttemperTel.tel));
StorePubPara(ATTEMPERTEL_);
AddAutoMonitor();
}
/*
********************************************************************************
* Handler: HdlMsg_0xEA
********************************************************************************
*/
static void HdlMsg_0xEA(void)
{
HWORD_UNION config;
SendLCDAck(0xFA, 0x01);
config.bytes.high = lcdrecv.buffer[2];
config.bytes.low = lcdrecv.buffer[3];
ConfigAlarmer(config.hword);
}
/*
********************************************************************************
* Handler: HdlMsg_0xEB
********************************************************************************
*/
static void HdlMsg_0xEB(void)
{
INT8U paranum, paratype, paralen;
INT8U temp_8, i, tag, statetype;
SendLCDAck(0xFB, 0x01);
InitStrm(&strm, &lcdrecv.buffer[2], 1024L);
paranum = ReadBYTE_Strm(&strm);
for (; paranum > 0; paranum--) {
paratype = ReadBYTE_Strm(&strm);
paralen = ReadBYTE_Strm(&strm);
switch (paratype)
{
case 0x01:
temp_8 = ReadBYTE_Strm(&strm);
OnlineMode.gprsonline = temp_8;
if (temp_8 == 0x00) {
ActivateGPRS(ACTIVATE_UDP); /* activate gprs */
} else if (temp_8 == 0x01) {
ActivateGPRS(ACTIVATE_TCP); /* activate gprs */
} else {
DelayDeactivateGPRS();
}
VirStorePubPara(ONLINEMODE_);
break;
case 0x02:
AutoMonitorPara.ctlflag = ReadBYTE_Strm(&strm);
i = ReadBYTE_Strm(&strm);
for (; i > 0; i--) {
statetype = ReadBYTE_Strm(&strm);
switch (statetype)
{
case 0x01:
tag = 0;
break;
case 0x02:
tag = 1;
break;
default:
tag = MAX_AUTOMONITORPARA - 1;
break;
}
AutoMonitorPara.para[tag].servicetype = ReadBYTE_Strm(&strm);
AutoMonitorPara.para[tag].monitortime = ReadHWORD_Strm(&strm);
AutoMonitorPara.para[tag].monitorperiod = ReadHWORD_Strm(&strm);
AutoMonitorPara.para[tag].fixedspace = ReadHWORD_Strm(&strm);
}
VirStorePubPara(AUTOMONITORPARA_);
AddAutoMonitor();
break;
case 0x03:
OnlinePrompt.prompttype = ReadBYTE_Strm(&strm);
VirStorePubPara(ONLINEPROMPT_);
break;
case 0x04:
GprsBackup.backuptype = ReadHWORD_Strm(&strm);
VirStorePubPara(GPRSBACKUP_);
break;
default:
break;
}
}
StoreAllPubPara();
}
/*
********************************************************************************
* Handler: HdlMsg_0xEC
********************************************************************************
*/
static void HdlMsg_0xEC(void)
{
INT8U num, pos, tag;
BOOLEAN isvalid;
InitStrm(&strm, &lcdrecv.buffer[2], 1024L);
isvalid = TRUE;
for (tag = 0; tag < MAX_IPNUM; tag++) {
GprsIP.ippara[tag].isvalid = FALSE;
}
tag = 0;
num = ReadBYTE_Strm(&strm);
for (; num > 0; num--) {
tag = ReadBYTE_Strm(&strm);
if (tag >= MAX_IPNUM) {
isvalid = FALSE;
break;
}
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].apn, GetStrmPtr(&strm), 20); /* for APN field */
GprsIP.ippara[tag].apn[pos] = 0;
MovStrmPtr(&strm, 20);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].tcp_ip, GetStrmPtr(&strm), 15); /* for TCP_IP field */
GprsIP.ippara[tag].tcp_ip[pos] = 0;
MovStrmPtr(&strm, 15);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].tcp_port, GetStrmPtr(&strm), 5); /* for TCP_PORT field */
GprsIP.ippara[tag].tcp_port[pos] = 0;
MovStrmPtr(&strm, 5);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].ivudp_ip, GetStrmPtr(&strm), 15); /* for IVUDP_IP field */
GprsIP.ippara[tag].ivudp_ip[pos] = 0;
MovStrmPtr(&strm, 15);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].ivudp_port, GetStrmPtr(&strm), 5); /* for IVUDP_PORT field */
GprsIP.ippara[tag].ivudp_port[pos] = 0;
MovStrmPtr(&strm, 5);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].udp_ip, GetStrmPtr(&strm), 15); /* for UDP_IP field */
GprsIP.ippara[tag].udp_ip[pos] = 0;
MovStrmPtr(&strm, 15);
pos = DecodeTel((INT8U *)GprsIP.ippara[tag].udp_port, GetStrmPtr(&strm), 5); /* for UDP_PORT field */
GprsIP.ippara[tag].udp_port[pos] = 0;
MovStrmPtr(&strm, 5);
GprsIP.ippara[tag].isvalid = TRUE;
}
if (isvalid) {
SendLCDAck(0xFC, 0x01);
StorePubPara(GPRSIP_);
SuspendGPRS();
} else {
SendLCDAck(0xFC, 0x00);
InitAllPubPara();
}
}
/*
********************************************************************************
* Handler: HdlMsg_0xEE
********************************************************************************
*/
static void HdlMsg_0xEE(void)
{
SendLCDAck(0xFE, 0x01);
InitStrm(&strm, &lcdrecv.buffer[2], 1024);
EgCode.egcode = ReadHWORD_Strm(&strm);
VirStorePubPara(EGCODE_);
ChangeMonitorEgcode();
MyTel.len = DecodeTel(MyTel.tel, GetStrmPtr(&strm), sizeof(MyTel.tel));
StorePubPara(MYTEL_);
}
static FUNCENTRY_STRUCT functionentry[] = {
0x03, HdlMsg_0x03,
0x05, HdlMsg_0x05,
0x07, HdlMsg_0x07,
0x10, HdlMsg_0x10,
0x12, HdlMsg_0x12,
0x14, HdlMsg_0x14,
0x16, HdlMsg_0x16,
0x18, HdlMsg_0x18,
0x20, HdlMsg_0x20,
0x21, HdlMsg_0x21,
0x22, HdlMsg_0x22,
0x24, HdlMsg_0x24,
0x26, HdlMsg_0x26,
0x28, HdlMsg_0x28,
0x30, HdlMsg_0x30,
0x32, HdlMsg_0x32,
0x41, HdlMsg_0x41,
0x44, HdlMsg_0x44,
0x70, HdlMsg_0x70,
0x71, HdlMsg_0x71,
//新电召
0x7a, HdlMsg_0x7a,
0x7b, HdlMsg_0x7b,
0x80, HdlMsg_0x80,
0x82, HdlMsg_0x82,
0x84, HdlMsg_0x84,
0x86, HdlMsg_0x86,
0x50, HdlMsg_0x50,
0x52, HdlMsg_0x52,
0x54, HdlMsg_0x54,
0x56, HdlMsg_0x56,
0x58, HdlMsg_0x58,
0x5A, HdlMsg_0x5A,
0x5C, HdlMsg_0x5C,
0xA1, HdlMsg_0xA1,
0xA3, HdlMsg_0xA3,
0xA5, HdlMsg_0xA5,
0xA7, HdlMsg_0xA7,
0xA9, HdlMsg_0xA9,
0xAB, HdlMsg_0xAB,
0xAD, HdlMsg_0xAD, //add by qzc
0xCD, HdlMsg_0xCD,
0xCF, HdlMsg_0xCF,
0xD1, HdlMsg_0xD1,
0xD3, HdlMsg_0xD3,
0xE3, HdlMsg_0xE3,
0xE4, HdlMsg_0xE4,
0xE7, HdlMsg_0xE7,
0xEA, HdlMsg_0xEA,
0xEB, HdlMsg_0xEB,
0xEC, HdlMsg_0xEC,
0xEE, HdlMsg_0xEE,
0xFF, HdlMsg_0xFF
};
void HdlLcdRecv(void)
{
FindProcEntry(lcdrecv.buffer[1], functionentry, sizeof(functionentry)/sizeof(functionentry[0]));
}
static void QueryInformer(INT8U reason)
{
if (reason == _SUCCESS) comok = TRUE;
else comok = FALSE;
}
static void QueryTmrProc(void)
{
if(ComType == USE_LCD) {
RequestSend_LCD(LCD_ATTR_ACK, 0xCE, 0, 0, QueryInformer);
}
StartTmr(querytmr, PERIOD_QUERY);
}
void InitLCDDrv(void)
{
#if DEBUG_UARTNo_LCD <= 3
InitUART(DEBUG_UARTNo_LCD, DEBUG_UART_BAUD);
#endif
InitLCDRecv();
InitLCDList();
comok = TRUE;
querytmr = CreateTimer(QueryTmrProc, 0);
StartTmr(querytmr, PERIOD_QUERY);
}
BOOLEAN LcdComOK(void)
{
return comok;
}
void InformLCD_PhoneRing(INT8U len, INT8U *phonenum)
{
buffer[0] = len;
memcpy(&buffer[1], phonenum, len);
RequestSend_LCD(LCD_ATTR_ACK, 0x19, buffer, len + 1, 0);
}
void InformLCD_PhoneConnect(void)
{
RequestSend_LCD(LCD_ATTR_ACK, 0x21, 0, 0, 0);
}
void InformLCD_PhoneFree(void)
{
RequestSend_LCD(LCD_ATTR_ACK, 0x23, 0, 0, 0);
}
void InformLCD_Attemper(INT16U len, INT8U *data)
{
RequestSend_LCD(LCD_ATTR_ACK, 0x70, data, len, 0);
}
void InformLCD_Manage(INT16U len, INT8U *data)
{
RequestSend_LCD(LCD_ATTR_ACK, 0xD0, data, len, 0);
}
void InformLCD_RecvSM(SM_STRUCT *sm)
{
InitStrm(&strm, (STREAMMEM *)buffer, sizeof(buffer));
WriteBYTE_Strm(&strm, sm->OAL);
WriteDATA_Strm(&strm, sm->OA, sm->OAL);
WriteDATA_Strm(&strm, sm->SCTS, sizeof(sm->SCTS));
WriteBYTE_Strm(&strm, sm->UDL);
WriteDATA_Strm(&strm, sm->UD, sm->UDL);
RequestSend_LCD(LCD_ATTR_ACK, 0x33, GetStrmStartPtr(&strm), GetStrmLen(&strm), 0);
}
void InformLCD_CheckAlarmResult(void)
{
INT8U ack;
if (CheckAlarm.Flag == 0x03) {
ack = LCD_ACK;
} else {
ack = LCD_NAK;
CheckAlarm.Flag = 0x03;
StorePubPara(CHECKALARM_);
}
InitStrm(&strm, (STREAMMEM *)buffer, sizeof(buffer));
WriteBYTE_Strm(&strm, ack);
RequestSend_LCD(LCD_ATTR_ACK, 0x43, GetStrmStartPtr(&strm), GetStrmLen(&strm), 0);
}
void InformLCD_SuccorACK(INT16U len, INT8U *data)
{
if (len > 0)
ConvertData(data + 1, len - 1, 0, 0x7f);
RequestSend_LCD(LCD_ATTR_ACK, 0x83, data, len, 0);
}
void InformLCD_CancelSuccorAck(INT16U len, INT8U *data)
{
if (len > 0)
ConvertData(data + 1, len - 1, 0, 0x7f);
RequestSend_LCD(LCD_ATTR_ACK, 0x87, data, len, 0);
}
#endif /* EN_LCD */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -