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

📄 i2ctest.c

📁 WinCE5.0BSP for Renesas SH7770
💻 C
字号:
#include <windows.h>

#include "ioctl_its_ds7.h"


BOOL	GetArguments(LPWSTR);

PTSTR usage_text[] =
{
	TEXT("usage:\r\n"),
	TEXT("       -f <frequency>    100 or 400\r\n"),
	TEXT("       -?               help\r\n"),
};
#define NELEMS(a) (sizeof(a)/sizeof((a)[0]))
void
Usage(void)
{
int i;
	for (i = 0; i < NELEMS(usage_text); i++) {
		RETAILMSG(1, (usage_text[i]));
	}
}

int WINAPI
WinMain (
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
    LPWSTR lpCmdLine,
	int nCmdShow)
{
HANDLE	hDevice, hDriver;
BYTE	Buffer[128];
DWORD	dwData,dwSize;
DWORD	dwRet;
DWORD	dwFreq;
DWORD	i, dwAddress;
PTSTR	pOption;
TCHAR	ws[] = TEXT(" \t");
PTSTR	pParameter;

	for (pOption = _tcstok(lpCmdLine, ws); pOption != NULL; pOption = _tcstok(NULL, ws)) {
		if (pOption[0] != '/' && pOption[0] != '-') {
			RETAILMSG(1, (TEXT("Unrecognized argument %s\r\n"), pOption));
			continue;
		}
		pParameter = _tcstok(NULL, ws);
		if (pParameter == NULL) {
			RETAILMSG(1, (TEXT("Missing parameter to option %s\r\n"), pOption));
		}

		switch (pOption[1]) {
		case 'f':
			dwFreq = _ttoi(pParameter);
			break;
		case 'h':
		case '?':
			Usage();
			return FALSE;
		default:
			RETAILMSG(1, (TEXT("Unrecognized option %s\r\n"), pOption));
			return FALSE;
		}
	}

	if ((dwFreq != 100) && (dwFreq != 400)){
		RETAILMSG(1, (TEXT("Unrecognized option %s\r\n"), pOption));
		return FALSE;
	}
	


	hDevice = CreateFile(TEXT("I2C1:"),
			GENERIC_READ|GENERIC_WRITE,
			0, NULL, OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL, NULL);
	if ( hDevice == INVALID_HANDLE_VALUE ){
///--->
		if ( GetLastError() == ERROR_DEV_NOT_EXIST ){
			//register I2C device driver
			hDriver = RegisterDevice(TEXT("I2C"), 1, TEXT("I2C.DLL"), 0);
			if ( !hDriver ){
				RETAILMSG(1, (TEXT("Failed to register I2C device driver.\r\n")));
			}
			hDevice = CreateFile(TEXT("I2C1:"),
					GENERIC_READ|GENERIC_WRITE,
					0, NULL, OPEN_EXISTING,
					FILE_ATTRIBUTE_NORMAL, NULL);
		}
// <---
		if ( hDevice == INVALID_HANDLE_VALUE ){
			RETAILMSG(1, (TEXT("Failed to get device handle.\r\n")));
 			return 0;
		}
	}

	dwData = I2C_MASTER_MODE;
	DeviceIoControl(hDevice, IOCTL_I2C_SET_MODE,
		(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);

// ITS_DS7 - 100kHz
	dwData  = 19<<2;	// SCGD
	dwData |= 2;	// CDF

// ITS_DS7 - 400kHz
	if (dwFreq == 400){
		dwData  = 3<<2;	// SCGD
		dwData |= 2;	// CDF
	}
	DeviceIoControl(hDevice, IOCTL_I2C_SET_BAUDRATE,
		(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);

//	dwData = I2C_DOUBLE_STAGE;
	dwData = I2C_SINGLE_STAGE;
	DeviceIoControl(hDevice, IOCTL_I2C_SET_BUFFER_MODE,
		(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);
#if 1
	for(dwAddress=0;dwAddress < 4;dwAddress++){
		Buffer[0] = 0xa0;
		Buffer[1] = (BYTE)dwAddress*16;
		for( i=0;i < 16;i++ ){
			Buffer[i+2] = (BYTE)(i+1+(dwAddress*16));
		}
		dwSize = 18;
		WriteFile(hDevice, (LPVOID)Buffer, dwSize, &dwSize, NULL);
		if ( !dwSize ){
			RETAILMSG(1, (TEXT("Transmit failed : %d[%x]\r\n"), i,GetLastError()));
		}
		Sleep(10);
	}
#else
	for( i=0;i < 64;i++ ){
		Buffer[0] = 0xa0;
		Buffer[1] = (BYTE)dwAddress;
		Buffer[2] = (BYTE)dwData;
		dwSize = 3;
		WriteFile(hDevice, (LPVOID)Buffer, dwSize, &dwSize, NULL);
		if ( !dwSize ){
			RETAILMSG(1, (TEXT("Transmit failed : %d[%x]\r\n"), i,GetLastError()));
		}
		Sleep(10);
		dwAddress ++;
		dwData ++;
	}
#endif
	dwAddress = 0;
	dwData = 1;
	for( i=0;i < 64;i++ ){
		Buffer[0] = 0xa0;
		Buffer[1] = (BYTE)dwAddress;
		dwSize = 2;
		WriteFile(hDevice, (LPVOID)Buffer, dwSize, &dwSize, NULL);
		if ( !dwSize ){
			RETAILMSG(1, (TEXT("Transmit failed : %d[%x]\r\n"), GetLastError()));
		}
		dwSize = 1;
		Buffer[0] = 0xa1;
		ReadFile(hDevice, (LPVOID)Buffer, dwSize, &dwSize, NULL);
		if ( !dwSize ){
			RETAILMSG(1, (TEXT("Receive failed : %d[%x]\r\n"), GetLastError()));
		}
		RETAILMSG(1, (TEXT("Verify check: %d[%x][%x]\r\n"), i, Buffer[0], dwData));
		dwAddress ++;
		dwData ++;

	}
	Sleep(100);
	CloseHandle( hDevice );

#if 0
//--->
	DeregisterDevice(hDriver);
//<---
#endif

	return 0;
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -