Wat is een plugin?
SignalRGB gebruikt aangepaste USB-plugins, geschreven in JavaScript, om apparaten van derden met RGB-verlichting te ondersteunen. Als u een apparaat heeft dat nog niet wordt ondersteund, kunt u zelf een plugin schrijven. Als u een Arduino of andere open-source microcontroller heeft, kunt u ook een plugin voor SignalRGB maken om ermee te communiceren voor volledig DIY RGB-oplossingen.
Alle momenteel uitgebrachte plugins zijn open-source en beschikbaar in de publieke SignalRGB-plugins-repository. Als u iets heeft gemaakt dat anderen kunnen gebruiken, dien gerust een pull request in of neem contact op met onze officiële support!
Hoe een plugin werkt
Section titled “Hoe een plugin werkt”Een plugin is een enkel JavaScript-bestand dat SignalRGB laadt voor een specifiek USB-apparaat. Het doet twee dingen:
- Beschrijft het apparaat — exports die SignalRGB de naam, ID’s, LED-indeling en communicatieprotocol van het apparaat vertellen.
- Bestuurt het apparaat — levenscyclusfuncties die SignalRGB aanroept om het apparaat te initialiseren, kleuren per frame te sturen en op te schonen bij afsluiten.
Plugin-structuur
Section titled “Plugin-structuur”Elke plugin volgt dezelfde basisvorm:
// ── 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();}Levenscyclus
Section titled “Levenscyclus”Initialize
Section titled “Initialize”Wordt eenmalig aangeroepen wanneer een apparaat verbinding maakt of opnieuw verbinding maakt, en wanneer de streaming-schakelaar op de configuratiepagina van het apparaat wordt ingeschakeld. Gebruik het voor eventueel opstartwerk: het apparaat overschakelen naar softwarebesturingsmodus, firmware-handshakes sturen, opgeslagen configuratie lezen, enz.
Als er conflicterende processen actief zijn, wacht de initialisatie totdat ze worden gesloten of de gebruiker de controle omzeilt.
Render
Section titled “Render”De renderlus is de kern van de plugin. SignalRGB roept Render() elk frame aan. De volgorde per frame is:
- Gebruikersinstellingen worden bijgewerkt
- Kleuren worden van het canvas in de pixelbuffer van het apparaat geladen
- Alle
on*Changed-callbacks worden uitgevoerd (in de volgorde van opgetreden wijzigingen) Render()wordt aangeroepen
In Render() roept u device.color(x, y) aan om pixelkleuren te lezen en naar de hardware te sturen. Het standaard frame-interval is 30 ms.
Shutdown
Section titled “Shutdown”Wordt aangeroepen wanneer SignalRGB correct wordt afgesloten of de streaming-schakelaar wordt uitgeschakeld. Als uw apparaat een hardware-verlichtingsmodus heeft, herstel deze dan hier zodat de LED’s van de gebruiker niet donker worden als SignalRGB niet actief is.
on*Changed Callbacks
Section titled “on*Changed Callbacks”Door de gebruiker zichtbare besturingen (zie ControllableParameters) kunnen elk een bijpassende callback hebben die voor Render() wordt uitgevoerd wanneer de gebruiker die instelling wijzigt. Geef de functie de naam on[eigenschapsnaam]Changed() — hoofdlettergevoelig.
// ControllableParameters entry:{ "property": "dpi1", "label": "DPI", "type": "number", "min": "200", "max": "18000", "default": "800" }
// Matching callback:export function ondpi1Changed() { setDpi(dpi1);}De ingebouwde onBrightnessChanged()-callback wordt uitgevoerd wanneer de hoofdhelderheidsschuifregelaar van het apparaat wordt bewogen.
Het apparaat definiëren
Section titled “Het apparaat definiëren”Deze exports vertellen SignalRGB alles wat het moet weten over het apparaat voordat het verbinding maakt.
Name en Publisher
Section titled “Name en Publisher”Worden weergegeven in de SignalRGB-UI.
export function Name() { return "Corsair K70 RGB"; }export function Publisher() { return "UwNaam"; }VendorId en ProductId
Section titled “VendorId en ProductId”De USB-ID’s die SignalRGB gebruikt om het apparaat op het systeem te vinden. Moeten exacte hexadecimale waarden zijn. Als uw plugin niet verschijnt, is een niet-overeenkomende ID de meest waarschijnlijke oorzaak.
export function VendorId() { return 0x1B1C; }export function ProductId() { return 0x1B49; }Stelt het USB-communicatieprotocol in. Standaard "hid" als niet geëxporteerd. Zie Apparaattype bepalen voor de volledige lijst en hoe te kiezen.
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 en LedPositions
Section titled “Size, LedNames en LedPositions”Deze drie exports samen definiëren hoe het apparaat op het canvas verschijnt.
Size()— het begrenzingsvak[breedte, hoogte]van het pixelraster van het apparaat.device.color()kan alleen coördinaten bemonsteren binnen dit vak.LedNames()— een geordende array van LED-namen. Namen moeten de ondersteunde sleutelnamen volgen om toetsaanslageffecten en LED-schilderfuncties in te schakelen.LedPositions()— een geordende array van[x, y]-posities binnen het Size-raster, één per LED, overeenkomend met de volgorde van 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”Bepaalt welke USB-eindpunten SignalRGB opent. Elk gevonden eindpunt wordt doorgegeven aan Validate() — retourneer true om het te openen, false om het over te slaan. U kunt meerdere eindpunten openen en er tijdens runtime tussen schakelen met device.set_endpoint().
export function Validate(endpoint) { return endpoint.interface === 2 && endpoint.usage_page === 0xFF00;}Zie Eindpunten selecteren voor hoe u de juiste waarden vindt.
ControllableParameters
Section titled “ControllableParameters”Retourneert een array van door de gebruiker zichtbare instellingen die verschijnen op de configuratiepagina van het apparaat. Zie Gebruikersbesturingen voor het volledige schema.
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”Een lijst van exe-namen die conflicteren met deze plugin. SignalRGB initialiseert niet zolang een van deze actief is. Namen moeten exact overeenkomen.
export function ConflictingProcesses() { return ["iCUE.exe", "CorsairHID.exe"];}ImageUrl
Section titled “ImageUrl”De URL van de afbeelding van het apparaat die in de SignalRGB-UI wordt weergegeven. Standaardgrootte is 1024×1024 met een live gebied van 920×920.
export function ImageUrl() { return "https://..."; }Volgende stappen
Section titled “Volgende stappen”- Plugin-sjabloon — een bewerkingsklaar startpunt
- Schrijven en lezen — data naar het apparaat sturen
- Apparaattype bepalen — het juiste protocol kiezen
- Eindpunten selecteren — het juiste USB-eindpunt vinden
- Gebruikersbesturingen — instellingen toevoegen aan de apparaatconfiguratiepagina
- Modules en functies — batterij, toetsenbord-/muisinjectie, netwerk en meer