优化
This commit is contained in:
@@ -59,35 +59,57 @@ std::string packet_to_escape_format(std::string_view t) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
void Binary_Format_handle_buffer(
|
||||
std::string& buffer, std::string_view data,
|
||||
const std::function<void(std::string&)>& callback) {
|
||||
size_t i = 0;
|
||||
while (i < data.size()) {
|
||||
if (data[i] == 0x1A) {
|
||||
// 如果遇到起始标记 0x1A
|
||||
if (i + 1 < data.size() && data[i + 1] == 0x1A) {
|
||||
// 如果是转义的 0x1A 0x1A,继续处理
|
||||
buffer.push_back(0x1A); // 添加一个正常的 0x1A 字节
|
||||
i += 2; // 跳过这两个字节
|
||||
}
|
||||
else {
|
||||
// 检测到起始标记 0x1A,认为是新消息的开始
|
||||
if (!buffer.empty()) {
|
||||
// 如果当前消息 buffer 中已有数据,调用回调函数处理当前消息
|
||||
callback(buffer);
|
||||
buffer.clear(); // 清空当前消息的缓存
|
||||
}
|
||||
buffer.push_back(0x1A);
|
||||
// 跳过当前的 SOP 标记 (0x1A)
|
||||
i++;
|
||||
}
|
||||
// void Binary_Format_handle_buffer(std::string& buffer, std::string_view data, const std::function<void(std::string&)>& callback) {
|
||||
// size_t i = 0;
|
||||
// while (i < data.size()) {
|
||||
// if (data[i] == 0x1A) {
|
||||
// // 如果遇到起始标记 0x1A
|
||||
// if (i + 1 < data.size() && data[i + 1] == 0x1A) {
|
||||
// // 如果是转义的 0x1A 0x1A,继续处理
|
||||
// buffer.push_back(0x1A); // 添加一个正常的 0x1A 字节
|
||||
// i += 2; // 跳过这两个字节
|
||||
// }
|
||||
// else {
|
||||
// // 检测到起始标记 0x1A,认为是新消息的开始
|
||||
// if (!buffer.empty()) {
|
||||
// // 如果当前消息 buffer 中已有数据,调用回调函数处理当前消息
|
||||
// callback(buffer);
|
||||
// buffer.clear(); // 清空当前消息的缓存
|
||||
// }
|
||||
// buffer.push_back(0x1A);
|
||||
// // 跳过当前的 SOP 标记 (0x1A)
|
||||
// i++;
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// // 如果不是 0x1A,直接将数据添加到 buffer 中
|
||||
// buffer.push_back(data[i]);
|
||||
// i++;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
void Binary_Format_handle_buffer(std::string& buffer, std::string_view data_view, const std::function<void(std::string&)>& callback) {
|
||||
constexpr char sop = 0x1A;
|
||||
buffer.reserve(buffer.size() + data_view.size());
|
||||
std::size_t i = 0;
|
||||
while (i < data_view.size()) {
|
||||
auto pos = data_view.find(sop, i);
|
||||
if (pos == std::string_view::npos) {
|
||||
buffer.append(data_view.data() + i, data_view.size() - i);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
// 如果不是 0x1A,直接将数据添加到 buffer 中
|
||||
buffer.push_back(data[i]);
|
||||
i++;
|
||||
buffer.append(data_view.data() + i, pos - i);
|
||||
if (pos + 1 < data_view.size() && data_view[pos + 1] == sop) {
|
||||
buffer.push_back(sop);
|
||||
i = pos + 2;
|
||||
continue;
|
||||
}
|
||||
if (!buffer.empty()) {
|
||||
callback(buffer);
|
||||
buffer.clear();
|
||||
}
|
||||
buffer.push_back(sop);
|
||||
i = pos + 1;
|
||||
}
|
||||
}
|
||||
// 9 + 2
|
||||
|
||||
@@ -360,9 +360,7 @@ inline std::uint8_t get_len(std::string_view msg) {
|
||||
// Before Escaping: 1A 32 27 1A E8 57 F0 1A 6C
|
||||
// During Transmission: 1A 32 27 1A 1A E8 57 F0 1A 1A 6C
|
||||
// After Un-Escaping: 1A 32 27 1A E8 57 F0 1A 6C
|
||||
void Binary_Format_handle_buffer(
|
||||
std::string& buffer, std::string_view data,
|
||||
const std::function<void(std::string&)>& callback);
|
||||
void Binary_Format_handle_buffer(std::string& buffer, std::string_view data, const std::function<void(std::string&)>& callback);
|
||||
/* Command Message (Host ==> Device)
|
||||
The command-message has a simple ASCII based structure. Each message starts with
|
||||
a ‘#’ (0x23) and ends with ‘<CR><LF>’ (0x0D, 0x0A). In-between are one to 16
|
||||
@@ -373,8 +371,7 @@ first byte is mandatory and holds the command while the remaining bytes are
|
||||
parameters. Available commands depend on the selected protocol and are discussed
|
||||
in the respective protocol section.
|
||||
*/
|
||||
std::string mode_s_msg_packet_to_server_packet(std::uint32_t id,
|
||||
std::string_view packet);
|
||||
std::string mode_s_msg_packet_to_server_packet(std::uint32_t id, std::string_view packet);
|
||||
// 1a34 radarcape 状态帧消息
|
||||
// https://wiki.jetvision.de/wiki/Radarcape:Version_History#Status_Frame_0x34_contents_were_extended_with_GPS_and_UTC_information
|
||||
// 状态帧0x34内容已扩展为 GPS 和 UTC 信息
|
||||
|
||||
Reference in New Issue
Block a user