blob: 24eae30dbe8acd67e2c6dcf28919d850c25b0ff8 (
plain) (
tree)
|
|
/// @file matleap.h
/// @brief leap motion controller interface
/// @author Jeff Perry <jeffsp@gmail.com>
/// @version 1.0
/// @date 2013-09-12
#ifndef MATLEAP_H
#define MATLEAP_H
#define MAJOR_REVISION 4
#define MINOR_REVISION 0
#include "Leap.h"
#include "mex.h"
#include <unistd.h>
namespace matleap {
/// @brief a leap frame
struct frame {
int64_t id;
int64_t timestamp;
uint32_t detectedHands;
Leap::HandList hands;
bool has_gesture;
};
/// @brief leap frame grabber interface
class frame_grabber {
private:
bool debug;
Leap::Controller controllerConnection;
frame current_frame;
public:
/// @brief constructor
frame_grabber()
: debug(false) {
}
void open_connection() {
mexPrintf("Waiting for connection");
while (!controllerConnection.isConnected()) {
mexPrintf(".");
usleep(500000);
}
//controllerConnection.enableGesture(Leap::Gesture::TYPE_SWIPE);
controllerConnection.enableGesture(Leap::Gesture::TYPE_CIRCLE);
//controllerConnection.enableGesture(Leap::Gesture::TYPE_KEY_TAP);
//controllerConnection.enableGesture(Leap::Gesture::TYPE_SCREEN_TAP);
mexPrintf(" Connected!\n");
// TODO: check if needed
//LeapSetPolicyFlags(*controllerConnection, eLeapPolicyFlag_BackgroundFrames, 0);
}
void close_connection() {
mexPrintf("Good bye.");
}
/// @brief destructor
~frame_grabber() {
if (debug)
mexPrintf("Closing matleap frame grabber\n");
}
/// @brief debug member access
///
/// @param flag turn it on/off
void set_debug(bool flag) {
if (flag == debug)
return;
if (flag)
mexPrintf("Setting debug on\n");
debug = flag;
}
/// @brief get a frame from the controller
///
/// @return the frame
frame const &get_frame() {
auto const &frame = controllerConnection.frame();
current_frame.id = frame.id();
if (debug)
mexPrintf("Got frame with id %d\n", current_frame.id);
current_frame.timestamp = frame.timestamp();
current_frame.detectedHands = frame.hands().count();
current_frame.hands = frame.hands();
current_frame.has_gesture = !frame.gestures().isEmpty();
return current_frame;
}
};
} // namespace matleap
#endif
|