📄 led.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 + -