📄 i2ctest.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 + -