diff --git a/application/HunttingCamera/build/huntting_camera.cmake b/application/HunttingCamera/build/huntting_camera.cmake index e14f6ed0..aa4f3729 100644 --- a/application/HunttingCamera/build/huntting_camera.cmake +++ b/application/HunttingCamera/build/huntting_camera.cmake @@ -1,8 +1,10 @@ set(HUNTTING_MAIN_INCLUDE_PATH "${APPLICATION_SOURCE_PATH}/HunttingCamera/src") +set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${APPLICATION_SOURCE_PATH}/MissionManager/include") +set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${MIDDLEWARE_SOURCE_PATH}/StateMachine/include") +set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${MIDDLEWARE_SOURCE_PATH}/McuManager/include") set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${UTILS_SOURCE_PATH}/StatusCode/include") set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${UTILS_SOURCE_PATH}/Log/include") -set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${APPLICATION_SOURCE_PATH}/MissionManager/include") set(HUNTTING_MAIN_INCLUDE_PATH "${HUNTTING_MAIN_INCLUDE_PATH};${HAL_SOURCE_PATH}/include") -set(HUNTTING_LINK_LIB MissionManager StatusCode Log Hal pthread dl) \ No newline at end of file +set(HUNTTING_LINK_LIB McuManager MissionManager StateMachine StatusCode Log Hal pthread dl) \ No newline at end of file diff --git a/application/HunttingCamera/src/MainThread.cpp b/application/HunttingCamera/src/MainThread.cpp index a0aa26d8..ef0b16a7 100644 --- a/application/HunttingCamera/src/MainThread.cpp +++ b/application/HunttingCamera/src/MainThread.cpp @@ -15,7 +15,9 @@ #include "MainThread.h" #include "IHalCpp.h" #include "ILog.h" +#include "IMcuManager.h" #include "IMissionManager.h" +#include "IStateMachine.h" #include MainThread::MainThread() { mMainThreadRuning = false; } std::shared_ptr &MainThread::GetInstance(std::shared_ptr *impl) @@ -39,12 +41,15 @@ StatusCode MainThread::Init(void) CustomizationInit(); mMainThreadRuning = true; CreateAllModules(); - // IHalInit(); IHalCpp::GetInstance()->Init(); + IMcuManager::GetInstance()->Init(); + IMissionManager::GetInstance()->Init(); return CreateStatusCode(STATUS_CODE_OK); } StatusCode MainThread::UnInit(void) { + IMissionManager::GetInstance()->UnInit(); + IMcuManager::GetInstance()->UnInit(); IHalCpp::GetInstance()->UnInit(); DestoryAllModules(); ILogUnInit(); @@ -53,12 +58,16 @@ StatusCode MainThread::UnInit(void) StatusCode MainThread::CreateAllModules(void) { CreateHalCppModule(); + CreateMcuManager(); CreateMissionManagerModule(); + CreateStateMachine(); return CreateStatusCode(STATUS_CODE_OK); } void MainThread::DestoryAllModules(void) { + DestroyStateMachine(); DestroyMissionManagerModule(); + DestroyMcuManager(); DestroyHalCppModule(); } void MainThread::ResetAllPtrMaker(void) {} diff --git a/application/MissionManager/CMakeLists.txt b/application/MissionManager/CMakeLists.txt index 57e3b737..ad9976ba 100644 --- a/application/MissionManager/CMakeLists.txt +++ b/application/MissionManager/CMakeLists.txt @@ -9,7 +9,9 @@ include_directories( ${UTILS_SOURCE_PATH}/StatusCode/include ${UTILS_SOURCE_PATH}/Log/include ${MIDDLEWARE_SOURCE_PATH}/StateMachine/include - ${MIDDLEWARE_SOURCE_PATH}/DeviceManager/include + # ${MIDDLEWARE_SOURCE_PATH}/DeviceManager/include + ${MIDDLEWARE_SOURCE_PATH}/McuManager/include + ${MIDDLEWARE_SOURCE_PATH}/McuAskBase/include ) #do not rely on any other library #link_directories( @@ -20,7 +22,7 @@ aux_source_directory(./src SRC_FILES) set(TARGET_NAME MissionManager) add_library(${TARGET_NAME} STATIC ${SRC_FILES}) -target_link_libraries(${TARGET_NAME} StatusCode Log) +target_link_libraries(${TARGET_NAME} McuAskBase StateMachine StatusCode Log) if ("${CLANG_TIDY_SUPPORT}" MATCHES "true") add_custom_target( diff --git a/application/MissionManager/src/IMissionManager.cpp b/application/MissionManager/src/IMissionManager.cpp index 5bc83ca1..cd5a51aa 100644 --- a/application/MissionManager/src/IMissionManager.cpp +++ b/application/MissionManager/src/IMissionManager.cpp @@ -28,5 +28,5 @@ std::shared_ptr &IMissionManager::GetInstance(std::shared_ptrInit(); + return CreateStatusCode(STATUS_CODE_OK); +} +const StatusCode MissionManager::UnInit(void) +{ + MissionStateMachine::GetInstance()->UnInit(); + return CreateStatusCode(STATUS_CODE_OK); +} \ No newline at end of file diff --git a/application/MissionManager/src/MissionManager.h b/application/MissionManager/src/MissionManager.h index d6548b88..7b333340 100644 --- a/application/MissionManager/src/MissionManager.h +++ b/application/MissionManager/src/MissionManager.h @@ -20,5 +20,7 @@ class MissionManager : public IMissionManager public: MissionManager() = default; virtual ~MissionManager() = default; + const StatusCode Init(void) override; + const StatusCode UnInit(void) override; }; #endif \ No newline at end of file diff --git a/application/MissionManager/src/MissionManagerMakePtr.cpp b/application/MissionManager/src/MissionManagerMakePtr.cpp index 47cae50c..ac265533 100644 --- a/application/MissionManager/src/MissionManagerMakePtr.cpp +++ b/application/MissionManager/src/MissionManagerMakePtr.cpp @@ -14,6 +14,7 @@ */ #include "MissionManagerMakePtr.h" #include "ILog.h" +#include "MissionManager.h" #include "TopState.h" bool CreateMissionManagerModule(void) { @@ -48,6 +49,7 @@ std::shared_ptr &MissionManagerMakePtr::GetInstance(std:: } const StatusCode MissionManagerMakePtr::CreateMissionManagerInstance(std::shared_ptr &instance) { + instance = std::make_shared(); return CreateStatusCode(STATUS_CODE_OK); } std::shared_ptr MissionManagerMakePtr::CreateTopState(void) diff --git a/application/MissionManager/src/MissionStateMachine.cpp b/application/MissionManager/src/MissionStateMachine.cpp index 4a7403d9..29930a18 100644 --- a/application/MissionManager/src/MissionStateMachine.cpp +++ b/application/MissionManager/src/MissionStateMachine.cpp @@ -14,6 +14,7 @@ */ #include "MissionStateMachine.h" #include "ILog.h" +#include "McuAskBase.h" #include "MissionManagerMakePtr.h" #include "TopState.h" std::shared_ptr &MissionStateMachine::GetInstance(std::shared_ptr *impl) @@ -24,21 +25,50 @@ std::shared_ptr &MissionStateMachine::GetInstance(std::shar } return instance; } +MissionStateMachine::MissionStateMachine() +{ + // + mStartMission = IpcMission::END; +} void MissionStateMachine::Init(void) { + mStateMachine = std::make_shared(); auto code = IStateMachine::GetInstance()->CreateStateMachine(mStateMachine); - if (IsCodeOK(code)) { - LogError("Create state machine failed.\n"); + if (!IsCodeOK(code)) { + LogError("Create state machine failed[%s].\n", code.mPrintStringCode(code)); return; } if (!mStateMachine->InitialStateMachine()) { LogError("State machine init failed.\n"); return; } - // mStartMission = IDeviceManager::GetInstance()->GetIpcMission(); - // RunStateMachine(mStartMission); + mStartMission = GetStartMission(); + if (mStartMission != IpcMission::END) { + // RunStateMachine(mStartMission); + } + else { + LogError("ipcmission error.\n"); + } +} +void MissionStateMachine::UnInit(void) +{ + // +} +IpcMission MissionStateMachine::GetStartMission(void) +{ + class McuAskIpcMission : public McuAsk, public McuAskBase + { + public: + McuAskIpcMission() : McuAskBase(McuAskBlock::NOT_BLOCK, McuAskReply::NEED_REPLY) + { + mDataReply = IpcMission::END; + } + virtual ~McuAskIpcMission() = default; + }; + std::shared_ptr ask = std::make_shared(); + IMcuManager::GetInstance()->GetIpcMission(ask); + return std::dynamic_pointer_cast(ask)->mDataReply; } -void MissionStateMachine::UnInit(void) {} // void MissionStateMachine::RunStateMachine(const IpcMission &mission) // { // LogInfo("Make all states and start the state machine.\n"); diff --git a/application/MissionManager/src/MissionStateMachine.h b/application/MissionManager/src/MissionStateMachine.h index 04fbf2de..347ffa26 100644 --- a/application/MissionManager/src/MissionStateMachine.h +++ b/application/MissionManager/src/MissionStateMachine.h @@ -14,7 +14,8 @@ */ #ifndef MISSIONSTATEMACHINE_H #define MISSIONSTATEMACHINE_H -#include "IDeviceManager.h" +// #include "IDeviceManager.h" +#include "IMcuManager.h" #include "IMissionManager.h" #include "IStateMachine.h" #include @@ -26,18 +27,19 @@ enum class MissionState class MissionStateMachine { public: - MissionStateMachine() = default; + MissionStateMachine(); virtual ~MissionStateMachine() = default; static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr); void Init(void); void UnInit(void); private: + IpcMission GetStartMission(void); // void RunStateMachine(const IpcMission &mission); private: std::shared_ptr mStateMachine; std::map> mStateTree; - // IpcMission mStartMission; + IpcMission mStartMission; }; #endif \ No newline at end of file diff --git a/middleware/GuiEngine/CMakeLists.txt b/middleware/GuiEngine/CMakeLists.txt index adde6757..9c0b8e2d 100755 --- a/middleware/GuiEngine/CMakeLists.txt +++ b/middleware/GuiEngine/CMakeLists.txt @@ -5,7 +5,6 @@ set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) include_directories( ./src ./include - ${COMPONENT_SOURCE_PATH}/ReturnCode/include ${COMPONENT_SOURCE_PATH}/Log/include ) diff --git a/middleware/StateMachine/CMakeLists.txt b/middleware/StateMachine/CMakeLists.txt index f5afe474..7f98d349 100644 --- a/middleware/StateMachine/CMakeLists.txt +++ b/middleware/StateMachine/CMakeLists.txt @@ -21,7 +21,7 @@ aux_source_directory(./src/OpenHarmony SRC_FILES_OPENHARMONY) set(TARGET_NAME StateMachine) add_library(${TARGET_NAME} STATIC ${SRC_FILES} ${SRC_FILES_OPENHARMONY}) -target_link_libraries(${TARGET_NAME} ReturnCode Log) +target_link_libraries(${TARGET_NAME} Log) if ("${CLANG_TIDY_SUPPORT}" MATCHES "true") add_custom_target( diff --git a/middleware/StateMachine/include/IStateMachine.h b/middleware/StateMachine/include/IStateMachine.h index 3aa48172..15142ea0 100644 --- a/middleware/StateMachine/include/IStateMachine.h +++ b/middleware/StateMachine/include/IStateMachine.h @@ -18,6 +18,7 @@ #include #include bool CreateStateMachine(void); +bool DestroyStateMachine(void); class VStateMessage { public: diff --git a/middleware/StateMachine/src/StateMachineMakePtr.cpp b/middleware/StateMachine/src/StateMachineMakePtr.cpp index 28df1688..f4705dcb 100644 --- a/middleware/StateMachine/src/StateMachineMakePtr.cpp +++ b/middleware/StateMachine/src/StateMachineMakePtr.cpp @@ -29,6 +29,12 @@ bool CreateStateMachine(void) } return false; } +bool DestroyStateMachine(void) +{ + auto instance = std::make_shared(); + IStateMachine::GetInstance(&instance); + return true; +} std::shared_ptr &StateMachineMakePtr::GetInstance(std::shared_ptr *impl) { static auto instance = std::make_shared(); @@ -42,6 +48,7 @@ StatusCode StateMachineMakePtr::CreateStateMachine(std::shared_ptr("TODO"); if (tmp) { + LogInfo("Create state machine module successfully.\n"); stateMachine = std::move(tmp); return CreateStatusCode(STATUS_CODE_OK); } diff --git a/test/application/HunttingCamera/CMakeLists.txt b/test/application/HunttingCamera/CMakeLists.txt index 72222d3c..8f47ae88 100644 --- a/test/application/HunttingCamera/CMakeLists.txt +++ b/test/application/HunttingCamera/CMakeLists.txt @@ -26,7 +26,7 @@ endif() set(TARGET_NAME HunttingCameraTest) add_executable(${TARGET_NAME} ${SRC_FILES_MAIN} ${SRC_FILES}) -target_link_libraries(${TARGET_NAME} HunttingMainLib TestManager gtest gmock pthread) +target_link_libraries(${TARGET_NAME} HunttingMainLib McuManagerTestTool TestManager gtest gmock pthread) if(${TEST_COVERAGE} MATCHES "true") target_link_libraries(${TARGET_NAME} gcov) endif() diff --git a/test/application/HunttingCamera/src/HunttingCamera_Test.cpp b/test/application/HunttingCamera/src/HunttingCamera_Test.cpp index 39e58754..a5813400 100644 --- a/test/application/HunttingCamera/src/HunttingCamera_Test.cpp +++ b/test/application/HunttingCamera/src/HunttingCamera_Test.cpp @@ -52,7 +52,7 @@ public: TEST_F(HunttingCameraTest, INTEGRATION_DeviceManager_EXAMPLE_Demo) { MainThread::GetInstance()->Init(); - ResetTimeOut(1000 * 3); + TestManager::ResetTimeOut(1000 * 3); MainThread::GetInstance()->Runing(); MainThread::GetInstance()->UnInit(); } diff --git a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp b/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp index 3f305226..7340045d 100644 --- a/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp +++ b/test/utils/McuProtocol/tool/src/McuProtocolTestTool.cpp @@ -231,8 +231,14 @@ bool McuProtocolTestTool::IpcMissionProtocolHandle(std::shared_ptr &m int result = memcmp( (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; + unsigned char *bufHandle = (unsigned char *)malloc(count); + if (nullptr == bufHandle) { + LogError("malloc failed.\n"); + return PROTOCOL_HANDLED; + } + memcpy(bufHandle, buf, count); auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->IpcMissionProtocolInit(mock, uartFd, buf, count); + testTool->IpcMissionProtocolInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -249,6 +255,7 @@ void McuProtocolTestTool::IpcMissionProtocolInit(std::shared_ptr &moc memcpy(REPLY_IPC_MISSION_X + PROTOCOL_SERIAL_NUMBER_OFFSET, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); + free((void *)buf); ResetCheckCode(REPLY_IPC_MISSION_X, sizeof(REPLY_IPC_MISSION_X)); ReplySelectSucceed(mock, uartFd); constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_IPC_MISSION_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; @@ -315,8 +322,14 @@ bool McuProtocolTestTool::FeedingCycleProtocolHandle(std::shared_ptr int result = memcmp( (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; + unsigned char *bufHandle = (unsigned char *)malloc(count); + if (nullptr == bufHandle) { + LogError("malloc failed.\n"); + return PROTOCOL_HANDLED; + } + memcpy(bufHandle, buf, count); auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->FeedingCycleProtocolInit(mock, uartFd, buf, count); + testTool->FeedingCycleProtocolInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -334,6 +347,7 @@ void McuProtocolTestTool::FeedingCycleProtocolInit(std::shared_ptr &m memcpy(REPLY_SET_FEEDING_CYCLE_X + PROTOCOL_SERIAL_NUMBER_OFFSET, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); + free((void *)buf); ResetCheckCode(REPLY_SET_FEEDING_CYCLE_X, sizeof(REPLY_SET_FEEDING_CYCLE_X)); ReplySelectSucceed(mock, uartFd); constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_FEEDING_CYCLE_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; @@ -366,8 +380,14 @@ bool McuProtocolTestTool::SetDataTimeProtocolHandle(std::shared_ptr & int result = memcmp( (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; + unsigned char *bufHandle = (unsigned char *)malloc(count); + if (nullptr == bufHandle) { + LogError("malloc failed.\n"); + return PROTOCOL_HANDLED; + } + memcpy(bufHandle, buf, count); auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->SetDataTimeProtocolInit(mock, uartFd, buf, count); + testTool->SetDataTimeProtocolInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -384,6 +404,7 @@ void McuProtocolTestTool::SetDataTimeProtocolInit(std::shared_ptr &mo memcpy(REPLY_SET_DATE_TIME_X + PROTOCOL_SERIAL_NUMBER_OFFSET, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); + free((void *)buf); ResetCheckCode(REPLY_SET_DATE_TIME_X, sizeof(REPLY_SET_DATE_TIME_X)); ReplySelectSucceed(mock, uartFd); constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_SET_DATE_TIME_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; @@ -416,8 +437,14 @@ bool McuProtocolTestTool::SetPirSensitivityProtocolHandle(std::shared_ptrSetDataTimeProtocolInit(mock, uartFd, buf, count); + testTool->SetDataTimeProtocolInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -468,8 +495,14 @@ bool McuProtocolTestTool::ContorlInfraredLightHandle(std::shared_ptr int result = memcmp( (unsigned char *)buf + count - PROTOCOL_CHECK_CODE_LENGTH, &askCheckCode, PROTOCOL_CHECK_CODE_LENGTH); EXPECT_EQ(result, 0) << "ask protocol data errer, check code isn't right."; + unsigned char *bufHandle = (unsigned char *)malloc(count); + if (nullptr == bufHandle) { + LogError("malloc failed.\n"); + return PROTOCOL_HANDLED; + } + memcpy(bufHandle, buf, count); auto handle = [=, &mock](McuProtocolTestTool *testTool) { - testTool->ContorlInfraredLightInit(mock, uartFd, buf, count); + testTool->ContorlInfraredLightInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -486,6 +519,7 @@ void McuProtocolTestTool::ContorlInfraredLightInit(std::shared_ptr &m memcpy(REPLY_ASK_CONTORL_INFRARED_LIGHT_X + PROTOCOL_SERIAL_NUMBER_OFFSET, (unsigned char *)buf + PROTOCOL_SERIAL_NUMBER_OFFSET, PROTOCOL_SERIAL_NUMBER_LENGTH); + free((void *)buf); ResetCheckCode(REPLY_ASK_CONTORL_INFRARED_LIGHT_X, sizeof(REPLY_ASK_CONTORL_INFRARED_LIGHT_X)); ReplySelectSucceed(mock, uartFd); constexpr int LEFT_DATA_LENGTH = sizeof(REPLY_ASK_CONTORL_INFRARED_LIGHT_X) - PROTOCOL_DATA_KEY_HEAD_LENGTH; @@ -518,8 +552,14 @@ bool McuProtocolTestTool::GetPhotosensitivityValueHandle(std::shared_ptrGetPhotosensitivityValueInit(mock, uartFd, buf, count); + testTool->GetPhotosensitivityValueInit(mock, uartFd, bufHandle, count); }; if (mLockThread.joinable()) { mLockThread.join(); @@ -536,6 +576,7 @@ void McuProtocolTestTool::GetPhotosensitivityValueInit(std::shared_ptr