Voorbeeld
list-menuFeedback?

In dit voorbeeld willen we u laten zien hoe u de toetsen van een USB-invoerapparaat van derden (in dit geval een afstandsbediening) kunt gebruiken om bepaalde functies op een Cisco-apparaat te bedienen.

We laten u zien hoe u de knoppen op een Bluetooth-afstandsbediening (aangesloten via een USB-dongle) kunt gebruiken om functies zoals stand-by, volumeregeling en bediening van een Cisco-camera-apparaat te beheren. U kunt een macro ontwikkelen die naar relevante gebeurtenissen luistert en de bijbehorende acties uitvoert via de API van het Cisco-apparaat.

In het volgende voorbeeld moet u de tekst invoeren die in normaal lettertype is geschreven. De cursieve tekst is het antwoord dat van het Cisco-apparaat is ontvangen.

1

Meld u aan op het Cisco-apparaat via SSH. U hebt een lokale beheergebruiker nodig.

2

Configureer het apparaat om het gebruik van een USB-afstandsbediening van derden mogelijk te maken.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

U kunt controleren of de configuratie aan of uit staat door dit commando te gebruiken:


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

Meld u aan voor feedback, zodat we op de hoogte worden gesteld wanneer de knoppen van de afstandsbediening worden ingedrukt en losgelaten.


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

 

Met dit commando kunt u controleren voor welke feedback het apparaat geregistreerd is:


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

Druk op een knop op de afstandsbediening en laat deze los om te controleren of de feedbackregistratie werkt.

Deze actie genereert twee gebeurtenissen: Persed en Released. Als u een knop ingedrukt houdt, ziet u de gebeurtenis Ingedrukt totdat u de knop loslaat. Vervolgens wordt het evenement Released gegenereerd.

Deze gebeurtenissen worden weergegeven wanneer u de Enter-toets indrukt en weer loslaat:

 
                   *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

Schrijf een macro die luistert naar de relevante InputDevice-gebeurtenissen en de bijbehorende acties uitvoert met behulp van de API van het apparaat.

  • Breng de knoppen voor stand-by, volume omhoog en volume omlaag tot leven. Wanneer de macro een gebeurtenis ziet die KEY_VOLUMEUP, KEY_VOLUMEDOWN of KEY_SLEEP bevat, worden de gerelateerde opdrachten uitgevoerd.

  • Creëer een camerabedieningsfunctie voor de pijltjestoetsen. We willen de camera blijven bewegen zolang de knop wordt ingedrukt. Wanneer de knop wordt losgelaten, stopt de beweging van de camera. Wanneer de macro een gebeurtenis ziet die KEY_LEFT, KEY_RIGHT, KEY_UP of KEY_DOWN bevat, worden de gerelateerde opdrachten uitgevoerd.


       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(); 
     
Vond u dit artikel nuttig?
Vond u dit artikel nuttig?