Pular para o conteúdo

Módulos e Funcionalidades

Os plugins podem estender as suas capacidades para além das leituras e escritas USB básicas usando dois sistemas: Módulos e Funcionalidades. Compreender a diferença entre eles ajuda a descobrir o que está disponível e a usar o mecanismo correto.

MódulosFuncionalidades
Como usarimport { x } from "@SignalRGB/name"device.addFeature("name") em Initialize()
PropósitoServiços utilitários (rede, codificação, informações do sistema)Capacidades do dispositivo (bateria, injeção de entrada)
NamespaceNomes exportados próprios do módulodevice.featureName.*
InstânciasUma por pluginPode ter múltiplas

Importe-os no topo do seu ficheiro de plugin.

Caminho de importaçãoPropósito
@SignalRGB/serialComunicação serial/porta COM
@SignalRGB/tcpComunicação via socket TCP
@SignalRGB/udpComunicação via socket UDP
@SignalRGB/base64Codificação e descodificação Base64
@SignalRGB/performanceProfiling de performance e timers de frame
@SignalRGB/appInfoInformações de versão da aplicação SignalRGB
@SignalRGB/systeminfoInformações de hardware do sistema
@SignalRGB/permissionsVerificar estado de permissão do utilizador
Consulte Comunicação Avançada para exemplos de utilização de serial, tcp e udp.

Chame device.addFeature("name") no seu export Initialize(). A funcionalidade cria um objeto global com o mesmo nome da funcionalidade.

Nome da funcionalidadeNamespacePropósito
"keyboard"keyboardInjetar teclas ou encaminhar eventos de teclado para macros do SignalRGB
"mouse"mouseInjetar entrada de rato ou encaminhar eventos de rato para macros do SignalRGB
"battery"batteryReportar nível de bateria e estado de carga para dispositivos sem fios
"dtls"dtlsUDP cifrado DTLS com autenticação PSK

Para plugins que representam dispositivos de teclado. Permite injetar teclas reais no SO ou disparar eventos que podem acionar macros do SignalRGB.

export function Initialize() {
device.addFeature("keyboard");
}

Envia uma tecla diretamente ao sistema operativo via keybd_event. A tecla aparece como entrada real para todas as aplicações — ignora completamente o sistema de macros.

ParâmetroTipoDescriçãoExemplo
vkCodeNumberCódigo de Tecla Virtual do Windows0x41 (tecla A)
options.releasedBoolean (obrigatório)true para key-up, false para key-downfalse
keyboard.sendHid(0x41, { released: false }); // Pressionar A
keyboard.sendHid(0x41, { released: true }); // Soltar A

Encaminha um evento de teclado pelo sistema de macros do SignalRGB. Macros com um acionador onKey podem corresponder a esses eventos. Não injeta uma tecla real — apenas as macros do SignalRGB veem este evento.

O sistema de macros enriquece automaticamente o evento com o estado de modificadores ativos (Ctrl, Shift, Alt, Win) do teclado físico antes de o distribuir.

ParâmetroTipoDescriçãoExemplo
eventDataObject ou StringDados do evento. Inclua key (nome em string) e opcionalmente keyCode (número) para correspondência de tecla.{ key: "A", keyCode: 0x41 }
eventTypeStringLabel do tipo de evento"KeyPress"
keyboard.sendEvent({ key: "A", keyCode: 0x41, released: false }, "KeyPress");

Scripts de macro recebem event.Sender (o UID do plugin) e event.SenderType ("Device"), para que possam distinguir eventos originados do plugin de teclas reais de hardware.


Para plugins que representam dispositivos de rato ou ponteiro.

export function Initialize() {
device.addFeature("mouse");
}

Envia um evento de rato ao SO via SendInput. Movimentos de rato (MOUSEEVENTF_MOVE, MOUSEEVENTF_ABSOLUTE) são bloqueados por segurança.

ParâmetroTipoDescrição
buttonCodeNumberFlag Windows MOUSEEVENTF_*
options.XButtonNumberObrigatório para eventos de botão X — 1 (X1) ou 2 (X2)
options.WheelDeltaNumberObrigatório para eventos de roda de deslocamento — positivo desloca para cima, negativo para baixo

Códigos de botão comuns:

CódigoConstanteDescrição
0x0002MOUSEEVENTF_LEFTDOWNPressionar botão esquerdo
0x0004MOUSEEVENTF_LEFTUPSoltar botão esquerdo
0x0008MOUSEEVENTF_RIGHTDOWNPressionar botão direito
0x0010MOUSEEVENTF_RIGHTUPSoltar botão direito
0x0020MOUSEEVENTF_MIDDLEDOWNPressionar botão do meio
0x0040MOUSEEVENTF_MIDDLEUPSoltar botão do meio
0x0800MOUSEEVENTF_WHEELDeslocamento vertical
0x01000MOUSEEVENTF_HWHEELDeslocamento horizontal
0x0080MOUSEEVENTF_XDOWNPressionar botão X (requer opção XButton)
0x0100MOUSEEVENTF_XUPSoltar botão X (requer opção XButton)
// Clique esquerdo
mouse.sendHid(0x0002, {}); // pressionar
mouse.sendHid(0x0004, {}); // soltar
// Deslocar um passo para cima
mouse.sendHid(0x0800, { WheelDelta: 120 });
// Pressionar botão X1
mouse.sendHid(0x0080, { XButton: 1 });
mouse.sendHid(0x0100, { XButton: 1 });

Encaminha um evento de rato personalizado pelo sistema de macros do SignalRGB. Scripts de macro com um acionador onMouse podem corresponder a esses eventos. Não injeta nenhuma entrada de rato ao nível do SO.

mouse.sendEvent({ button: "LeftClick" }, "ButtonPress");

Para dispositivos sem fios que reportam o estado da bateria. Após adicionar a funcionalidade, atualize o nível e o estado da bateria sempre que o seu dispositivo os reportar.

export function Initialize() {
device.addFeature("battery");
}
MétodoDescrição
battery.setBatteryLevel(level)Definir percentagem da bateria (0–100)
battery.setBatteryState(state)Definir o estado de carga usando uma constante de estado

Constantes de estado (acesso via battery.<name>):

ConstanteDescrição
battery.disabledRelatório de bateria desativado
battery.unknownEstado ainda desconhecido
battery.drainingA funcionar com bateria
battery.chargingA carregar via cabo
battery.fullChargingA carregar e já cheio
battery.fullCarga completa, não está a carregar
battery.wirelessChargingCarregamento sem fios

Estas propriedades refletem os últimos valores definidos:

PropriedadeTipoDescrição
battery.batteryLevelNumberNível atual (0–100)
battery.batteryStateNumberValor do estado atual
battery.stateStringStringLabel de estado legível
export function Initialize() {
device.addFeature("battery");
}
export function Render() {
// Leitura não bloqueante — verificar se o dispositivo enviou um relatório de bateria neste frame
var data = device.read([], 64, 0);
if(device.getLastReadSize() > 0 && data[0] === 0x02) {
var level = data[1]; // 0–100
var charging = data[2] === 0x01;
battery.setBatteryLevel(level);
battery.setBatteryState(
charging ? battery.charging : battery.draining
);
}
}