playdate_device/usb/
mode.rs1use 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,
11 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 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}