📄 hstiodrv.c
字号:
/****************************************************************
** *
** FILE : HstIODrv.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#include "includes.h"
#include "bsp.h"
#include "structs.h"
#include "tools.h"
#include "public.h"
#include "roundbuf.h"
#include "stream.h"
#include "timetask.h"
#include "errtask.h"
#include "alarmer.h"
#include "monitor.h"
#include "gprsdrv.h"
#include "hstiodrv.h"
#include "lcddrv.h"
#include "lcdrecv.h"
#include "systask.h"
#if EN_BLACKBOX >0
void HdlMsgBlkBox21H(void);
#endif
#if EN_HSTIO > 0
/*
********************************************************************************
* DEFINE CONFIG PARAMETERS
********************************************************************************
*/
#define PERIOD_SCAN MILTICK, 1
#define SIZE_RECV 256
#define SIZE_SEND 512
#define SIZE_TEMP 256
#define SIZE_ROUND 256
/*
********************************************************************************
* DEFINE MODULE VARIANT
********************************************************************************
*/
static TMR_TSK *ScanTmr;
static INT8U SendBuf[SIZE_SEND];
static INT8U RecvBuf[SIZE_RECV];
static INT8U TempBuf[SIZE_TEMP];
static INT8U RoundBuf[SIZE_ROUND];
static INT16S RecvLen;
static ROUNDBUF_STRUCT RecvRound;
static ASMRULE_STRUCT rules = {0x7e, 0x7d, 0x02, 0x01};
static void ScanTmrProc(void)
{
INT16S ch;
INT8U c_flags;
StartTmr(ScanTmr, PERIOD_SCAN);
c_flags = rules.c_flags;
while ((ch = uarts_read(UART_HSTIO)) != -1) {
if (RecvLen > -1) {
if (ch == c_flags) {
if (RecvLen > 0) {
RecvLen = DeassembleByRules(RecvBuf, RecvBuf, RecvLen, &rules);
if (RecvBuf[0] == GetChkSum(&RecvBuf[1], RecvLen - 1)) {
if (RecvLen >= 2) {
////RecvLen -= 2;
ComType = USE_LCD;
HdlLCDRecvData(RecvBuf, RecvLen);
}
} else {
/* chksum error */
}
RecvLen = -1;
}
} else {
if (RecvLen >= sizeof(RecvBuf)) {
RecvLen = -1;
} else {
RecvBuf[RecvLen++] = ch;
}
}
} else {
if (ch == c_flags) {
RecvLen = 0;
} else {
ComType = USE_HST;
WriteRoundBuf(&RecvRound, ch);
}
}
}
}
void InitHstIODrv(void)
{
RecvLen = -1;
ScanTmr = CreateTimer(ScanTmrProc, 0);
InitRoundBuf(&RecvRound, RoundBuf, sizeof(RoundBuf), 0);
////uarts_init(UART_HSTIO, BAUD_HSTIO);
StartTmr(ScanTmr, PERIOD_SCAN);
}
BOOLEAN SendMemFromHstIO(INT8U type, INT16U memlen, INT8U *mem)
{
INT16U SendLen;
if (ComType != USE_HST) return FALSE;
if (memlen > sizeof(TempBuf) - 2) return FALSE;
TempBuf[1] = type;
memcpy(&TempBuf[2], mem, memlen);
TempBuf[0] = GetChkSum(&TempBuf[1], memlen + 1);
SendLen = AssembleByRules(SendBuf, TempBuf, memlen + 2, &rules);
if (SendLen > sizeof(SendBuf)) {
ErrExit(ERR_HSTIODRV_SEND);
} else {
uarts_writeblock(UART_HSTIO, SendBuf, SendLen);
}
return TRUE;
}
INT16S ReadFromHstIO(void)
{
return ReadRoundBuf(&RecvRound);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -