summaryrefslogtreecommitdiff
path: root/recipes/i2c/files/i2c.h
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/i2c/files/i2c.h')
-rw-r--r--recipes/i2c/files/i2c.h135
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 */
+
+