From 9a7ef3937cf2235250b56d267c86b9764ad12a1a Mon Sep 17 00:00:00 2001
From: moon2 <moon2protonmail@protonmail.com>
Date: Thu, 25 May 2023 02:47:03 +0200
Subject: [PATCH] faster boot into payload

---
 components/badge23/espan.c                 | 9 ++++++++-
 components/badge23/include/badge23/espan.h | 2 ++
 python_payload/main.py                     | 4 +++-
 usermodule/mp_hardware.c                   | 7 +++++++
 4 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/components/badge23/espan.c b/components/badge23/espan.c
index b59346e24d..f8ba3fd9b8 100644
--- a/components/badge23/espan.c
+++ b/components/badge23/espan.c
@@ -52,6 +52,7 @@ static esp_err_t i2c_master_init(void)
 }
 
 #define CAPTOUCH_POLLING_PERIOD 10
+static uint8_t hw_init_done = 0;
 
 void os_app_main(void)
 {
@@ -65,10 +66,11 @@ void os_app_main(void)
     init_buttons();
     captouch_init();
 
-    vTaskDelay(2000 / portTICK_PERIOD_MS);
+    //vTaskDelay(2000 / portTICK_PERIOD_MS);
     set_global_vol_dB(0);
 
     display_init();
+    hw_init_done = 1;
     while(1) {
         manual_captouch_readout(1);
         vTaskDelay((CAPTOUCH_POLLING_PERIOD) / portTICK_PERIOD_MS);
@@ -82,3 +84,8 @@ void os_app_main(void)
     ESP_ERROR_CHECK(i2c_driver_delete(I2C_MASTER_NUM));
     ESP_LOGI(TAG, "I2C de-initialized successfully");
 }
+
+uint8_t hardware_is_initialized(){
+    return hw_init_done;
+}
+
diff --git a/components/badge23/include/badge23/espan.h b/components/badge23/include/badge23/espan.h
index 2f40b8ab76..7915f33e09 100644
--- a/components/badge23/include/badge23/espan.h
+++ b/components/badge23/include/badge23/espan.h
@@ -1,2 +1,4 @@
 #pragma once
+#include <stdint.h>
 void os_app_main(void);
+uint8_t hardware_is_initialized(void);
diff --git a/python_payload/main.py b/python_payload/main.py
index 1bbeed1cff..571cdf042f 100644
--- a/python_payload/main.py
+++ b/python_payload/main.py
@@ -73,7 +73,9 @@ def set_rel_volume(vol):
 
 def main():
     global CURRENT_APP_RUN
-    time.sleep_ms(5000)
+    while not init_done():
+        pass
+
     captouch_autocalib()
 
     for module in MODULES:
diff --git a/usermodule/mp_hardware.c b/usermodule/mp_hardware.c
index 36ecb91ea3..70522b900b 100644
--- a/usermodule/mp_hardware.c
+++ b/usermodule/mp_hardware.c
@@ -16,8 +16,14 @@
 #include "badge23/captouch.h"
 #include "badge23/display.h"
 #include "badge23/spio.h"
+#include "badge23/espan.h"
 #include "badge23_hwconfig.h"
 
+STATIC mp_obj_t mp_init_done(size_t n_args, const mp_obj_t *args) {
+    return mp_obj_new_int(hardware_is_initialized());
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_init_done_obj, 0, 1, mp_init_done);
+
 STATIC mp_obj_t mp_display_update(size_t n_args, const mp_obj_t *args) {
     display_update();
     return mp_const_none;
@@ -128,6 +134,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_version_obj, mp_version);
 
 STATIC const mp_rom_map_elem_t mp_module_hardware_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_badge_audio) },
+    { MP_ROM_QSTR(MP_QSTR_init_done), MP_ROM_PTR(&mp_init_done_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_captouch), MP_ROM_PTR(&mp_get_captouch_obj) },
     { MP_ROM_QSTR(MP_QSTR_captouch_autocalib), MP_ROM_PTR(&mp_captouch_autocalib_obj) },
     { MP_ROM_QSTR(MP_QSTR_get_button), MP_ROM_PTR(&mp_get_button_obj) },
-- 
GitLab