add accurate esp and samd versions + expose this info to lua

custom
jacqueline 1 year ago
parent 1b2d791a05
commit 55bde70b96
  1. 2
      CMakeLists.txt
  2. 5
      src/drivers/include/samd.hpp
  3. 10
      src/drivers/samd.cpp
  4. 6
      src/lua/CMakeLists.txt
  5. 2
      src/lua/bridge.cpp
  6. 15
      src/lua/include/lua_version.hpp
  7. 51
      src/lua/lua_version.cpp
  8. 2
      src/ui/CMakeLists.txt
  9. 3
      src/ui/include/screen_settings.hpp
  10. 10
      src/ui/screen_settings.cpp
  11. 3
      src/ui/ui_fsm.cpp
  12. 2
      tools/cmake/common.cmake

@ -1,8 +1,8 @@
# Copyright 2023 jacqueline <me@jacqueline.id.au>
#
# SPDX-License-Identifier: GPL-3.0-only
cmake_minimum_required(VERSION 3.16)
include($ENV{PROJ_PATH}/tools/cmake/common.cmake)
set(SDKCONFIG_DEFAULTS "sdkconfig.common")

@ -6,7 +6,9 @@
#pragma once
#include <stdint.h>
#include <optional>
#include <string>
#include "freertos/FreeRTOS.h"
#include "freertos/semphr.h"
@ -20,6 +22,8 @@ class Samd {
Samd();
~Samd();
auto Version() -> std::string;
enum class ChargeStatus {
// There is no battery plugged into the device.
kNoBattery,
@ -63,6 +67,7 @@ class Samd {
Samd& operator=(const Samd&) = delete;
private:
uint8_t version_;
std::optional<ChargeStatus> charge_status_;
UsbStatus usb_status_;
};

@ -8,6 +8,7 @@
#include <cstdint>
#include <optional>
#include <string>
#include "esp_err.h"
#include "esp_log.h"
@ -37,23 +38,26 @@ Samd::Samd() {
// Being able to interface with the SAMD properly is critical. To ensure we
// will be able to, we begin by checking the I2C protocol version is
// compatible, and throw if it's not.
uint8_t raw_res = 0;
I2CTransaction transaction;
transaction.start()
.write_addr(kAddress, I2C_MASTER_WRITE)
.write_ack(Registers::kSamdFirmwareVersion)
.start()
.write_addr(kAddress, I2C_MASTER_READ)
.read(&raw_res, I2C_MASTER_NACK)
.read(&version_, I2C_MASTER_NACK)
.stop();
ESP_ERROR_CHECK(transaction.Execute(1));
ESP_LOGI(kTag, "samd firmware rev: %u", raw_res);
ESP_LOGI(kTag, "samd firmware rev: %u", version_);
UpdateChargeStatus();
UpdateUsbStatus();
}
Samd::~Samd() {}
auto Samd::Version() -> std::string {
return std::to_string(version_);
}
auto Samd::GetChargeStatus() -> std::optional<ChargeStatus> {
return charge_status_;
}

@ -3,8 +3,10 @@
# SPDX-License-Identifier: GPL-3.0-only
idf_component_register(
SRCS "lua_thread.cpp" "bridge.cpp" "property.cpp" "lua_database.cpp" "lua_queue.cpp"
SRCS "lua_thread.cpp" "bridge.cpp" "property.cpp" "lua_database.cpp"
"lua_queue.cpp" "lua_version.cpp"
INCLUDE_DIRS "include"
REQUIRES "drivers" "lvgl" "tinyfsm" "events" "system_fsm" "database"
"esp_timer" "battery" "esp-idf-lua" "luavgl" "lua-linenoise" "lua-term")
"esp_timer" "battery" "esp-idf-lua" "luavgl" "lua-linenoise" "lua-term"
"esp_app_format")
target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS})

@ -18,6 +18,7 @@
#include "lua.hpp"
#include "lua_database.hpp"
#include "lua_queue.hpp"
#include "lua_version.hpp"
#include "lvgl.h"
#include "event_queue.hpp"
@ -74,6 +75,7 @@ Bridge::Bridge(system_fsm::ServiceLocator& services, lua_State& s)
RegisterDatabaseModule(&s);
RegisterQueueModule(&s);
RegisterVersionModule(&s);
}
static auto new_property_module(lua_State* state) -> int {

@ -0,0 +1,15 @@
/*
* Copyright 2023 jacqueline <me@jacqueline.id.au>
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#pragma once
#include "lua.hpp"
namespace lua {
auto RegisterVersionModule(lua_State*) -> void;
} // namespace lua

@ -0,0 +1,51 @@
/*
* Copyright 2023 jacqueline <me@jacqueline.id.au>
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#include "lua_version.hpp"
#include <string>
#include "bridge.hpp"
#include "lua.hpp"
#include "esp_app_desc.h"
#include "esp_log.h"
#include "lauxlib.h"
#include "lua.h"
#include "lua_thread.hpp"
namespace lua {
static auto esp(lua_State* L) -> int {
auto desc = esp_app_get_description();
lua_pushstring(L, desc->version);
return 1;
}
static auto samd(lua_State* L) -> int {
Bridge* instance = Bridge::Get(L);
auto& samd = instance->services().samd();
auto version = samd.Version();
lua_pushlstring(L, version.data(), version.size());
return 1;
}
static const struct luaL_Reg kVersionFuncs[] = {{"esp", esp},
{"samd", samd},
{NULL, NULL}};
static auto lua_version(lua_State* L) -> int {
luaL_newlib(L, kVersionFuncs);
return 1;
}
auto RegisterVersionModule(lua_State* L) -> void {
luaL_requiref(L, "version", lua_version, true);
lua_pop(L, 1);
}
} // namespace lua

@ -9,5 +9,5 @@ idf_component_register(
"screen_lua.cpp"
"splash.c" "font_fusion_12.c" "font_fusion_10.c"
INCLUDE_DIRS "include"
REQUIRES "drivers" "lvgl" "tinyfsm" "events" "system_fsm" "database" "esp_timer" "battery" "bindey" "lua" "luavgl")
REQUIRES "drivers" "lvgl" "tinyfsm" "events" "system_fsm" "database" "esp_timer" "battery" "bindey" "lua" "luavgl" "esp_app_format")
target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS})

@ -20,6 +20,7 @@
#include "model_top_bar.hpp"
#include "nvs.hpp"
#include "samd.hpp"
#include "screen.hpp"
namespace ui {
@ -103,7 +104,7 @@ class Storage : public MenuScreen {
class FirmwareUpdate : public MenuScreen {
public:
FirmwareUpdate(models::TopBar&);
FirmwareUpdate(models::TopBar&, drivers::Samd&);
};
class About : public MenuScreen {

@ -15,6 +15,7 @@
#include "core/lv_obj.h"
#include "core/lv_obj_tree.h"
#include "display.hpp"
#include "esp_app_desc.h"
#include "esp_log.h"
#include "core/lv_group.h"
@ -32,6 +33,7 @@
#include "misc/lv_area.h"
#include "model_top_bar.hpp"
#include "nvs.hpp"
#include "samd.hpp"
#include "screen.hpp"
#include "themes.hpp"
#include "ui_events.hpp"
@ -529,12 +531,13 @@ Storage::Storage(models::TopBar& bar) : MenuScreen(bar, "Storage") {
});
}
FirmwareUpdate::FirmwareUpdate(models::TopBar& bar)
FirmwareUpdate::FirmwareUpdate(models::TopBar& bar, drivers::Samd& samd)
: MenuScreen(bar, "Firmware Update") {
lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER,
LV_FLEX_ALIGN_CENTER);
label_pair(content_, "SAMD21 FW:", "vIDKLOL");
auto samd_ver = samd.Version();
label_pair(content_, "SAMD21 FW:", {samd_ver.data(), samd_ver.size()});
lv_obj_t* spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 4);
@ -549,7 +552,8 @@ FirmwareUpdate::FirmwareUpdate(models::TopBar& bar)
spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 8);
label_pair(content_, "ESP32 FW:", "vIDKLOL");
auto desc = esp_app_get_description();
label_pair(content_, "ESP32 FW:", desc->version);
spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 4);

@ -432,7 +432,8 @@ void Browse::react(const internal::ShowSettingsPage& ev) {
screen.reset(new screens::Storage(sTopBarModel));
break;
case internal::ShowSettingsPage::Page::kFirmwareUpdate:
screen.reset(new screens::FirmwareUpdate(sTopBarModel));
screen.reset(
new screens::FirmwareUpdate(sTopBarModel, sServices->samd()));
break;
case internal::ShowSettingsPage::Page::kAbout:
screen.reset(new screens::About(sTopBarModel));

@ -5,6 +5,8 @@
# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
set(PROJECT_VER "0.1.0")
# Build only the subset of components that we actually depend on.
set(COMPONENTS "")

Loading…
Cancel
Save