Wat is een plugin?
SignalRGB gebruikt aangepaste USB-plugins, geschreven in JavaScript, om RGB-apparaten van derden 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 maken voor SignalRGB om ermee te communiceren voor volledig zelfgemaakte RGB-oplossingen.
Onze momenteel uitgebrachte plugins zijn allemaal open-source en beschikbaar in de openbare SignalRGB-pluginrepository. Als u iets heeft gemaakt dat anderen kunnen gebruiken, bent u vrij een pull request in te dienen of contact op te nemen met onze officiële ondersteuning!
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 informeren over de naam, ID’s, LED-indeling en communicatieprotocol van het apparaat.
- Bestuurt het apparaat — levenscyclusfuncties die SignalRGB aanroept om het apparaat te initialiseren, kleuren per frame te verzenden en op te ruimen bij afsluiten.
Pluginstructuur
Section titled “Pluginstructuur”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 eenmaal aangeroepen wanneer een apparaat verbinding maakt of opnieuw verbinding maakt, en elke keer dat de streamingschakelaar wordt ingeschakeld op de configuratiepagina van het apparaat. Gebruik het voor opstartwerk: het apparaat overschakelen naar softwarebesturingsmodus, firmware-handshakes verzenden, opgeslagen configuratie lezen, enz.
Als er conflicterende processen actief zijn, wacht de initialisatie totdat ze worden gesloten of de gebruiker de controle overslaat.
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 gehaald
- Eventuele
on*Changed-callbacks worden uitgevoerd (in de volgorde van de wijzigingen) Render()wordt aangeroepen
Binnen Render() roept u device.color(x, y) aan om pixelkleuren te lezen en naar de hardware te verzenden. Het standaard frame-interval is 30ms.
Shutdown
Section titled “Shutdown”Wordt aangeroepen wanneer SignalRGB correct wordt afgesloten of de streamingschakelaar wordt uitgeschakeld. Als uw apparaat een hardwareverlichting heeft, herstel die hier zodat de LED’s van de gebruiker niet donker gaan wanneer SignalRGB niet actief is.
on*Changed Callbacks
Section titled “on*Changed Callbacks”Gebruikersgerichte besturingen (zie ControllableParameters) kunnen elk een bijpassende callback hebben die wordt uitgevoerd vóór Render() wanneer de gebruiker die instelling wijzigt. Geef de functie de naam on[eigendomsnaam]Changed() — dit is 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 verplaatst.
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 "YourName"; }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 onjuiste ID de meest waarschijnlijke oorzaak.
export function VendorId() { return 0x1B1C; }export function ProductId() { return 0x1B49; }Stelt het USB-communicatieprotocol in. Standaard ingesteld op "hid" als het niet wordt geëxporteerd. Zie Apparaattype bepalen voor de volledige lijst en hoe u kiest.
export function Type() { return "hid"; } // HID (meeste apparaten)export function Type() { return "rawusb"; } // Ruwe USB / libusbexport function Type() { return "hybrid"; } // Beide tegelijkertijdexport function Type() { return "serial"; } // COM-poortSize, LedNames en LedPositions
Section titled “Size, LedNames en LedPositions”Deze drie exports definiëren samen hoe het apparaat op het canvas verschijnt.
Size()— het begrenzingsvak[breedte, hoogte]van het pixelraster van het apparaat.device.color()kan alleen coördinaten binnen dit vak bemonsteren.LedNames()— een geordende array van LED-namen. Namen moeten de ondersteunde sleutelnamen volgen om toetsaanslageffecten en LED-schilderen 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 ontdekt 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 het vinden van de juiste waarden.
ControllableParameters
Section titled “ControllableParameters”Retourneert een array van gebruikersgerichte 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 terwijl 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 wordt weergegeven in de SignalRGB UI. Standaardformaat is 1024×1024 met een live gebied van 920×920.
export function ImageUrl() { return "https://..."; }Volgende stappen
Section titled “Volgende stappen”- Plugin-sjabloon — een klaar-om-te-bewerken startpunt
- Schrijven en lezen — gegevens 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/muis-injectie, netwerk en meer