Vad är ett plugin?
SignalRGB använder anpassade USB-plugins skrivna i JavaScript för att stödja tredjepartens RGB-enheter. Om du har en enhet som ännu inte stöds kan du skriva ett eget plugin för den. Om du har en Arduino eller annan öppen källkods-mikrokontroller kan du också skapa ett plugin så att SignalRGB kommunicerar med den för helt egenskapade RGB-lösningar.
Alla våra för tillfället utgivna plugins är öppen källkod och finns tillgängliga i det offentliga SignalRGB-pluginrepositoryt. Om du har skapat något som andra kan ha nytta av, tveka inte att öppna en pull request eller kontakta vår officiella support!
Hur ett plugin fungerar
Section titled “Hur ett plugin fungerar”Ett plugin är en enda JavaScript-fil som SignalRGB laddar för en specifik USB-enhet. Det gör två saker:
- Identifierar enheten — exporter som berättar för SignalRGB enhetens namn, ID:n, LED-layout och kommunikationsprotokoll.
- Hanterar enheten — livscykelfunktioner som SignalRGB anropar för att initiera enheten, skicka färger varje bildruta och städa upp vid avslutning.
Plugin-struktur
Section titled “Plugin-struktur”Varje plugin följer samma grundläggande format:
// ── Enhetsidentifiering ──────────────────────────────────────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-storlek och 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]]; }
// ── Livscykel ─────────────────────────────────────────export function Initialize() { // Anropas en gång när enheten ansluts eller sändning aktiveras. // Skicka de initieringspaket enheten behöver hit. SendInitPacket();}
export function Render() { // Anropas varje bildruta (~30 ms som standard). // Läs färger från canvas och skicka till enheten. SendColors();}
export function Shutdown() { // Anropas när SignalRGB avslutas eller sändning inaktiveras. // Återställ enheten till hårdvaruläge om det behövs. SetHardwareControl();}Livscykel
Section titled “Livscykel”Initialize
Section titled “Initialize”Anropas en gång när en enhet ansluts eller återansluts, och när sändningsväxeln på enhetens konfigurationssida aktiveras. Använd det för startarbete: sätta enheten i programvarukontrolläge, skicka firmware-handskakning, läsa sparad konfiguration osv.
Om några konkurrerande processer körs väntar initieringen tills de stängs av eller användaren hoppar över kontrollen.
Render
Section titled “Render”Render-loopen är kärnan i ett plugin. SignalRGB anropar Render() varje bildruta. Ordningen varje bildruta är:
- Användarinställningar uppdateras
- Färger hämtas från canvas till enhetens pixelbuffert
- Eventuella
on*Changed-callbacks utlöses (i den ordning förändringar inträffar) Render()anropas
Inuti Render() anropar du device.color(x, y) för att läsa pixelfärger och skicka dem till hårdvaran. Standardbildruteintervallet är 30 ms.
Shutdown
Section titled “Shutdown”Anropas när SignalRGB avslutas korrekt eller när sändningsväxeln inaktiveras. Om din enhet har ett hårdvarulysningsläge, återställ det här så att användarens lysdioder inte slocknar när SignalRGB inte körs.
on*Changed-callbacks
Section titled “on*Changed-callbacks”Användarvända kontroller (se ControllableParameters) kan ha en matchande callback som utlöses före Render() när användaren ändrar den inställningen. Namnge funktionen on[propertyName]Changed() — skiftlägeskänsligt.
// ControllableParameters-post:{ "property": "dpi1", "label": "DPI", "type": "number", "min": "200", "max": "18000", "default": "800" }
// Matchande callback:export function ondpi1Changed() { setDpi(dpi1);}Den inbyggda onBrightnessChanged()-callbacken utlöses när enhetens huvudljusstyrkereglage rörs.
Identifiera enheten
Section titled “Identifiera enheten”Dessa exporter berättar allt SignalRGB behöver veta om enheten innan det ansluter.
Name och Publisher
Section titled “Name och Publisher”Visas i SignalRGB-gränssnittet.
export function Name() { return "Corsair K70 RGB"; }export function Publisher() { return "YourName"; }VendorId och ProductId
Section titled “VendorId och ProductId”USB-ID:n som SignalRGB använder för att hitta enheten i systemet. Måste vara exakta hexadecimala värden. Om ditt plugin inte visas handlar det troligtvis om ett ID som inte matchar.
export function VendorId() { return 0x1B1C; }export function ProductId() { return 0x1B49; }Ställer in USB-kommunikationsprotokollet. Standardvärde är "hid" om det inte exporteras. Se sidan Bestämma enhetstyp för en fullständig lista och hur du väljer.
export function Type() { return "hid"; } // HID (de flesta enheter)export function Type() { return "rawusb"; } // Raw USB / libusbexport function Type() { return "hybrid"; } // Båda samtidigtexport function Type() { return "serial"; } // COM-portSize, LedNames och LedPositions
Section titled “Size, LedNames och LedPositions”Dessa tre exporter definierar tillsammans hur enheten ser ut på canvas.
Size()— avgränsningsrutan[bredd, höjd]för enhetens pixelrutnät.device.color()kan bara sampla koordinater inuti den här rutan.LedNames()— ordnad array med lysdiodnamn. Namnen bör följa listan med stödda tangentnamn för att aktivera tangentklickseffekter och lysdiodmålning.LedPositions()— ordnad array med[x, y]-positioner i Size-rutnätet, en per lysdiod som matchar LedNames-ordningen.
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”Kontrollerar vilka USB-slutpunkter SignalRGB öppnar. Varje funnen slutpunkt skickas till Validate() — returnera true för att öppna, false för att hoppa över. Du kan öppna flera slutpunkter och växla mellan dem vid körning med device.set_endpoint().
export function Validate(endpoint) { return endpoint.interface === 2 && endpoint.usage_page === 0xFF00;}Se sidan Välja slutpunkter för att hitta rätt värden.
ControllableParameters
Section titled “ControllableParameters”Returnerar en array med användarvända inställningar som visas på enhetens konfigurationssida. Se sidan Användarkontroller för det fullständiga schemat.
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 med exe-namn som är i konflikt med det här pluginet. SignalRGB initierar inte om något av dessa körs. Namnen måste matcha exakt.
export function ConflictingProcesses() { return ["iCUE.exe", "CorsairHID.exe"];}ImageUrl
Section titled “ImageUrl”URL för enhetens bild som visas i SignalRGB-gränssnittet. Standardstorlek är 1024×1024 med ett aktivt område på 920×920.
export function ImageUrl() { return "https://..."; }Nästa steg
Section titled “Nästa steg”- Plugin-mall — startpunkt redo för redigering
- Skrivningar och läsningar — skicka data till enheten
- Bestämma enhetstyp — välja rätt protokoll
- Välja slutpunkter — hitta rätt USB-slutpunkt
- Användarkontroller — lägga till inställningar på enhetens konfigurationssida
- Moduler och funktioner — batteri, tangentbords-/musinjektion, nätverk och mer