AnasSarkiz/rp2040-usb-c-single-axis-dm542t-motion-controller--01a0e89c

A USB‑C RP2040 controller board with external QSPI flash, crystal clock, regulated 3.3/1.1/5 V power, boost-converted motor-driver supply, protected USB and limit inputs, status LEDs, reset/boot switches, and AO3400A MOSFET outputs for stepper-control signals.

Version
0.1.0-prototype.19
License
unset
Stars
0

firmware/test_power_policy.c

#include "power_policy.h"
#include <assert.h>
#include <stdio.h>
#include <stdint.h>
int main(void) {
    PowerPolicy power = {0};
    PowerInputs inputs = {false,false,true,false,0};
    power_policy_update(&power, inputs);
    assert(!power.switch_on && !power.regulator_on && !power.ready);
    inputs.mounted=true;
    power_policy_update(&power, inputs);
    assert(power.switch_on && !power.regulator_on && !power.ready);
    inputs.milliseconds=19; power_policy_update(&power, inputs);
    assert(!power.regulator_on && !power.ready);
    inputs.milliseconds=20; power_policy_update(&power, inputs);
    assert(power.regulator_on && !power.ready);
    inputs.milliseconds=40; power_policy_update(&power, inputs);
    assert(power.ready);
    inputs.suspended=true; power_policy_update(&power, inputs);
    assert(!power.switch_on && !power.regulator_on && !power.ready);
    inputs.suspended=false; inputs.milliseconds=1000;
    power_policy_update(&power, inputs);
    assert(power.switch_on && !power.regulator_on && !power.ready);
    inputs.milliseconds=1040; power_policy_update(&power, inputs); assert(power.ready);
    inputs.supply_ok=false; power_policy_update(&power, inputs); assert(!power.switch_on && !power.ready);
    inputs.supply_ok=true; inputs.milliseconds=UINT32_MAX-10; power_policy_update(&power, inputs);
    inputs.milliseconds=29; power_policy_update(&power, inputs); assert(power.ready);
    inputs.mounted=false; power_policy_update(&power, inputs);
    assert(!power.switch_on && !power.regulator_on && !power.ready);
    inputs.mounted=true; inputs.milliseconds=100; power_policy_update(&power, inputs);
    inputs.milliseconds=140; inputs.overcurrent=true; power_policy_update(&power, inputs);
    assert(power.fault_latched && !power.ready && !power.switch_on && !power.regulator_on);
    inputs.overcurrent=false; inputs.milliseconds=300; power_policy_update(&power, inputs);
    assert(power.fault_latched && !power.switch_on);
    inputs.suspended=true; power_policy_update(&power, inputs);
    inputs.suspended=false; power_policy_update(&power, inputs);
    assert(power.fault_latched && !power.switch_on);
    inputs.mounted=false; power_policy_update(&power, inputs); assert(!power.fault_latched);
    inputs.mounted=true; power_policy_update(&power, inputs); assert(power.switch_on && !power.ready);
    inputs.milliseconds=340; power_policy_update(&power, inputs); assert(power.ready);
    inputs.overcurrent=true; power_policy_update(&power, inputs); assert(power.fault_latched && !power.ready);
    puts("PASS: overload latch through suspend until USB unmount,  pre-enumeration off, staged startup, suspend, resume restart, undervoltage, timer wrap, USB reset/unmount");
}