9#include "lockfree_list.hpp"
10#include "lockfree_pool.hpp"
41 typedef const char* StringData;
42 static constexpr size_t STRING_LIST_SIZE = 3;
69 template <
size_t N1,
size_t N2,
size_t N3>
71 const char (&manu)[N1],
72 const char (&prod)[N2],
73 const char (&serial)[N3])
75 static_assert(N1 < 128 && N2 < 128 && N3 < 128,
76 "String length must be less than 128.");
78 auto len_manu = CalcUTF16LELen(manu);
79 auto len_prod = CalcUTF16LELen(prod);
80 auto len_serial = CalcUTF16LELen(serial);
82 size_t maxlen = len_manu;
83 if (len_prod > maxlen)
87 if (len_serial > maxlen)
93 lang, {manu, prod, serial}, {len_manu, len_prod, len_serial}, maxlen};
129 static constexpr size_t CalcUTF16LELen(
const char (&input)[N])
132 for (
size_t i = 0; i < N && input[i];)
134 unsigned char c =
static_cast<unsigned char>(input[i]);
140 else if ((c & 0xE0) == 0xC0)
145 else if ((c & 0xF0) == 0xE0)
158 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
ErrorCode GenerateString(Index index, uint16_t lang)
生成指定语言和索引的字符串描述符 Generate USB string descriptor for given language and string index
const size_t LANG_NUM
已注册语言数量 / Registered language count
RawData GetData()
获取当前构建好的字符串描述符数据 Get the descriptor buffer
DescriptorStrings(const std::initializer_list< const LanguagePack * > &lang_list)
USB 描述符字符串管理器构造函数 USB descriptor string manager constructor.
RawData buffer_
临时描述符缓冲区 / Temp descriptor buffer
RawData GetLangIDData()
获取语言ID描述符内容 Get LangID descriptor data
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
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]
StringData strings[STRING_LIST_SIZE]
size_t max_string_length
最大字符串长度 / Maximum string length