44 return self; |
44 return self; |
45 } |
45 } |
46 |
46 |
47 CMMAMIDIControl::CMMAMIDIControl(CMMAMIDIPlayer* aPlayer) |
47 CMMAMIDIControl::CMMAMIDIControl(CMMAMIDIPlayer* aPlayer) |
48 { |
48 { |
49 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::CMMAMIDIControl"); |
49 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::CMMAMIDIControl"); |
50 iPlayer = aPlayer; |
50 iPlayer = aPlayer; |
51 } |
51 } |
52 |
52 |
53 CMMAMIDIControl::~CMMAMIDIControl() |
53 CMMAMIDIControl::~CMMAMIDIControl() |
54 { |
54 { |
55 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl +"); |
55 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl +"); |
56 delete iVolumeEventWait; |
56 delete iVolumeEventWait; |
57 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl -"); |
57 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl -"); |
58 } |
58 } |
59 |
59 |
60 void CMMAMIDIControl::ConstructL() |
60 void CMMAMIDIControl::ConstructL() |
61 { |
61 { |
62 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL +"); |
62 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL +"); |
63 iVolumeEventWait = CChannelVolumeEventWait::NewL(); |
63 iVolumeEventWait = CChannelVolumeEventWait::NewL(); |
64 iPlayer->addObserverL(this); |
64 iPlayer->addObserverL(this); |
65 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL -"); |
65 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL -"); |
66 } |
66 } |
67 |
67 |
68 const TDesC& CMMAMIDIControl::ClassName() const |
68 const TDesC& CMMAMIDIControl::ClassName() const |
69 { |
69 { |
70 LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ClassName"); |
70 LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ClassName"); |
71 return KMIDIControlName; |
71 return KMIDIControlName; |
72 } |
72 } |
73 |
73 |
74 TInt CMMAMIDIControl::ChannelVolumeL(TInt aChannel) |
74 TInt CMMAMIDIControl::ChannelVolumeL(TInt aChannel) |
75 { |
75 { |
76 LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL + aChannel=%d", aChannel); |
76 LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL + aChannel=%d", aChannel); |
77 |
77 |
78 CMidiClientUtility* midi = iPlayer->MidiClient(); |
78 CMidiClientUtility* midi = iPlayer->MidiClient(); |
79 |
79 |
80 // If engine is not processing events, current |
80 // If engine is not processing events, current |
81 // volume cannot be known for sure. |
81 // volume cannot be known for sure. |
129 else if (retVal > KMAXVolume) |
129 else if (retVal > KMAXVolume) |
130 { |
130 { |
131 retVal = KMAXVolume; |
131 retVal = KMAXVolume; |
132 } |
132 } |
133 |
133 |
134 LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL - retVal=%d", retVal); |
134 LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL - retVal=%d", retVal); |
135 return retVal; |
135 return retVal; |
136 } |
136 } |
137 |
137 |
138 void CMMAMIDIControl::SetChannelVolumeL(TInt aChannel, TInt aVolume) |
138 void CMMAMIDIControl::SetChannelVolumeL(TInt aChannel, TInt aVolume) |
139 { |
139 { |
140 LOG2( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL + aChannel=%d aVolume=%d", aChannel, aVolume); |
140 LOG2(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL + aChannel=%d aVolume=%d", aChannel, aVolume); |
141 |
141 |
142 CMidiClientUtility* midi = iPlayer->MidiClient(); |
142 CMidiClientUtility* midi = iPlayer->MidiClient(); |
143 |
143 |
144 // Change is done with shortMidiEvent so midi volume -> decibel |
144 // Change is done with shortMidiEvent so midi volume -> decibel |
145 // calculation is avoided (would be needed for midi client api |
145 // calculation is avoided (would be needed for midi client api |
163 #else |
163 #else |
164 if (!((engineState == EClosedDisengaged) || |
164 if (!((engineState == EClosedDisengaged) || |
165 (engineState == EOpenDisengaged))) |
165 (engineState == EOpenDisengaged))) |
166 #endif |
166 #endif |
167 { |
167 { |
168 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL ->"); |
168 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL ->"); |
169 iVolumeEventWait->StartWait(aChannel); |
169 iVolumeEventWait->StartWait(aChannel); |
170 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL <-"); |
170 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL <-"); |
171 } |
171 } |
172 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL -"); |
172 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL -"); |
173 } |
173 } |
174 |
174 |
175 void CMMAMIDIControl::SetProgramL(TInt aChannel, |
175 void CMMAMIDIControl::SetProgramL(TInt aChannel, |
176 TInt aBank, |
176 TInt aBank, |
177 TInt aProgram) |
177 TInt aProgram) |
182 midi->SetInstrumentL(aChannel, aBank, aProgram); |
182 midi->SetInstrumentL(aChannel, aBank, aProgram); |
183 } |
183 } |
184 |
184 |
185 TInt CMMAMIDIControl::SendMIDIEventL(const TDesC8* aData) |
185 TInt CMMAMIDIControl::SendMIDIEventL(const TDesC8* aData) |
186 { |
186 { |
187 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL +"); |
187 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL +"); |
188 CMidiClientUtility* midi = iPlayer->MidiClient(); |
188 CMidiClientUtility* midi = iPlayer->MidiClient(); |
189 |
189 |
190 // SendMessageL only processes first message in the descriptor, |
190 // SendMessageL only processes first message in the descriptor, |
191 // so we need to send blocks of data as many times as needed. |
191 // so we need to send blocks of data as many times as needed. |
192 |
192 |
197 // Delegate event directly to the native implementation |
197 // Delegate event directly to the native implementation |
198 // which checks the validity. |
198 // which checks the validity. |
199 TPtrC8 nextBlock = aData->Right(dataLength - dataSent); |
199 TPtrC8 nextBlock = aData->Right(dataLength - dataSent); |
200 dataSent += midi->SendMessageL(nextBlock); |
200 dataSent += midi->SendMessageL(nextBlock); |
201 } |
201 } |
202 LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL: sent %d bytes", dataSent); |
202 LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL: sent %d bytes", dataSent); |
203 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL -"); |
203 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL -"); |
204 return dataSent; |
204 return dataSent; |
205 } |
205 } |
206 |
206 |
207 TInt CMMAMIDIControl::ReInitializeMidiL(const TDesC8* aData) |
207 TInt CMMAMIDIControl::ReInitializeMidiL(const TDesC8* aData) |
208 { |
208 { |
209 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL + "); |
209 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL + "); |
210 iPlayer->ReInitializeMidiEngineL(aData); |
210 iPlayer->ReInitializeMidiEngineL(aData); |
211 LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL - "); |
211 LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL - "); |
212 return KErrNone; |
212 return KErrNone; |
213 } |
213 } |
214 |
214 |
215 void CMMAMIDIControl::MmcuoStateChanged(TMidiState /*aOldState*/, |
215 void CMMAMIDIControl::MmcuoStateChanged(TMidiState /*aOldState*/, |
216 TMidiState /*aNewState*/, |
216 TMidiState /*aNewState*/, |
223 { |
223 { |
224 } |
224 } |
225 |
225 |
226 void CMMAMIDIControl::MmcuoVolumeChanged(TInt aChannel, TReal32 /*aVolumeInDecibels*/) |
226 void CMMAMIDIControl::MmcuoVolumeChanged(TInt aChannel, TReal32 /*aVolumeInDecibels*/) |
227 { |
227 { |
228 LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged + aChannel=%d", aChannel); |
228 LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged + aChannel=%d", aChannel); |
229 if (iVolumeEventWait) |
229 if (iVolumeEventWait) |
230 { |
230 { |
231 iVolumeEventWait->HandleVolumeChangedEvent(aChannel); |
231 iVolumeEventWait->HandleVolumeChangedEvent(aChannel); |
232 } |
232 } |
233 LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged -"); |
233 LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged -"); |
234 } |
234 } |
235 |
235 |
236 void CMMAMIDIControl::MmcuoMuteChanged(TInt /*aChannel*/,TBool /*aMuted*/) |
236 void CMMAMIDIControl::MmcuoMuteChanged(TInt /*aChannel*/,TBool /*aMuted*/) |
237 { |
237 { |
238 } |
238 } |
283 delete iWait; |
283 delete iWait; |
284 } |
284 } |
285 |
285 |
286 void CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired() |
286 void CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired() |
287 { |
287 { |
288 LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired +"); |
288 LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired +"); |
289 if (iWait->IsStarted()) |
289 if (iWait->IsStarted()) |
290 { |
290 { |
291 LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired - cancelling wait"); |
291 LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired - cancelling wait"); |
292 iWait->AsyncStop(); |
292 iWait->AsyncStop(); |
293 } |
293 } |
294 LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired -"); |
294 LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired -"); |
295 } |
295 } |
296 |
296 |
297 void CMMAMIDIControl::CChannelVolumeEventWait::StartWait(TInt aChannel) |
297 void CMMAMIDIControl::CChannelVolumeEventWait::StartWait(TInt aChannel) |
298 { |
298 { |
299 LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StartWait aChannel=%d", aChannel); |
299 LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StartWait aChannel=%d", aChannel); |
300 iChannel = aChannel; |
300 iChannel = aChannel; |
301 |
301 |
302 if (!iWait->IsStarted()) |
302 if (!iWait->IsStarted()) |
303 { |
303 { |
304 iTimer->After(KMMAMIDIVolumeChangeTimeout); |
304 iTimer->After(KMMAMIDIVolumeChangeTimeout); |
306 } |
306 } |
307 } |
307 } |
308 |
308 |
309 void CMMAMIDIControl::CChannelVolumeEventWait::StopWait() |
309 void CMMAMIDIControl::CChannelVolumeEventWait::StopWait() |
310 { |
310 { |
311 LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StopWait"); |
311 LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StopWait"); |
312 if (iWait->IsStarted()) |
312 if (iWait->IsStarted()) |
313 { |
313 { |
314 iTimer->Cancel(); |
314 iTimer->Cancel(); |
315 iWait->AsyncStop(); |
315 iWait->AsyncStop(); |
316 } |
316 } |
317 } |
317 } |
318 |
318 |
319 void CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent(TInt aChannel) |
319 void CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent(TInt aChannel) |
320 { |
320 { |
321 LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent aChannel=%d", aChannel); |
321 LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent aChannel=%d", aChannel); |
322 if (iChannel == aChannel) |
322 if (iChannel == aChannel) |
323 { |
323 { |
324 StopWait(); |
324 StopWait(); |
325 } |
325 } |
326 } |
326 } |