We laten zien hoe u de toetsen van een Bluetooth-extern beheer kunt gebruiken (met een USB-dongle) om de stand-byfunctie te bedienen, het volume te verhogen en te verlagen en om de camera van een ruimte- of bureauapparaat te besturen. We maken een macro die naar relevante gebeurtenissen luistert en de bijbehorende acties gebruiken met behulp van de API van de ruimte of het bureau-apparaat.

De functie USB-invoerapparaat van derden wordt in dit artikel beschreven .

In het volgende voorbeeld moet u de tekst invoeren die in het normale lettertype is geschreven. De tekst 'italics' is het antwoord dat is ontvangen van de ruimte of het bureau-apparaat.

1

Meld u aan bij de ruimte of het bureauapparaat via SSH. U hebt een lokale beheerdergebruiker nodig.

2

Configureer het apparaat om het gebruik van een USB-poort van een derde extern beheer.


       xConfiguration Peripherals InputDevice Mode: On 
      ** end OK  
               

 

U kunt controleren of de configuratie is in- of uitgeschakeld met de volgende opdracht:


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

Registreer u voor feedback, zodat we een melding krijgen wanneer de extern beheer knoppen worden ingedrukt en vrijgegeven.


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

 

U kunt controleren voor welke feedback het apparaat is geregistreerd met de volgende opdracht:


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

Druk op een knop en laat een knop op de extern beheer controleren of feedbackregistratie werkt.

Deze handeling genereert twee gebeurtenissen: Geperst en vrijgegeven. Als u op een knop drukt en ingedrukt houdt, ziet u de gebeurtenis Ingedrukt totdat u de knop los laat. Vervolgens wordt de vrijgegeven gebeurtenis gegenereerd.

Deze gebeurtenissen worden uitgegeven wanneer u op de Enter-toets drukt en de Enter-toets uitkomt:

 
                   *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 naar de relevante InputDevice-gebeurtenissen luistert en deel de bijbehorende acties uit met behulp van de API van het apparaat.

  • Breng de stand-by- en volumeknoppen omhoog en volume omlaag tot stand. Wanneer de macro een gebeurtenis ziet met KEY_VOLUMEUP, KEY_VOLUMEDOWN of KEY_SLEEP, voert deze de verwante opdrachten uit.

  • Maak een camerabedieningsfunctie voor de pijltjestoetsen. We willen de camera blijven bewegen zolang op de knop wordt geklikt. Wanneer de knop wordt vrijgegeven, stopt de camerabeweging. Wanneer de macro een gebeurtenis ziet met DE TOETSEN LINKS_,_SLEUTEL RECHTS,_OMHOOG of OMLAAG_, voert deze de gerelateerde opdrachten uit.


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