static void key(GLFWwindow* window, int key, int scancode, int action, int mods) { (void)scancode; (void)mods; if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) glfwSetWindowShouldClose(window, GL_TRUE); if (key == GLFW_KEY_E && action == GLFW_PRESS) expandAtlas(fs); if (key == GLFW_KEY_R && action == GLFW_PRESS) { resetAtlas(fs); } if (key == 265 && action == GLFW_PRESS) { size += 10; } if (key == 264 && action == GLFW_PRESS) { size -= 10; if (size < 20) size = 20; } }
/********************************************************************** * Function: doMasterSM * @return None. * @remark Executes one cycle of the boat's master state machine. * @author David Goodman * @date 2013.03.28 **********************************************************************/ static void doMasterSM() { checkEvents(); #ifdef USE_TILTCOMPASS TiltCompass_runSM(); #endif #ifdef USE_GPS GPS_runSM(); #endif #ifdef USE_NAVIGATION Navigation_runSM(); #ifdef USE_ERROR_CORRECTION gpsCorrectionUpdate(); #endif #endif #ifdef USE_DRIVE Drive_runSM(); #endif #ifdef USE_XBEE Xbee_runSM(); #endif #ifdef USE_BAROMETER Barometer_runSM(); doBarometerUpdate(); // send barometer data #endif switch (state) { case STATE_SETSTATION: doSetStationSM(); if (event.flags.haveStartRescueMessage) { startRescueSM(); } else if (event.flags.setStationDone) { if (haveOrigin) startStationKeepSM(); else startOverrideSM(); } break; case STATE_SETORIGIN: doSetOriginSM(); if (event.flags.setOriginDone) startOverrideSM(); break; case STATE_STATIONKEEP: doStationKeepSM(); if (event.flags.haveStartRescueMessage) startRescueSM(); else if (!haveStation) setError(ERROR_NO_STATION); break; case STATE_OVERRIDE: if (!wantOverride) { //setError(ERROR_NO_ORIGIN); if (!haveOrigin) startSetOriginSM(); // do we ant infinite startup loop? else if (event.flags.haveStartRescueMessage) startRescueSM(); else if (event.flags.haveSetStationMessage ) startSetStationSM(); else if (haveOrigin && haveStation) startStationKeepSM(); // Use autonomous controls if (haveOrigin && (haveStation || event.flags.haveStartRescueMessage)) { Override_giveMicroControl(); DBPRINT("Micro has control.\n"); #ifdef USE_SIREN Siren_blueLightOff(); #endif } } break; case STATE_RESCUE: doRescueSM(); if (event.flags.haveStartRescueMessage) { startRescueSM(); } else if (event.flags.haveReturnStationMessage) { if (haveStation) startStationKeepSM(); else setError(ERROR_NO_STATION); } // Turn off rescue siren (red) if (event.flags.haveError || state != STATE_RESCUE) { #ifdef USE_SIREN Siren_redLightOff(); #endif } break; } // ------- Caught by most states ----------- if (state != STATE_RESCUE) { if (event.flags.haveSetStationMessage) startSetStationSM(); } if (state != STATE_OVERRIDE) { if (event.flags.haveError) { startOverrideSM(); overrideShutdown = TRUE; } if (wantOverride) startOverrideSM(); } if (event.flags.haveResetMessage) resetAtlas(); }