Initial proof of concept

This commit is contained in:
Zachary Levy
2025-03-09 12:13:14 -07:00
commit e06e76e46b
55 changed files with 4508 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
// The library will have build errors when built on its own (due to not having embassy-stm32 feature for a specific microcontroller)
// but it will work fine when used as a dependency for firmware that has the feature for a specific stm32 microcontroller.
use crate::comms;
use embassy_stm32::peripherals::USB_OTG_FS;
use embassy_stm32::usb_otg::{Driver, Endpoint, In, Out};
use embassy_usb::driver::{EndpointIn, EndpointOut};
use embassy_usb::UsbDevice;
pub type TypedUSB = UsbDevice<'static, Driver<'static, USB_OTG_FS>>;
pub type TypedInterIn = Endpoint<'static, USB_OTG_FS, In>;
pub type TypedInterOut = Endpoint<'static, USB_OTG_FS, Out>;
pub struct UsbIO {
/// Send to master
pub interrupt_in: TypedInterIn,
/// Recieve from master
pub interrupt_out: TypedInterOut,
}
impl comms::Sender for TypedInterIn {
async fn send(&mut self, msg: &[u8]) -> Result<(), comms::Reset> {
self.write(msg).await.map_err(|_| comms::Reset)
}
}
impl comms::Receiver for TypedInterOut {
#[cfg(feature = "single-packet-msgs")]
async fn receive(&mut self, buffer: &mut [u8]) -> Result<(), comms::Reset> {
// This is OK when all our messages are smaller than a single packet.
self.read(buffer)
.await
.map(|_| ())
.map_err(|_| comms::Reset)
}
#[cfg(not(feature = "single-packet-msgs"))]
async fn receive(&mut self, buffer: &mut [u8]) -> Result<(), comms::Reset> {
todo!("Decide if we want a general purpose multi-packet message receive")
}
}