修改BSP里声卡驱动WaveMain.cpp里HandleWaveMessage里的消息响应:
case WIDM_OPEN:g_pHWContext->BspOpenRecChanel(TRUE);
case WIDM_CLOSE: g_pHWContext->BspOpenRecChanel(FALSE);
在应用层使用声音输入设备里打开录音通道,
void HardwareContext::BspOpenRecChanel(BOOL bOpen)
{
if(bOpen)
{
IOW_REG_OR(ULONG, &(v_pGpioRegs->gpio[4].paden), GPIO22); //设置GPIO
PIO_OUTPUT_ONE (GPIO, GPIO_GROUP(4), GPIO_INDEX(22));
PIO_OUTPUT_ENABLE (GPIO, GPIO_GROUP(4), GPIO_INDEX(22));
//EnterCriticalSection( &csMutex );
g_oalSysInfo.audioInfo[0].bRecordMic2 = FALSE;
g_oalSysInfo.audioInfo[0].bRecordMic1 = FALSE;
g_oalSysInfo.audioInfo[0].bRecordLineIn = TRUE;
// LeaveCriticalSection( &csMutex );
msWait(20);
}
else
{
IOW_REG_OR(ULONG, &(v_pGpioRegs->gpio[4].paden), GPIO22);
PIO_OUTPUT_ZERO (GPIO, GPIO_GROUP(4), GPIO_INDEX(22));
PIO_OUTPUT_ENABLE (GPIO, GPIO_GROUP(4), GPIO_INDEX(22));
g_oalSysInfo.audioInfo[0].bRecordMic2 = TRUE;
g_oalSysInfo.audioInfo[0].bRecordMic1 = TRUE;
g_oalSysInfo.audioInfo[0].bRecordLineIn = FALSE;
msWait(20);
}
}
//修改声卡寄存器并调节输入增益
void HardwareContext::AudioKickInputDMA()
{
USHORT usRegVal = 0;
AudioPowerInput(TRUE);
if(g_oalSysInfo.audioInfo[0].bRecordMic2)
{
}
else if(g_oalSysInfo.audioInfo[0].bRecordMic1)
{
}
else if(g_oalSysInfo.audioInfo[0].bRecordLineIn)
{
AudioInMute(FALSE);
}
}
BOOL HardwareContext::AudioInMute(BOOL mute)
{
if (mute)
{ // set mute on
WriteAC97Codec( RT_LINE_IN_VOL, (unsigned short) (ac97_regs[RT_LINE_IN_VOL/2] & 0xE808 )); //Disable LineIn to all output Mixer
m_RTCodec5610->Enable_ADC_Input_Source(R_LINE_IN | L_LINE_IN,FALSE); //Disable LineIn to ADC Mixer
}
else
{
// WriteAC97Codec( RT_LINE_IN_VOL, (unsigned short) (ac97_regs[RT_LINE_IN_VOL/2] & 0x6808 ));//Enable LineIn to HP Mixer
WriteAC97Codec( RT_LINE_IN_VOL, (unsigned short) (ac97_regs[RT_LINE_IN_VOL/2] & 0xA000 ));//Enable LineIn to HP Mixer zjhdebug
m_RTCodec5610->Enable_ADC_Input_Source(R_LINE_IN | L_LINE_IN,TRUE); //Enable LineIn to ADC Mixer
}
return TRUE;
}
应用层代码,使用CallBaCK_WINDOW方式。.h文件
.cpp文件: