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

📄 roundbuf.c

📁 名厂车载GPS通信终端
💻 C
字号:
#define ROUNDBUF_GLOBAL
#include "includes.h"

void Init_RoundBuf(void)
{
   uchar i;
   
   for(i=0; i<MAX_ROUNDBUF_NUM; i++)
   {
      round[i].status = _FREE;
      round[i].in     = NULL;
      round[i].out    = NULL;
      round[i].start  = NULL;
      round[i].end    = NULL;
      round[i].size   = 0;
      round[i].use    = 0;
   }
}

uchar Find_FreeRoundBuf(void)
{
   uchar i;
   
   for(i=0; i<MAX_ROUNDBUF_NUM; i++)
   {
      if(round[i].status==_FREE)
      {
         return i;
      }
   }
   return 0xff;
}

ROUNDBUF_STRUCT *Create_RoundBuf(uchar far *buf ,uint size)
{
   uchar id;
   
   id= Find_FreeRoundBuf();
   if(id==0xff){
      return NULL;
   }
   else{
      round[id].status = _USE;
      round[id].start  = buf;
      round[id].end    = (uchar far *)(buf+size);
      round[id].in     = round[id].start;
      round[id].out    = round[id].start;
      round[id].size   = size;
      round[id].use    = 0;
      return round+id;
   }
}

uchar Write_RoundByte(ROUNDBUF_STRUCT *ptr,uchar ch)
{
   if((ptr->use+1)<=ptr->size)
   {
      *(ptr->in)++ = ch; 
      if(ptr->in==ptr->end){
         ptr->in = ptr->start;
      }
      ptr->use++;
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

uchar Write_RoundWord(ROUNDBUF_STRUCT *ptr,uint ch)
{
   if((ptr->use+2)<=ptr->size)
   {
      *(ptr->in)++ = ch&0xff;
      if(ptr->in==ptr->end){
         ptr->in = ptr->start;
      }
      *(ptr->in)++ = (ch>>8)&0xff;
      if(ptr->in==ptr->end){
         ptr->in = ptr->start;
      }
      ptr->use += 2;
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

uchar Write_RoundStream(ROUNDBUF_STRUCT *ptr,uchar far *src,uint len)
{
   uint i;
   
   if((ptr->use+len)<=ptr->size)
   {
      for(i=0; i<len; i++)
      {
         Write_RoundByte(ptr,src[i]);
      }
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

uchar Read_RoundByte(ROUNDBUF_STRUCT *ptr,uchar *temp)
{
   if(ptr->use>0)
   {
      *temp = *(ptr->out)++;
      if(ptr->out==ptr->end){
         ptr->out = ptr->start;
      }
      ptr->use --;
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

uchar read_roundstream(ROUNDBUF_STRUCT *ptr,uchar *des,uint len)
{
   uchar i;
   if(ptr->use>len){
      for(i=0; i<len; i++)
      {
         Read_RoundByte(ptr,des+i);
      }
   }
   else{
      return FALSE;
   }
}

uchar IsRoundBufFull(ROUNDBUF_STRUCT *ptr)
{
   if(ptr->use==ptr->size)
   {
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

uchar IsRoundBufEmpty(ROUNDBUF_STRUCT *ptr)
{
   if(ptr->use==0)
   {
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

⌨️ 快捷键说明

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