converted outside to a lib crate and integrated postcard

This commit is contained in:
Andy Killorin 2024-12-05 17:40:11 -05:00
parent a9f835220a
commit cffa942ac9
Signed by: ank
GPG key ID: 23F9463ECB67FE8C
8 changed files with 83 additions and 109 deletions

87
outside/Cargo.lock generated
View file

@ -126,12 +126,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
[[package]]
name = "base64"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]] [[package]]
name = "base64" name = "base64"
version = "0.21.7" version = "0.21.7"
@ -250,6 +244,12 @@ dependencies = [
"inout", "inout",
] ]
[[package]]
name = "cobs"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
[[package]] [[package]]
name = "codespan-reporting" name = "codespan-reporting"
version = "0.11.1" version = "0.11.1"
@ -260,12 +260,6 @@ dependencies = [
"unicode-width", "unicode-width",
] ]
[[package]]
name = "const-default"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa"
[[package]] [[package]]
name = "const-oid" name = "const-oid"
version = "0.9.6" version = "0.9.6"
@ -813,18 +807,6 @@ dependencies = [
"log", "log",
] ]
[[package]]
name = "embedded-alloc"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd"
dependencies = [
"const-default",
"critical-section",
"linked_list_allocator",
"rlsf",
]
[[package]] [[package]]
name = "embedded-graphics" name = "embedded-graphics"
version = "0.7.1" version = "0.7.1"
@ -1300,6 +1282,7 @@ dependencies = [
"atomic-polyfill", "atomic-polyfill",
"hash32 0.2.1", "hash32 0.2.1",
"rustc_version 0.4.1", "rustc_version 0.4.1",
"serde",
"spin", "spin",
"stable_deref_trait", "stable_deref_trait",
] ]
@ -1449,12 +1432,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "linked_list_allocator"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286"
[[package]] [[package]]
name = "litrs" name = "litrs"
version = "0.4.1" version = "0.4.1"
@ -1597,7 +1574,6 @@ dependencies = [
"embassy-time", "embassy-time",
"embassy-usb", "embassy-usb",
"embassy-usb-logger", "embassy-usb-logger",
"embedded-alloc",
"embedded-graphics", "embedded-graphics",
"embedded-hal 1.0.0", "embedded-hal 1.0.0",
"embedded-hal-async", "embedded-hal-async",
@ -1615,6 +1591,7 @@ dependencies = [
"pio", "pio",
"pio-proc", "pio-proc",
"portable-atomic", "portable-atomic",
"postcard",
"rand", "rand",
"reqwless", "reqwless",
"serde", "serde",
@ -1622,7 +1599,6 @@ dependencies = [
"smart-leds", "smart-leds",
"st7789", "st7789",
"static_cell", "static_cell",
"talc",
"usbd-hid", "usbd-hid",
] ]
@ -1767,6 +1743,17 @@ dependencies = [
"critical-section", "critical-section",
] ]
[[package]]
name = "postcard"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "170a2601f67cc9dba8edd8c4870b15f71a6a2dc196daec8c83f72b59dff628a8"
dependencies = [
"cobs",
"heapless 0.7.17",
"serde",
]
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.20" version = "0.2.20"
@ -1919,7 +1906,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66584b58c3b0cd8cfea750408a932fe86df79ee05ccc87ee745a8e6be4a1abe0" checksum = "66584b58c3b0cd8cfea750408a932fe86df79ee05ccc87ee745a8e6be4a1abe0"
dependencies = [ dependencies = [
"base64 0.21.7", "base64",
"buffered-io", "buffered-io",
"defmt", "defmt",
"embedded-io", "embedded-io",
@ -1943,18 +1930,6 @@ dependencies = [
"bytemuck", "bytemuck",
] ]
[[package]]
name = "rlsf"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "222fb240c3286247ecdee6fa5341e7cdad0ffdf8e7e401d9937f2d58482a20bf"
dependencies = [
"cfg-if",
"const-default",
"libc",
"svgbobdoc",
]
[[package]] [[package]]
name = "rp-pac" name = "rp-pac"
version = "6.0.0" version = "6.0.0"
@ -2206,19 +2181,6 @@ version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "svgbobdoc"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50"
dependencies = [
"base64 0.13.1",
"proc-macro2",
"quote",
"syn 1.0.109",
"unicode-width",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.109" version = "1.0.109"
@ -2241,15 +2203,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "talc"
version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fcad3be1cfe36eb7d716a04791eba36a197da9d9b6ea1e28e64ac569da3701d"
dependencies = [
"lock_api",
]
[[package]] [[package]]
name = "term" name = "term"
version = "0.7.0" version = "0.7.0"

View file

@ -61,8 +61,7 @@ embedded-sdmmc = "0.7.0"
bt-hci = { version = "0.1.0", default-features = false, features = ["defmt"] } bt-hci = { version = "0.1.0", default-features = false, features = ["defmt"] }
hex = { version = "0.4.3", default-features=false} hex = { version = "0.4.3", default-features=false}
itoa = "1.0.14" itoa = "1.0.14"
embedded-alloc = "0.6.0" postcard = "1.0.0"
talc = "4.4.2"
[profile.release] [profile.release]
debug = 2 debug = 2

View file

@ -30,7 +30,7 @@ impl Authorized for Name {
} }
#[embassy_executor::task] #[embassy_executor::task]
pub(crate) async fn send_badge(channel: Receiver<'static,CriticalSectionRawMutex,u64,1>,stack: embassy_net::Stack<'static>) -> ! { pub async fn send_badge(channel: Receiver<'static,CriticalSectionRawMutex,u64,1>,stack: embassy_net::Stack<'static>) -> ! {
let mut rx_buffer = [0; 4096]; let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096]; let mut tx_buffer = [0; 4096];
loop { loop {

View file

@ -15,7 +15,7 @@ use core::panic::PanicInfo;
use core::str::from_utf8; use core::str::from_utf8;
use core::sync::atomic::{AtomicU8}; use core::sync::atomic::{AtomicU8};
use auth::send_badge; use outside::auth::send_badge;
use bt_hci::cmd::info; use bt_hci::cmd::info;
use critical_section::Mutex; use critical_section::Mutex;
use cyw43::JoinOptions; use cyw43::JoinOptions;
@ -42,35 +42,15 @@ use embassy_rp::pio::{InterruptHandler, Pio};
use embassy_rp::usb::Driver; use embassy_rp::usb::Driver;
use embassy_time::{Timer}; use embassy_time::{Timer};
use embedded_io_async::{Read, ReadReady, Write}; use embedded_io_async::{Read, ReadReady, Write};
use music::{music_manager, COMMANDS}; use outside::music::{self, music_manager, COMMANDS};
use rand::RngCore; use rand::RngCore;
use reqwless::response; use reqwless::response;
use scanner::{data_extractor, spawn_poller}; use outside::scanner::{data_extractor, spawn_poller, CHANNEL};
use server::server_task; use outside::server::server_task;
use static_cell::StaticCell; use static_cell::StaticCell;
use defmt_rtt as _; use defmt_rtt as _;
use wiggle::wiggle_manager; use outside::wiggle::wiggle_manager;
use outside::Irqs;
mod wiggle;
mod music;
mod scanner;
mod auth;
mod arraymap;
mod server;
bind_interrupts!(struct Irqs {
PIO0_IRQ_0 => InterruptHandler<PIO0>;
USBCTRL_IRQ => embassy_rp::usb::InterruptHandler<USB>;
UART1_IRQ => BufferedInterruptHandler<UART1>;
});
static READ_CARD: Mutex<RefCell<u64>> =
Mutex::new(RefCell::new(0));
static BIT: AtomicU8 = AtomicU8::new(0);
static CHANNEL: Channel<CriticalSectionRawMutex, u64, 1> = Channel::new();
static WAGS: AtomicU8 = AtomicU8::new(0);
#[embassy_executor::task] #[embassy_executor::task]
async fn logger_task(driver: Driver<'static, USB>) { async fn logger_task(driver: Driver<'static, USB>) {

View file

@ -6,10 +6,13 @@ use embassy_time::Timer;
use embedded_io_async::Read; use embedded_io_async::Read;
use embedded_io_async::Write; use embedded_io_async::Write;
use rand::RngCore; use rand::RngCore;
use serde::Deserialize;
use serde::Serialize;
use crate::server::NAMES; use crate::server::NAMES;
use crate::wiggle::WAGS;
use crate::Irqs;
use super::WAGS;
use embassy_rp::uart::BufferedUart; use embassy_rp::uart::BufferedUart;
@ -17,14 +20,13 @@ use embassy_rp::peripherals::PIN_21;
use embassy_rp::peripherals::PIN_20; use embassy_rp::peripherals::PIN_20;
use super::Irqs;
use embassy_rp::peripherals::UART1; use embassy_rp::peripherals::UART1;
use log::*; use log::*;
pub static COMMANDS: Channel<CriticalSectionRawMutex, MusicCommand, 3> = Channel::new(); pub static COMMANDS: Channel<CriticalSectionRawMutex, MusicCommand, 3> = Channel::new();
#[derive(Clone, Copy)] #[derive(Clone, Copy, Serialize, Deserialize)]
#[repr(u8)] #[repr(u8)]
pub enum Name { pub enum Name {
Andy, Andy,
@ -107,7 +109,7 @@ pub enum MusicCommand {
} }
#[embassy_executor::task] #[embassy_executor::task]
pub(crate) async fn music_manager(uart: UART1, irqs: Irqs, txp: PIN_20, rxp: PIN_21) -> ! { pub async fn music_manager(uart: UART1, irqs: Irqs, txp: PIN_20, rxp: PIN_21) -> ! {
let mut config = uart::Config::default(); let mut config = uart::Config::default();
config.baudrate = 115200; config.baudrate = 115200;
let mut rx = [0; 2048]; let mut rx = [0; 2048];

View file

@ -1,4 +1,5 @@
use core::cell::RefCell;
use core::sync::atomic::AtomicBool; use core::sync::atomic::AtomicBool;
use embassy_rp::gpio::Input; use embassy_rp::gpio::Input;
@ -7,20 +8,24 @@ use embassy_rp::multicore::Stack;
use embassy_rp::peripherals::CORE1; use embassy_rp::peripherals::CORE1;
use embassy_rp::peripherals::PIN_16; use embassy_rp::peripherals::PIN_16;
use embassy_rp::peripherals::PIN_17; use embassy_rp::peripherals::PIN_17;
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
use embassy_sync::channel::Channel;
use embassy_time::Timer; use embassy_time::Timer;
use log::info; use log::info;
use critical_section::Mutex;
use core::sync::atomic::{AtomicU8};
use super::CHANNEL; pub static READ_CARD: Mutex<RefCell<u64>> =
Mutex::new(RefCell::new(0));
static BIT: AtomicU8 = AtomicU8::new(0);
use super::BIT; pub static CHANNEL: Channel<CriticalSectionRawMutex, u64, 1> = Channel::new();
use super::READ_CARD;
/// disable scanner when doing emf heavy operations /// disable scanner when doing emf heavy operations
pub static LOCKOUT: AtomicBool = AtomicBool::new(false); pub static LOCKOUT: AtomicBool = AtomicBool::new(false);
#[embassy_executor::task] #[embassy_executor::task]
pub(crate) async fn data_extractor() -> ! { pub async fn data_extractor() -> ! {
let mut last_bit = 0; let mut last_bit = 0;
loop { loop {
Timer::after_millis(75).await; Timer::after_millis(75).await;

View file

@ -4,12 +4,22 @@ use embassy_net::tcp::TcpSocket;
use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, mutex::Mutex}; use embassy_sync::{blocking_mutex::raw::CriticalSectionRawMutex, mutex::Mutex};
use embedded_io_async::Write; use embedded_io_async::Write;
use log::*; use log::*;
use postcard::from_bytes;
use serde::{Deserialize, Serialize};
use crate::{arraymap::ArrayMap, music::Name, READ_CARD}; use crate::{arraymap::ArrayMap, music::{Name, COMMANDS}, scanner::READ_CARD};
pub static NAMES: Mutex<CriticalSectionRawMutex, RefCell<ArrayMap<64, u64, Name>>> = pub static NAMES: Mutex<CriticalSectionRawMutex, RefCell<ArrayMap<64, u64, Name>>> =
Mutex::new(RefCell::new(ArrayMap::new())); Mutex::new(RefCell::new(ArrayMap::new()));
#[derive(Serialize, Deserialize)]
pub enum Request {
RecentBadge,
SetRecentBadge(Name),
SetVolume(u8),
}
#[embassy_executor::task] #[embassy_executor::task]
pub async fn server_task(stack: embassy_net::Stack<'static>) { pub async fn server_task(stack: embassy_net::Stack<'static>) {
let mut rx_buffer = [0; 4096]; let mut rx_buffer = [0; 4096];
@ -39,9 +49,31 @@ pub async fn server_task(stack: embassy_net::Stack<'static>) {
} }
}; };
match from_bytes::<Request>(&buf[..n]) {
Ok(Request::RecentBadge) => {
let card = critical_section::with(|cs| {
READ_CARD.borrow(cs).clone().into_inner()
});
socket.write_all(itoa::Buffer::new().format(card).as_bytes()).await.unwrap();
},
Ok(Request::SetRecentBadge(name)) => {
let card = critical_section::with(|cs| {
READ_CARD.borrow(cs).clone().into_inner()
});
NAMES.lock().await.borrow_mut().insert(card, name);
}
Ok(Request::SetVolume(vol)) => {
COMMANDS.send(crate::music::MusicCommand::SetVolume(vol)).await;
}
Err(e) => { info!("parse error: {e}") }
}
info!("rxd {}", from_utf8(&buf[..n]).unwrap()); info!("rxd {}", from_utf8(&buf[..n]).unwrap());
let mut segs = buf[..n].trim_ascii().split(|c| *c == ' ' as u8); /*let mut segs = buf[..n].trim_ascii().split(|c| *c == ' ' as u8);
match char::from_u32(segs.next().unwrap()[0] as u32).unwrap() { match char::from_u32(segs.next().unwrap()[0] as u32).unwrap() {
'B' => { 'B' => {
@ -62,6 +94,7 @@ pub async fn server_task(stack: embassy_net::Stack<'static>) {
_ => {} _ => {}
} }
*/
} }
} }
} }

View file

@ -1,3 +1,5 @@
use core::sync::atomic::AtomicU8;
use embassy_rp::clocks::RoscRng; use embassy_rp::clocks::RoscRng;
use embassy_rp::pwm; use embassy_rp::pwm;
@ -6,7 +8,7 @@ use rand::RngCore;
use crate::scanner::LOCKOUT; use crate::scanner::LOCKOUT;
use super::WAGS; pub static WAGS: AtomicU8 = AtomicU8::new(0);
use embassy_rp::pwm::Pwm; use embassy_rp::pwm::Pwm;
@ -17,7 +19,7 @@ use embassy_rp::peripherals::PIN_26;
use embassy_rp::peripherals::PWM_SLICE5; use embassy_rp::peripherals::PWM_SLICE5;
#[embassy_executor::task] #[embassy_executor::task]
pub(crate) async fn wiggle_manager(pwm: PWM_SLICE5, head: PIN_26, tail: PIN_27) -> ! { pub async fn wiggle_manager(pwm: PWM_SLICE5, head: PIN_26, tail: PIN_27) -> ! {
let mut c: pwm::Config = Default::default(); let mut c: pwm::Config = Default::default();
c.divider = 40.into(); c.divider = 40.into();
c.top = 62_500; // 20ms c.top = 62_500; // 20ms