stream.c

来自「在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LE」· C语言 代码 · 共 127 行

C
127
字号
/****************************************************************
**                                                              *
**  FILE         :  Stream.C                                    *
**  COPYRIGHT    :  (c) 2001 .Xiamen Yaxon NetWork CO.LTD       *
**                                                              *
**                                                              *
**  By : CCH 2002.1.15                                          *
****************************************************************/

#include "system.h"
#include "structs.h"
#include "stream.h"


BOOLEAN InitStrm(STREAM *Sp, STREAMMEM *Bp, INT16U MaxLen)
{
    if (Sp == 0) return FALSE;
	
    Sp->Len      = 0;
    Sp->MaxLen   = MaxLen;
    Sp->CurPtr   = Bp;
    Sp->StartPtr = Bp;
    return TRUE;
}

INT16U GetStrmLen(STREAM *Sp)
{
    return (Sp->Len);
}

STREAMMEM *GetStrmPtr(STREAM *Sp)
{
    return (Sp->CurPtr);
}

STREAMMEM *GetStrmStartPtr(STREAM *Sp)
{
    return (Sp->StartPtr);
}

void MovStrmPtr(STREAM *Sp, INT16U Len)
{
    if (Sp != 0) {
        if ((Sp->Len + Len) <= Sp->MaxLen) {
            Sp->Len    += Len;
            Sp->CurPtr += Len;
        } else {
            Sp->Len = Sp->MaxLen;
        }
    }
}

void WriteBYTE_Strm(STREAM *Sp, INT8U writebyte)
{
    if (Sp != 0){
        if (Sp->Len < Sp->MaxLen) {
            *Sp->CurPtr++ = writebyte;
            Sp->Len++;
        }
    }
}

void WriteHWORD_Strm(STREAM *Sp, INT16U writeword)
{
    HWORD_UNION temp;
    
    temp.hword = writeword;
    WriteBYTE_Strm(Sp, temp.bytes.high);
    WriteBYTE_Strm(Sp, temp.bytes.low);
}

void WriteLONG_Strm(STREAM *sp, INT32U writelong)
{
    WriteHWORD_Strm(sp, writelong >> 16);
    WriteHWORD_Strm(sp, writelong);
}

void WriteLF_Strm(STREAM *Sp)
{
    WriteBYTE_Strm(Sp, CR);
    WriteBYTE_Strm(Sp, LF);
}

void WriteCR_Strm(STREAM *Sp)
{
    WriteBYTE_Strm(Sp, CR);
}

void WriteSTR_Strm(STREAM *Sp, char *Ptr)
{
    while(*Ptr)
    {
        WriteBYTE_Strm(Sp, *Ptr++);
    }
}

void WriteDATA_Strm(STREAM *Sp, INT8U *Ptr, INT16U Len)
{
    while(Len--)
    {
        WriteBYTE_Strm(Sp, *Ptr++);
    }
}

INT8U ReadBYTE_Strm(STREAM *Sp)
{
    Sp->Len++;
    return (*Sp->CurPtr++);
}

INT16U ReadHWORD_Strm(STREAM *Sp)
{
    HWORD_UNION temp;
	
    temp.bytes.high = ReadBYTE_Strm(Sp);
    temp.bytes.low  = ReadBYTE_Strm(Sp);
    return temp.hword;
}

void ReadDATA_Strm(STREAM *Sp, INT8U *Ptr, INT16U Len)
{
    while(Len--)
    {
        *Ptr++ = ReadBYTE_Strm(Sp);
    }
}

⌨️ 快捷键说明

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