📄 cx5530audio.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 + -