usb/device/
mod.rs

1// SPDX-FileCopyrightText: 2026 Foundation Devices, Inc. <hello@foundation.xyz>
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4pub mod api;
5pub mod messages;
6
7pub mod interface_numbers {
8    pub const LEGACY_HID: u8 = 0;
9    pub const MASS_STORAGE: u8 = 1;
10    pub const CTAP_HID: u8 = 2;
11    pub const USB_DEBUG: u8 = 3;
12    pub const LOG_USB_SERIAL_CONTROL: u8 = 4;
13    pub const LOG_USB_SERIAL_DATA: u8 = 5;
14}
15
16pub const MAJ_DEV_VERSION: u8 = 1;
17pub const MIN_DEV_VERSION: u8 = 0;
18pub const BLD_DEV_VERSION: u8 = 1;
19
20#[derive(Debug, Clone, server::Message, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
21pub struct SetupPacket {
22    pub request_type: u8,
23    pub request: u8,
24    pub value: u16,
25    pub index: u16,
26    pub length: u16,
27}
28
29impl SetupPacket {
30    pub fn from_bytes(setup_data: &[u8]) -> Self {
31        SetupPacket {
32            request_type: setup_data[0],
33            request: setup_data[1],
34            value: u16::from_le_bytes(setup_data[2..4].try_into().unwrap()),
35            index: u16::from_le_bytes(setup_data[4..6].try_into().unwrap()),
36            length: u16::from_le_bytes(setup_data[6..8].try_into().unwrap()),
37        }
38    }
39}