feat(faderboard): add echo serial usb interface

This commit is contained in:
Luca 2024-07-15 23:17:44 +02:00
parent 3cac6c3e37
commit 4ce5d0a1b3
4 changed files with 67 additions and 135 deletions

View File

@ -40,12 +40,6 @@ dependencies = [
"vcell", "vcell",
] ]
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]] [[package]]
name = "cast" name = "cast"
version = "0.2.7" version = "0.2.7"
@ -84,7 +78,7 @@ checksum = "f0f6f3e36f203cfedbc78b357fb28730aa2c6dc1ab060ee5c2405e843988d3c7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 1.0.109", "syn",
] ]
[[package]] [[package]]
@ -97,12 +91,6 @@ dependencies = [
"void", "void",
] ]
[[package]]
name = "encode_unicode"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
[[package]] [[package]]
name = "faderboard" name = "faderboard"
version = "0.1.0" version = "0.1.0"
@ -111,27 +99,8 @@ dependencies = [
"cortex-m-rt", "cortex-m-rt",
"panic-halt", "panic-halt",
"stm32f0xx-hal", "stm32f0xx-hal",
"usb-device 0.3.2", "usb-device",
"usbd-hid", "usbd-serial",
]
[[package]]
name = "hash32"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
dependencies = [
"byteorder",
]
[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
dependencies = [
"hash32",
"stable_deref_trait",
] ]
[[package]] [[package]]
@ -155,12 +124,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 = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812" checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812"
[[package]]
name = "portable-atomic"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.86" version = "1.0.86"
@ -218,42 +181,6 @@ version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]]
name = "serde"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.204"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.71",
]
[[package]]
name = "ssmarshal"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850"
dependencies = [
"encode_unicode",
"serde",
]
[[package]]
name = "stable_deref_trait"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]] [[package]]
name = "stm32-usbd" name = "stm32-usbd"
version = "0.6.0" version = "0.6.0"
@ -261,7 +188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6c94998f166d66b210a164648a0b7866428d8f1e0740bf8a4c5edd89d4750c1" checksum = "c6c94998f166d66b210a164648a0b7866428d8f1e0740bf8a4c5edd89d4750c1"
dependencies = [ dependencies = [
"cortex-m", "cortex-m",
"usb-device 0.2.9", "usb-device",
"vcell", "vcell",
] ]
@ -304,17 +231,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "syn"
version = "2.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.12" version = "1.0.12"
@ -328,48 +244,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508"
[[package]] [[package]]
name = "usb-device" name = "usbd-serial"
version = "0.3.2" version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe"
dependencies = [ dependencies = [
"heapless", "embedded-hal",
"portable-atomic", "nb 0.1.3",
] "usb-device",
[[package]]
name = "usbd-hid"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41a2d4546ca3e6a5c6a85584e5caf29feabf3ec35d6cd6b772eb35bd3cff7256"
dependencies = [
"serde",
"ssmarshal",
"usb-device 0.3.2",
"usbd-hid-macros",
]
[[package]]
name = "usbd-hid-descriptors"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcbee8c6735e90894fba04770bc41e11fd3c5256018856e15dc4dd1e6c8a3dd1"
dependencies = [
"bitfield",
]
[[package]]
name = "usbd-hid-macros"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "261079a9ada015fa1acac7cc73c98559f3a92585e15f508034beccf6a2ab75a2"
dependencies = [
"byteorder",
"proc-macro2",
"quote",
"serde",
"syn 1.0.109",
"usbd-hid-descriptors",
] ]
[[package]] [[package]]

View File

@ -10,5 +10,5 @@ cortex-m = "0.7.7"
cortex-m-rt = "0.7.3" cortex-m-rt = "0.7.3"
panic-halt = "0.2.0" panic-halt = "0.2.0"
stm32f0xx-hal = { git = "https://github.com/lujoga/stm32f0xx-hal.git", branch = "v0.18.0-backports", features = ["rt", "stm32f072", "stm32-usbd"] } stm32f0xx-hal = { git = "https://github.com/lujoga/stm32f0xx-hal.git", branch = "v0.18.0-backports", features = ["rt", "stm32f072", "stm32-usbd"] }
usb-device = "0.3.2" usb-device = "0.2.9"
usbd-hid = "0.7.0" usbd-serial = "0.1.1"

View File

@ -2,6 +2,7 @@
#![no_main] #![no_main]
mod touch; mod touch;
mod usb;
use cortex_m_rt::entry; use cortex_m_rt::entry;
@ -13,9 +14,12 @@ use hal::adc::Adc;
use hal::pac::Peripherals; use hal::pac::Peripherals;
use hal::prelude::*; use hal::prelude::*;
use hal::pwm; use hal::pwm;
use hal::usb::{Peripheral, UsbBus};
use touch::Touch; use touch::Touch;
use usb::Usb;
#[entry] #[entry]
fn main() -> ! { fn main() -> ! {
let mut p = Peripherals::take().unwrap(); let mut p = Peripherals::take().unwrap();
@ -49,8 +53,6 @@ fn main() -> ! {
pwm6_pin, // TIM1_CH1 pwm6_pin, // TIM1_CH1
tx, // USART1_TX tx, // USART1_TX
rx, // USART1_RX rx, // USART1_RX
usb_dm, // USB_DM
usb_dp, // USB_DP
mut dir5, // PA13 mut dir5, // PA13
mut dir4, // PA14 mut dir4, // PA14
mut dir3, // PA15 mut dir3, // PA15
@ -88,8 +90,6 @@ fn main() -> ! {
gpioa.pa8.into_alternate_af2(cs), gpioa.pa8.into_alternate_af2(cs),
gpioa.pa9.into_alternate_af1(cs), gpioa.pa9.into_alternate_af1(cs),
gpioa.pa10.into_alternate_af1(cs), gpioa.pa10.into_alternate_af1(cs),
gpioa.pa11,
gpioa.pa12,
gpioa.pa13.into_push_pull_output(cs), gpioa.pa13.into_push_pull_output(cs),
gpioa.pa14.into_push_pull_output(cs), gpioa.pa14.into_push_pull_output(cs),
gpioa.pa15.into_push_pull_output(cs), gpioa.pa15.into_push_pull_output(cs),
@ -117,6 +117,13 @@ fn main() -> ! {
) )
}); });
let usb_bus = UsbBus::new(Peripheral {
usb: p.USB,
pin_dm: gpioa.pa11,
pin_dp: gpioa.pa12,
});
let mut usb = Usb::new(&usb_bus);
let mut _adc = Adc::new(p.ADC, &mut rcc); let mut _adc = Adc::new(p.ADC, &mut rcc);
let mut _pwm1 = pwm::tim16(p.TIM16, pwm1_pin, &mut rcc, 250.khz()); let mut _pwm1 = pwm::tim16(p.TIM16, pwm1_pin, &mut rcc, 250.khz());
@ -128,5 +135,7 @@ fn main() -> ! {
touch.setup(); touch.setup();
loop {} loop {
usb.poll();
}
} }

View File

@ -0,0 +1,41 @@
use stm32f0xx_hal::usb::UsbBusType;
use usb_device::bus::UsbBusAllocator;
use usb_device::prelude::*;
use usbd_serial::SerialPort;
/// pid.codes VID
const VENDOR_ID: u16 = 0x1209;
/// pid.codes Test PID - do not use outside of testing!
/// TODO: apply for unique PID once project is finished
const PRODUCT_ID: u16 = 0x0006;
pub struct Usb<'a> {
usb_dev: UsbDevice<'a, UsbBusType>,
serial: SerialPort<'a, UsbBusType>,
}
impl<'a> Usb<'a> {
pub fn new(usb_bus: &'a UsbBusAllocator<UsbBusType>) -> Self {
let usb_dev = UsbDeviceBuilder::new(usb_bus, UsbVidPid(VENDOR_ID, PRODUCT_ID))
.manufacturer("lujoga")
.product("faderboard")
.max_power(500)
.build();
let serial = SerialPort::new(&usb_bus);
Usb { usb_dev, serial }
}
pub fn poll(&mut self) {
if self.usb_dev.poll(&mut [&mut self.serial]) {
let mut buf = [0u8; 64];
if let Ok(count) = self.serial.read(&mut buf[..]) {
let _ = self.serial.write(&buf[..count]);
}
}
}
}