コード例 #1
0
ファイル: rx_timestamping.c プロジェクト: bmschwa/openonload
/* 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;
};
コード例 #2
0
ファイル: tx_timestamping.c プロジェクト: majek/openonload
/* 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;
};
コード例 #3
0
ファイル: commands.c プロジェクト: Nazrax/Dream-Vibrator-M2
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)) {
コード例 #4
0
ファイル: main.c プロジェクト: Nyarlygames/Bomberman
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;
    }
}
コード例 #5
0
ファイル: main.c プロジェクト: manelto/pizarra
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());
}