* $WIZ$ module_name = "i2c"
* $WIZ$ module_configuration = "bertos/cfg/cfg_i2c.h"
* $WIZ$ module_hw = "bertos/hw/hw_i2c_bitbang.h"
+ * $WIZ$ module_depends = "i2c_bitbang"
* $WIZ$ module_supports = "not atmega103 and not atmega168 and not at91"
*/
#define i2c_start_r(args...) PP_CAT(i2c_start_r ## _, COUNT_PARMS(args)) (args)
#endif
+
+/**
+ * \name I2C bitbang devices enum
+ */
+enum
+{
+ I2C_BITBANG_OLD = -1,
+ I2C_BITBANG0 = 1000,
+ I2C_BITBANG1,
+ I2C_BITBANG2,
+ I2C_BITBANG3,
+ I2C_BITBANG4,
+ I2C_BITBANG5,
+ I2C_BITBANG6,
+ I2C_BITBANG7,
+ I2C_BITBANG8,
+ I2C_BITBANG9,
+
+ I2C_BITBANG_CNT /**< Number of serial ports */
+};
+
+#if !CONFIG_I2C_DISABLE_OLD_API
+
/**
* I2C Backends.
* Sometimes your cpu does not have a builtin
* i2c driver or you don't want, for some reason, to
* use that.
* With this you can choose, at compile time, which backend to use.
- *
- * $WIZ$ i2c_backend = "I2C_BACKEND_BUILTIN", "I2C_BACKEND_BITBANG"
*/
#define I2C_BACKEND_BUILTIN 0 ///< Uses cpu builtin i2c driver
#define I2C_BACKEND_BITBANG 1 ///< Uses emulated bitbang driver
* that you want the builtin backend.
* \{
*/
-void i2c_builtin_init(void);
bool i2c_builtin_start_w(uint8_t id);
bool i2c_builtin_start_r(uint8_t id);
void i2c_builtin_stop(void);
* that you want the bitbang backend.
* \{
*/
-void i2c_bitbang_init(void);
bool i2c_bitbang_start_w(uint8_t id);
bool i2c_bitbang_start_r(uint8_t id);
void i2c_bitbang_stop(void);
int i2c_bitbang_get(bool ack);
/*\}*/
+#ifndef CONFIG_I2C_BACKEND
+#define CONFIG_I2C_BACKEND I2C_BACKEND_BUILTIN
+#endif
+
#if CONFIG_I2C_BACKEND == I2C_BACKEND_BUILTIN
- #define i2c_init_0 i2c_builtin_init
#define i2c_start_w_1 i2c_builtin_start_w
#define i2c_start_r_1 i2c_builtin_start_r
#define i2c_stop i2c_builtin_stop
#define i2c_put i2c_builtin_put
#define i2c_get i2c_builtin_get
#elif CONFIG_I2C_BACKEND == I2C_BACKEND_BITBANG
- #define i2c_init_0 i2c_bitbang_init
#define i2c_start_w_1 i2c_bitbang_start_w
#define i2c_start_r_1 i2c_bitbang_start_r
#define i2c_stop i2c_bitbang_stop
bool i2c_send(const void *_buf, size_t count);
bool i2c_recv(void *_buf, size_t count);
+#endif /* !CONFIG_I2C_DISABLE_OLD_API */
/*
- * I2c new api
- */
-
-/**
- * \name I2C bitbang devices enum
+ * I2C error flags
*/
-enum
-{
- I2C_BITBANG0 = 1000,
- I2C_BITBANG1,
- I2C_BITBANG2,
- I2C_BITBANG3,
- I2C_BITBANG4,
- I2C_BITBANG5,
- I2C_BITBANG6,
- I2C_BITBANG7,
- I2C_BITBANG8,
- I2C_BITBANG9,
-
- I2C_BITBANG_CNT /**< Number of serial ports */
-};
-
- /*
- * I2C error flags
- */
#define I2C_OK 0 ///< I2C no errors flag
#define I2C_DATA_NACK BV(4) ///< I2C generic error
#define I2C_ERR BV(3) ///< I2C generic error
return err;
}
-#define i2c_init_3(i2c, dev, clock) (dev > I2C_BITBANG0) ? i2c_hw_bitbangInit(i2c, dev) : i2c_hw_init(i2c, dev, clock)
+#define i2c_init_3(i2c, dev, clock) ((((dev) >= I2C_BITBANG0) | ((dev) == I2C_BITBANG_OLD)) ? \
+ i2c_hw_bitbangInit((i2c), (dev)) : i2c_hw_init((i2c), (dev), (clock)))
+
+#if !CONFIG_I2C_DISABLE_OLD_API
+
+extern I2c local_i2c_old_api;
+
+INLINE void i2c_init_0(void)
+{
+ #if CONFIG_I2C_BACKEND == I2C_BACKEND_BITBANG
+ i2c_init_3(&local_i2c_old_api, I2C_BITBANG_OLD, CONFIG_I2C_FREQ);
+ #else
+ i2c_init_3(&local_i2c_old_api, 0, CONFIG_I2C_FREQ);
+ #endif
+}
+#endif /* !CONFIG_I2C_DISABLE_OLD_API */
+
#endif