diff options
Diffstat (limited to 'packages/i2c/files/i2c-io.h')
-rw-r--r-- | packages/i2c/files/i2c-io.h | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/packages/i2c/files/i2c-io.h b/packages/i2c/files/i2c-io.h new file mode 100644 index 0000000000..3ffb5e9c0e --- /dev/null +++ b/packages/i2c/files/i2c-io.h @@ -0,0 +1,220 @@ +/**************************************************************************** +* +* Copyright (c) 2006 Dave Hylands <dhylands@gmail.com> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Alternatively, this software may be distributed under the terms of BSD +* license. +* +* See README and COPYING for more details. +* +****************************************************************************/ +/** +* +* @file i2c-io.h +* +* @brief This file defines the interface to the i2c-io program which +* runs on the robostix. +* +*****************************************************************************/ + +#if !defined( I2C_IO_H ) +#define I2C_IO_H /**< Include Guard */ + +/* ---- Include Files ---------------------------------------------------- */ + +/* ---- Constants and Types ---------------------------------------------- */ + +//--------------------------------------------------------------------------- +/** + * Defines the version of this API. This includes the layout of the + * various structures, along with the semantics associated with the + * protocol. Any changes require the version number to be incremented. + * + * Version 2 - Introduced READ/WRITE_REG_8/16 + */ + +#define I2C_IO_API_VERSION 2 + +//--------------------------------------------------------------------------- +/** + * The min version, determines the minimum version that this API is + * compatable with. This allows old host side programs to determine + * that they're not compatible. + */ + +#define I2C_IO_API_MIN_VERSION 1 + + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_GET_INFO command retrieves information about the i2c-io +* program running on the robostix. +*/ + +#define I2C_IO_GET_INFO 0x01 + +typedef struct +{ + uint8_t version; + uint8_t minVersion; + uint16_t svnRevision; + +} I2C_IO_Info_t; + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_GET_GPIO command retrieves the values of the pins indicated +* by portNum. +* +* The portNum is set such that 0 = A, 1 = B, etc. +* +* A block-reply with a single 8 bit value is returned. +*/ + +typedef struct +{ + uint8_t portNum; + +} I2C_IO_Get_GPIO_t; + +#define I2C_IO_GET_GPIO 0x02 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_SET_GPIO command sets the values of the pins specified +* by pinMask to the correponding bits in ponVal. +* +* Note: Setting a pin that's configured for input will enable a pullup +* resistor. +* +* The portNum is set such that 0 = A, 1 = B, etc. +*/ + +typedef struct +{ + uint8_t portNum; + uint8_t pinMask; + uint8_t pinVal; + +} I2C_IO_Set_GPIO_t; + +#define I2C_IO_SET_GPIO 0x03 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_GET_GPIO_DIR command retrieves the data direction +* register (DDR) for the indicated portNum. +* +* The I2C_IO_Get_GPIO_t structure is used for this command. +* +* Note: It's ok to read the values of pins which are set for output. +* +* The portNum is set such that 0 = A, 1 = B, etc. +* +* A block-reply with a single 8 bit value is returned. +* A 1 bit means that the pin is set for output and a 0 bit means that +* the pin is set for input. +*/ + +#define I2C_IO_GET_GPIO_DIR 0x04 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_SET_GPIO_DIR command sets the data direction +* register (DDR) for the indicated portNum. +* +* The I2C_IO_Set_GPIO_t structure is used for this command. +* +* The portNum is set such that 0 = A, 1 = B, etc. +*/ + +#define I2C_IO_SET_GPIO_DIR 0x05 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_GET_ADC command performs an ADC sample and returns the result. +* +* mux values 0 thru 7 read singled ended ADC values. Values 8 thru 31 +* return a variety of values. See the data sheet for specifics. +* +* A block-reply with a 16 bit value is returned, although only the +* lower 10 bits are significant. +*/ + +typedef struct +{ + uint8_t mux; + +} I2C_IO_Get_ADC_t; + +#define I2C_IO_GET_ADC 0x06 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_READ_REG_8 command reads a 8-bit register. +* +* A block reply with an 8 bit value is returned. +*/ + +typedef struct +{ + uint8_t reg; ///< Index of the register to be read. + +} I2C_IO_ReadReg8_t; + +#define I2C_IO_READ_REG_8 0x07 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_READ_REG_16 command reads a 16-bit register. +* +* A block reply with a 16 bit value is returned. +*/ + +typedef struct +{ + uint8_t reg; ///< Index of the register to be read. + +} I2C_IO_ReadReg16_t; + +#define I2C_IO_READ_REG_16 0x08 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_WRITE_REG_8 command writes an 8-bit register. +*/ + +typedef struct +{ + uint8_t reg; ///< Index of the register to be read. + uint8_t val; ///< Value to write into the register + +} I2C_IO_WriteReg8_t; + +#define I2C_IO_WRITE_REG_8 0x09 + +//--------------------------------------------------------------------------- +/** +* The I2C_IO_WRITE_REG_16 command writes a 16-bit register. +*/ + +typedef struct +{ + uint8_t reg; ///< Index of the register to be read. + uint8_t pad; ///< Pad for alignment on the host. + uint16_t val; ///< Value to write + +} I2C_IO_WriteReg16_t; + +#define I2C_IO_WRITE_REG_16 0x0A + +/* ---- Variable Externs ------------------------------------------------- */ + +/* ---- Function Prototypes ---------------------------------------------- */ + +#endif /* I2C_IO_H */ + |