1 package org.rpi.providers;
2
3 import java.util.Observable;
4 import java.util.Observer;
5
6 import org.apache.log4j.Logger;
7 import org.openhome.net.device.ActionError;
8 import org.openhome.net.device.DvDevice;
9 import org.openhome.net.device.IDvInvocation;
10 import org.openhome.net.device.providers.DvProviderUpnpOrgRenderingControl1;
11 import org.rpi.player.PlayManager;
12 import org.rpi.player.events.EventBase;
13 import org.rpi.player.events.EventMuteChanged;
14 import org.rpi.player.events.EventVolumeChanged;
15 import org.rpi.utils.Utils;
16
17 public class PrvRenderingControl extends DvProviderUpnpOrgRenderingControl1 implements Observer {
18
19 private Logger log = Logger.getLogger(PrvRenderingControl.class);
20 private String isMute = "0";
21 private String volume = "100";
22
23 public PrvRenderingControl(DvDevice iDevice) {
24 super(iDevice);
25 log.debug("Creating CustomRenderingControl");
26 enablePropertyLastChange();
27 createEvent();
28
29 enableActionSetBlueVideoBlackLevel();
30 enableActionSetBlueVideoGain();
31 enableActionSetBrightness();
32 enableActionSetColorTemperature();
33 enableActionSetContrast();
34 enableActionSetGreenVideoBlackLevel();
35 enableActionSetGreenVideoGain();
36 enableActionSetHorizontalKeystone();
37 enableActionSetLoudness();
38 enableActionSetMute();
39 enableActionSetRedVideoBlackLevel();
40 enableActionSetRedVideoGain();
41 enableActionSetSharpness();
42 enableActionSetVerticalKeystone();
43 enableActionSetVolume();
44 enableActionSetVolumeDB();
45 enableActionGetBlueVideoBlackLevel();
46 enableActionGetBlueVideoGain();
47 enableActionGetBrightness();
48 enableActionGetColorTemperature();
49 enableActionGetContrast();
50 enableActionGetGreenVideoBlackLevel();
51 enableActionGetGreenVideoGain();
52 enableActionGetHorizontalKeystone();
53 enableActionGetLoudness();
54 enableActionGetMute();
55 enableActionGetRedVideoBlackLevel();
56 enableActionGetRedVideoGain();
57 enableActionGetSharpness();
58 enableActionGetVerticalKeystone();
59 enableActionGetVolume();
60 enableActionGetVolumeDB();
61 enableActionGetVolumeDBRange();
62 enableActionListPresets();
63 enableActionSelectPreset();
64 PlayManager.getInstance().observVolumeEvents(this);
65
66 }
67
68 private void createEvent() {
69 getMuteAsString(PlayManager.getInstance().getMute());
70 long v = PlayManager.getInstance().getVolume();
71 if(v < 0)
72 v = 0;
73 volume = "" + v;
74 StringBuilder sb = new StringBuilder();
75 sb.append("<Event xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\">");
76 sb.append("<InstanceID val=\"0\">");
77 sb.append("<VerticalKeystone val=\"\" />");
78 sb.append("<Loudness val=\"\" />");
79 sb.append("<HorizontalKeystone val=\"\" />");
80 sb.append("<BlueVideoBlackLevel val=\"\" />");
81 sb.append("<RedVideoGain val=\"\" />");
82 sb.append("<GreenVideoBlackLevel val=\"\" />");
83 sb.append("<Volume channel=\"Master\" val=\"" + volume + "\" />");
84 sb.append("<Mute channel=\"Master\" val=\"" + isMute + "\" />");
85 sb.append("<Brightness val=\"\" />");
86 sb.append("<PresetNameList val=\"FactoryDefaults\" />");
87 sb.append("<ColorTemperature val=\"\" />");
88 sb.append("<VolumeDB channel=\"Master\" val=\"0\" />");
89 sb.append("<Contrast val=\"\" />");
90 sb.append("<GreenVideoGain val=\"\" />");
91 sb.append("<RedVideoBlackLevel val=\"\" />");
92 sb.append("<BlueVideoGain val=\"\" />");
93 sb.append("<Sharpness val=\"\" />");
94 sb.append("</InstanceID>");
95 sb.append("</Event>");
96 setPropertyLastChange(sb.toString());
97 }
98
99
100 protected String listPresets(IDvInvocation paramIDvInvocation, long paramLong) {
101 log.debug("listPresets: " + paramLong + Utils.getLogText(paramIDvInvocation));
102 return "FactoryDefaults,InstallationDefaults";
103 }
104
105 @Override
106 protected void selectPreset(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
107 log.debug("SelectPreset: " + paramString + Utils.getLogText(paramIDvInvocation));
108 }
109
110 @Override
111 protected long getBrightness(IDvInvocation paramIDvInvocation, long paramLong) {
112 log.debug("getBrightness: " + paramLong + Utils.getLogText(paramIDvInvocation));
113 return 0;
114 }
115
116 @Override
117 protected void setBrightness(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
118 checkValue(paramLong2);
119 log.debug("setBrightness: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
120 }
121
122 @Override
123 protected long getContrast(IDvInvocation paramIDvInvocation, long paramLong) {
124 log.debug("getContrast: " + paramLong + Utils.getLogText(paramIDvInvocation));
125 return 0;
126 }
127
128 @Override
129 protected void setContrast(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
130 checkValue(paramLong2);
131 log.debug("setContrast: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
132 }
133
134 @Override
135 protected long getSharpness(IDvInvocation paramIDvInvocation, long paramLong) {
136 log.debug("getSharpness: " + paramLong + Utils.getLogText(paramIDvInvocation));
137 return 0;
138 }
139
140 @Override
141 protected void setSharpness(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
142 checkValue(paramLong2);
143 log.debug("setSharpness: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
144 }
145
146 @Override
147 protected long getRedVideoGain(IDvInvocation paramIDvInvocation, long paramLong) {
148 log.debug("getRedVideoGain: " + paramLong + Utils.getLogText(paramIDvInvocation));
149 return 0;
150 }
151
152 @Override
153 protected void setRedVideoGain(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
154 checkValue(paramLong2);
155 log.debug("setRedVideoGain: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
156 }
157
158 @Override
159 protected long getGreenVideoGain(IDvInvocation paramIDvInvocation, long paramLong) {
160 log.debug("getGreenVideoGain: " + paramLong + Utils.getLogText(paramIDvInvocation));
161 return 0;
162 }
163
164 @Override
165 protected void setGreenVideoGain(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
166 checkValue(paramLong2);
167 log.debug("setGreenVideoGain: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
168 }
169
170 @Override
171 protected long getBlueVideoGain(IDvInvocation paramIDvInvocation, long paramLong) {
172 log.debug("getBlueVideoGain: " + paramLong + Utils.getLogText(paramIDvInvocation));
173 return 0;
174 }
175
176 @Override
177 protected void setBlueVideoGain(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
178 checkValue(paramLong2);
179 log.debug("setBlueVideoGain: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
180 }
181
182 @Override
183 protected long getRedVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong) {
184 log.debug("getRedVideoBlackLevel: " + paramLong + Utils.getLogText(paramIDvInvocation));
185 return 0;
186 }
187
188 @Override
189 protected void setRedVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
190 checkValue(paramLong2);
191 log.debug("setRedVideoBlackLevel: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
192 }
193
194 @Override
195 protected long getGreenVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong) {
196 log.debug("getGreenVideoBlackLevel: " + paramLong + Utils.getLogText(paramIDvInvocation));
197 return 0;
198 }
199
200 @Override
201 protected void setGreenVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
202 checkValue(paramLong2);
203 log.debug("setGreenVideoBlackLevel: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
204 }
205
206 @Override
207 protected long getBlueVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong) {
208 log.debug("getBlueVideoBlackLevel: " + paramLong + Utils.getLogText(paramIDvInvocation));
209 return 0;
210 }
211
212 @Override
213 protected void setBlueVideoBlackLevel(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
214 checkValue(paramLong2);
215 log.debug("setBlueVideoBlackLevel: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
216 }
217
218 @Override
219 protected long getColorTemperature(IDvInvocation paramIDvInvocation, long paramLong) {
220 log.debug("getColorTemperature: " + paramLong + Utils.getLogText(paramIDvInvocation));
221 return 0;
222 }
223
224 @Override
225 protected void setColorTemperature(IDvInvocation paramIDvInvocation, long paramLong1, long paramLong2) {
226 checkValue(paramLong2);
227 log.debug("setColorTemperature: " + paramLong2 + Utils.getLogText(paramIDvInvocation));
228 }
229
230 @Override
231 protected int getHorizontalKeystone(IDvInvocation paramIDvInvocation, long paramLong) {
232 log.debug("getHorizontalKeystone: " + paramLong + Utils.getLogText(paramIDvInvocation));
233 return 0;
234 }
235
236 @Override
237 protected void setHorizontalKeystone(IDvInvocation paramIDvInvocation, long paramLong, int paramInt) {
238 checkValue(paramInt);
239 log.debug("setHorizontalKeystone: " + paramInt + Utils.getLogText(paramIDvInvocation));
240 }
241
242 @Override
243 protected int getVerticalKeystone(IDvInvocation paramIDvInvocation, long paramLong) {
244 log.debug("getVerticalKeystone: " + paramLong + Utils.getLogText(paramIDvInvocation));
245 return 0;
246 }
247
248 @Override
249 protected void setVerticalKeystone(IDvInvocation paramIDvInvocation, long paramLong, int paramInt) {
250 checkValue(paramInt);
251 log.debug("setVerticalKeystone: " + paramInt + Utils.getLogText(paramIDvInvocation));
252 }
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274 @Override
275 protected int getVolumeDB(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
276 log.debug("getVolumeDB" + Utils.getLogText(paramIDvInvocation));
277 return 0;
278 }
279
280 @Override
281 protected void setVolumeDB(IDvInvocation paramIDvInvocation, long paramLong, String paramString, int paramInt) {
282 checkValue(paramInt);
283 log.debug("setVolumeDB: " + paramInt + Utils.getLogText(paramIDvInvocation));
284 }
285
286 @Override
287 protected GetVolumeDBRange getVolumeDBRange(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
288 log.debug("getVolumeDBRange" + Utils.getLogText(paramIDvInvocation));
289 GetVolumeDBRange dbr = new GetVolumeDBRange(0, 0);
290 return dbr;
291 }
292
293 @Override
294 protected boolean getLoudness(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
295 log.debug("getLoudness" + Utils.getLogText(paramIDvInvocation));
296 return false;
297 }
298
299 @Override
300 protected void setLoudness(IDvInvocation paramIDvInvocation, long paramLong, String paramString, boolean paramBoolean) {
301 log.debug("setLoudness: " + paramBoolean + Utils.getLogText(paramIDvInvocation));
302 }
303
304
305
306 @Override
307 public long getVolume(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
308 log.debug("GetVolume: " + paramString + Utils.getLogText(paramIDvInvocation));
309 try {
310 long v = PlayManager.getInstance().getVolume();
311 if(v<0)
312 v=0;
313 volume = "" + v;
314 log.debug("Returning Volume: " + v);
315 return v;
316 } catch (Exception e) {
317 log.error("Error GetVolume", e);
318 }
319 return 100;
320 }
321
322 @Override
323 protected void setVolume(IDvInvocation paramIDvInvocation, long paramLong1, String mixer, long volume) {
324 checkValue(volume);
325 log.debug("setVolume" + Utils.getLogText(paramIDvInvocation));
326 PlayManager.getInstance().setVolume(volume);
327
328 }
329
330
331 @Override
332 public boolean getMute(IDvInvocation paramIDvInvocation, long paramLong, String paramString) {
333 log.debug("getMute" + Utils.getLogText(paramIDvInvocation));
334 return PlayManager.getInstance().getMute();
335 }
336
337 @Override
338 public void setMute(IDvInvocation paramIDvInvocation, long paramLong, String paramString, boolean bMute) {
339 log.debug("setVolume" + Utils.getLogText(paramIDvInvocation));
340 PlayManager.getInstance().setMute(bMute);
341 }
342
343 private void updateVolume() {
344 StringBuffer sb = new StringBuffer();
345 sb.append("<Event xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\">");
346 sb.append("<InstanceID val=\"0\">");
347 sb.append("<Volume Channel=\"Master\" val=\"");
348 sb.append(volume);
349 sb.append("\"/>");
350 sb.append("<VolumeDB Channel=\"Master\" val=\"0\" />");
351 sb.append("</InstanceID></Event>");
352 log.debug("VolumeString: " + sb.toString());
353 setPropertyLastChange(sb.toString());
354 }
355
356 private void updateMute() {
357 StringBuffer sb = new StringBuffer();
358 sb.append("<Event xmlns=\"urn:schemas-upnp-org:metadata-1-0/RCS/\">");
359 sb.append("<InstanceID val=\"0\">");
360 sb.append("<Mute Channel=\"Master\" val=\"");
361 sb.append(isMute);
362 sb.append("\"/>");
363 sb.append("</InstanceID></Event>");
364 log.debug("MuteString: " + sb.toString());
365 setPropertyLastChange(sb.toString());
366 }
367
368 @Override
369 public void update(Observable arg0, Object obj) {
370 EventBase e = (EventBase) obj;
371 switch (e.getType()) {
372 case EVENTVOLUMECHANGED:
373 EventVolumeChanged ev = (EventVolumeChanged) e;
374 String mVolume = "" + ev.getVolume();
375 if (!mVolume.equalsIgnoreCase(volume)) {
376 volume = mVolume;
377
378 createEvent();
379 }
380
381
382 break;
383 case EVENTMUTECHANGED:
384 EventMuteChanged em = (EventMuteChanged) e;
385
386 String test = getMuteAsString(em.isMute());
387 if (!test.equalsIgnoreCase(isMute)) {
388 isMute = test;
389
390 createEvent();
391 }
392
393 break;
394 }
395
396 }
397
398 private String getMuteAsString(boolean mute) {
399 String mIsMute = "0";
400 if (mute) {
401 mIsMute = "1";
402 }
403 return mIsMute;
404 }
405
406 private void checkValue(int value)
407 {
408 long l = (long)value;
409 checkValue(l);
410 }
411 private void checkValue(long value) {
412 if (value < 0 || value > 100)
413 throw new ActionError("Specified Value: " + value + " Must be <= 100");
414 }
415
416 }