1 /*
2 * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "cmd_print_image_dir.h"
8
9 #include <cstdint>
10 #include <cstdio>
11 #include <cstdlib>
12 #include <vector>
13
14 #include "common/uuid/uuid.h"
15 #include "print_uuid.h"
16 #include "protocols/service/fwu/fwu_proto.h"
17
cmd_print_image_dir(fwu_app & app)18 void cmd_print_image_dir(fwu_app &app)
19 {
20 std::vector<uint8_t> fetched_object;
21 struct uuid_octets object_uuid;
22
23 uuid_guid_octets_from_canonical(&object_uuid, FWU_DIRECTORY_CANONICAL_UUID);
24
25 int status = app.read_object(object_uuid, fetched_object);
26
27 if (status) {
28 printf("Error: failed to read image directory\n");
29 return;
30 }
31
32 if (fetched_object.size() < offsetof(fwu_image_directory, img_info_entry)) {
33 printf("Error: invalid image directory size\n");
34 return;
35 }
36
37 const struct fwu_image_directory *img_dir =
38 (const struct fwu_image_directory *)fetched_object.data();
39
40 printf("\nimage_directory (size %zu bytes) :\n", fetched_object.size());
41 printf("\tdirectory_version : %d\n", img_dir->directory_version);
42 printf("\tnum_images : %d\n", img_dir->num_images);
43 printf("\tcorrect_boot : %d\n", img_dir->correct_boot);
44
45 for (unsigned int i = 0; i < img_dir->num_images; i++) {
46 printf("\timg_info_entry[%u]:\n", i);
47 printf("\t\timg_type_uuid : %s\n",
48 print_uuid(img_dir->img_info_entry[i].img_type_uuid).c_str());
49 printf("\t\tclient_permissions : 0x%x\n",
50 img_dir->img_info_entry[i].client_permissions);
51 printf("\t\timg_max_size : %d\n", img_dir->img_info_entry[i].img_max_size);
52 printf("\t\tlowest_accepted_version : %d\n",
53 img_dir->img_info_entry[i].lowest_accepted_version);
54 printf("\t\timg_version : %d\n", img_dir->img_info_entry[i].img_version);
55 printf("\t\taccepted : %d\n", img_dir->img_info_entry[i].accepted);
56 }
57 }
58