@@ -319,9 +319,111 @@ void ButtonCheckTask(void *e)
319319 } // End Platform = RTK Express
320320 else if (productVariant == RTK_FACET) // Check one momentary button
321321 {
322- Serial.println (" WIP" );
323- delay (500 );
324- } // End Platform = RTK Facet
322+ if (powerBtn != NULL ) powerBtn->read ();
323+
324+ if (systemState == STATE_SHUTDOWN)
325+ {
326+ // Ignore button presses while shutting down
327+ }
328+ else if (powerBtn != NULL && powerBtn->pressedFor (shutDownButtonTime))
329+ {
330+ forceSystemStateUpdate = true ;
331+ requestChangeState (STATE_SHUTDOWN);
332+ }
333+ // else if ((setupBtn != NULL && setupBtn->pressedFor(500)) &&
334+ // (powerBtn != NULL && powerBtn->pressedFor(500)))
335+ // {
336+ // forceSystemStateUpdate = true;
337+ // requestChangeState(STATE_TEST);
338+ // }
339+ else if (powerBtn != NULL && powerBtn->wasReleased ())
340+ {
341+ switch (systemState)
342+ {
343+ // If we are in any running state, change to STATE_DISPLAY_SETUP
344+ case STATE_ROVER_NOT_STARTED:
345+ case STATE_ROVER_NO_FIX:
346+ case STATE_ROVER_FIX:
347+ case STATE_ROVER_RTK_FLOAT:
348+ case STATE_ROVER_RTK_FIX:
349+ case STATE_BASE_NOT_STARTED:
350+ case STATE_BASE_TEMP_SETTLE:
351+ case STATE_BASE_TEMP_SURVEY_STARTED:
352+ case STATE_BASE_TEMP_TRANSMITTING:
353+ case STATE_BASE_TEMP_WIFI_STARTED:
354+ case STATE_BASE_TEMP_WIFI_CONNECTED:
355+ case STATE_BASE_TEMP_CASTER_STARTED:
356+ case STATE_BASE_TEMP_CASTER_CONNECTED:
357+ case STATE_BASE_FIXED_NOT_STARTED:
358+ case STATE_BASE_FIXED_TRANSMITTING:
359+ case STATE_BASE_FIXED_WIFI_STARTED:
360+ case STATE_BASE_FIXED_WIFI_CONNECTED:
361+ case STATE_BASE_FIXED_CASTER_STARTED:
362+ case STATE_BASE_FIXED_CASTER_CONNECTED:
363+ case STATE_BUBBLE_LEVEL:
364+ case STATE_WIFI_CONFIG_NOT_STARTED:
365+ case STATE_WIFI_CONFIG:
366+ lastSystemState = systemState; // Remember this state to return after we mark an event
367+ requestChangeState (STATE_DISPLAY_SETUP);
368+ setupState = STATE_MARK_EVENT;
369+ lastSetupMenuChange = millis ();
370+ break ;
371+
372+ case STATE_MARK_EVENT:
373+ // If the user presses the setup button during a mark event, do nothing
374+ // Allow system to return to lastSystemState
375+ break ;
376+
377+ case STATE_TEST:
378+ // Do nothing. User is releasing the setup button.
379+ break ;
380+
381+ case STATE_TESTING:
382+ // If we are in testing, return to Rover Not Started
383+ requestChangeState (STATE_ROVER_NOT_STARTED);
384+ break ;
385+
386+ case STATE_DISPLAY_SETUP:
387+ // If we are displaying the setup menu, cycle through possible system states
388+ // Exit display setup and enter new system state after ~1500ms in updateSystemState()
389+ lastSetupMenuChange = millis ();
390+
391+ forceDisplayUpdate = true ; // User is interacting so repaint display quickly
392+
393+ switch (setupState)
394+ {
395+ case STATE_MARK_EVENT:
396+ setupState = STATE_ROVER_NOT_STARTED;
397+ break ;
398+ case STATE_ROVER_NOT_STARTED:
399+ // If F9R, skip base state
400+ if (zedModuleType == PLATFORM_F9R)
401+ setupState = STATE_BUBBLE_LEVEL;
402+ else
403+ setupState = STATE_BASE_NOT_STARTED;
404+ break ;
405+ case STATE_BASE_NOT_STARTED:
406+ setupState = STATE_BUBBLE_LEVEL;
407+ break ;
408+ case STATE_BUBBLE_LEVEL:
409+ setupState = STATE_WIFI_CONFIG_NOT_STARTED;
410+ break ;
411+ case STATE_WIFI_CONFIG_NOT_STARTED:
412+ setupState = STATE_MARK_EVENT;
413+ break ;
414+ default :
415+ Serial.printf (" ButtonCheckTask unknown setup state: %d\n\r " , setupState);
416+ setupState = STATE_MARK_EVENT;
417+ break ;
418+ }
419+ break ;
420+
421+ default :
422+ Serial.printf (" ButtonCheckTask unknown system state: %d\n\r " , systemState);
423+ requestChangeState (STATE_ROVER_NOT_STARTED);
424+ break ;
425+ }
426+ } } // End Platform = RTK Facet
325427
326428 taskYIELD ();
327429 }
0 commit comments