Hoppa till innehåll

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!


Ett plugin är en enda JavaScript-fil som SignalRGB laddar för en specifik USB-enhet. Det gör två saker:

  1. Identifierar enheten — exporter som berättar för SignalRGB enhetens namn, ID:n, LED-layout och kommunikationsprotokoll.
  2. Hanterar enheten — livscykelfunktioner som SignalRGB anropar för att initiera enheten, skicka färger varje bildruta och städa upp vid avslutning.

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();
}

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-loopen är kärnan i ett plugin. SignalRGB anropar Render() varje bildruta. Ordningen varje bildruta är:

  1. Användarinställningar uppdateras
  2. Färger hämtas från canvas till enhetens pixelbuffert
  3. Eventuella on*Changed-callbacks utlöses (i den ordning förändringar inträffar)
  4. 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.

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.

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.


Dessa exporter berättar allt SignalRGB behöver veta om enheten innan det ansluter.

Visas i SignalRGB-gränssnittet.

export function Name() { return "Corsair K70 RGB"; }
export function Publisher() { return "YourName"; }

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 / libusb
export function Type() { return "hybrid"; } // Båda samtidigt
export function Type() { return "serial"; } // COM-port

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]]; }

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.

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" }
];
}

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"];
}

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://..."; }