⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch7013.c

📁 ch7013的wince 驱动
💻 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 + -