codec.c

来自「基于wince 操作系统的开发的i2s驱动程序」· C语言 代码 · 共 83 行

C
83
字号
/*++
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 + =
减小字号Ctrl + -
显示快捷键?