summaryrefslogtreecommitdiff
path: root/wpd/WpdBasicHardwareDriver/WpdBaseDriver.h
blob: 13dd46941579641971e4246e200aa55c0e295b6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma once

typedef struct tagSENSOR_INFO{
    unsigned char   deviceID;
    unsigned short  dataLength;
} SENSOR_INFO;

class WpdBaseDriver :
    public IUnknown
{
public:
    WpdBaseDriver();
    virtual ~WpdBaseDriver();

    HRESULT Initialize(_In_ IWDFDevice *pDevice);
    void    Uninitialize();

    HRESULT DispatchWpdMessage(_In_ IPortableDeviceValues* pParams,
                               _In_ IPortableDeviceValues* pResults);

    HRESULT ProcessReadData(_In_reads_(cbData) BYTE* pData, size_t cbData);

    RS232Target* GetRS232Target();

public: // IUnknown
    ULONG __stdcall AddRef();

    _At_(this, __drv_freesMem(Mem)) 
    ULONG __stdcall Release();

    HRESULT __stdcall QueryInterface(REFIID riid, void** ppv);

private:
    HRESULT OnGetObjectIDsFromPersistentUniqueIDs(_In_ IPortableDeviceValues* pParams,
                                                  _In_ IPortableDeviceValues* pResults);

    HRESULT PostSensorReadingEvent(LONGLONG llSensorData, DWORD dwUpdateInterval);

public:
        
    enum SensorType{
      UNKNOWN,  // Unknown
      COMPASS,  // Compass
      SENSIRON, // Temp/humidity sensor 
      FLEX,     // Flexiforce sensor
      PING,     // Ultrasonic ping 
      PIR,      // Passive infrared
      MEMSIC,   // 2-axis accelerometer 
      QTI,      // Light sensor
      PIEZO,    // Vibration Sensor 
      HITACHI,  // 3-axis accelerometer
    };

    SensorType   m_SensorType;  // enum value specifying sensor type

private:
    WpdObjectEnumerator            m_ObjectEnum;
    WpdObjectProperties            m_ObjectProperties;
    WpdCapabilities                m_Capabilities;

    ULONG                          m_cRef;
    RS232Connection                m_Connection;
    RS232Target                    m_Target;

    CComPtr<IWDFDevice>            m_pWDFDevice;
    CComPtr<IWpdSerializer>        m_pWpdSerializer;
    CComPtr<IPortableDeviceValues> m_pEventParams;
};