00001 
00002 #ifndef  __JBXL_OPENNI_DEV_H_
00003 #define  __JBXL_OPENNI_DEV_H_
00004 
00005 
00006 #ifdef  ENABLE_OPENNI2
00007 #ifdef  ENABLE_OPENNI
00008 #undef  ENABLE_OPENNI
00009 #endif
00010 #endif
00011 
00012 
00013 #ifdef  ENABLE_OPENNI
00014 
00015 
00016 #ifdef WIN32
00017 #pragma warning(disable:4996)
00018 #endif
00019 
00020 
00021 #include  <XnCppWrapper.h>
00022 #include  <XnUSB.h>
00023 
00024 #include  "NiDevice.h"
00025 #include  "common++.h"
00026 #include  "tools++.h"
00027 #include  "buffer.h"
00028 
00029 
00030 
00031 namespace jbxl {
00032 
00033 
00034 
00035 class  COpenNiDevice
00036 {
00037 public:
00038     COpenNiDevice(void);
00039     virtual ~COpenNiDevice(void) { free();}
00040 
00041     ONI_EnuDev  m_enu_dev;
00042 
00043     int      m_state;
00044     BOOL     m_has_camera;
00045     Buffer   m_err_mesg;
00046 
00047     int      m_xsize;
00048     int      m_ysize;
00049     int      m_nfps;
00050 
00051     XnStatus rc;
00052 
00053 public:
00054     BOOL    init(BOOL use_image);
00055     BOOL    init(char* fname, BOOL use_image);
00056     void    free(void);
00057 
00058     
00059     BOOL    create_Context(char* fname=NULL);
00060     BOOL    create_Image (BOOL easy=FALSE);
00061     BOOL    create_Depth (BOOL easy=FALSE);
00062     BOOL    create_User  (BOOL easy=FALSE);
00063     BOOL    create_Player(BOOL easy=FALSE);
00064 
00065     void    delete_Context(void);
00066     void    delete_Image(void);
00067     void    delete_Depth(void);
00068     void    delete_User(void);
00069     void    delete_Player(void);
00070 
00071 public:
00072     XnMapOutputMode         outputMode;
00073 
00074     xn::Context*            context;
00075     xn::ImageGenerator*     image;
00076     xn::DepthGenerator*     depth;
00077     xn::UserGenerator*      user;
00078     xn::Player*             player;
00079 
00080     xn::ImageMetaData*      imageMD;
00081     xn::DepthMetaData*      depthMD;
00082     xn::SceneMetaData*      sceneMD;    
00083 
00084     xn::Recorder*           recorder;
00085     xn::SkeletonCapability* skeleton;
00086 
00087 public:
00088     XnUserID                dUsers[OPENNI_USERS_NUM];
00089     XnUInt16                nUsers;
00090 
00091 
00092 public:
00093     
00094     BOOL     setup_Tracking(int profile, double smooth);
00095     void     clear_Skeleton(void);
00096     void     clear_Tracking(void);
00097 
00098     
00099     BOOL     create_Recorder(char* file_name, BOOL use_image);
00100     void     delete_Recorder(void);
00101 
00102     BOOL     start_Recorde(char* file_name, BOOL use_image);
00103     void     stop_Recorde(void);
00104 
00105 public:
00106     
00107     XN_USB_DEV_HANDLE       usb_dev;
00108     XnUSBConnectionString*  devPath;
00109 
00110 public:
00111     
00112     BOOL    open_USB_Device (void);
00113     void    close_USB_Device(void);
00114     void    set_LED_Color (int col);
00115     void    set_Tilt_Motor(int ang);
00116 
00117 public:
00118     XnCallbackHandle        userCallbacks;
00119     XnCallbackHandle        poseCallbacks;
00120     XnCallbackHandle        calibCallbacks;
00121 
00122 public:
00123     
00124     BOOL    setup_CallBacks(void);
00125     void    clear_CallBacks(void);
00126 
00127     BOOL    set_UserCallbacks(xn::UserGenerator::UserHandler newUser, xn::UserGenerator::UserHandler lostUser, void* cookie);
00128     BOOL    set_CalibCallbacks(xn::SkeletonCapability::CalibrationStart calibStart, xn::SkeletonCapability::CalibrationEnd calibEnd, void* cookie);
00129 
00130     void    unset_UserCallbacks(void);
00131     void    unset_CalibCallbacks(void);
00132 };
00133 
00134 
00135 
00136 
00138 
00139 
00140 void  XN_CALLBACK_TYPE userDetect(xn::UserGenerator& user, XnUserID nId, void* cookie);
00141 void  XN_CALLBACK_TYPE userLost  (xn::UserGenerator& user, XnUserID nId, void* cookie);
00142 void  XN_CALLBACK_TYPE calibStart(xn::SkeletonCapability& skeleton, XnUserID nId, void* cookie);
00143 void  XN_CALLBACK_TYPE calibEnd  (xn::SkeletonCapability& skeleton, XnUserID nId, XnBool success, void* cookie);
00144 
00145 
00146 
00147 
00148 }       
00149 
00150 
00151 #endif
00152 #endif
00153