-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsrc_manager.hpp
More file actions
93 lines (69 loc) · 2.71 KB
/
Copy pathsrc_manager.hpp
File metadata and controls
93 lines (69 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#ifndef SRC_MANAGER_HPP
#define SRC_MANAGER_HPP
#include <vector>
#include <string>
#include <cstdint>
#include <ostream>
#include <map>
#include "include_src.hpp"
/// 数据头结构体 32 + 2
struct src_head_t {
char version[32]; // 文件版本/名称,例如 "MQ2_V1_20250815"
uint16_t resource_count; // 顶层资源数
uint16_t image_count; // 图像资源数量
uint16_t font_count; // 字体资源数量
uint16_t reserved1; // 对齐填充/保留
uint32_t total_size; // 数据区总大小(字节)
uint32_t addr_table_addr;// 地址表起始位置(相对于文件头)
// uint32_t addr_table_size; // 地址表总大小(字节)
uint32_t reserved[4]; // 预留扩展(CRC、压缩方式等)
};
#pragma pack(push, 1)
/// 地址表项结构体 - 扩展版本,包含更多元数据 64 字节
struct src_addr_item_t {
uint32_t id; // 全局唯一 ID
uint32_t parent_id; // 父资源 ID (0 表示顶级)
uint32_t start_addr; // 数据起始地址
uint32_t size; // 数据大小
uint16_t type; // is_image/is_font/is_audio/is_font_char
uint32_t char_code; // 仅当 font_char 时有效(Unicode 编码)
// 图像元数据(当 type == is_image 或 is_font_char 时有效)
uint16_t width; // 图像宽度(像素)
uint16_t height; // 图像高度(像素)
uint8_t dataSize; // 每像素 bit 数(一般为16)
uint8_t reserved1; // 保留字段,用于对齐
// 字体元数据(当 type == is_font 时有效)
uint16_t char_count; // 字体包含的字符数量
uint16_t reserved2; // 保留字段,用于对齐
char name[32]; // 资源名(减少长度以适应新增字段)
};
#pragma pack(pop)
/// 注册的资源结构体
struct src_item_t {
void* data; // 指向 tImage* 或 tFont*
is_type_e type; // 资源类型
std::string name; // 资源名称
size_t satrt_addr; // 存储地址
size_t end_addr;
size_t data_byte_count; // 数据大小(以字节为单位)
std::vector<src_addr_item_t> addr_table; // 该项资源的地址表
};
// 已注册资源数组和数量
extern uint16_t reg_src_count;
extern uint16_t reg_src_image_count;
extern uint16_t reg_src_font_count;
extern src_head_t src_head;
extern std::vector<src_item_t> src_item_array;
/// 资源注册函数
void src_manager_init(); // 初始化并注册所有资源
void src_manager_deinit(); // 清空资源(一般用于工具结束后)
/// 数据头创建函数
void creat_flash_data_head(std::string name);
// 数额据写入函数
void src_manager_write_head(std::ostream& os, src_head_t head);
void src_manager_write_addr_table(std::ostream& os);
void src_manager_write_data(std::ostream& os);
/// 数据验证
bool src_manager_verify_data();
void name_add_time_str(std::string* bin_file_name, std::string* log_file_name);
#endif // SRC_MANAGER_HPP