📄 flatrion.cpp
字号:
/*+++ *******************************************************************\
*
* Copyright and Disclaimer:
*
* ---------------------------------------------------------------
* This software is provided "AS IS" without warranty of any kind,
* either expressed or implied, including but not limited to the
* implied warranties of noninfringement, merchantability and/or
* fitness for a particular purpose.
* ---------------------------------------------------------------
*
* Copyright (c) 2008 Conexant Systems, Inc.
* All rights reserved.
*
\******************************************************************* ---*/
#include "Flatrion.h"
#include "DriverI2c.h"
#include "miscfuncs.h"
#define Flatrion_DEVICE_ADDRESS 0x98
Flatrion::Flatrion(DriverI2C * p_i2c):
_p_i2c(p_i2c)
{
KeInitializeMutex(&_mutex, 0);
}
Flatrion::~Flatrion()
{
}
VOID Flatrion::lock()
{
KeWaitForSingleObject(&_mutex, Executive, KernelMode, FALSE, NULL );
}
/////////////////////////////////////////////////////////////////////////////////////////
VOID Flatrion::unlock()
{
KeReleaseMutex(&_mutex, FALSE);
}
VOID Flatrion::initialize()
{
BYTE value;
readByte(CH_PWR_CTRL1, &value);
//enables clock to delta-sigma and decimation filter
value |= 0x80;
writeByte(CH_PWR_CTRL1, value);
///power up all channel
writeByte(CH_PWR_CTRL2, 0x00);
}
/////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS Flatrion::readByte(BYTE register_address, PBYTE p_value)
{
lock();
NTSTATUS status = readByteNoLock(register_address, p_value);
unlock();
return status;
}
/////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS Flatrion::writeByte(BYTE register_address, BYTE value)
{
lock();
NTSTATUS status = writeByteNoLock(register_address, value);
unlock();
return status;
}
/////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS Flatrion::readByteNoLock(BYTE register_address, PBYTE p_value)
{
BOOLEAN status = _p_i2c->read(
Flatrion_DEVICE_ADDRESS>>1, //device address
1, //write size
®ister_address, //write buffer
1, //read size
p_value); //read buffer
if (status==TRUE)
{
return STATUS_SUCCESS;
}
else
{
return STATUS_UNSUCCESSFUL;
}
}
/////////////////////////////////////////////////////////////////////////////////////////
NTSTATUS Flatrion::writeByteNoLock(BYTE register_address, BYTE value)
{
BOOLEAN status = _p_i2c->write(
Flatrion_DEVICE_ADDRESS>>1, //device address
1, //write size
®ister_address, //write buffer
1, //write size
&value); //write buffer
if (status==TRUE)
{
return STATUS_SUCCESS;
}
else
{
return STATUS_UNSUCCESSFUL;
}
}
VOID Flatrion::powerUp()
{
//todo:finsih this
}
VOID Flatrion::powerDown()
{
//todo:finsih this
}
// set flatiron for audio input types
VOID Flatrion::setAudioInput(AUDIO_INPUT audio_input)
{
switch(audio_input)
{
case AUDIO_INPUT_LINE:
writeByte(CH_PWR_CTRL2, 0);
writeByte(CH_PWR_CTRL1, 0x80);
break;
default:
//todo: ask Alsor for Flatiron setting.
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -