os/kernelhwsrv/bsptemplate/asspandvariant/template_variant/inc/soundsc_plat.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // template\template_variant\inc\soundsc_plat.h
    15 // Definitions for the Template shared chunk sound physical device driver (PDD).
    16 // 
    17 //
    18 
    19 /**
    20  @file
    21  @internalTechnology
    22  @prototype
    23 */
    24 
    25 #ifndef __SOUNDSC_PLAT_H__
    26 #define __SOUNDSC_PLAT_H__
    27 
    28 #include <drivers/dma.h>
    29 #include <drivers/soundsc.h>
    30 
    31 //#define __KTRACE_SND(s) s;
    32 #define __KTRACE_SND(s)
    33 
    34 // TO DO: (mandatory)
    35 // Fill in the maximum number of requests that may be outstanding on the playback and record DMA channels for this device.
    36 const TInt KTemplateMaxTxDmaRequests=2;
    37 const TInt KTemplateMaxRxDmaRequests=2;
    38 
    39 // TO DO: (mandatory)
    40 // Fill in the maximum transfer length supported  on the playback and record DMA channels for this device.
    41 const TInt KTemplateMaxTxDmaTransferLen=0;
    42 const TInt KTemplateMaxRxDmaTransferLen=0;
    43 
    44 // Forward declarations
    45 class DTemplateSoundScTxDmaRequest;
    46 class DTemplateSoundScRxDmaRequest;
    47 
    48 /**
    49 Factory class instantiated from ordinal 0.
    50 The Template physical device for the shared chunk sound driver used to create the DSoundScPdd-derived channel objects.
    51 */
    52 class DTemplateSoundScPddFactory : public DPhysicalDevice
    53 	{
    54 public:
    55 	DTemplateSoundScPddFactory();
    56 	~DTemplateSoundScPddFactory();
    57 	virtual TInt Install();
    58 	virtual void GetCaps(TDes8& aDes) const;
    59 	virtual TInt Create(DBase*& aChannel, TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
    60 	virtual TInt Validate(TInt aUnit, const TDesC8* aInfo, const TVersion& aVer);
    61 private:
    62 	/** The DFC queue (used also by the LDD). */ 
    63 	TDynamicDfcQue* iDfcQ;
    64 	friend class DTemplateSoundScTxPdd;
    65 	friend class DTemplateSoundScRxPdd;	
    66 	};
    67 
    68 /**
    69 The Template physical device driver (PDD) for the playback shared chunk sound driver.
    70 */
    71 //
    72 // TO DO: (optional)
    73 //
    74 // Add any private functions and data you require
    75 //
    76 class DTemplateSoundScTxPdd : public DSoundScPdd
    77 	{
    78 public:
    79 	DTemplateSoundScTxPdd();
    80 	~DTemplateSoundScTxPdd();
    81 	TInt DoCreate();
    82 
    83 	// Implementations of the pure virtual functions inherited from DSoundScPdd (called by LDD).
    84 	virtual TDfcQue* DfcQ(TInt aUnit);
    85 	virtual void GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo);
    86 	virtual void Caps(TDes8& aCapsBuf) const;
    87 	virtual TInt MaxTransferLen() const;
    88 	virtual TInt SetConfig(const TDesC8& aConfigBuf);
    89 	virtual TInt SetVolume(TInt aVolume);
    90 	virtual TInt StartTransfer();
    91 	virtual TInt TransferData(TUint aTransferID,TLinAddr aLinAddr,TPhysAddr aPhysAddr,TInt aNumBytes);
    92 	virtual void StopTransfer();
    93 	virtual TInt PauseTransfer();
    94 	virtual TInt ResumeTransfer();
    95 	virtual TInt PowerUp();
    96 	virtual void PowerDown();
    97 	virtual TInt CustomConfig(TInt aFunction,TAny* aParam);
    98 	virtual TInt TimeTransferred(TInt64& aTimeTransferred, TInt aStatus);
    99 	void PlayCallback(TUint aTransferID,TInt aTransferResult,TInt aBytesTransferred);
   100 private:
   101 	void SetCaps();
   102 	
   103 private:
   104 	/** A pointer to the PDD factory. */
   105 	DTemplateSoundScPddFactory* iPhysicalDevice;
   106 	/** The capabilities of this device. */
   107 	TSoundFormatsSupportedV02 iCaps;
   108 	/** The playback DMA channel. */
   109 	TDmaChannel* iDmaChannel;
   110 	/** The DMA request structures used for transfers. */ 				
   111 	DTemplateSoundScTxDmaRequest* iDmaRequest[KTemplateMaxTxDmaRequests];
   112 	/** The number of outstanding DMA play requests on the DMA channel. */	
   113 	TInt iPendingPlay;
   114 	/** A flag selecting the next DMA request for transfer. */
   115 	TInt iFlag;
   116 	friend class DTemplateSoundScPddFactory;
   117 	};
   118 	
   119 /**
   120 The Template physical device driver (PDD) for the record shared chunk sound driver.
   121 */
   122 //
   123 // TO DO: (optional)
   124 //
   125 // Add any private functions and data you require
   126 //
   127 class DTemplateSoundScRxPdd : public DSoundScPdd
   128 	{
   129 public:
   130 	DTemplateSoundScRxPdd();
   131 	~DTemplateSoundScRxPdd();
   132 	TInt DoCreate();
   133 
   134 	// Implementations of the pure virtual functions inherited from DSoundScPdd (called by LDD).
   135 	virtual TDfcQue* DfcQ(TInt aUnit);
   136 	virtual void GetChunkCreateInfo(TChunkCreateInfo& aChunkCreateInfo);
   137 	virtual void Caps(TDes8& aCapsBuf) const;
   138 	virtual TInt MaxTransferLen() const;
   139 	virtual TInt SetConfig(const TDesC8& aConfigBuf);
   140 	virtual TInt SetVolume(TInt aVolume);
   141 	virtual TInt StartTransfer();
   142 	virtual TInt TransferData(TUint aTransferID,TLinAddr aLinAddr,TPhysAddr aPhysAddr,TInt aNumBytes);
   143 	virtual void StopTransfer();
   144 	virtual TInt PauseTransfer();
   145 	virtual TInt ResumeTransfer();
   146 	virtual TInt PowerUp();
   147 	virtual void PowerDown();
   148 	virtual TInt CustomConfig(TInt aFunction,TAny* aParam);
   149 	virtual TInt TimeTransferred(TInt64& aTimeTransferred, TInt aStatus);
   150 	void RecordCallback(TUint aTransferID,TInt aTransferResult,TInt aBytesTransferred);	
   151 private:
   152 	void SetCaps();	
   153 
   154 private:
   155 	/** A pointer to the PDD factory. */
   156 	DTemplateSoundScPddFactory* iPhysicalDevice;
   157 	/** The capabilities of this device. */
   158 	TSoundFormatsSupportedV02 iCaps;
   159 	/** The record DMA channel. */
   160 	TDmaChannel* iDmaChannel;
   161 	/** The DMA request structures used for transfers. */ 				
   162 	DTemplateSoundScRxDmaRequest* iDmaRequest[KTemplateMaxRxDmaRequests];
   163 	/** The number of outstanding DMA record requests on the DMA channel. */	
   164 	TInt iPendingRecord;
   165 	/** A flag selecting the next DMA request for transfer. */
   166 	TInt iFlag;
   167 	friend class DTemplateSoundScPddFactory;
   168 	};	
   169 
   170 /**
   171 Wrapper function for a shared chunk sound driver playback DMA request.
   172 */
   173 class DTemplateSoundScTxDmaRequest : public DDmaRequest
   174 	{
   175 public:	
   176 	DTemplateSoundScTxDmaRequest(TDmaChannel& aChannel,DTemplateSoundScTxPdd* aPdd,TInt aMaxTransferSize=0);
   177 	static void DmaService(TResult aResult, TAny* aArg);
   178 public:
   179 	/** Pointer back to the PDD. */
   180 	DTemplateSoundScTxPdd* iPdd;
   181 	/** The transfer ID for this DMA request - supplied by the LDD. */
   182 	TUint iTransferID;
   183 	/** The transfer sizes in progress. */
   184 	TUint iTransferSize;
   185 	};
   186 
   187 /**
   188 Wrapper function for a shared chunk sound driver record DMA request.
   189 */
   190 class DTemplateSoundScRxDmaRequest : public DDmaRequest
   191 	{
   192 public:	
   193 	DTemplateSoundScRxDmaRequest(TDmaChannel& aChannel,DTemplateSoundScRxPdd* aPdd,TInt aMaxTransferSize=0);
   194 	static void DmaService(TResult aResult, TAny* aArg);
   195 public:
   196 	/** Pointer back to the PDD. */
   197 	DTemplateSoundScRxPdd* iPdd;
   198 	/** The transfer ID for this DMA request - supplied by the LDD. */
   199 	TUint iTransferID;
   200 	/** The transfer sizes in progress. */
   201 	TUint iTransferSize;
   202 	};
   203 
   204 #endif /* __SOUNDSC_PLAT_H__ */