teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CircularBuffer.cpp Source File

CircularBuffer.cpp

00001 #include "CircularBuffer.h"
00002 CircularBuffer::CircularBuffer(uint16_t tamanho,bool circular) {
00003   this->circular = circular;
00004   this->tam = tamanho+1;
00005   this->bufIn = (char*) malloc(sizeof(char)*(this->tam)); //Cuidado extremo com uso de malloc!!!  
00006   //printf("Alocados %lu caracteres para bufIn dentro do construtor CircularBuffer.\r\n",tam+1);
00007   this->index = 0;
00008   this->estouro = 0;
00009 }
00010 
00011 void CircularBuffer::del(){
00012     uint16_t i;
00013     this->index = 0;
00014     this->estouro = 0;
00015     for(i=0;i<this->tam;i++){
00016         this->bufIn[i]=0;
00017     }
00018 }
00019 
00020 void CircularBuffer::putc(char entrada){
00021  //uint16_t i;
00022  this->bufIn[index] = entrada;       
00023  this->index++; 
00024  if(this->index>(this->tam-2)){
00025     if(this->circular){
00026         this->index=0;
00027         this->estouro=true;
00028     }else{this->index--;}
00029  }
00030 }
00031 
00032 char* CircularBuffer::get(){
00033      uint16_t nOperacoes;
00034      uint16_t i;
00035      //unsigned int x;     
00036      char aux;
00037      
00038      if(this->estouro){         
00039          for(nOperacoes=0;nOperacoes<index;nOperacoes++){      
00040           aux=this->bufIn[0];     
00041           for(i=0;i<this->tam;i++){
00042            this->bufIn[i]=this->bufIn[i+1];
00043           }                       
00044           this->bufIn[this->tam-2]=aux;      
00045          }              
00046          this->bufIn[this->tam-1]=0;         
00047          this->estouro=false;     
00048      }else{
00049        this->bufIn[this->index]=0;
00050       }     
00051      this->index = 0;
00052      return this->bufIn;
00053 }
00054 
00055 uint16_t CircularBuffer::getLength(){
00056     return this->index;    
00057 }
00058 
00059 char* CircularBuffer::getRowBuffer(){
00060     return this->bufIn;    
00061 }
00062 
00063 uint16_t CircularBuffer::fill(char *buf,uint16_t cont){
00064     uint16_t i;
00065     for(i=0;i<cont;i++){
00066         this->putc(buf[i]);   
00067     }
00068     return index;
00069 }