Wraith W60 — HID Protokol Dökümanı
Yöntem: USBPcap + pcapng analizi (4 ayrı kayıt dosyası)
=======================================================================
CİHAZ BİLGİLERİ
=======================================================================
Cihaz : Wraith W60
VID : 0x2E3C
PID : 0xC365
Transfer : Interrupt OUT
Endpoint : 0x04
Interface : 1
Paket boy. : 64 byte (Report ID dahil 65 byte)
Report ID : 0x01
API : WebHID — sendReport(0x01, 63_byte_data)
NOT: sendReport(0x00, ...) veya sendFeatureReport ÇALIŞMAZ
=======================================================================
PAKET YAPISI (64 byte, Report ID dahil)
=======================================================================
Byte[0] = 0x01 (Report ID — sendReport'a ayrı verilir)
Byte[1] = KOMUT
Byte[2] = 0x00 (sabit)
Byte[3] = 0x00 (sabit)
Byte[4] = PARAMETRE
Byte[5] = UZUNLUK
Byte[6] = MOD / EK PARAMETRE
Byte[7] = 0x04 (sabit)
Byte[8] = 0x04 veya 0x03 (zone'a göre)
Byte[9] = R
Byte[10] = G
Byte[11] = B
Byte[12] = HIZ (opsiyonel, moda göre)
Byte[13..63] = 0x00 (padding)
=======================================================================
KOMUT TİPLERİ (Byte[1])
=======================================================================
0x01 — HEARTBEAT (cihazın sürekli gönderdiği/aldığı durum paketi)
0x07 — BACKLIGHT RENK KOMUTU (tuş üstü LED)
0x08 — UNDERGLOW RENK KOMUTU (çerçeve/kasa LED)
0x09 — TEK TUŞ RENK KOMUTU (per-key RGB, custom mode)
0x17 — APPLY/SYNC (wraith.software kendi içinde kullanır, zorunlu DEĞİL)
=======================================================================
1) HEARTBEAT PAKETİ (0x01) — BİLGİ AMAÇLI
=======================================================================
Cihaz sürekli bu paketi gönderir/alır. Renk değiştirmek için
Bu paketi göndermek GEREKMEZ, yoksay.
Boş: 01 01 00 00 00 00 00 ... (64 byte)
Dolu: 01 01 00 00 00 10 00 00 00 00 00 00 00 00 00 01 00 00 9b 00 ...
=======================================================================
2) BACKLIGHT RENK KOMUTU (0x07)
=======================================================================
Byte[1] = 0x07
Byte[5] = 0x0E (payload uzunluğu = 14)
Byte[6] = MOD
Byte[7] = 0x04
Byte[8] = 0x04
Byte[9] = R (0-255)
Byte[10] = G (0-255)
Byte[11] = B (0-255)
Byte[12] = HIZ (0x00 varsayılan, bazı modlarda farklı)
Tam paket (64 byte):
01 07 00 00 00 0e [MOD] 04 04 [R] [G] [HIZ] 00 00 ... 00
Örnekler (pcapng'den doğrulandı):
Statik Kırmızı: 01 07 00 00 00 0e 00 04 04 ff 00 00 00 00 ...
Nefes Kırmızı: 01 07 00 00 00 0e 01 04 04 ff 00 00 00 00 ...
Dalga Kırmızı: 01 07 00 00 00 0e 02 04 04 ff 00 00 00 ff ...
Neon: 01 07 00 00 00 0e 03 04 04 ff 00 00 00 00 ...
Pırıltı: 01 07 00 00 00 0e 04 04 04 ff 00 00 00 00 ...
Ripple (0x0A): 01 07 00 00 00 0e 0a 04 04 ff 55 00 00 00 ...
Reaktif (0x07): 01 07 00 00 00 0e 07 04 04 ff 00 00 00 00 04 00 ...
=======================================================================
3) UNDERGLOW RENK KOMUTU (0x08)
=======================================================================
Yapı backlight ile aynı, farklar:
Byte[1] = 0x08
Byte[8] = 0x03 (backlight'ta 0x04 idi)
Tam paket:
01 08 00 00 00 0e [MOD] 04 03 [R] [G] 00 00 ... 00
Örnekler:
Statik Mavi: 01 08 00 00 00 0e 00 04 03 00 00 ff 00 00 ...
Nefes: 01 08 00 00 00 0e 01 04 03 [R] [G] ...
=======================================================================
MOD TABLOSU (Byte[6]) — pcapng'den doğrulandı
=======================================================================
BACKLIGHT:
0x00 = Statik
0x01 = Nefes (Breathe)
0x02 = Dalga (Wave)
0x03 = Neon / Renk Döngüsü
0x04 = Pırıltı (Sparkle)
0x06 = Mod 6
0x07 = Reaktif (hız byte'ı [15]=0x04)
0x08 = Mod 8
0x09 = Mod 9
0x0A = Ripple (hız [6]=0x55)
0x0B = Mod 11
0x0C = Mod 12 (hız [15]=0x02)
0x0E = Mod 14
0x0F = Mod 15
0x10 = Mod 16
UNDERGLOW:
0x00 = Statik
0x01 = Nefes
0x02 = Dalga
0x04 = Neon
=======================================================================
4) TEK TUŞ RENK KOMUTU (0x09) — Per-key RGB
=======================================================================
Klavye tuşları 8 chunk'a bölünmüştür. Her chunk 18 tuşun RGB'sini taşır.
Byte[1] = 0x09
Byte[2] = 0x01 (sabit)
Byte[3] = 0x00 (sabit)
Byte[4] = CHUNK_INDEX (0x00 - 0x07)
Byte[5] = UZUNLUK (0x36=54 byte tam chunk, 0x12=18 byte son chunk)
Byte[6..59] = RGB verileri: [R0][G0][B0][R1][G1][B1]...
Chunk başına 18 tuş × 3 byte = 54 byte RGB verisi.
Sıralama:
Chunk 0 (idx=0x00): Tuş 0-17
Chunk 1 (idx=0x01): Tuş 18-35
Chunk 2 (idx=0x02): Tuş 36-53
Chunk 3 (idx=0x03): Tuş 54-71
Chunk 4 (idx=0x04): Tuş 72-89
Chunk 5 (idx=0x05): Tuş 90-107
Chunk 6 (idx=0x06): Tuş 108-125
Chunk 7 (idx=0x07): Son grup (uzunluk=0x12)
Her chunk gönderimi arasında cihaz ACK gönderir (beklemek gerekebilir).
Örnek — Chunk 1'deki ilk tuşu kırmızı:
01 09 01 00 01 36 ff 00 00 00 00 00 ... (64 byte)
=======================================================================
5) APPLY KOMUTU (0x17) — ZORUNLU DEĞİL
=======================================================================
Wraith.software kendi UI'ında bu komutu kullanır.
Doğrudan sendReport ile renk gönderirken gerekli DEĞİL.
Klavye renk komutunu (0x07/0x08) aldığında direkt uygular.
Bilgi amaçlı paket yapısı:
Tetikle: 01 17 00 00 00 02 00 00 ... (64 byte)
Onayla: 01 17 00 00 00 00 00 00 ... (64 byte)
=======================================================================
SendReport KULLANIMI (WebHID)
=======================================================================
// Report ID (0x01) ayrı verilir, payload 63 byte olur:
Const payload = new Uint8Array(63);
Payload[0] = 0x07; // BACKLIGHT komutu (Byte[1])
Payload[4] = 0x0E; // uzunluk (Byte[5])
Payload[5] = 0x00; // mod: statik (Byte[6])
Payload[6] = 0x04; // sabit (Byte[7])
Payload[7] = 0x04; // sabit (Byte[8])
Payload[8] = 255; // R (Byte[9])
Payload[9] = 0; // G (Byte[10])
Payload[10] = 0; // B (Byte[11])
Await device.sendReport(0x01, payload);
// NOT: sendReport(0x00, 64_byte) ÇALIŞMAZ
// NOT: sendFeatureReport ÇALIŞMAZ
=======================================================================
GÜVEN SEVİYELERİ
=======================================================================
✅ Kesin (pcapng'den doğrulandı):
- VID/PID, endpoint, transfer tipi
- Report ID 0x01, 63 byte payload
- 0x07 backlight / 0x08 underglow ayrımı
- RGB byte konumları [8],[9],[10]
- Mod byte [5] konumu
- 0x09 per-key komutu ve chunk yapısı
- 0x17 apply'ın zorunlu olmadığı (UI davranışı)
⚠️ Kısmen doğrulandı (pcapng görüldü ama isimler tahmini):
- Mod tablosundaki isimlendirmeler (0x00=statik vb.)
- Hız/parlaklık byte konumları tam netleşmedi
- Per-key tuş sıralama haritası (hangi index hangi fiziksel tuş)
❓ Bilinmiyor:
- Tam tuş index haritası (per-key mode)
- Underglow'un tüm mod detayları
Bu arada hocam eğer ki driver i yapabilseniz medya oynatıcısındaki çalan şarkıya göre renk değiştiren bir modda yaparsanız çok makbule geçer.
Hız-parlaklık ve tek tusa renk atama çok önemli değil benim için. Eğer kodlarken sorun çıkartma ihtimali varsa tekrar yapabilirim.