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

📄 i2cbridge.h

📁 一个网上的开源项目
💻 H
字号:
// Copyright (C)2004 Dimax ( http://www.xdimax.com )
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

#ifndef I2C_BRIDGE_H_10DF0DED_E85F_4f14_88D9_610BEA2211F7

#define I2C_BRIDGE_H_10DF0DED_E85F_4f14_88D9_610BEA2211F7

#ifdef __linux__
/*
* Compatibility stuff
*/
#include <sys/types.h>
typedef int         BOOL;        
#define TRUE 1
#define FALSE 0
typedef u_int8_t    BYTE;
typedef u_int8_t    UCHAR;
typedef u_int16_t   WORD; 
typedef u_int32_t   DWORD; 
typedef u_int32_t   ULONG; 
typedef void*       HANDLE;
#define _stdcall	/* nothing */
#define INVALID_HANDLE_VALUE ((HANDLE)(-1))
#endif

#ifdef WIN32
#include <windows.h>
#endif

#pragma pack(push, 1)

typedef enum
{
	U2C_SUCCESS = 0,                            /*!< API Function was successfull */  
	U2C_BAD_PARAMETER = 1,                      /*!< API Function got bad input parameter */
	U2C_HARDWARE_NOT_FOUND = 2,                 /*!< U2C Device not found */
	U2C_SLAVE_DEVICE_NOT_FOUND = 3,             /*!< I2C Slave device not found */
	U2C_TRANSACTION_FAILED = 4,                 /*!< I2C or SPI transaction failed */
	U2C_SLAVE_OPENNING_FOR_WRITE_FAILED = 5,    /*!< I2C Slave did not acknowledge write slave address */
	U2C_SLAVE_OPENNING_FOR_READ_FAILED = 6,     /*!< I2C Slave did not acknowledge read slave address */
	U2C_SENDING_MEMORY_ADDRESS_FAILED = 7,      /*!< I2C Slave did not acknowledge internal address output */
	U2C_SENDING_DATA_FAILED = 8,                /*!< I2C Slave did not acknowledge data output */
	U2C_NOT_IMPLEMENTED = 9,                    /*!< Operation is not implemented by U2C API */
	U2C_NO_ACK = 10,                            /*!< Got no ACK from Slave */
	U2C_DEVICE_BUSY = 11,                       /*!< U2C Device Busy */
	U2C_MEMORY_ERROR = 12,                      /*!< Memory operation (like malloc) failed */
	U2C_UNKNOWN_ERROR = 13,                     /*!< Undocumented error */
	U2C_I2C_CLOCK_SYNCH_TIMEOUT = 14,			/*!< I2C Slave did not release SCL line */
} U2C_RESULT;


/**
* \brief I2C Transaction Descriptor
*
* This structure contains all required information to perform I2C transaction
*/
typedef struct _U2C_TRANSACTION
{
	BYTE nSlaveDeviceAddress;   /*!< I2C Slave device address in 7 bit format */
	BYTE nMemoryAddressLength;  /*!< Slave Device Internal address size */
	DWORD nMemoryAddress;       /*!< Slave Device Internal address (Memory address) */
	WORD nBufferLength;         /*!< Transaction buffer length. Can be from 1 up to 256 */
	BYTE Buffer[256];           /*!< Transaction Buffer */
} U2C_TRANSACTION, *PU2C_TRANSACTION;

/**
* \brief I2C Transactions pack element
*/ 
typedef struct _U2C_TRANSACTION_PACK
{
	BOOL rw;                    /*!< 1-Read 0-Write */
	U2C_TRANSACTION tr;         /*!< Transaction descriptor _U2C_TRANSACTION */
	int rc;                     /*!< Transaction result */ 
} U2C_TRANSACTION_PACK, *PU2C_TRANSACTION_PACK;

// I2C bus frequency values:
#define U2C_I2C_FREQ_FAST   0
#define U2C_I2C_FREQ_STD    1
#define U2C_I2C_FREQ_83KHZ  2
#define U2C_I2C_FREQ_71KHZ  3
#define U2C_I2C_FREQ_62KHZ  4
#define U2C_I2C_FREQ_50KHZ  6
#define U2C_I2C_FREQ_25KHZ  16
#define U2C_I2C_FREQ_10KHZ  46
#define U2C_I2C_FREQ_5KHZ   96
#define U2C_I2C_FREQ_2KHZ   242


// SPI bus frequency values:
#define U2C_SPI_FREQ_200KHZ  0
#define U2C_SPI_FREQ_100KHZ  1
#define U2C_SPI_FREQ_83KHZ  2
#define U2C_SPI_FREQ_71KHZ  3
#define U2C_SPI_FREQ_62KHZ  4
#define U2C_SPI_FREQ_50KHZ  6
#define U2C_SPI_FREQ_25KHZ  16
#define U2C_SPI_FREQ_10KHZ  46
#define U2C_SPI_FREQ_5KHZ   96
#define U2C_SPI_FREQ_2KHZ   242



typedef struct _U2C_SLAVE_ADDR_LIST
{
	BYTE nDeviceNumber;
	BYTE List[256];
} U2C_SLAVE_ADDR_LIST, *PU2C_SLAVE_ADDR_LIST;

typedef struct _U2C_VERSION_INFO
{
	WORD MajorVersion;
	WORD MinorVersion;
} U2C_VERSION_INFO, *PU2C_VERSION_INFO;

typedef enum 
{
	LS_RELEASED,
	LS_DROPPED_BY_I2C_BRIDGE,
	LS_DROPPED_BY_SLAVE,
	LS_RAISED_BY_I2C_BRIDGE,
} U2C_LINE_STATE;


#pragma pack(pop)
// I2CBridge Board Initialization Routines
BYTE _stdcall U2C_GetDeviceCount();
U2C_RESULT _stdcall U2C_GetSerialNum(HANDLE hDevice, long* pSerialNum); 
U2C_RESULT _stdcall U2C_IsHandleValid(HANDLE hDevice); 
HANDLE _stdcall U2C_OpenDevice(BYTE nDevice);
HANDLE _stdcall U2C_OpenDeviceBySerialNum(long nSerialNum); 
U2C_RESULT _stdcall U2C_CloseDevice(HANDLE hDevice);
U2C_RESULT _stdcall U2C_GetFirmwareVersion(HANDLE hDevice, PU2C_VERSION_INFO pVersion);
U2C_RESULT _stdcall U2C_GetDriverVersion(HANDLE hDevice, PU2C_VERSION_INFO pVersion);
U2C_VERSION_INFO _stdcall U2C_GetDllVersion(); 

// I2C high level and configuration routines
U2C_RESULT _stdcall U2C_SetI2cFreq(HANDLE hDevice, BYTE Frequency);
U2C_RESULT _stdcall U2C_GetI2cFreq(HANDLE hDevice, BYTE *pFrequency);
U2C_RESULT _stdcall U2C_SetClockSynch(HANDLE hDevice, BOOL Enable);
U2C_RESULT _stdcall U2C_GetClockSynch(HANDLE hDevice, BOOL *pEnable);
U2C_RESULT _stdcall U2C_Read(HANDLE hDevice, PU2C_TRANSACTION pTransaction);
U2C_RESULT _stdcall U2C_Write(HANDLE hDevice, PU2C_TRANSACTION pTransaction);
U2C_RESULT _stdcall U2C_RW_Pack(HANDLE hDevice, PU2C_TRANSACTION_PACK pTransaction, int count);
U2C_RESULT _stdcall U2C_ScanDevices(HANDLE hDevice, PU2C_SLAVE_ADDR_LIST pList);

// I2C low level routines
U2C_RESULT _stdcall U2C_Start(HANDLE hDevice);
U2C_RESULT _stdcall U2C_RepeatedStart(HANDLE hDevice);
U2C_RESULT _stdcall U2C_Stop(HANDLE hDevice);
U2C_RESULT _stdcall U2C_PutByte(HANDLE hDevice, BYTE Data);
U2C_RESULT _stdcall U2C_GetByte(HANDLE hDevice, BYTE *pData);
U2C_RESULT _stdcall U2C_PutByteWithAck(HANDLE hDevice, BYTE Data);
U2C_RESULT _stdcall U2C_GetByteWithAck(HANDLE hDevice, BYTE *pData, BOOL bAck);
U2C_RESULT _stdcall U2C_PutAck(HANDLE hDevice, BOOL bAck);
U2C_RESULT _stdcall U2C_GetAck(HANDLE hDevice);

// I2c wire level routines
U2C_RESULT _stdcall U2C_ReadScl(HANDLE hDevice, U2C_LINE_STATE *pState);
U2C_RESULT _stdcall U2C_ReadSda(HANDLE hDevice, U2C_LINE_STATE *pState);
U2C_RESULT _stdcall U2C_ReleaseScl(HANDLE hDevice);
U2C_RESULT _stdcall U2C_ReleaseSda(HANDLE hDevice);
U2C_RESULT _stdcall U2C_DropScl(HANDLE hDevice);
U2C_RESULT _stdcall U2C_DropSda(HANDLE hDevice);

// GPIO routines
U2C_RESULT _stdcall U2C_SetIoDirection(HANDLE hDevice, ULONG Value, ULONG Mask);
U2C_RESULT _stdcall U2C_GetIoDirection(HANDLE hDevice, ULONG *pValue);
U2C_RESULT _stdcall U2C_IoWrite(HANDLE hDevice, ULONG Value, ULONG Mask);
U2C_RESULT _stdcall U2C_IoRead(HANDLE hDevice, ULONG *pValue);
U2C_RESULT _stdcall U2C_SetSingleIoDirection(HANDLE hDevice, ULONG IoNumber, BOOL bOutput);
U2C_RESULT _stdcall U2C_GetSingleIoDirection(HANDLE hDevice, ULONG IoNumber, BOOL *pbOutput);
U2C_RESULT _stdcall U2C_SingleIoWrite(HANDLE hDevice, ULONG IoNumber, BOOL Value);
U2C_RESULT _stdcall U2C_SingleIoRead(HANDLE hDevice, ULONG IoNumber, BOOL *pValue);

// SPI configuration routines
U2C_RESULT _stdcall U2C_SpiSetConfig(HANDLE hDevice, BYTE CPOL, BYTE CPHA);
U2C_RESULT _stdcall U2C_SpiGetConfig(HANDLE hDevice, BYTE *pCPOL, BYTE *pCPHA);
U2C_RESULT _stdcall U2C_SpiSetConfigEx(HANDLE hDevice, DWORD Config);
U2C_RESULT _stdcall U2C_SpiGetConfigEx(HANDLE hDevice, DWORD *pConfig);
U2C_RESULT _stdcall U2C_SpiSetFreq(HANDLE hDevice, BYTE Frequency);
U2C_RESULT _stdcall U2C_SpiGetFreq(HANDLE hDevice, BYTE *pFrequency);
U2C_RESULT _stdcall U2C_SpiReadWrite(HANDLE hDevice, BYTE *pOutBuffer, BYTE *pInBuffer, WORD Length);
U2C_RESULT _stdcall U2C_SpiWrite(HANDLE hDevice, BYTE *pOutBuffer, WORD Length);
U2C_RESULT _stdcall U2C_SpiRead(HANDLE hDevice, BYTE *pInBuffer, WORD Length);

#endif //I2C_BRIDGE_H_10DF0DED_E85F_4f14_88D9_610BEA2211F7

⌨️ 快捷键说明

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