d0373af5c0
* Add lvgl as main component * update dev5.2 lvgl branch * update lvgl 5.2 +update example + update configuration * Update submodule and example * update lv_drivers (fix) and example * fix problem when merge
578 lines
14 KiB
C
578 lines
14 KiB
C
/**
|
||
* @file lv_drv_conf.h
|
||
*
|
||
*/
|
||
|
||
#if 1 /*Remove this to enable the content*/
|
||
|
||
#ifndef LV_DRV_CONF_H
|
||
#define LV_DRV_CONF_H
|
||
|
||
#include "lv_conf.h"
|
||
|
||
/*********************
|
||
* INCLUDES
|
||
*********************/
|
||
/* Add specific sdk include here */
|
||
#include <espressif/esp_common.h>
|
||
#include <FreeRTOS.h>
|
||
#include <task.h>
|
||
#include <semphr.h>
|
||
|
||
#include <i2c/i2c.h>
|
||
#include <esp/gpio.h>
|
||
#include <esp/spi.h>
|
||
/*********************
|
||
* DEFINES
|
||
*********************/
|
||
/* Disable with 0 if driver don't use an specific api */
|
||
#define LV_DRIVER_ENABLE_COMMON 1
|
||
#define LV_DRIVER_ENABLE_DELAY 1
|
||
#define LV_DRIVER_ENABLE_I2C 1
|
||
#define LV_DRIVER_ENABLE_SPI 1
|
||
#define LV_DRIVER_ENABLE_PAR 1
|
||
|
||
/* use this macro if you want ignore a gpio write/read. e.g: spi.cs = LV_DRIVER_NOPIN */
|
||
#define LV_DRIVER_NOPIN (0xFF)
|
||
|
||
/* use this macro to add specific attribute to function call into an interupt routines */
|
||
#define INTERUPT_ATTRIBUTE __attribute__((section(".iram1.text")))
|
||
|
||
/**********************
|
||
* TYPEDEFS
|
||
**********************/
|
||
/* You can use a pointer handler or just a id number to reder to a device
|
||
* e.g: typedef const uint8_t lv_gpio_handle_t if you need just a bus id
|
||
* You can use device descriptor from your sdk too.
|
||
*/
|
||
//typedef const void* lv_gpio_handle_t ;
|
||
//typedef const void* lv_i2c_handle_t ;
|
||
//typedef const void* lv_spi_handle_t ;
|
||
typedef const void* lv_par_handle_t ;
|
||
typedef const void* lv_uart_handle_t ;
|
||
|
||
typedef struct {
|
||
uint8_t bus;
|
||
uint8_t cs;
|
||
uint8_t dc;
|
||
spi_settings_t *s; //XXX:experimental for multi spi device
|
||
SemaphoreHandle_t* mutex; //XXX:experimental for multi spi device
|
||
} lv_spi_dev_t, *lv_spi_handle_t;
|
||
|
||
typedef const i2c_dev_t *lv_i2c_handle_t ;
|
||
typedef uint8_t lv_gpio_handle_t ;
|
||
|
||
/*********************
|
||
* HAL INTERFACE
|
||
*********************/
|
||
/*
|
||
* All used peripherals must be initialized in user application, library only
|
||
* manipulate them.
|
||
* You can use a device descriptor from your SDK or do your own in this file too.
|
||
* example:
|
||
* typedef struct lv_spi_dev_t { .... };
|
||
*/
|
||
|
||
/*------------
|
||
* Delay
|
||
*------------*/
|
||
#if LV_DRIVER_ENABLE_DELAY
|
||
|
||
/**
|
||
* Delay the given number of microseconds
|
||
* @param us Time to wait in us
|
||
*/
|
||
static inline void lv_delay_us(const uint32_t us)
|
||
{
|
||
sdk_os_delay_us(us);
|
||
}
|
||
|
||
/**
|
||
* Delay the given number of milliseconds
|
||
* @param ms Time to wait in ms
|
||
*/
|
||
static inline void lv_delay_ms(const uint32_t ms)
|
||
{
|
||
if (ms/portTICK_PERIOD_MS) //if we wait more than a tick, use vTaskDelay
|
||
{
|
||
vTaskDelay(((ms-1)/portTICK_PERIOD_MS)+1); //Round superior
|
||
return;
|
||
}
|
||
for (uint32_t x = 0 ; x < ms ; x++)
|
||
{
|
||
sdk_os_delay_us(1000);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Return system time
|
||
* @return system time (ms)
|
||
*/
|
||
static inline uint32_t lv_get_ms()
|
||
{
|
||
return xTaskGetTickCount()*portTICK_PERIOD_MS;
|
||
}
|
||
|
||
#endif
|
||
/*------------
|
||
* Common
|
||
*------------*/
|
||
#if LV_DRIVER_ENABLE_COMMON
|
||
|
||
/**
|
||
* Change a pin level
|
||
* @param pin gpio Number
|
||
* @param val Level to set
|
||
*/
|
||
static inline void lv_gpio_write(lv_gpio_handle_t gpio, const uint8_t val)
|
||
{
|
||
gpio_write(gpio, val);
|
||
}
|
||
|
||
/**
|
||
* Read current level gpio
|
||
* @param pin gpio to read
|
||
* @return gpio value
|
||
*/
|
||
static inline uint8_t lv_gpio_read(lv_gpio_handle_t gpio)
|
||
{
|
||
return gpio_read(gpio);
|
||
}
|
||
|
||
#endif
|
||
|
||
/*---------
|
||
* UART
|
||
*---------*/
|
||
/**
|
||
* Do a uart write transmission.
|
||
* @param uart_dev Pointer to uart device
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to send
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_uart_write(lv_uart_handle_t uart_dev, const void* data_out, uint16_t datalen)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* Do a uart read transmission
|
||
* @param uart_dev Pointer to uart device
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to read
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_uart_read(lv_uart_handle_t uart_dev, void* data_in, uint16_t datalen)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
/*---------
|
||
* I2C
|
||
*---------*/
|
||
#if LV_DRIVER_ENABLE_I2C
|
||
|
||
/**
|
||
* Do a I2C write transmission on 8 bits register device.
|
||
* @param i2c_dev Pointer to i2c device
|
||
* @param reg Pointer to register address to send if non-null
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to send
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_i2c_write(lv_i2c_handle_t i2c_dev, const uint8_t* reg, const void* data_out, uint16_t datalen)
|
||
{
|
||
return i2c_slave_write(i2c_dev->bus, i2c_dev->addr, reg, (uint8_t*)data_out, datalen);
|
||
}
|
||
|
||
/**
|
||
* Do a I2C read transmission on 8 bits register device.
|
||
* @param i2c_dev Pointer to i2c device
|
||
* @param reg Pointer to register address to send if non-null
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to send
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_i2c_read(lv_i2c_handle_t i2c_dev, const uint8_t* reg, void* data_in, uint16_t datalen)
|
||
{
|
||
return i2c_slave_read(i2c_dev->bus, i2c_dev->addr, reg, (uint8_t*)data_in, datalen);
|
||
}
|
||
|
||
/**
|
||
* Do a I2C write transmissionon 16 bits register device
|
||
* @param i2c_dev Pointer to i2c device
|
||
* @param reg Pointer to register address to send if non-null
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to send
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_i2c_write16(lv_i2c_handle_t i2c_dev, const uint16_t* reg, const void* data_out, uint16_t datalen)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* Do a I2C write transmissionon 16 bits register device.
|
||
* @param i2c_dev Pointer to i2c device
|
||
* @param reg Pointer to register address to send if non-null
|
||
* @param data_out Pointer to data buffer to send if non-null
|
||
* @param datalen Number of data byte to send
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_i2c_read16(lv_i2c_handle_t i2c_dev, const uint16_t* reg, void* data_in, uint16_t datalen)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
#endif
|
||
/*---------
|
||
* SPI
|
||
*---------*/
|
||
#if LV_DRIVER_ENABLE_SPI
|
||
|
||
typedef enum {
|
||
LV_SPI_COMMAND,
|
||
LV_SPI_ADDRESS,
|
||
LV_SPI_DUMMY,
|
||
} lv_spi_reg_t;
|
||
|
||
/**
|
||
* Control SPI cs pin.
|
||
* @param spi_dev Pointer to spi device
|
||
* @param lvl Gpio Level
|
||
*/
|
||
static inline void lv_spi_wr_cs(lv_spi_handle_t spi_dev, uint8_t lvl)
|
||
{
|
||
gpio_write(spi_dev->cs, lvl);
|
||
}
|
||
|
||
/**
|
||
* Control SPI dc pin.
|
||
* @param spi_dev Pointer to spi device
|
||
* @param lvl Gpio Level
|
||
*/
|
||
static inline void lv_spi_wr_dc(lv_spi_handle_t spi_dev, uint8_t lvl)
|
||
{
|
||
gpio_write(spi_dev->dc, lvl);
|
||
}
|
||
|
||
/**
|
||
* Do a SPI transaction .
|
||
* @param spi_dev Pointer to spi device
|
||
* @param data_in Receive buffer. If NULL, received data will be lost.
|
||
* @param data_out Data to send buffer. If NULL, it will only receive data.
|
||
* @param len Buffer size in words
|
||
* @param word_size Size of the word in byte
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_spi_transaction(lv_spi_handle_t spi_dev, void* data_in, const void* data_out, uint16_t len, uint8_t word_size)
|
||
{
|
||
spi_transfer(spi_dev->bus, data_out, data_in, len, word_size);
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* Do a SPI repeat send.
|
||
* @param spi_dev Pointer to spi device
|
||
* @param template Pointer toTemplate to send throw spi.
|
||
* @param repeats Copy number
|
||
* @param template_size Size of the template in byte
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_spi_repeat(lv_spi_handle_t spi_dev, const void* template, uint32_t repeats, uint8_t template_size)
|
||
{
|
||
uint32_t data = 0;
|
||
if(!template)
|
||
{
|
||
template = (void*)&data ;
|
||
}
|
||
switch (template_size)
|
||
{
|
||
case 1:
|
||
spi_repeat_send_8(spi_dev->bus,*(uint8_t*)template,repeats);
|
||
break;
|
||
case 2:
|
||
spi_repeat_send_16(spi_dev->bus,*(uint16_t*)template,repeats);
|
||
break;
|
||
case 4:
|
||
spi_repeat_send_32(spi_dev->bus,*(uint32_t*)template,repeats);
|
||
break;
|
||
default:
|
||
return -1;
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* Set command to send for spi transaction
|
||
* @param spi_dev Pointer to spi device
|
||
* @param reg SPI register to set (dummy/command/address)
|
||
* @param value Value
|
||
* @param bits Bits number
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_spi_set_preemble(lv_spi_handle_t spi_dev, lv_spi_reg_t reg, uint32_t value, uint8_t bits)
|
||
{
|
||
switch(reg) {
|
||
case LV_SPI_COMMAND:
|
||
spi_set_command(spi_dev->bus, bits, value);
|
||
break;
|
||
case LV_SPI_ADDRESS:
|
||
spi_set_address(spi_dev->bus, bits, value);
|
||
break;
|
||
case LV_SPI_DUMMY:
|
||
spi_set_dummy_bits(spi_dev->bus, bits, false);
|
||
break;
|
||
default:
|
||
return -1;
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* Clear spi bus command
|
||
* @param spi_dev Pointer to spi device
|
||
* @param reg SPI register to clear (dummy/command/address)
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_spi_clr_preemble(lv_spi_handle_t spi_dev, lv_spi_reg_t reg)
|
||
{
|
||
switch(reg) {
|
||
case LV_SPI_COMMAND:
|
||
spi_clear_command(spi_dev->bus);
|
||
break;
|
||
case LV_SPI_ADDRESS:
|
||
spi_clear_address(spi_dev->bus);
|
||
break;
|
||
case LV_SPI_DUMMY:
|
||
spi_clear_dummy(spi_dev->bus);
|
||
break;
|
||
default:
|
||
return -1;
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
#endif
|
||
/*------------------
|
||
* Parallel port
|
||
*-----------------*/
|
||
#if LV_DRIVER_ENABLE_PAR
|
||
/**
|
||
* Control Parallel cs pin.
|
||
* @param par_dev Pointer to parallel device
|
||
* @param lvl Gpio Level
|
||
*/
|
||
static inline void lv_par_wr_cs(lv_par_handle_t par_dev, uint8_t lvl)
|
||
{
|
||
return;
|
||
}
|
||
|
||
/**
|
||
* Control Parallel dc pin.
|
||
* @param par_dev Pointer to parallel device
|
||
* @param lvl Gpio Level
|
||
*/
|
||
static inline void lv_par_wr_dc(lv_par_handle_t par_dev, uint8_t lvl)
|
||
{
|
||
return;
|
||
}
|
||
|
||
/**
|
||
* Do a Parallel port write.
|
||
* @param par_dev Pointer to parallel port device
|
||
* @param data_out Pointer to data buffer to send
|
||
* @param len Buffer size in words
|
||
* @param word_size Size of the word in byte
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_par_write(lv_par_handle_t par_dev, const void* data_out, uint16_t len, uint8_t word_size)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
/**
|
||
* Do a Parallel port read.
|
||
* @param par_dev Pointer to parallel port device
|
||
* @param data_in Pointer to data buffer to read
|
||
* @param len Buffer size in words
|
||
* @param word_size Size of the word in byte
|
||
* @return Non-Zero if error occured
|
||
*/
|
||
static inline int lv_par_read(lv_par_handle_t par_dev, void* data_in, uint16_t len, uint8_t word_size)
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
#endif
|
||
/*********************
|
||
* DISPLAY DRIVERS
|
||
*********************/
|
||
|
||
/*-------------------
|
||
* Monitor of PC
|
||
*-------------------*/
|
||
#define USE_MONITOR 0
|
||
#if USE_MONITOR
|
||
#define MONITOR_HOR_RES LV_HOR_RES
|
||
#define MONITOR_VER_RES LV_HOR_VER
|
||
#endif
|
||
|
||
/*----------------
|
||
* SSD1963
|
||
*--------------*/
|
||
#define USE_SSD1963 0
|
||
#if USE_SSD1963
|
||
#define SSD1963_HOR_RES LV_HOR_RES
|
||
#define SSD1963_VER_RES LV_VER_RES
|
||
#define SSD1963_HDP 479
|
||
#define SSD1963_HT 531
|
||
#define SSD1963_HPS 43
|
||
#define SSD1963_LPS 8
|
||
#define SSD1963_HPW 10
|
||
#define SSD1963_VDP 271
|
||
#define SSD1963_VT 288
|
||
#define SSD1963_VPS 12
|
||
#define SSD1963_FPS 4
|
||
#define SSD1963_VPW 10
|
||
#define SSD1963_HS_NEG 0 /*Negative hsync*/
|
||
#define SSD1963_VS_NEG 0 /*Negative vsync*/
|
||
#define SSD1963_ORI 0 /*0, 90, 180, 270*/
|
||
#define SSD1963_COLOR_DEPTH 16
|
||
#endif
|
||
|
||
/*----------------
|
||
* ILI9341
|
||
*--------------*/
|
||
#define USE_ILI9341 0
|
||
#if USE_ILI9341
|
||
#define ILI9341_DEBUG 0
|
||
#define ILI9341_ERR_CHECK 1
|
||
#define ILI9341_PAR_SUPPORT 1
|
||
#define ILI9341_SPI4WIRE_SUPPORT 1
|
||
#define ILI9341_SPI3WIRE_SUPPORT 1
|
||
#define ILI9341_EXTC_SUPPORT (0)
|
||
#define ILI9341_COLOR (65) //Color Mode : 65K or 262K
|
||
#define ILI9341_MAX_SAMPLE (32) //Buffer spi is 64, so select 32 for 2byte per pixel
|
||
#define ILI9341_SERIAL_BYTESWAP (0) // { 0 : None, 1: CPU Swap, 2: ILI9341 swap }
|
||
#endif
|
||
|
||
/*----------------
|
||
* SSD1306
|
||
*--------------*/
|
||
#define USE_SSD1306 1
|
||
#if USE_SSD1306
|
||
#define SSD1306_HOR_RES LV_HOR_RES
|
||
#define SSD1306_VER_RES LV_VER_RES
|
||
#define SSD1306_DEBUG 0
|
||
#define SSD1306_ERR_CHECK 0
|
||
#define SSD1306_I2C_SUPPORT 1
|
||
#define SSD1306_SPI_4_WIRE_SUPPORT 1
|
||
#define SSD1306_SPI_3_WIRE_SUPPORT 1
|
||
#endif
|
||
|
||
/*----------------
|
||
* R61581
|
||
*--------------*/
|
||
#define USE_R61581 0
|
||
#if USE_R61581 != 0
|
||
#define R61581_HOR_RES LV_HOR_RES
|
||
#define R61581_VER_RES LV_VER_RES
|
||
#define R61581_HDP 479
|
||
#define R61581_HT 531
|
||
#define R61581_HPS 43
|
||
#define R61581_LPS 8
|
||
#define R61581_HPW 10
|
||
#define R61581_VDP 271
|
||
#define R61581_VT 319
|
||
#define R61581_VPS 12
|
||
#define R61581_FPS 4
|
||
#define R61581_VPW 10
|
||
#define R61581_HS_NEG 0 /*Negative hsync*/
|
||
#define R61581_VS_NEG 0 /*Negative vsync*/
|
||
#define R61581_ORI 180 /*0, 90, 180, 270*/
|
||
#define R61581_LV_COLOR_DEPTH 16
|
||
#endif
|
||
|
||
/*------------------------------
|
||
* ST7565 (Monochrome, low res.)
|
||
*-----------------------------*/
|
||
#define USE_ST7565 0
|
||
#if USE_ST7565 != 0
|
||
/*No settings*/
|
||
#endif /*USE_ST7565*/
|
||
|
||
/*-----------------------------------------
|
||
* Linux frame buffer device (/dev/fbx)
|
||
*-----------------------------------------*/
|
||
#define USE_FBDEV 0
|
||
#if USE_FBDEV != 0
|
||
#define FBDEV_PATH "/dev/fb0"
|
||
#endif
|
||
|
||
/*====================
|
||
* Input devices
|
||
*===================*/
|
||
|
||
/*--------------
|
||
* AR1000
|
||
*--------------*/
|
||
#define USE_AR10XX (1)
|
||
#if (USE_AR10XX != 0)
|
||
#define AR10XX_SPI_SUPPORT (1)
|
||
#define AR10XX_I2C_SUPPORT (1)
|
||
#define AR10XX_UART_SUPPORT (0)
|
||
#define AR10XX_DEBUG (1)
|
||
#define AR10XX_ERR_CHECK (0)
|
||
#define AR10XX_VERIFY_ANSWER (1)
|
||
#define AR10XX_USE_IRQ (0)
|
||
#define AR10XX_COMPONENT (21) // Version of XX (10, 11, 20 , 21)
|
||
#endif
|
||
|
||
/*--------------
|
||
* XPT2046
|
||
*--------------*/
|
||
#define USE_XPT2046 0
|
||
#if USE_XPT2046 != 0
|
||
#define XPT2046_HOR_RES 480
|
||
#define XPT2046_VER_RES 320
|
||
#define XPT2046_X_MIN 200
|
||
#define XPT2046_Y_MIN 200
|
||
#define XPT2046_X_MAX 3800
|
||
#define XPT2046_Y_MAX 3800
|
||
#define XPT2046_AVG 4
|
||
#define XPT2046_INV 0
|
||
#endif
|
||
|
||
/*-----------------
|
||
* FT5406EE8
|
||
*-----------------*/
|
||
#define USE_FT5406EE8 0
|
||
#if USE_FT5406EE8
|
||
#define FT5406EE8_I2C_ADR 0x38 /*7 bit address*/
|
||
#endif
|
||
|
||
/*-------------------------------
|
||
* Mouse or touchpad on PC
|
||
*------------------------------*/
|
||
#define USE_MOUSE 0
|
||
#if USE_MOUSE
|
||
/*No settings*/
|
||
#endif
|
||
|
||
|
||
/*-------------------------------
|
||
* Keyboard of a PC
|
||
*------------------------------*/
|
||
#define USE_KEYBOARD 0
|
||
#if USE_KEYBOARD
|
||
/*No settings*/
|
||
#endif
|
||
|
||
#endif /*LV_DRV_CONF_H*/
|
||
|
||
#endif /*Remove this to enable the content*/
|