JavaScript应用程序如何检测Leap Motion设备是否已连接

时间:2013-07-27 07:05:23

标签: javascript leap-motion

主题说明了一切:

JavaScript应用程序如何检测Leap Motion设备是否已连接。

将Leap Motion设备从一台计算机移动到另一台计算机非常容易,如果当前有一台设备连接到计算机,JavaScript应用程序如何检测?

更新2013-08-08

我已将此问题标记为已回答,因为正如Dmitry的作品所示 - 在撰写本文时 - 对于JavaScript应用程序来说,没有简单的方法可以知道在应用程序的加载时间是否连接了Leap Motion设备。

2 个答案:

答案 0 :(得分:2)

这取决于您可用的操作系统API和驱动程序。当设备连接到计算机时,操作系统可以检测连接到其中一个插槽的设备(使用IRQ,轮询等)。然后,您可以使用驱动程序或OS API(如果它本机支持此类设备)来检查设备的状态。由于这通常是使用更低级的编程语言,如C ++,C甚至是汇编语言(javascript不适合有几个原因),你应该检查你的javascript API参考(不确定你是否使用浏览器API,Win8 API或别的东西)并查看是否有任何相关的功能。

更新:您发送的API链接似乎非常模糊。但是我发现它建立了一个到本地主机的WebSocket连接。 Controller.connect()函数实际上是一个过程(不返回任何内容)。但我找到了一个更有用的链接(入门:http://js.leapmotion.com/start),它们提供了不同事件的描述,包括以下内容:

  • deviceConnected - 已连接Leap设备
  • deviceDisconnected - 已断开Leap设备

在这种情况下,您可以使用回调而不是谓词:

function doMyOwnStuff()
{
      console.log( "O_o" );
}

var controller = new Leap.Controller();

controller.on('deviceConnected', function() {
  console.log("A Leap device has been connected.");
  doMyOwnStuff();
});

controller.on('deviceDisconnected', function() {
  console.log("A Leap device has been disconnected.");
});

//should probably fire a 'deviceConnected'
controller.connect();

我希望它有所帮助,因为我没有要测试的硬件。

答案 1 :(得分:0)

要了解有关将Leap与Web App集成的信息,我将针对Leap Motion反编译纽约时报阅读器。

关于它的实现(built.js),下面的代码可能有所帮助。 (基于Backbone.js)

var LeapController = new Leap.Controller({enableGestures:true});

    window.L = LeapController;

    LeapController.on('deviceConnected', function () {
        console.log('deviceConnected', arguments);
        // in the example code, this fires when the app starts.
        // in our app, it only fires when the device is reconnected after having been connected when the app was started.
        dispatch.trigger('LeapControl:reconnect');
    });

    LeapController.on('ready', function () {
        // this fires when the app is ready.
        dispatch.trigger('LeapControl:reconnect');
    });

    LeapController.on('connect', function () {
        console.log('device is connected');
        // this fires when no device is plugged in. wtf.
    });

    LeapController.connection.on('deviceConnect', function () {
        console.log('deviceConnect');
        // this fires when the device is changes state from plugged in to ungplugged and vice versa.
    });

    LeapController.on('deviceDisconnected', function () {
        console.log('deviceDisconnected', arguments);
        dispatch.trigger('LeapControl:disconnect');
    });

显然,NYTimes Reader的开发人员已经发现,在应用加载之前检测Leap Controller是否已经连接起来并不容易。 (“wtf”,哈哈....)

定义LeapControl行为的部分代码:断开/重新连接事件,可理解:

newNews.views.Disconnected = Backbone.View.extend({
    el: $('#disconnection-box'),
    initialize: function () {
        _.bindAll(this);
    },
    open: function () {
        this.listenTo(dispatch, 'LeapControl:disconnect', this.show);
        this.listenTo(dispatch, 'LeapControl:reconnect', this.hide);
        return this;
    }, ........

因此,当触发LeapControl:重新连接时,会弹出一个说“未检测到跳跃运动控制器”的弹出窗口。

调试时,如果在启动应用程序之前插入了跳跃动作,则会按以下顺序触发事件,这样可以确保正确检测:

  1. LeapController.on('connect',function(){             console.log('设备已连接');         });
  2. LeapController.on('ready',function(){             dispatch.trigger( 'LeapControl:重新连接');         });
  3. 同时,如果没有预先插入,只会触发此操作:

    1. LeapController.on('connect',function(){             console.log('设备已连接');         });
    2. 作为结论,我们可以使用'ready'事件来处理这种情况。 HTH