blob: 1e07027510dfc3246720240c4cd16b75497c28ec [file] [log] [blame]
Julian Hall351a0722023-01-12 11:58:42 +00001/*
2 * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Gyorgy Szing3c446242023-03-31 01:53:15 +02007#include "cmd_print_image_dir.h"
8
Julian Hall351a0722023-01-12 11:58:42 +00009#include <cstdint>
10#include <cstdio>
11#include <cstdlib>
Gyorgy Szing3c446242023-03-31 01:53:15 +020012#include <vector>
Julian Hall351a0722023-01-12 11:58:42 +000013
Gyorgy Szing3c446242023-03-31 01:53:15 +020014#include "common/uuid/uuid.h"
15#include "print_uuid.h"
16#include "protocols/service/fwu/packed-c/fwu_proto.h"
17
18void cmd_print_image_dir(fwu_app &app)
Julian Hall351a0722023-01-12 11:58:42 +000019{
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) {
Julian Hall351a0722023-01-12 11:58:42 +000028 printf("Error: failed to read image directory\n");
29 return;
30 }
31
32 if (fetched_object.size() < offsetof(ts_fwu_image_directory, img_info_entry)) {
Julian Hall351a0722023-01-12 11:58:42 +000033 printf("Error: invalid image directory size\n");
34 return;
35 }
36
37 const struct ts_fwu_image_directory *img_dir =
38 (const struct ts_fwu_image_directory *)fetched_object.data();
39
Gyorgy Szing3c446242023-03-31 01:53:15 +020040 printf("\nimage_directory (size %zu bytes) :\n", fetched_object.size());
Julian Hall351a0722023-01-12 11:58:42 +000041 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++) {
Gyorgy Szing3c446242023-03-31 01:53:15 +020046 printf("\timg_info_entry[%u]:\n", i);
Julian Hall351a0722023-01-12 11:58:42 +000047 printf("\t\timg_type_uuid : %s\n",
Gyorgy Szing3c446242023-03-31 01:53:15 +020048 print_uuid(img_dir->img_info_entry[i].img_type_uuid).c_str());
Julian Hall351a0722023-01-12 11:58:42 +000049 printf("\t\tclient_permissions : 0x%x\n",
Gyorgy Szing3c446242023-03-31 01:53:15 +020050 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);
Julian Hall351a0722023-01-12 11:58:42 +000052 printf("\t\tlowest_accepted_version : %d\n",
Gyorgy Szing3c446242023-03-31 01:53:15 +020053 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);
Julian Hall351a0722023-01-12 11:58:42 +000056 }
57}