Nous montrons comment utiliser les touches d'une télécommande Bluetooth (avec une clé USB) pour contrôler la fonction de mise en veille, augmenter et diminuer le volume et contrôler la caméra d'un périphérique de salle ou de bureau. Nous créons une macro qui reçoit les signaux audio pour les événements pertinents et effectue les actions associées à l'aide de l'API du périphérique de salle ou de bureau.

La fonctionnalité du périphérique de saisie USB tiers est décrite dans cet article.

Dans l'exemple suivant, vous devez saisir le texte qui a été écrit dans la police normale. Le texte s'affiche en italique et est la réponse qui est reçue à partir du périphérique de salle ou de bureau.

1

Se connecter au périphérique de salle ou de bureau sur SSH. Vous devez avoir un utilisateur Administrateur local.

2

Configurez le périphérique pour permettre l'utilisation d'une télécommande USB de fabricant tiers.

xConfiguration Peripherals InputDevice Mode: On
** end

OK

               

 

Vous pouvez vérifier si la configuration active ou non à l'aide de cette commande :

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

OK

                  
3

Inscrivez-vous pour activer les retours d'information, afin que nous soyons avertis lorsque les boutons de la télécommande sont enfoncés et relâchés.

xFeedback Register /event/userinterface/inputdevice
** end

OK

               

 

Vous pouvez vérifier pour quels retours d'information l'appareil est enregistré en utilisant cette commande :

xFeedback list
/event/userinterface/inputdevice
** end

OK

                  
4

Appuyez et relâchez un bouton de la télécommande pour vérifier que l'enregistrement des retours d'information fonctionne.

Cette action génère deux événements : Appuyé et Relâché. Si vous appuyez et maintenez la pression sur un bouton, vous voyez l'événement Appuyé jusqu'à ce que vous relâchiez le bouton. Puis l'événement Relâché est généré.

Ces événements sont émis en appuyant sur la touche Entrée et en la relâchant :

 
                  
*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

Écrire une macro qui écoute les événements InputDevice pertinents et effectue les actions associées à l'aide de l'API du périphérique.

  • Donnez vie aux boutons de mise en veille, d'augmentation et de réduction du volume. Lorsque la macro voit un événement contenant KEY_VOLUMEUP, KEY_VOLUMEDOWN ou KEY_SLEEP, elle exécute les commandes associées.

  • Créer une fonction de contrôle de la caméra pour les touches fléchées. Vous souhaitez continuer à déplacer la caméra tant que le bouton est enfoncé. Lorsque vous relâchez le bouton, le déplacement de la caméra s'arrête. Lorsque la macro voit un événement contenant KEY_LEFT, KEY_RIGHT, KEY_UP, ou KEY_DOWN, elle exécute les commandes associées.

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