Exemplo
list-menuComentários?

Neste exemplo, queremos mostrar como usar as teclas de um dispositivo de entrada USB de terceiros (neste caso, um controle remoto) para controlar determinadas funções em um dispositivo Cisco.

Mostramos como usar os botões de um controle remoto Bluetooth (conectado por meio de um dongle USB) para gerenciar funções como espera, ajuste de volume e controle de um dispositivo de câmera Cisco. Você pode desenvolver uma macro que escuta eventos relevantes e executa as ações correspondentes por meio da API do dispositivo Cisco.

No exemplo a seguir, você deve inserir o texto escrito em fonte normal. O texto em itálico é a resposta recebida do dispositivo Cisco.

1

Entre no dispositivo Cisco em SSH. Você precisa de um usuário administrador local.

2

Configure o dispositivo para permitir o uso de um controle remoto USB de terceiros.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

Você pode verificar se a configuração está ativada ou desativada usando este comando:


        xConfiguration Peripherals InputDevice Mode 
        *c xConfiguration Peripherals InputDevice Mode: On ** end OK  
                  
3

Registre-se para receber feedback, para que sejamos notificados quando os botões do controle remoto forem pressionados e soltos.


       xFeedback Register /event/userinterface/inputdevice 
       ** end OK  
               

 

Você pode verificar para quais feedbacks o dispositivo está registrado usando este comando:


        xFeedback list 
       /event/userinterface/inputdevice ** end OK  
                  
4

Pressione e solte um botão no controle remoto para verificar se o registro de feedback funciona.

Essa ação gera dois eventos: Pressionado e Liberado. Se você pressionar e segurar um botão, verá o evento Pressionado até soltar o botão. Em seguida, o evento Lançado é gerado.

Esses eventos são emitidos ao pressionar e soltar a tecla Enter:

 
                   *e UserInterface InputDevice Key Action Key: KEY_ENTER *e UserInterface InputDevice Key Action Code: 28 *e UserInterface InputDevice Key Action Type: Pressed ** end *e UserInterface InputDevice Key Action Key: KEY_ENTER *e UserInterface InputDevice Key Action Code: 28 *e UserInterface InputDevice Key Action Type: Released ** end  
               
5

Escreva uma macro que escute os eventos relevantes do InputDevice e execute as ações associadas usando a API do dispositivo.

  • Dê vida aos botões de espera, aumento de volume e redução de volume. Quando a macro vê um evento contendo KEY_VOLUMEUP, KEY_VOLUMEDOWN ou KEY_SLEEP, ela executa os comandos relacionados.

  • Crie uma função de controle de câmera para as teclas de seta. Queremos continuar movendo a câmera enquanto o botão estiver pressionado. Quando o botão é solto, o movimento da câmera é interrompido. Quando a macro vê um evento contendo KEY_LEFT, KEY_RIGHT, KEY_UP ou KEY_DOWN, ela executa os comandos relacionados.


       const xapi = require('xapi'); function com(command, args='') { xapi.command(command, args); log(command + ' ' + JSON.stringify(args)); } function log(event) { console.log(event); } function notify(message) { xapi.command('UserInterface Message TextLine Display', { Text: message, duration: 3 }); } function cameraControl(motor, direction, cameraId='1') { com('Camera Ramp', { 'CameraId': cameraId, [motor]: direction }); } function init() { let standbyState; xapi.status.get('Standby').then((state) => {standbyState = state.State === 'Off' ? false : true; }); xapi.status.on('Standby', state => { standbyState = state.State === 'Off' ? false : true; }); xapi.event.on('UserInterface InputDevice Key Action', press => { if (press.Type == "Pressed") { switch (press.Key) { case "KEY_LEFT": cameraControl('Pan', 'Left'); break; case "KEY_RIGHT": cameraControl('Pan', 'Right'); break; case "KEY_UP": cameraControl('Tilt', 'Up'); break; case "KEY_DOWN": cameraControl('Tilt', 'Down'); break; default: break; } } else if (press.Type == "Released") { switch (press.Key) { case "KEY_LEFT": cameraControl('Pan', 'Stop'); break; case "KEY_RIGHT": cameraControl('Pan', 'Stop'); break; case "KEY_UP": cameraControl('Tilt', 'Stop'); break; case "KEY_DOWN": cameraControl('Tilt', 'Stop'); break; case 'KEY_VOLUMEUP': com('Audio Volume Increase'); break; case 'KEY_VOLUMEDOWN': com('Audio Volume Decrease'); break; case 'KEY_SLEEP': com(standbyState ? 'Standby Deactivate' : 'Standby Activate'); break; default: break; } } }); } init(); 
     
Este artigo foi útil?
Este artigo foi útil?