/* Receive a packet, and print out the timestamps from it */ static int do_recv(int sock, unsigned int pkt_num) { struct msghdr msg; struct iovec iov; struct sockaddr_in host_address; char buffer[2048]; char control[1024]; int got; /* recvmsg header structure */ make_address(0, &host_address); iov.iov_base = buffer; iov.iov_len = 2048; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_name = &host_address; msg.msg_namelen = sizeof(struct sockaddr_in); msg.msg_control = control; msg.msg_controllen = 1024; /* block for message */ got = recvmsg(sock, &msg, 0); if( !got && errno == EAGAIN ) return 0; printf("Packet %d - %d bytes\t", pkt_num, got); handle_time(&msg); return got; };
/* Receive a packet, and print out the timestamps from it */ int do_echo(int sock, unsigned int pkt_num, int cfg_templated) { struct msghdr msg; struct iovec iov; struct sockaddr_in host_address; char buffer[2048]; char control[1024]; int got; int check = 0; const int check_max = 999999; /* recvmsg header structure */ make_address(0, 0, &host_address); iov.iov_base = buffer; iov.iov_len = 2048; msg.msg_iov = &iov; msg.msg_iovlen = 1; msg.msg_name = &host_address; msg.msg_namelen = sizeof(struct sockaddr_in); msg.msg_control = control; msg.msg_controllen = 1024; /* block for message */ got = recvmsg(sock, &msg, 0); TEST(got >= 0); printf("Packet %d - %d bytes\n", pkt_num, got); /* echo back */ msg.msg_controllen = 0; iov.iov_len = got; #ifdef ONLOADEXT_AVAILABLE if ( cfg_templated ) TRY(templated_send(sock, &iov) ); else #endif TRY(sendmsg(sock, &msg, 0)); /* retrieve TX timestamp * Note: Waiting for it this way isn't the most efficient option. * For higher throughput, check associate times to packets afterwards. */ msg.msg_control = control; iov.iov_len = 2048; do { msg.msg_controllen = 1024; got = recvmsg(sock, &msg, MSG_ERRQUEUE); } while (got < 0 && errno == EAGAIN && check++ < check_max); if ( got < 0 && errno == EAGAIN ) { printf("Gave up acquiring timestamp.\n"); return -EAGAIN; } TEST(got >= 0); handle_time(&msg); return 0; };
void handle_command() { serial_in[serial_in_ctr] = '\0'; p = serial_out; if (!strncmp_P((char*)serial_in, PSTR("TIME"), 4)) { handle_time(); } else if (!strncmp_P((char*)serial_in, PSTR("ACCELVERB"), 9)) { handle_accelverb(); } else if (!strncmp_P((char*)serial_in, PSTR("ACCEL"), 5)) { handle_accel(); p += strlcpy_P(p, off, 64); } else if (!strncmp_P((char*)serial_in, PSTR("SCAN"), 4)) { flash_scan(); p += strlcpy_P(p, cmdresult, 64); p += sprintf(p, " %03d %03d", flash_addr >> 8, flash_addr & 0xFF); } else if (!strncmp_P((char*)serial_in, PSTR("ADDR"), 4)) {
static void do_events(s_game *game, s_perso **persos, s_sound *sounds) { SDL_Event event; int t1 = 0; while (1) { handle_time(game, &t1, 1, persos); update_grid(game, persos); update_board(game, persos, sounds); update_info(game, persos); update_items(game, persos); SDL_PollEvent(&event); input_actions(game, event, persos, sounds); SDL_BlitSurface(game->help_s, NULL, game->screen, &game->help_r); SDL_Flip(game->screen); game->trigger = 0; } }
static void handle_bluetooth(bool connected) { const VibePattern pattern = { .durations = (uint32_t []) {100, 300, 300, 300, 100, 300}, .num_segments = 6 }; if(connected == false) { //layer_set_hidden((Layer *)ILDesconec, false); vibes_enqueue_custom_pattern(pattern); } else { //layer_set_hidden((Layer *)ILDesconec, true); //vibes_enqueue_custom_pattern(pattern); } } static void handle_battery(BatteryChargeState estado) { //GRect frame = layer_get_frame((Layer *) BLBat); //GPoint pos = {frame.origin.x, frame.origin.y}; if (estado.is_charging) { //sustituye_imagen(&bateria_png, BLBat, RESOURCE_ID_CARGANDO_BLACK, pos); } else if (estado.is_plugged) { //sustituye_imagen(&bateria_png, BLBat, RESOURCE_ID_CARGANDO_BLACK, pos); } else { //sustituye_imagen(&bateria_png, BLBat, RESOURCE_ID_BATERIA_BLACK, pos); } static char buffer_b[] = "100 "; snprintf(buffer_b, sizeof(buffer_b), "%d", estado.charge_percent/10); text_layer_set_text(TLBateria, buffer_b); } void handle_time(struct tm *tick_time, TimeUnits units_changed) { if (units_changed & MINUTE_UNIT ) { // Cambios producidos cada minuto static char buffer_min[] = " "; strftime(buffer_min,sizeof("00"),"%M",tick_time); text_layer_set_text(TLMinuto,buffer_min); handle_battery(battery_state_service_peek()); } if (units_changed & HOUR_UNIT || iniciaHora) { iniciaHora = false; static char buffer_dia[] = " "; static char buffer_hora[] = " "; static char buffer_mes[] = " "; static char txt_dia[] = "dom "; //static char txt_mes[] = "ene "; int dia = tick_time->tm_wday; //int mes = tick_time->tm_mon; strftime(buffer_hora,sizeof("00"),"%k",tick_time); text_layer_set_text(TLHora,buffer_hora); strncpy(txt_dia, dias[7*idioma+dia], sizeof(dias[7*idioma+dia])); text_layer_set_text(TLDiaSem, txt_dia); strftime(buffer_mes,sizeof("00"),"%m",tick_time); text_layer_set_text(TLMes,buffer_mes); strftime(buffer_dia,sizeof("00"),"%e",tick_time); text_layer_set_text(TLDia,buffer_dia); } } void window_load(Window *window) { initialise_ui(); //Para la primera vez, lanzo manualmente la actualización del reloj y bluetooth time_t temp = time(NULL); handle_time(localtime(&temp), MINUTE_UNIT); handle_battery(battery_state_service_peek()); handle_bluetooth(bluetooth_connection_service_peek()); }