1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 6 #ifndef VBOOT_REFERENCE_BMPBLK_UTILITY_H_ 7 #define VBOOT_REFERENCE_BMPBLK_UTILITY_H_ 8 9 #include "bmpblk_header.h" 10 #include "bmpblk_font.h" 11 #include "image_types.h" 12 13 #include <yaml.h> 14 15 #include <map> 16 #include <string> 17 #include <vector> 18 19 using std::map; 20 using std::string; 21 using std::vector; 22 23 namespace vboot_reference { 24 25 /* Internal struct for contructing ImageInfo. */ 26 typedef struct ImageConfig { 27 ImageInfo data; 28 string filename; 29 string raw_content; 30 string compressed_content; 31 uint32_t offset; 32 } ImageConfig; 33 34 /* Internal struct for contructing ScreenLayout. */ 35 typedef struct ScreenConfig { 36 ScreenLayout data; 37 string image_names[MAX_IMAGE_IN_LAYOUT]; 38 } ScreenConfig; 39 40 typedef map<string, ImageConfig> StrImageConfigMap; 41 typedef map<string, ScreenConfig> StrScreenConfigMap; 42 43 /* Internal struct for contructing the whole BmpBlock. */ 44 typedef struct BmpBlockConfig { 45 string config_filename; 46 BmpBlockHeader header; 47 vector<string> image_names; 48 StrImageConfigMap images_map; 49 StrScreenConfigMap screens_map; 50 vector<vector<string> > localizations; 51 string locale_names; 52 } BmpBlockConfig; 53 54 class BmpBlockUtil { 55 public: 56 BmpBlockUtil(bool debug); 57 ~BmpBlockUtil(); 58 59 /* Load all the images and related infomations according to a config file. */ 60 void load_from_config(const char *filename); 61 62 /* Contruct the bmpblock. */ 63 void pack_bmpblock(); 64 65 /* Write the bmpblock to a file */ 66 void write_to_bmpblock(const char *filename); 67 68 /* What compression to use for the images */ 69 void force_compression(uint32_t compression); 70 71 private: 72 /* Elemental function called from load_from_config. 73 * Load the config file (yaml format) and parse it. */ 74 void load_yaml_config(const char *filename); 75 76 /* Elemental function called from load_from_config. 77 * Load all image files into the internal variables. */ 78 void load_all_image_files(); 79 80 /* Elemental function called from load_from_config. 81 * Contruct the BmpBlockHeader struct. */ 82 void fill_bmpblock_header(); 83 84 /* Helper functions for parsing a YAML config file. */ 85 void expect_event(yaml_parser_t *parser, const yaml_event_type_e type); 86 void parse_config(yaml_parser_t *parser); 87 void parse_first_layer(yaml_parser_t *parser); 88 void parse_bmpblock(yaml_parser_t *parser); 89 void parse_compression(yaml_parser_t *parser); 90 void parse_images(yaml_parser_t *parser); 91 void parse_layout(yaml_parser_t *parser, ScreenConfig &screen); 92 void parse_screens(yaml_parser_t *parser); 93 void parse_localizations(yaml_parser_t *parser); 94 void parse_locale_index(yaml_parser_t *parser); 95 96 /* Useful functions */ 97 const string read_image_file(const char *filename); 98 99 /* Verbosity flags */ 100 bool debug_; 101 102 /* Internal variable for string the BmpBlock version. */ 103 uint16_t major_version_; 104 uint16_t minor_version_; 105 106 /* Flags for version-specific features */ 107 bool render_hwid_; 108 bool support_font_; 109 bool got_font_; 110 bool got_rtol_font_; 111 112 /* Internal variable for storing the config of BmpBlock. */ 113 BmpBlockConfig config_; 114 115 /* Internal variable for storing the content of BmpBlock. */ 116 string bmpblock_; 117 118 /* Internal variables to determine whether or not to specify compression */ 119 bool set_compression_; // true if we force it 120 uint32_t compression_; // what we force it to 121 }; 122 123 } // namespace vboot_reference 124 125 #endif // VBOOT_REFERENCE_BMPBLK_UTILITY_H_ 126