コード例 #1
0
ファイル: riftty.cpp プロジェクト: kkawamura/riftty
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;
}
コード例 #2
0
ファイル: main.c プロジェクト: palonenlabs/eguimini
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();
}