libusb++ API Documentation

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 
This file is part of the documentation for libusb++ .
Documentation copyright © 2004 Brad Hards.
Generated on Tue Jan 23 00:19:30 2007 by doxygen 1.5.1 written by Dimitri van Heesch.