int main(int argc, char** argv) { //Initializations InitCLK(); InitGPIO(); InitDAC(); InitSPI(); InitTimer0(); InitWatchdog(); //Setup interrupts PEIE = 1; GIE = 1; SPI_CS = CS_IDLE; //must be changed! SSPCON1bits.SSPEN=0; // Disable SPI Port //PORTCbits.RC5 = 0; //Set MOSI low //PORTCbits.RC3 = 0; //Set SCK low PORTCbits.PORTC = LATCbits.LATC & 0xD7; //set MOSI and SCK low while(1) { SPI_CS = CS_IDLE; //hands off mode for testing the launcher //Check if beacon has been launched CheckDisconnect(); //DONE+TESTED if(playbackFlag&&!MEM_ACCESS) { PlaybackMode(); playbackFlag = 0; } //Transmit message if(transmitFlag) //DONE+TESTED TransmitMode(); //DONE+TESTED //Go back to sleep, wait for interrupts Hibernate(); } return (EXIT_SUCCESS); }
void Game::Run (void) { Event event; Timer timer; bool using_vsync = this->window->IsUsingVSYNC(); uint32 frame_cap = 1000 / this->settings.target_fps; debug::InitializeOverlay(); m_flags |= RUNNING; timer.Start(); while (m_flags & RUNNING) { uint32 frame_start = timer.Ticks(); if (m_sceneStack.empty()) { m_flags &= ~RUNNING; break; } // ref count must be increased b/c scene could be removed from the collection // during the loop execution auto current_scene = m_sceneStack.back(); while (PollEvent(&event)) { if (debug::ProcessOnEvent(event)) { // debug UI requesting events - suppress from scene continue; } if (!(this->on_event_hook && this->on_event_hook(event))) { current_scene->OnEvent(event); } } delta_time dt(timer.TickDelta()); if (!(this->on_update_hook && this->on_update_hook(dt))) { current_scene->OnUpdate(dt); } debug::ProcessOnUpdate(static_cast<SDL_Window*>(*this->window.get()), dt); this->window->Clear(); if (!(this->on_render_hook && this->on_render_hook())) { current_scene->OnRender(); } debug::ProcessOnRender(); this->window->Present(); if (m_flags & PUSH_DEFERRED) { current_scene->Hibernate(); m_flags &= ~PUSH_DEFERRED; auto& new_current_scene = m_sceneStack.back(); new_current_scene->Initialize(); } else if (m_flags & POP_DEFERRED) { current_scene->Terminate(); m_flags &= ~POP_DEFERRED; auto& new_current_scene = m_sceneStack.back(); new_current_scene->Activate(); } else if (m_flags & SWAP_DEFERRED) { current_scene->Terminate(); m_flags &= ~SWAP_DEFERRED; auto& new_current_scene = m_sceneStack.back(); new_current_scene->Initialize(); } if (!using_vsync) { uint32 frame_length = timer.Ticks() - frame_start; if (frame_length < frame_cap) { SDL_Delay(frame_cap - frame_length); } } } }
int main(int argc, char** argv) { //Initializations InitCLK(); InitGPIO(); InitADC(); //InitSPI(); InitTimer0(); InitTimer1(); InitWatchdog(); InitUART(); //Initialize UART module unsigned char periodicCounter = MIN_PERIOD; gpsIndex = 0; INTCONbits.GIE = 1; ToggleSleepGPS(); //Turn GPS on SetupGPS(); //Setup Lat/Long recording PORTBbits.PORTB = LATBbits.LATB & 0xDF; //turn red LED off PORTBbits.PORTB = LATBbits.LATB | 0x10; //turn green LED on __delay_ms(100); PORTBbits.PORTB = LATBbits.LATB & 0xEF; //turn green LED off SPI_CS = CS_IDLE;//prerecord while(1){ //PRE_RECORD FUNCTION //InitSPI(); //Start-up SPI again //PreRecordMode(); //SSPCON1bits.SSPEN=0; // Disable SPI Port //PORTCbits.RC5 = 0; //Set MOSI low //SPI_CS = CS_IDLE;//prerecord //__delay_ms(5); SPI_CS = CS_IDLE; //Check Flags if(PORTAbits.RA1) { //Strobe LED PORTBbits.RB0 = 1; __delay_ms(100); PORTBbits.RB0 = 0; } if(recordFlag) { RecordMode(); recordFlag = 0; __delay_ms(500); //trying to get gps to not hangup } //Not recording, Update the GPS if(gpsTimeoutState==0) UpdateGPS(); //tell GPS to send an update else if(gpsTimeoutState==1) { ToggleSleepGPS(); gpsTimeoutState = 2; } else if(gpsTimeoutState==2) { ToggleSleepGPS(); gpsTimeoutState = 3; } else if(gpsTimeoutState==3) { __delay_ms(1000); gpsTimeoutState = 0; } else { gpsTimeoutState = 0; } if(gpsInvalidFlag) //turn on red LED if invalid message { PORTBbits.PORTB = LATBbits.LATB | 0x20; //turn red LED on PORTBbits.PORTB = LATBbits.LATB & 0xEF; //turn green LED off __delay_ms(250); PORTBbits.PORTB = LATBbits.LATB & 0xDF; //turn red LED off if(periodicCounter < MAX_PERIOD) periodicCounter++; } else //turn on green LED if valid message { PORTBbits.PORTB = LATBbits.LATB | 0x10; //turn green LED on PORTBbits.PORTB = LATBbits.LATB & 0xDF; //turn red LED off __delay_ms(250); PORTBbits.PORTB = LATBbits.LATB & 0xEF; //turn green LED off periodicCounter = MIN_PERIOD; } if(!recordFlag) { if(PORTAbits.RA1) //check strobe GoToSleep(MIN_PERIOD); else if(gpsInvalidFlag) GoToSleep(periodicCounter); else { ToggleSleepGPS(); //Turn GPS off Hibernate(); ToggleSleepGPS(); //Turn GPS on } } } return (EXIT_SUCCESS); }