code wiki / (root) / nx_battery_safety_test.nx

nx_battery_safety_test.nx source

↩ module page · 60 lines · 2739 B

1// nx_battery_safety_test.nx -- smoke for nx_battery_safety. 2 3import "nx_syscalls.nx" 4import "nx_intent.nx" 5import "nx_battery_safety.nx" 6 7func main() -> i64 { 8 if NX_BC_N_KINDS != 5 { return 1 } 9 if nx_bc_kind_is_valid(NX_BC_CHARGE) != 1 { return 2 } 10 if nx_bc_kind_is_valid(5) != 0 { return 3 } 11 12 // Construct envelope: 2A max charge, 5A max discharge, 60C ceiling, 3.0-4.2V 13 let env: *NxBatterySafetyEnvelope = nx_battery_safety_envelope_new( 14 1, 2000, 5000, 60000, 3000, 4200) 15 let log: *NxBatteryCommandLog = nx_battery_command_log_new(8) 16 17 // Within-envelope charge -- OK 18 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 19 NX_BC_CHARGE, 1500, 3700, log, 1000) != NX_BS_OK { return 4 } 20 21 // Over rate ceiling -- REFUSED 22 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 23 NX_BC_CHARGE, 3000, 3700, log, 2000) != NX_BS_REFUSED_RATE_CEILING { return 5 } 24 25 // Over discharge ceiling 26 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 27 NX_BC_DISCHARGE, 6000, 3700, log, 3000) != NX_BS_REFUSED_RATE_CEILING { return 6 } 28 29 // Voltage envelope violation 30 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 31 NX_BC_CHARGE, 1000, 4500, log, 4000) != NX_BS_REFUSED_VOLTAGE_CEILING { return 7 } 32 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 33 NX_BC_CHARGE, 1000, 2500, log, 4100) != NX_BS_REFUSED_VOLTAGE_CEILING { return 8 } 34 35 // Bad intent for offensive-pattern op 36 if nx_battery_validate_command(env, NX_INTENT_CREATIVE, 37 NX_BC_CHARGE, 1000, 3700, log, 5000) != NX_BS_REFUSED_BAD_INTENT { return 9 } 38 39 // Thermal-runaway pattern: 3 rising thermal commands in window 40 nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 41 NX_BC_THERMAL_TARGET, 30000, 0, log, 6000) 42 nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 43 NX_BC_THERMAL_TARGET, 40000, 0, log, 6100) 44 nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 45 NX_BC_THERMAL_TARGET, 50000, 0, log, 6200) 46 // 4th rising-thermal within window -> REFUSED_THERMAL_RUNAWAY 47 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 48 NX_BC_THERMAL_TARGET, 55000, 0, log, 6300) != NX_BS_REFUSED_THERMAL_RUNAWAY { return 10 } 49 50 // Thermal ceiling (over max) refused 51 if nx_battery_validate_command(env, NX_INTENT_DEFENSIVE, 52 NX_BC_THERMAL_TARGET, 70000, 0, log, 9000) != NX_BS_REFUSED_THERMAL_CEILING { return 11 } 53 54 // Ceiling getters 55 if nx_battery_envelope_ceiling(env, NX_BC_CHARGE) != 2000 { return 12 } 56 if nx_battery_envelope_ceiling(env, NX_BC_DISCHARGE) != 5000 { return 13 } 57 if nx_battery_envelope_ceiling(env, NX_BC_THERMAL_TARGET) != 60000 { return 14 } 58 59 return 0 60}