2026-04-17 16:25:19 +08:00
|
|
|
|
#pragma once
|
2026-03-26 10:45:29 +08:00
|
|
|
|
|
|
|
|
|
|
#include <QtCore/QByteArray>
|
|
|
|
|
|
#include <QtCore/QString>
|
|
|
|
|
|
|
2026-04-17 16:25:19 +08:00
|
|
|
|
// Shared protocol constants and raw packet definitions.
|
2026-03-26 10:45:29 +08:00
|
|
|
|
|
|
|
|
|
|
enum Mid_Enum_ReportId : quint8
|
|
|
|
|
|
{
|
|
|
|
|
|
Mid_Enum_ReportId_None = 0x00,
|
|
|
|
|
|
Mid_Enum_ReportId_Nkro = 0x01,
|
|
|
|
|
|
Mid_Enum_ReportId_Consumer = 0x03,
|
2026-04-17 16:25:19 +08:00
|
|
|
|
Mid_Enum_ReportId_Vendor = 0x04,
|
|
|
|
|
|
Mid_Enum_ReportId_VendorCommand = 0x05
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum Mid_Enum_RawPacketSource : quint8
|
|
|
|
|
|
{
|
|
|
|
|
|
Mid_Enum_RawPacketSource_None = 0,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_UsbNkroRaw,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_UsbConsumerHid,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_UsbVendorHid,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_BleGatt,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_BleHidKeyboard,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_BleHidConsumer,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_BleHidVendor,
|
|
|
|
|
|
Mid_Enum_RawPacketSource_BleHidVendorCommand
|
2026-03-26 10:45:29 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const quint16 MID_CONST_VENDOR_ID_DEFAULT = 0x1209;
|
|
|
|
|
|
const quint16 MID_CONST_PRODUCT_ID_DEFAULT = 0x0001;
|
|
|
|
|
|
|
|
|
|
|
|
struct Mid_Struct_DeviceConfig
|
|
|
|
|
|
{
|
|
|
|
|
|
quint16 VendorId = MID_CONST_VENDOR_ID_DEFAULT;
|
|
|
|
|
|
quint16 ProductId = MID_CONST_PRODUCT_ID_DEFAULT;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct Mid_Struct_DeviceMatch
|
|
|
|
|
|
{
|
|
|
|
|
|
quint16 VendorId = 0;
|
|
|
|
|
|
quint16 ProductId = 0;
|
|
|
|
|
|
quint16 UsagePage = 0;
|
|
|
|
|
|
quint16 Usage = 0;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct Mid_Struct_RawPacket
|
|
|
|
|
|
{
|
|
|
|
|
|
bool IsValid = false;
|
2026-04-17 16:25:19 +08:00
|
|
|
|
Mid_Enum_RawPacketSource Source = Mid_Enum_RawPacketSource_None;
|
2026-03-26 10:45:29 +08:00
|
|
|
|
QByteArray ByteArray;
|
|
|
|
|
|
QString PortName;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_PAGE_NKRO = 0x0001;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_NKRO = 0x0006;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_PAGE_CONSUMER = 0x000C;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_CONSUMER = 0x0001;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_PAGE_VENDOR = 0xFF00;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_VENDOR = 0x0002;
|
2026-04-17 16:25:19 +08:00
|
|
|
|
const quint16 MID_CONST_USAGE_PAGE_VENDOR_COMMAND = 0xFF01;
|
|
|
|
|
|
const quint16 MID_CONST_USAGE_VENDOR_COMMAND = 0x0005;
|
2026-03-26 10:45:29 +08:00
|
|
|
|
const int MID_CONST_KEYBOARD_USAGE_MAX = 0x00E7;
|
|
|
|
|
|
const int MID_CONST_USAGE_BITMAP_SIZE = 29;
|
|
|
|
|
|
const int MID_CONST_PACKET_SIZE_NKRO = 31;
|
|
|
|
|
|
const int MID_CONST_PACKET_SIZE_VENDOR = 31;
|
2026-04-17 16:25:19 +08:00
|
|
|
|
const int MID_CONST_PACKET_SIZE_VENDOR_COMMAND = 10;
|
|
|
|
|
|
const int MID_CONST_PACKET_SIZE_VENDOR_COMMAND_DATA = 8;
|
2026-03-26 10:45:29 +08:00
|
|
|
|
const int MID_CONST_PACKET_SIZE_CONSUMER = 3;
|
2026-04-17 16:25:19 +08:00
|
|
|
|
bool Mid_FindHidInterface(
|
2026-03-26 10:45:29 +08:00
|
|
|
|
const Mid_Struct_DeviceMatch& Match,
|
|
|
|
|
|
QString* p_DevicePath,
|
|
|
|
|
|
quint16* p_InputLength,
|
2026-04-17 16:25:19 +08:00
|
|
|
|
quint16* p_OutputLength,
|
|
|
|
|
|
QString* p_DeviceInstanceId = nullptr);
|
|
|
|
|
|
bool Mid_IsBluetoothHidInstanceId(const QString& DeviceInstanceId);
|
|
|
|
|
|
QString Mid_GetHexText(const QByteArray& ByteArray);
|
|
|
|
|
|
QString Mid_GetModifierText(quint8 Modifier);
|
|
|
|
|
|
QString Mid_GetKeyboardUsageText(quint16 Usage);
|
|
|
|
|
|
QString Mid_GetConsumerUsageText(quint16 Usage);
|
|
|
|
|
|
|