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.DvDevice;
8 import org.openhome.net.device.IDvInvocation;
9 import org.openhome.net.device.providers.DvProviderAvOpenhomeOrgVolume1;
10 import org.rpi.player.PlayManager;
11 import org.rpi.player.events.EventBase;
12 import org.rpi.player.events.EventMuteChanged;
13 import org.rpi.player.events.EventVolumeChanged;
14 import org.rpi.utils.Utils;
15
16 public class PrvVolume extends DvProviderAvOpenhomeOrgVolume1 implements Observer {
17
18 private Logger log = Logger.getLogger(PrvVolume.class);
19
20 private PlayManager iPlayer = PlayManager.getInstance();
21
22 public PrvVolume(DvDevice iDevice) {
23 super(iDevice);
24 log.debug("Creating CustomVolume");
25
26 enablePropertyVolume();
27 enablePropertyMute();
28 enablePropertyBalance();
29 enablePropertyFade();
30 enablePropertyVolumeLimit();
31 enablePropertyVolumeMax();
32 enablePropertyVolumeUnity();
33 enablePropertyVolumeSteps();
34 enablePropertyVolumeMilliDbPerStep();
35 enablePropertyBalanceMax();
36 enablePropertyFadeMax();
37
38 propertiesLock();
39 long v = iPlayer.getVolume();
40 if(v<0)
41 v=0;
42 setPropertyVolume(v);
43 setPropertyMute(false);
44 setPropertyBalance(0);
45 setPropertyFade(0);
46 setPropertyVolumeLimit(100);
47 setPropertyVolumeMax(100);
48 setPropertyVolumeUnity(80);
49 setPropertyVolumeSteps(100);
50 setPropertyVolumeMilliDbPerStep(1024);
51 setPropertyBalanceMax(0);
52 setPropertyFadeMax(0);
53 propertiesUnlock();
54
55 enableActionCharacteristics();
56 enableActionSetVolume();
57 enableActionVolumeInc();
58 enableActionVolumeDec();
59 enableActionVolume();
60 enableActionSetMute();
61 enableActionMute();
62 enableActionVolumeLimit();
63 PlayManager.getInstance().observVolumeEvents(this);
64 }
65
66 @Override
67 protected Characteristics characteristics(IDvInvocation paramIDvInvocation) {
68 log.debug("characteristics" + Utils.getLogText(paramIDvInvocation));
69 Characteristics charistics = new Characteristics(100, 0, 0, 0, 0, 0);
70 return charistics;
71 }
72
73 @Override
74 protected boolean mute(IDvInvocation paramIDvInvocation) {
75 log.debug("mute" + Utils.getLogText(paramIDvInvocation));
76 return PlayManager.getInstance().getMute();
77 }
78
79 private void updateVolume(long volume)
80 {
81 if(volume < 0)
82 volume = 0;
83 setPropertyVolume(volume);
84 }
85
86 protected void setVolume(IDvInvocation paramIDvInvocation, long volume) {
87
88 log.debug("setVolume: " + volume +Utils.getLogText(paramIDvInvocation));
89 iPlayer.setVolume(volume);
90
91 }
92
93 protected void volumeInc(IDvInvocation paramIDvInvocation) {
94 log.debug("volumeInc: " +Utils.getLogText(paramIDvInvocation));
95 long volume = iPlayer.incVolume();
96
97
98
99
100
101 }
102
103 protected void volumeDec(IDvInvocation paramIDvInvocation) {
104 log.debug("volumeDec: " +Utils.getLogText(paramIDvInvocation));
105 long volume = iPlayer.decVolume();
106
107
108
109
110
111 }
112
113 protected void setMute(IDvInvocation paramIDvInvocation, boolean mute) {
114 log.debug("vsetMute: " + mute +Utils.getLogText(paramIDvInvocation));
115 iPlayer.setMute(mute);
116 }
117
118 private void updateMute(boolean mute)
119 {
120
121 setPropertyMute(mute);
122
123 }
124
125 protected long volume(IDvInvocation paramIDvInvocation) {
126 log.debug("volume: " +Utils.getLogText(paramIDvInvocation));
127 long volume = iPlayer.getVolume();
128 log.debug("GetVolume: " + volume);
129 if(volume < 0)
130 volume = 0;
131 return volume;
132 }
133
134 @Override
135 protected long volumeLimit(IDvInvocation paramIDvInvocation) {
136 log.debug("volumeLimit: " +Utils.getLogText(paramIDvInvocation));
137 return 100;
138 }
139
140 @Override
141 public void update(Observable paramObservable, Object obj) {
142 EventBase e = (EventBase) obj;
143 switch(e.getType())
144 {
145 case EVENTVOLUMECHANGED:
146 EventVolumeChanged ev = (EventVolumeChanged)e;
147 updateVolume(ev.getVolume());
148 break;
149 case EVENTMUTECHANGED:
150 EventMuteChanged em = (EventMuteChanged)e;
151 updateMute(em.isMute());
152 break;
153 }
154 }
155 }