mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 06:33:51 +00:00 
			
		
		
		
	remove ring buffer
This commit is contained in:
		| @@ -1,58 +0,0 @@ | ||||
| #include "ring_buffer.h" | ||||
| #include <zephyr/drivers/uart.h> | ||||
|  | ||||
| #ifndef CONFIG_UART_INTERRUPT_DRIVEN | ||||
| #error "CONFIG_UART_INTERRUPT_DRIVEN is required" | ||||
| #endif | ||||
|  | ||||
| //   while (true) { | ||||
| //     uart_line_ctrl_get(dev, UART_LINE_CTRL_DTR, &dtr); | ||||
| //     if (dtr) { | ||||
| //       break; | ||||
| //     } else { | ||||
| //       /* Give CPU resources to low priority threads. */ | ||||
| //       k_sleep(K_MSEC(100)); | ||||
| //     } | ||||
| //   } | ||||
|  | ||||
| // } | ||||
|  | ||||
| namespace esphome { | ||||
| namespace zephyr_uart { | ||||
|  | ||||
| void RingBuffer::setup(const device *dev, uint8_t *ring_buffer, uint32_t size) { | ||||
|   dev_ = dev; | ||||
|   ring_buf_init(&ringbuf_, size, ring_buffer); | ||||
|   uart_irq_callback_user_data_set(dev, interrupt_handler_, this); | ||||
| } | ||||
|  | ||||
| uint32_t RingBuffer::fill(const char *data, uint32_t size) { | ||||
|   // TODO block if no space | ||||
|   uint32_t rb_len = ring_buf_put(&ringbuf_, reinterpret_cast<const uint8_t*>(data), size); | ||||
|   if (rb_len) { | ||||
|     uart_irq_tx_enable(dev_); | ||||
|   } | ||||
|   return rb_len; | ||||
| } | ||||
|  | ||||
| void RingBuffer::interrupt_handler_(const device *dev, void *user_data) { | ||||
|   auto thiz = static_cast<RingBuffer *>(user_data); | ||||
|   while (uart_irq_update(dev) && uart_irq_is_pending(dev)) { | ||||
|     if (uart_irq_tx_ready(dev)) { | ||||
|       uint8_t buffer[64]; | ||||
|       int rb_len, send_len; | ||||
|  | ||||
|       rb_len = ring_buf_get(&thiz->ringbuf_, buffer, sizeof(buffer)); | ||||
|       if (!rb_len) { | ||||
|         uart_irq_tx_disable(dev); | ||||
|         continue; | ||||
|       } | ||||
|  | ||||
|       uart_fifo_fill(dev, buffer, rb_len); | ||||
|       // TODO add blocking | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| }  // namespace zephyr_uart | ||||
| }  // namespace esphome | ||||
| @@ -1,20 +0,0 @@ | ||||
| #pragma once | ||||
| #include <zephyr/sys/ring_buffer.h> | ||||
|  | ||||
| class device; | ||||
|  | ||||
| namespace esphome { | ||||
| namespace zephyr_uart { | ||||
|  | ||||
| class RingBuffer { | ||||
|  public: | ||||
|   void setup(const device *dev, uint8_t *ring_buffer, uint32_t size); | ||||
|   uint32_t fill(const char* data, uint32_t size); | ||||
|  protected: | ||||
|   static void interrupt_handler_(const device *dev, void *user_data); | ||||
|   ring_buf ringbuf_; | ||||
|   const device *dev_ = {nullptr}; | ||||
| }; | ||||
|  | ||||
| }  // namespace zephyr_uart | ||||
| }  // namespace esphome | ||||
		Reference in New Issue
	
	Block a user