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