Improve:mcu manager recv function.

This commit is contained in:
Fancy code 2024-05-15 16:12:34 +08:00
parent 073087411b
commit 049521bad1
10 changed files with 234 additions and 102 deletions

View File

@ -42,41 +42,33 @@ enum class ControlLight
}; };
typedef struct mcu_ask_date_time typedef struct mcu_ask_date_time
{ {
mcu_ask_date_time(const unsigned short year, const unsigned char mon, const unsigned char day,
const unsigned char hour, const unsigned char min, const unsigned char second);
const unsigned short mYear; const unsigned short mYear;
const unsigned char mMon; const unsigned char mMon;
const unsigned char mDay; const unsigned char mDay;
const unsigned char mHour; const unsigned char mHour;
const unsigned char mMin; const unsigned char mMin;
const unsigned char mSecond; const unsigned char mSecond;
mcu_ask_date_time(const unsigned short year, const unsigned char mon, const unsigned char day,
const unsigned char hour, const unsigned char min, const unsigned char second)
: mYear(year), mMon(mon), mDay(day), mHour(hour), mMin(min), mSecond(second)
{
}
} McuAskDateTime; } McuAskDateTime;
typedef struct mcu_get_interval_start
{
mcu_get_interval_start();
unsigned int mIntervalStart;
} McuGetIntervalStart;
/**
* @brief The application sends data to the MCU.
*
*/
class VMcuAsk class VMcuAsk
{ {
public: public:
VMcuAsk() VMcuAsk();
{
mSerialNumber = 0;
}
virtual ~VMcuAsk() = default; virtual ~VMcuAsk() = default;
virtual ASK_RESULT Blocking(void) virtual ASK_RESULT Blocking(void);
{ virtual bool NeedReply(void);
return ASK_RESULT::END; virtual void ReplyFinished(const bool result);
} virtual bool IfTimeout(const unsigned int &integrationTimeMs);
virtual bool NeedReply(void)
{
return false;
}
virtual void ReplyFinished(const bool result)
{
}
virtual bool IfTimeout(const unsigned int &integrationTimeMs)
{
return false;
}
public: public:
/** /**
@ -96,13 +88,38 @@ public:
public: public:
T mDataReply; T mDataReply;
}; };
/**
* @brief Report the data received by the serial port to the application.
*
*/
class VMcuRecv
{
public:
VMcuRecv() = default;
virtual ~VMcuRecv() = default;
virtual void ReplyFinished(const bool result);
};
template <typename T>
class McuRecv : public VMcuRecv
{
public:
McuRecv() = default;
virtual ~McuRecv() = default;
public:
T mDataRecvReply; ///< It includes both the data received by the serial port and the data replied to.
};
class VMcuMonitor class VMcuMonitor
{ {
public: public:
VMcuMonitor() = default; VMcuMonitor() = default;
virtual ~VMcuMonitor() = default; virtual ~VMcuMonitor() = default;
virtual void RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission); virtual void RecvIpcMissionEvent(std::shared_ptr<VMcuRecv> &recv, const IpcMission &mission);
virtual void RecvMcuHeartBeat(std::shared_ptr<VMcuAsk> &recv); virtual void RecvMcuHeartBeat(std::shared_ptr<VMcuRecv> &recv);
virtual void RecvGetIntervalStart(std::shared_ptr<VMcuRecv> &recv);
virtual void RecvGetDateTime(std::shared_ptr<VMcuRecv> &recv);
virtual void RecvGetPirSensitivity(std::shared_ptr<VMcuRecv> &recv);
}; };
class IMcuManager class IMcuManager
{ {

View File

@ -14,10 +14,48 @@
*/ */
#include "IMcuManager.h" #include "IMcuManager.h"
#include "ILog.h" #include "ILog.h"
void VMcuMonitor::RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission) mcu_ask_date_time::mcu_ask_date_time(const unsigned short year, const unsigned char mon, const unsigned char day,
const unsigned char hour, const unsigned char min, const unsigned char second)
: mYear(year), mMon(mon), mDay(day), mHour(hour), mMin(min), mSecond(second)
{ {
} }
void VMcuMonitor::RecvMcuHeartBeat(std::shared_ptr<VMcuAsk> &recv) mcu_get_interval_start::mcu_get_interval_start() : mIntervalStart(0)
{
}
VMcuAsk::VMcuAsk() : mSerialNumber(0)
{
}
ASK_RESULT VMcuAsk::Blocking(void)
{
return ASK_RESULT::END;
}
bool VMcuAsk::NeedReply(void)
{
return false;
}
void VMcuAsk::ReplyFinished(const bool result)
{
}
bool VMcuAsk::IfTimeout(const unsigned int &integrationTimeMs)
{
return false;
}
void VMcuRecv::ReplyFinished(const bool result)
{
}
void VMcuMonitor::RecvIpcMissionEvent(std::shared_ptr<VMcuRecv> &recv, const IpcMission &mission)
{
}
void VMcuMonitor::RecvMcuHeartBeat(std::shared_ptr<VMcuRecv> &recv)
{
}
void VMcuMonitor::RecvGetIntervalStart(std::shared_ptr<VMcuRecv> &recv)
{
}
void VMcuMonitor::RecvGetDateTime(std::shared_ptr<VMcuRecv> &recv)
{
}
void VMcuMonitor::RecvGetPirSensitivity(std::shared_ptr<VMcuRecv> &recv)
{ {
} }
std::shared_ptr<IMcuManager> &IMcuManager::GetInstance(std::shared_ptr<IMcuManager> *impl) std::shared_ptr<IMcuManager> &IMcuManager::GetInstance(std::shared_ptr<IMcuManager> *impl)

View File

@ -14,38 +14,22 @@
*/ */
#include "McuManagerImpl.h" #include "McuManagerImpl.h"
#include "ILog.h" #include "ILog.h"
#include "UartRecvAsk.h" class McuRecvImpl
class OtherSideSend : public UartRecvAsk, public McuAsk<ASK_RESULT>
{ {
public: public:
OtherSideSend(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber, McuRecvImpl(const unsigned int &serialNumber, const OtherSideSendType &sendType)
const OtherSideSendType &sendType) : mSerialNumber(serialNumber), mSendType(sendType)
: mMcuManager(mcuManager), mSendType(sendType)
{ {
McuAsk::mSerialNumber = serialNumber;
} }
virtual ~OtherSideSend() = default; virtual ~McuRecvImpl() = default;
protected: protected:
std::shared_ptr<McuManagerImpl> mMcuManager; std::shared_ptr<McuManagerImpl> mMcuManager;
const unsigned int mSerialNumber;
public: public:
const OtherSideSendType mSendType; const OtherSideSendType mSendType;
}; };
template <typename T>
class OtherSideSendWithData : public OtherSideSend
{
public:
OtherSideSendWithData(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber,
const OtherSideSendType &sendType, const T &otherSideData)
: OtherSideSend(mcuManager, serialNumber, sendType), mOtherSideData(otherSideData)
{
}
virtual ~OtherSideSendWithData() = default;
public:
const T mOtherSideData;
};
McuManagerImpl::McuManagerImpl() McuManagerImpl::McuManagerImpl()
{ {
mMcuAskHandle[OtherSideSendType::SEND_IPC_MISSION] = mMcuAskHandle[OtherSideSendType::SEND_IPC_MISSION] =
@ -74,7 +58,7 @@ const StatusCode McuManagerImpl::SetMcuMonitor(std::shared_ptr<VMcuMonitor> &mon
std::lock_guard<std::mutex> locker(mMutex); std::lock_guard<std::mutex> locker(mMutex);
mMonitor = monitor; mMonitor = monitor;
for (auto ask : mMcuAskList) { for (auto ask : mMcuAskList) {
std::shared_ptr<OtherSideSend> data = std::dynamic_pointer_cast<OtherSideSend>(ask); std::shared_ptr<McuRecvImpl> data = std::dynamic_pointer_cast<McuRecvImpl>(ask);
auto handle = mMcuAskHandle.find(data->mSendType); auto handle = mMcuAskHandle.find(data->mSendType);
if (handle != mMcuAskHandle.end()) { if (handle != mMcuAskHandle.end()) {
handle->second(ask); handle->second(ask);
@ -163,62 +147,101 @@ std::shared_ptr<VMcuMonitor> McuManagerImpl::GetMcuMonitor(void)
} }
void McuManagerImpl::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission) void McuManagerImpl::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission)
{ {
class OtherSideSendV2 : public OtherSideSendWithData<unsigned char> class McuRecvIpcMission : public McuRecvImpl, public McuRecv<unsigned char>
{ {
public: public:
OtherSideSendV2(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber, McuRecvIpcMission(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber,
const OtherSideSendType &sendType, const unsigned char &mission) const OtherSideSendType &sendType, const unsigned char &mission)
: OtherSideSendWithData(mcuManager, serialNumber, sendType, mission) : McuRecvImpl(serialNumber, sendType)
{ {
McuRecv::mDataRecvReply = mission;
McuRecvImpl::mMcuManager = mcuManager;
} }
~OtherSideSendV2() = default; ~McuRecvIpcMission() = default;
void ReplyFinished(const bool result) override void ReplyFinished(const bool result) override
{ {
mMcuManager->ReplyOtherSideSendIpcMission(McuAsk::mDataReply, VMcuAsk::mSerialNumber); McuRecvImpl::mMcuManager->ReplyOtherSideSendIpcMission(ASK_RESULT::SUCCEED, McuRecvImpl::mSerialNumber);
} }
}; };
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor(); std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis()); std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis());
std::shared_ptr<VMcuAsk> ask = std::shared_ptr<VMcuRecv> recv =
std::make_shared<OtherSideSendV2>(manager, serialNumber, OtherSideSendType::SEND_IPC_MISSION, mission); std::make_shared<McuRecvIpcMission>(manager, serialNumber, OtherSideSendType::SEND_IPC_MISSION, mission);
if (monitor) { if (monitor) {
monitor->RecvIpcMissionEvent(ask, static_cast<IpcMission>(mission)); monitor->RecvIpcMissionEvent(recv, static_cast<IpcMission>(mission));
} }
else { else {
LogWarning("mMonitor is nullptr, AddMcuAsk.\n"); LogWarning("mMonitor is nullptr, AddMcuRecv.\n");
AddMcuAsk(ask); AddMcuRecv(recv);
} }
} }
void McuManagerImpl::OtherSideSendHearBeat(const unsigned int &serialNumber) void McuManagerImpl::OtherSideSendHearBeat(const unsigned int &serialNumber)
{ {
class OtherSideSendV2 : public OtherSideSend class McuRecvHeartBeat : public McuRecvImpl, public VMcuRecv
{ {
public: public:
OtherSideSendV2(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber, McuRecvHeartBeat(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber,
const OtherSideSendType &sendType) const OtherSideSendType &sendType)
: OtherSideSend(mcuManager, serialNumber, sendType) : McuRecvImpl(serialNumber, sendType)
{ {
McuRecvImpl::mMcuManager = mcuManager;
} }
~OtherSideSendV2() = default; ~McuRecvHeartBeat() = default;
void ReplyFinished(const bool result) override void ReplyFinished(const bool result) override
{ {
LogInfo("Mcu monitor reply heart beat.\n"); McuRecvImpl::mMcuManager->ReplyOtherSideSendHeartBeat(McuRecvImpl::mSerialNumber);
mMcuManager->ReplyOtherSideSendHeartBeat(mSerialNumber);
} }
}; };
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor(); std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis()); std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis());
std::shared_ptr<VMcuAsk> ask = std::shared_ptr<VMcuRecv> recv =
std::make_shared<OtherSideSendV2>(manager, serialNumber, OtherSideSendType::SEND_HEART_BEAT); std::make_shared<McuRecvHeartBeat>(manager, serialNumber, OtherSideSendType::SEND_HEART_BEAT);
if (monitor) { if (monitor) {
LogInfo("Mcu manager report heart beat to mcu monitor.\n"); LogInfo("Mcu manager report heart beat to mcu monitor.\n");
monitor->RecvMcuHeartBeat(ask); monitor->RecvMcuHeartBeat(recv);
} }
else { else {
LogWarning("mMonitor is nullptr, AddMcuAsk.\n"); LogWarning("mMonitor is nullptr, AddMcuRecv.\n");
AddMcuAsk(ask); AddMcuRecv(recv);
} }
} }
void McuManagerImpl::OtherSideSendGetIntervalStart(const unsigned int &serialNumber)
{
class McuRecvGetIntervalStart : public McuRecvImpl, public McuRecv<McuGetIntervalStart>
{
public:
McuRecvGetIntervalStart(std::shared_ptr<McuManagerImpl> &mcuManager, const unsigned int &serialNumber,
const OtherSideSendType &sendType)
: McuRecvImpl(serialNumber, sendType)
{
McuRecvImpl::mMcuManager = mcuManager;
}
~McuRecvGetIntervalStart() = default;
void ReplyFinished(const bool result) override
{
McuRecvImpl::mMcuManager->ReplyOtherSideSendGetIntervalStart(mDataRecvReply.mIntervalStart,
McuRecvImpl::mSerialNumber);
}
};
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
std::shared_ptr<McuManagerImpl> manager = std::dynamic_pointer_cast<McuManagerImpl>(SharedFromThis());
std::shared_ptr<VMcuRecv> recv =
std::make_shared<McuRecvGetIntervalStart>(manager, serialNumber, OtherSideSendType::GET_INTERVAL_START);
if (monitor) {
LogInfo("Mcu manager report heart beat to mcu monitor.\n");
monitor->RecvMcuHeartBeat(recv);
}
else {
LogWarning("mMonitor is nullptr, AddMcuRecv.\n");
AddMcuRecv(recv);
}
}
void McuManagerImpl::OtherSideSendGetDateTime(const unsigned int &serialNumber)
{
}
void McuManagerImpl::OtherSideSendGetPirSensitivity(const unsigned int &serialNumber)
{
}
void McuManagerImpl::ReplyOtherSideSendIpcMission(const ASK_RESULT &result, const unsigned int &serialNumber) void McuManagerImpl::ReplyOtherSideSendIpcMission(const ASK_RESULT &result, const unsigned int &serialNumber)
{ {
LogInfo("ReplyOtherSideSendIpcMission\n"); LogInfo("ReplyOtherSideSendIpcMission\n");
@ -229,24 +252,33 @@ void McuManagerImpl::ReplyOtherSideSendHeartBeat(const unsigned int &serialNumbe
LogInfo("ReplyOtherSideSendHeartBeat\n"); LogInfo("ReplyOtherSideSendHeartBeat\n");
McuProtocol::ReplyOtherSideSendHearBeat(static_cast<ReplyResult>(ASK_RESULT::SUCCEED), serialNumber); McuProtocol::ReplyOtherSideSendHearBeat(static_cast<ReplyResult>(ASK_RESULT::SUCCEED), serialNumber);
} }
void McuManagerImpl::AddMcuAsk(std::shared_ptr<VMcuAsk> &ask) void McuManagerImpl::ReplyOtherSideSendGetIntervalStart(const unsigned int &interval, const unsigned int &serialNumber)
{
}
void McuManagerImpl::ReplyOtherSideSendGetDateTime(const McuAskDateTime &time, const unsigned int &serialNumber)
{
}
void McuManagerImpl::ReplyOtherSideSendGetPirSensitivity(const unsigned int &sensitivity,
const unsigned int &serialNumber)
{
}
void McuManagerImpl::AddMcuRecv(std::shared_ptr<VMcuRecv> &recv)
{ {
std::lock_guard<std::mutex> locker(mMutex); std::lock_guard<std::mutex> locker(mMutex);
mMcuAskList.push_back(ask); mMcuAskList.push_back(recv);
} }
void McuManagerImpl::McuAskSendIpcMissionHandle(std::shared_ptr<VMcuAsk> &ask) void McuManagerImpl::McuAskSendIpcMissionHandle(std::shared_ptr<VMcuRecv> &recv)
{ {
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor(); std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
std::shared_ptr<OtherSideSendWithData<unsigned char>> data = std::shared_ptr<McuRecv<unsigned char>> data = std::dynamic_pointer_cast<McuRecv<unsigned char>>(recv);
std::dynamic_pointer_cast<OtherSideSendWithData<unsigned char>>(ask);
if (monitor) { if (monitor) {
monitor->RecvIpcMissionEvent(ask, static_cast<IpcMission>(data->mOtherSideData)); monitor->RecvIpcMissionEvent(recv, static_cast<IpcMission>(data->mDataRecvReply));
} }
} }
void McuManagerImpl::McuAskSendHeartBeatHandle(std::shared_ptr<VMcuAsk> &ask) void McuManagerImpl::McuAskSendHeartBeatHandle(std::shared_ptr<VMcuRecv> &recv)
{ {
std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor(); std::shared_ptr<VMcuMonitor> monitor = GetMcuMonitor();
if (monitor) { if (monitor) {
monitor->RecvMcuHeartBeat(ask); monitor->RecvMcuHeartBeat(recv);
} }
} }

View File

@ -22,11 +22,13 @@
#include <map> #include <map>
#include <mutex> #include <mutex>
using std::placeholders::_1; using std::placeholders::_1;
using McuAskHandleFunc = std::function<void(std::shared_ptr<VMcuAsk> &)>; using McuAskHandleFunc = std::function<void(std::shared_ptr<VMcuRecv> &)>;
enum class OtherSideSendType enum class OtherSideSendType
{ {
SEND_IPC_MISSION, SEND_IPC_MISSION,
SEND_HEART_BEAT, SEND_HEART_BEAT,
GET_INTERVAL_START,
GET_DATE_TIME,
END END
}; };
class McuManagerImpl : public McuDevice, public McuProtocol, public std::enable_shared_from_this<McuManagerImpl> class McuManagerImpl : public McuDevice, public McuProtocol, public std::enable_shared_from_this<McuManagerImpl>
@ -57,16 +59,23 @@ private:
/** /**
* @brief The heartbeat packet must be processed by the state machine in the main thread. When the state machine * @brief The heartbeat packet must be processed by the state machine in the main thread. When the state machine
* blocks/freezes, it can be restored by the external microcontroller after powering off and restarting. * blocks/freezes, it can be restored by the external microcontroller after powering off and restarting.
* This function has been cancelled.
* @param serialNumber * @param serialNumber
*/ */
void OtherSideSendHearBeat(const unsigned int &serialNumber) override; void OtherSideSendHearBeat(const unsigned int &serialNumber) override;
void OtherSideSendGetIntervalStart(const unsigned int &serialNumber) override;
void OtherSideSendGetDateTime(const unsigned int &serialNumber) override;
void OtherSideSendGetPirSensitivity(const unsigned int &serialNumber) override;
void ReplyOtherSideSendIpcMission(const ASK_RESULT &result, const unsigned int &serialNumber); void ReplyOtherSideSendIpcMission(const ASK_RESULT &result, const unsigned int &serialNumber);
void ReplyOtherSideSendHeartBeat(const unsigned int &serialNumber); void ReplyOtherSideSendHeartBeat(const unsigned int &serialNumber);
void ReplyOtherSideSendGetIntervalStart(const unsigned int &interval, const unsigned int &serialNumber);
void ReplyOtherSideSendGetDateTime(const McuAskDateTime &time, const unsigned int &serialNumber);
void ReplyOtherSideSendGetPirSensitivity(const unsigned int &sensitivity, const unsigned int &serialNumber);
private: // About mMcuAskList private: // About mMcuAskList
void AddMcuAsk(std::shared_ptr<VMcuAsk> &ask); void AddMcuRecv(std::shared_ptr<VMcuRecv> &recv);
void McuAskSendIpcMissionHandle(std::shared_ptr<VMcuAsk> &ask); void McuAskSendIpcMissionHandle(std::shared_ptr<VMcuRecv> &recv);
void McuAskSendHeartBeatHandle(std::shared_ptr<VMcuAsk> &ask); void McuAskSendHeartBeatHandle(std::shared_ptr<VMcuRecv> &recv);
private: private:
std::mutex mMutex; std::mutex mMutex;
@ -75,7 +84,7 @@ private:
* @brief If the monitor has not been registered yet, it is necessary to cache the reported messages and report them * @brief If the monitor has not been registered yet, it is necessary to cache the reported messages and report them
* again when the monitor is registered. * again when the monitor is registered.
*/ */
std::list<std::shared_ptr<VMcuAsk>> mMcuAskList; std::list<std::shared_ptr<VMcuRecv>> mMcuAskList;
std::map<OtherSideSendType, McuAskHandleFunc> mMcuAskHandle; std::map<OtherSideSendType, McuAskHandleFunc> mMcuAskHandle;
}; };
#endif #endif

View File

@ -91,7 +91,7 @@ TEST_F(McuManagerTest, RH_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMission)
public: public:
MonitorTest() = default; MonitorTest() = default;
virtual ~MonitorTest() = default; virtual ~MonitorTest() = default;
void RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission) override void RecvIpcMissionEvent(std::shared_ptr<VMcuRecv> &recv, const IpcMission &mission) override
{ {
LogInfo("RecvIpcMissionEvent %s\n", IMcuManager::GetInstance()->PrintIpcMissionString(mission)); LogInfo("RecvIpcMissionEvent %s\n", IMcuManager::GetInstance()->PrintIpcMissionString(mission));
std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv); std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv);

View File

@ -158,13 +158,13 @@ TEST_F(McuManagerMockTest, HS_INTEGRATION_McuManager_EXAMPLE_OtherSideSendIpcMis
public: public:
MonitorTest() = default; MonitorTest() = default;
virtual ~MonitorTest() = default; virtual ~MonitorTest() = default;
void RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission) override void RecvIpcMissionEvent(std::shared_ptr<VMcuRecv> &recv, const IpcMission &mission) override
{ {
LogInfo("RecvIpcMissionEvent\n"); LogInfo("RecvIpcMissionEvent\n");
std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv); std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv);
ask->mDataReply = ASK_RESULT::SUCCEED; ask->mDataReply = ASK_RESULT::SUCCEED;
recv->ReplyFinished(true); recv->ReplyFinished(true);
EXPECT_EQ(TEST_SERIAL_NUMBER, recv->mSerialNumber); // EXPECT_EQ(TEST_SERIAL_NUMBER, recv->mSerialNumber);
} }
}; };
IMcuManager::GetInstance()->Init(); IMcuManager::GetInstance()->Init();
@ -188,13 +188,13 @@ TEST_F(McuManagerMockTest, HS_INTEGRATION_McuManager_EXAMPLE_OtherSideSendHeartB
public: public:
MonitorTest() = default; MonitorTest() = default;
virtual ~MonitorTest() = default; virtual ~MonitorTest() = default;
void RecvMcuHeartBeat(std::shared_ptr<VMcuAsk> &recv) override void RecvMcuHeartBeat(std::shared_ptr<VMcuRecv> &recv) override
{ {
LogInfo("RecvMcuHeartBeat\n"); LogInfo("RecvMcuHeartBeat\n");
std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv); std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv);
ask->mDataReply = ASK_RESULT::SUCCEED; ask->mDataReply = ASK_RESULT::SUCCEED;
recv->ReplyFinished(true); recv->ReplyFinished(true);
EXPECT_EQ(TEST_SERIAL_NUMBER, recv->mSerialNumber); // EXPECT_EQ(TEST_SERIAL_NUMBER, recv->mSerialNumber);
} }
}; };
IMcuManager::GetInstance()->Init(); IMcuManager::GetInstance()->Init();
@ -885,7 +885,7 @@ TEST_F(McuManagerMockTest, HS_INTEGRATION_McuManager_AUTO_OtherSideSendIpcMissio
public: public:
MonitorTest() = default; MonitorTest() = default;
virtual ~MonitorTest() = default; virtual ~MonitorTest() = default;
void RecvIpcMissionEvent(std::shared_ptr<VMcuAsk> &recv, const IpcMission &mission) override void RecvIpcMissionEvent(std::shared_ptr<VMcuRecv> &recv, const IpcMission &mission) override
{ {
LogInfo("RecvIpcMissionEvent\n"); LogInfo("RecvIpcMissionEvent\n");
std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv); std::shared_ptr<McuAsk<ASK_RESULT>> ask = std::dynamic_pointer_cast<McuAsk<ASK_RESULT>>(recv);

View File

@ -100,12 +100,8 @@ class OtherSideReply
public: public:
OtherSideReply() = default; OtherSideReply() = default;
virtual ~OtherSideReply() = default; virtual ~OtherSideReply() = default;
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)
{
}
}; };
class OtherSideAsk class OtherSideAsk
{ {
@ -114,6 +110,9 @@ public:
virtual ~OtherSideAsk() = default; virtual ~OtherSideAsk() = default;
virtual void OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission); virtual void OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission);
virtual void OtherSideSendHearBeat(const unsigned int &serialNumber); virtual void OtherSideSendHearBeat(const unsigned int &serialNumber);
virtual void OtherSideSendGetIntervalStart(const unsigned int &serialNumber);
virtual void OtherSideSendGetDateTime(const unsigned int &serialNumber);
virtual void OtherSideSendGetPirSensitivity(const unsigned int &serialNumber);
}; };
class VProtocolRecv : public OtherSideReply, public OtherSideAsk class VProtocolRecv : public OtherSideReply, public OtherSideAsk
{ {

View File

@ -16,12 +16,27 @@
#include "ILog.h" #include "ILog.h"
#include "ProtocolHandle.h" #include "ProtocolHandle.h"
#include <string.h> #include <string.h>
void OtherSideReply::GetIpcMissionReply(const unsigned int &serialNumber, const unsigned char &mission)
{
}
void OtherSideReply::OnlyResultReply(const unsigned int &serialNumber, const ReplyResult &result)
{
}
void OtherSideAsk::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission) void OtherSideAsk::OtherSideSendIpcMission(const unsigned int &serialNumber, const unsigned char &mission)
{ {
} }
void OtherSideAsk::OtherSideSendHearBeat(const unsigned int &serialNumber) void OtherSideAsk::OtherSideSendHearBeat(const unsigned int &serialNumber)
{ {
} }
void OtherSideAsk::OtherSideSendGetIntervalStart(const unsigned int &serialNumber)
{
}
void OtherSideAsk::OtherSideSendGetDateTime(const unsigned int &serialNumber)
{
}
void OtherSideAsk::OtherSideSendGetPirSensitivity(const unsigned int &serialNumber)
{
}
std::shared_ptr<VProtocolRecv> &VProtocolRecv::GetInstance(std::shared_ptr<VProtocolRecv> *impl) std::shared_ptr<VProtocolRecv> &VProtocolRecv::GetInstance(std::shared_ptr<VProtocolRecv> *impl)
{ {
static auto instance = std::make_shared<VProtocolRecv>(); static auto instance = std::make_shared<VProtocolRecv>();
@ -164,8 +179,6 @@ void McuProtocol::ReplyOtherSideSendIpcMission(const ReplyResult &result, const
void McuProtocol::ReplyOtherSideSendHearBeat(const ReplyResult &result, const unsigned int &serialNumber) void McuProtocol::ReplyOtherSideSendHearBeat(const ReplyResult &result, const unsigned int &serialNumber)
{ {
std::shared_ptr<VProtocolContext> NULL_CONTEXT; std::shared_ptr<VProtocolContext> NULL_CONTEXT;
// std::shared_ptr<VProtocolParam> param = std::make_shared<ProtocolParam<const unsigned char>>(
// PROTOCOL_COMMAND::REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT, static_cast<const unsigned char>(result));
std::shared_ptr<VProtocolParam> param = std::shared_ptr<VProtocolParam> param =
std::make_shared<VProtocolParam>(PROTOCOL_COMMAND::REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT); std::make_shared<VProtocolParam>(PROTOCOL_COMMAND::REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT);
param->mSerialNumber = serialNumber; param->mSerialNumber = serialNumber;

View File

@ -240,6 +240,21 @@ void ProtocolHandle::AnalyzeOtherSideSendHeartBeatPacket(const ProtocolPacket &p
LogInfo("AnalyzeOtherSideSendHeartBeatPacket\n"); LogInfo("AnalyzeOtherSideSendHeartBeatPacket\n");
VProtocolRecv::GetInstance()->OtherSideSendHearBeat(mProtocolSerialNumber); VProtocolRecv::GetInstance()->OtherSideSendHearBeat(mProtocolSerialNumber);
} }
void ProtocolHandle::AnalyzeOtherSideSendGetIntervalStart(const ProtocolPacket &packet)
{
LogInfo("AnalyzeOtherSideSendGetIntervalStart\n");
VProtocolRecv::GetInstance()->OtherSideSendGetIntervalStart(mProtocolSerialNumber);
}
void ProtocolHandle::AnalyzeOtherSideSendGetDataTime(const ProtocolPacket &packet)
{
LogInfo("AnalyzeOtherSideSendGetDataTime\n");
VProtocolRecv::GetInstance()->OtherSideSendGetDateTime(mProtocolSerialNumber);
}
void ProtocolHandle::AnalyzeOtherSideSendGetPirSensitivity(const ProtocolPacket &packet)
{
LogInfo("AnalyzeOtherSideSendGetPirSensitivity\n");
VProtocolRecv::GetInstance()->OtherSideSendGetPirSensitivity(mProtocolSerialNumber);
}
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);

View File

@ -59,8 +59,14 @@ enum PROTOCOL_COMMAND
*/ */
REPLY_OTHER_SIDE_ASK_SEND_IPC_MISSION = 0xC101, REPLY_OTHER_SIDE_ASK_SEND_IPC_MISSION = 0xC101,
OTHER_SIDE_ASK_SEND_IPC_MISSION = 0x4101, OTHER_SIDE_ASK_SEND_IPC_MISSION = 0x4101,
REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT = 0xC102, REPLY_OTHER_SIDE_ASK_SEND_HEART_BEAT = 0xC102, // Temporarily cancelled, reserved.
OTHER_SIDE_ASK_SEND_HEART_BEAT = 0x4102, OTHER_SIDE_ASK_SEND_HEART_BEAT = 0x4102, // Temporarily cancelled, reserved.
REPLY_OTHER_SIDE_ASK_GET_INTERVAL_START = 0xC106,
OTHER_SIDE_ASK_GET_INTERVAL_START = 0x4106,
REPLY_OTHER_SIDE_ASK_GET_DATE_TIME = 0xC107,
OTHER_SIDE_ASK_GET_DATE_TIME = 0x4107,
REPLY_OTHER_SIDE_ASK_GET_PIR_SENSITIVITY = 0xC108,
OTHER_SIDE_ASK_GET_PIR_SENSITIVITY = 0x4108,
PROTOCOL_COMMAND_END PROTOCOL_COMMAND_END
}; };
constexpr unsigned char ZERO_MEANS_SHUTDOWN_WATCH_DOG = 0x00; constexpr unsigned char ZERO_MEANS_SHUTDOWN_WATCH_DOG = 0x00;
@ -185,6 +191,9 @@ private:
void AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet); void AnalyzeReplyIpcMissionPacket(const ProtocolPacket &packet);
void AnalyzeOtherSideSendIpcMissionPacket(const ProtocolPacket &packet); void AnalyzeOtherSideSendIpcMissionPacket(const ProtocolPacket &packet);
void AnalyzeOtherSideSendHeartBeatPacket(const ProtocolPacket &packet); void AnalyzeOtherSideSendHeartBeatPacket(const ProtocolPacket &packet);
void AnalyzeOtherSideSendGetIntervalStart(const ProtocolPacket &packet);
void AnalyzeOtherSideSendGetDataTime(const ProtocolPacket &packet);
void AnalyzeOtherSideSendGetPirSensitivity(const ProtocolPacket &packet);
private: private:
virtual void BigEndianConversion(ProtocolPacket &packet) virtual void BigEndianConversion(ProtocolPacket &packet)