90 static constexpr auto name =
"SbusHub";
95 static tl::expected<State, SbusHubError>
getData();
104 static constexpr size_t DBUS_FRAME_LEN = 18;
105 static constexpr size_t DBUS_CHANNEL_COUNT = 28;
106 static constexpr uint32_t DBUS_INTERFRAME_SPACING_MS = 20;
109 static const uint32_t input_channels_full[DBUS_CHANNEL_COUNT];
112 struct SbusHubDataInternal
118 uint8_t rd_data[DBUS_FRAME_LEN];
119 uint8_t dbus_frame[DBUS_FRAME_LEN];
121 uint32_t last_rx_time;
124 uint8_t async_rx_buf[2][DBUS_FRAME_LEN];
125 uint8_t next_async_buf;
127 uint16_t last_reported_value[DBUS_CHANNEL_COUNT];
128 int8_t channel_mapping[DBUS_CHANNEL_COUNT];
131 uint8_t invalid_frames;
133 K_KERNEL_STACK_MEMBER(thread_stack, 1024);
136 static SbusHubDataInternal
s_data;
137 static const device* s_uart_dev;
140 static int dbus_enable_rx();
141 static void dbus_restart_rx();
142 static void dbus_append_rx_bytes(
const uint8_t* buf,
size_t len);
143 static void dbus_supply_rx_buffer();
144 static bool dbus_frame_valid(
const uint8_t* buf);
145 static void dbus_uart_event_handler(
struct uart_event* evt);
146 static void dbus_uart_isr_handler();
147 static void input_dbus_input_report_thread();