Remus Lupin

Yetkin
Katılım
7 Haziran 2024
Mesajlar
936
Makaleler
1
Çözümler
13
Beğeniler
510
Yer
Hogwarts Cadılık ve Büyücülük Okulu
Merhaba, nedensizce bir istek geldi içime. Wraith web driver sitesinde incele ile şu dosyaları buldum: AP61HEARgb. JSON, Firmware. JSON ve device. JSON. Bunlarla bir şeyler yapılabilir mi? Açıkçası hiçbir fikrim yok. ZIP olarak bu dosyaların hepsini Google Drive'a yükledim.


Ayrıca istek üzerine web driverinda renk değiştirildiği zaman hangi paketlerin gönderildiğini paylaşabilirim.
 
Bakabilirim, elimde bu klavye olmamasına rağmen GitHub üzerinde geliştiririm, oradan isteyen test eder. Ancak, bana şu paketler lazım;
  • Tek bir tuşun rengini değiştirdiğinde gönderilen tüm HID raporları (Report ID dahil, ham hex)
  • Tüm klavyeyi tek renge boyadığında gönderilenler
  • Built-in efektler arası geçişte gönderilenler (mod numarası, hız, parlaklık byte'larını ayırt edebilelim)
  • "Kaydet"/"apply" butonunda gönderilen son paket (varsa)
  • Driver'ın WebHID kullanıyorsa sendReport mu sendFeatureReport mu çağırdığı (DevTools > Network göstermez, Console'da navigator.hid çağrıları görünür; ya da driver'ın JS'inde sendReport/sendFeatureReport arayabilirsin)
 
Bakabilirim, elimde bu klavye olmamasına rağmen GitHub üzerinde geliştiririm, oradan isteyen test eder. Ancak, bana şu paketler lazım;
  • Tek bir tuşun rengini değiştirdiğinde gönderilen tüm hıd raporları (report ID dahil, ham hex)
  • Tüm klavyeyi tek renge boyadığında gönderilenler.
  • Built-in efektler arası geçişte gönderilenler (mod numarası, hız, parlaklık byte'larını ayırt edebilelim)
  • "Kaydet"/"apply" butonunda gönderilen son paket (varsa)
  • Driver'ın webhıd kullanıyorsa sendreport mu sendfeaturereport mu çağırdığı (devtools > network göstermez, Console'da navigator. Hid çağrıları görünür; ya da Driver'ın JS'inde sendReport/sendFeatureReport arayabilirsin)

Hocam merhaba. Yardımcı olabileceğinizi görünce çok sevindim. Bu tür konularda pek bilgim yok ama Gemini benden Wraith'den SDK veya hıd dokümanı istemem gerektiğini söyledi. Ben de mail attım onlara, 2 gündür "yazılım uzmanıma, ürün uzmanıma aktarıyorum." diye oyaladılar ve hâlâ geri dönüş alamadım. SDK veya hıd dokümanı işimize yarar mı? Süreci hızlandırır mı? Neyse, istediğiniz şeyleri bir sebepten dolayı maalesef iletemiyorum ama yarın iletmeye çalışacağım.
 
Hocam merhaba. Yardımcı olabileceğinizi görünce çok sevindim. Bu tür konularda pek bilgim yok ama Gemini benden Wraith'den SDK veya hıd dokümanı istemem gerektiğini söyledi. Ben de mail attım onlara, 2 gündür "yazılım uzmanıma, ürün uzmanıma aktarıyorum." diye oyaladılar ve hâlâ geri dönüş alamadım. SDK veya hıd dokümanı işimize yarar mı? Süreci hızlandırır mı? Neyse, istediğiniz şeyleri bir sebepten dolayı maalesef iletemiyorum ama yarın iletmeye çalışacağım.
Evet, SDK yarar HID tarafında da ne yapıyorlarmış diye bilgi edinebiliriz.
 
Evet, SDK yarar HID tarafında da ne yapıyorlarmış diye bilgi edinebiliriz.
Yapay zeka bunları göndertti (doğrulu için baya sordum ama emin değilim.);

Kod:
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.
 
Son düzenleme:
Gerçekten çalışacak bir şey için bana lazım olan, Wraith Software'i kullanırken Wireshark+USBPcap ile gerçek HID paket capture'ı (pcapng). Veya Wraith Software web tabanlıysa, Chrome DevTools Console'da navigator.hid.getDevices()[0].sendReport'u monkey patch'leyip log alabilirsin.
 
Gerçekten çalışacak bir şey için bana lazım olan, Wraith Software'i kullanırken Wireshark+USBPcap ile gerçek HID paket capture'ı (pcapng). Veya Wraith Software web tabanlıysa, Chrome DevTools Console'da navigator.hid.getDevices()[0].sendReport'u monkey patch'leyip log alabilirsin.
Hocam biraz zorlanıcağım gibi duruyor. Wraithden mail beklesem daha iyi olur bence. Çok teknik işlerde hem ai hemde bende bitiyorum çünkü. Az önce gönderdiklerimi yapay zeka ile göndermiştim. dediğim gibi çok bilgim yok bu konularda.