示例#1
0
void *
display_run(void *v)
{
  struct display_run_args *d_args = v;
  ending_t ending                 = d_args->ending;
  controller_state_t cs           = d_args->cs;

  (void)cs;

  graphics_init();

  while (1) {
    if (ending_get(ending)) {
      break;
    }

    SDL_Delay(100);
    draw_display();
    print_info("display looping");
  }

  graphics_deinit();

  print_info("display exiting");

  return NULL;
}
示例#2
0
文件: gpsapp.c 项目: empeg/gpsapp
static void refresh_display(void)
{
    struct xy pos;
    int i;

    do_refresh = 0;

    draw_clear();

    draw_activity(1);

    switch (visual) {
    case VIEW_SATS:
	draw_sats(&gps_state);
	break;

    case VIEW_MAP:
	/* show map scale */
	if (show_scale)
	    draw_scale();

	/* show gps coordinates */
	if (show_gpscoords)
	    draw_gpscoords();

	vfdlib_setClipArea(0, 0, VFD_WIDTH - VFD_HEIGHT, VFD_HEIGHT);

	/* draw tracklog */
	if (show_track)
	    track_draw();

	/* draw route we're following */
	route_draw(&gps_coord.xy);

	/* highlight waypoints */
	i = 0;
	while (route_getwp(i, &pos, NULL, NULL)) {
	    draw_point(&pos, VFDSHADE_BRIGHT);
	    if (i++ != nextwp) continue;

	    /* add focus to next waypoint */
	    draw_mark(&pos, -1, VFDSHADE_MEDIUM);
	}

	/* draw our own location */
	draw_mark(&gps_coord.xy, gps_bearing, VFDSHADE_BRIGHT);

	vfdlib_setClipArea(0, 0, VFD_WIDTH, VFD_HEIGHT);
	draw_info();
	break;

    case VIEW_ROUTE:
	draw_wpstext();
	break;
    }

    if (load_route)
	routes_list();
    else if (menu) 
	draw_msg(menu_msg[menu_pos]);

    else if (lastmenu) {
	char *msg=NULL;
	lastmenu--;
	switch(menu_pos) {
	case 2: switch (show_popups) {
		case 0: msg = "No Popups"; break;
		case 1: msg = "Popups"; break;
		case 2: msg = "Permanent Popups"; break;
		}
		break;
	case 3: msg = (show_metric?"Meters":"Miles"); break;
	case 4: msg = (show_gpscoords?"Coordinates":"No Coordinates"); break;
	case 5: msg = (show_time?"Time":"Distance"); break;
	case 6: msg = (show_track?"Track":"No Track"); break;
	case 7: switch (coord_format) {
		case 0: msg = "DDD Coords"; break;
		case 1: msg = "DMM Coords"; break;
		case 2: msg = "DMS Coords"; break;
		}
		break;
	}
	if (msg)
	    draw_msg(msg);
    }

    draw_display();

#ifndef __arm__
    {
	extern int stats_toTM;
	extern int stats_distance;
	extern int stats_bearing;

	fprintf(stderr, "conv stats: GPS>TM %d DIST %d HDG %d\n",
		stats_toTM, stats_distance, stats_bearing);
	stats_toTM = stats_distance = stats_bearing = 0;
    }
#endif
}
示例#3
0
文件: gpsapp.c 项目: empeg/gpsapp
int main(int argc, char **argv)
{
    const char *menu[] = { "GPSapp", NULL };
    struct timeval timeout;
    int rc = 0;

    if (empeg_init() == -1)
	exit(0);

    /* set a default protocol, now we only complain when the user specifies an
     * unknown protocol in config.ini */
    serial_protocol("NMEA");

    /* For backward compatibility as the user can specify the protocol in
     * config.ini */
    if (argc > 1)
	serial_protocol(argv[1]);

    init_gpsapp();

    printf("GPS app started\n");

    vfdlib_registerFont("empeg/lib/fonts/small.bf", 0);
    vfdlib_registerFont("empeg/lib/fonts/large.bf", 1);
    h0 = vfdlib_getTextHeight(0);

    route_init();

    while (rc != -1) {
	if (empeg_waitmenu(menu) == -1)
	    break;

	serial_open();

	draw_msg("Waiting for data from GPS receiver");
	draw_display();

	while(1) {
	    rc = handle_input();
	    if (rc) break;

	    if (do_refresh)
		refresh_display();

	    /* pause a bit to avoid burning CPU cycles */
	    timeout.tv_sec = 0;
	    timeout.tv_usec = 100000;
	    select(0, NULL, NULL, NULL, &timeout);
	}
#ifndef __arm__
	break;
#endif
    }

    serial_close();
    route_init();

    draw_msg("GPS app dying...");
    draw_display();
    sleep(5);

    vfdlib_unregisterAllFonts();
    empeg_free();
    exit(0);
}