📄 audiomodem.cpp
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES.
//
// Portions Copyright (c) Texas Instruments. All rights reserved.
//
//------------------------------------------------------------------------------
//
// Wave extent for Smartphone and Pocket PC.
//
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
#include <wavemain.h>
#include "xhwctxt.h"
//#include "csmi_api.h" //OMAP730
//#undef DEBUGMSG
//#define DEBUGMSG(x, y) RETAILMSG(1,y)
//------------------------------------------------------------------------------
//
// some hardcoded modem settings
//
// GSM uplink volume.
#define GSM_UPLINK_VOLUME 0xff
//------------------------------------------------------------------------------
//
// Function: InitModem ()
//
//
BOOL
ACAudioHWContext::InitModem ()
{
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: OpenModemDevice ()
//
// Open handle to GTI driver for communication with DSP.
//
BOOL
ACAudioHWContext::OpenModemDevice ()
{
// assume m_csModemDevice is locked
// CAutoLock cs(m_csModemDevice);
BOOL fRet = TRUE;
#ifdef OMAP730
DEBUGMSG( ZONE_MODEM, (TEXT("AC: OpenModemDevice\r\n")));
if (m_hGsmDev==NULL)
{
// Invoke GSM driver for future uses.
m_hGsmDev = CreateDevice(GTI_VPORT_CTRL,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0, NULL);
DEBUGMSG( ZONE_MODEM, (TEXT("AC: Open GTI_VPORT_CTRL...0x%x\r\n"), m_hGsmDev));
if (m_hGsmDev == INVALID_HANDLE_VALUE )
{
m_hGsmDev = NULL;
DEBUGMSG(ZONE_ERROR, (TEXT("WAVE: Failed to open GTI1 driver...no problem, try again later\r\n")));
fRet = FALSE;
}
else
{
// set sidetone to defined state
SetSideTone (TRUE);
}
}
#endif
return fRet;
}
//------------------------------------------------------------------------------
//
// Function: SetModemDevice (BOOL fOn)
//
// Set modem stereo mode
// headset/speaker mode
// based on HeadsetOn/CodecOn flasg
//
BOOL
ACAudioHWContext::SetModemDevice (BOOL fOn)
{
CAutoLock cs(&m_csModemDevice);
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetModemDevice\r\n")));
// Open the modem device in case it is not opened yet.
if (!OpenModemDevice())
{
return FALSE;
}
#ifdef OMAP730
DWORD dwRet;
CSMI_INFO_GC_AUDIO_STEREO_REQ stereoReq;
while (TRUE)
{
// Igore the command if not needed.
if (m_fModemCodecOn && fOn)
{
break;
}
// Igore the command if not needed.
if (!m_fModemCodecOn && !fOn)
{
break;
}
// Save the flag.
m_fModemCodecOn = fOn;
if (fOn)
stereoReq.ControlCode = GC_STEREO_ON;
else
stereoReq.ControlCode = GC_STEREO_OFF;
stereoReq.Gain = 0; // 0db
stereoReq.SampleFrequency = GC_SAMPLE_FREQ_44100;
if (m_fHeadsetOn)
stereoReq.AudioMode = GC_HEADSET_MODE;
else
stereoReq.AudioMode = GC_SPEAKER_MODE;
// Control sidetone
if (!DeviceIoCtrl( m_hGsmDev,
GC_AUDIO_STEREO_CODEC_REQ,
(LPVOID)&stereoReq,
sizeof(CSMI_INFO_GC_AUDIO_STEREO_REQ),
NULL,
0,
&dwRet,
NULL))
{
ERRORMSG(1, (TEXT("AC: GC_AUDIO_STEREO_CODEC_REQ..failed\r\n")));
}
else
{
DEBUGMSG( ZONE_MODEM,
(TEXT("AC: GC_AUDIO_STEREO_CODEC_REQ...on=%d, headset=%d\r\n"),
fOn, m_fHeadsetOn));
}
break;
}
#endif
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: SetModemHeadset
//
// set Modem headset mode.
//
BOOL
ACAudioHWContext::SetModemHeadset (BOOL fHeadset)
{
CAutoLock cs(&m_csModemDevice);
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetModemHeadset\r\n")));
// Save Headset flag.
m_fHeadsetOn = fHeadset;
if (!OpenModemDevice())
{
return FALSE;
}
#ifdef OMAP730
DWORD dwRet;
CSMI_INFO_GC_AUDIO_STEREO_REQ stereoReq;
stereoReq.ControlCode = GC_AUDIO_MODE_CHANGE;
if (fHeadset)
stereoReq.AudioMode = GC_HEADSET_MODE;
else
stereoReq.AudioMode = GC_SPEAKER_MODE;
stereoReq.Gain = 0; // 0db
stereoReq.SampleFrequency = GC_SAMPLE_FREQ_44100;
// Control sidetone
if (!DeviceIoCtrl( m_hGsmDev,
GC_AUDIO_STEREO_CODEC_REQ,
(LPVOID)&stereoReq,
sizeof(CSMI_INFO_GC_AUDIO_STEREO_REQ),
NULL,
0,
&dwRet,
NULL))
{
ERRORMSG(1, (TEXT("AC: GC_AUDIO_MODE_CHANGE..failed\r\n")));
}
else
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: GC_AUDIO_MODE_CHANGE..%d\r\n"), fHeadset));
}
#endif
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: SetVoiceRxGain
//
//
BOOL
ACAudioHWContext::SetVoiceRxGain( DWORD dwGain )
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetVoiceRxGain:...0x%x\r\n"),dwGain));
return ( TRUE );
}
//------------------------------------------------------------------------------
//
// Function: GetVoiceRxGain
//
//
BOOL
ACAudioHWContext::GetVoiceRxGain(DWORD *pdwGain)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: GetVoiceRxGain:...0x%x\r\n"),*pdwGain));
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: SetVoiceTxGain
//
//
BOOL
ACAudioHWContext::SetVoiceTxGain(DWORD dwGain)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetVoiceTxGain:...0x%x\r\n"),dwGain));
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: GetVoiceTxGain
//
//
BOOL
ACAudioHWContext::GetVoiceTxGain(DWORD *pdwGain)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: GetVoiceTxGain:...0x%x\r\n"),*pdwGain));
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: SetCMSIAudioInfo
//
//
BOOL
ACAudioHWContext::SetCMSIAudioInfo(PCMSI_AUDIO_SETTING pInfo)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetCMSIAudioInfo\r\n")));
#ifdef OMAP730
#ifndef SHIP_BUILD
CAutoLock cs(&m_csModemDevice);
DWORD dwRet;
// Open the modem device in case it is not opened yet.
if (!OpenModemDevice())
{
return FALSE;
}
CSMI_INFO_GC_AUDIO_VOICE_REQ audioReq;
audioReq.Uplink = pInfo->fUpLink;
audioReq.Mute = pInfo->fMute;
audioReq.Volume = pInfo->bVolume;
if (!DeviceIoCtrl( m_hGsmDev,
GC_AUDIO_VOICE_REQ,
(LPVOID)&audioReq,
sizeof(CSMI_INFO_GC_AUDIO_VOICE_REQ),
NULL,
0,
&dwRet,
NULL))
{
ERRORMSG(1, (TEXT("AC: GC_AUDIO_VOICE_REQ..failed\r\n")));
return FALSE;
}
#endif
DEBUGMSG( ZONE_MODEM, (TEXT("AC: CSMI_INFO_GC_AUDIO_VOICE_REQ:...OK\r\n")));
#endif
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: GetCMSIAudioInfo
//
//
BOOL
ACAudioHWContext::GetCMSIAudioInfo(PCMSI_AUDIO_SETTING pInfo)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: GetCMSIAudioInfo:...OK\r\n")));
return TRUE;
}
//------------------------------------------------------------------------------
//
// Function: SetEACAudioInfo
//
// This function allows some tweaking of audio routing and volumes for
// debugging purposes in non ship builds
//
BOOL
ACAudioHWContext::SetEACAudioInfo(PEAC_AUDIO_SETTING pInfo)
{
DEBUGMSG( ZONE_MODEM, (TEXT("AC: SetEACAudioInfo\r\n")));
#ifdef OMAP730
#ifndef SHIP_BUILD
USHORT usVal, usBak;
int i;
if (pInfo->S != INREG16(&m_pEACRegisters->ASTCTR))
{
OUTREG16(&m_pEACRegisters->ASTCTR, pInfo->S);
}
usBak=INREG16(&m_pEACRegisters->AMSCFR);
usVal=0;
// switches K1-K12
for (i=0;i<12;i++)
if (pInfo->K[i])
usVal |=(1 << i);
if (usBak != usVal)
OUTREG16(&m_pEACRegisters->AMSCFR,usVal);
// DMA gain
if (pInfo->DMAVOL!=INREG16(&m_pEACRegisters->AMVCTR))
OUTREG16(&m_pEACRegisters->AMVCTR,pInfo->DMAVOL);
if (pInfo->M[0]!=INREG16(&m_pEACRegisters->AM1VCTR))
OUTREG16(&m_pEACRegisters->AM1VCTR,pInfo->M[0]);
if (pInfo->M[1]!=INREG16(&m_pEACRegisters->AM2VCTR))
OUTREG16(&m_pEACRegisters->AM2VCTR,pInfo->M[1]);
if (pInfo->M[2]!=INREG16(&m_pEACRegisters->AM3VCTR))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -