⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cx5530audio.h

📁 WinCE 3.0 BSP, 包含Inter SA1110, Intel_815E, Advantech_PCM9574 等
💻 H
字号:
// CX5530Audio.h: interface for the CCX5530Audio class.
//
//////////////////////////////////////////////////////////////////////

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#if !defined(AFX_CX5530Audio_H__A5E95C72_4558_4AF3_9DA6_FE26A9F6075A__INCLUDED_)
#define AFX_CX5530Audio_H__A5E95C72_4558_4AF3_9DA6_FE26A9F6075A__INCLUDED_

#include "hardware.h"
#include "memorybuffer.h"

class CHardwareBuffer;
class DsCaptureDriverBuffer;
class DsPlaybackDriverBuffer;

/*
enum INT_TYPES
{
	INT_FLAG,	// flag found: use in notification
	INT_EOL,	// End of table found: loop if necessary
	INT_UNKNOWN		// unknown interrupt: probably ignore
};
*/

const TCHAR REGISTRY_PATH[] = TEXT("\\Drivers\\Dsound\\CX5530");
const TCHAR REGISTRY_KEY_IRQ[] = TEXT("IRQ");

class CAC97Codec;

class CCX5530Audio
{

	friend DWORD WINAPI InterruptThreadHelper(PVOID lpParm);

public:
	virtual ~CCX5530Audio();

public:
	HRESULT SetFrequency(bool bCapture, DWORD dwFrequency);
	bool SetupCapture(USHORT uChannelIndex, WORD nChannels, WORD wBytes,  DWORD wFrequency);
	void ReleaseCaptureBuffer(USHORT uChannelIndex){m_CaptureChannels[uChannelIndex] = NULL;};
	void ReleasePlaybackBuffer(USHORT uChannelIndex){m_PlaybackChannels[uChannelIndex] = NULL;};

	HRESULT CreateCaptureBuffer(ULONG *pulSize, DsCaptureDriverBuffer** pBuffer);
	HRESULT CreatePlaybackBuffer(ULONG *pulSize, DsPlaybackDriverBuffer** pBuffer);

	bool IsFormatSupported(LPWAVEFORMATEX lpWaveFormat);
	HRESULT SetVolumePan(USHORT channel, PDSVOLUMEPAN pdsVolumePan);
	bool WriteAC97(USHORT  Index, USHORT  Data);
	bool ReadAC97(USHORT Index, USHORT &wReadValue);
	bool SetupPlay(USHORT uChannelIndex, WORD nChannels, WORD wBytes,  DWORD wFrequency, bool bLoop);
	UINT GetMaxBuffers(void);
	static void DeleteObject(void);
	static CCX5530Audio* GetCX5530AudioObject(void);
	bool Initialize(void);

#ifdef DEBUG
	void DumpRegisters(void);
#endif

#ifdef MYDEBUG
	void Test(bool bDoInt);
#endif

protected:
	//PBYTE m_pBIOSMem;
	void InitVSA();
	CCX5530Audio();

	// interrupt service thread function
	void InterruptThreadRoutine(void);
	bool PciFindDevice
	(
		IN USHORT VendorId,
		IN USHORT DeviceId,
		OUT PULONG pBusNumber,
		OUT PPCI_SLOT_NUMBER pPciSlotNumber,
		OUT PPCI_COMMON_CONFIG pPciCommonConfig
	);
	bool InitAudio(void);
	CHardwareBuffer* GetInterruptSource( void );
	void CleanUpObject();
	bool GetRegistryConfig();

	
	DsCaptureDriverBuffer* m_CaptureChannels[MAX_CAPTURE_CHANNELS];
	DsPlaybackDriverBuffer* m_PlaybackChannels[MAX_PLAYBACK_CHANNELS];
	CAC97Codec* m_pCodec;
	// interrupt related variables
	HANDLE m_hInterruptThread;
	HANDLE m_hInterruptEvent;
	bool	m_bExiting;
	volatile struct AudioRegisters *m_pAudioRegisters;

	CRITICAL_SECTION m_csCX5530Audio;
	DWORD  m_dwInterrupt;

	static CCX5530Audio* m_pSingleObject;
};

#endif // !defined(AFX_CX5530Audio_H__A5E95C72_4558_4AF3_9DA6_FE26A9F6075A__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -