📄 driveri2c.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 "DriverI2C.h"
#include "UsbI2cInterface.h"
#include "debug.h"
/////////////////////////////////////////////////////////////////////////////////////////
DriverI2C::DriverI2C(UsbI2cInterface* p_usb_i2c_interface, BYTE channel):
_p_usb_i2c_interface(p_usb_i2c_interface),
_channel(channel)
{
DbgLogInfo(("DriverI2C::DriverI2C constructor\n"));
// Increase the reference count
_p_usb_i2c_interface->addRef();
_max_transfer_size = _p_usb_i2c_interface->maxTransferSize();
}
/////////////////////////////////////////////////////////////////////////////////////////
DriverI2C::~DriverI2C()
{
// Decrease the reference count
_p_usb_i2c_interface->release();
}
NTSTATUS DriverI2C::setCommandFormat(BOOLEAN first,BOOLEAN last)
{
if(!_p_usb_i2c_interface)
return (STATUS_UNSUCCESSFUL);
else
return _p_usb_i2c_interface->setCommandFormat(first,last);
}
/////////////////////////////////////////////////////////////////////////////////////////
INT DriverI2C::addRef()
{
return _p_usb_i2c_interface->addRef();
}
/////////////////////////////////////////////////////////////////////////////////////////
INT DriverI2C::release()
{
return _p_usb_i2c_interface->release();
}
/////////////////////////////////////////////////////////////////////////////////////////
DWORD DriverI2C::maxTransferSize()
{
return _max_transfer_size;
}
/////////////////////////////////////////////////////////////////////////////////////////
BOOLEAN DriverI2C::write(
BYTE device_adr,
INT subaddr_size,
const BYTE *p_subaddr_buf,
INT write_size,
BYTE *p_write_buf)
{
BOOLEAN result = FALSE;
// check for maximum size
if(write_size > (INT)maxTransferSize())
{
return result;
}
// acquire the lock
_p_usb_i2c_interface->lock();
result = _p_usb_i2c_interface->write(device_adr,
subaddr_size,
p_subaddr_buf,
write_size,
p_write_buf,
_channel);
// release the lock
_p_usb_i2c_interface->unlock();
return result;
}
/////////////////////////////////////////////////////////////////////////////////////////
BOOLEAN DriverI2C::read(
BYTE device_adr,
INT subaddr_size,
const BYTE *p_subaddr_buf,
INT read_size,
BYTE *p_read_buf)
{
BOOLEAN result = FALSE;
// check for maximum size
if(read_size > (INT)maxTransferSize())
{
return result;
}
// acquire the lock
_p_usb_i2c_interface->lock();
result = _p_usb_i2c_interface->read(device_adr,
subaddr_size,
p_subaddr_buf,
read_size,
p_read_buf,
_channel);
// release the lock
_p_usb_i2c_interface->unlock();
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -