1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-29 22:24:26 +00:00

remove ring buffer

This commit is contained in:
Tomasz Duda
2024-02-21 20:31:36 +01:00
parent 5078a9a388
commit 127c942422
2 changed files with 0 additions and 78 deletions

View File

@@ -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

View File

@@ -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