27 #if defined(SSD1306_ESP_PLATFORM) 31 #include "freertos/FreeRTOS.h" 32 #include "freertos/task.h" 33 #include "driver/gpio.h" 37 int digitalRead(
int pin)
39 return gpio_get_level(pin);
42 void digitalWrite(
int pin,
int level)
44 gpio_set_level(pin, level);
47 void pinMode(
int pin,
int mode)
50 gpio_set_direction(pin, GPIO_MODE_INPUT);
51 else if (mode == OUTPUT)
52 gpio_set_direction(pin, GPIO_MODE_OUTPUT);
57 return xTaskGetTickCount() * portTICK_PERIOD_MS;
60 void delay(uint32_t ms)
62 vTaskDelay(ms / portTICK_PERIOD_MS);
69 #if defined(CONFIG_PLATFORM_I2C_AVAILABLE) && defined(CONFIG_PLATFORM_I2C_ENABLE) 72 #include "driver/i2c.h" 74 static uint8_t s_i2c_addr = 0x3C;
75 static int8_t s_bus_id;
77 static i2c_cmd_handle_t s_cmd_handle;
79 static void platform_i2c_start(
void)
82 s_cmd_handle = i2c_cmd_link_create();
83 i2c_master_start(s_cmd_handle);
84 i2c_master_write_byte(s_cmd_handle, ( s_i2c_addr << 1 ) | I2C_MASTER_WRITE, 0x1);
87 static void platform_i2c_stop(
void)
90 i2c_master_stop(s_cmd_handle);
91 i2c_master_cmd_begin(s_bus_id, s_cmd_handle, 1000 / portTICK_RATE_MS);
92 i2c_cmd_link_delete(s_cmd_handle);
95 static void platform_i2c_send(uint8_t data)
98 i2c_master_write_byte(s_cmd_handle, data, 0x1);
101 static void platform_i2c_close(
void)
104 i2c_driver_delete(s_bus_id);
107 static void platform_i2c_send_buffer(
const uint8_t *data, uint16_t len)
112 platform_i2c_send(*data);
120 if (addr) s_i2c_addr = addr;
128 if ( busId < 0) busId = I2C_NUM_1;
131 conf.mode = I2C_MODE_MASTER;
132 conf.sda_io_num = cfg->
sda >= 0 ? cfg->
sda : 21;
133 conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
134 conf.scl_io_num = cfg->
scl >= 0 ? cfg->
scl : 22;
135 conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
136 conf.master.clk_speed = 400000;
137 i2c_param_config(s_bus_id, &conf);
138 i2c_driver_install(s_bus_id, conf.mode, 0, 0, 0);
146 #if defined(CONFIG_PLATFORM_SPI_AVAILABLE) && defined(CONFIG_PLATFORM_SPI_ENABLE) 149 #include "driver/spi_master.h" 152 static spi_device_handle_t s_spi;
153 static int8_t s_spi_bus_id;
157 static uint8_t s_first_spi_session = 0;
159 static void platform_spi_start(
void)
162 if (s_first_spi_session)
164 spi_device_interface_config_t devcfg=
171 spi_bus_add_device(s_spi_bus_id ? VSPI_HOST : HSPI_HOST, &devcfg, &s_spi);
172 s_first_spi_session = 0;
176 static void platform_spi_stop(
void)
182 static void platform_spi_send(uint8_t data)
188 memset(&t, 0,
sizeof(t));
191 spi_device_transmit(s_spi, &t);
194 static void platform_spi_close(
void)
197 if (!s_first_spi_session)
199 spi_bus_remove_device( s_spi );
201 spi_bus_free( s_spi_bus_id ? VSPI_HOST : HSPI_HOST );
204 static void platform_spi_send_buffer(
const uint8_t *data, uint16_t len)
209 size_t sz = len > 32 ? 32: len;
211 memset(&t, 0,
sizeof(t));
214 spi_device_transmit(s_spi, &t);
225 if (busId < 0) busId = 1;
226 s_spi_bus_id = busId;
231 cesPin = s_spi_bus_id ? 5 : 15;
236 if (cesPin >=0) pinMode(cesPin, OUTPUT);
237 if (dcPin >= 0) pinMode(dcPin, OUTPUT);
247 spi_bus_config_t buscfg=
249 .miso_io_num= s_spi_bus_id ? 19 : 12,
250 .mosi_io_num= s_spi_bus_id ? 23 : 13,
251 .sclk_io_num= s_spi_bus_id ? 18 : 14,
256 spi_bus_initialize(s_spi_bus_id ? VSPI_HOST : HSPI_HOST, &buscfg, 0);
257 s_first_spi_session = 1;
261 #endif // SSD1306_ESP_PLATFORM
void ssd1306_platform_spiInit(int8_t busId, int8_t cesPin, int8_t dcPin)
Initializes spi interface for platform being used.
void(* send)(uint8_t data)
uint32_t s_ssd1306_spi_clock
void ssd1306_platform_i2cInit(int8_t busId, uint8_t addr, ssd1306_platform_i2cConfig_t *cfg)
Initializes i2c interface for platform being used.
void(* close)(void)
deinitializes internal resources, allocated for interface.
ssd1306_interface_t ssd1306_intf
void(* send_buffer)(const uint8_t *buffer, uint16_t size)
Sends bytes to SSD1306 device.