playdate_device/usb/
mode.rs

1use nusb::DeviceInfo;
2
3use crate::PRODUCT_ID_DATA;
4use crate::PRODUCT_ID_STORAGE;
5
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum Mode {
9	/// DATA / COMM
10	Data,
11	/// MASS_STORAGE
12	Storage,
13	Unknown,
14}
15
16impl std::fmt::Display for Mode {
17	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18		write!(f, "{}", match self {
19			Mode::Data => 'D',
20			Mode::Storage => 'S',
21			Mode::Unknown => '?',
22		})
23	}
24}
25
26
27pub trait DeviceMode {
28	/// USB device mode determined by the product ID.
29	fn mode(&self) -> Mode;
30}
31
32
33impl DeviceMode for DeviceInfo {
34	fn mode(&self) -> Mode {
35		match self.product_id() {
36			PRODUCT_ID_DATA => Mode::Data,
37			PRODUCT_ID_STORAGE => Mode::Storage,
38			_ => Mode::Unknown,
39		}
40	}
41}
42
43
44impl DeviceMode for super::Device {
45	fn mode(&self) -> Mode { self.info().mode() }
46}