/*
* SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief SSD1306 driver
*/
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include "driver/i2c.h"
#include "stdint.h"
#include "ssd1306_fonts.h"
/**
* @brief I2C address.
*/
#define SSD1306_I2C_ADDRESS ((uint8_t)0x3C)
#define SSD1306_WIDTH 128
#define SSD1306_HEIGHT 64
typedef void *ssd1306_handle_t; /*handle of ssd1306*/
/**
* @brief device initialization
*
* @param dev object handle of ssd1306
*
* @return
* - ESP_OK Success
* - ESP_FAIL Fail
*/
esp_err_t ssd1306_init(ssd1306_handle_t dev);
/**
* @brief Create and initialization device object and return a device handle
*
* @param port I2C port object handle
* @param dev_addr I2C device address of device
*
* @return
* - device object handle of ssd1306
*/
ssd1306_handle_t ssd1306_create(i2c_port_t port, uint16_t dev_addr)
__attribute__((deprecated("This driver is DEPRECATED. Please use updated SSD1306 driver from ESP-IDF.")));
/**
* @brief Delete and release a device object
*
* @param dev object handle of ssd1306
*/
void ssd1306_delete(ssd1306_handle_t dev);
/**
* @brief draw point on (x, y)
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param chPoint fill point
*/
void ssd1306_fill_point(ssd1306_handle_t dev, uint8_t chXpos, uint8_t chYpos, uint8_t chPoint);
/**
* @brief Draw rectangle on (x1,y1)-(x2,y2)
*
* @param dev object handle of ssd1306
* @param chXpos1
* @param chYpos1
* @param chXpos2
* @param chYpos2
* @param chDot fill point
*/
void ssd1306_fill_rectangle(ssd1306_handle_t dev, uint8_t chXpos1, uint8_t chYpos1,
uint8_t chXpos2, uint8_t chYpos2, uint8_t chDot);
/**
* @brief display char on (x, y),and set size, mode
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param chSize char size
* @param chChr draw char
* @param chMode display mode
*/
void ssd1306_draw_char(ssd1306_handle_t dev, uint8_t chXpos,
uint8_t chYpos, uint8_t chChr, uint8_t chSize, uint8_t chMode);
/**
* @brief display number on (x, y),and set length, size, mode
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param chNum draw num
* @param chLen length
* @param chSize display size
*/
void ssd1306_draw_num(ssd1306_handle_t dev, uint8_t chXpos,
uint8_t chYpos, uint32_t chNum, uint8_t chLen, uint8_t chSize);
/**
* @brief display 1616char on (x, y)
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param chChar draw char
*/
void ssd1306_draw_1616char(ssd1306_handle_t dev, uint8_t chXpos, uint8_t chYpos, uint8_t chChar);
/**
* @brief display 3216char on (x, y)
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param chChar draw char
*/
void ssd1306_draw_3216char(ssd1306_handle_t dev, uint8_t chXpos, uint8_t chYpos, uint8_t chChar);
/**
* @brief draw bitmap on (x, y),and set width, height
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param pchBmp point to BMP data
* @param chWidth picture width
* @param chHeight picture heght
*/
void ssd1306_draw_bitmap(ssd1306_handle_t dev, uint8_t chXpos, uint8_t chYpos,
const uint8_t *pchBmp, uint8_t chWidth, uint8_t chHeight);
/**
* @brief draw line between two specified points
*
* @param dev object handle of ssd1306
* @param chXpos1 Specifies the X position of the starting point of the line
* @param chYpos1 Specifies the Y position of the starting point of the line
* @param chXpos2 Specifies the X position of the ending point of the line
* @param chYpos2 Specifies the Y position of the ending point of the line
*/
void ssd1306_draw_line(ssd1306_handle_t dev, int16_t chXpos1, int16_t chYpos1, int16_t chXpos2, int16_t chYpos2);
/**
* @brief refresh dot matrix panel
*
* @param dev object handle of ssd1306
* @return
* - ESP_OK Success
* - ESP_FAIL Fail
**/
esp_err_t ssd1306_refresh_gram(ssd1306_handle_t dev);
/**
* @brief Clear screen
*
* @param dev object handle of ssd1306
* @param chFill whether fill and fill char
**/
void ssd1306_clear_screen(ssd1306_handle_t dev, uint8_t chFill);
/**
* @brief Displays a string on the screen
*
* @param dev object handle of ssd1306
* @param chXpos Specifies the X position
* @param chYpos Specifies the Y position
* @param pchString Pointer to a string to display on the screen
* @param chSize char size
* @param chMode display mode
**/
void ssd1306_draw_string(ssd1306_handle_t dev, uint8_t chXpos, uint8_t chYpos,
const uint8_t *pchString, uint8_t chSize, uint8_t chMode);
#ifdef __cplusplus
}
#endif