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

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

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

@ -3,8 +3,10 @@
# SPDX-License-Identifier: GPL-3.0-only # SPDX-License-Identifier: GPL-3.0-only
idf_component_register( 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" INCLUDE_DIRS "include"
REQUIRES "drivers" "lvgl" "tinyfsm" "events" "system_fsm" "database" 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}) target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS})

@ -18,6 +18,7 @@
#include "lua.hpp" #include "lua.hpp"
#include "lua_database.hpp" #include "lua_database.hpp"
#include "lua_queue.hpp" #include "lua_queue.hpp"
#include "lua_version.hpp"
#include "lvgl.h" #include "lvgl.h"
#include "event_queue.hpp" #include "event_queue.hpp"
@ -74,6 +75,7 @@ Bridge::Bridge(system_fsm::ServiceLocator& services, lua_State& s)
RegisterDatabaseModule(&s); RegisterDatabaseModule(&s);
RegisterQueueModule(&s); RegisterQueueModule(&s);
RegisterVersionModule(&s);
} }
static auto new_property_module(lua_State* state) -> int { 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" "screen_lua.cpp"
"splash.c" "font_fusion_12.c" "font_fusion_10.c" "splash.c" "font_fusion_12.c" "font_fusion_10.c"
INCLUDE_DIRS "include" 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}) target_compile_options(${COMPONENT_LIB} PRIVATE ${EXTRA_WARNINGS})

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

@ -15,6 +15,7 @@
#include "core/lv_obj.h" #include "core/lv_obj.h"
#include "core/lv_obj_tree.h" #include "core/lv_obj_tree.h"
#include "display.hpp" #include "display.hpp"
#include "esp_app_desc.h"
#include "esp_log.h" #include "esp_log.h"
#include "core/lv_group.h" #include "core/lv_group.h"
@ -32,6 +33,7 @@
#include "misc/lv_area.h" #include "misc/lv_area.h"
#include "model_top_bar.hpp" #include "model_top_bar.hpp"
#include "nvs.hpp" #include "nvs.hpp"
#include "samd.hpp"
#include "screen.hpp" #include "screen.hpp"
#include "themes.hpp" #include "themes.hpp"
#include "ui_events.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") { : MenuScreen(bar, "Firmware Update") {
lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, lv_obj_set_flex_align(content_, LV_FLEX_ALIGN_CENTER, 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_t* spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 4); lv_obj_set_size(spacer, 1, 4);
@ -549,7 +552,8 @@ FirmwareUpdate::FirmwareUpdate(models::TopBar& bar)
spacer = lv_obj_create(content_); spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 8); 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_); spacer = lv_obj_create(content_);
lv_obj_set_size(spacer, 1, 4); lv_obj_set_size(spacer, 1, 4);

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

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

Loading…
Cancel
Save