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

📄 codec.c

📁 基于wince 操作系统的开发的i2s驱动程序
💻 C
字号:
/*++
Copyright (c) 2004  BSQUARE Corporation.  All rights reserved.

Module Name:

    codec.c

Module Description:

    This module contains the codec specific routines for I2S audio

Author:

    Ian Rae - January 2004

--*/
#include <windows.h>
#include "psc_i2s.h"

//Global Volume levels
static ULONG gVolume = 0;


/*
    Volume passed in is 0xFFFF (max) -> 0x0000 (mute)

	Codec has volume range of 0x7F -> 0x30, less than 0x30 is mute
	that's a range of 0x50

*/
BOOLEAN
CodecSetVolume(
    IN HANDLE hSMBus,
    IN ULONG Volume
    )
{
    ULONG lVolume;
    ULONG rVolume;
	UCHAR codecLeftVolume, codecRightVolume;

	// save for volume query
	gVolume = Volume;

    lVolume = Volume & 0xffff;
    rVolume = (Volume >> 16) & 0xffff;
   
	// scale left to suit codec
	if (lVolume == 0x0000) { // check for mute
		codecLeftVolume =  0x0000;
	} else {
		// use a little less than full scale, it seems to work a lot better
		codecLeftVolume = (UCHAR)(((lVolume * 0x30) / 0xFFFF ) + 0x4F);
		//codecLeftVolume = (UCHAR)(((lVolume * 0x50) / 0xFFFF ) + 0x2F);
	}

	// scale right to suit codec
	if (rVolume == 0x0000) { // check for mute
		codecRightVolume =  0x0000;
	} else {
		// use a little less than full scale, it seems to work a lot better
		codecRightVolume = (UCHAR)(((rVolume * 0x30) / 0xFFFF ) + 0x4F);
		//codecRightVolume = (UCHAR)(((rVolume * 0x50) / 0xFFFF ) + 0x2F);
	}

	SMBusWriteReg(hSMBus,WM8731_LHO, LHO_LHPVOL_N(codecLeftVolume) |
	                                 LHO_LZCEN );
	SMBusWriteReg(hSMBus,WM8731_RHO, RHO_RHPVOL_N(codecRightVolume) | 
	                                 RHO_RZCEN );

    return TRUE;
}

ULONG
CodecGetVolume(
    IN HANDLE hSMBus
    )
{
    DEBUGMSG(1, (TEXT("CodecGetVolume Volume %x\r\n"),gVolume));

    return gVolume;
}

⌨️ 快捷键说明

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