Перейти к содержимому

Выделение RGB-данных из USB-захватов

Это руководство покажет, как расшифровать USB-данные для реализации устройств в SignalRGB.

Прежде чем пытаться интерпретировать захват USB-данных, необходимо отсортировать его для поиска конкретных пакетов.

В Wireshark:

  1. Откройте захват USB-данных
  2. Нажмите на заголовок «Info» для сортировки по типу пакета
  3. Прокручивайте, пока не найдёте пакеты типа URB_INTERRUPT OUT или SET_REPORT Request

Если ни одна из перечисленных выше команд не найдена, возможно, вы работаете с RAWUSB-устройством или захват был выполнен некорректно. Для RAWUSB-устройств вы увидите команды URB_BULK_OUT или URB_CONTROL OUT. Если у вас RAWUSB-устройство, присоединитесь к серверу Discord для помощи по разработке.

Первые пакеты, которые мы ищем, — те, что содержат RGB-значения, установленные при создании захвата USB-пакетов.

Примечание: Пакеты инициализации устройства намеренно игнорируются на данном этапе. Они могут потребоваться позже.

Данные, передаваемые в каждом пакете, следуют после всей информации заголовка протокола USB. Чтобы увидеть их:

  1. Выберите пакет
  2. Выберите поле HID Data или разверните раздел Setup Data и выберите поле Data Fragment
  3. Нажатие на поле также выделит раздел данных синим цветом в нижней части Wireshark
  4. Выбранное поле также покажет отправленные данные без пробелов. В этом виде каждые 2 символа — один байт.

Примечание: Рассматриваемые значения представлены в HEX (шестнадцатеричном формате, основание 16) — формате данных, представляющем значения от 0 до 255 в десятичной форме как значения от 0x00 до 0xFF.

Поскольку в руководстве по захвату USB-данных мы устанавливали красный, зелёный и синий на максимальные значения, мы будем искать значения 0xFF в захвате пакетов. Если вы использовали другие цвета, вам нужно знать конкретный HEX-цвет или сделать повторный захват с известными цветами.

Традиционно пакеты освещения устройства содержат заголовок, указывающий команду и зону освещения устройства, за которым следуют RGB-данные и редко — данные в конце, например контрольная сумма CRC.

RGB-данные обычно следуют нескольким форматам, которые можно проверить, ища цвета из захвата:

  • R, G, B, R, G, B, R, G, B (Красный → Зелёный → Синий → Повтор)
  • RRR, GGG, BBB (Несколько Красных → Несколько Зелёных → Несколько Синих → Повтор)
  • Br, R, G, B (Яркость → Красный → Зелёный → Синий → Повтор)

Примечание: Некоторые устройства используют другой порядок цветов. Хотя большинство используют RGB, ваше устройство может использовать GBR, BGR или другую комбинацию.

В нашем случае искомые значения:

  • 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (если устройство использует порядок R,G,B).
  • 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (если устройство использует порядок RRR,GGG,BBB).
  • 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (если устройство использует порядок Br,R,G,B)

Примечание: Приведённые примеры — лишь некоторые распространённые структуры пакетов и применимы не всегда. Необходимо сравнивать и искать сходства.

Прокручивая пакеты вниз, мы обнаруживаем, что пакет 271 в нашем захвате содержит байты, похожие на структуру пакета R,G,B.

Примечание: Некоторые устройства могут использовать несколько пакетов для установки цветов на всём устройстве. Обязательно посмотрите следующие пакеты и убедитесь, что находите место повтора начального пакета.

Пометим этот пакет с помощью функции MARK/UNMARK Packet в Wireshark, которую можно вызвать одновременным нажатием CTRL + M или правой кнопкой мыши на пакете и выбором MARK/UNMARK Packet.

Чтобы убедиться, что пакет действительно является пакетом цветовых данных, продолжайте прокрутку в поисках дополнительных пакетов со структурой R,G,B. Также проверяйте, следуют ли эти пакеты порядку, в котором устанавливались цвета в исходном программном обеспечении. Это хорошее время для изучения заголовков пакетов: если они изменяются по шаблону, скорее всего потребуется несколько пакетов для установки всех светодиодов устройства.

Сравнивая пакеты 271, 273 и 275 рядом, мы видим, что RGB-данные выглядят как только красный в пакете 271 (0xFF, 0x00, 0x00), только зелёный в пакете 273 (0x00, 0xFF, 0x00) и только синий в пакете 275 (0x00, 0x00, 0xFF). Глядя на данные заголовка выше RGB-секции, видим, что эти данные не изменяются между тремя пакетами. Скорее всего это означает, что мы изменяем одни и те же цветовые зоны в этих пакетах.

  • Также заметим, что цветовые пакеты можно использовать для определения количества зон устройства. Это делается путём подсчёта количества вхождений известных значений в RGB-пакетах. Глядя на пример ниже, видим, что устройство имеет 4 зоны, которыми мы определённо можем управлять.

Продолжайте прокрутку пакетов, пока не найдёте и не пометите все пакеты с цветовыми данными. После этого перейдём к созданию файла плагина.