qCNC 0.82-alpha
/home/trilog/Desktop/project/gui/Final/src/lib/qextserialport/qextserialenumerator.h
Go to the documentation of this file.
00001 
00007 #ifndef _QEXTSERIALENUMERATOR_H_
00008 #define _QEXTSERIALENUMERATOR_H_
00009 
00010 
00011 #include <QString>
00012 #include <QList>
00013 #include <QObject>
00014 #include "qextserialport_global.h"
00015 
00016 #ifdef Q_OS_WIN
00017     #include <windows.h>
00018     #include <setupapi.h>
00019     #include <dbt.h>
00020 #endif /*Q_OS_WIN*/
00021 
00022 #ifdef Q_OS_MAC
00023     #include <IOKit/usb/IOUSBLib.h>
00024 #endif
00025 
00029 struct QextPortInfo {
00030     QString portName;   
00031     QString physName;   
00032     QString friendName; 
00033     QString enumName;   
00034     int vendorID;       
00035     int productID;      
00036 };
00037 
00038 #ifdef Q_OS_WIN
00039 #ifdef QT_GUI_LIB
00040 #include <QWidget>
00041 class QextSerialEnumerator;
00042 
00043 class QextSerialRegistrationWidget : public QWidget
00044 {
00045     Q_OBJECT
00046     public:
00047         QextSerialRegistrationWidget( QextSerialEnumerator* qese ) {
00048             this->qese = qese;
00049         }
00050         ~QextSerialRegistrationWidget( ) { }
00051 
00052     protected:
00053         QextSerialEnumerator* qese;
00054         bool winEvent( MSG* message, long* result );
00055 };
00056 #endif // QT_GUI_LIB
00057 #endif // Q_OS_WIN
00058 
00096 class QEXTSERIALPORT_EXPORT QextSerialEnumerator : public QObject
00097 {
00098 Q_OBJECT
00099     public:
00100         QextSerialEnumerator( );
00101         ~QextSerialEnumerator( );
00102 
00103         #ifdef Q_OS_WIN
00104             LRESULT onDeviceChangeWin( WPARAM wParam, LPARAM lParam );
00105             private:
00112             static QString getRegKeyValue(HKEY key, LPCTSTR property);
00113 
00123             static QString getDeviceProperty(HDEVINFO devInfo, PSP_DEVINFO_DATA devData, DWORD property);
00124 
00129             static void setupAPIScan(QList<QextPortInfo> & infoList);
00130             void setUpNotificationWin( );
00131             static bool getDeviceDetailsWin( QextPortInfo* portInfo, HDEVINFO devInfo,
00132                                   PSP_DEVINFO_DATA devData, WPARAM wParam = DBT_DEVICEARRIVAL );
00133             static void enumerateDevicesWin( const GUID & guidDev, QList<QextPortInfo>* infoList );
00134             bool matchAndDispatchChangedDevice(const QString & deviceID, const GUID & guid, WPARAM wParam);
00135             #ifdef QT_GUI_LIB
00136             QextSerialRegistrationWidget* notificationWidget;
00137             #endif
00138         #endif /*Q_OS_WIN*/
00139 
00140         #ifdef Q_OS_UNIX
00141             #ifdef Q_OS_MAC
00142             private:
00147               static void scanPortsOSX(QList<QextPortInfo> & infoList);
00148               static void iterateServicesOSX(io_object_t service, QList<QextPortInfo> & infoList);
00149               static bool getServiceDetailsOSX( io_object_t service, QextPortInfo* portInfo );
00150 
00151               void setUpNotificationOSX( );
00152               void onDeviceDiscoveredOSX( io_object_t service );
00153               void onDeviceTerminatedOSX( io_object_t service );
00154               friend void deviceDiscoveredCallbackOSX( void *ctxt, io_iterator_t serialPortIterator );
00155               friend void deviceTerminatedCallbackOSX( void *ctxt, io_iterator_t serialPortIterator );
00156 
00157               IONotificationPortRef notificationPortRef;
00158 
00159             #else // Q_OS_MAC
00160             private:
00165               static void scanPortsNix(QList<QextPortInfo> & infoList);
00166             #endif // Q_OS_MAC
00167         #endif /* Q_OS_UNIX */
00168 
00169     public:
00174         static QList<QextPortInfo> getPorts();
00178         void setUpNotifications( );
00179 
00180     signals:
00188         void deviceDiscovered( const QextPortInfo & info );
00196         void deviceRemoved( const QextPortInfo & info );
00197 };
00198 
00199 #endif /*_QEXTSERIALENUMERATOR_H_*/
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Defines