Mostriamo il modo in cui utilizzare i tasti di un telecomando Bluetooth (con un adattatore USB) per controllare la funzione di standby, aumentare e ridurre il volume e controllare la videocamera di un dispositivo di sala o da scrivania. Creiamo una macro che cerca di ascoltare gli eventi pertinenti ed esegue le azioni associate utilizzando l'API del dispositivo di sala o da scrivania.

La funzione del dispositivo di input USB di terze parti viene descritta in questo articolo.

Nel seguente esempio, è necessario immettere il testo che viene scritto in caratteri normali. Il testo in corsivo corrisponde alla risposta ricevuta dal dispositivo di sala o da scrivania.

1

Eseguire l'accesso al dispositivo di sala o da scrivania su SSH. È necessario un utente ammin locale.

2

Configurare il dispositivo per consentire l'utilizzo di un controllo remoto USB di terze parti.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

È possibile verificare se la configurazione è stata Attivata o Disattivata utilizzando questo comando:

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

OK

                  
3

Registrarsi per feedback, in modo da ricevere una notifica quando vengono premuti e rilasciati i pulsanti del telecomando.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

È possibile controllare per quali feedback il dispositivo è stato registrato, utilizzando questo comando:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Premere e rilasciare un pulsante del telecomando per verificare che funzioni la registrazione del feedback.

Questa operazione genera due eventi: Premuto e Rilasciato. Se si tiene premuto un pulsante, viene visualizzato l'evento Premuto fino a quando non lo si rilascia. Quindi viene generato l'evento Rilasciato.

Questi eventi vengono emessi quando si preme e rilascia il tasto Invio:

 
                  
*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

Scrivere una macro che cerca di ascoltare gli eventi pertinenti al Dispositivo di input ed eseguire le azioni associate utilizzando l'API del dispositivo.

  • Riattivare i pulsanti di standby, di aumento e riduzione del volume. Quando la macro visualizza un evento che contiene KEY_VOLUMEUP, KEY_VOLUMEDOWN o KEY_SLEEP, esegue i comandi correlati.

  • Creare una funzione di controllo videocamera per i tasti di direzione. Desideriamo continuare a spostare la videocamera, fino a quando viene premuto il pulsante. Quando viene rilasciato il pulsante, si interrompe il movimento della videocamera. Quando la macro visualizza un evento che contiene KEY_LEFT, KEY_RIGHT, KEY_UP o KEY_DOWN, esegue i comandi correlati.

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