mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-24 18:25:10 +00:00
This change adds an additional (optional) section to the .yaml file which can enumerate the names of the locales. If present, these names will be appended to the end of the bmpblock and the (new) locale_string_offset field in the BmpBlockHeader will point to it. The names are encoded as a series of null-terminated ASCII strings. The end of the series is indicated by an extra null (for example, "en_US\0fr\0\0" names two locales). The BIOS does not use this information. Factory or OOBE could use it to select the initiale locale for the BIOS screens from the list of locales included in the BmpBlock. BUG=chrome-os-partner:3868 TEST=none Change-Id: I34fd9ece27343d56ec43772de975ac6f2ad7c9a6 Reviewed-on: http://gerrit.chromium.org/gerrit/1156 Reviewed-by: Hung-Te Lin <hungte@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org>
124 lines
3.5 KiB
C++
124 lines
3.5 KiB
C++
// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
|
|
#ifndef VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|
|
#define VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|
|
|
|
#include "bmpblk_header.h"
|
|
|
|
#include <yaml.h>
|
|
|
|
#include <map>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
using std::map;
|
|
using std::string;
|
|
using std::vector;
|
|
|
|
namespace vboot_reference {
|
|
|
|
/* Internal struct for contructing ImageInfo. */
|
|
typedef struct ImageConfig {
|
|
ImageInfo data;
|
|
string filename;
|
|
string raw_content;
|
|
string compressed_content;
|
|
uint32_t offset;
|
|
} ImageConfig;
|
|
|
|
/* Internal struct for contructing ScreenLayout. */
|
|
typedef struct ScreenConfig {
|
|
ScreenLayout data;
|
|
string image_names[MAX_IMAGE_IN_LAYOUT];
|
|
} ScreenConfig;
|
|
|
|
typedef map<string, ImageConfig> StrImageConfigMap;
|
|
typedef map<string, ScreenConfig> StrScreenConfigMap;
|
|
|
|
/* Internal struct for contructing the whole BmpBlock. */
|
|
typedef struct BmpBlockConfig {
|
|
string config_filename;
|
|
BmpBlockHeader header;
|
|
vector<string> image_names;
|
|
StrImageConfigMap images_map;
|
|
StrScreenConfigMap screens_map;
|
|
vector<vector<string> > localizations;
|
|
string locale_names;
|
|
} BmpBlockConfig;
|
|
|
|
class BmpBlockUtil {
|
|
public:
|
|
BmpBlockUtil(bool debug);
|
|
~BmpBlockUtil();
|
|
|
|
/* Load all the images and related infomations according to a config file. */
|
|
void load_from_config(const char *filename);
|
|
|
|
/* Contruct the bmpblock. */
|
|
void pack_bmpblock();
|
|
|
|
/* Write the bmpblock to a file */
|
|
void write_to_bmpblock(const char *filename);
|
|
|
|
/* What compression to use for the images */
|
|
void force_compression(uint32_t compression);
|
|
|
|
private:
|
|
/* Elemental function called from load_from_config.
|
|
* Load the config file (yaml format) and parse it. */
|
|
void load_yaml_config(const char *filename);
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Load all image files into the internal variables. */
|
|
void load_all_image_files();
|
|
|
|
/* Elemental function called from load_from_config.
|
|
* Contruct the BmpBlockHeader struct. */
|
|
void fill_bmpblock_header();
|
|
|
|
/* Helper functions for parsing a YAML config file. */
|
|
void expect_event(yaml_parser_t *parser, const yaml_event_type_e type);
|
|
void parse_config(yaml_parser_t *parser);
|
|
void parse_first_layer(yaml_parser_t *parser);
|
|
void parse_bmpblock(yaml_parser_t *parser);
|
|
void parse_compression(yaml_parser_t *parser);
|
|
void parse_images(yaml_parser_t *parser);
|
|
void parse_layout(yaml_parser_t *parser, ScreenConfig &screen);
|
|
void parse_screens(yaml_parser_t *parser);
|
|
void parse_localizations(yaml_parser_t *parser);
|
|
void parse_locale_index(yaml_parser_t *parser);
|
|
|
|
/* Useful functions */
|
|
const string read_image_file(const char *filename);
|
|
ImageFormat get_image_format(const string content);
|
|
uint32_t get_bmp_image_width(const string content);
|
|
uint32_t get_bmp_image_height(const string content);
|
|
|
|
/* Verbosity flags */
|
|
bool debug_;
|
|
|
|
/* Internal variable for string the BmpBlock version. */
|
|
uint16_t major_version_;
|
|
uint16_t minor_version_;
|
|
|
|
/* Flags for version-specific features */
|
|
bool render_hwid_;
|
|
|
|
/* Internal variable for storing the config of BmpBlock. */
|
|
BmpBlockConfig config_;
|
|
|
|
/* Internal variable for storing the content of BmpBlock. */
|
|
string bmpblock_;
|
|
|
|
/* Internal variables to determine whether or not to specify compression */
|
|
bool set_compression_; // true if we force it
|
|
uint32_t compression_; // what we force it to
|
|
};
|
|
|
|
} // namespace vboot_reference
|
|
|
|
#endif // VBOOT_REFERENCE_BMPBLK_UTILITY_H_
|