|  | @@ -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!";
 |