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

📄 audiomodem.cpp

📁 Windows CE 6.0 BSP for the Beagle Board.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//
// 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 + -