Improve:McuProtocol module.
This commit is contained in:
parent
74a9705d97
commit
c1ed1cadb5
|
@ -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<VMcuAsk> ask;
|
||||
SearchMcuAsk(serialNumber, ask);
|
||||
if (ask) {
|
||||
std::shared_ptr<McuAsk<ASK_RESULT>> realAsk = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(ask);
|
||||
if (realAsk) {
|
||||
realAsk->mDataReply = static_cast<ASK_RESULT>(result);
|
||||
ask->ReplyFinished(true);
|
||||
}
|
||||
else {
|
||||
ask->ReplyFinished(false);
|
||||
}
|
||||
DeleteMcuAsk(ask);
|
||||
}
|
||||
}
|
||||
void McuDevice::DeviceRecvThread(void)
|
||||
{
|
||||
constexpr int RECV_TIMEOUT_MS = 1000;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -246,6 +246,7 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_GetIpcMission)
|
|||
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
|
||||
// Do something here.
|
||||
}
|
||||
else {
|
||||
LogError("Ask data falied.\n");
|
||||
}
|
||||
}
|
||||
};
|
||||
IMcuManager::GetInstance()->Init();
|
||||
std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
|
||||
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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<ASK_RESULT>, 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<int>(mDataReply));
|
||||
// Do something here.
|
||||
}
|
||||
else {
|
||||
LogError("Ask data falied.\n");
|
||||
}
|
||||
}
|
||||
};
|
||||
IMcuManager::GetInstance()->Init();
|
||||
std::shared_ptr<VMcuAsk> ask = std::make_shared<McuAskTest>();
|
||||
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(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
|
|
@ -89,7 +89,6 @@ public:
|
|||
static std::shared_ptr<VProtocolRecv> &GetInstance(std::shared_ptr<VProtocolRecv> *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
|
||||
{
|
||||
|
|
|
@ -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<VProtocolPa
|
|||
}
|
||||
void ProtocolHandle::MakeAskSetFeedingCyclePacket(const std::shared_ptr<VProtocolParam> ¶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<ProtocolParam<WatchDogParam>> SetParam =
|
||||
std::dynamic_pointer_cast<ProtocolParam<WatchDogParam>>(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<WatchDogParam>(param);
|
||||
}
|
||||
void ProtocolHandle::MakeAskSetDateTimePacket(const std::shared_ptr<VProtocolParam> ¶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>(replyResult));
|
||||
}
|
||||
bool ProtocolHandle::CheckoutTheCheckCode(const ProtocolPacket &packet)
|
||||
{
|
||||
short code = calculate_check_sum(mProtocolData, mProtocolDataLength - CHECK_CODE_LENGTH);
|
||||
|
|
|
@ -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) {}
|
||||
|
|
Loading…
Reference in New Issue
Block a user