Vi viser, hvordan du kan bruge tasterne på en Bluetooth-fjernbetjening (med en USB-dongle) til at styre standbyfunktionen, øge eller mindske lydstyrken og kontrollere kameraet i en lokale- eller bordenhed. Vi opretter en makro, der lytter til relevante hændelser og udfører de tilknyttede handlinger ved brug af API'en på lokale- eller bordenheden.

Funktionen til USB-indgangsenhed fra tredjepart er beskrevet i denne artikel.

I følgende eksempel skal du angive den tekst, der er skrevet med normal skrifttype. Teksten i kursiv er det svar, der er modtaget fra lokale- eller bordenheden.

1

Log på lokale- eller bordenheden på SSH. Du skal bruge en lokal administratorbruger.

2

Konfigurer enheden til at tillade brug af en USB-fjernbetjening fra tredjepart.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Du kan kontrollere, om konfigurationen er aktiveret eller deaktiveret, ved hjælp af denne kommando:

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

OK

                  
3

Tilmeld til feedback, så vi får besked, når knapperne på fjernbetjeningen bliver trykket på eller frigivet.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Du kan kontrollere, hvilken feedback enheden registreres for, ved hjælp af denne kommando:

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Tryk på og slippe en knap på fjernbetjeningen for at kontrollere, at feedbackregistrering fungerer.

Denne handling genererer to hændelser: Nedtrykket og Frigivet. Hvis du trykker på og holder en knap nede, kan du se hændelsen Nedtrykket, indtil du slipper knappen. Så genereres hændelsen Frigivet.

Disse hændelser udstedes ved at trykke og slippe på Enter-tasten:

 
                  
*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

Skriv en makro, der lytter efter de relevante hændelser for indgangsenhed og udfører de tilknyttede handlinger ved brug af enhedens API.

  • Aktiverer standbytilstanden, lydstyrke op- og ned-knapperne. Når makroen ser en hændelse, der indeholder KEY_VOLUMEUP, KEY_VOLUMEDOWN eller KEY_SLEEP, kører den relaterede kommandoer.

  • Opret en kamerastyringsfunktion til piletasterne. Vi vil gerne blive ved med at flytte kameraet, så længe der trykkes på knappen. Når knappen er frigivet, stopper bevægelsen af kameraet. Når makroen ser en hændelse, der indeholder KEY_LEFT, KEY_RIGHT, KEY_UP eller KEY_DOWN, udfører den de relaterede kommandoer.

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