-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathDeviceInfoImplementation.h
More file actions
241 lines (223 loc) · 10.7 KB
/
Copy pathDeviceInfoImplementation.h
File metadata and controls
241 lines (223 loc) · 10.7 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
#pragma once
#include "Module.h"
#include <interfaces/IDeviceInfo.h>
namespace Thunder {
namespace Plugin {
class DeviceInfoImplementation : public Exchange::IDeviceInfo,
public Exchange::IDeviceAudioCapabilities,
public Exchange::IDeviceVideoCapabilities {
private:
class Config : public Core::JSON::Container {
using AudioCapabilitiesJsonArray = Core::JSON::ArrayType<Core::JSON::EnumType<Exchange::IDeviceAudioCapabilities::AudioCapability>>;
using MS12CapabilitiesJsonArray = Core::JSON::ArrayType<Core::JSON::EnumType<Exchange::IDeviceAudioCapabilities::MS12Capability>>;
using MS12ProfileJsonArray = Core::JSON::ArrayType<Core::JSON::EnumType<Exchange::IDeviceAudioCapabilities::MS12Profile>>;
using AudioOutputJson = Core::JSON::EnumType<Exchange::IDeviceAudioCapabilities::AudioOutput>;
public:
class AudioOutput : public Core::JSON::Container {
public:
AudioOutput& operator=(const AudioOutput&) = delete;
AudioOutput()
: Core::JSON::Container()
, Name()
, AudioCapabilities()
, MS12Capabilities()
, MS12Profiles()
{
Add(_T("name"), &Name);
Add(_T("audiocapabilities"), &AudioCapabilities);
Add(_T("ms12capabilities"), &MS12Capabilities);
Add(_T("ms12profiles"), &MS12Profiles);
}
AudioOutput(const AudioOutput& copy)
: Core::JSON::Container()
, Name(copy.Name)
, AudioCapabilities(copy.AudioCapabilities)
, MS12Capabilities(copy.MS12Capabilities)
, MS12Profiles(copy.MS12Profiles)
{
Add(_T("name"), &Name);
Add(_T("audiocapabilities"), &AudioCapabilities);
Add(_T("ms12capabilities"), &MS12Capabilities);
Add(_T("ms12profiles"), &MS12Profiles);
}
~AudioOutput() = default;
AudioOutputJson Name;
AudioCapabilitiesJsonArray AudioCapabilities;
MS12CapabilitiesJsonArray MS12Capabilities;
MS12ProfileJsonArray MS12Profiles;
};
using ResolutionsJsonArray = Core::JSON::ArrayType<Core::JSON::EnumType<Exchange::IDeviceVideoCapabilities::ScreenResolution>>;
using VideoOutputJson = Core::JSON::EnumType<Exchange::IDeviceVideoCapabilities::VideoOutput>;
class VideoOutput : public Core::JSON::Container {
public:
VideoOutput& operator=(const VideoOutput&) = delete;
VideoOutput()
: Core::JSON::Container()
, Name()
, Resolutions()
, DefaultResolution(Exchange::IDeviceVideoCapabilities::ScreenResolution_Unknown)
, CopyProtection(Exchange::IDeviceVideoCapabilities::CopyProtection::HDCP_UNAVAILABLE)
{
Add(_T("name"), &Name);
Add(_T("resolutions"), &Resolutions);
Add(_T("defaultresolution"), &DefaultResolution);
Add(_T("copyprotection"), &CopyProtection);
}
VideoOutput(const VideoOutput& copy)
: Core::JSON::Container()
, Name(copy.Name)
, Resolutions(copy.Resolutions)
, DefaultResolution(copy.DefaultResolution)
, CopyProtection(copy.CopyProtection)
{
Add(_T("name"), &Name);
Add(_T("resolutions"), &Resolutions);
Add(_T("defaultresolution"), &DefaultResolution);
Add(_T("copyprotection"), &CopyProtection);
}
~VideoOutput() = default;
VideoOutputJson Name;
ResolutionsJsonArray Resolutions;
Core::JSON::EnumType<Exchange::IDeviceVideoCapabilities::ScreenResolution> DefaultResolution;
Core::JSON::EnumType<Exchange::IDeviceVideoCapabilities::CopyProtection> CopyProtection;
};
public:
Config(const Config&) = delete;
Config& operator=(const Config&) = delete;
Config()
: Core::JSON::Container()
, Hdr(false)
, Atmos(false)
, Cec(false)
, Edid()
, AudioOutputs()
, VideoOutputs()
, Make()
, ModelName()
, ModelYear()
, FriendlyName()
, DeviceType()
, DistributorId()
, SerialNumber()
, Sku()
, PlatformName()
{
Add(_T("hdr"), &Hdr);
Add(_T("atmos"), &Atmos);
Add(_T("cec"), &Cec);
Add(_T("edid"), &Edid);
Add(_T("audiooutputs"), &AudioOutputs);
Add(_T("videooutputs"), &VideoOutputs);
Add(_T("make"), &Make);
Add(_T("modelname"), &ModelName);
Add(_T("modelyear"), &ModelYear);
Add(_T("friendlyname"), &FriendlyName);
Add(_T("devicetype"), &DeviceType);
Add(_T("distributorid"), &DistributorId);
Add(_T("serialnumber"), &SerialNumber);
Add(_T("sku"), &Sku);
Add(_T("platformname"), &PlatformName);
}
~Config() = default;
Core::JSON::Boolean Hdr;
Core::JSON::Boolean Atmos;
Core::JSON::Boolean Cec;
Core::JSON::String Edid;
Core::JSON::ArrayType<AudioOutput> AudioOutputs;
Core::JSON::ArrayType<VideoOutput> VideoOutputs;
Core::JSON::String Make;
Core::JSON::String ModelName;
Core::JSON::DecUInt16 ModelYear;
Core::JSON::String FriendlyName;
Core::JSON::String DeviceType;
Core::JSON::String DistributorId;
Core::JSON::String SerialNumber;
Core::JSON::String Sku;
Core::JSON::String PlatformName;
}; // CONFIG
struct AudioOutputCapability {
std::list<IDeviceAudioCapabilities::AudioCapability> AudioCapabilities;
std::list<IDeviceAudioCapabilities::MS12Capability> MS12Capabilities;
std::list<IDeviceAudioCapabilities::MS12Profile> MS12Profiles;
};
using AudioOutputMap = std::map<Exchange::IDeviceAudioCapabilities::AudioOutput, AudioOutputCapability>;
using AudioOutputList = std::vector<Exchange::IDeviceAudioCapabilities::AudioOutput>;
using AudioOutputIteratorImplementation = RPC::IteratorType<Exchange::IDeviceAudioCapabilities::IAudioOutputIterator>;
struct VideoOutputCapability {
std::list<IDeviceVideoCapabilities::ScreenResolution> Resolutions;
IDeviceVideoCapabilities::ScreenResolution DefaultResolution;
IDeviceVideoCapabilities::CopyProtection CopyProtection;
};
using VideoOutputMap = std::map<Exchange::IDeviceVideoCapabilities::VideoOutput, VideoOutputCapability>;
using VideoOutputList = std::vector<Exchange::IDeviceVideoCapabilities::VideoOutput>;
using VideoOutputIteratorImplementation = RPC::IteratorType<Exchange::IDeviceVideoCapabilities::IVideoOutputIterator>;
public:
DeviceInfoImplementation(const DeviceInfoImplementation&) = delete;
DeviceInfoImplementation& operator=(const DeviceInfoImplementation&) = delete;
DeviceInfoImplementation()
: _config()
, _supportsHdr(false)
, _supportsAtmos(false)
, _supportsCEC(false)
, _hostEdid()
, _audioOutputMap()
, _videoOutputMap()
, _make()
, _modelName()
, _modelYear()
, _friendlyName()
, _deviceType()
, _distributorId()
, _serialNumber()
, _sku()
, _platformName()
{
}
~DeviceInfoImplementation() {}
BEGIN_INTERFACE_MAP(DeviceInfoImplementation)
INTERFACE_ENTRY(Exchange::IDeviceInfo)
INTERFACE_ENTRY(Exchange::IDeviceAudioCapabilities)
INTERFACE_ENTRY(Exchange::IDeviceVideoCapabilities)
END_INTERFACE_MAP
uint32_t Configure(const PluginHost::IShell* service) override;
uint32_t AudioOutputs(IAudioOutputIterator*& res) const override;
uint32_t AudioCapabilities(const AudioOutput audioOutput, IAudioCapabilityIterator*& audioCapabilities) const override;
uint32_t MS12Capabilities(const AudioOutput audioOutput, IMS12CapabilityIterator*& ms12Capabilities) const override;
uint32_t MS12AudioProfiles(const AudioOutput audioOutput, IMS12ProfileIterator*& ms12AudioProfiles) const override;
uint32_t VideoOutputs(IVideoOutputIterator*& videoOutputs) const override;
uint32_t DefaultResolution(const VideoOutput videoOutput, ScreenResolution& defaultResolution) const override;
uint32_t Resolutions(const VideoOutput videoOutput, IScreenResolutionIterator*& resolutions) const override;
uint32_t Hdcp(const VideoOutput videoOutput, CopyProtection& hdcpVersion) const override;
uint32_t HDR(bool& supportsHDR) const override;
uint32_t Atmos(bool& supportsAtmos) const override;
uint32_t CEC(bool& supportsCEC) const override;
uint32_t HostEDID(string& edid) const override;
uint32_t Make(string& value) const override;
uint32_t ModelName(string& value) const override;
uint32_t ModelYear(uint16_t& value) const override;
uint32_t DeviceType(string& value) const override;
uint32_t FriendlyName(string& value) const override;
uint32_t DistributorId(string& value) const override;
uint32_t SerialNumber(string& value) const override;
uint32_t Sku(string& value) const override;
uint32_t PlatformName(string& value) const override;
private:
Config _config;
bool _supportsHdr;
bool _supportsAtmos;
bool _supportsCEC;
string _hostEdid;
AudioOutputMap _audioOutputMap;
VideoOutputMap _videoOutputMap;
string _make;
string _modelName;
uint16_t _modelYear;
string _friendlyName;
string _deviceType;
string _distributorId;
string _serialNumber;
string _sku;
string _platformName;
};
} //namespace Thunder
} //namespace Plugin