int main(int argc, char* argv[]) { printf("START! pid = %d\n", getpid()); if (!system("./restart.rb")) exit(1); if (signal(SIGUSR1, RestartHandler) == SIG_ERR) { fprintf(stderr, "An error occurred while setting a signal handler.\n"); exit(1); } bool fullscreen = true; s_config = new AppConfig(fullscreen, false, 1280, 800); SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); SDL_Window* displayWindow; SDL_Renderer* displayRenderer; uint32_t flags = SDL_WINDOW_OPENGL | (s_config->fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0); int err = SDL_CreateWindowAndRenderer(s_config->width, s_config->height, flags, &displayWindow, &displayRenderer); if (err == -1 || !displayWindow || !displayRenderer) { fprintf(stderr, "SDL_CreateWindowAndRenderer failed!\n"); } SDL_RendererInfo displayRendererInfo; SDL_GetRendererInfo(displayRenderer, &displayRendererInfo); /* TODO: Check that we have OpenGL */ if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 || (displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0) { /* TODO: Handle this. We have no render surface and not accelerated. */ fprintf(stderr, "NO RENDERER wtf!\n"); } atexit(SDL_Quit); JOYSTICK_Init(); AppConfig& config = *s_config; config.title = "riftty"; //SDL_WM_SetCaption(config.title.c_str(), config.title.c_str()); //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); /* // clear glClearColor(s_clearColor.x, s_clearColor.y, s_clearColor.z, s_clearColor.w); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); SDL_GL_SwapWindow(displayWindow); */ RiftSetup(); RenderInit(); win_init(); init_config(); struct passwd *pw = getpwuid(getuid()); const char *homedir = pw->pw_dir; char config_filename[512]; strncpy(config_filename, homedir, 512); strncat(config_filename, "/.riftty", 512); load_config(config_filename); cs_init(); // TODO: code pages do not want // TODO: determine this based on window-size & font-size or vice versa. cfg.rows = 25; cfg.cols = 80; // TODO: load config from /etc/riffty or ~/.rifttyrc finish_config(); win_reconfig(); // TODO: get SHELL from env cs_reconfig(); // TODO: do not want term_init(); term_reset(); term_resize(cfg.rows, cfg.cols); // TODO: int font_width = 10; int font_height = 10; unsigned short term_width = font_width * cfg.cols; unsigned short term_height = font_height * cfg.rows; char login[128]; strncpy(login, getlogin(), 128); const char* login_argv[] = {"login", "-pfl", login, NULL}; unsigned short rows = cfg.rows; unsigned short cols = cfg.cols; winsize ws = {rows, cols, term_width, term_height}; child_create(login_argv, &ws); bool done = false; while (!done) { JOYSTICK_ClearFlags(); SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: done = true; break; case SDL_MOUSEMOTION: if (event.motion.state & SDL_BUTTON(1)) { // move touch } break; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_LEFT) { // start touch } break; case SDL_MOUSEBUTTONUP: if (event.button.button == SDL_BUTTON_LEFT) { // end touch } break; case SDL_JOYAXISMOTION: JOYSTICK_UpdateMotion(&event.jaxis); break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: JOYSTICK_UpdateButton(&event.jbutton); break; case SDL_KEYDOWN: case SDL_KEYUP: if (ProcessKeyEvent(&event.key)) { done = true; } break; } } if (!done) { if (s_needsRestart) Restart(); unsigned int now = SDL_GetTicks(); // milliseconds float dt = (now - s_ticks) / 1000.0f; // convert to seconds. s_ticks = now; //printf("fps = %.0f\n", 1.0f/dt); Process(dt); Render(dt); } } child_kill(true); win_shutdown(); RiftShutdown(); JOYSTICK_Shutdown(); return 0; }
CAL_MAIN() { wdt_enable(WDTO_4S); LCD_UpdateSOC(1); stdout = &mystdout; DDRD |= (1 << PD4); PORTD &= ~(1 << PD4); // Turn on RS232. USART_Init(); uint8_t ch; LCD_UpdateSOC(2); // Initialize everything. InitMemory(); LCD_UpdateSOC(3); LCD_Init(); LCD_UpdateSOC(4); TIMING_Init(); LCD_UpdateSOC(5); RTC_Init(); LCD_UpdateSOC(6); RTC_SetTickHandler( TIMING_TickHandler ); LCD_UpdateSOC(7); JOYSTICK_Init( 100, 50 ); //DDRD |= (1 << PD4); PORTD &= ~(1 << PD4); // Turn on RS232. //USART_Init(); // CAL_enable_interrupt(); TIMING_AddRepCallbackEvent( TIMING_INFINITE_REPEAT, 1, JOYSTICK_PollingHandler, &joystickCallbackEvent ); // happy startup sound LCD_UpdateSOC(8); // BATTERY ICON SOC-LEVEL TEST int soc = 0; // interrupt enable SREG |= 1<<7; LCD_UpdateSOC(9); // Init CAN-adapter // few returns to wake up the device /* printf("\r\r"); // version query printf("V\r"); // auto poll/send = ON printf("X1\r"); printf("S6\r"); // (S)peed 500 kBit // Open the CAN channel printf("O\r"); // (O)pen the CAN-bus */ LCD_UpdateSOC(10); PlaySound(11); // Display splash screen, wait for joystick. //1 POWER_EnterIdleSleepMode(); //PICTURE_CopyFullscreenFlashToLcd( FLASHPICS_excellenceThroughTechnology ); //PICTURE_CopyFullscreenFlashToLcd( FLASHPICS_eCarsLogo ); // PICTURE_CopyFullscreenFlashToLcd( FLASHPICS_PalonenLABS_128x64px ); // init backlight BACKLIGHT_Init(); Contrast = eeprom_read_word((uint16_t*)8); Red = eeprom_read_word((uint16_t*)10); Green = eeprom_read_word((uint16_t*)12); Blue = eeprom_read_word((uint16_t*)14); Intensity = eeprom_read_word((uint16_t*)16); BACKLIGHT_SetRGB( Red, Green, Blue ); BACKLIGHT_SetIntensity(Intensity); /* TIMING_event_t * splashScreenEvent = MEM_ALLOC( TIMING_event_t ); if (splashScreenEvent == NULL) { UnknownError(); } TIMING_counter_t volatile splashCounter = 0; TIMING_AddCounterEventAfter( RTC_TICKS_PER_SECOND * SPLASH_SCREEN_SECONDS, &splashCounter, splashScreenEvent ); bool exit = false; do { POWER_EnterIdleSleepMode(); if (JOYSTICK_GetState() != 0x00) { exit = true; }; if (splashCounter != 0) { exit = true; } } while (exit == false); TIMING_RemoveEvent( splashScreenEvent ); MEM_FREE( splashScreenEvent ); DELAY_MS(500); */ LCD_ClrBox(0,0,128,64); // exit = false; /* do { uint8_t joystickState = JOYSTICK_GetState(); while ((FIFO_HasData( &rxFifo, FIFO_data_t ) == false) && (joystickState == 0x00)) { POWER_EnterIdleSleepMode(); joystickState = JOYSTICK_GetState(); } if (joystickState != 0x00) { exit = true; } else if (FIFO_HasData( &rxFifo, FIFO_data_t ) == true) { FIFO_data_t charInput; FIFO_GetData( &rxFifo, &charInput ); //TERM_ProcessChar( term, charInput ); } } while (exit == false); */ // MEM_FREE( rxBuffer ); // MEM_FREE( txBuffer ); // LcdContrast(); //if (JOYSTICK_GetState() & (JOYSTICK_ENTER) == 0x00) { // LcdContrast(); //} while (1) { if (urx_recv) { cli(); urx_recv = 0; ch = urx; sei(); /* build a command line and execute commands when complete */ recv_input(ch); } } CAL_MAIN_LAST(); }