moved LED and feedback to new lib

This commit is contained in:
Djeeberjr 2025-10-27 14:25:26 +01:00
parent 009f6cbb2e
commit a0ed04a560
3 changed files with 120 additions and 120 deletions

View File

@ -6,6 +6,7 @@ use smart_leds::SmartLedsWriteAsync;
use smart_leds::colors::{BLACK, GREEN, RED, YELLOW}; use smart_leds::colors::{BLACK, GREEN, RED, YELLOW};
use smart_leds::{brightness, colors::BLUE}; use smart_leds::{brightness, colors::BLUE};
use crate::init::hardware;
use crate::{FEEDBACK_STATE, init}; use crate::{FEEDBACK_STATE, init};
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
@ -24,107 +25,104 @@ const LED_LEVEL: u8 = 255;
#[embassy_executor::task] #[embassy_executor::task]
pub async fn feedback_task( pub async fn feedback_task(
// mut led: SmartLedsAdapterAsync< mut led: SmartLedsAdapterAsync<'static, { hardware::LED_BUFFER_SIZE }>,
// ConstChannelAccess<esp_hal::rmt::Tx, 0>,
// { init::hardware::LED_BUFFER_SIZE },
// >,
buzzer: peripherals::GPIO21<'static>, buzzer: peripherals::GPIO21<'static>,
) { ) {
debug!("Starting feedback task"); debug!("Starting feedback task");
let mut buzzer = init::hardware::setup_buzzer(buzzer); let mut buzzer = init::hardware::setup_buzzer(buzzer);
loop { loop {
let feedback_state = FEEDBACK_STATE.wait().await; let feedback_state = FEEDBACK_STATE.wait().await;
// match feedback_state { match feedback_state {
// FeedbackState::Ack => { FeedbackState::Ack => {
// led.write(brightness( led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(), [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low(); buzzer.set_low();
// Timer::after(Duration::from_millis(50)).await; Timer::after(Duration::from_millis(50)).await;
// } }
// FeedbackState::Nack => { FeedbackState::Nack => {
// led.write(brightness( led.write(brightness(
// [YELLOW; init::hardware::NUM_LEDS].into_iter(), [YELLOW; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low(); buzzer.set_low();
// Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_millis(100)).await;
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low(); buzzer.set_low();
// led.write(brightness( led.write(brightness(
// [BLACK; init::hardware::NUM_LEDS].into_iter(), [BLACK; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// } }
// FeedbackState::Error => { FeedbackState::Error => {
// led.write(brightness( led.write(brightness(
// [RED; init::hardware::NUM_LEDS].into_iter(), [RED; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(500)).await; Timer::after(Duration::from_millis(500)).await;
// buzzer.set_low(); buzzer.set_low();
// Timer::after(Duration::from_millis(500)).await; Timer::after(Duration::from_millis(500)).await;
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(500)).await; Timer::after(Duration::from_millis(500)).await;
// buzzer.set_low(); buzzer.set_low();
// } }
// FeedbackState::Startup => { FeedbackState::Startup => {
// led.write(brightness( led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(), [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(10)).await; Timer::after(Duration::from_millis(10)).await;
// buzzer.set_low(); buzzer.set_low();
// Timer::after(Duration::from_millis(10)).await; Timer::after(Duration::from_millis(10)).await;
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(10)).await; Timer::after(Duration::from_millis(10)).await;
// buzzer.set_low(); buzzer.set_low();
// Timer::after(Duration::from_millis(50)).await; Timer::after(Duration::from_millis(50)).await;
// buzzer.set_high(); buzzer.set_high();
// Timer::after(Duration::from_millis(100)).await; Timer::after(Duration::from_millis(100)).await;
// buzzer.set_low(); buzzer.set_low();
// led.write(brightness( led.write(brightness(
// [BLACK; init::hardware::NUM_LEDS].into_iter(), [BLACK; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// } }
// FeedbackState::WIFI => { FeedbackState::WIFI => {
// led.write(brightness( led.write(brightness(
// [BLUE; init::hardware::NUM_LEDS].into_iter(), [BLUE; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// } }
// FeedbackState::Idle => { FeedbackState::Idle => {
// led.write(brightness( led.write(brightness(
// [GREEN; init::hardware::NUM_LEDS].into_iter(), [GREEN; init::hardware::NUM_LEDS].into_iter(),
// LED_LEVEL, LED_LEVEL,
// )) ))
// .await .await
// .unwrap(); .unwrap();
// } }
// }; };
debug!("Feedback state: {:?}", feedback_state); debug!("Feedback state: {:?}", feedback_state);
} }
} }

View File

@ -11,6 +11,7 @@ use esp_hal::peripherals::{
GPIO0, GPIO1, GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23, I2C0, RMT, SPI2, GPIO0, GPIO1, GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23, I2C0, RMT, SPI2,
UART1, UART1,
}; };
use esp_hal::rmt::Rmt;
use esp_hal::spi::master::{Config as Spi_config, Spi}; use esp_hal::spi::master::{Config as Spi_config, Spi};
use esp_hal::system::software_reset; use esp_hal::system::software_reset;
use esp_hal::time::Rate; use esp_hal::time::Rate;
@ -23,6 +24,7 @@ use esp_hal::{
timer::systimer::SystemTimer, timer::systimer::SystemTimer,
uart::Uart, uart::Uart,
}; };
use esp_hal_smartled::{SmartLedsAdapterAsync, buffer_size_async};
use esp_println::logger::init_logger; use esp_println::logger::init_logger;
use log::{debug, error}; use log::{debug, error};
@ -47,8 +49,8 @@ use crate::init::wifi;
* *
*************************************************/ *************************************************/
pub const NUM_LEDS: usize = 66; pub const NUM_LEDS: usize = 1;
pub const LED_BUFFER_SIZE: usize = NUM_LEDS * 25; pub const LED_BUFFER_SIZE: usize = buffer_size_async(NUM_LEDS);
static SD_DET: Mutex<RefCell<Option<Input>>> = Mutex::new(RefCell::new(None)); static SD_DET: Mutex<RefCell<Option<Input>>> = Mutex::new(RefCell::new(None));
@ -70,6 +72,7 @@ pub async fn hardware_init(
I2c<'static, Async>, I2c<'static, Async>,
GPIO21<'static>, GPIO21<'static>,
GPIO0<'static>, GPIO0<'static>,
SmartLedsAdapterAsync<'static, LED_BUFFER_SIZE>,
SDCardPersistence, SDCardPersistence,
) { ) {
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max()); let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
@ -116,6 +119,8 @@ pub async fn hardware_init(
let buzzer_gpio = peripherals.GPIO21; let buzzer_gpio = peripherals.GPIO21;
let led = setup_led(peripherals.RMT, peripherals.GPIO1);
Timer::after(Duration::from_millis(500)).await; Timer::after(Duration::from_millis(500)).await;
debug!("hardware init done"); debug!("hardware init done");
@ -126,6 +131,7 @@ pub async fn hardware_init(
i2c_device, i2c_device,
buzzer_gpio, buzzer_gpio,
sd_det_gpio, sd_det_gpio,
led,
vol_mgr, vol_mgr,
) )
} }
@ -184,23 +190,19 @@ pub fn setup_buzzer(buzzer_gpio: GPIO21<'static>) -> Output<'static> {
buzzer buzzer
} }
// fn setup_led( fn setup_led<'a>(
// rmt: RMT<'static>, rmt: RMT<'a>,
// led_gpio: GPIO1<'static>, led_gpio: GPIO1<'a>,
// ) -> SmartLedsAdapterAsync<ConstChannelAccess<esp_hal::rmt::Tx, 0>, LED_BUFFER_SIZE> { ) -> esp_hal_smartled::SmartLedsAdapterAsync<'a, LED_BUFFER_SIZE> {
// debug!("setup led"); let rmt: Rmt<'_, esp_hal::Async> = {
// let rmt: Rmt<'_, esp_hal::Async> = { let frequency: Rate = Rate::from_mhz(80);
// let frequency: Rate = Rate::from_mhz(80); Rmt::new(rmt, frequency)
// Rmt::new(rmt, frequency) }
// } .expect("Failed to initialize RMT")
// .expect("Failed to initialize RMT") .into_async();
// .into_async();
// let rmt_channel = rmt.channel0;
// let rmt_channel = rmt.channel0; let rmt_buffer = [esp_hal::rmt::PulseCode::default(); LED_BUFFER_SIZE];
// let rmt_buffer = [0_u32; buffer_size_async(NUM_LEDS)];
// SmartLedsAdapterAsync::new(rmt_channel, led_gpio, rmt_buffer)
// let led: SmartLedsAdapterAsync<_, LED_BUFFER_SIZE> = }
// SmartLedsAdapterAsync::new(rmt_channel, led_gpio, rmt_buffer);
//
// led
// }

View File

@ -47,7 +47,7 @@ static CHAN: StaticCell<TallyChannel> = StaticCell::new();
#[esp_rtos::main] #[esp_rtos::main]
async fn main(spawner: Spawner) -> ! { async fn main(spawner: Spawner) -> ! {
let (uart_device, stack, i2c, buzzer_gpio, sd_det_gpio, persistence_layer) = let (uart_device, stack, i2c, buzzer_gpio, sd_det_gpio, led, persistence_layer) =
init::hardware::hardware_init(spawner).await; init::hardware::hardware_init(spawner).await;
info!("Starting up..."); info!("Starting up...");
@ -72,8 +72,8 @@ async fn main(spawner: Spawner) -> ! {
publisher, publisher,
)); ));
// debug!("spawing feedback task.."); debug!("spawing feedback task..");
// spawner.must_spawn(feedback::feedback_task(led, buzzer_gpio)); spawner.must_spawn(feedback::feedback_task(led, buzzer_gpio));
debug!("spawn sd detect task"); debug!("spawn sd detect task");
spawner.must_spawn(sd_detect_task(sd_det_gpio)); spawner.must_spawn(sd_detect_task(sd_det_gpio));