📄 codec.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 + -