From c1ed1cadb5a850763e4a12f879b9cde5d8fb0d6c Mon Sep 17 00:00:00 2001 From: Fancy code <258828110.@qq.com> Date: Sat, 10 Feb 2024 20:10:35 -0800 Subject: [PATCH] Improve:McuProtocol module. --- middleware/McuManager/src/McuDevice.cpp | 16 ----- middleware/McuManager/src/McuDevice.h | 1 - .../src_mock/McuManager_Mock_Test.cpp | 72 +++++++++++++++++++ utils/McuProtocol/include/McuProtocol.h | 1 - utils/McuProtocol/src/ProtocolHandle.cpp | 35 +-------- utils/McuProtocol/src/ProtocolHandle.h | 1 - 6 files changed, 74 insertions(+), 52 deletions(-) diff --git a/middleware/McuManager/src/McuDevice.cpp b/middleware/McuManager/src/McuDevice.cpp index b9cca4a8..a505d464 100644 --- a/middleware/McuManager/src/McuDevice.cpp +++ b/middleware/McuManager/src/McuDevice.cpp @@ -125,22 +125,6 @@ void McuDevice::OnlyResultReply(const unsigned int &serialNumber, const ReplyRes DeleteMcuAsk(ask); } } -void McuDevice::SetFeedingCycleForWatchDogReply(const unsigned int &serialNumber, const ReplyResult &result) -{ - std::shared_ptr ask; - SearchMcuAsk(serialNumber, ask); - if (ask) { - std::shared_ptr> realAsk = std::dynamic_pointer_cast>(ask); - if (realAsk) { - realAsk->mDataReply = static_cast(result); - ask->ReplyFinished(true); - } - else { - ask->ReplyFinished(false); - } - DeleteMcuAsk(ask); - } -} void McuDevice::DeviceRecvThread(void) { constexpr int RECV_TIMEOUT_MS = 1000; diff --git a/middleware/McuManager/src/McuDevice.h b/middleware/McuManager/src/McuDevice.h index 7149a879..7cda7925 100644 --- a/middleware/McuManager/src/McuDevice.h +++ b/middleware/McuManager/src/McuDevice.h @@ -35,7 +35,6 @@ public: public: void GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) override; void OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result) override; - void SetFeedingCycleForWatchDogReply(const unsigned int &serialNumber, const ReplyResult &result) override; public: void DeviceRecvThread(void); diff --git a/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp b/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp index 74fa1c30..ce005e6d 100644 --- a/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp +++ b/test/middleware/McuManager/src_mock/McuManager_Mock_Test.cpp @@ -246,6 +246,7 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission) std::shared_ptr testTool = std::dynamic_pointer_cast(ask); testTool->McuAskDefaultFeatures(testTool); IMcuManager::GetInstance()->GetIpcMission(ask); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. IMcuManager::GetInstance()->UnInit(); } @@ -466,4 +467,75 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_STRESS_MultiThreadWrite) } IMcuManager::GetInstance()->UnInit(); } +// ../output_files/test/bin/McuManagerTest +// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_SetDataTime +TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetDataTime) +{ + class McuAskTest : public McuAsk, public McuAskBaseTestTool + { + public: + McuAskTest() : McuAskBaseTestTool(McuAskBlock::BLOCK, + McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK + { + } + virtual ~McuAskTest() = default; + void ReplyFinished(const bool result) override + { + McuAskBaseTestTool::ReplyFinished(result); + if (result) { + LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); + // Do something here. + } + else { + LogError("Ask data falied.\n"); + } + } + }; + IMcuManager::GetInstance()->Init(); + std::shared_ptr ask = std::make_shared(); + std::shared_ptr testTool = std::dynamic_pointer_cast(ask); + testTool->McuAskDefaultFeatures(testTool); + McuAskDateTime value(2014, 1, 15, 0, 0, 0); + StatusCode code = IMcuManager::GetInstance()->SetDateTime(ask, value); + EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. + IMcuManager::GetInstance()->UnInit(); +} +// ../output_files/test/bin/McuManagerTest +// --gtest_filter=McuManagerMockTest.INTEGRATION_McuManager_AUTO_SetDataTime2 +TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_SetDataTime2) +{ + class McuAskTest : public McuAsk, public McuAskBaseTestTool + { + public: + McuAskTest() + : McuAskBaseTestTool(McuAskBlock::NOT_BLOCK, + McuAskReply::NEED_REPLY) // using McuAskBlock::NOT_BLOCK + { + } + virtual ~McuAskTest() = default; + void ReplyFinished(const bool result) override + { + McuAskBaseTestTool::ReplyFinished(result); + if (result) { + LogInfo("Ask data succeed, mDataReply = %d.\n", static_cast(mDataReply)); + // Do something here. + } + else { + LogError("Ask data falied.\n"); + } + } + }; + IMcuManager::GetInstance()->Init(); + std::shared_ptr ask = std::make_shared(); + std::shared_ptr testTool = std::dynamic_pointer_cast(ask); + testTool->McuAskDefaultFeatures(testTool); + McuAskDateTime value(2014, 1, 15, 0, 0, 0); + StatusCode code = IMcuManager::GetInstance()->SetDateTime(ask, value); + EXPECT_EQ(code.mStatusCode, STATUS_CODE_OK); // STATUS_CODE_OK means write data to mcu succeed. + std::this_thread::sleep_for(std::chrono::milliseconds(2000)); + EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted. + IMcuManager::GetInstance()->UnInit(); +} } // namespace McuManagerMockTest \ No newline at end of file diff --git a/utils/McuProtocol/include/McuProtocol.h b/utils/McuProtocol/include/McuProtocol.h index f6359ef0..2ea2c6e3 100644 --- a/utils/McuProtocol/include/McuProtocol.h +++ b/utils/McuProtocol/include/McuProtocol.h @@ -89,7 +89,6 @@ public: static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr); virtual void GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) {} virtual void OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result) {} - virtual void SetFeedingCycleForWatchDogReply(const unsigned int &serialNumber, const ReplyResult &result) {} }; class McuProtocol : virtual public VProtocolBase { diff --git a/utils/McuProtocol/src/ProtocolHandle.cpp b/utils/McuProtocol/src/ProtocolHandle.cpp index 97fb1cbd..c0ca8ed3 100644 --- a/utils/McuProtocol/src/ProtocolHandle.cpp +++ b/utils/McuProtocol/src/ProtocolHandle.cpp @@ -44,8 +44,7 @@ ProtocolHandle::ProtocolHandle(const void *data, const size_t &length) } mProtocolDataLength = length; mAnalyzePacketFunc[REPLY_IPC_MISSION] = std::bind(&ProtocolHandle::AnalyzeReplyIpcMissionPacket, this, _1); - mAnalyzePacketFunc[REPLY_SET_FEEDING_CYCLE] = - std::bind(&ProtocolHandle::AnalyzeReplySetFeedingCyclePacket, this, _1); + mAnalyzePacketFunc[REPLY_SET_FEEDING_CYCLE] = std::bind(&ProtocolHandle::AnalyzeReplyResultPacket, this, _1); mAnalyzePacketFunc[REPLY_SET_DATE_TIME] = std::bind(&ProtocolHandle::AnalyzeReplyResultPacket, this, _1); } ProtocolHandle::~ProtocolHandle() @@ -133,30 +132,7 @@ void ProtocolHandle::MakeAskFeedWatchDogPacket(const std::shared_ptr ¶m) { - constexpr int PARAM_DATA_LENGTH = sizeof(WatchDogParam); - size_t packetLength = KEY_HEAD_LENGTH + PARAM_DATA_LENGTH + CHECK_CODE_LENGTH; - mProtocolData = (unsigned char *)malloc(packetLength); - if (nullptr == mProtocolData) { - LogError("malloc failed, MakeAskIpcMissionPacket return.\n"); - return; - } - std::shared_ptr> SetParam = - std::dynamic_pointer_cast>(param); - if (!SetParam) { - LogError("Invalid param.\n"); - return; - } - ProtocolPacket packet = CreatePocketWithSerialNumber(); - packet.mHead = PROTOCOL_HEAD; - packet.mCommand = param->mCommand; - packet.mLength = packetLength; - BigEndianConversion(packet); - memcpy(mProtocolData, &packet, KEY_HEAD_LENGTH); - memcpy(mProtocolData + KEY_HEAD_LENGTH, &(SetParam->mData), PARAM_DATA_LENGTH); - packet.mCheckCode = calculate_check_sum(mProtocolData, packetLength - CHECK_CODE_LENGTH); - // packet.mCheckCode = BigEndianConversion(packet.mCheckCode); - memcpy(mProtocolData + packetLength - CHECK_CODE_LENGTH, &packet.mCheckCode, CHECK_CODE_LENGTH); - mProtocolDataLength = packetLength; + MakeProtocolData(param); } void ProtocolHandle::MakeAskSetDateTimePacket(const std::shared_ptr ¶m) { @@ -212,13 +188,6 @@ void ProtocolHandle::AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet) unsigned char ipcMission = ReplyOneBytePacketResult(packet); VProtocolRecv::GetInstance()->GetIpcMissionReply(mProtocolSerialNumber, ipcMission); } -void ProtocolHandle::AnalyzeReplySetFeedingCyclePacket(const ProtocolPacket &packet) -{ - LogInfo("AnalyzeReplySetFeedingCyclePacket\n"); - unsigned char replyResult = ReplyOneBytePacketResult(packet); - VProtocolRecv::GetInstance()->SetFeedingCycleForWatchDogReply(mProtocolSerialNumber, - static_cast(replyResult)); -} bool ProtocolHandle::CheckoutTheCheckCode(const ProtocolPacket &packet) { short code = calculate_check_sum(mProtocolData, mProtocolDataLength - CHECK_CODE_LENGTH); diff --git a/utils/McuProtocol/src/ProtocolHandle.h b/utils/McuProtocol/src/ProtocolHandle.h index d735b090..8e8b8c0d 100644 --- a/utils/McuProtocol/src/ProtocolHandle.h +++ b/utils/McuProtocol/src/ProtocolHandle.h @@ -147,7 +147,6 @@ private: unsigned char ReplyOneBytePacketResult(const ProtocolPacket &packet); void AnalyzeReplyResultPacket(const ProtocolPacket &packet); void AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet); - void AnalyzeReplySetFeedingCyclePacket(const ProtocolPacket &packet); private: virtual void BigEndianConversion(ProtocolPacket &packet) {}