Ingresar:     


Forum: VirtualDJ Technical Support

Tópico: Maschine MK3 screens
Hi there,
A friend of mine want to be able to use Maschine MK3 screens plus pads for some gigs.
I am trying to dig into it, will someone help me to put that in order ?
Been capturing USB packets between NI Maschine 2 & Maschine MK3.
Found this :

Résolution : 480×272 pixels (by screen)
Pixel : RGB565 (16-bit per pixel)
Taille de frame : 480 × 272 × 2 = 261,120 bytes by screen

USB Interface
Data :
Interface #5 : Vendor-specific (Class 0xFF)
Endpoint : Bulk OUT (0x04)
Type de transfert : USB Bulk Transfer

Séquence :
├─ Paquet 1 : 107 bytes (Header 1)
├─ Paquet 2 : 107 bytes (Header 2)
├─ Paquet 3 : 491 bytes (Pixels data)
└─ Paquet 4 : 875 bytes (Pixels data - often empty)

Header
struct DisplayHeader {
uint32_t magic; // 0x2A080008 (magic number)
uint32_t reserved1; // 0x00000000
uint32_t reserved2; // 0x00000000
// ... métadonnées de position/région
// 95 bytes de données additionnelles
};

Pixels data

Total sequence : 491 + 875 = 1,366 bytes
coded pixels : 1,366 / 2 = 683 pixels en RGB565
sequences for 1 frame : ~191 sequences

Is this enough to do a plugin and what will be the process ?
create plugin, Initialise USB, send frame, convert rgb ?
@djdad ?
Thank you,
 

Mensajes 6 hours ago
Not tested, corrected

<?xml version="1.0" encoding="UTF-8"?>
<!--
VirtualDJ Device Definition - Native Instruments Maschine MK3

Author: Tim
Date: 2024-12-21

-->

<device name="MASCHINE_MK3"
author="Tim/CABL/Community"
type="HID"
decks="2"
vid="0x17CC"
pid="0x1600"
reportsize="256">

<!-- Interface audio intégrée (optionnelle) -->
<audio input="0" output="2" mic="yes" />

<!-- ========================================= -->
<!-- INPUT - Contrôles physiques -->
<!-- ========================================= -->

<page type="in">

<!-- ========================================= -->
<!-- TRANSPORT SECTION (en haut à gauche) -->
<!-- ========================================= -->
<button bit="0x00" name="RESTART" />
<button bit="0x01" name="ERASE" />
<button bit="0x02" name="TAP" />
<button bit="0x03" name="FOLLOW" />
<button bit="0x04" name="PLAY" />
<button bit="0x05" name="REC" />
<button bit="0x06" name="STOP" />
<button bit="0x07" name="SHIFT" />

<!-- ========================================= -->
<!-- GROUP BUTTONS A-H (en haut) -->
<!-- ========================================= -->
<button bit="0x08" name="GROUP_A" />
<button bit="0x09" name="GROUP_B" />
<button bit="0x0A" name="GROUP_C" />
<button bit="0x0B" name="GROUP_D" />
<button bit="0x0C" name="GROUP_E" />
<button bit="0x0D" name="GROUP_F" />
<button bit="0x0E" name="GROUP_G" />
<button bit="0x0F" name="GROUP_H" />

<!-- ========================================= -->
<!-- CONTROL ZONE (en haut à droite) -->
<!-- ========================================= -->
<button bit="0x10" name="ARRANGER" />
<button bit="0x11" name="MIX" />
<button bit="0x12" name="PLUG_IN" />
<button bit="0x13" name="SAMPLING" />
<button bit="0x14" name="FILE" />
<button bit="0x15" name="SETTINGS" />
<button bit="0x16" name="AUTO" />

<!-- ========================================= -->
<!-- SCREEN BUTTONS 1-8 (au-dessus écrans) -->
<!-- ========================================= -->
<button bit="0x18" name="BUTTON_1" />
<button bit="0x19" name="BUTTON_2" />
<button bit="0x1A" name="BUTTON_3" />
<button bit="0x1B" name="BUTTON_4" />
<button bit="0x1C" name="BUTTON_5" />
<button bit="0x1D" name="BUTTON_6" />
<button bit="0x1E" name="BUTTON_7" />
<button bit="0x1F" name="BUTTON_8" />

<!-- ========================================= -->
<!-- KNOBS 1-8 (en-dessous des écrans) -->
<!-- Touch-sensitive encoders -->
<!-- ========================================= -->
<encoder bit="0x40" size="1" name="KNOB_1" />
<encoder bit="0x41" size="1" name="KNOB_2" />
<encoder bit="0x42" size="1" name="KNOB_3" />
<encoder bit="0x43" size="1" name="KNOB_4" />
<encoder bit="0x44" size="1" name="KNOB_5" />
<encoder bit="0x45" size="1" name="KNOB_6" />
<encoder bit="0x46" size="1" name="KNOB_7" />
<encoder bit="0x47" size="1" name="KNOB_8" />

<!-- Knob touch detection -->
<button bit="0x48" name="KNOB_1_TOUCH" />
<button bit="0x49" name="KNOB_2_TOUCH" />
<button bit="0x4A" name="KNOB_3_TOUCH" />
<button bit="0x4B" name="KNOB_4_TOUCH" />
<button bit="0x4C" name="KNOB_5_TOUCH" />
<button bit="0x4D" name="KNOB_6_TOUCH" />
<button bit="0x4E" name="KNOB_7_TOUCH" />
<button bit="0x4F" name="KNOB_8_TOUCH" />

<!-- ========================================= -->
<!-- CONTROL BUTTONS (sous les knobs) -->
<!-- ========================================= -->
<button bit="0x50" name="CHANNEL" />
<button bit="0x51" name="PLUGIN" />
<button bit="0x52" name="MACRO" />
<button bit="0x53" name="PERFORM" />
<button bit="0x54" name="NOTES" />

<!-- ========================================= -->
<!-- 4D ENCODER (central) -->
<!-- ========================================= -->
<encoder bit="0x60" size="1" name="ENCODER_4D" />
<button bit="0x61" name="ENCODER_4D_PUSH" />
<button bit="0x62" name="ENCODER_4D_UP" />
<button bit="0x63" name="ENCODER_4D_DOWN" />
<button bit="0x64" name="ENCODER_4D_LEFT" />
<button bit="0x65" name="ENCODER_4D_RIGHT" />

<!-- ========================================= -->
<!-- ENCODER MODE BUTTONS (à droite du 4D) -->
<!-- ========================================= -->
<button bit="0x68" name="VOLUME" />
<button bit="0x69" name="SWING" />
<button bit="0x6A" name="TEMPO" />
<button bit="0x6B" name="NOTE_REPEAT" />
<button bit="0x6C" name="LOCK" />

<!-- ========================================= -->
<!-- PAGE BUTTONS (sous 4D encoder) -->
<!-- ========================================= -->
<button bit="0x70" name="PAGE_LEFT" />
<button bit="0x71" name="PAGE_RIGHT" />
<button bit="0x72" name="BROWSER" />

<!-- ========================================= -->
<!-- MODE BUTTONS (colonne gauche des pads) -->
<!-- ========================================= -->
<button bit="0x80" name="SCENE" />
<button bit="0x81" name="PATTERN" />
<button bit="0x82" name="PAD_MODE" />
<button bit="0x83" name="NAVIGATE" />
<button bit="0x84" name="DUPLICATE" />
<button bit="0x85" name="SELECT" />
<button bit="0x86" name="SOLO" />
<button bit="0x87" name="MUTE" />

<!-- ========================================= -->
<!-- PAD INPUT MODE (au-dessus des pads) -->
<!-- ========================================= -->
<button bit="0x88" name="KEYBOARD" />
<button bit="0x89" name="CHORDS" />
<button bit="0x8A" name="STEP" />
<button bit="0x8B" name="FIXED_VEL" />

<!-- ========================================= -->
<!-- VARIATION & PITCH -->
<!-- ========================================= -->
<button bit="0x8C" name="VARIATION" />
<button bit="0x8D" name="PITCH" />

<!-- ========================================= -->
<!-- 16 PADS - Velocity Sensitive RGB -->
<!-- Layout: Pad 1 = bottom-left -->
<!-- Pad 16 = top-right -->
<!-- ========================================= -->
<slider bit="0x100" size="2" name="PAD_1" min="0" max="4093" />
<slider bit="0x103" size="2" name="PAD_2" min="0" max="4093" />
<slider bit="0x106" size="2" name="PAD_3" min="0" max="4093" />
<slider bit="0x109" size="2" name="PAD_4" min="0" max="4093" />
<slider bit="0x10C" size="2" name="PAD_5" min="0" max="4093" />
<slider bit="0x10F" size="2" name="PAD_6" min="0" max="4093" />
<slider bit="0x112" size="2" name="PAD_7" min="0" max="4093" />
<slider bit="0x115" size="2" name="PAD_8" min="0" max="4093" />
<slider bit="0x118" size="2" name="PAD_9" min="0" max="4093" />
<slider bit="0x11B" size="2" name="PAD_10" min="0" max="4093" />
<slider bit="0x11E" size="2" name="PAD_11" min="0" max="4093" />
<slider bit="0x121" size="2" name="PAD_12" min="0" max="4093" />
<slider bit="0x124" size="2" name="PAD_13" min="0" max="4093" />
<slider bit="0x127" size="2" name="PAD_14" min="0" max="4093" />
<slider bit="0x12A" size="2" name="PAD_15" min="0" max="4093" />
<slider bit="0x12D" size="2" name="PAD_16" min="0" max="4093" />

<!-- ========================================= -->
<!-- SMART STRIP (touchstrip) -->
<!-- ========================================= -->
<slider bit="0x140" size="2" name="TOUCHSTRIP" min="0" max="1023" />
<button bit="0x142" name="TOUCHSTRIP_TOUCH" />

<!-- ========================================= -->
<!-- MASTER VOLUME KNOB -->
<!-- ========================================= -->
<slider bit="0x150" size="2" name="MASTER_VOLUME" min="0" max="1023" />

</page>

<!-- ========================================= -->
<!-- OUTPUT - LEDs & Feedback -->
<!-- ========================================= -->

<page type="out">

<!-- Transport LEDs -->
<led bit="0x00" name="LED_PLAY" />
<led bit="0x01" name="LED_REC" />
<led bit="0x02" name="LED_STOP" />

<!-- Group LEDs (RGB) -->
<led bit="0x08" name="LED_GROUP_A" />
<led bit="0x09" name="LED_GROUP_B" />
<led bit="0x0A" name="LED_GROUP_C" />
<led bit="0x0B" name="LED_GROUP_D" />
<led bit="0x0C" name="LED_GROUP_E" />
<led bit="0x0D" name="LED_GROUP_F" />
<led bit="0x0E" name="LED_GROUP_G" />
<led bit="0x0F" name="LED_GROUP_H" />

<!-- Pad LEDs (RGB - 16 pads) -->
<led bit="0x100" name="LED_PAD_1" />
<led bit="0x103" name="LED_PAD_2" />
<led bit="0x106" name="LED_PAD_3" />
<led bit="0x109" name="LED_PAD_4" />
<led bit="0x10C" name="LED_PAD_5" />
<led bit="0x10F" name="LED_PAD_6" />
<led bit="0x112" name="LED_PAD_7" />
<led bit="0x115" name="LED_PAD_8" />
<led bit="0x118" name="LED_PAD_9" />
<led bit="0x11B" name="LED_PAD_10" />
<led bit="0x11E" name="LED_PAD_11" />
<led bit="0x121" name="LED_PAD_12" />
<led bit="0x124" name="LED_PAD_13" />
<led bit="0x127" name="LED_PAD_14" />
<led bit="0x12A" name="LED_PAD_15" />
<led bit="0x12D" name="LED_PAD_16" />

<!-- Mode button LEDs -->
<led bit="0x80" name="LED_SCENE" />
<led bit="0x81" name="LED_PATTERN" />
<led bit="0x82" name="LED_PAD_MODE" />
<led bit="0x84" name="LED_DUPLICATE" />
<led bit="0x86" name="LED_SOLO" />
<led bit="0x87" name="LED_MUTE" />

</page>

<!-- Initialisation -->
<page type="init">
<constant buffer="01000000" />
</page>

<!-- Exit -->
<page type="exit">
<constant buffer="00000000" />
</page>

</device>