mmdevicefw/mdf/src/audio/mdasoundadapter/mdasoundadapter.cpp
changeset 24 2672ba96448e
parent 0 40261b775718
child 50 948c7f65f6d4
equal deleted inserted replaced
21:1c0a769d0cc5 24:2672ba96448e
    20 EXPORT_C RMdaDevSound::RMdaDevSound()
    20 EXPORT_C RMdaDevSound::RMdaDevSound()
    21 	:iBody(NULL)
    21 	:iBody(NULL)
    22 	{
    22 	{
    23 	}
    23 	}
    24 		
    24 		
       
    25 /*
       
    26  @capability MultimediaDD
       
    27  
       
    28  This function creates the handle to the sound media driver.
       
    29  
       
    30  @param aUnit	A unit of the device.
       
    31  
       
    32  @return KErrNone on success, otherwise system wide error code.
       
    33  
       
    34  @capability MultimediaDD
       
    35 */
    25 EXPORT_C TInt RMdaDevSound::Open(TInt aUnit)
    36 EXPORT_C TInt RMdaDevSound::Open(TInt aUnit)
    26 	{
    37 	{
    27 	TInt err = KErrNone;
    38 	TInt err = KErrNone;
    28 	if(iBody == NULL)
    39 	if(iBody == NULL)
    29 		{
    40 		{
    33 		{
    44 		{
    34 		err = iBody->Open(aUnit);
    45 		err = iBody->Open(aUnit);
    35 		}
    46 		}
    36 	return err;
    47 	return err;
    37 	}
    48 	}
    38 		
    49 
       
    50 /*
       
    51  Gets the version object of sound media driver.
       
    52 
       
    53 @return version object.
       
    54 
       
    55 */
    39 EXPORT_C TVersion RMdaDevSound::VersionRequired() const
    56 EXPORT_C TVersion RMdaDevSound::VersionRequired() const
    40 	{
    57 	{
    41 	if(iBody)
    58 	if(iBody)
    42 		{
    59 		{
    43 		return iBody->VersionRequired();
    60 		return iBody->VersionRequired();
    44 		}
    61 		}
    45 	return TVersion();
    62 	return TVersion();
    46 	}
    63 	}
    47 
    64 
       
    65 /*
       
    66  Indicates whether the driver is sound media driver.
       
    67 
       
    68 @return KErrNone on success, otherwise System wide error code.
       
    69 
       
    70 */
    48 EXPORT_C TInt RMdaDevSound::IsMdaSound()
    71 EXPORT_C TInt RMdaDevSound::IsMdaSound()
    49 	{
    72 	{
    50 	return iBody->IsMdaSound();
    73 	return iBody->IsMdaSound();
    51 	}
    74 	}
    52 
    75 
       
    76 /*
       
    77  This function gets the play volume. 
       
    78  The range of volume level supported depends on the physical audio device used.
       
    79 
       
    80 @return Volume level.
       
    81 
       
    82 */
    53 EXPORT_C TInt RMdaDevSound::PlayVolume()
    83 EXPORT_C TInt RMdaDevSound::PlayVolume()
    54 	{
    84 	{
    55 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    85 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    56 	return iBody->PlayVolume();
    86 	return iBody->PlayVolume();
    57 	}
    87 	}
    58 	
    88 	
       
    89 /*
       
    90  This function sets the play volume.
       
    91  The volume level depends on the physical audio device used.
       
    92 	
       
    93 @param aVolume	Play volume level in the range 0 to 255 inclusive
       
    94 @see TSoundFormatsSupported
       
    95 
       
    96 */
    59 EXPORT_C void RMdaDevSound::SetPlayVolume(TInt aVolume)
    97 EXPORT_C void RMdaDevSound::SetPlayVolume(TInt aVolume)
    60 	{
    98 	{
    61 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    99 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    62 	iBody->SetPlayVolume(aVolume);
   100 	iBody->SetPlayVolume(aVolume);
    63 	}
   101 	}
    64 	
   102 
       
   103 /*
       
   104  This function sets the play volume.
       
   105  The volume level depends on the physical audio device used.
       
   106 	
       
   107 @param aVolume	Play volume level. Logarithmic value.
       
   108 @see TSoundFormatsSupported
       
   109 
       
   110 */
    65 EXPORT_C void RMdaDevSound::SetVolume(TInt aLogarithmicVolume)
   111 EXPORT_C void RMdaDevSound::SetVolume(TInt aLogarithmicVolume)
    66 	{
   112 	{
    67 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   113 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    68 	iBody->SetVolume(aLogarithmicVolume);	
   114 	iBody->SetVolume(aLogarithmicVolume);	
    69 	}
   115 	}
    70 	
   116 	
       
   117 /*
       
   118  This function cancels the currently playing sound.
       
   119  If paused, the pause will be cancelled.
       
   120  Will panic if not open.
       
   121  Will not cancel Notify*Error().
       
   122 */
    71 EXPORT_C void RMdaDevSound::CancelPlayData()
   123 EXPORT_C void RMdaDevSound::CancelPlayData()
    72 	{
   124 	{
    73 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   125 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    74 	iBody->CancelPlayData();
   126 	iBody->CancelPlayData();
    75 	}
   127 	}
    76 	
   128 
       
   129 /*
       
   130  Gets the sound record volume.
       
   131  This depends on the physical audio device used.
       
   132 @return Record volume level.
       
   133 
       
   134 */
    77 EXPORT_C TInt RMdaDevSound::RecordLevel()
   135 EXPORT_C TInt RMdaDevSound::RecordLevel()
    78 	{
   136 	{
    79 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   137 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    80 	return iBody->RecordLevel();
   138 	return iBody->RecordLevel();
    81 	}
   139 	}
    82 	
   140 
       
   141 /*
       
   142  This function sets the device record volume level.
       
   143  This depends on the physical audio device used.
       
   144 @param aLevel Record volume level.	
       
   145 @see TSoundFormatsSupported
       
   146 
       
   147 */
    83 EXPORT_C void RMdaDevSound::SetRecordLevel(TInt aLevel)
   148 EXPORT_C void RMdaDevSound::SetRecordLevel(TInt aLevel)
    84 	{
   149 	{
    85 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   150 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    86 	iBody->SetRecordLevel(aLevel);
   151 	iBody->SetRecordLevel(aLevel);
    87 	}
   152 	}
    88 	
   153 
       
   154 /*
       
   155  This function cancels the recording in progress.
       
   156  If paused, the pause will be cancelled.
       
   157  Any buffered data will be discarded.
       
   158  Will panic if not open.
       
   159  Will not cancel Notify*Error().
       
   160 */
    89 EXPORT_C void RMdaDevSound::CancelRecordData()
   161 EXPORT_C void RMdaDevSound::CancelRecordData()
    90 	{
   162 	{
    91 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   163 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    92 	iBody->CancelRecordData();
   164 	iBody->CancelRecordData();
    93 	}
   165 	}
    94 	
   166 
       
   167 /*
       
   168  This function stops recording and completes the outstanding RecordData request immediately with any available data.
       
   169  Any following RecordData calls will be completed immediately returning any buffered data, they will NOT restart recording.
       
   170 
       
   171  It  maybe called either when recording or stopped.
       
   172 
       
   173  The flushing state should be exited by calling CancelRecordData.
       
   174  
       
   175  The adaptor implements this functionality via Pause, which results in slightly different behaviour to the old RMdaDevSound driver.
       
   176  In particular the flushing state can also be exited by calling ResumeRecording, do NOT do  this... If you want this behaviour, use the
       
   177  new PauseRecording/ResumeRecording functions.
       
   178  */
    95 EXPORT_C void RMdaDevSound::FlushRecordBuffer()
   179 EXPORT_C void RMdaDevSound::FlushRecordBuffer()
    96 	{
   180 	{
    97 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   181 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
    98 	iBody->FlushRecordBuffer();
   182 	iBody->FlushRecordBuffer();
    99 	}
   183 	}
   100 	
   184 
       
   185 /*
       
   186  This function returns the number of bytes played by the driver since calling Open or 
       
   187  calling ResetBytesPlayed().
       
   188 
       
   189  It is not reset by PlayData or PausePlayBuffer/ResumePlayBuffer
       
   190 
       
   191 @see RMdaDevSound::ResetBytesPlayed() 
       
   192 @return Number of bytes played.
       
   193 */
   101 EXPORT_C TInt RMdaDevSound::BytesPlayed()
   194 EXPORT_C TInt RMdaDevSound::BytesPlayed()
   102 	{
   195 	{
   103 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   196 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   104 	return iBody->BytesPlayed();
   197 	return iBody->BytesPlayed();
   105 	}
   198 	}
   106 
   199 
       
   200 /*
       
   201  Resets the count of bytes played.
       
   202 
       
   203  If called whilst playing, the counter might not reset to exactly zero, it will reset to the number of bytes played in the current
       
   204  internal transfer.
       
   205 */
   107 EXPORT_C void RMdaDevSound::ResetBytesPlayed()
   206 EXPORT_C void RMdaDevSound::ResetBytesPlayed()
   108 	{
   207 	{
   109 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   208 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   110 	return iBody->ResetBytesPlayed();
   209 	return iBody->ResetBytesPlayed();
   111 	}
   210 	}
   112 	
   211 
       
   212 /*
       
   213  This function changes the audio play state to pause.
       
   214  It is legal to pause whilst not playing, in which case a following (single) PlayData request will be queued until
       
   215  ResumePlaying is called.
       
   216 */
   113 EXPORT_C void RMdaDevSound::PausePlayBuffer()
   217 EXPORT_C void RMdaDevSound::PausePlayBuffer()
   114 	{
   218 	{
   115 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   219 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   116 	iBody->PausePlayBuffer();
   220 	iBody->PausePlayBuffer();
   117 	}
   221 	}
   118 	
   222 
       
   223 	
       
   224 /*
       
   225  This function starts the audio play from pause state.
       
   226  If a PlaData request was active when the Pause was requested it will continue.
       
   227  If a PlayData request was not active when the Pause was requested, but a one was issued whilst paused,
       
   228  it will start.
       
   229  If there is nothing to resume, we will notify KErrUnderflow.
       
   230 */
   119 EXPORT_C void RMdaDevSound::ResumePlaying()
   231 EXPORT_C void RMdaDevSound::ResumePlaying()
   120 	{
   232 	{
   121 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   233 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   122 	iBody->ResumePlaying();
   234 	iBody->ResumePlaying();
   123 	}
   235 	}
   124 
   236 
       
   237 /*
       
   238  This function is identical to RMdaDevSound::ResumePlaying(), the parameter is ignored.
       
   239 */
   125 EXPORT_C void RMdaDevSound::ResumePlaying(TRequestStatus&)
   240 EXPORT_C void RMdaDevSound::ResumePlaying(TRequestStatus&)
   126 	{
   241 	{
   127 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   242 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   128 	iBody->ResumePlaying();
   243 	iBody->ResumePlaying();
   129 	}
   244 	}
   130 
   245 
       
   246 /*
       
   247 The current record request will be completed early with partial contents and further
       
   248 recording paused.
       
   249 
       
   250 Any following RecordData calls will be completed immediately using any buffered data, it will NOT restart recording.
       
   251 
       
   252 */
   131 EXPORT_C void RMdaDevSound::PauseRecordBuffer()
   253 EXPORT_C void RMdaDevSound::PauseRecordBuffer()
   132 	{
   254 	{
   133 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   255 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   134 	iBody->PauseRecordBuffer();
   256 	iBody->PauseRecordBuffer();
   135 	}
   257 	}
   136 
   258 
       
   259 /*
       
   260 	Resume recording.
       
   261 	Recorded data will be buffered internally.
       
   262 	If an outstanding RecordData request was issued whilst paused it will be processed.
       
   263 */
   137 EXPORT_C void RMdaDevSound::ResumeRecording()
   264 EXPORT_C void RMdaDevSound::ResumeRecording()
   138 	{
   265 	{
   139 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   266 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   140 	iBody->ResumeRecording();
   267 	iBody->ResumeRecording();
   141 	}
   268 	}
   142 
   269 
       
   270 /*
       
   271 	Return the duration of the audio data which has been played.
       
   272 	Note that this may be less than the amount of data/time queued.
       
   273 */
   143 EXPORT_C TInt RMdaDevSound::GetTimePlayed(TTimeIntervalMicroSeconds& aTimePlayed)
   274 EXPORT_C TInt RMdaDevSound::GetTimePlayed(TTimeIntervalMicroSeconds& aTimePlayed)
   144 	{
   275 	{
   145 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   276 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   146 	return iBody->GetTimePlayed(aTimePlayed);
   277 	return iBody->GetTimePlayed(aTimePlayed);
   147 	}
   278 	}
   148 
   279 
   149 
   280 
   150 	
   281 /*
       
   282  Gets the play format(capability) supported by this device. 
       
   283  This record describes supported sample rate, encoding, volume level, channels, buffer size of the audio for playing. 
       
   284 
       
   285 @param  aFormatsSupported	A reference to a client supplied TSoundFormatsSupported class to be filled by this function. 
       
   286 @see TSoundFormatsSupported
       
   287 
       
   288 */
   151 EXPORT_C void RMdaDevSound::PlayFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported)
   289 EXPORT_C void RMdaDevSound::PlayFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported)
   152 	{
   290 	{
   153 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   291 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   154 	iBody->PlayFormatsSupported(aFormatsSupported);
   292 	iBody->PlayFormatsSupported(aFormatsSupported);
   155 	}
   293 	}
   156 	
   294 
       
   295 /*
       
   296  This function gets the current play format.
       
   297 
       
   298 @param  aFormat	A reference to a client supplied TCurrentSoundFormat class to be filled by this function. 
       
   299 @see TCurrentSoundFormat
       
   300 
       
   301 */
   157 EXPORT_C void RMdaDevSound::GetPlayFormat(TCurrentSoundFormatBuf& aFormat)
   302 EXPORT_C void RMdaDevSound::GetPlayFormat(TCurrentSoundFormatBuf& aFormat)
   158 	{
   303 	{
   159 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   304 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   160 	iBody->GetPlayFormat(aFormat);
   305 	iBody->GetPlayFormat(aFormat);
   161 	}
   306 	}
   162 	
   307 
       
   308 /*
       
   309  This functions sets the play format.
       
   310 
       
   311 @param aFormat For the details refer to TCurrentSoundFormat. 
       
   312 
       
   313 @see TCurrentSoundFormat
       
   314 
       
   315 @return KErrNone on success,
       
   316 		KErrInUse if playing, 
       
   317         KErrAccessDenied if play and recording sample rate is different,
       
   318         KErrNotSupported if input sound format does not match with supported capability,
       
   319         otherwise system wide error code.
       
   320 
       
   321 */	
   163 EXPORT_C TInt RMdaDevSound::SetPlayFormat(const TCurrentSoundFormatBuf& aFormat)
   322 EXPORT_C TInt RMdaDevSound::SetPlayFormat(const TCurrentSoundFormatBuf& aFormat)
   164 	{
   323 	{
   165 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   324 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   166 	return iBody->SetPlayFormat(aFormat);
   325 	return iBody->SetPlayFormat(aFormat);
   167 	}
   326 	}
   168 
   327 
       
   328 /*
       
   329  Gets the sound record format. 
       
   330  This record describes supported sample rate, encoding, volume level, buffer size of the audio for recording.
       
   331  This depends on the physical device used.
       
   332 
       
   333 @param  aFormatsSupported	A reference to a client supplied TSoundFormatsSupported class to be filled by this function.  
       
   334 @see TSoundFormatsSupported
       
   335 
       
   336 */
   169 EXPORT_C void RMdaDevSound::RecordFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported)
   337 EXPORT_C void RMdaDevSound::RecordFormatsSupported(TSoundFormatsSupportedBuf& aFormatsSupported)
   170 	{
   338 	{
   171 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   339 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   172 	iBody->RecordFormatsSupported(aFormatsSupported);
   340 	iBody->RecordFormatsSupported(aFormatsSupported);
   173 	}
   341 	}
   174 
   342 
       
   343 /*
       
   344  Gets a current sound format used for recording.
       
   345  
       
   346 @param aFormat	A reference to a client supplied TCurrentSoundFormat class to be filled by this function.
       
   347 @see TCurrentSoundFormat
       
   348 
       
   349 */
   175 EXPORT_C void RMdaDevSound::GetRecordFormat(TCurrentSoundFormatBuf& aFormat)
   350 EXPORT_C void RMdaDevSound::GetRecordFormat(TCurrentSoundFormatBuf& aFormat)
   176 	{
   351 	{
   177 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   352 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   178 	iBody->GetRecordFormat(aFormat);
   353 	iBody->GetRecordFormat(aFormat);
   179 	}
   354 	}
   180 
   355 
       
   356 /*
       
   357  Call this function to change the sound format used for recording.
       
   358 
       
   359 @param aFormat	For details refer to TCurrentSoundFormat. 
       
   360 @see TCurrentSoundFormat
       
   361 
       
   362 @return KErrNone on sucess,
       
   363         KErrInUse  if recording already in progress,
       
   364         KErrAccessDenied   play and record sample rates are different,
       
   365         otherwise system wide error code.
       
   366 
       
   367 */
   181 EXPORT_C TInt RMdaDevSound::SetRecordFormat(const TCurrentSoundFormatBuf& aFormat)
   368 EXPORT_C TInt RMdaDevSound::SetRecordFormat(const TCurrentSoundFormatBuf& aFormat)
   182 	{
   369 	{
   183 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   370 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   184 	return iBody->SetRecordFormat(aFormat);
   371 	return iBody->SetRecordFormat(aFormat);
   185 	}
   372 	}
   201 		return iBody->Handle();
   388 		return iBody->Handle();
   202 		}
   389 		}
   203 	return 0;
   390 	return 0;
   204 	}
   391 	}
   205 
   392 
       
   393 /*
       
   394  Call this function to play the audio data in the supplied descriptor.
       
   395 
       
   396 Only a single request may be outstanding at any point in time.
       
   397 
       
   398 If paused, the request will be queued until ResumePlaying is called.
       
   399 
       
   400 @param  aStatus	For details refer to TRequestStatus. 
       
   401 @see TRequestStatus
       
   402 
       
   403 @param	aData	Descriptor with play data
       
   404 
       
   405 */
   206 EXPORT_C void RMdaDevSound::PlayData(TRequestStatus& aStatus, const TDesC8& aData)
   406 EXPORT_C void RMdaDevSound::PlayData(TRequestStatus& aStatus, const TDesC8& aData)
   207 	{
   407 	{
   208 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   408 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   209 	iBody->PlayData(aStatus, aData);
   409 	iBody->PlayData(aStatus, aData);
   210 	}
   410 	}
   211 
   411 
       
   412 /*
       
   413  Records audio data into the supplied descriptor.
       
   414 
       
   415 Only a single request may be outstanding at any point in time.
       
   416 
       
   417 If paused, the request will be queued until ResumeRecording is called.
       
   418 
       
   419 @param  aStatus	Request status
       
   420 @see TRequestStatus
       
   421 
       
   422 @param  aData	Record buffer descriptor.
       
   423 
       
   424 */
   212 EXPORT_C void RMdaDevSound::RecordData(TRequestStatus& aStatus, TDes8& aData)
   425 EXPORT_C void RMdaDevSound::RecordData(TRequestStatus& aStatus, TDes8& aData)
   213 	{
   426 	{
   214 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   427 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   215 	iBody->RecordData(aStatus, aData);
   428 	iBody->RecordData(aStatus, aData);
   216 	}
   429 	}
   217 
   430 
       
   431 /*
       
   432  Call this function to notify any error encountered while recording audio.
       
   433 
       
   434 @param  aStatus	request object's completion code value 
       
   435 @see TRequestStatus
       
   436 
       
   437 */
   218 EXPORT_C void RMdaDevSound::NotifyRecordError(TRequestStatus& aStatus)
   438 EXPORT_C void RMdaDevSound::NotifyRecordError(TRequestStatus& aStatus)
   219 	{
   439 	{
   220 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   440 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   221 	iBody->NotifyRecordError(aStatus);
   441 	iBody->NotifyRecordError(aStatus);
   222 	}
   442 	}
   223 
   443 
       
   444 /*
       
   445  Call this function to notify the play error encountered while playing the sound.
       
   446 
       
   447 @param aStatus	Error code stating the cause for the play error.
       
   448 
       
   449 */
   224 EXPORT_C void RMdaDevSound::NotifyPlayError(TRequestStatus& aStatus)
   450 EXPORT_C void RMdaDevSound::NotifyPlayError(TRequestStatus& aStatus)
   225 	{
   451 	{
   226 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   452 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   227 	iBody->NotifyPlayError(aStatus);
   453 	iBody->NotifyPlayError(aStatus);
   228 	}
   454 	}
   229 
   455 
       
   456 /*
       
   457  This function cancels the play notification error.
       
   458 
       
   459 */
   230 EXPORT_C void RMdaDevSound::CancelNotifyPlayError()
   460 EXPORT_C void RMdaDevSound::CancelNotifyPlayError()
   231 	{
   461 	{
   232 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   462 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   233 	iBody->CancelNotifyPlayError();
   463 	iBody->CancelNotifyPlayError();
   234 	}
   464 	}
   235 
   465 
       
   466 /*
       
   467  This function cancels the recording error notification.
       
   468 */
   236 EXPORT_C void RMdaDevSound::CancelNotifyRecordError()
   469 EXPORT_C void RMdaDevSound::CancelNotifyRecordError()
   237 	{
   470 	{
   238 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   471 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   239 	iBody->CancelNotifyRecordError();
   472 	iBody->CancelNotifyRecordError();
   240 	}
   473 	}
   241 
   474 
       
   475 /*
       
   476 This function cancels the currently playing sound.
       
   477 If paused, the pause will be cancelled.
       
   478 
       
   479  This function is identical to CancelPlayData
       
   480 */
   242 EXPORT_C void RMdaDevSound::FlushPlayBuffer()
   481 EXPORT_C void RMdaDevSound::FlushPlayBuffer()
   243 	{
   482 	{
   244 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   483 	__ASSERT_DEBUG(iBody != NULL, Panic(EDeviceNotOpened));
   245 	iBody->FlushPlayBuffer();
   484 	iBody->FlushPlayBuffer();
   246 	}
   485 	}