diff --git a/XYParser/XYEegParserExample.cpp b/XYParser/XYEegParserExample.cpp index 7c5b008..e9efa0a 100644 --- a/XYParser/XYEegParserExample.cpp +++ b/XYParser/XYEegParserExample.cpp @@ -7,7 +7,7 @@ namespace { -std::vector BuildMinimalFrame(std::uint8_t channel_count) +std::vector BuildMinimalFrame(std::uint8_t channel_count, std::uint32_t frame_index) { constexpr std::size_t kSamplesPerFrame = 5; constexpr std::uint8_t kHeader = 0xAA; @@ -24,10 +24,10 @@ std::vector BuildMinimalFrame(std::uint8_t channel_count) frame[offset++] = kHeader; // index, little endian - frame[offset++] = 0x01; - frame[offset++] = 0x00; - frame[offset++] = 0x00; - frame[offset++] = 0x00; + frame[offset++] = static_cast(frame_index & 0xFF); + frame[offset++] = static_cast((frame_index >> 8) & 0xFF); + frame[offset++] = static_cast((frame_index >> 16) & 0xFF); + frame[offset++] = static_cast((frame_index >> 24) & 0xFF); // payload length, big endian frame[offset++] = static_cast((payload_length >> 8) & 0xFF); @@ -57,6 +57,11 @@ std::vector BuildMinimalFrame(std::uint8_t channel_count) return frame; } +std::vector BuildMinimalFrame(std::uint8_t channel_count) +{ + return BuildMinimalFrame(channel_count, 1U); +} + } // namespace void MinimalExampleFor8ChParser() diff --git a/XYParser/XYParserTests/Tests.cpp b/XYParser/XYParserTests/Tests.cpp index c4c126c..e83c6ac 100644 --- a/XYParser/XYParserTests/Tests.cpp +++ b/XYParser/XYParserTests/Tests.cpp @@ -43,8 +43,9 @@ private: /// 构建最小帧数据的辅助函数 /// 生成符合 XYParser 协议格式的测试帧数据 /// @param channel_count 通道数量 +/// @param frame_index 帧索引,小端写入标签区前 4 字节 /// @return 包含完整帧数据的字节向量 -std::vector BuildMinimalFrame(std::uint8_t channel_count) +std::vector BuildMinimalFrame(std::uint8_t channel_count, std::uint32_t frame_index) { constexpr std::size_t kSamplesPerFrame = 5; ///< 每帧采样数 constexpr std::uint8_t kHeader = 0xAA; ///< 帧头标记 @@ -62,11 +63,11 @@ std::vector BuildMinimalFrame(std::uint8_t channel_count) // 写入帧头 frame[offset++] = kHeader; - // 写入标签数据(版本号等) - frame[offset++] = 0x01; - frame[offset++] = 0x00; - frame[offset++] = 0x00; - frame[offset++] = 0x00; + // 写入标签数据中的帧索引(小端序) + frame[offset++] = static_cast(frame_index & 0xFF); + frame[offset++] = static_cast((frame_index >> 8) & 0xFF); + frame[offset++] = static_cast((frame_index >> 16) & 0xFF); + frame[offset++] = static_cast((frame_index >> 24) & 0xFF); // 写入负载长度(大端序) frame[offset++] = static_cast((payload_length >> 8) & 0xFF); @@ -99,6 +100,12 @@ std::vector BuildMinimalFrame(std::uint8_t channel_count) return frame; } +/// 为现有调用点保留默认 frame_index=1 的便捷重载 +std::vector BuildMinimalFrame(std::uint8_t channel_count) +{ + return BuildMinimalFrame(channel_count, 1U); +} + } // namespace /// 测试:创建解析器时拒绝不支持的通道数 @@ -336,8 +343,8 @@ TEST(XYParserApiTests, FeedParsesMultipleFrames) XYParser_SetBypassChecksum(parser.get(), 1); // 构建两个连续的帧 - const std::vector frame1 = BuildMinimalFrame(8); - const std::vector frame2 = BuildMinimalFrame(8); + const std::vector frame1 = BuildMinimalFrame(8, 1U); + const std::vector frame2 = BuildMinimalFrame(8, 2U); std::vector combined(frame1); combined.insert(combined.end(), frame2.begin(), frame2.end()); @@ -368,7 +375,7 @@ TEST(XYParserApiTests, FeedIncrementsFrameIndex) int total_frames = 0; for (int i = 0; i < 3; ++i) { - const std::vector frame = BuildMinimalFrame(8); + const std::vector frame = BuildMinimalFrame(8, static_cast(i + 1)); const int count = XYParser_Feed( parser.get(), frame.data(), @@ -477,4 +484,4 @@ TEST(XYParserApiTests, GetLastErrorReturnsMessageForNullParser) { EXPECT_EQ(std::string(XYParser_GetLastError(nullptr)), std::string("invalid parser handle")); } -*/ \ No newline at end of file +*/