mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-06 02:35:23 +03:00
88 lines
3.7 KiB
C
88 lines
3.7 KiB
C
/*
|
|
* This file is part of the I2Ctiny project.
|
|
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.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, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* 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.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* commands from USB, must e.g. match command ids in kernel driver */
|
|
#define CMD_ECHO 0
|
|
#define CMD_GET_FUNC 1
|
|
#define CMD_SET_DELAY 2
|
|
#define CMD_GET_STATUS 3
|
|
|
|
#define CMD_I2C_IO 4
|
|
#define CMD_I2C_BEGIN 1 // flag fo I2C_IO
|
|
#define CMD_I2C_END 2 // flag fo I2C_IO
|
|
|
|
/* linux kernel flags */
|
|
#define I2C_M_TEN 0x10 /* we have a ten bit chip address */
|
|
#define I2C_M_RD 0x01
|
|
#define I2C_M_NOSTART 0x4000
|
|
#define I2C_M_REV_DIR_ADDR 0x2000
|
|
#define I2C_M_IGNORE_NAK 0x1000
|
|
#define I2C_M_NO_RD_ACK 0x0800
|
|
|
|
/* To determine what functionality is present */
|
|
#define I2C_FUNC_I2C 0x00000001
|
|
#define I2C_FUNC_10BIT_ADDR 0x00000002
|
|
#define I2C_FUNC_PROTOCOL_MANGLING 0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
|
|
#define I2C_FUNC_SMBUS_HWPEC_CALC 0x00000008 /* SMBus 2.0 */
|
|
#define I2C_FUNC_NOSTART 0x00000010 /* I2C_M_NOSTART */
|
|
#define I2C_FUNC_SMBUS_READ_WORD_DATA_PEC 0x00000800 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA_PEC 0x00001000 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_PROC_CALL_PEC 0x00002000 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL_PEC 0x00004000 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL 0x00008000 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_QUICK 0x00010000
|
|
#define I2C_FUNC_SMBUS_READ_BYTE 0x00020000
|
|
#define I2C_FUNC_SMBUS_WRITE_BYTE 0x00040000
|
|
#define I2C_FUNC_SMBUS_READ_BYTE_DATA 0x00080000
|
|
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA 0x00100000
|
|
#define I2C_FUNC_SMBUS_READ_WORD_DATA 0x00200000
|
|
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA 0x00400000
|
|
#define I2C_FUNC_SMBUS_PROC_CALL 0x00800000
|
|
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA 0x01000000
|
|
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
|
|
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK 0x04000000 /* I2C-like block xfer */
|
|
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK 0x08000000 /* w/ 1-byte reg. addr. */
|
|
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 0x10000000 /* I2C-like block xfer */
|
|
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */
|
|
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA_PEC 0x40000000 /* SMBus 2.0 */
|
|
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC 0x80000000 /* SMBus 2.0 */
|
|
|
|
#define I2C_FUNC_SMBUS_BYTE I2C_FUNC_SMBUS_READ_BYTE | \
|
|
I2C_FUNC_SMBUS_WRITE_BYTE
|
|
#define I2C_FUNC_SMBUS_BYTE_DATA I2C_FUNC_SMBUS_READ_BYTE_DATA | \
|
|
I2C_FUNC_SMBUS_WRITE_BYTE_DATA
|
|
#define I2C_FUNC_SMBUS_WORD_DATA I2C_FUNC_SMBUS_READ_WORD_DATA | \
|
|
I2C_FUNC_SMBUS_WRITE_WORD_DATA
|
|
#define I2C_FUNC_SMBUS_BLOCK_DATA I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
|
|
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA
|
|
#define I2C_FUNC_SMBUS_I2C_BLOCK I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
|
|
I2C_FUNC_SMBUS_WRITE_I2C_BLOCK
|
|
|
|
#define I2C_FUNC_SMBUS_EMUL I2C_FUNC_SMBUS_QUICK | \
|
|
I2C_FUNC_SMBUS_BYTE | \
|
|
I2C_FUNC_SMBUS_BYTE_DATA | \
|
|
I2C_FUNC_SMBUS_WORD_DATA | \
|
|
I2C_FUNC_SMBUS_PROC_CALL | \
|
|
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
|
|
I2C_FUNC_SMBUS_WRITE_BLOCK_DATA_PEC | \
|
|
I2C_FUNC_SMBUS_I2C_BLOCK
|
|
|
|
#define STATUS_IDLE 0
|
|
#define STATUS_ADDRESS_ACK 1
|
|
#define STATUS_ADDRESS_NACK 2
|