Ejemplo n.º 1
0
Archivo: edbg.c Proyecto: arv3/edbg
//-----------------------------------------------------------------------------
int main(int argc, char **argv)
{
  debugger_t debuggers[MAX_DEBUGGERS];
  int n_debuggers = 0;
  int debugger = -1;
  target_t *target;

  parse_command_line(argc, argv);

  if (!(g_erase || g_program || g_verify || g_lock || g_read || g_list || g_target))
    error_exit("no actions specified");

  if (g_read && (g_erase || g_program || g_verify || g_lock))
    error_exit("mutually exclusive actions specified");

  n_debuggers = dbg_enumerate(debuggers, MAX_DEBUGGERS);

  if (g_list)
  {
    printf("Attached debuggers:\n");
    for (int i = 0; i < n_debuggers; i++)
      printf("  %s - %s %s\n", debuggers[i].serial, debuggers[i].manufacturer, debuggers[i].product);
    return 0;
  }

  if (NULL == g_target)
    error_exit("no target type specified (use '-t' option)");

  if (0 == strcmp("list", g_target))
  {
    target_list();
    return 0;
  }

  target = target_get_ops(g_target);

  if (g_serial)
  {
    for (int i = 0; i < n_debuggers; i++)
    {
      if (0 == strcmp(debuggers[i].serial, g_serial))
      {
        debugger = i;
        break;
      }
    }

    if (-1 == debugger)
      error_exit("unable to find a debugger with a specified serial number");
  }

  if (0 == n_debuggers)
    error_exit("no debuggers found");
  else if (1 == n_debuggers)
    debugger = 0;
  else if (n_debuggers > 1 && -1 == debugger)
    error_exit("more than one debugger found, please specify a serial number");

  dbg_open(&debuggers[debugger]);

  dap_disconnect();
  dap_get_debugger_info();
  dap_connect();
  dap_transfer_configure(0, 128, 128);
  dap_swd_configure(0);
  dap_led(0, 1);
  dap_reset_link();
  dap_swj_clock(DAP_FREQ);
  dap_target_prepare();

  target->ops->select();

  if (g_erase)
    target->ops->erase();

  if (g_program)
    target->ops->program(g_file);

  if (g_verify)
    target->ops->verify(g_file);

  if (g_lock)
    target->ops->lock();

  if (g_read)
    target->ops->read(g_file);

  target->ops->deselect();

  dap_disconnect();
  dap_led(0, 0);

  dbg_close();

  return 0;
}
  player_t* action_t::select_target_if_target()
  {
    if ( target_if_mode == TARGET_IF_NONE || target_list().size() == 1 )
      return target;

    std::vector<player_t*> master_list;
    if ( sim -> distance_targeting_enabled )
    {
      if ( !target_cache.is_valid )
      {
        available_targets( target_cache.list );
        master_list = targets_in_range_list( target_cache.list );
        target_cache.is_valid = true;
      }
      else
      {
        master_list = target_cache.list;
      }
      if ( sim -> log )
        sim -> out_debug.printf( "%s Number of targets found in range - %.3f",
        player -> name(), static_cast<double>( master_list.size() ) );
      if ( master_list.size() <= 1 )
        return target;
    }
    else
    {
      master_list = target_list();
    }

    player_t* original_target = target;
    player_t* proposed_target = target;
    double current_target_v = target_if_expr -> evaluate();

    double max_ = current_target_v;
    double min_ = current_target_v;

    for ( size_t i = 0, end = master_list.size(); i < end; ++i )
    {
      target = master_list[i];

      // No need to check current target
      if ( target == original_target )
        continue;
      double v = target_if_expr -> evaluate();

      // Don't swap to targets that evaluate to identical value than the current target
      if ( v == current_target_v )
        continue;

      if ( target_if_mode == TARGET_IF_FIRST && v != 0 )
      {
        proposed_target = target;
        break;
      }
      else if ( target_if_mode == TARGET_IF_MAX && v > max_ )
      {
        max_ = v;
        proposed_target = target;
      }
      else if ( target_if_mode == TARGET_IF_MIN && v < min_ )
      {
        min_ = v;
        proposed_target = target;
      }
    }

    if ( sim -> log )
      sim -> out_debug.printf( "%s target_if best target: %s - original target - %s - current target -%s", 
        player -> name(), proposed_target -> name(), original_target -> name(), target -> name() );

    target = original_target;

    return proposed_target;
  }
Ejemplo n.º 3
0
void tlobby_main::update_playerlist()
{
	if(delay_playerlist_update_)
		return;
	SCOPE_LB;
	DBG_LB << "Playerlist update: " << lobby_info_.users().size() << "\n";
	lobby_info_.update_user_statuses(selected_game_id_, active_window_room());
	lobby_info_.sort_users(player_list_.sort_by_name->get_value_bool(),
						   player_list_.sort_by_relation->get_value_bool());

	bool lobby = false;
	if(room_info* ri = active_window_room()) {
		if(ri->name() == "lobby") {
			lobby = true;
		}
	}

	assert(player_list_.active_game.tree);
	assert(player_list_.active_room.tree);
	assert(player_list_.other_games.tree);
	assert(player_list_.other_rooms.tree);

	player_list_.active_game.tree->clear();
	player_list_.active_room.tree->clear();
	player_list_.other_games.tree->clear();
	player_list_.other_rooms.tree->clear();

	for(auto userptr : lobby_info_.users_sorted()) {
		user_info& user = *userptr;
		tsub_player_list* target_list(nullptr);
		std::map<std::string, string_map> data;

		std::string name = user.name;

		std::stringstream icon_ss;
		icon_ss << "lobby/status";
		switch(user.state) {
			case user_info::SEL_ROOM:
				icon_ss << "-lobby";
				target_list = &player_list_.active_room;
				if(lobby) {
					target_list = &player_list_.other_rooms;
				}
				break;
			case user_info::LOBBY:
				icon_ss << "-lobby";
				target_list = &player_list_.other_rooms;
				break;
			case user_info::SEL_GAME:
				name = colorize(name, "cyan");
				icon_ss << (user.observing ? "-obs" : "-playing");
				target_list = &player_list_.active_game;
				break;
			case user_info::GAME:
				name = colorize(name, "red");
				icon_ss << (user.observing ? "-obs" : "-playing");
				target_list = &player_list_.other_games;
				break;
			default:
				ERR_LB << "Bad user state in lobby: " << user.name << ": "
					   << user.state << "\n";
				continue;
		}

		switch(user.relation) {
			case user_info::ME:
			/* fall through */
			case user_info::NEUTRAL:
				icon_ss << "-n";
				break;
			case user_info::FRIEND:
				icon_ss << "-f";
				break;
			case user_info::IGNORED:
				icon_ss << "-i";
				break;
			default:
				ERR_LB << "Bad user relation in lobby: " << user.relation
					   << "\n";
		}

		if(user.registered) {
			name = "<b>" + name + "</b>";
		}

		icon_ss << ".png";
		add_label_data(data, "player", name);
		add_label_data(data, "main_icon", icon_ss.str());

		if(!preferences::playerlist_group_players()) {
			target_list = &player_list_.other_rooms;
		}

		assert(target_list->tree);

		string_map tree_group_field;
		std::map<std::string, string_map> tree_group_item;

		/*** Add tree item ***/
		tree_group_field["label"] = icon_ss.str();
		tree_group_item["icon"] = tree_group_field;

		tree_group_field["label"] = name;
		tree_group_field["use_markup"] = "true";
		tree_group_item["name"] = tree_group_field;

		ttree_view_node& player = target_list->tree->add_child("player", tree_group_item);

		find_widget<ttoggle_panel>(&player, "tree_view_node_label", false)
				.set_callback_mouse_left_double_click(std::bind(
						 &tlobby_main::user_dialog_callback, this, userptr));
	}

	player_list_.active_game.update_player_count_label();
	player_list_.active_room.update_player_count_label();
	player_list_.other_rooms.update_player_count_label();
	player_list_.other_games.update_player_count_label();

	player_list_dirty_ = false;
}