|
@@ -128,7 +128,7 @@ size_t esp_rb_read(enum esplink_ringbuf_user ring, void *data, size_t len)
|
|
|
size_t esp_rb_write(enum esplink_ringbuf_user ring,
|
|
|
const void *data, size_t len)
|
|
|
{
|
|
|
- const size_t size = rb_desc[ring].ustr.size;
|
|
|
+ const size_t size = RINGBUF_BUF_SIZE;
|
|
|
const size_t sizemask = size - 1;
|
|
|
uint8_t * const base = rb_desc[ring].ustr.start;
|
|
|
size_t tail = rb_ustr[ring].tail;
|
|
@@ -166,9 +166,9 @@ size_t esp_rb_write(enum esplink_ringbuf_user ring,
|
|
|
* esp_rb_putc() returns -1 on failure, otherwise the number of
|
|
|
* bytes still free in the ring (a nonnegative number.)
|
|
|
*/
|
|
|
-int esp_rb_getc(enum esplink_ringbuf_user ring)
|
|
|
+__hot int esp_rb_getc(enum esplink_ringbuf_user ring)
|
|
|
{
|
|
|
- const size_t size = rb_desc[ring].dstr.size;
|
|
|
+ const size_t size = RINGBUF_BUF_SIZE;
|
|
|
const size_t sizemask = size - 1;
|
|
|
const uint8_t * const base = rb_desc[ring].dstr.start;
|
|
|
size_t head = rb_ustr[ring].head;
|
|
@@ -186,9 +186,9 @@ int esp_rb_getc(enum esplink_ringbuf_user ring)
|
|
|
return data;
|
|
|
}
|
|
|
|
|
|
-int esp_rb_putc(enum esplink_ringbuf_user ring, uint8_t data)
|
|
|
+__hot int esp_rb_putc(enum esplink_ringbuf_user ring, uint8_t data)
|
|
|
{
|
|
|
- const size_t size = rb_desc[ring].ustr.size;
|
|
|
+ const size_t size = RINGBUF_BUF_SIZE;
|
|
|
const size_t sizemask = size - 1;
|
|
|
uint8_t * const base = rb_desc[ring].ustr.start;
|
|
|
size_t tail = rb_ustr[ring].tail;
|
|
@@ -205,6 +205,24 @@ int esp_rb_putc(enum esplink_ringbuf_user ring, uint8_t data)
|
|
|
return avail;
|
|
|
}
|
|
|
|
|
|
+__hot enum ringbuf_status esp_rb_status(enum esplink_ringbuf_user ring)
|
|
|
+{
|
|
|
+ const size_t size = RINGBUF_BUF_SIZE;
|
|
|
+ const size_t sizemask = size - 1;
|
|
|
+ const size_t utail = rb_ustr[ring].tail;
|
|
|
+ const size_t dhead = rb_ustr[ring].head;
|
|
|
+ const size_t uhead = rb_dstr[ring].head;
|
|
|
+ const size_t dtail = rb_dstr[ring].tail;
|
|
|
+ enum ringbuf_status status = RB_CONNECTED;
|
|
|
+
|
|
|
+ if (dhead != dtail)
|
|
|
+ status |= RB_RXDATA;
|
|
|
+ if ((utail - uhead - 1) & sizemask)
|
|
|
+ status |= RB_TXFREE;
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
void esp_init(void)
|
|
|
{
|
|
|
static char __dram_data esp_signature[] = "Hej tomtebuggar slå i glasen!";
|