xref: /openbmc/phosphor-bmc-code-mgmt/test/create_package/component_image_info_area.cpp (revision c1b36628298d7799677680e70d455f85acf83650)
1 #include "create_pldm_fw_package.hpp"
2 
3 #include <inttypes.h>
4 #include <unistd.h>
5 
6 #include <cstring>
7 
8 /*
9  * componentLocationOffsetIndex  is for backfilling by the caller
10  */
11 ssize_t create_pldm_component_image_info_area_v1_0_0(
12     uint8_t* b, ssize_t i, size_t component_image_size,
13     size_t& componentLocationOffsetIndex)
14 {
15     // Component Image Count
16     b[i++] = 0x1;
17     b[i++] = 0x0;
18 
19     // ComponentImageInformation (Table 5)
20     // (1 for each image)
21 
22     // ComponentClassification
23     b[i++] = 0x1; // this is vendor selected value
24     b[i++] = 0x0;
25 
26     // ComponentIdentifier
27     b[i++] = 0x1; // this is vendor selected value
28     b[i++] = 0x0;
29 
30     // ComponentComparisonStamp
31     b[i++] = 0xff;
32     b[i++] = 0xff;
33     b[i++] = 0xff;
34     b[i++] = 0xff;
35 
36     // ComponentOptions
37     b[i++] = 0x00;
38     b[i++] = 0x00;
39 
40     // RequestedComponentActivationMethod
41     b[i++] = 0b100000; // AC Power Cycle
42     b[i++] = 0x0;
43 
44     // ComponentLocationOffset
45     // (leave blank for now)
46     componentLocationOffsetIndex = i;
47     b[i++] = 0x0;
48     b[i++] = 0x0;
49     b[i++] = 0x0;
50     b[i++] = 0x0;
51 
52     // ComponentSize
53     b[i++] = (component_image_size >> 0) & 0xff;
54     b[i++] = (component_image_size >> 8) & 0xff;
55     b[i++] = (component_image_size >> 16) & 0xff;
56     b[i++] = (component_image_size >> 24) & 0xff;
57 
58     // ComponentVersionStringType
59     b[i++] = 0x1; // type = Ascii
60 
61     const char* buf = exampleVersion;
62     // ComponentVersionStringLength
63     b[i++] = strlen(buf);
64 
65     // ComponentVersionString
66     for (ssize_t j = 0; j < (ssize_t)strlen(buf); j++)
67     {
68         b[i++] = buf[j];
69     }
70 
71     return i;
72 }
73