From 0a6856c32940e840ed139dc737232ec1eb88a049 Mon Sep 17 00:00:00 2001 From: tobinio Date: Wed, 29 Jul 2026 12:09:23 +0200 Subject: [PATCH] simplify event defintion --- firmware/src/communication.rs | 18 +++++------- firmware/src/main.rs | 54 ++++++++++++++++------------------- firmware/src/wifi.rs | 6 ++-- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/firmware/src/communication.rs b/firmware/src/communication.rs index 943948c..1f1684d 100644 --- a/firmware/src/communication.rs +++ b/firmware/src/communication.rs @@ -1,6 +1,4 @@ use embassy_net::Stack; -use embassy_sync::blocking_mutex::raw::NoopRawMutex; -use embassy_sync::channel::{Channel, Receiver, Sender}; use embassy_time::{Duration, Timer}; use log::{info, warn}; @@ -9,17 +7,15 @@ use esp_backtrace as _; use packets::Packet; use crate::tcp::PacketSocket; -use crate::{Event, UpdateEventSender}; +use crate::{AppReceiver, AppSender, Event}; -pub type RegisterEventChannel = Channel; -pub type RegisterEventSender = Sender<'static, NoopRawMutex, (), 1>; -pub type RegisterEventReceiver = Receiver<'static, NoopRawMutex, (), 1>; +pub type RegisterEvent = (); #[embassy_executor::task] pub async fn listen_register_events( stack: Stack<'static>, - receiver: RegisterEventReceiver, - event_sender: UpdateEventSender, + receiver: AppReceiver, + event_sender: AppSender, ) { loop { receiver.receive().await; @@ -37,7 +33,7 @@ pub async fn listen_register_events( } } -async fn register_at_server(stack: Stack<'static>, event_sender: UpdateEventSender) -> bool { +async fn register_at_server(stack: Stack<'static>, event_sender: AppSender) -> bool { let mut rx_buffer = [0; 256]; let mut tx_buffer = [0; 256]; let mut buf = [0u8; 256]; @@ -83,7 +79,7 @@ async fn register_at_server(stack: Stack<'static>, event_sender: UpdateEventSend } #[embassy_executor::task] -pub async fn listen_updates(stack: Stack<'static>, event_sender: UpdateEventSender) { +pub async fn listen_updates(stack: Stack<'static>, event_sender: AppSender) { let mut rx_buffer = [0; 256]; let mut tx_buffer = [0; 256]; let mut buf = [0u8; 256]; @@ -104,7 +100,7 @@ pub async fn listen_updates(stack: Stack<'static>, event_sender: UpdateEventSend async fn receive_event_packets( socket: &mut PacketSocket<'_>, buf: &mut [u8], - event_sender: UpdateEventSender, + event_sender: AppSender, ) -> bool { loop { let packet = match Packet::read(socket, buf).await { diff --git a/firmware/src/main.rs b/firmware/src/main.rs index 97bd716..e168da2 100644 --- a/firmware/src/main.rs +++ b/firmware/src/main.rs @@ -28,7 +28,7 @@ use static_cell::StaticCell; use crate::clock::{CLOCK, maybe_timer}; use crate::color::FullColor; -use crate::communication::{RegisterEventChannel, listen_register_events, listen_updates}; +use crate::communication::{RegisterEvent, listen_register_events, listen_updates}; use crate::sun::calculate_current_color; extern crate alloc; @@ -40,13 +40,11 @@ pub mod sun; pub mod tcp; pub mod wifi; -esp_bootloader_esp_idf::esp_app_desc!(); +pub type AppChannel = Channel; +pub type AppSender = Sender<'static, NoopRawMutex, T, N>; +pub type AppReceiver = Receiver<'static, NoopRawMutex, T, N>; -#[derive(Debug)] -pub enum Event { - TimeSync(u64), - StateChange(State), -} +esp_bootloader_esp_idf::esp_app_desc!(); fn init_hardware() -> Peripherals { esp_println::logger::init_logger_from_env(); @@ -72,7 +70,7 @@ async fn main(spawner: Spawner) { info!("RTOS initialized!"); - static REGISTER_CHANNEL: StaticCell = StaticCell::new(); + static REGISTER_CHANNEL: StaticCell> = StaticCell::new(); let register_event_channel = REGISTER_CHANNEL.init(Channel::new()); let stack = wifi::init_wifi( @@ -86,13 +84,13 @@ async fn main(spawner: Spawner) { stack.wait_config_up().await; info!("WiFi initialized! {:?}", stack.config_v4()); - static EVENT_CHANNEL: StaticCell = StaticCell::new(); + static EVENT_CHANNEL: StaticCell> = StaticCell::new(); let event_channel = EVENT_CHANNEL.init(Channel::new()); - static COLOR_EVENT_CHANNEL: StaticCell = StaticCell::new(); + static COLOR_EVENT_CHANNEL: StaticCell> = StaticCell::new(); let color_event_channel = COLOR_EVENT_CHANNEL.init(Channel::new()); - static SUN_EVENT_CHANNEL: StaticCell = StaticCell::new(); + static SUN_EVENT_CHANNEL: StaticCell> = StaticCell::new(); let sun_event_channel = SUN_EVENT_CHANNEL.init(Channel::new()); spawner.spawn( @@ -129,15 +127,17 @@ async fn main(spawner: Spawner) { spawner.spawn(handle_sun(color_event_channel.sender(), sun_event_channel.receiver()).unwrap()); } -pub type UpdateEventChannel = Channel; -pub type UpdateEventSender = Sender<'static, NoopRawMutex, Event, 1>; -pub type UpdateEventReceiver = Receiver<'static, NoopRawMutex, Event, 1>; +#[derive(Debug)] +pub enum Event { + TimeSync(u64), + StateChange(State), +} #[embassy_executor::task] pub async fn handle_event( - event_receiver: UpdateEventReceiver, - color_event_sender: UpdateColorEventSender, - sun_event_receiver: SunEventSender, + event_receiver: AppReceiver, + color_event_sender: AppSender, + sun_event_sender: AppSender, ) { loop { let event = event_receiver.receive().await; @@ -147,29 +147,27 @@ pub async fn handle_event( Event::TimeSync(time) => CLOCK.lock().await.update(time), Event::StateChange(state) => match state { State::Off => { - sun_event_receiver.send(None).await; + sun_event_sender.send(None).await; color_event_sender.send(FullColor::new(0, 0, 0, 0)).await; } State::Color(color) => { - sun_event_receiver.send(None).await; + sun_event_sender.send(None).await; color_event_sender.send(FullColor::from_color(color)).await; } State::Sun(brightness) => { - sun_event_receiver.send(Some(brightness)).await; + sun_event_sender.send(Some(brightness)).await; } }, } } } -pub type SunEventChannel = Channel, 1>; -pub type SunEventSender = Sender<'static, NoopRawMutex, Option, 1>; -pub type SunEventReceiver = Receiver<'static, NoopRawMutex, Option, 1>; +type SunEvent = Option; #[embassy_executor::task] pub async fn handle_sun( - color_event_sender: UpdateColorEventSender, - sun_event_receiver: SunEventReceiver, + color_event_sender: AppSender, + sun_event_receiver: AppReceiver, ) { let mut enabled = false; let mut brightness = 0u8; @@ -207,13 +205,11 @@ pub async fn handle_sun( } } -pub type UpdateColorEventChannel = Channel; -pub type UpdateColorEventSender = Sender<'static, NoopRawMutex, FullColor, 1>; -pub type UpdateColorEventReceiver = Receiver<'static, NoopRawMutex, FullColor, 1>; +type ColorEvent = FullColor; #[embassy_executor::task] pub async fn handle_color( - color_event_receiver: UpdateColorEventReceiver, + color_event_receiver: AppReceiver, mcpwm0: MCPWM0<'static>, mcpwm1: MCPWM1<'static>, red_pin: AnyPin<'static>, diff --git a/firmware/src/wifi.rs b/firmware/src/wifi.rs index e835464..befddf4 100644 --- a/firmware/src/wifi.rs +++ b/firmware/src/wifi.rs @@ -10,13 +10,13 @@ use esp_radio::wifi::{Config, ControllerConfig, Interface, WifiController, sta:: use log::info; use static_cell::StaticCell; -use crate::communication::RegisterEventSender; +use crate::{AppSender, communication::RegisterEvent}; pub async fn init_wifi( wifi: esp_hal::peripherals::WIFI<'static>, spawner: &Spawner, led_pin: GPIO2<'static>, - register_event_sender: RegisterEventSender, + register_event_sender: AppSender, ) -> Stack<'static> { let station_config = Config::Station( StationConfig::default() @@ -56,7 +56,7 @@ pub async fn init_wifi( async fn connection( mut controller: WifiController<'static>, led_pin: GPIO2<'static>, - register_event_sender: RegisterEventSender, + register_event_sender: AppSender, ) { info!("start connection task"); -- 2.51.2