// Execute the production power transition code with failing hardware/NVS doubles. const fs=require('fs'), path=require('path'); const root=path.resolve(__dirname,'..'); const json=path.join(process.env.IDF_PATH||'E:/Codex/toolchains/esp-idf-v5.5.1','components/json/cJSON'); const source=fs.readFileSync(path.join(root,'main/device_power.c'),'utf8').replace(/^#include[^\n]*\n/gm,''); process.stdout.write(fs.readFileSync(path.join(json,'cJSON.h'),'utf8')+'\n'+fs.readFileSync(path.join(json,'cJSON.c'),'utf8').replace('#include "cJSON.h"','')+` #include #include #include typedef int esp_err_t; typedef int nvs_handle_t; #define ESP_OK 0 #define ESP_FAIL -1 #define ESP_ERR_INVALID_ARG 1 #define ESP_ERR_INVALID_STATE 2 #define ESP_ERR_NVS_NOT_FOUND 3 #define NVS_READONLY 0 #define NVS_READWRITE 1 typedef struct {void *display_handle;} volc_hal_context_t; static volc_hal_context_t context={(void *)1}; static bool held,busy,standby,paused; static int brightness=80,stored=-1,staged=-1,commits,storage_error,audio_error,display_error; static bool call_client_enter_maintenance(void){if(held||busy)return false;held=true;return true;} static void call_client_leave_maintenance(void){held=false;} static int call_client_set_standby(bool value){if(busy)return ESP_ERR_INVALID_STATE;standby=value;return 0;} static bool call_client_standby(void){return standby;} static int audio_recorder_set_standby(bool value){if(audio_error)return -1;paused=value;return 0;} static bool audio_recorder_is_standby(void){return paused;} static uint32_t audio_recorder_microphone_reads(void){return 42;} static volc_hal_context_t *volc_get_global_hal_context(void){return &context;} static int volc_hal_display_get_brightness(void *display){return brightness;} static int volc_hal_display_set_brightness(void *display,int value){if(display_error)return -1;brightness=value;return 0;} static int nvs_open(const char *name,int mode,int *n){*n=1;return 0;} static int nvs_get_u8(int n,const char *key,uint8_t *value){if(stored<0)return ESP_ERR_NVS_NOT_FOUND;*value=stored;return 0;} static int nvs_set_u8(int n,const char *key,uint8_t value){staged=value;return 0;} static int nvs_commit(int n){if(storage_error)return -1;stored=staged;commits++;return 0;} static void nvs_close(int n){} `+source+` static void expect_mode(const char *mode){cJSON *j=device_power_report();assert(!strcmp(cJSON_GetObjectItem(j,"mode")->valuestring,mode));cJSON_Delete(j);} int main(void){ assert(device_power_boot()==0);assert(!standby&&!paused);expect_mode("active"); busy=true;assert(device_power_apply("standby",false)!=0);assert(!standby&&!paused&&brightness==80&&commits==0);busy=false; assert(device_power_apply("off",false)!=0); assert(device_power_apply("standby",false)==0);assert(standby&&paused&&brightness==0&&stored==1&&!held);expect_mode("standby"); int previous=commits;assert(device_power_apply("standby",false)==0);assert(commits==previous); held=true;assert(device_power_apply("active",true)==0);assert(held&&!standby&&!paused&&brightness==80&&stored==0);held=false; display_error=1;assert(device_power_apply("standby",false)!=0);expect_mode("transition");assert(stored==0&&!held);display_error=0; assert(device_power_apply("active",false)==0); audio_error=1;assert(device_power_apply("standby",false)!=0);assert(stored==0&&!held);audio_error=0; storage_error=1;assert(device_power_apply("standby",false)!=0);expect_mode("standby");assert(stored==0&&!held);storage_error=0; assert(device_power_apply("standby",false)==0);assert(stored==1); standby=paused=false;brightness=80;assert(device_power_boot()==0);expect_mode("standby"); assert(device_power_apply("active",false)==0);expect_mode("active"); puts("PASS power transitions: busy exclusion, real state, failure paths, persistent standby, default wake and no repeated flash writes"); } `);