Add support for the Mirabox DK0108D (#36)

This commit is contained in:
Hiroyuki Ikegami authored and GitHub committed 2025-03-02 10:59:02 +00:00
1 parent 1bb900b7bf
commit edf6a74a1e
4 files changed
+38 -7

No files matched your search

+4
View File
@@ -8,6 +8,7 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="0086", MODE="0660",
SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="008f", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="0090", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="009a", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6667", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6670", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6672", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6674", MODE="0660", TAG+="uaccess", GROUP="plugdev"
@@ -26,6 +27,7 @@ SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0086", MODE="0660"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6667", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6670", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6672", MODE="0660", TAG+="uaccess", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6674", MODE="0660", TAG+="uaccess", GROUP="plugdev"
@@ -44,6 +46,7 @@ KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="008f", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="0090", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="009a", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6667", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6670", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6672", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6674", MODE="0660", TAG+="uaccess", GROUP="plugdev"
@@ -62,6 +65,7 @@ KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="008f", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0090", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="009a", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6667", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6670", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6672", MODE="0660", TAG+="uaccess", GROUP="plugdev"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6674", MODE="0660", TAG+="uaccess", GROUP="plugdev"
+1
View File
@@ -81,3 +81,4 @@ As it stands, this library should support the following devices:
- Ajazz AKP03E (thanks to [@4ndv](https://github.com/4ndv) and [@geekosaurusR3x](https://github.com/geekosaurusR3x))
- Ajazz AKP03R (thanks to [@4ndv](https://github.com/4ndv))
- MiraBox HSV293S (thanks to [@czyz](https://github.com/czyz))
- MiraBox DK0108D (thanks to [@ikegam](https://github.com/ikegam))
+20 -1
View File
@@ -34,6 +34,9 @@ pub const PID_AJAZZ_AKP815: u16 = 0x6672;
/// Product ID of the "FHOOU" (front label) and "MiraBox HSV293S" (rear label). Seems just like an AKP153.
pub const PID_MIRABOX_HSV293S: u16 = 0x6670;
/// Product ID of MiraBox DK0108D
pub const PID_MIRABOX_DK0108D: u16 = 0x6667;
/// A Mirabox vendor ID
pub const MIRABOX_VENDOR_ID_2: u16 = 0x0300;
@@ -93,6 +96,8 @@ pub enum Kind {
Akp03R,
/// MiraBox HSV293S
MiraBoxHSV293S,
/// MiraBox DK0108D
MiraBoxDK0108D,
}
impl Kind {
@@ -117,6 +122,7 @@ impl Kind {
PID_AJAZZ_AKP153 => Some(Kind::Akp153),
PID_AJAZZ_AKP815 => Some(Kind::Akp815),
PID_MIRABOX_HSV293S => Some(Kind::MiraBoxHSV293S),
PID_MIRABOX_DK0108D => Some(Kind::MiraBoxDK0108D),
_ => None,
},
@@ -152,6 +158,7 @@ impl Kind {
Kind::Akp03E => PID_AJAZZ_AKP03E,
Kind::Akp03R => PID_AJAZZ_AKP03R,
Kind::MiraBoxHSV293S => PID_MIRABOX_HSV293S,
Kind::MiraBoxDK0108D => PID_MIRABOX_DK0108D,
}
}
@@ -175,6 +182,7 @@ impl Kind {
Kind::Akp03E => MIRABOX_VENDOR_ID_2,
Kind::Akp03R => MIRABOX_VENDOR_ID_2,
Kind::MiraBoxHSV293S => MIRABOX_VENDOR_ID_1,
Kind::MiraBoxDK0108D => MIRABOX_VENDOR_ID_1,
}
}
@@ -189,6 +197,7 @@ impl Kind {
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 15 + 3,
Kind::Akp815 => 15,
Kind::Akp03E | Kind::Akp03R => 6 + 3,
Kind::MiraBoxDK0108D => 12,
}
}
@@ -203,6 +212,7 @@ impl Kind {
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 3,
Kind::Akp815 => 5,
Kind::Akp03E | Kind::Akp03R => 3,
Kind::MiraBoxDK0108D => 3,
}
}
@@ -217,6 +227,7 @@ impl Kind {
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 6,
Kind::Akp815 => 3,
Kind::Akp03E | Kind::Akp03R => 3,
Kind::MiraBoxDK0108D => 4,
}
}
@@ -244,6 +255,7 @@ impl Kind {
Kind::Neo => Some((248, 58)),
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => Some((854, 480)),
Kind::Akp815 => Some((800, 480)),
Kind::MiraBoxDK0108D => Some((800, 480)),
_ => None,
}
}
@@ -318,6 +330,13 @@ impl Kind {
rotation: ImageRotation::Rot0,
mirror: ImageMirroring::None,
},
Kind::MiraBoxDK0108D => ImageFormat {
mode: ImageMode::JPEG,
size: (72, 72),
rotation: ImageRotation::Rot180,
mirror: ImageMirroring::Both,
},
}
}
@@ -457,7 +476,7 @@ impl Kind {
/// Returns true for Mirabox devices with 512 byte packet length
pub fn is_mirabox_v1(&self) -> bool {
matches!(self, Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S)
matches!(self, Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S | Kind::MiraBoxDK0108D)
}
/// Returns true for Mirabox devices with 1024 byte packet length
+13 -6
View File
@@ -266,12 +266,19 @@ impl StreamDeck {
states.extend(vec![0u8; (self.kind.key_count() + 1) as usize]);
if data[9] != 0 {
let key = if self.kind == Kind::Akp815 {
inverse_key_index(&self.kind, data[9] - 1)
} else {
ajazz153_to_elgato_input(&self.kind, data[9] - 1)
let key = match self.kind {
Kind::Akp815 => inverse_key_index(&self.kind, data[9] - 1),
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => ajazz153_to_elgato_input(&self.kind, data[9] - 1),
Kind::MiraBoxDK0108D => data[9] - 1,
_ => unimplemented!(),
};
// This device can slide its view, and as it does, it sends events for keys 48, 49 and 50.
// This functionality is not yet implemented in this library. So, for now, drop related events.
if self.kind == Kind::MiraBoxDK0108D && key > self.kind.key_count() {
return Ok(StreamDeckInput::NoData);
}
states[(key + 1) as usize] = 0x1u8;
}
@@ -563,8 +570,8 @@ impl StreamDeck {
if self.kind.is_mirabox() {
let key = match self.kind {
Kind::Akp815 => inverse_key_index(&self.kind, key),
Kind::Akp03E | Kind::Akp03R => key,
_ => elgato_to_ajazz153(&self.kind, key),
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => elgato_to_ajazz153(&self.kind, key),
_ => key,
};
let mut buf = vec![0x00, 0x43, 0x52, 0x54, 0x00, 0x00, 0x43, 0x4c, 0x45, 0x00, 0x00, 0x00, if key == 0xff { 0xff } else { key + 1 }];