minidsp_protocol/device/
probe.rs1use crate::DeviceInfo;
4
5#[derive(Copy, Clone, Eq, PartialEq)]
6#[cfg_attr(feature = "debug", derive(Debug))]
7#[cfg_attr(
8 feature = "use_serde",
9 derive(
10 strum::EnumString,
11 strum::Display,
12 serde::Serialize,
13 serde::Deserialize,
14 schemars::JsonSchema,
15 )
16)]
17#[cfg_attr(feature = "use_serde", strum(serialize_all = "lowercase"))]
18pub enum DeviceKind {
19 Generic,
20 #[cfg(feature = "device_4x10hd")]
21 M4x10Hd,
22 #[cfg(feature = "device_10x10hd")]
23 M10x10Hd,
24 #[cfg(feature = "device_msharc4x8")]
25 MSharc4x8,
26 #[cfg(feature = "device_2x4hd")]
27 M2x4Hd,
28 #[cfg(feature = "device_shd")]
29 Shd,
30 #[cfg(feature = "device_ddrc24")]
31 DDRC24,
32 #[cfg(feature = "device_ddrc88bm")]
33 DDRC88BM,
34 #[cfg(feature = "device_nanodigi2x8")]
35 Nanodigi2x8,
36 #[cfg(feature = "device_c8x12v2")]
37 C8x12v2,
38 #[cfg(feature = "device_m2x4")]
39 M2x4,
40}
41
42impl Default for DeviceKind {
43 fn default() -> Self {
44 DeviceKind::Generic
45 }
46}
47
48pub fn probe(device_info: &DeviceInfo) -> &'static super::Device {
50 by_kind(probe_kind(device_info))
51}
52
53pub fn probe_kind(device_info: &DeviceInfo) -> DeviceKind {
54 use DeviceKind::*;
55 match (device_info.hw_id, device_info.dsp_version) {
56 #[cfg(feature = "device_10x10hd")]
57 (1, 51) => M10x10Hd,
58 #[cfg(feature = "device_4x10hd")]
59 (1, _) => M4x10Hd,
60 #[cfg(feature = "device_msharc4x8")]
61 (4, _) => MSharc4x8,
62 #[cfg(feature = "device_2x4hd")]
63 (10, 100) => M2x4Hd,
64 #[cfg(feature = "device_ddrc24")]
65 (10, 101) => DDRC24,
66 #[cfg(feature = "device_ddrc88bm")]
67 (6, 95) => DDRC88BM,
68 #[cfg(feature = "device_shd")]
69 (14, _) => Shd,
70 #[cfg(feature = "device_nanodigi2x8")]
71 (2, 54) => Nanodigi2x8,
72 #[cfg(feature = "device_c8x12v2")]
73 (11, 97) => C8x12v2,
74 #[cfg(feature = "device_m2x4")]
76 (2, 22) => M2x4,
77 _ => Generic,
78 }
79}
80
81pub fn by_kind(kind: DeviceKind) -> &'static super::Device {
82 use DeviceKind::*;
83 match kind {
84 Generic => &super::GENERIC,
85
86 #[cfg(feature = "device_4x10hd")]
87 M4x10Hd => &super::m4x10hd::DEVICE,
88
89 #[cfg(feature = "device_msharc4x8")]
90 MSharc4x8 => &super::msharc4x8::DEVICE,
91
92 #[cfg(feature = "device_2x4hd")]
93 M2x4Hd => &super::m2x4hd::DEVICE,
94
95 #[cfg(feature = "device_ddrc24")]
96 DDRC24 => &super::ddrc24::DEVICE,
97
98 #[cfg(feature = "device_ddrc88bm")]
99 DDRC88BM => &super::ddrc88bm::DEVICE,
100
101 #[cfg(feature = "device_shd")]
102 Shd => &super::shd::DEVICE,
103
104 #[cfg(feature = "device_nanodigi2x8")]
105 Nanodigi2x8 => &super::nanodigi2x8::DEVICE,
106
107 #[cfg(feature = "device_c8x12v2")]
108 C8x12v2 => &super::c8x12v2::DEVICE,
109
110 #[cfg(feature = "device_m2x4")]
111 M2x4 => &super::m2x4::DEVICE,
112
113 #[cfg(feature = "device_10x10hd")]
114 M10x10Hd => &super::m10x10hd::DEVICE,
115 }
116}