⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcddrv.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
📖 第 1 页 / 共 3 页
字号:

    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 + -