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 stopAll () throw (OpenNIException);
00086
00087 static void getDeviceType (const std::string& connection_string, unsigned short& vendorId, unsigned short& productId);
00088 protected:
00089 struct DeviceContext
00090 {
00091 DeviceContext (const xn::NodeInfo& device_node, xn::NodeInfo* image_node, xn::NodeInfo* depth_node, xn::NodeInfo* ir_node);
00092 DeviceContext (const xn::NodeInfo& device_node);
00093 DeviceContext (const DeviceContext&);
00094 xn::NodeInfo device_node;
00095 boost::shared_ptr<xn::NodeInfo> image_node;
00096 boost::shared_ptr<xn::NodeInfo> depth_node;
00097 boost::shared_ptr<xn::NodeInfo> ir_node;
00098 boost::weak_ptr<OpenNIDevice> device;
00099 };
00100
00101 OpenNIDriver () throw (OpenNIException);
00102 boost::shared_ptr<OpenNIDevice> getDevice (unsigned index) const throw (OpenNIException);
00103
00104 #ifndef _WIN32
00105
00106 void getDeviceInfos () throw ();
00107 #endif
00108
00109 mutable std::vector<DeviceContext> device_context_;
00110 mutable xn::Context context_;
00111
00112 std::map< unsigned char, std::map<unsigned char, unsigned > > bus_map_;
00113 std::map< std::string, unsigned > serial_map_;
00114 std::map< std::string, unsigned > connection_string_map_;
00115 };
00116
00117 OpenNIDriver& OpenNIDriver::getInstance () throw (OpenNIException)
00118 {
00119 static OpenNIDriver driver;
00120 return driver;
00121 }
00122
00123 unsigned OpenNIDriver::getNumberDevices () const throw ()
00124 {
00125 return (unsigned)device_context_.size ();
00126 }
00127 }
00128 #endif