filmov
tv
raspberry pi pico, adafruit macropad in rust, usb hid, source in the description

Показать описание
#macropad
#rust
#pico
#raspberrypipico
#adafruit
#adafruitmacropad
#usb
#usbhid
#picohid
// adafruit macropad test in rust
// replace _GT_ with greater than
// replace _LT_ with less than
// youtube don't like angle brackets
#![no_main]
#![no_std]
use bsp::hal::{self, usb::UsbBus};
use hal::gpio::DynPin;
use cortex_m::prelude::*;
use cortex_m_rt::entry;
use defmt_rtt as _;
use embedded_hal::digital::v2::InputPin;
use embedded_time::duration::Extensions as _;
use hal::pac;
use heapless::Deque;
use panic_probe as _;
use rp_pico as bsp;
use usb_device as usbd;
use usbd::{
class_prelude::UsbBusAllocator,
device::{UsbDeviceBuilder, UsbVidPid},};
use usbd_hid::{
descriptor::{KeyboardReport, SerializedDescriptor},
hid_class::{
HIDClass, HidClassSettings, HidCountryCode, HidProtocol, HidSubClass, ProtocolModeConfig,},};
#[defmt::panic_handler]
fn panic() -_GT_ ! {
cortex_m::asm::udf()}
pub fn exit() -_GT_ ! {
loop {
cortex_m::asm::bkpt();}}
#[entry]
fn main() -_GT_ ! {
let mut p = pac::Peripherals::take().unwrap();
let mut watchdog = hal::Watchdog::new(p.WATCHDOG);
let clocks = hal::clocks::init_clocks_and_plls(
bsp::XOSC_CRYSTAL_FREQ,
p.XOSC,
p.CLOCKS,
p.PLL_SYS,
p.PLL_USB,
&mut p.RESETS,
&mut watchdog,).ok().unwrap();
let timer = hal::Timer::new(p.TIMER, &mut p.RESETS);
let bus = UsbBus::new(
p.USBCTRL_REGS,
p.USBCTRL_DPRAM,
true,
&mut p.RESETS,);
let bus_allocator = UsbBusAllocator::new(bus);
let vid_pid = UsbVidPid(0x6666, 0x0789);
let mut hid = HIDClass::new_with_settings(
&bus_allocator,
KeyboardReport::desc(),
10,
HidClassSettings {
subclass: HidSubClass::NoSubClass,
protocol: HidProtocol::Keyboard,
config: ProtocolModeConfig::ForceReport,
locale: HidCountryCode::NotSupported,},);
let mut dev = UsbDeviceBuilder::new(&bus_allocator, vid_pid)
.manufacturer("KOBA789")
.product("RustyKeys")
.serial_number("789")
.build();
let sio = hal::Sio::new(p.SIO);
let pinarray: [DynPin; 12] = [
let mut macro_queue = Deque::_LT_KeyboardReport, 32_GT_::new();
loop {
} else { // otherwise scan the buttons
let mut keycodes = [0u8; 6];
let offset = 4; // this translates to 'a'
let index = i + offset as usize;
keycodes[0] = index as u8;
}
let report = KeyboardReport{
modifier:0,
reserved:0,
leds:0,
keycodes,
};
// drop received data
#rust
#pico
#raspberrypipico
#adafruit
#adafruitmacropad
#usb
#usbhid
#picohid
// adafruit macropad test in rust
// replace _GT_ with greater than
// replace _LT_ with less than
// youtube don't like angle brackets
#![no_main]
#![no_std]
use bsp::hal::{self, usb::UsbBus};
use hal::gpio::DynPin;
use cortex_m::prelude::*;
use cortex_m_rt::entry;
use defmt_rtt as _;
use embedded_hal::digital::v2::InputPin;
use embedded_time::duration::Extensions as _;
use hal::pac;
use heapless::Deque;
use panic_probe as _;
use rp_pico as bsp;
use usb_device as usbd;
use usbd::{
class_prelude::UsbBusAllocator,
device::{UsbDeviceBuilder, UsbVidPid},};
use usbd_hid::{
descriptor::{KeyboardReport, SerializedDescriptor},
hid_class::{
HIDClass, HidClassSettings, HidCountryCode, HidProtocol, HidSubClass, ProtocolModeConfig,},};
#[defmt::panic_handler]
fn panic() -_GT_ ! {
cortex_m::asm::udf()}
pub fn exit() -_GT_ ! {
loop {
cortex_m::asm::bkpt();}}
#[entry]
fn main() -_GT_ ! {
let mut p = pac::Peripherals::take().unwrap();
let mut watchdog = hal::Watchdog::new(p.WATCHDOG);
let clocks = hal::clocks::init_clocks_and_plls(
bsp::XOSC_CRYSTAL_FREQ,
p.XOSC,
p.CLOCKS,
p.PLL_SYS,
p.PLL_USB,
&mut p.RESETS,
&mut watchdog,).ok().unwrap();
let timer = hal::Timer::new(p.TIMER, &mut p.RESETS);
let bus = UsbBus::new(
p.USBCTRL_REGS,
p.USBCTRL_DPRAM,
true,
&mut p.RESETS,);
let bus_allocator = UsbBusAllocator::new(bus);
let vid_pid = UsbVidPid(0x6666, 0x0789);
let mut hid = HIDClass::new_with_settings(
&bus_allocator,
KeyboardReport::desc(),
10,
HidClassSettings {
subclass: HidSubClass::NoSubClass,
protocol: HidProtocol::Keyboard,
config: ProtocolModeConfig::ForceReport,
locale: HidCountryCode::NotSupported,},);
let mut dev = UsbDeviceBuilder::new(&bus_allocator, vid_pid)
.manufacturer("KOBA789")
.product("RustyKeys")
.serial_number("789")
.build();
let sio = hal::Sio::new(p.SIO);
let pinarray: [DynPin; 12] = [
let mut macro_queue = Deque::_LT_KeyboardReport, 32_GT_::new();
loop {
} else { // otherwise scan the buttons
let mut keycodes = [0u8; 6];
let offset = 4; // this translates to 'a'
let index = i + offset as usize;
keycodes[0] = index as u8;
}
let report = KeyboardReport{
modifier:0,
reserved:0,
leds:0,
keycodes,
};
// drop received data