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