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; }
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; }