int32_t HAL_USB_USART_Available_Data(HAL_USB_USART_Serial serial) { int32_t available = 0; int state = HAL_disable_irq(); available = ring_data_avail(usbUsartMap[serial].data->rx_buffer_length, usbUsartMap[serial].data->rx_buffer_head, usbUsartMap[serial].data->rx_buffer_tail); HAL_enable_irq(state); return available; }
/* Returns the amount of free space available in buffer */ static inline uint32_t ring_space_avail(uint32_t size, uint32_t head, uint32_t tail) { return size - ring_data_avail(size, head, tail) - 1; }
void consume(Stream& serial) { while (serial.available() > 0) { (void)serial.read(); } } test(0_USBSERIAL_RingBufferHelperIsSane) { uint32_t size = 129; uint32_t head = 0; uint32_t tail = 0; head = 0; tail = 0; assertEqual(0, ring_data_avail(size, head, tail)); assertEqual(128, ring_space_avail(size, head, tail)); assertEqual(0, ring_data_contig(size, head, tail)); assertEqual(128, ring_space_contig(size, head, tail)); assertEqual(0, ring_space_wrapped(size, head, tail)); head = 63; tail = 0; assertEqual(63, ring_data_avail(size, head, tail)); assertEqual(65, ring_space_avail(size, head, tail)); assertEqual(63, ring_data_contig(size, head, tail)); assertEqual(65, ring_space_contig(size, head, tail)); assertEqual(0, ring_space_wrapped(size, head, tail)); head = 63; tail = 32;