📄 i2ctest.c
字号:
#include <windows.h>
#include "ioctl_its_ds7.h"
int WINAPI
WinMain (
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
HANDLE hCom, hDriver;
BYTE Buffer[128];
DWORD dwSize;
DWORD dwData, dwRet;
hCom = CreateFile(
TEXT("I2C1:"),
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if ( hCom == 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")));
}
hCom = CreateFile(TEXT("I2C1:"),
GENERIC_READ|GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
}
// <---
if ( hCom == INVALID_HANDLE_VALUE ){
RETAILMSG(1, (TEXT("Failed to get device handle.\r\n")));
return 0;
}
}
dwData = I2C_MASTER_MODE;
DeviceIoControl(hCom, IOCTL_I2C_SET_MODE,
(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);
dwData = 3<<2; // SCGD
dwData |= 2; // CDF
// dwData = 2<<2; // SCGD
// dwData |= 1; // CDF
// dwData = 5<<2; // SCGD
// dwData |= 0; // CDF
// dwData = 8<<2; // SCGD
// dwData |= 2; // CDF
DeviceIoControl(hCom, IOCTL_I2C_SET_BAUDRATE,
(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);
dwData = I2C_DOUBLE_STAGE;
// dwData = I2C_SINGLE_STAGE;
DeviceIoControl(hCom, IOCTL_I2C_SET_BUFFER_MODE,
(PVOID)&dwData, sizeof(DWORD), NULL, 0, &dwRet, NULL);
Buffer[0] = 0x48;
Buffer[1] = 0x01;
Buffer[2] = 0x08;
dwSize = 3;
WriteFile(hCom, (LPVOID)Buffer, dwSize, &dwSize, NULL);
if ( !dwSize ){
DWORD errcode;
errcode = GetLastError();
RETAILMSG(1, (TEXT("I2C Master Transmit failed : [%x]\r\n"), errcode));
}
Buffer[0] = 0x48;
Buffer[1] = 0x00;
dwSize = 2;
WriteFile(hCom, (LPVOID)Buffer, dwSize, &dwSize, NULL);
if ( !dwSize ){
DWORD errcode;
errcode = GetLastError();
RETAILMSG(1, (TEXT("I2C Master Transmit failed : [%x]\r\n"), errcode));
}
dwSize = 1;
Buffer[0] = 0x49;
ReadFile(hCom, (LPVOID)Buffer, dwSize, &dwSize, NULL);
if ( !dwSize ){
DWORD errcode;
errcode = GetLastError();
RETAILMSG(1, (TEXT("I2C Master Transmit failed : [%x]\r\n"), errcode));
}else{
RETAILMSG(1, (TEXT("Data:%x\r\n"), Buffer[0]));
}
Buffer[0] = 0x48;
Buffer[1] = 0x01;
dwSize = 2;
WriteFile(hCom, (LPVOID)Buffer, dwSize, &dwSize, NULL);
if ( !dwSize ){
DWORD errcode;
errcode = GetLastError();
RETAILMSG(1, (TEXT("I2C Master Transmit failed : [%x]\r\n"), errcode));
}
dwSize = 1;
Buffer[0] = 0x49;
ReadFile(hCom, (LPVOID)Buffer, dwSize, &dwSize, NULL);
if ( !dwSize ){
DWORD errcode;
errcode = GetLastError();
RETAILMSG(1, (TEXT("I2C Master Transmit failed : [%x]\r\n"), errcode));
}else{
RETAILMSG(1, (TEXT("Data:%x\r\n"), Buffer[0]));
}
CloseHandle( hCom );
#if 1
//--->
DeregisterDevice(hDriver);
//<---
#endif
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -