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

📄 led.c

📁 通过车载终端采集GPS数据
💻 C
字号:
#include <string.h>
#include "typedef.h"
#include "16c554.h"
#include "led.h"

//#include "Trans_process.h"
#include "nf_file.h"
//#include "commoninterface.h"
//#include "display.h"
char gLedBuf[300];
char gLedReSendBuf[300];
unsigned char gLedSendFlag = 0;
#define DEFAULT_PARAM 3
#define DEFAULT_DELAY 0

#define LED_QUERY_NOTICE 0xa2
#define LED_QUERY_ADVERTISE 0x81
char gLedMsgID[4];
unsigned char gLedQueryType=0;
unsigned char gLedQuerySeq=0;
unsigned char gLedSetType=0;
#define LED_CLOCK_TIMER 10
unsigned char gLedClock = LED_CLOCK_TIMER;
extern void process_load(void);
//该进程处理LED接收的问题
/**注意该接口也可以做更新程序的接口,在用做更新程序使用时,需要屏蔽掉LED功能*/
#define LED_UPDATE_TIMEOUT 200
#define LED_UPDATEPROGRAM 2
#define LED_NORMALSTATUE 1
unsigned char gLedInterfaceStatus = LED_NORMALSTATUE;
Uint32 gLedUpdateOffset = 0;
Uint16 gLedUpdateLastNum = 0;
void led_process()
{
    char* tmpBuf;
    Byte recieveLen;
    //处理接收
    recieveLen = sioc_receive(&tmpBuf);
    if (recieveLen > 0)
    {
        if ((tmpBuf[0] == '*') && (tmpBuf[recieveLen-1] == '#'))
        {
            //为更新程序的
            led_updateprogram(tmpBuf, recieveLen);
        }
        sioc_start_receive(); 
        
    }
}

#define SOH   1 /*数据正在传输*/
#define EOT   4 /*数据传输结束*/
#define QUIT   5 /*放弃前面传输的数据*/

#define RESPONSE_ACK 0//应答成功
#define RESPONSE_NAK 1//应答失败
/******以下程序是LED接口用作更新程序时使用*********/
/****返回应答信息******/
void encapsulate_response_update(Uint8 ProcessResult, Uint8 TransferStatus, Uint16 BlockSequence)
{
    Byte len;
    if(TransferStatus == SOH)
    {
        len = 8;
        gLedBuf[7] = '#';
        gLedBuf[0] = '*';
        gLedBuf[1] = 0;
        gLedBuf[2] = 8;
        gLedBuf[3] = 0xa5;
        gLedBuf[4] = ProcessResult;
        gLedBuf[5] = High(BlockSequence);
        gLedBuf[6] = Low(BlockSequence);
    }
    else
    {
        len = 6;
        gLedBuf[5] = '#';
        gLedBuf[0] = '*';
        gLedBuf[1] = 0;
        gLedBuf[2] = 6;
        gLedBuf[3] = 0xa5;
        gLedBuf[4] = ProcessResult;
    }
    sioc_send(gLedBuf, len);//sioc_send
//    sioc_send(gLedBuf, len);
}

void led_updateprogram(Byte* pBuf, Byte nLen)
{
    Uint16 blocksequence, chsum;
    Byte i;
    if (nLen == pBuf[2])
    {
        if (pBuf[5] == SOH)
        {
            if (0 == pBuf[4])
            {
                blocksequence = *(pBuf + 6);
                blocksequence <<= 8;
                blocksequence +=  *(pBuf + 7);
    
                chsum = 0;
                for(i=0; i<128; i++)//计算累加校验和
                {
                    chsum += *(pBuf + 8 + i);
                    chsum &= 0x00ff;
                }
                if((blocksequence == gLedUpdateLastNum+1) && (chsum == *(pBuf + 136)))//数据块号校验和累加校验
                {
                    gLedUpdateLastNum = blocksequence;
                    if (1 == blocksequence)
                    {
                        gLedUpdateOffset = 0;
                        init_serialupdateprogram(SERIAL_FIRSTUPDATE);
                    }
                    else
                        init_serialupdateprogram(SERIAL_FOLLOWUPDATE);
                    if (OK == write_programtoFlash(pBuf+8, 128, gLedUpdateOffset))
                    {
                        gLedUpdateOffset += 128;
                        encapsulate_response_update(RESPONSE_ACK, SOH, blocksequence);
                    }
                }
                else
                    encapsulate_response_update (RESPONSE_NAK, SOH, gLedUpdateLastNum);
            }
            
        }
        else if ((pBuf[5] == EOT) && (0 != gLedUpdateLastNum))
        {
            //传输结束
            //进行更新
            encapsulate_response_update (RESPONSE_ACK, EOT, 0);
            gLedUpdateLastNum = 0;
            gLedUpdateOffset = 0;
			process_load();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -