int imgr_boot_read(struct nmgr_jbuf *njb) { int rc; struct json_encoder *enc; struct image_version ver; struct json_value jv; uint8_t hash[IMGMGR_HASH_LEN]; enc = &njb->njb_enc; json_encode_object_start(enc); rc = boot_vect_read_test(&ver); if (!rc) { imgr_ver_jsonstr(enc, "test", &ver); } rc = boot_vect_read_main(&ver); if (!rc) { imgr_ver_jsonstr(enc, "main", &ver); } rc = imgr_read_info(bsp_imgr_current_slot(), &ver, hash); if (!rc) { imgr_ver_jsonstr(enc, "active", &ver); } JSON_VALUE_INT(&jv, NMGR_ERR_EOK); json_encode_object_entry(enc, "rc", &jv); json_encode_object_finish(enc); return 0; }
/** * Selects a slot number to boot from, based on the contents of the boot * vector. * * @return The slot number to boot from on success; * -1 if an appropriate slot could not be * determined. */ static int boot_select_image_slot(void) { struct image_version ver; int slot; int rc; rc = boot_vect_read_test(&ver); if (rc == 0) { slot = boot_find_image_slot(&ver); if (slot == -1) { boot_vect_delete_test(); } else { return slot; } } rc = boot_vect_read_main(&ver); if (rc == 0) { slot = boot_find_image_slot(&ver); if (slot == -1) { boot_vect_delete_main(); } else { return slot; } } return -1; }