@@ -63,46 +63,50 @@ class LoadFSM {
6363 // * -> sESTOP
6464 currentState = FSMCommon::States::sESTOP ;
6565
66- // TODO : Signal nacelle to ESTOP (setSafetyFlag)
66+ // DONE : Signal nacelle to ESTOP (setSafetyFlag)
6767 vTaskSuspend (load.tAdjustLoad .pxHandle );
68- load. setLoadGPIO ( 0b0000'0000 ); // todo: one inverted?
68+ // Don't adjust load
6969
7070 return UPDATE_RESULT ::STATE_CHANGED ;
7171 } else if ((currentState == FSMCommon::States::sESTOP ) &&
7272 (load.getSafetyFlag () != ESTOP_TYPE_FAST ::NONE )) {
73- // Nothing to do
73+ // sESTOP -> sESTOP: Nothing to do
7474 return UPDATE_RESULT ::NO_CHANGE ;
7575 } // else: ~safetyTask
7676
7777 // Check reset conditions
78- if ((currentState != FSMCommon::States:: sRST ) &&
79- !load. isPowerPositive ( )) {
78+ constexpr uint_fast16_t START_RUN_2_RPM = 500 ; // todo
79+ if ((currentState != FSMCommon::States:: sRST )) {
8080 // * -> sRST
8181 currentState = FSMCommon::States::sRST ;
8282
8383 // Signal Nacelle (unset safetyFlag)
8484 vTaskSuspend (load.tAdjustLoad .pxHandle );
85- load.setLoadGPIO (0b0000'0000 ); // todo: one inverted?
85+ /* *
86+ * @details None inverted, set to max for easiest cut in
87+ */
88+ load.setLoadGPIO (LOAD ::PINS_Msk);
8689
8790 return UPDATE_RESULT ::STATE_CHANGED ;
8891 } else if ((currentState == FSMCommon::States::sRST ) &&
89- ! load.isPowerPositive () ) {
90- // Nothing to do
92+ load.getRPM () <= START_RUN_2_RPM ) {
93+ // sRST -> sRST: Nothing to do
9194 return UPDATE_RESULT ::NO_CHANGE ;
92- } // else: producingPositivePower
95+ } // else: producingPositivePower or maybe just still starting up
9396
9497 // Check other transition conditions
95- if (currentState == FSMCommon::States::sRST ) {
96- // sRST -> sStartLoad
97- currentState = FSMCommon::States::sStartLoad ;
98+ if ((currentState == FSMCommon::States::sRST ) &&
99+ load.getRPM () > START_RUN_2_RPM ) {
100+ // sRST -> sStartRun
101+ currentState = FSMCommon::States::sStartRun ;
98102
99103 // Signal nacelle (set producingPositivePower)
100104 // Load is already off
101105
102106 return UPDATE_RESULT ::STATE_CHANGED ;
103- } else if ((currentState == FSMCommon::States::sStartLoad ) &&
107+ } else if ((currentState == FSMCommon::States::sStartRun ) &&
104108 load.isSteadyRPM ()) {
105- // sStartLoad -> sRunLoad
109+ // sStartRun -> sRunLoad
106110 // Note: The producing positive power condition is handled by the
107111 // reset logic
108112 currentState = FSMCommon::States::sRunLoad ;
@@ -119,7 +123,7 @@ class LoadFSM {
119123 currentState = FSMCommon::States::sCurtail ;
120124
121125 // Nacelle can detect this on it's own
122- // Load is already on
126+ vTaskSuspend (load. tAdjustLoad . pxHandle );
123127
124128 return UPDATE_RESULT ::STATE_CHANGED ;
125129 } else if ((currentState == FSMCommon::States::sCurtail ) &&
@@ -128,7 +132,7 @@ class LoadFSM {
128132 currentState = FSMCommon::States::sRunLoad ;
129133
130134 // Nacelle can detect this on it's own
131- // Load is already on
135+ vTaskResume (load. tAdjustLoad . pxHandle );
132136
133137 return UPDATE_RESULT ::STATE_CHANGED ;
134138 } else {
0 commit comments