Skip to content

Mengasingkan Data RGB dalam Tangkapan USB

Tutorial ini akan menunjukkan cara menyahkod Data USB untuk melaksanakan peranti dalam SignalRGB.

Sebelum kita boleh cuba menafsirkan Tangkapan Data USB, kita perlu mengisihnya untuk mencari beberapa paket tertentu.

Dalam Wireshark:

  1. Buka Tangkapan Data USB
  2. Klik pada pengepala ‘Info’ untuk mengisih mengikut jenis paket
  3. Tatal sehingga Anda menemui sama ada jenis URB_INTERRUPT OUT atau SET_REPORT Request

Jika Anda tidak menemui salah satu daripada arahan di atas, Anda mungkin sedang bekerja dengan peranti RAWUSB atau Anda mungkin tidak melakukan tangkapan dengan betul. Jika Anda mempunyai peranti RAWUSB, Anda akan melihat arahan URBBULK_OUT atau URB_CONTROL OUT. Jika Anda mempunyai peranti RAWUSB, sertai pelayan discord ini untuk bantuan pembangunan.

Paket yang kita cari dahulu adalah yang mengandungi nilai RGB yang kita tetapkan semasa mengambil tangkapan paket USB.

Nota: Kita sengaja akan mengabaikan paket permulaan peranti buat masa ini. Ini mungkin diperlukan kemudian.

Data yang dihantar dalam setiap paket datang selepas semua maklumat pengepala protokol USB. Untuk melihat ini kita perlu mencari bahagian Fragmen Data.

  1. Pilih paket
  2. Pilih medan HID Data atau Kembangkan bahagian Setup Data dan pilih medan Data Fragment
  3. Mengklik medan itu juga seharusnya menyerlahkan bahagian data dalam warna biru di bahagian bawah Wireshark
  4. Medan yang dipilih juga akan menunjukkan data yang dihantar tanpa jarak. Setiap 2 aksara adalah satu bait dalam paparan ini.

Nota: Nilai yang kita lihat akan berada dalam HEX (asas 16) yang merupakan format data yang mewakili 0 hingga 255 dalam perpuluhan sebagai nilai 0x00 hingga 0xFF.

Memandangkan kita menetapkan merah, hijau, dan biru kepada nilai maksimumnya dalam panduan Tangkapan Data USB, kita akan mencari nilai 0xFF dalam tangkapan paket kita. Jika Anda menggunakan warna berbeza dalam tangkapan Anda, Anda perlu mengetahui warna HEX tertentu yang digunakan atau menangkap semula dengan warna yang diketahui.

Secara tradisinya, paket pencahayaan untuk peranti mengandungi pengepala yang menandakan arahan paket dan zon pencahayaan peranti mana yang kita alamatkan diikuti oleh data RGB dan jarang beberapa data footer seperti checksum CRC.

Data RGB biasanya mengikuti beberapa format yang boleh kita semak dengan mencari warna yang kita tetapkan dalam tangkapan:

  • R, G, B, R, G, B, R, G, B (Merah → Hijau → Biru → Ulang)
  • RRR, GGG, BBB (Beberapa Merah → Beberapa Hijau → Beberapa Biru → Ulang)
  • Br, R, G, B (Kecerahan → Merah → Hijau → Biru → Ulang)

Nota: Beberapa peranti akan menggunakan susunan warna yang berbeza. Walaupun kebanyakan menggunakan RGB, Anda mungkin mendapati peranti Anda menggunakan GBR, BGR, atau gabungan lain.

Dalam kes kami, nilai yang kita cari adalah:

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

Nota: Contoh di atas hanyalah beberapa struktur paket biasa untuk peranti, dan mungkin tidak sentiasa berlaku. Anda perlu membandingkan dan mencari persamaan.

Menatal ke bawah melalui paket, kita menemui bahawa paket 271 dalam tangkapan kita mengandungi bait yang kelihatan serupa dengan struktur paket R,G,B.

Nota: Beberapa peranti mungkin menggunakan berbilang paket untuk menetapkan warna pada keseluruhan peranti. Pastikan Anda melihat paket seterusnya dan pastikan Anda menemui di mana paket awal diulang.

Kita akan menanda paket ini dengan menggunakan fungsi MARK/UNMARK Packet dalam Wireshark, yang boleh dilakukan dengan menekan kekunci CTRL + M secara serentak atau mengklik kanan paket dan mengklik MARK/UNMARK Packet.

Untuk mengesahkan bahawa paket ini sebenarnya adalah salah satu paket data warna kami, kita akan terus menatal ke bawah untuk mencari lebih banyak paket yang sesuai dengan struktur R,G,B kami. Kita juga akan melihat apakah paket ini mengikuti urutan yang kita tetapkan warna dalam perisian asal. Ini adalah masa yang baik untuk melihat pengepala paket dan melihat apakah mereka berubah. Jika mereka berubah dalam corak, sangat berkemungkinan Anda akan memerlukan berbilang paket untuk menetapkan semua LED pada peranti.

Melihat paket 271, paket 273, dan paket 275 secara berdampingan, kita dapat melihat bahawa data RGB kelihatannya 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 pengepala di atas bahagian RGB kita dapat melihat bahawa data ini tidak berubah antara ketiga-tiga paket. Ini kemungkinan besar bermakna kita menukar zon warna yang sama dalam paket ini.

  • Juga perlu diperhatikan, kita boleh menggunakan paket warna untuk menentukan berapa banyak zon yang dimiliki peranti. Kita boleh mendapatkan ini dengan memeriksa berapa kali nilai yang kita ketahui muncul dalam paket data RGB. Melihat contoh di bawah, kita melihat bahawa peranti mempunyai 4 zon yang pasti boleh kita alamatkan.

Kita akan terus menatal ke bawah melalui paket sehingga kita menemui semua paket yang mengandungi data warna dan menandakannya. Selepas itu kita akan beralih kepada mencipta fail plugin kita.