teste de publish

Dependencies:   DS1820 HighSpeedAnalogIn devices mbed

CircularBuffer.cpp

Committer:
brunofgc
Date:
2018-06-08
Revision:
38:07d3907b74e5
Parent:
37:0e95c85f0160

File content as of revision 38:07d3907b74e5:

#include "CircularBuffer.h"
CircularBuffer::CircularBuffer(uint16_t tamanho,bool circular) {
  this->circular = circular;
  this->tam = tamanho+1;
  this->bufIn = (char*) malloc(sizeof(char)*(this->tam)); //Cuidado extremo com uso de malloc!!!  
  //printf("Alocados %lu caracteres para bufIn dentro do construtor CircularBuffer.\r\n",tam+1);
  this->index = 0;
  this->estouro = 0;
}

void CircularBuffer::del(){
    uint16_t i;
    this->index = 0;
    this->estouro = 0;
    for(i=0;i<this->tam;i++){
        this->bufIn[i]=0;
    }
}

void CircularBuffer::putc(char entrada){
 //uint16_t i;
 this->bufIn[index] = entrada;       
 this->index++; 
 if(this->index>(this->tam-2)){
    if(this->circular){
        this->index=0;
        this->estouro=true;
    }else{this->index--;}
 }
}

char* CircularBuffer::get(){
     uint16_t nOperacoes;
     uint16_t i;
     //unsigned int x;     
     char aux;
     
     if(this->estouro){         
         for(nOperacoes=0;nOperacoes<index;nOperacoes++){      
          aux=this->bufIn[0];     
          for(i=0;i<this->tam;i++){
           this->bufIn[i]=this->bufIn[i+1];
          }                       
          this->bufIn[this->tam-2]=aux;      
         }              
         this->bufIn[this->tam-1]=0;         
         this->estouro=false;     
     }else{
       this->bufIn[this->index]=0;
      }     
     this->index = 0;
     return this->bufIn;
}

uint16_t CircularBuffer::getLength(){
    return this->index;    
}

char* CircularBuffer::getRowBuffer(){
    return this->bufIn;    
}

uint16_t CircularBuffer::fill(char *buf,uint16_t cont){
    uint16_t i;
    for(i=0;i<cont;i++){
        this->putc(buf[i]);   
    }
    return index;
}