View Javadoc

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  		// setPropertyLastChange("<Event xmlns = \"urn:schemas-upnp-org:metadata-1-0/RCS/\"> <InstanceID val=\"0\"> <Volume val=\"100\" Channel=\"RF\"/> <Volume val=\"100\" Channel=\"LF\"/> </InstanceID></Event>");
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 	// protected boolean getMute(IDvInvocation paramIDvInvocation, long
255 	// paramLong, String paramString) {
256 	// throw new ActionDisabledError();
257 	// }
258 
259 	// protected void setMute(IDvInvocation paramIDvInvocation, long paramLong,
260 	// String paramString, boolean paramBoolean) {
261 	// throw new ActionDisabledError();
262 	// }
263 
264 	// protected long getVolume(IDvInvocation paramIDvInvocation, long
265 	// paramLong, String paramString) {
266 	// throw new ActionDisabledError();
267 	// }
268 
269 	// protected void setVolume(IDvInvocation paramIDvInvocation, long
270 	// paramLong1, String paramString, long paramLong2) {
271 	// throw new ActionDisabledError();
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 				// updateVolume();
378 				createEvent();
379 			}
380 			// updateVolume(ev.getVolume());
381 			// updateVolume();
382 			break;
383 		case EVENTMUTECHANGED:
384 			EventMuteChanged em = (EventMuteChanged) e;
385 			// updateMute();
386 			String test = getMuteAsString(em.isMute());
387 			if (!test.equalsIgnoreCase(isMute)) {
388 				isMute = test;
389 				// updateMute();
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 &lt;= 100");		
414 	}
415 
416 }