/********************************************************************** * Function: Override_init * @return None * @remark Initializes the override board and the interrupt to detect * when the receiver comes online. * @author Darrel Deo * @date 2013.04.01 **********************************************************************/ void Override_init() { // Initialize override board pins to give Micro control ENABLE_OUT_TRIS = OUTPUT; // Set pin to be an output (fed to the AND gates) ENABLE_OUT_LAT = MICRO_HAS_CONTROL; // Initialize control for Microcontroller // Let override timer expire to disable override Timer_new(TIMER_OVERRIDE, 1); while (Override_isTriggered()) { asm("nop"); } //Enable the interrupt for the override feature mPORTBSetPinsDigitalIn(BIT_0); // CN2 mCNOpen(CN_ON | CN_IDLE_CON , CN2_ENABLE , CN_PULLUP_DISABLE_ALL); uint16_t value = mPORTDRead(); //? ConfigIntCN(CHANGE_INT_ON | CHANGE_INT_PRI_2); //CN2 J5-15 //DBPRINT("Override Function has been Initialized\n"); Override_giveMicroControl(); INTEnable(INT_CN,1); }
int main(void) { // Initialize the UART, Timers, and I2C Board_init(); Serial_init(); Timer_init(); Override_init(); printf("Override board initialized.\n"); while(1){ if (inOverride && !Override_isTriggered()) { inOverride = FALSE; printf("Override disabled.\n"); } else if (!inOverride && Override_isTriggered()) { inOverride = TRUE; printf("Override enabled.\n"); } } return (SUCCESS); }
/********************************************************************** * Function: checkEvents * @return None * @remark Checks for various events that can occur, and sets the * appropriate flags for handling later. **********************************************************************/ static void checkEvents() { // Clear all event flags int i; for (i=0; i < EVENT_BYTE_SIZE; i++) event.bytes[i] = 0x0; // Navigation events if (Navigation_isDone()) event.flags.navigationDone = TRUE; if (Navigation_hasError()) setError(Navigation_getError()); // Override if (Override_isTriggered()) event.flags.receiverDetected = TRUE; // XBee messages (from command center) if (Mavlink_hasNewMessage()) { lastMavlinkMessageID = Mavlink_getNewMessageID(); lastMavlinkCommandID = MAVLINK_NO_COMMAND; lastMavlinkMessageWantsAck = FALSE; switch (lastMavlinkMessageID) { // -------------------------- Acknowledgements ------------------------ case MAVLINK_MSG_ID_MAVLINK_ACK: // No ACKS from ComPAS to AtLAs break; // ------------------------------ Messages ---------------------------- case MAVLINK_MSG_ID_CMD_OTHER: lastMavlinkMessageWantsAck = Mavlink_newMessage.commandOtherData.ack; if (Mavlink_newMessage.commandOtherData.command == MAVLINK_RESET_BOAT ) { event.flags.haveResetMessage = TRUE; lastMavlinkCommandID = MAVLINK_RESET_BOAT ; } else if (Mavlink_newMessage.commandOtherData.command == MAVLINK_RETURN_STATION) { event.flags.haveReturnStationMessage = TRUE; overrideShutdown = FALSE; lastMavlinkCommandID = MAVLINK_RETURN_STATION; } else if (Mavlink_newMessage.commandOtherData.command == MAVLINK_SAVE_STATION) { event.flags.haveSetStationMessage = TRUE; wantSaveStation = TRUE; lastMavlinkCommandID = MAVLINK_SAVE_STATION; } else if (Mavlink_newMessage.commandOtherData.command == MAVLINK_GEOCENTRIC_ORIGIN) { event.flags.haveSetOriginMessage = TRUE; lastMavlinkCommandID = MAVLINK_GEOCENTRIC_ORIGIN; } else if (Mavlink_newMessage.commandOtherData.command == MAVLINK_OVERRIDE) { event.flags.haveOverrideMessage = TRUE; overrideShutdown = TRUE; lastMavlinkCommandID = MAVLINK_OVERRIDE; } break; case MAVLINK_MSG_ID_GPS_ECEF: lastMavlinkMessageWantsAck = Mavlink_newMessage.gpsGeocentricData.ack; if (Mavlink_newMessage.gpsGeocentricData.status == MAVLINK_GEOCENTRIC_ORIGIN) { event.flags.haveSetOriginMessage = TRUE; lastMavlinkCommandID = MAVLINK_GEOCENTRIC_ORIGIN; } else if (Mavlink_newMessage.gpsGeocentricData.status == MAVLINK_GEOCENTRIC_ERROR) event.flags.haveGeocentricErrorMessage = TRUE; break; case MAVLINK_MSG_ID_GPS_NED: lastMavlinkMessageWantsAck = Mavlink_newMessage.gpsLocalData.ack; if (Mavlink_newMessage.gpsLocalData.status == MAVLINK_LOCAL_SET_STATION) { event.flags.haveSetStationMessage = TRUE; lastMavlinkCommandID = MAVLINK_LOCAL_SET_STATION; wantSaveStation = FALSE; } else if (Mavlink_newMessage.gpsLocalData.status == MAVLINK_LOCAL_START_RESCUE) { event.flags.haveStartRescueMessage = TRUE; lastMavlinkCommandID = MAVLINK_LOCAL_START_RESCUE; } break; default: // Unknown message ID event.flags.haveUnknownMessage = TRUE; DBPRINT("Mavlink received unhandled message: 0x%X\n"); break; } } /* If the receiver is off, boat is not stopped, and we either have a station or are setting one, then turn override off */ if (!event.flags.receiverDetected && !overrideShutdown && (haveStation || (state == STATE_SETSTATION))) { event.flags.wantOverride = FALSE; } else { event.flags.wantOverride = TRUE; } } // checkEvents()