mirror of
https://github.com/OpenActionAPI/rust-elgato-streamdeck.git
synced 2026-10-28 09:44:56 +00:00
Add support for the Mirabox DK0108D (#36)
This commit is contained in:
1 parent
1bb900b7bf
commit
edf6a74a1e
4 files changed
+38
-7
No files matched your search
@@ -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"
|
||||
|
||||
@@ -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
@@ -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
@@ -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 }];
|
||||
|
||||
Reference in new issue
Block a user