00001
00002 #ifndef __USBPP_HEADER__
00003 #define __USBPP_HEADER__
00004
00005 #include <string>
00006 #include <list>
00007
00008 #include <usb.h>
00009
00010
00011
00012
00013
00014
00015
00025 namespace USB {
00026
00027 class Device;
00028
00036 class Endpoint {
00041 friend class Busses;
00042 public:
00043 Endpoint() {};
00044
00045 #ifdef USE_UNTESTED_LIBUSBPP_METHODS
00046
00057 int bulkWrite(QByteArray message, int timeout = 100);
00058
00071 int bulkRead(int length, unsigned char *message, int timeout = 100);
00072
00078 int reset(void);
00079
00085 int clearHalt(void);
00086
00087 #endif
00088
00097 void dumpDescriptor(void);
00098
00099 private:
00100 void setDescriptor(struct usb_endpoint_descriptor);
00101 void setParent(Device *parent);
00102 u_int8_t m_Length;
00103 u_int8_t m_DescriptorType;
00104 u_int8_t m_EndpointAddress;
00105 u_int8_t m_Attributes;
00106 u_int16_t m_MaxPacketSize;
00107 u_int8_t m_Interval;
00108 u_int8_t m_Refresh;
00109 u_int8_t m_SynchAddress;
00110 Device *m_parent;
00111 };
00112
00113 class AltSetting : public std::list<Endpoint *> {
00118 friend class Busses;
00119 public:
00120 AltSetting() {};
00121 u_int8_t numEndpoints(void);
00122
00131 void dumpDescriptor(void);
00132
00133 Endpoint *firstEndpoint(void);
00134 Endpoint *nextEndpoint(void);
00135 Endpoint *lastEndpoint(void);
00136
00137 private:
00138 std::list<Endpoint *>::const_iterator iter;
00139
00140 void setDescriptor(struct usb_interface_descriptor);
00141
00142
00143 u_int8_t m_Length;
00144 u_int8_t m_DescriptorType;
00145 u_int8_t m_InterfaceNumber;
00146 u_int8_t m_AlternateSetting;
00147 u_int8_t m_NumEndpoints;
00148 u_int8_t m_InterfaceClass;
00149 u_int8_t m_InterfaceSubClass;
00150 u_int8_t m_InterfaceProtocol;
00151 u_int8_t m_Interface;
00152 };
00153
00165 class Interface : public std::list<AltSetting *> {
00170 friend class Busses;
00171 public:
00172 Interface() {};
00173
00174 #ifdef LIBUSB_HAS_GET_DRIVER_NP
00175
00184 int driverName(std::string &driver);
00185 #endif
00186
00187 #ifdef USE_UNTESTED_LIBUSBPP_METHODS
00188
00197 int claim(void);
00198
00208 int release(void);
00209
00220 int setAltSetting(int altSettingNumber);
00221 #endif
00222
00229 u_int8_t numAltSettings(void);
00230
00242 AltSetting *firstAltSetting(void);
00243
00274 AltSetting *nextAltSetting(void);
00275
00285 AltSetting *lastAltSetting(void);
00286
00287 private:
00288 std::list<AltSetting *>::const_iterator iter;
00289
00290 void setNumAltSettings(u_int8_t);
00291 void setParent(Device *parent);
00292 u_int8_t m_numAltSettings;
00293 Device *m_parent;
00294
00295
00296 int m_interfaceNumber;
00297 void setInterfaceNumber(int interfaceNumber);
00298 };
00299
00308 class Configuration : public std::list<Interface *> {
00313 friend class Busses;
00314 public:
00315 Configuration() {};
00316
00325 void dumpDescriptor(void);
00326
00333 u_int8_t numInterfaces(void);
00334
00346 Interface *firstInterface(void);
00347
00371 Interface *nextInterface(void);
00372
00381 Interface *lastInterface(void);
00382
00383 private:
00384 std::list<Interface *>::const_iterator iter;
00385
00386 void setDescriptor(struct usb_config_descriptor);
00387
00388
00389 u_int8_t m_Length;
00390 u_int8_t m_DescriptorType;
00391 u_int16_t m_TotalLength;
00392 u_int8_t m_NumInterfaces;
00393 u_int8_t m_ConfigurationValue;
00394 u_int8_t m_Configuration;
00395 u_int8_t m_Attributes;
00396 u_int8_t m_MaxPower;
00397 };
00398
00407 class Device : public std::list<Configuration *> {
00412 friend class Busses;
00417 friend class Interface;
00422 friend class Endpoint;
00423
00424 public:
00425 Device() {};
00426 ~Device();
00427
00443 std::string fileName(void);
00444
00456 u_int16_t idVendor(void);
00457
00467 u_int16_t idProduct(void);
00468
00478 u_int16_t idRevision(void);
00479
00496 u_int8_t devClass(void);
00497
00505 u_int8_t devSubClass(void);
00506
00515 u_int8_t devProtocol(void);
00516
00517
00531 std::string Vendor(void);
00532
00546 std::string Product(void);
00547
00561 std::string SerialNumber(void);
00562
00569 u_int8_t numConfigurations(void);
00570
00582 int string(std::string &buf, int index, u_int16_t lang=0);
00583
00593 Configuration *firstConfiguration(void);
00594
00612 Configuration *nextConfiguration(void);
00613
00621 Configuration *lastConfiguration(void);
00622
00644 int controlTransfer(u_int8_t requestType, u_int8_t request,
00645 u_int16_t value, u_int16_t index, u_int16_t length,
00646 unsigned char *payload,
00647 int timeout = 100);
00648
00649 #ifdef USE_UNTESTED_LIBUSBPP_METHODS
00650
00658 int reset(void);
00659
00670 int setConfiguration(int configurationNumber);
00671 #endif
00672
00673 private:
00674 std::list<Configuration *>::const_iterator iter;
00675
00676 struct usb_dev_handle *handle();
00677 void setFileName(std::string);
00678 void setDescriptor(struct usb_device_descriptor);
00679 void setVendor(std::string);
00680 void setProduct(std::string);
00681 void setSerialNumber(std::string);
00682 void setDevHandle(struct usb_dev_handle *);
00683 std::string m_fileName;
00684 std::string m_Vendor;
00685 std::string m_Product;
00686 std::string m_SerialNumber;
00687 struct usb_device *m_dev;
00688 struct usb_dev_handle *m_handle;
00689 struct usb_device_descriptor m_descriptor;
00690 };
00691
00697 class Bus : public std::list<Device *> {
00702 friend class Busses;
00703 public:
00704 Bus() {};
00719 std::string directoryName(void);
00720 private:
00721 std::list<Device *>::const_iterator iter;
00722
00723 void setDirectoryName(std::string);
00724 std::string m_directoryName;
00725 };
00726
00741 class DeviceID {
00742 public:
00743 DeviceID() {};
00753 DeviceID(u_int16_t vendor, u_int16_t product);
00754
00760 u_int16_t vendor(void);
00761
00767 u_int16_t product(void);
00768
00769 private:
00770 u_int16_t m_vendor;
00771 u_int16_t m_product;
00772 };
00773
00782 typedef std::list<DeviceID> DeviceIDList;
00783
00789 class Busses : public std::list<Bus *> {
00790 public:
00791 Busses();
00792
00803 void rescan(void);
00804
00812 std::list<Device *> match(u_int8_t Class);
00813
00842 std::list<Device *> match(DeviceIDList);
00843
00844 private:
00845 std::list<Bus *>::const_iterator iter;
00846 };
00847
00848 class Error {
00849 public:
00850 private:
00851 };
00852
00853 }
00854 #endif
00855