omap3530/beagle_drivers/soundsc/shared_txsound.cpp
author arunabha
Wed, 03 Mar 2010 13:10:32 +0000
changeset 23 117faf51deac
parent 20 3999188eafd0
permissions -rw-r--r--
Bug 1996 - Contribution for West Bridge Astoria Symbian Storage Driver this storage driver is for the West Bridge Astoria chipset. This device has a USB, SD and processor port for communication with a baseband processor. In our port, we connected this device DVK to the Beagleboard through the SPI interface of the OMAP3. After driver installation, the Symbian OS can see an external device or D: drive represented by the SD card. In this driver, the USB interface is not used directly, though this may be the subject of future contributions. The appropriate way to test the driver is to access the external volume and do file read and write to it, pretty much the same way you would test a thumb drive on your PC
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     1
/*
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     3
* All rights reserved.
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     4
* This component and the accompanying materials are made available
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     6
* which accompanies this distribution, and is available
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     8
*
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
     9
* Initial Contributors:
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    11
*
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    12
* Contributors:
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    13
*
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    14
* Description:
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    15
*
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    16
*/
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    17
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    18
#include "shared_sound.h"
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    19
#include "variant_sound.h"
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    20
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    21
void TimerCallback(TAny* aData)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    22
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    23
	DDriverBeagleSoundScPdd * soundscpdd = (DDriverBeagleSoundScPdd*) aData;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    24
		
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    25
	soundscpdd->Callback(soundscpdd->iTransferArray[0].iTransferID, KErrNone, soundscpdd->iTransferArray[0].iNumBytes);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    26
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    27
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    28
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    29
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    30
DDriverBeagleSoundScPdd::DDriverBeagleSoundScPdd() : iTimer(TimerCallback,this)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    31
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    32
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    33
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    34
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    35
DDriverBeagleSoundScPdd::~DDriverBeagleSoundScPdd()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    36
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    37
	iTimer.Cancel();
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    38
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    39
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    40
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    41
TInt DDriverBeagleSoundScPdd::DoCreate()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    42
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    43
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    44
	SetCaps();
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    45
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    46
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::DoCreate TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    47
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    48
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    49
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    50
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    51
void DDriverBeagleSoundScPdd::GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    52
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    53
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::GetChunkCreateInfo TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    54
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    55
	aChunkCreateInfo.iType = TChunkCreateInfo::ESharedKernelMultiple;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    56
	aChunkCreateInfo.iMapAttr = EMapAttrFullyBlocking; 	// No caching
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    57
	aChunkCreateInfo.iOwnsMemory = ETrue; 				// Using RAM pages
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    58
	aChunkCreateInfo.iDestroyedDfc = NULL; 				// No chunk destroy DFC
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    59
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    60
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    61
void DDriverBeagleSoundScPdd::Caps(TDes8& aCapsBuf) const
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    62
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    63
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    64
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::Caps TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    65
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    66
	// Fill the structure with zeros in case it is a newer version than we know about
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    67
	aCapsBuf.FillZ(aCapsBuf.MaxLength());
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    68
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    69
	// And copy the capabilities into the packaged structure
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    70
	TPtrC8 ptr((const TUint8*) &iCaps, sizeof(iCaps));
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    71
	aCapsBuf = ptr.Left(Min(ptr.Length(), aCapsBuf.MaxLength()));
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    72
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    73
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    74
TInt DDriverBeagleSoundScPdd::SetConfig(const TDesC8& aConfigBuf)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    75
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    76
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    77
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::SetConfig TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    78
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    79
	// Read the new configuration from the LDD
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    80
	TCurrentSoundFormatV02 config;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    81
	TPtr8 ptr((TUint8*) &config, sizeof(config));
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    82
	Kern::InfoCopy(ptr, aConfigBuf);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    83
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    84
	iConfig = config;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    85
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    86
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    87
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    88
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    89
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    90
TInt DDriverBeagleSoundScPdd::SetVolume(TInt aVolume)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    91
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    92
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    93
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::Setvolume TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    94
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    95
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    96
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    97
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    98
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
    99
TInt DDriverBeagleSoundScPdd::StartTransfer()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   100
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   101
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   102
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::starttransfer TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   103
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   104
	//Prepare for transfer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   105
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   106
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   107
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   108
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   109
TInt DDriverBeagleSoundScPdd::CalculateBufferTime(TInt aNumBytes)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   110
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   111
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   112
	TUint samplerate=0;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   113
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   114
	// Let the compiler perform an integer division of rates
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   115
	switch(iConfig.iRate)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   116
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   117
		case ESoundRate7350Hz: 	samplerate = 7350; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   118
		case ESoundRate8000Hz: 	samplerate = 8000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   119
		case ESoundRate8820Hz: 	samplerate = 8820; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   120
		case ESoundRate9600Hz: 	samplerate = 9600; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   121
		case ESoundRate11025Hz: samplerate = 11025; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   122
		case ESoundRate12000Hz: samplerate = 12000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   123
		case ESoundRate14700Hz:	samplerate = 14700; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   124
		case ESoundRate16000Hz: samplerate = 16000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   125
		case ESoundRate22050Hz: samplerate = 22050; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   126
		case ESoundRate24000Hz: samplerate = 24000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   127
		case ESoundRate29400Hz: samplerate = 29400; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   128
		case ESoundRate32000Hz: samplerate = 32000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   129
		case ESoundRate44100Hz: samplerate = 44100; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   130
		case ESoundRate48000Hz: samplerate = 48000; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   131
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   132
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   133
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   134
	// integer division by number of channels
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   135
	aNumBytes /= iConfig.iChannels;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   136
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   137
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::iChannels =%d", iConfig.iChannels);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   138
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::iEncoding =%d", iConfig.iEncoding);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   139
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   140
	// integer division by bytes per sample
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   141
	switch(iConfig.iEncoding)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   142
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   143
		case ESoundEncoding8BitPCM: break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   144
		case ESoundEncoding16BitPCM: aNumBytes /= 2; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   145
		case ESoundEncoding24BitPCM: aNumBytes /= 3; break;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   146
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   147
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   148
	return (aNumBytes * 1000) / samplerate; //return time in milliseconds
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   149
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   150
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   151
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   152
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   153
TInt DDriverBeagleSoundScPdd::TransferData(TUint aTransferID, TLinAddr aLinAddr, TPhysAddr /*aPhysAddr*/, TInt aNumBytes)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   154
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   155
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   156
	//function wil get called multiple times while transfer is in progress therefore keep fifo queue of requests
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   157
	TTransferArrayInfo transfer;	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   158
		
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   159
	transfer.iTransferID = aTransferID;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   160
	transfer.iLinAddr = aLinAddr;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   161
	transfer.iNumBytes = aNumBytes;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   162
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   163
	//calculate the amount of time required to play/record buffer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   164
	TInt buffer_play_time = CalculateBufferTime(aNumBytes);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   165
	TInt timerticks = NKern::TimerTicks(buffer_play_time);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   166
	transfer.iPlayTime = timerticks;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   167
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   168
	iTransferArray.Append(transfer);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   169
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   170
	//Timer will callback when correct time has elapsed, will return KErrInUse if transfer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   171
	//already active, this is ok becuase will be started again in callback
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   172
	TInt err = iTimer.OneShot(timerticks, ETrue);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   173
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   174
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   175
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   176
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   177
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   178
void DDriverBeagleSoundScPdd::StopTransfer()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   179
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   180
	// Stop transfer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   181
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::stoptransfer TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   182
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   183
	//If timer is currently active then cancel it and call back buffer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   184
	if(iTimer.Cancel())
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   185
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   186
		Callback(iTransferArray[0].iTransferID, KErrNone, iTransferArray[0].iNumBytes);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   187
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   188
		
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   189
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   190
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   191
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   192
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   193
TInt DDriverBeagleSoundScPdd::PauseTransfer()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   194
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   195
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::pausetransfer TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   196
	//Pause Transfer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   197
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   198
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   199
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   200
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   201
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   202
TInt DDriverBeagleSoundScPdd::ResumeTransfer()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   203
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   204
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::resumetransfer TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   205
	//Resume Transfer
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   206
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   207
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   208
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   209
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   210
TInt DDriverBeagleSoundScPdd::PowerUp()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   211
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   212
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::PowerUp TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   213
	return KErrNone;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   214
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   215
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   216
void DDriverBeagleSoundScPdd::PowerDown()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   217
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   218
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::Powerdown TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   219
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   220
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   221
TInt DDriverBeagleSoundScPdd::CustomConfig(TInt /*aFunction*/,TAny* /*aParam*/)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   222
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   223
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::customconfig TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   224
	return KErrNotSupported;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   225
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   226
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   227
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   228
void DDriverBeagleSoundScPdd::Callback(TUint aTransferID, TInt aTransferResult, TInt aBytesTransferred)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   229
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   230
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::playcallback TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   231
	//Callback when Transfer completes or is stopped
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   232
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   233
	iTransferArray.Remove(0);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   234
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   235
	if(iUnitType == KSoundScTxUnit0)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   236
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   237
		Ldd()->PlayCallback(aTransferID, aTransferResult, aBytesTransferred);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   238
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   239
	else if(iUnitType == KSoundScRxUnit0)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   240
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   241
		Ldd()->RecordCallback(aTransferID, aTransferResult, aBytesTransferred);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   242
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   243
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   244
	if(	iTransferArray.Count()>0)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   245
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   246
		iTimer.OneShot(iTransferArray[0].iPlayTime, ETrue);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   247
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   248
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   249
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   250
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   251
TDfcQue*DDriverBeagleSoundScPdd::DfcQ(TInt /* aUnit*/ )
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   252
        {
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   253
        return this->DfcQ();
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   254
        }
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   255
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   256
TDfcQue*DDriverBeagleSoundScPdd::DfcQ()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   257
        {
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   258
        return iPhysicalDevice->iDfcQ;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   259
        }
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   260
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   261
TInt DDriverBeagleSoundScPdd::MaxTransferLen() const
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   262
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   263
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   264
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::MaxTransferLen TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   265
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   266
	TInt maxlength = 200*1024;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   267
	return maxlength;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   268
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   269
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   270
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   271
void DDriverBeagleSoundScPdd::SetCaps()
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   272
	{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   273
	BEAGLE_SOUND_DEBUG("DDriverBeagleSoundScPdd::SetCaps TxPdd");
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   274
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   275
	if(iUnitType == KSoundScTxUnit0)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   276
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   277
		// The data transfer direction for this unit is play
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   278
		iCaps.iDirection = ESoundDirPlayback;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   279
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   280
	else if(iUnitType == KSoundScRxUnit0)
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   281
		{
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   282
		// The data transfer direction for this unit is record 
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   283
		iCaps.iDirection = ESoundDirRecord;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   284
		}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   285
	
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   286
	// This unit supports both mono and stereo
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   287
	iCaps.iChannels = (KSoundMonoChannel | KSoundStereoChannel);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   288
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   289
	// This unit supports only some of the sample rates offered by Symbian OS
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   290
	iCaps.iRates = (KSoundRate8000Hz | KSoundRate11025Hz | KSoundRate12000Hz | KSoundRate16000Hz |
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   291
					KSoundRate22050Hz | KSoundRate24000Hz | KSoundRate32000Hz | KSoundRate44100Hz |
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   292
					KSoundRate48000Hz);
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   293
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   294
	// This unit only supports 16bit PCM encoding
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   295
	iCaps.iEncodings = KSoundEncoding16BitPCM;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   296
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   297
	// This unit only supports interleaved data format when playing stereo;  that is, a PCM data
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   298
	// stream where the left and right channel samples are interleaved as L-R-L-R-L-R etc.
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   299
	iCaps.iDataFormats = KSoundDataFormatInterleaved;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   300
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   301
	// The iRequestMinSize member is named badly.  It is actually the value of which the length samples
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   302
	// must be a multiple of.  ie.  The sample length % iRequestMinSize must == 0.  This value must always
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   303
	// be a power of 2
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   304
	iCaps.iRequestMinSize = 4;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   305
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   306
	// The logarithm to base 2 of the alignment required for request arguments.  DMA requests must be
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   307
	// aligned to a 32 bit boundary
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   308
	iCaps.iRequestAlignment = 2;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   309
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   310
	// This unit is not capable of detecting changes in hardware configuration
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   311
	iCaps.iHwConfigNotificationSupport = EFalse;
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   312
	}
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   313
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   314
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   315
3999188eafd0 Adding a dummy Sound driver for BeagleBoard
arunabha
parents:
diff changeset
   316