void VCOM_echo(void) { uint8_t temp; circular_buffer_pools_t * cb_out = circular_buffer_pointer(0x2); circular_buffer_pools_t * cb_in = circular_buffer_pointer(0x82); if((!circular_buffer_is_empty(cb_out)) && (!circular_buffer_is_full(cb_in))) { circular_buffer_pop(cb_out,&temp); circular_buffer_push(cb_in,&temp); // Set Next Timer Reload to finish transfer after there is room in FIFO start_timer(1); } }
/** * Lee un byte en un búfer circular * @param cb Búfer circular * @return El byte como un casting de uint8_t a int32_t en caso de éxito * o -1 en caso de error */ int32_t circular_buffer_read (volatile circular_buffer_t *cb) { int32_t byte; if (circular_buffer_is_empty (cb)) return -1; else { byte = cb->data[cb->start]; cb->count--; cb->start++; if (cb->start == cb->size) cb->start = 0; return byte; } }