Šta je plugin?
SignalRGB koristi prilagođene USB pluginove napisane u JavaScript-u za podršku RGB uređaja trećih strana. Ako posedujete uređaj koji još nije podržan, možete sami napisati plugin za njega. Ako posedujete Arduino ili drugi open-source mikrokontroler, možete takođe kreirati plugin koji omogućava SignalRGB-u komunikaciju sa njim za potpuno DIY RGB rešenja.
Svi pluginovi koje smo do sada objavili imaju čitljiv izvorni kod i dostupni su u javnom SignalRGB plugins repozitorijumu. Ako ste kreirali nešto što drugi mogu da koriste, slobodno podnesite pull request ili kontaktirajte naš zvanični support!
Kako plugin funkcioniše
Section titled “Kako plugin funkcioniše”Plugin je jedan JavaScript fajl koji SignalRGB učitava za određeni USB uređaj. On radi dve stvari:
- Opisuje uređaj — eksporti koji SignalRGB-u govore naziv uređaja, ID-jeve, raspored LED dioda i komunikacioni protokol.
- Upravlja uređajem — funkcije životnog ciklusa koje SignalRGB poziva da inicijalizuje uređaj, šalje boje u svakom frejmu i počisti pri izlasku.
Struktura plugina
Section titled “Struktura plugina”Svaki plugin prati isti osnovni oblik:
// ── Device identity ──────────────────────────────────────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 size and LED layout ────────────────────────────export function Size() { return [7, 3]; }export function LedNames() { return ["Logo", "Left", "Right"]; }export function LedPositions() { return [[3,1], [0,1], [6,1]]; }
// ── Lifecycle ─────────────────────────────────────────────export function Initialize() { // Called once when the device connects or streaming is enabled. // Send any initialization packets the device needs here. SendInitPacket();}
export function Render() { // Called every frame (~30ms by default). // Read colors from the canvas and send them to the device. SendColors();}
export function Shutdown() { // Called when SignalRGB exits or streaming is disabled. // Return the device to hardware mode here if needed. SetHardwareControl();}Životni ciklus
Section titled “Životni ciklus”Initialize
Section titled “Initialize”Poziva se jednom kada se uređaj poveže ili ponovo poveže, kao i svaki put kada se uključi prekidač za striming na stranici konfiguracije uređaja. Koristite ga za sve poslove pri pokretanju: prebacivanje uređaja u režim softverske kontrole, slanje firmverskih handshake-ova, čitanje sačuvane konfiguracije itd.
Ako su pokrenuti neki konfliktni procesi, inicijalizacija čeka dok se ne zatvore ili dok korisnik ne zaobiđe proveru.
Render
Section titled “Render”Petlja renderovanja je srž plugina. SignalRGB poziva Render() u svakom frejmu. Redosled u svakom frejmu je:
- Ažuriraju se korisnička podešavanja
- Boje se preuzimaju sa platna u bafer piksela uređaja
- Aktiviraju se svi
on*Changedpovratni pozivi (redosledom kojim su se izmene desile) - Poziva se
Render()
Unutar Render() pozivate device.color(x, y) da pročitate boje piksela i pošaljete ih hardveru. Podrazumevani interval frejma je 30ms.
Shutdown
Section titled “Shutdown”Poziva se kada se SignalRGB uredno zatvori ili kada se isključi prekidač za striming. Ako vaš uređaj ima hardverski režim osvetljenja, vratite ga ovde kako LED diode korisnika ne bi ostale ugašene kada SignalRGB nije pokrenut.
on*Changed povratni pozivi
Section titled “on*Changed povratni pozivi”Kontrole namenjene korisniku (pogledajte ControllableParameters) mogu imati odgovarajući povratni poziv koji se aktivira pre Render() svaki put kada korisnik promeni to podešavanje. Nazovite funkciju on[propertyName]Changed() — razlikuje velika i mala slova.
// ControllableParameters entry:{ "property": "dpi1", "label": "DPI", "type": "number", "min": "200", "max": "18000", "default": "800" }
// Matching callback:export function ondpi1Changed() { setDpi(dpi1);}Ugrađeni povratni poziv onBrightnessChanged() aktivira se kada se pomeri glavni klizač osvetljenosti uređaja.
Definisanje uređaja
Section titled “Definisanje uređaja”Ovi eksporti govore SignalRGB-u sve što treba da zna o uređaju pre nego što se poveže.
Name i Publisher
Section titled “Name i Publisher”Prikazuju se u SignalRGB korisničkom interfejsu.
export function Name() { return "Corsair K70 RGB"; }export function Publisher() { return "YourName"; }VendorId i ProductId
Section titled “VendorId i ProductId”USB ID-jevi koje SignalRGB koristi da pronađe uređaj u sistemu. Moraju biti tačne heksadecimalne vrednosti. Ako se vaš plugin ne pojavljuje, najverovatniji uzrok je ID koji se ne poklapa.
export function VendorId() { return 0x1B1C; }export function ProductId() { return 0x1B49; }Podešava USB komunikacioni protokol. Podrazumevano je "hid" ako nije eksportovano. Pogledajte Određivanje tipa uređaja za kompletnu listu i način izbora.
export function Type() { return "hid"; } // HID (most devices)export function Type() { return "rawusb"; } // Raw USB / libusbexport function Type() { return "hybrid"; } // Both simultaneouslyexport function Type() { return "serial"; } // COM portSize, LedNames i LedPositions
Section titled “Size, LedNames i LedPositions”Ova tri eksporta zajedno definišu kako se uređaj prikazuje na platnu.
Size()— granični okvir[width, height]mreže piksela uređaja.device.color()može uzorkovati samo koordinate unutar ovog okvira.LedNames()— uređeni niz naziva LED dioda. Nazivi treba da prate listu podržanih naziva tastera kako bi se omogućili efekti pritiska tastera i bojenje LED dioda.LedPositions()— uređeni niz pozicija[x, y]unutar mreže Size, po jedna za svaku LED diodu, istim redosledom kao LedNames.
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”Određuje koje USB krajnje tačke (endpoints) SignalRGB otvara. Svaka otkrivena krajnja tačka prosleđuje se funkciji Validate() — vratite true da je otvorite, a false da je preskočite. Možete otvoriti više krajnjih tačaka i prelaziti između njih tokom rada pomoću device.set_endpoint().
export function Validate(endpoint) { return endpoint.interface === 2 && endpoint.usage_page === 0xFF00;}Pogledajte Izbor krajnjih tačaka da saznate kako da pronađete prave vrednosti.
ControllableParameters
Section titled “ControllableParameters”Vraća niz podešavanja namenjenih korisniku koja se prikazuju na stranici konfiguracije uređaja. Pogledajte Korisničke kontrole za kompletnu šemu.
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”Lista naziva exe fajlova koji su u konfliktu sa ovim pluginom. SignalRGB neće izvršiti inicijalizaciju dok je bilo koji od njih pokrenut. Nazivi moraju tačno da se poklapaju.
export function ConflictingProcesses() { return ["iCUE.exe", "CorsairHID.exe"];}ImageUrl
Section titled “ImageUrl”URL slike uređaja koja se prikazuje u SignalRGB korisničkom interfejsu. Standardna veličina je 1024×1024 sa aktivnom površinom od 920×920.
export function ImageUrl() { return "https://..."; }Sledeći koraci
Section titled “Sledeći koraci”- Šablon plugina — početna tačka spremna za uređivanje
- Upisi i čitanja — slanje podataka uređaju
- Određivanje tipa uređaja — izbor pravog protokola
- Izbor krajnjih tačaka — pronalaženje prave USB krajnje tačke
- Korisničke kontrole — dodavanje podešavanja na stranicu konfiguracije uređaja
- Moduli i funkcije — baterija, ubacivanje unosa tastature/miša, mreža i još mnogo toga