Fix regular UF2s
diff --git a/main.cpp b/main.cpp index c7ac418..0b393a0 100644 --- a/main.cpp +++ b/main.cpp
@@ -4986,9 +4986,11 @@ vector<uint32_t> available_family_ids; uint32_t file_family_id = 0; uint32_t override_family_id = settings.family_id; + bool multi_family_uf2 = false; auto tmp_file_access = get_file_memory_access(0, false, &next_id); if (next_id) { // UF2 file with multiple family IDs + multi_family_uf2 = true; settings.family_id = 0; next_id = get_family_id(0); while (next_id) { @@ -5005,6 +5007,16 @@ available_family_ids[0] = override_family_id; } } + } else { + // For anything else, just populate available_family_ids with the family ID from the file + uint32_t family_id = get_family_id(0); + available_family_ids.push_back(family_id); + } + + if (available_family_ids.size() > 1) { + vector<string> family_names = {}; + for (auto family_id : available_family_ids) family_names.push_back(family_name(family_id)); + fos << "UF2 file contains multiple family IDs: " << cli::join(family_names, ", ") << "\n"; } if (settings.load.partition >= 0) { @@ -5023,10 +5035,6 @@ settings.offset_set = true; settings.partition_size = end - start; } else if (!settings.load.ignore_pt && !settings.offset_set) { - if (available_family_ids.size() == 0) { - uint32_t family_id = get_family_id(0); - available_family_ids.push_back(family_id); - } uint32_t start; uint32_t end; bool accepted = false; @@ -5067,9 +5075,9 @@ } } } - auto file_access = get_file_memory_access(0, false, &file_family_id); + auto file_access = multi_family_uf2 ? get_file_memory_access(0, false, &file_family_id) : get_file_memory_access(0); if (settings.offset_set && get_file_type() != filetype::bin && raw_access.get_model()->chip() == rp2040) { - fail(ERROR_ARGS, "Offset only valid for BIN files"); + fail(ERROR_ARGS, "On RP2040, offset is only valid for BIN files"); } bool ret = load_guts(con, file_access); return ret;