7#include "libxr_type.hpp"
37 typedef const char* StringData;
38 static constexpr size_t STRING_LIST_SIZE = 3;
56 template <
size_t N1,
size_t N2,
size_t N3>
58 const char (&manu)[N1],
59 const char (&prod)[N2],
60 const char (&serial)[N3])
62 static_assert(N1 < 128 && N2 < 128 && N3 < 128,
63 "String length must be less than 128.");
65 auto len_manu = CalcUTF16LELen(manu);
66 auto len_prod = CalcUTF16LELen(prod);
67 auto len_serial = CalcUTF16LELen(serial);
69 size_t maxlen = len_manu;
70 if (len_prod > maxlen)
74 if (len_serial > maxlen)
80 lang, {manu, prod, serial}, {len_manu, len_prod, len_serial}, maxlen};
94 const uint8_t* uid =
nullptr,
size_t uid_len = 0);
128 [[nodiscard]]
bool HasLanguage(uint16_t lang)
const;
132 static constexpr size_t CalcUTF16LELen(
const char (&input)[N])
135 for (
size_t i = 0; i < N && input[i];)
137 unsigned char c =
static_cast<unsigned char>(input[i]);
143 else if ((c & 0xE0) == 0xC0)
148 else if ((c & 0xF0) == 0xE0)
161 static void ToUTF16LE(
const char* str, uint8_t* buffer);
原始数据封装类。 A class for encapsulating raw data.
字符串描述符管理器 / USB string descriptor manager
Language
语言 / Supported language
@ ZH_CN
简体中文 / Simplified Chinese
const size_t LANG_NUM
已注册语言数量 / Registered language count
bool HasLanguage(uint16_t lang) const
检查是否注册了指定语言 / Check whether the given language is registered
RawData GetData()
获取当前构建好的字符串描述符数据 Get the descriptor buffer
RawData buffer_
临时描述符缓冲区 / Temp descriptor buffer
size_t serial_uid_len_
UID 字节数 / UID byte count.
RawData GetLangIDData()
获取语言ID描述符内容 Get LangID descriptor data
DescriptorStrings(const std::initializer_list< const LanguagePack * > &lang_list, const uint8_t *uid=nullptr, size_t uid_len=0)
USB 描述符字符串管理器构造函数 USB descriptor string manager constructor.
const uint8_t * serial_uid_
Index
描述符字符串索引 / USB descriptor string index
@ MANUFACTURER_STRING
厂商字符串索引 / Manufacturer string
@ PRODUCT_STRING
产品字符串索引 / Product string
@ LANGUAGE_ID
语言ID描述符 / LangID descriptor
@ SERIAL_NUMBER_STRING
序列号字符串索引 / Serial number string
const LanguagePack ** string_list_
多语言包指针表 / LanguagePack pointer table
ErrorCode GenerateString(Index index, uint16_t lang)
生成指定语言和索引的字符串描述符 Generate USB string descriptor for given language and string index
uint16_t * land_id_
语言ID数组 / LangID array
static const constexpr LanguagePack MakeLanguagePack(Language lang, const char(&manu)[N1], const char(&prod)[N2], const char(&serial)[N3])
编译期构造 LanguagePack Compile-time LanguagePack constructor
uint16_t * header_
语言ID描述符头部 / LangID descriptor header
单语言描述符包(用于注册静态多语言字符串) Single language USB string descriptor pack for registration
Language lang_id
语言 / Language
size_t string_lens[STRING_LIST_SIZE]
每个字符串的字节数 / String byte lengths
StringData strings[STRING_LIST_SIZE]
指向 UTF-16LE 静态数组 / UTF-16LE strings
size_t max_string_length
最大字符串长度 / Maximum string length