Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef OPENNI_OPENNI_H_
00039 #define OPENNI_OPENNI_H_
00040 #include <string>
00041 #include <vector>
00042 #include <map>
00043 #include "openni_exception.h"
00044 #include "openni_device.h"
00045 #include <boost/shared_ptr.hpp>
00046 #include <boost/weak_ptr.hpp>
00047 #include <XnCppWrapper.h>
00048
00049 namespace openni_wrapper
00050 {
00051
00058 class OpenNIDriver
00059 {
00060 public:
00061 ~OpenNIDriver () throw ();
00062
00063 inline static OpenNIDriver& getInstance () throw (OpenNIException);
00064 unsigned updateDeviceList () throw ();
00065 inline unsigned getNumberDevices () const throw ();
00066
00067 boost::shared_ptr<OpenNIDevice> createVirtualDevice (const std::string& path, bool repeat, bool stream) const throw (OpenNIException);
00068 boost::shared_ptr<OpenNIDevice> getDeviceByIndex (unsigned index) const throw (OpenNIException);
00069 #ifndef _WIN32
00070 boost::shared_ptr<OpenNIDevice> getDeviceBySerialNumber (const std::string& serial_number) const throw (OpenNIException);
00071 boost::shared_ptr<OpenNIDevice> getDeviceByAddress (unsigned char bus, unsigned char address) const throw (OpenNIException);
00072 #endif
00073
00074 const char* getSerialNumber (unsigned index) const throw ();
00076 const char* getConnectionString (unsigned index) const throw ();
00077
00078 const char* getVendorName (unsigned index) const throw ();
00079 const char* getProductName (unsigned index) const throw ();
00080 unsigned short getVendorID (unsigned index) const throw ();
00081 unsigned short getProductID (unsigned index) const throw ();
00082 unsigned char getBus (unsigned index) const throw ();
00083 unsigned char getAddress (unsigned index) const throw ();
00084
00085 void getPrimesenseSerial(xn::NodeInfo info, char* buffer, unsigned buf_size) const throw ();
00086
00087 void stopAll () throw (OpenNIException);
00088
00089 static void getDeviceType (const std::string& connection_string, unsigned short& vendorId, unsigned short& productId);
00090 protected:
00091 struct DeviceContext
00092 {
00093 DeviceContext (const xn::NodeInfo& device_node, xn::NodeInfo* image_node, xn::NodeInfo* depth_node, xn::NodeInfo* ir_node);
00094 DeviceContext (const xn::NodeInfo& device_node);
00095 DeviceContext (const DeviceContext&);
00096 xn::NodeInfo device_node;
00097 boost::shared_ptr<xn::NodeInfo> image_node;
00098 boost::shared_ptr<xn::NodeInfo> depth_node;
00099 boost::shared_ptr<xn::NodeInfo> ir_node;
00100 boost::weak_ptr<OpenNIDevice> device;
00101 };
00102
00103 OpenNIDriver () throw (OpenNIException);
00104 boost::shared_ptr<OpenNIDevice> getDevice (unsigned index) const throw (OpenNIException);
00105
00106 #ifndef _WIN32
00107
00108 void getDeviceInfos () throw ();
00109 #endif
00110
00111 mutable std::vector<DeviceContext> device_context_;
00112 mutable xn::Context context_;
00113
00114 std::map< unsigned char, std::map<unsigned char, unsigned > > bus_map_;
00115 std::map< std::string, unsigned > serial_map_;
00116 std::map< std::string, unsigned > connection_string_map_;
00117 };
00118
00119 OpenNIDriver& OpenNIDriver::getInstance () throw (OpenNIException)
00120 {
00121 static OpenNIDriver driver;
00122 return driver;
00123 }
00124
00125 unsigned OpenNIDriver::getNumberDevices () const throw ()
00126 {
00127 return (unsigned)device_context_.size ();
00128 }
00129 }
00130 #endif