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

📄 hstiodrv.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 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 + -