Pular para o conteúdo

Módulos e Funcionalidades

Plugins podem estender suas capacidades além das leituras e escritas USB básicas usando dois sistemas: Módulos e Funcionalidades. Entender a diferença entre eles ajuda você a descobrir o que está disponível e 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 arquivo de plugin.

Caminho de importaçãoPropósito
@SignalRGB/serialComunicação serial/COM port
@SignalRGB/tcpComunicação via socket TCP
@SignalRGB/udpComunicação via socket UDP
@SignalRGB/base64Codificação e decodificação Base64
@SignalRGB/performanceProfiling de performance e timers de frame
@SignalRGB/appInfoInformações de versão do aplicativo SignalRGB
@SignalRGB/systeminfoInformações de hardware do sistema
@SignalRGB/permissionsVerificar estado de permissão do usuário
Consulte Comunicação Avançada para exemplos de uso 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 rotear eventos de teclado para macros do SignalRGB
"mouse"mouseInjetar entrada de mouse ou rotear eventos de mouse para macros do SignalRGB
"battery"batteryReportar nível de bateria e estado de carga para dispositivos sem fio
"dtls"dtlsUDP criptografado 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 bruta diretamente ao sistema operacional via keybd_event. A tecla aparece como entrada real para todos os aplicativos — 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

Roteia 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 distribuí-lo.

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 mouse ou ponteiro.

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

Envia um evento de mouse bruto ao SO via SendInput. Movimentos de mouse (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 rolagem — positivo rola 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_WHEELRolagem vertical
0x01000MOUSEEVENTF_HWHEELRolagem 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
// Rolar um passo para cima
mouse.sendHid(0x0800, { WheelDelta: 120 });
// Pressionar botão X1
mouse.sendHid(0x0080, { XButton: 1 });
mouse.sendHid(0x0100, { XButton: 1 });

Roteia um evento de mouse 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 mouse no nível do SO.

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

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

export function Initialize() {
device.addFeature("battery");
}
MétodoDescrição
battery.setBatteryLevel(level)Definir porcentagem 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.drainingFuncionando na bateria
battery.chargingCarregando via cabo
battery.fullChargingCarregando e já cheio
battery.fullCarga completa, não carregando
battery.wirelessChargingCarregamento sem fio

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