Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members
usbpp.h
00001 // -*- C++;indent-tabs-mode: t; tab-width: 4; c-basic-offset: 4; -*- 00002 #ifndef __USBPP_HEADER__ 00003 #define __USBPP_HEADER__ 00004 00005 #include <string> 00006 #include <list> 00007 00008 #include <usb.h> 00009 00010 /* 00011 * The following usb.h function is not wrapped yet: 00012 * char *usb_strerror(void); 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 /* USE_UNTESTED_LIBUSBPP_METHODS */ 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 /* we don't use a normal usb_interface_descriptor */ 00142 /* because that would bring in the endpoint list */ 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 /* USE_UNTESTED_LIBUSBPP_METHODS */ 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 /* index representing the interface, in this configuration */ 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 /* we don't use a normal usb_config_descriptor */ 00388 /* because that would bring in the interface list */ 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 /* USE_UNTESTED_LIBUSBPP_METHODS */ 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 /* __USBPP_HEADER__ */ 00855