Level-triggered w6300 interrupt, drain until empty, rearm after drain
This commit is contained in:
@@ -137,13 +137,11 @@ void net_poll(std::span<uint8_t> tx) {
|
||||
w6300::irq_pending = false;
|
||||
w6300::clear_interrupt(w6300::ik_int_all);
|
||||
static uint8_t rx_buf[1518];
|
||||
uint16_t available = w6300::get_socket_recv_buf(raw_socket);
|
||||
uint16_t consumed = 0;
|
||||
while (consumed < available) {
|
||||
while (w6300::get_socket_recv_buf(raw_socket) > 0) {
|
||||
auto result = w6300::recv(raw_socket, std::span{rx_buf});
|
||||
if (!result) break;
|
||||
consumed += *result + 2;
|
||||
span_writer tx_writer(tx);
|
||||
process_frame({rx_buf, *result}, tx_writer);
|
||||
}
|
||||
w6300::rearm_gpio_irq();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user