diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h index 842714028be6bdf0a9a86b31a052fbcf7fa1ec22..cf803cdf7b27b9e8931260a766d4435ec8126776 100644 --- a/epicardium/epicardium.h +++ b/epicardium/epicardium.h @@ -33,6 +33,7 @@ typedef _Bool bool; #define API_SYSTEM_EXEC 0x2 #define API_SYSTEM_RESET 0x3 #define API_BATTERY_VOLTAGE 0x4 +#define API_HARDWARE_RESET 0x5 #define API_INTERRUPT_ENABLE 0xA #define API_INTERRUPT_DISABLE 0xB @@ -300,6 +301,13 @@ API(API_SYSTEM_EXEC, int __epic_exec(char *name)); */ API(API_SYSTEM_RESET, void epic_system_reset(void)); +/** + * Brings peripherals and hardware back into a sane state (LEDs off, + * display on, sensors off, vibration motor off, BLE not bonding, + * BLE not scanning, files of core 1 closed). + */ +API(API_HARDWARE_RESET, int epic_hardware_reset(void)); + /** * PMIC API * =============== diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c index 055ae486b391ca0b46b6737689141e1ea175014b..6f30993ac7cace4cb85d16480ba223f28e1e3364 100644 --- a/epicardium/modules/hardware.c +++ b/epicardium/modules/hardware.c @@ -218,13 +218,13 @@ int hardware_init(void) } /* - * hardware_reset() is called whenever a new l0dable is started. hardware_reset() + * epic_hardware_reset() is called whenever a new l0dable is started. epic_hardware_reset() * should bring all peripherals back into a known initial state. This does not - * necessarily mean resetting the peripheral entirely but hardware_reset() + * necessarily mean resetting the peripheral entirely but epic_hardware_reset() * should at least bring the API facing part of a peripheral back into the state * a fresh booted l0dable expects. */ -int hardware_reset(void) +int epic_hardware_reset(void) { /* * API Dispatcher & API Interrupts diff --git a/epicardium/modules/lifecycle.c b/epicardium/modules/lifecycle.c index 76c5648cc20120eca6de28fad2ed4329404943da..9fe6b7ae66c45992e8aac32c194f0d38004c1a75 100644 --- a/epicardium/modules/lifecycle.c +++ b/epicardium/modules/lifecycle.c @@ -113,7 +113,7 @@ static int do_load(struct load_info *info) /* * Reinitialize Hardware & Drivers */ - res = hardware_reset(); + res = epic_hardware_reset(); if (res < 0) { goto out_free_api; } diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h index 14184bd9ca96b367ebcf57a7d8b7739a407df817..8ac21b880413dbea8d5a9900d3146b9b21ae03e3 100644 --- a/epicardium/modules/modules.h +++ b/epicardium/modules/modules.h @@ -19,10 +19,9 @@ void dispatcher_mutex_init(void); extern struct mutex api_mutex; extern TaskHandle_t dispatcher_task_id; -/* ---------- Hardware Init & Reset ---------------------------------------- */ +/* ---------- Hardware Init ------------------------------------------------ */ int hardware_early_init(void); int hardware_init(void); -int hardware_reset(void); /* ---------- Lifecycle ---------------------------------------------------- */ void vLifecycleTask(void *pvParameters); diff --git a/pycardium/main.c b/pycardium/main.c index 3aec04919f1cbe3b6858f07697878897424ede7b..ce5ae4b4c7a9379e0f6517caf910aa3337a96298 100644 --- a/pycardium/main.c +++ b/pycardium/main.c @@ -65,6 +65,7 @@ int main(void) } epic_uart_write_str(header, sizeof(header)); + epic_hardware_reset(); for (;;) { if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {