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); } }
/** * Escribe un byte en un búfer circular * @param cb Búfer circular * @param byte Byte a escribir * @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_write (volatile circular_buffer_t *cb, uint8_t byte) { /* Escribimos en el búfer sólo si hay espacio */ if (circular_buffer_is_full (cb)) return -1; else { cb->data[cb->end] = byte; cb->count++; cb->end++; if (cb->end == cb->size) cb->end = 0; return byte; } }