此功能旨在 补充 触摸控制器或触摸用户界面的功能。 它并不意味着取代 它们。

应用示例:

  • 在教室和讲座期间,可以使用小型遥控器将设备从待机模式唤醒。使用遥控器选择要呈现的输入源也可能很方便。

  • 在不允许使用触摸控制器的情况下控制摄像头视图(平移、倾斜和缩放)。 例如,在医院的手术室。

功能概述

在 USB 输入设备上按下按钮时,它会触发 Cisco 设备 API 中的操作。 可以设置来自第三方的宏 或外部控制设备来检测这些操作并做出相应的反应。 此功能类似于“室内控制”按钮的行为方式。 此外,通过 Webhook 或直接在 SSH 会话中监视这些操作也是可行的。

未提供预先存在的操作库供您选择。 您需要定义和建立响应事件应发生的特定操作。 例如:

  • 按下音量调高键时增加 Cisco 设备的音量。

  • 按下睡眠键时,将 Cisco 设备置于待机模式。

配置、事件和状态

本文中提到的配置和状态可从设备的本地 Web 界面和 API 有空。 阅读设备配置一 ,了解如何访问 Web 界面和使用 API。

打开设备的 Web 界面后,单击 设置 。 在配置下 ,将外围设备 > 输入设备模式 更改为 默认禁用对第三方 USB 输入设备的支持。

按下并松开按钮将生成一个按下和一个松开的事件:

 *e 用户界面输入设备键操作键:<键的名称> *e 用户界面输入设备键操作代码:<密钥的 id> *e 用户界面输入设备键操作类型:按 ** 结束 *e 用户界面输入设备键操作键:<密钥的名称> *e 用户界面输入设备密钥操作代码:密钥的 <id> *e 用户界面输入设备密钥操作类型:已发布 ** 结束 

要侦听事件,您必须注册输入设备事件的反馈:

 x 反馈寄存器 /event/UserInterface/InputDevice ** 结束 

当 Cisco 设备检测到第三方外设时,它将列在“状态 ”下和“外围设备 > 已连接设备 ”中 。 第三方设备可能会被报告为多个设备。

更多信息

自定义指南中提供了有关使用第三方输入设备的更多详细信息。 选择最新版本。

思科支持 (TAC) 不支持调试第三方代码,包括宏。 如果您需要有关宏和第三方代码的帮助,请查看 适用于协作设备的 Cisco RoomOS。 查看 此页面 以获取宏和扩展的更多示例。

示例

在此示例中,我们将向您展示如何使用第三方 USB 输入设备(在本例中为遥控器)的密钥来控制 Cisco 设备上的某些功能。

我们将向您展示如何使用 Bluetooth 遥控器(通过 USB 加密狗连接)上的按钮来管理待机、音量调整和 Cisco 摄像头设备控制等功能。 您可以开发一个宏,用于侦听相关事件并通过 Cisco 设备的 API 执行相应的操作。

在以下示例中,您必须输入以普通字体书写的文本。 斜体文本是从 Cisco 设备收到的响应。

1

在 SSH 上登录 Cisco 设备。 必须有一个本地 Admin 用户。

2

配置设备以允许使用第三方 USB 遥控器。

 x 配置外设输入设备模式:开 **端确定  

 

您可以使用以下命令检查配置是打开还是关闭:

 x 配置外设输入设备模式  *c x 配置外设输入设备模式:打开 ** 端确定  
3

注册接收反馈,以便在遥控器按钮按下和松开时能收到通知。

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

 

您可以使用此命令检查设备注册的反馈:

 x 反馈列表 /事件/用户界面/输入设备 ** 结束确定  
4

按下并松开遥控器上的按钮以检查反馈注册是否有效。

此操作会生成两个事件:按下松开。 如果您按住按钮,会看到按下事件;松开之后 会生成松开事件。

按下并松开 Enter 键时,这些事件会发布:

  *e 用户界面输入设备键操作键:KEY_ENTER *e 用户界面输入设备键操作代码:28 *e 用户界面输入设备键操作类型:按 ** 结束 *e 用户界面输入设备键操作键:KEY_ENTER *e 用户界面输入设备键操作代码:28 *e 用户界面输入设备键操作类型:已发布 ** 结束  
5

编写侦听相关输入设备事件的宏,并使用设备的 API 执行关联操作。

  • 启动待机、音量增大和音量减小按钮。 当宏看到包含 KEY_VOLUMEUP、KEY_VOLUMEDOWN 或 KEY_SLEEP 的事件时,会执行相关命令。

  • 为箭头键创建摄像机控制功能。 在按下按钮时,我们想要摄像机保持移动。 松开按钮时,摄像机停止移动。 当宏看到包含 KEY_LEFT、KEY_RIGHT、KEY_UP 或 KEY_DOWN 的事件时,会执行相关命令。

 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.状态 ===“关闭”?假:真;});xapi.status.on('Standby',state => { standbyState = state.状态 ===“关闭”?假:真;});xapi.event.on('UserInterface InputDevice Key Action',press => { if(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; } }否则如果(按。类型 ==“释放”){ 开关(按。Key){ case“KEY_LEFT”:cameraControl('Pan','Stop'); break; case“KEY_RIGHT”:cameraControl('平移','Stop'); break; case“KEY_UP”:cameraControl('Tilt','Stop'); break; case“KEY_DOWN”:cameraControl('Tilt','Stop'); break; case 'KEY_VOLUMEUP':com('Audio Volume Rise'); break; case 'KEY_VOLUMEDOWN':com('Audio Volume Reduction'); break; case 'KEY_SLEEP':com(standbyState? “待机停用”:“待机激活”);破;默认值:中断;} } });} init();