77 lines
2.0 KiB
C
77 lines
2.0 KiB
C
#include <inttypes.h>
|
|
|
|
#include "sdkconfig.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
#include "esp_err.h"
|
|
#include "esp_log.h"
|
|
#include "esp_mac.h"
|
|
#include "esp_lcd_panel_ops.h"
|
|
#include "driver/i2c_master.h"
|
|
|
|
#include "lvgl.h"
|
|
|
|
#include "common.h"
|
|
#include "usb.h"
|
|
#include "lcd.h"
|
|
#include "ui.h"
|
|
|
|
static const char *TAG = "valconomy";
|
|
|
|
char val_dev_serial[13];
|
|
|
|
i2c_master_bus_handle_t i2c_bus_handle;
|
|
i2c_master_dev_handle_t exio_cfg_handle, exio_o_handle;
|
|
|
|
static void val_i2c_master_init(void) {
|
|
ESP_LOGI(TAG, "Init I2C");
|
|
i2c_master_bus_config_t i2c_mst_config = {
|
|
.clk_source = I2C_CLK_SRC_DEFAULT,
|
|
.i2c_port = I2C_NUM_0,
|
|
.scl_io_num = 9,
|
|
.sda_io_num = 8,
|
|
.glitch_ignore_cnt = 7,
|
|
.flags.enable_internal_pullup = true,
|
|
};
|
|
|
|
ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_mst_config, &i2c_bus_handle));
|
|
|
|
i2c_device_config_t exio_dev_cfg = {
|
|
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
|
|
.device_address = 0x24, // CH422G config register
|
|
.scl_speed_hz = SCL_SPEED,
|
|
};
|
|
|
|
ESP_ERROR_CHECK(i2c_master_bus_add_device(i2c_bus_handle, &exio_dev_cfg, &exio_cfg_handle));
|
|
exio_dev_cfg.device_address = 0x38;
|
|
ESP_ERROR_CHECK(i2c_master_bus_add_device(i2c_bus_handle, &exio_dev_cfg, &exio_o_handle));
|
|
}
|
|
|
|
void app_main(void) {
|
|
// Use MAC address for serial number
|
|
uint8_t mac[6] = { 0 };
|
|
ESP_ERROR_CHECK(esp_read_mac(mac, ESP_MAC_EFUSE_FACTORY));
|
|
snprintf(
|
|
val_dev_serial, sizeof(val_dev_serial),
|
|
"%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
|
|
|
|
val_i2c_master_init();
|
|
|
|
val_usb_init();
|
|
|
|
esp_lcd_panel_handle_t lcd_panel = val_setup_lcd();
|
|
assert(lcd_panel);
|
|
esp_lcd_touch_handle_t touch_panel = val_setup_touch();
|
|
assert(touch_panel);
|
|
|
|
lv_display_t *display = val_setup_lvgl(lcd_panel, touch_panel);
|
|
assert(display);
|
|
|
|
ESP_LOGI(TAG, "Display LVGL UI");
|
|
// Lock the mutex due to the LVGL APIs are not thread-safe
|
|
assert(val_lvgl_lock(-1));
|
|
val_lvgl_ui(display);
|
|
val_lvgl_unlock();
|
|
}
|