📄 ch7013.c
字号:
/*++
Copyright:
Copyright (c) 2006 Guobg. All rights reserved.
Module Name:
ch7013.c
Abstract:
Author:
Guobg September 2006
Revision History:
--*/
#include "ch7013.h"
//#include "psc_smbus.h"
#define CH7013_DEBUG_MSG 1
HANDLE hSMBus;
SMBUS_TRANSFER SMBusTrans;
DWORD ReadCh7013(UCHAR ucReg,UCHAR * pValue);
DWORD WriteCh7013(UCHAR ucReg,UCHAR * pValue);
BOOL TVO_Close(DWORD hOpenContext)
{
return TRUE;
}
BOOL TVO_IOControl(DWORD Handle,
DWORD dwIoControlCode,
PDWORD pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned)
{
DWORD bRet = FALSE;
// PPOWER_CAPABILITIES PowerCaps;
// CEDEVICE_POWER_STATE ReqDx;
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("++CH7013_IOControl: Handle = 0x%x, dwIoControlCode = 0x%x\r\n"), Handle, dwIoControlCode));
switch (dwIoControlCode)
{
case IOCTL_POWER_CAPABILITIES:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_IOControl: IOCTL_POWER_CAPABILITIES:\r\n")));
bRet = TRUE;
break;
case IOCTL_POWER_QUERY:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_IOControl: IOCTL_POWER_QUERY:\r\n")));
bRet = TRUE;
break;
case IOCTL_POWER_GET:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_IOControl: IOCTL_POWER_GET:\r\n")));
bRet = TRUE;
break;
case IOCTL_POWER_SET:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_IOControl: IOCTL_POWER_SET:\r\n")));
bRet = TRUE;
break;
}
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("--CH7013_IOControl \r\n")));
return bRet;
}
DWORD TVO_Open(DWORD hDeviceContext,
DWORD AccessCode,
DWORD ShareMode)
{
return hDeviceContext;
}
DWORD TVO_Read(DWORD hOpenContext,
LPVOID pBuffer,
DWORD Count)
{
return 0;
}
DWORD TVO_Seek(DWORD hOpenContext,
long Amount,
DWORD Type)
{
return 0;
}
DWORD TVO_Write(DWORD hOpenContext,
LPCVOID pBuffer,
DWORD Count)
{
return 0;
}
VOID TVO_PowerDown(DWORD hDeviceContext)
{
}
VOID TVO_PowerUp(DWORD hDeviceContext)
{
}
BOOL TVO_Deinit(DWORD hContext)
{
CloseHandle(hSMBus);
return TRUE;
}
DWORD TVO_Init(DWORD dwContext)
{
UCHAR ucTemp;
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013: +CH7013_Init\r\n")));
hSMBus = CreateFile(TEXT("SMB1:"),0,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hSMBus == INVALID_HANDLE_VALUE)
{
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("Fail Open SM Bus\r\n")));
return FALSE;
}
if(!ReadCh7013(CH7013_REG_VID , &ucTemp))
{
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_Init: Read Device ID Error\r\n")));
return FALSE;
}
if(ucTemp != CH7013_ID)
{
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_Init: Device ID Error\r\n")));
return FALSE;
}
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013: -CH7013_Init\r\n")));
return TRUE;
}
BOOL WINAPI TVO_DllEntry(HINSTANCE hInstance,
DWORD dwReason,
LPVOID pReserved)
{
switch (dwReason) {
case DLL_PROCESS_ATTACH:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_DllEntry: DLL_PROCESS_ATTACH\r\n")));
break;
case DLL_PROCESS_DETACH:
RETAILMSG(CH7013_DEBUG_MSG, (TEXT("CH7013_DllEntry: DLL_PROCESS_DETACH\r\n")));
break;
}
// return TRUE for success
return TRUE;
}
DWORD ReadCh7013(UCHAR ucReg,UCHAR * pValue)
{
DWORD dwBytesReturn;
BOOL bRet;
SMBusTrans.Address = SMBUS_ADDR_CH7013;
SMBusTrans.Register = ucReg;
SMBusTrans.Data[0] = 0;
SMBusTrans.DataSize = 1;
//BOOL xxx_DeviceIoControl (HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
bRet = DeviceIoControl(hSMBus,IOCTL_SMBUS_READDATA,&SMBusTrans,sizeof(SMBusTrans), \
pValue , 1 , &dwBytesReturn,NULL);
if((bRet != TRUE) && (dwBytesReturn == 1))
{
RETAILMSG(CH7013_DEBUG_MSG , (TEXT("ReadCh7013:Failed Read CH7013\r\n")));
return FALSE;
}
return TRUE;
}
DWORD WriteCh7013(UCHAR ucReg,UCHAR * pValue)
{
DWORD dwBytesReturn;
BOOL bRet;
SMBusTrans.Address = SMBUS_ADDR_CH7013;
SMBusTrans.Register = ucReg;
SMBusTrans.Data[0] = * pValue;
SMBusTrans.DataSize = 1;
//BOOL xxx_DeviceIoControl (HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
bRet = DeviceIoControl(hSMBus,IOCTL_SMBUS_WRITEDATA,&SMBusTrans,sizeof(SMBusTrans), \
pValue,1,&dwBytesReturn,NULL);
if(bRet != TRUE)
{
RETAILMSG(CH7013_DEBUG_MSG , (TEXT("WriteCh7013:Failed Write CH7013\r\n")));
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -