Example #1
0
File: hyfy.c Project: bohemel/hyfy
int main() {


	// load routes 
	routes_init();

	int sockfd, newsockfd;
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if (sockfd < 0)
		hyfy_error("ERROR opening socket");

	int portno = 8080;
	struct sockaddr_in serv_addr, cli_addr;
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = INADDR_ANY;
	serv_addr.sin_port = htons(portno);

	if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
		hyfy_error("ERROR on binding");

	printf("hyfy now online on port 8080 \n");

	listen(sockfd,5);

	socklen_t clilen;
	clilen = sizeof(cli_addr);

	while(1) {
		newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr,&clilen);
		if (newsockfd < 0) 
			hyfy_error("ERROR on accept");
		
		// handle new connection
		dispatch_request(newsockfd);
	}

	close(sockfd);
	return 0;
}
Example #2
0
static int handle_input(void)
{
    static struct timeval pressed;
    static int long_press;
    struct timeval now, diff;
    unsigned long key;
    int rc;

    serial_poll();

    if (pressed.tv_sec && pressed.tv_usec) {
	gettimeofday(&now, NULL);
	timesub(&diff, &now, &pressed);
	/* LONG_PRESS? */
	if (diff.tv_sec >= 1) {
	    switch (visual) {
	    case VIEW_SATS:  visual = VIEW_MAP; break;
	    case VIEW_MAP:   visual = VIEW_ROUTE; break;
	    case VIEW_ROUTE: visual = VIEW_SATS; break;
	    }
	    /* allow for cycling by keeping the button pressed */
	    pressed.tv_sec  = now.tv_sec;
	    pressed.tv_usec = now.tv_usec;
	    long_press = 1;
	    do_refresh = 1;
	    return 0;
	}
    }

    rc = empeg_getkey(&key);
    if (rc != 1) return rc;

    switch(key) {
    case IR_TOP_BUTTON_PRESSED:
	if (!load_route && !menu)
	    return 1; /* done, wait to be selected again in the hijack menu */

	load_route = 0;
	menu = 0;
	do_refresh = 1;
	break;

    case IR_BOTTOM_BUTTON_PRESSED:
	gettimeofday(&pressed, NULL);
	break;

    case IR_BOTTOM_BUTTON_RELEASED:
	pressed.tv_sec = pressed.tv_usec = 0;
	if (long_press) {
	    long_press = 0;
	    break;
	}
	if (load_route) {
	    route_load();
	    load_route = 0;
	    menu = 0;
	}
	else if (menu) {
	    switch(menu_pos) {
	    case 0: load_route = routes_init(); break;
	    case 1:
		switch (visual) {
		case VIEW_SATS:  visual = VIEW_MAP; break;
		case VIEW_MAP:   visual = VIEW_ROUTE; break;
		case VIEW_ROUTE: visual = VIEW_SATS; break;
		}
		break;
	    case 2:
		if (++show_popups == 3)
		    show_popups = 0;
		break;
	    case 3: show_metric = 1 - show_metric; break;
	    case 4: show_gpscoords = 1 - show_gpscoords;  break;
	    case 5: show_time = 1 - show_time; break;
	    case 6: show_track = 1 - show_track; break;
	    case 7:
		if (++coord_format == 3)
		    coord_format = 0;
		break;
	    }
	    menu = 0; lastmenu = 3; lastmenu_pos = menu_pos;
	}
	else
	    menu = 1;

	do_refresh = 1;
	break;

    case IR_LEFT_BUTTON_PRESSED:
	if (load_route)
	    route_select(0);
	else if (menu) {
	    if (--menu_pos < 0)
		menu_pos = MENU_ENTRIES - 1;
	}
	else {
	    switch (visual) {
	    case VIEW_SATS:  break;
	    case VIEW_MAP:   draw_zoom(0); break;
	    case VIEW_ROUTE: route_skipwp(-1); break;
	    }
	}
	do_refresh = 1;
	break;

    case IR_RIGHT_BUTTON_PRESSED:
	if (load_route)
	    route_select(1);
	else if (menu) {
	    if (++menu_pos >= MENU_ENTRIES)
		menu_pos = 0;
	}
	else {
	    switch (visual) {
	    case VIEW_SATS:  break;
	    case VIEW_MAP:   draw_zoom(1); break;
	    case VIEW_ROUTE: route_skipwp(1); break;
	    }
	}
	do_refresh = 1;
	break;

    case IR_KNOB_LEFT:
    case IR_KNOB_RIGHT:
	route_skipwp(key == IR_KNOB_LEFT ? -1 : 1);
	route_locate();
	do_refresh = 1;
	break;

    case IR_KNOB_PRESSED:
    default:
	break;
    }

    return 0;
}