mirror of
https://github.com/OpenActionAPI/rust-elgato-streamdeck.git
synced 2026-10-28 18:02:41 +00:00
Support Ajazz AKP153R (#26)
* Support Ajazz AKP153R * Support AKP153R * Support AKP153R * Remove unnecessary E in PID
This commit is contained in:
1 parent
c924b166fa
commit
4e5da605a9
5 files changed
+41
-28
No files matched your search
@@ -12,6 +12,7 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6670", MODE="0660",
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6672", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="5548", ATTR{idProduct}=="6674", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="0300", ATTR{idProduct}=="1010", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="0300", ATTR{idProduct}=="1020", MODE="0660", GROUP="plugdev"
|
||||
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE="0660", GROUP="plugdev"
|
||||
@@ -27,6 +28,7 @@ SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6670", MODE="0660"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6672", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6674", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0300", ATTRS{idProduct}=="1010", MODE="0660", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0300", ATTRS{idProduct}=="1020", MODE="0660", GROUP="plugdev"
|
||||
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="0060", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0fd9", ATTR{idProduct}=="0063", MODE="0660", GROUP="plugdev"
|
||||
@@ -42,6 +44,7 @@ KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6672", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="5548", ATTR{idProduct}=="6674", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0300", ATTR{idProduct}=="1010", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTR{idVendor}=="0300", ATTR{idProduct}=="1020", MODE="0660", GROUP="plugdev"
|
||||
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0060", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0fd9", ATTRS{idProduct}=="0063", MODE="0660", GROUP="plugdev"
|
||||
@@ -57,3 +60,4 @@ KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6672", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="5548", ATTRS{idProduct}=="6674", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0300", ATTRS{idProduct}=="1010", MODE="0660", GROUP="plugdev"
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0300", ATTRS{idProduct}=="1020", MODE="0660", GROUP="plugdev"
|
||||
@@ -78,5 +78,6 @@ But as it stands, this library should support following devices:
|
||||
- Stream Deck Neo (thanks to [@ejiektpobehuk](https://github.com/ejiektpobehuk), [@AkechiShiro](https://github.com/AkechiShiro) and [node-elgato-stream-deck](https://github.com/Julusian/node-elgato-stream-deck))
|
||||
- Ajazz AKP153 (thanks to [@ZCube](https://github.com/ZCube))
|
||||
- Ajazz AKP153E (thanks to [@teras](https://github.com/teras))
|
||||
- Ajazz AKP153R (thanks to [@teras](https://github.com/teras) and [@damnkrat](https://github.com/damnkrat))
|
||||
- Ajazz AKP815 (thanks to [@teras](https://github.com/teras))
|
||||
- MiraBox HSV293S (thanks to [@czyz](https://github.com/czyz))
|
||||
@@ -3,7 +3,7 @@ name = "simple"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
hidapi = { version = "2.6", default-features = false }
|
||||
hidapi = { version = "2.6", default-features = true }
|
||||
image = { version = "0.25.1", default-features = false, features = [
|
||||
"bmp",
|
||||
"jpeg",
|
||||
|
||||
+16
-8
@@ -38,7 +38,10 @@ pub const PID_AJAZZ_AKP815: u16 = 0x6672;
|
||||
pub const AJAZZ_VENDOR_ID_2: u16 = 0x0300;
|
||||
|
||||
/// Product ID of Ajazz AKP153E Desk Controller
|
||||
pub const PID_AJAZZ_E_AKP153E: u16 = 0x1010;
|
||||
pub const PID_AJAZZ_AKP153E: u16 = 0x1010;
|
||||
|
||||
/// Product ID of Ajazz AKP153R Desk Controller
|
||||
pub const PID_AJAZZ_AKP153R: u16 = 0x1020;
|
||||
|
||||
const RECOGNIZED_VENDORS: &'static [u16] = &[ELGATO_VENDOR_ID, AJAZZ_VENDOR_ID_1, AJAZZ_VENDOR_ID_2];
|
||||
|
||||
@@ -74,6 +77,8 @@ pub enum Kind {
|
||||
Akp153,
|
||||
/// Ajazz AKP153E Desk Controller
|
||||
Akp153E,
|
||||
/// Ajazz AKP153R Desk Controller
|
||||
Akp153R,
|
||||
/// Ajazz AKP815 Desk Controller
|
||||
Akp815,
|
||||
/// MiraBox HSV293S
|
||||
@@ -100,7 +105,8 @@ impl Kind {
|
||||
|
||||
AJAZZ_VENDOR_ID_1 | AJAZZ_VENDOR_ID_2 => match pid {
|
||||
PID_AJAZZ_AKP153 => Some(Kind::Akp153),
|
||||
PID_AJAZZ_E_AKP153E => Some(Kind::Akp153E),
|
||||
PID_AJAZZ_AKP153E => Some(Kind::Akp153E),
|
||||
PID_AJAZZ_AKP153R => Some(Kind::Akp153R),
|
||||
PID_AJAZZ_AKP815 => Some(Kind::Akp815),
|
||||
PID_MIRABOX_HSV293S => Some(Kind::MiraBoxHSV293S),
|
||||
_ => None,
|
||||
@@ -125,7 +131,8 @@ impl Kind {
|
||||
Kind::Plus => PID_STREAMDECK_PLUS,
|
||||
Kind::Akp153 => PID_AJAZZ_AKP153,
|
||||
Kind::Akp815 => PID_AJAZZ_AKP815,
|
||||
Kind::Akp153E => PID_AJAZZ_E_AKP153E,
|
||||
Kind::Akp153E => PID_AJAZZ_AKP153E,
|
||||
Kind::Akp153R => PID_AJAZZ_AKP153R,
|
||||
Kind::MiraBoxHSV293S => PID_MIRABOX_HSV293S,
|
||||
}
|
||||
}
|
||||
@@ -146,6 +153,7 @@ impl Kind {
|
||||
Kind::Akp153 => AJAZZ_VENDOR_ID_1,
|
||||
Kind::Akp815 => AJAZZ_VENDOR_ID_1,
|
||||
Kind::Akp153E => AJAZZ_VENDOR_ID_2,
|
||||
Kind::Akp153R => AJAZZ_VENDOR_ID_2,
|
||||
Kind::MiraBoxHSV293S => AJAZZ_VENDOR_ID_1,
|
||||
}
|
||||
}
|
||||
@@ -158,7 +166,7 @@ impl Kind {
|
||||
Kind::Xl | Kind::XlV2 => 32,
|
||||
Kind::Pedal => 3,
|
||||
Kind::Neo | Kind::Plus => 8,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S => 15 + 3,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 15 + 3,
|
||||
Kind::Akp815 => 15,
|
||||
}
|
||||
}
|
||||
@@ -171,7 +179,7 @@ impl Kind {
|
||||
Kind::Xl | Kind::XlV2 => 4,
|
||||
Kind::Pedal => 1,
|
||||
Kind::Neo | Kind::Plus => 2,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S => 3,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 3,
|
||||
Kind::Akp815 => 5,
|
||||
}
|
||||
}
|
||||
@@ -184,7 +192,7 @@ impl Kind {
|
||||
Kind::Xl | Kind::XlV2 => 8,
|
||||
Kind::Pedal => 3,
|
||||
Kind::Neo | Kind::Plus => 4,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S => 6,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => 6,
|
||||
Kind::Akp815 => 3,
|
||||
}
|
||||
}
|
||||
@@ -210,7 +218,7 @@ impl Kind {
|
||||
match self {
|
||||
Kind::Plus => Some((800, 100)),
|
||||
Kind::Neo => Some((248, 58)),
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S => Some((854, 480)),
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => Some((854, 480)),
|
||||
Kind::Akp815 => Some((800, 480)),
|
||||
_ => None,
|
||||
}
|
||||
@@ -269,7 +277,7 @@ impl Kind {
|
||||
|
||||
Kind::Pedal => ImageFormat::default(),
|
||||
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S => ImageFormat {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S => ImageFormat {
|
||||
mode: ImageMode::JPEG,
|
||||
size: (85, 85),
|
||||
rotation: ImageRotation::Rot90,
|
||||
|
||||
+19
-19
@@ -223,7 +223,7 @@ impl StreamDeck {
|
||||
}
|
||||
self.initialized.store(true, Ordering::Release);
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x44, 0x49, 0x53];
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
write_data(&self.device, buf.as_slice())?;
|
||||
@@ -260,7 +260,7 @@ impl StreamDeck {
|
||||
}
|
||||
}
|
||||
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let data = match self.kind {
|
||||
_ => read_data(&self.device, 512, timeout),
|
||||
}?;
|
||||
@@ -312,7 +312,7 @@ impl StreamDeck {
|
||||
Ok(send_feature_report(&self.device, buf.as_slice())?)
|
||||
}
|
||||
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => Ok({
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => Ok({
|
||||
self.set_brightness(100)?;
|
||||
self.clear_button_image(0xff)?;
|
||||
}),
|
||||
@@ -341,7 +341,7 @@ impl StreamDeck {
|
||||
Ok(send_feature_report(&self.device, buf.as_slice())?)
|
||||
}
|
||||
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x4c, 0x49, 0x47, 0x00, 0x00, percent];
|
||||
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
@@ -368,7 +368,7 @@ impl StreamDeck {
|
||||
|
||||
let key = if let Kind::Original = self.kind {
|
||||
flip_key_index(&self.kind, key)
|
||||
} else if let Kind::Akp153 | Kind::Akp153E | Kind::MiraBoxHSV293S = self.kind {
|
||||
} else if let Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::MiraBoxHSV293S = self.kind {
|
||||
elgato_to_ajazz153(&self.kind, key)
|
||||
} else if let Kind::Akp815 = self.kind {
|
||||
inverse_key_index(&self.kind, key)
|
||||
@@ -381,7 +381,7 @@ impl StreamDeck {
|
||||
}
|
||||
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![
|
||||
0x43,
|
||||
0x52,
|
||||
@@ -414,7 +414,7 @@ impl StreamDeck {
|
||||
|
||||
Kind::Mini | Kind::MiniMk2 => vec![0x02, 0x01, page_number as u8, 0, if last_package { 1 } else { 0 }, key + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => vec![],
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => vec![],
|
||||
|
||||
_ => vec![
|
||||
0x02,
|
||||
@@ -554,7 +554,7 @@ impl StreamDeck {
|
||||
pub fn clear_button_image(&self, key: u8) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let key = if self.kind == Kind::Akp815 {
|
||||
inverse_key_index(&self.kind, key)
|
||||
} else {
|
||||
@@ -579,7 +579,7 @@ impl StreamDeck {
|
||||
pub fn clear_all_button_images(&self) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => self.clear_button_image(0xff),
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => self.clear_button_image(0xff),
|
||||
_ => {
|
||||
for i in 0..self.kind.key_count() {
|
||||
self.clear_button_image(i)?
|
||||
@@ -601,7 +601,7 @@ impl StreamDeck {
|
||||
pub fn set_logo_image(&self, image: DynamicImage) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => (),
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => (),
|
||||
_ => return Err(StreamDeckError::UnsupportedOperation),
|
||||
}
|
||||
|
||||
@@ -676,13 +676,13 @@ impl StreamDeck {
|
||||
|
||||
let image_report_length = match self.kind {
|
||||
Kind::Original => 8191,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => 512,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => 512,
|
||||
_ => 1024,
|
||||
};
|
||||
|
||||
let image_report_header_length = match self.kind {
|
||||
Kind::Original | Kind::Mini | Kind::MiniMk2 => 16,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => 0,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => 0,
|
||||
_ => 8,
|
||||
};
|
||||
|
||||
@@ -735,7 +735,7 @@ impl StreamDeck {
|
||||
pub fn sleep(&self) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x48, 0x41, 0x4e];
|
||||
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
@@ -753,7 +753,7 @@ impl StreamDeck {
|
||||
pub fn keep_alive(&self) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x43, 0x4F, 0x4E, 0x4E, 0x45, 0x43, 0x54];
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
write_data(&self.device, buf.as_slice())?;
|
||||
@@ -768,7 +768,7 @@ impl StreamDeck {
|
||||
pub fn shutdown(&self) -> Result<(), StreamDeckError> {
|
||||
self.initialize()?;
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x43, 0x4c, 0x45, 0x00, 0x00, 0x44, 0x43];
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
write_data(&self.device, buf.as_slice())?;
|
||||
@@ -797,7 +797,7 @@ impl StreamDeck {
|
||||
}
|
||||
|
||||
match self.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
let mut buf = vec![0x43, 0x52, 0x54, 0x00, 0x00, 0x53, 0x54, 0x50];
|
||||
|
||||
buf.extend(vec![0u8; 512 - buf.len()]);
|
||||
@@ -866,13 +866,13 @@ impl WriteImageParameters {
|
||||
pub fn for_key(kind: Kind, image_data_len: usize) -> Self {
|
||||
let image_report_length = match kind {
|
||||
Kind::Original => 8191,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => 512,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => 512,
|
||||
_ => 1024,
|
||||
};
|
||||
|
||||
let image_report_header_length = match kind {
|
||||
Kind::Original | Kind::Mini | Kind::MiniMk2 => 16,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => 0,
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => 0,
|
||||
_ => 8,
|
||||
};
|
||||
|
||||
@@ -1025,7 +1025,7 @@ impl DeviceStateReader {
|
||||
StreamDeckInput::ButtonStateChange(buttons) => {
|
||||
for (index, (their, mine)) in zip(buttons.iter(), my_states.buttons.iter()).enumerate() {
|
||||
match self.device.kind {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
Kind::Akp153 | Kind::Akp153E | Kind::Akp153R | Kind::Akp815 | Kind::MiraBoxHSV293S => {
|
||||
if *their {
|
||||
updates.push(DeviceStateUpdate::ButtonDown(index as u8));
|
||||
updates.push(DeviceStateUpdate::ButtonUp(index as u8));
|
||||
|
||||
Reference in new issue
Block a user