From 06086b0994e98165c3641414c442462514c8b75c Mon Sep 17 00:00:00 2001 From: UncleRus Date: Wed, 23 Nov 2016 13:32:10 +0500 Subject: [PATCH] I2C address added to device descriptor --- examples/ssd1306_example/main.c | 5 ++++- extras/ssd1306/ssd1306.c | 4 ++-- extras/ssd1306/ssd1306.h | 10 ++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/ssd1306_example/main.c b/examples/ssd1306_example/main.c index 2c6ed15..0238408 100644 --- a/examples/ssd1306_example/main.c +++ b/examples/ssd1306_example/main.c @@ -21,6 +21,7 @@ #ifdef I2C_CONNECTION #define PROTOCOL SSD1306_PROTO_I2C + #define ADDR SSD1306_I2C_ADDR_0 #define SCL_PIN 5 #define SDA_PIN 4 #else @@ -32,7 +33,9 @@ /* Declare device descriptor */ static const ssd1306_t dev = { .protocol = PROTOCOL, -#ifndef I2C_CONNECTION +#ifdef I2C_CONNECTION + .addr = ADDR, +#else .cs_pin = CS_PIN, .dc_pin = DC_PIN, #endif diff --git a/extras/ssd1306/ssd1306.c b/extras/ssd1306/ssd1306.c index 2e5b2ab..06370a8 100644 --- a/extras/ssd1306/ssd1306.c +++ b/extras/ssd1306/ssd1306.c @@ -82,7 +82,7 @@ int ssd1306_command(const ssd1306_t *dev, uint8_t cmd) #if (SSD1306_I2C_SUPPORT) case SSD1306_PROTO_I2C: i2c_start(); - if (!i2c_write(SSD1306_I2C_ADDR << 1)) { + if (!i2c_write(dev->addr << 1)) { debug("Error while xmitting I2C slave address\n"); i2c_stop(); return -EIO; @@ -189,7 +189,7 @@ int ssd1306_load_frame_buffer(const ssd1306_t *dev, uint8_t buf[]) case SSD1306_PROTO_I2C: for (i = 0; i < len; i++) { i2c_start(); - if (!i2c_write(SSD1306_I2C_ADDR << 1)) { + if (!i2c_write(dev->addr << 1)) { debug("Error while xmitting I2C slave address\n"); i2c_stop(); return -EIO; diff --git a/extras/ssd1306/ssd1306.h b/extras/ssd1306/ssd1306.h index caf13d2..1784f75 100644 --- a/extras/ssd1306/ssd1306.h +++ b/extras/ssd1306/ssd1306.h @@ -16,7 +16,10 @@ #include "config.h" // shifted -#define SSD1306_I2C_ADDR (0x3C) +#if (SSD1306_I2C_SUPPORT) + #define SSD1306_I2C_ADDR_0 (0x3C) + #define SSD1306_I2C_ADDR_1 (0x3D) +#endif #ifdef __cplusplus extern "C" @@ -39,9 +42,12 @@ typedef enum typedef struct { ssd1306_protocol_t protocol; +#if (SSD1306_I2C_SUPPORT) + uint8_t addr; //!< I2C address +#endif uint8_t cs_pin; //!< Chip Select GPIO pin, used by SSD1306_PROTO_SPI3, SSD1306_PROTO_SPI4 uint8_t dc_pin; //!< Data/Command GPIO pin, used by SSD1306_PROTO_SPI4 - uint8_t width; //!< Screen width, currently only 128px supported + uint8_t width; //!< Screen width, currently supported 128px, 96px uint8_t height; //!< Screen height, currently supported 16px, 32px, 64px } ssd1306_t;