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