Lewati ke konten

Mengisolasi Data RGB dalam Tangkapan USB

Tutorial ini akan menunjukkan cara mendekode Data USB untuk mengimplementasikan perangkat di SignalRGB.

Sebelum kami dapat mencoba menginterpretasikan Tangkapan Data USB, kami perlu menyortirnya untuk menemukan beberapa paket tertentu.

Di Wireshark:

  1. Buka Tangkapan Data USB
  2. Klik pada header ‘Info’ untuk menyortir berdasarkan tipe paket
  3. Gulir ke bawah hingga Anda menemukan tipe URB_INTERRUPT OUT atau SET_REPORT Request

Jika Anda tidak menemukan salah satu dari perintah di atas, Anda mungkin bekerja dengan perangkat RAWUSB atau mungkin tidak melakukan tangkapan dengan benar. Jika Anda memiliki perangkat RAWUSB, Anda akan melihat perintah URBBULK_OUT atau URB_CONTROL OUT. Jika Anda memiliki perangkat RAWUSB, bergabunglah dengan server discord ini untuk bantuan pengembangan.

Paket yang akan kami cari pertama adalah yang berisi nilai RGB yang kami tetapkan saat mengambil tangkapan paket USB kami.

Catatan: Kami dengan sengaja akan mengabaikan paket inisialisasi perangkat untuk saat ini. Ini mungkin diperlukan nanti.

Data yang dikirim dalam setiap paket datang setelah semua info header protokol USB. Untuk melihat ini kita perlu menemukan bagian Data Fragment.

  1. Pilih sebuah paket
  2. Pilih field HID Data atau Perluas bagian Setup Data dan pilih field Data Fragment
  3. Mengklik field tersebut juga harus menyorot bagian data dengan warna biru di bagian bawah Wireshark
  4. Field yang dipilih juga akan menampilkan data yang dikirim tanpa spasi. Setiap 2 karakter adalah satu byte dalam tampilan ini.

Catatan: Nilai yang kami lihat akan dalam format HEX (basis 16) yang merupakan format data yang merepresentasikan 0 hingga 255 dalam desimal sebagai nilai 0x00 hingga 0xFF.

Karena kami menetapkan merah, hijau, dan biru ke nilai maksimumnya dalam panduan USB Data Capture kami, kami akan mencari nilai 0xFF dalam tangkapan paket. Jika Anda menggunakan warna yang berbeda dalam tangkapan Anda, Anda perlu mengetahui warna HEX spesifik yang digunakan atau menangkap ulang dengan warna yang diketahui.

Secara tradisional paket pencahayaan untuk suatu perangkat berisi header yang menandakan perintah apa yang dimaksud oleh paket tersebut dan zona pencahayaan perangkat mana yang kami tangani, diikuti oleh data RGB dan jarang ada data footer seperti checksum CRC.

Data RGB biasanya mengikuti beberapa format yang dapat kami periksa dengan mencari warna yang kami tetapkan dalam tangkapan kami:

  • R, G, B, R, G, B, R, G, B (Merah -> Hijau -> Biru -> Ulangi)
  • RRR, GGG, BBB (Beberapa Merah -> Beberapa Hijau -> Beberapa Biru -> Ulangi)
  • Br, R, G, B (Kecerahan -> Merah -> Hijau -> Biru -> Ulangi)

Catatan: Beberapa perangkat akan menggunakan urutan warna yang berbeda. Meskipun sebagian besar menggunakan RGB, Anda mungkin menemukan perangkat Anda menggunakan GBR, BGR, atau kombinasi lain.

Dalam kasus kami, nilai yang kami cari adalah:

  • 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (jika perangkat menggunakan urutan paket R,G,B).
  • 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (jika perangkat menggunakan urutan paket RRR,GGG,BBB).
  • 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (jika perangkat menggunakan urutan paket Br,R,G,B)

Catatan: Contoh-contoh di atas hanyalah beberapa struktur paket umum untuk perangkat, dan mungkin tidak selalu berlaku. Anda perlu membandingkan dan mencari kesamaan.

Menggulir ke bawah melalui paket, kami menemukan bahwa paket 271 dalam tangkapan kami berisi byte yang terlihat mirip dengan struktur paket R,G,B.

Catatan: Beberapa perangkat mungkin menggunakan beberapa paket untuk mengatur warna di seluruh perangkat. Pastikan Anda melihat paket berikutnya dan memastikan Anda menemukan di mana paket awal berulang.

Kami akan menandai paket ini dengan menggunakan fungsi MARK/UNMARK Packet di Wireshark, yang dapat dilakukan dengan menekan tombol CTRL + M secara bersamaan atau klik kanan paket dan klik MARK/UNMARK Packet.

Untuk mengonfirmasi bahwa paket ini sebenarnya adalah salah satu paket data warna kami, kami akan terus menggulir ke bawah untuk mencari lebih banyak paket yang sesuai dengan struktur R,G,B kami. Kami juga akan melihat apakah paket-paket ini mengikuti urutan yang kami tetapkan warna dalam software aslinya. Ini adalah waktu yang baik untuk melihat header paket dan melihat apakah mereka berubah. Jika mereka berubah dalam pola, kemungkinan besar Anda akan memerlukan beberapa paket untuk mengatur semua LED pada perangkat.

Melihat paket 271, paket 273, dan paket 275 secara bersamaan, kita dapat melihat bahwa data RGB terlihat hanya Merah pada paket 271 (0xFF, 0x00, 0x00), hanya Hijau pada paket 273 (0x00, 0xFF, 0x00), dan hanya Biru pada paket 275 (0x00, 0x00, 0xFF). Melihat data header di atas bagian RGB, kami dapat melihat bahwa data ini tidak berubah di antara tiga paket. Ini kemungkinan besar berarti bahwa kami mengubah zona warna yang sama dalam paket-paket ini.

  • Juga perlu dicatat, kami dapat menggunakan paket warna untuk menentukan berapa banyak zona yang dimiliki perangkat. Kami dapat menemukan ini dengan memeriksa berapa kali nilai yang diketahui terjadi dalam paket data RGB. Melihat contoh di bawah, kami melihat bahwa perangkat memiliki 4 zona yang pasti dapat kami tangani.

Kami akan terus turun melalui paket kami hingga menemukan semua paket yang berisi data warna dan telah menandai semuanya. Setelah itu kami akan melanjutkan ke membuat file plugin kami.