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);
|
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)
|
void McuDevice::DeviceRecvThread(void)
|
||||||
{
|
{
|
||||||
constexpr int RECV_TIMEOUT_MS = 1000;
|
constexpr int RECV_TIMEOUT_MS = 1000;
|
||||||
|
|
|
@ -35,7 +35,6 @@ public:
|
||||||
public:
|
public:
|
||||||
void GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) override;
|
void GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) override;
|
||||||
void OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result) override;
|
void OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result) override;
|
||||||
void SetFeedingCycleForWatchDogReply(const unsigned int &serialNumber, const ReplyResult &result) override;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void DeviceRecvThread(void);
|
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);
|
std::shared_ptr<McuAskBaseTestTool> testTool = std::dynamic_pointer_cast<McuAskBaseTestTool>(ask);
|
||||||
testTool->McuAskDefaultFeatures(testTool);
|
testTool->McuAskDefaultFeatures(testTool);
|
||||||
IMcuManager::GetInstance()->GetIpcMission(ask);
|
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.
|
EXPECT_EQ(CheckAskExist(ask), false); // Ensure that the request has been processed and deleted.
|
||||||
IMcuManager::GetInstance()->UnInit();
|
IMcuManager::GetInstance()->UnInit();
|
||||||
}
|
}
|
||||||
|
@ -466,4 +467,75 @@ TEST_F(McuManagerMockTest, INTEGRATION_McuManager_AUTO_STRESS_MultiThreadWrite)
|
||||||
}
|
}
|
||||||
IMcuManager::GetInstance()->UnInit();
|
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
|
} // namespace McuManagerMockTest
|
|
@ -89,7 +89,6 @@ public:
|
||||||
static std::shared_ptr<VProtocolRecv> &GetInstance(std::shared_ptr<VProtocolRecv> *impl = nullptr);
|
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 GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission) {}
|
||||||
virtual void OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result) {}
|
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
|
class McuProtocol : virtual public VProtocolBase
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,8 +44,7 @@ ProtocolHandle::ProtocolHandle(const void *data, const size_t &length)
|
||||||
}
|
}
|
||||||
mProtocolDataLength = length;
|
mProtocolDataLength = length;
|
||||||
mAnalyzePacketFunc[REPLY_IPC_MISSION] = std::bind(&ProtocolHandle::AnalyzeReplyIpcMissionPacket, this, _1);
|
mAnalyzePacketFunc[REPLY_IPC_MISSION] = std::bind(&ProtocolHandle::AnalyzeReplyIpcMissionPacket, this, _1);
|
||||||
mAnalyzePacketFunc[REPLY_SET_FEEDING_CYCLE] =
|
mAnalyzePacketFunc[REPLY_SET_FEEDING_CYCLE] = std::bind(&ProtocolHandle::AnalyzeReplyResultPacket, this, _1);
|
||||||
std::bind(&ProtocolHandle::AnalyzeReplySetFeedingCyclePacket, this, _1);
|
|
||||||
mAnalyzePacketFunc[REPLY_SET_DATE_TIME] = std::bind(&ProtocolHandle::AnalyzeReplyResultPacket, this, _1);
|
mAnalyzePacketFunc[REPLY_SET_DATE_TIME] = std::bind(&ProtocolHandle::AnalyzeReplyResultPacket, this, _1);
|
||||||
}
|
}
|
||||||
ProtocolHandle::~ProtocolHandle()
|
ProtocolHandle::~ProtocolHandle()
|
||||||
|
@ -133,30 +132,7 @@ void ProtocolHandle::MakeAskFeedWatchDogPacket(const std::shared_ptr<VProtocolPa
|
||||||
}
|
}
|
||||||
void ProtocolHandle::MakeAskSetFeedingCyclePacket(const std::shared_ptr<VProtocolParam> ¶m)
|
void ProtocolHandle::MakeAskSetFeedingCyclePacket(const std::shared_ptr<VProtocolParam> ¶m)
|
||||||
{
|
{
|
||||||
constexpr int PARAM_DATA_LENGTH = sizeof(WatchDogParam);
|
MakeProtocolData<WatchDogParam>(param);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
void ProtocolHandle::MakeAskSetDateTimePacket(const std::shared_ptr<VProtocolParam> ¶m)
|
void ProtocolHandle::MakeAskSetDateTimePacket(const std::shared_ptr<VProtocolParam> ¶m)
|
||||||
{
|
{
|
||||||
|
@ -212,13 +188,6 @@ void ProtocolHandle::AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet)
|
||||||
unsigned char ipcMission = ReplyOneBytePacketResult(packet);
|
unsigned char ipcMission = ReplyOneBytePacketResult(packet);
|
||||||
VProtocolRecv::GetInstance()->GetIpcMissionReply(mProtocolSerialNumber, ipcMission);
|
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)
|
bool ProtocolHandle::CheckoutTheCheckCode(const ProtocolPacket &packet)
|
||||||
{
|
{
|
||||||
short code = calculate_check_sum(mProtocolData, mProtocolDataLength - CHECK_CODE_LENGTH);
|
short code = calculate_check_sum(mProtocolData, mProtocolDataLength - CHECK_CODE_LENGTH);
|
||||||
|
|
|
@ -147,7 +147,6 @@ private:
|
||||||
unsigned char ReplyOneBytePacketResult(const ProtocolPacket &packet);
|
unsigned char ReplyOneBytePacketResult(const ProtocolPacket &packet);
|
||||||
void AnalyzeReplyResultPacket(const ProtocolPacket &packet);
|
void AnalyzeReplyResultPacket(const ProtocolPacket &packet);
|
||||||
void AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet);
|
void AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet);
|
||||||
void AnalyzeReplySetFeedingCyclePacket(const ProtocolPacket &packet);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual void BigEndianConversion(ProtocolPacket &packet) {}
|
virtual void BigEndianConversion(ProtocolPacket &packet) {}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user