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;
};
|