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> getDeviceByIndex (unsigned index) const throw (OpenNIException);
00068 #ifndef _WIN32
00069 boost::shared_ptr<OpenNIDevice> getDeviceBySerialNumber (const std::string& serial_number) const throw (OpenNIException);
00070 boost::shared_ptr<OpenNIDevice> getDeviceByAddress (unsigned char bus, unsigned char address) const throw (OpenNIException);
00071 #endif
00072
00073 const char* getSerialNumber (unsigned index) const throw ();
00075 const char* getConnectionString (unsigned index) const throw ();
00076
00077 const char* getVendorName (unsigned index) const throw ();
00078 const char* getProductName (unsigned index) const throw ();
00079 unsigned short getVendorID (unsigned index) const throw ();
00080 unsigned short getProductID (unsigned index) const throw ();
00081 unsigned char getBus (unsigned index) const throw ();
00082 unsigned char getAddress (unsigned index) const throw ();
00083
00084 void stopAll () throw (OpenNIException);
00085
00086 static void getDeviceType (const std::string& connection_string, unsigned short& vendorId, unsigned short& productId);
00087 protected:
00088 struct DeviceContext
00089 {
00090 DeviceContext (const xn::NodeInfo& device_node, xn::NodeInfo* image_node, xn::NodeInfo* depth_node, xn::NodeInfo* ir_node);
00091 DeviceContext (const xn::NodeInfo& device_node);
00092 DeviceContext (const DeviceContext&);
00093 xn::NodeInfo device_node;
00094 boost::shared_ptr<xn::NodeInfo> image_node;
00095 boost::shared_ptr<xn::NodeInfo> depth_node;
00096 boost::shared_ptr<xn::NodeInfo> ir_node;
00097 boost::weak_ptr<OpenNIDevice> device;
00098 };
00099
00100 OpenNIDriver () throw (OpenNIException);
00101 boost::shared_ptr<OpenNIDevice> getDevice (unsigned index) const throw (OpenNIException);
00102
00103 #ifndef _WIN32
00104
00105 void getDeviceInfos () throw ();
00106 #endif
00107
00108 mutable std::vector<DeviceContext> device_context_;
00109 mutable xn::Context context_;
00110
00111 std::map< unsigned char, std::map<unsigned char, unsigned > > bus_map_;
00112 std::map< std::string, unsigned > serial_map_;
00113 std::map< std::string, unsigned > connection_string_map_;
00114 };
00115
00116 OpenNIDriver& OpenNIDriver::getInstance () throw (OpenNIException)
00117 {
00118 static OpenNIDriver driver;
00119 return driver;
00120 }
00121
00122 unsigned OpenNIDriver::getNumberDevices () const throw ()
00123 {
00124 return (unsigned)device_context_.size ();
00125 }
00126 }
00127 #endif