diff options
Diffstat (limited to 'recipes/i2c/files/i2c.h')
-rw-r--r-- | recipes/i2c/files/i2c.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/recipes/i2c/files/i2c.h b/recipes/i2c/files/i2c.h new file mode 100644 index 0000000000..bbfd276cec --- /dev/null +++ b/recipes/i2c/files/i2c.h @@ -0,0 +1,135 @@ +/**************************************************************************** +* +* 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.h +* +* @brief Global definitions for interfacing with the AVR TWI (aka I2C) +* hardware +* +****************************************************************************/ +/** +* @defgroup xxx Readable version of xxx. +* +* @brief Brief description of what xxx does. +* +* Longer description of what xxx does. +* +****************************************************************************/ + +#if !defined( I2C_H ) +#define I2C_H /**< Include Guard */ + +/* ---- Include Files ---------------------------------------------------- */ + +#include <inttypes.h> + +#if !defined( CONFIG_H ) +# include "Config.h" +#endif + + +/** + * @addtogroup I2C + * @{ + */ + +/* ---- Constants and Types ---------------------------------------------- */ + +/** + * Error Codes + */ + +#define I2C_ERROR_NONE 0 // No Error +#define I2C_ERROR_ADDR_NACK -1 // No response to SLA+R/W +#define I2C_ERROR_DATA_NACK -2 // NACK during data transmission +#define I2C_ERROR_ARBITRATION_LOST -3 // Lost arbitration +#define I2C_ERROR_BAD_LEN -4 // Length is wonky +#define I2C_ERROR_BAD_CRC -5 // CRC failed +#define I2C_ERROR_BUS_ERROR -6 // Someting weird on the i2c bus + +typedef int8_t I2C_Error_t; + +/** + * Since we're loosely following the SMBus spec, we restrict the amount + * of data in each transaction to 32 bytes. + */ + +#define I2C_MAX_DATA_LEN 32 + +/** + * I2C_Addr_t can contain the address of any device on the bus. This + * module only supports 7 bit addressing. + */ + +typedef uint8_t I2C_Addr_t; + +/** + * The I2C_CRC macro can be used to remove all CRC support at compile time. + */ + +#if CFG_I2C_USE_CRC +# define I2C_CRC(x) x +#else + +# define I2C_CRC(x) +#endif + + +/** + * I2C_Data_t encapsulates the data being read or written on the i2c bus. + * This module follows the SMBus spec, whihch specifies a maximum payload + * of 32 bytes. + */ + +typedef struct +{ +#if CFG_I2C_USE_CRC + uint8_t m_crc; +#endif + + + // For reads, m_len is the number of bytes actually read (doesn't include + // the CRC - if present). If a block transfer was performed which has a + // length byte, this length will include the length byte. + + uint8_t m_len; + + // Note: Under SMBus, a block write can consist of a command, a length, + // 32 bytes of payload, and a CRC. + // + // A read response can consist of a length, 32 bytes of data, and a CRC. + + uint8_t m_data[ I2C_MAX_DATA_LEN + 2]; // +1 for the command, +1 for length + +} I2C_Data_t; + +/* ---- Variable Externs ------------------------------------------------- */ + +/** + * Description of variable. + */ + +/* ---- Function Prototypes ---------------------------------------------- */ + +/* + * Just include prototypes here. Put full descriptions in the .c files. + */ + +/** @} */ + +#endif /* I2C_H */ + + |