tangled
alpha
login
or
join now
baileytownsend.dev
/
rusty-badger
0
fork
atom
A personal rust firmware for the Badger 2040 W
0
fork
atom
overview
issues
pulls
pipelines
a little clean up
baileytownsend.dev
1 year ago
f62454c5
319b6388
+36
-18
2 changed files
expand all
collapse all
unified
split
src
cyw43_driver.rs
main.rs
+1
src/control_driver.rs
src/cyw43_driver.rs
···
47
47
let cs = Output::new(p_25, Level::High);
48
48
let mut pio = Pio::new(pio0, Irqs);
49
49
let spi = PioSpi::new(&mut pio.common, pio.sm0, pio.irq0, cs, p_24, p_29, dma_ch0);
50
50
+
// let input = Input::new(p_29, Pull::Up);
50
51
51
52
static STATE: StaticCell<cyw43::State> = StaticCell::new();
52
53
let state = STATE.init(cyw43::State::new());
+35
-18
src/main.rs
···
4
4
5
5
#![no_std]
6
6
#![no_main]
7
7
-
use control_driver::setup_cyw43;
7
7
+
use core::sync::atomic::AtomicU32;
8
8
+
9
9
+
use cyw43_driver::setup_cyw43;
8
10
use defmt::info;
9
11
use embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice;
10
12
use embassy_executor::Spawner;
11
13
use embassy_rp::gpio;
12
14
use embassy_rp::gpio::Input;
15
15
+
use embassy_rp::peripherals::SPI0;
13
16
use embassy_rp::spi::Spi;
14
17
use embassy_rp::spi::{self};
15
18
use embassy_sync::blocking_mutex::raw::NoopRawMutex;
16
19
use embassy_sync::mutex::Mutex;
17
20
use embassy_time::{Delay, Duration, Timer};
18
18
-
use embedded_graphics::pixelcolor::Rgb565;
19
21
use embedded_graphics::primitives::PrimitiveStyleBuilder;
20
22
use embedded_graphics::text::Text;
21
23
use embedded_graphics::{
···
31
33
};
32
34
use gpio::{Level, Output, Pull};
33
35
use heapless::String;
36
36
+
use static_cell::StaticCell;
34
37
use uc8151::asynch::Uc8151;
38
38
+
use uc8151::LUT;
35
39
use uc8151::WIDTH;
36
36
-
use uc8151::{UpdateRegion, LUT};
37
40
use {defmt_rtt as _, panic_probe as _};
38
38
-
mod control_driver;
41
41
+
mod cyw43_driver;
42
42
+
43
43
+
type Spi0Bus = Mutex<NoopRawMutex, Spi<'static, SPI0, spi::Async>>;
44
44
+
static WIFI_COUNT: AtomicU32 = AtomicU32::new(0);
39
45
40
46
#[embassy_executor::main]
41
47
async fn main(spawner: Spawner) {
···
45
51
)
46
52
.await;
47
53
54
54
+
// let input = gpio::Input::new(p.PIN_29, gpio::Pull::Up);
55
55
+
48
56
let miso = p.PIN_16;
49
57
let mosi = p.PIN_19;
50
58
let clk = p.PIN_18;
···
82
90
p.DMA_CH2,
83
91
spi::Config::default(),
84
92
);
85
85
-
let spi_bus: Mutex<NoopRawMutex, _> = Mutex::new(spi);
93
93
+
// let spi_bus: Mutex<NoopRawMutex, _> = Mutex::new(spi);
94
94
+
static SPI_BUS: StaticCell<Spi0Bus> = StaticCell::new();
95
95
+
let spi_bus = SPI_BUS.init(Mutex::new(spi));
96
96
+
97
97
+
info!("led on!");
98
98
+
control.gpio_set(0, true).await;
99
99
+
spawner.must_spawn(run_the_display(spi_bus, cs, dc, busy, reset));
100
100
+
}
101
101
+
102
102
+
#[embassy_executor::task]
103
103
+
async fn run_the_display(
104
104
+
spi_bus: &'static Spi0Bus,
105
105
+
cs: Output<'static>,
106
106
+
dc: Output<'static>,
107
107
+
busy: Input<'static>,
108
108
+
reset: Output<'static>,
109
109
+
) {
86
110
let spi_dev = SpiDevice::new(&spi_bus, cs);
111
111
+
87
112
let mut display = Uc8151::new(spi_dev, dc, busy, reset, Delay);
88
113
89
114
display.reset().await;
···
115
140
116
141
let _ = display.update().await;
117
142
118
118
-
let delay: Duration = Duration::from_secs(1);
119
119
-
let mut count = 0;
143
143
+
let delay: Duration = Duration::from_secs(30);
120
144
let mut text: String<16> = String::<16>::new();
121
145
122
146
loop {
123
123
-
info!("led on!");
124
124
-
control.gpio_set(0, true).await;
125
125
-
Timer::after(delay).await;
126
126
-
127
127
-
info!("led off!");
128
128
-
control.gpio_set(0, false).await;
129
129
-
130
130
-
Timer::after(delay).await;
131
131
-
147
147
+
let count = WIFI_COUNT.load(core::sync::atomic::Ordering::Relaxed);
132
148
let _ = core::fmt::write(&mut text, format_args!("Count: {}", count));
133
149
let count_bounds = Rectangle::new(Point::new(0, 0), Size::new(WIDTH, 24));
134
150
count_bounds
···
159
175
text.clear();
160
176
// let _ = display.clear(Rgb565::WHITE.into());
161
177
// let _ = display.update().await;
162
162
-
count += 1;
163
163
-
// Timer::after(Duration::from_secs(10)).await;
178
178
+
WIFI_COUNT.store(count + 1, core::sync::atomic::Ordering::Relaxed);
179
179
+
180
180
+
Timer::after(delay).await;
164
181
}
165
182
}