Eklenti Nedir?
SignalRGB, üçüncü taraf RGB cihazlarını desteklemek için JavaScript ile yazılmış özel USB eklentileri kullanır. Henüz desteklenmeyen bir cihazınız varsa onun için kendi eklentinizi yazabilirsiniz. Bir Arduino veya başka bir açık kaynaklı mikrodenetleyiciniz varsa, tamamen kendin-yap RGB çözümleri için SignalRGB’nin onunla iletişim kurması için bir eklenti de oluşturabilirsiniz.
Şu anda yayınlanmış tüm eklentilerimiz açık kaynaklıdır ve herkese açık SignalRGB eklenti deposunda mevcuttur. Başkalarının kullanabileceği bir şey oluşturduysanız, pull request açmaktan veya resmi desteğimizle iletişime geçmekten çekinmeyin!
Eklenti Nasıl Çalışır
Section titled “Eklenti Nasıl Çalışır”Eklenti, SignalRGB’nin belirli bir USB cihazı için yüklediği tek bir JavaScript dosyasıdır. İki şey yapar:
- Cihazı tanımlar — SignalRGB’ye cihazın adını, kimliklerini, LED düzenini ve iletişim protokolünü anlatan dışa aktarmalar.
- Cihazı yönetir — SignalRGB’nin cihazı başlatmak, her karede renk göndermek ve çıkışta temizlemek için çağırdığı yaşam döngüsü fonksiyonları.
Eklenti Yapısı
Section titled “Eklenti Yapısı”Her eklenti aynı temel biçimi izler:
// ── Cihaz kimliği ──────────────────────────────────────export function Name() { return "My Device"; }export function Publisher() { return "Your Name"; }export function VendorId() { return 0x1234; }export function ProductId() { return 0x5678; }export function Type() { return "hid"; }
// ── Canvas boyutu ve LED düzeni ────────────────────────────export function Size() { return [7, 3]; }export function LedNames() { return ["Logo", "Left", "Right"]; }export function LedPositions() { return [[3,1], [0,1], [6,1]]; }
// ── Yaşam döngüsü ─────────────────────────────────────────export function Initialize() { // Cihaz bağlandığında veya yayın etkinleştirildiğinde bir kez çağrılır. // Cihazın ihtiyaç duyduğu başlatma paketlerini buraya gönderin. SendInitPacket();}
export function Render() { // Her karede çağrılır (~30 ms varsayılan olarak). // Canvas'tan renkleri okuyun ve cihaza gönderin. SendColors();}
export function Shutdown() { // SignalRGB çıktığında veya yayın devre dışı bırakıldığında çağrılır. // Gerekirse cihazı donanım moduna döndürün. SetHardwareControl();}Yaşam Döngüsü
Section titled “Yaşam Döngüsü”Initialize
Section titled “Initialize”Bir cihaz bağlandığında veya yeniden bağlandığında ve cihazın yapılandırma sayfasındaki yayın geçiş düğmesi etkinleştirildiğinde bir kez çağrılır. Başlangıç çalışması için kullanın: cihazı yazılım kontrol moduna geçirme, ürün yazılımı el sıkışmaları gönderme, kaydedilmiş yapılandırmayı okuma vb.
Herhangi bir çakışan süreç çalışıyorsa, başlatma bunlar kapanana veya kullanıcı kontrolü atlayana kadar bekler.
Render
Section titled “Render”Render döngüsü eklentinin çekirdeğidir. SignalRGB her karede Render() çağırır. Her karedeki sıra şöyledir:
- Kullanıcı ayarları güncellenir
- Renkler canvas’tan cihazın piksel tamponuna çekilir
- Herhangi bir
on*Changedgeri çağırması tetiklenir (değişiklikler gerçekleşme sırasıyla) Render()çağrılır
Render() içinde piksel renklerini okumak ve donanıma göndermek için device.color(x, y) çağrısını yaparsınız. Varsayılan kare aralığı 30 ms’dir.
Shutdown
Section titled “Shutdown”SignalRGB düzgün çıktığında veya yayın geçiş düğmesi devre dışı bırakıldığında çağrılır. Cihazınızın bir donanım aydınlatma modu varsa, SignalRGB çalışmıyorken kullanıcının LED’lerinin kararmaması için burada geri yükleyin.
on*Changed Geri Çağırmaları
Section titled “on*Changed Geri Çağırmaları”Kullanıcıya yönelik kontroller (ControllableParameters bakın), kullanıcı bu ayarı değiştirdiğinde Render()’dan önce tetiklenen eşleşen bir geri çağırmaya sahip olabilir. Fonksiyonu on[propertyName]Changed() olarak adlandırın — büyük/küçük harf duyarlıdır.
// ControllableParameters girişi:{ "property": "dpi1", "label": "DPI", "type": "number", "min": "200", "max": "18000", "default": "800" }
// Eşleşen geri çağırma:export function ondpi1Changed() { setDpi(dpi1);}Yerleşik onBrightnessChanged() geri çağırması, cihazın ana parlaklık kaydırıcısı hareket ettirildiğinde tetiklenir.
Cihazı Tanımlama
Section titled “Cihazı Tanımlama”Bu dışa aktarmalar SignalRGB’ye bağlanmadan önce cihaz hakkında bilmesi gereken her şeyi söyler.
Name ve Publisher
Section titled “Name ve Publisher”SignalRGB kullanıcı arayüzünde görüntülenir.
export function Name() { return "Corsair K70 RGB"; }export function Publisher() { return "YourName"; }VendorId ve ProductId
Section titled “VendorId ve ProductId”SignalRGB’nin sistemdeki cihazı bulmak için kullandığı USB kimlikleri. Tam onaltılık değerler olmalıdır. Eklentiniz görünmüyorsa, büyük olasılıkla eşleşmeyen bir kimlik söz konusudur.
export function VendorId() { return 0x1B1C; }export function ProductId() { return 0x1B49; }USB iletişim protokolünü ayarlar. Dışa aktarılmazsa varsayılan olarak "hid" kullanılır. Tam liste ve nasıl seçileceği için Cihaz Türünü Belirleme sayfasına bakın.
export function Type() { return "hid"; } // HID (çoğu cihaz)export function Type() { return "rawusb"; } // Ham USB / libusbexport function Type() { return "hybrid"; } // İkisi aynı andaexport function Type() { return "serial"; } // COM portuSize, LedNames ve LedPositions
Section titled “Size, LedNames ve LedPositions”Bu üç dışa aktarma birlikte cihazın canvas’ta nasıl göründüğünü tanımlar.
Size()— cihazın piksel ızgarasının sınırlayıcı kutusu[genişlik, yükseklik].device.color()yalnızca bu kutu içindeki koordinatları örnekleyebilir.LedNames()— sıralı LED adları dizisi. Tuş basma efektlerini ve LED boyamayı etkinleştirmek için adlar desteklenen tuş adları listesini takip etmelidir.LedPositions()— Size ızgarasındaki sıralı[x, y]konumları dizisi, LedNames sırasıyla eşleşen LED başına bir tane.
export function Size() { return [7, 3]; }export function LedNames() { return ["Logo", "Left Side", "Right Side"]; }export function LedPositions() { return [[3, 1], [0, 1], [6, 1]]; }Validate
Section titled “Validate”SignalRGB’nin hangi USB uç noktalarını açtığını kontrol eder. Her keşfedilen uç nokta Validate()’a iletilir — açmak için true, atlamak için false döndürün. Birden fazla uç nokta açabilir ve çalışma zamanında device.set_endpoint() ile aralarında geçiş yapabilirsiniz.
export function Validate(endpoint) { return endpoint.interface === 2 && endpoint.usage_page === 0xFF00;}Doğru değerleri bulmak için Uç Noktaları Seçme sayfasına bakın.
ControllableParameters
Section titled “ControllableParameters”Cihazın yapılandırma sayfasında görünen kullanıcıya yönelik ayarların dizisini döndürür. Tam şema için Kullanıcı Kontrolleri sayfasına bakın.
export function ControllableParameters() { return [ { "property": "LightingMode", "label": "Lighting Mode", "type": "combobox", "values": ["Software", "Hardware"], "default": "Software" }, { "property": "DPILevel", "label": "DPI", "type": "number", "min": "200", "max": "18000", "step": "50", "default": "800" } ];}ConflictingProcesses
Section titled “ConflictingProcesses”Bu eklentiyle çakışan exe adlarının listesi. SignalRGB, bunlardan herhangi biri çalışırken başlatmaz. Adlar tam olarak eşleşmelidir.
export function ConflictingProcesses() { return ["iCUE.exe", "CorsairHID.exe"];}ImageUrl
Section titled “ImageUrl”SignalRGB kullanıcı arayüzünde gösterilen cihaz görüntüsünün URL’si. Standart boyut, 920×920 canlı alan ile 1024×1024’tür.
export function ImageUrl() { return "https://..."; }Sonraki Adımlar
Section titled “Sonraki Adımlar”- Eklenti Şablonu — düzenlemeye hazır başlangıç noktası
- Yazma ve Okuma — cihaza veri gönderme
- Cihaz Türünü Belirleme — doğru protokolü seçme
- Uç Noktaları Seçme — doğru USB uç noktasını bulma
- Kullanıcı Kontrolleri — cihaz yapılandırma sayfasına ayar ekleme
- Modüller ve Özellikler — pil, klavye/fare enjeksiyonu, ağ ve daha fazlası