#![no_std]
#![no_main]
mod strip;
mod map;
use embedded_hal::serial::{Read, Write};
use esp_backtrace as _;
use esp_println::println;
use hal::{clock::ClockControl, pulse_control::{ClockSource}, peripherals::Peripherals, prelude::*, timer::{TimerGroup, Timer, Timer0}, Rtc, IO, Delay, interrupt, PulseControl, Uart};
use hal::uart::config::{Config, DataBits, Parity, StopBits};
use hal::uart::TxRxPins;
use nb::block;
use nb::Error::{WouldBlock, Other};
use smart_leds::{RGB8, SmartLedsWrite};
use crate::map::Map;
use crate::strip::StripTiming;
const LEDS_COUNT: usize = 72;
const COMMAND_BUFFER: usize = 200;
#[entry]
fn main() -> ! {
// setup
let peripherals = Peripherals::take();
let mut system = peripherals.DPORT.split();
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
// Disable the RTC and TIMG watchdog timers
let mut rtc = Rtc::new(peripherals.RTC_CNTL);
let timer_group0 = TimerGroup::new(
peripherals.TIMG0,
&clocks,
&mut system.peripheral_clock_control,
);
let mut wdt0 = timer_group0.wdt;
let timer_group1 = TimerGroup::new(
peripherals.TIMG1,
&clocks,
&mut system.peripheral_clock_control,
);
let mut wdt1 = timer_group1.wdt;
rtc.rwdt.disable();
wdt0.disable();
wdt1.disable();
let io = IO::new(peripherals.GPIO, peripherals.IO_MUX);
let pins = TxRxPins::new_tx_rx(
io.pins.gpio1.into_push_pull_output(),
io.pins.gpio3.into_floating_input(),
);
let config = Config {
baudrate: 115200,
data_bits: DataBits::DataBits8,
parity: Parity::ParityNone,
stop_bits: StopBits::STOP1,
};
let mut serial = Uart::new_with_config(
peripherals.UART0,
Some(config),
Some(pins),
&clocks,
&mut system.peripheral_clock_control,
);
let mut delay = Delay::new(&clocks);
let pulse = PulseControl::new(
peripherals.RMT,
&mut system.peripheral_clock_control,
).unwrap();
let mut strip = strip::Strip::<_, { LEDS_COUNT * 24 + 1 }>::new(
pulse.channel0,
io.pins.gpio25,
StripTiming::new(
800u32.nanos(),
450u32.nanos(),
400u32.nanos(),
850u32.nanos(),
),
);
let mut rgb_data: [RGB8; 72] = [RGB8 { r: 0, g: 0, b: 0 }; 72];
let mut map = map::Map::new(&map::INDEX_MAP, &mut rgb_data);
loop {
}
}