diff --git a/hal/include/IHalCpp.h b/hal/include/IHalCpp.h index a135c7a..7fb3665 100644 --- a/hal/include/IHalCpp.h +++ b/hal/include/IHalCpp.h @@ -24,7 +24,6 @@ using VirtualKeyEvent = unsigned char; constexpr int INVALID_PERIOD = -1; constexpr int PERIPHERAL_CHECK_PERIOD_MS = 100; constexpr int IMEI_LEN = 15; -// constexpr long int KEY_DO_NOT_HOLD_PRESSING = -1; void CreateHalCppModule(void); class VKeyHalMonitor { @@ -41,7 +40,7 @@ public: VKeyHal() = default; virtual ~VKeyHal() = default; virtual void CheckKeyStatus(void) {} - virtual const std::string GetKeyName(void) { return "undefine"; } + // virtual const std::string GetKeyName(void) { return "undefine"; } virtual void GetHoldPressingTimeMs(long int &holdTimeMs, VirtualKeyEvent &event) {} virtual void SetKeyMonitor(std::shared_ptr &monitor) {} }; diff --git a/middleware/DeviceManager/src/KeyManager.cpp b/middleware/DeviceManager/src/KeyManager.cpp index 5ec0079..e15de27 100644 --- a/middleware/DeviceManager/src/KeyManager.cpp +++ b/middleware/DeviceManager/src/KeyManager.cpp @@ -84,10 +84,10 @@ void KeyManager::GetAllKeysState(std::map &status) } void KeyManager::SetAllKeysMonitor(void) { + std::shared_ptr monitor = shared_from_this(); std::map>::iterator iter; for (iter = mAllKeyHal.begin(); iter != mAllKeyHal.end(); ++iter) { std::shared_ptr keyHal = iter->second; - std::shared_ptr monitor = shared_from_this(); keyHal->SetKeyMonitor(monitor); } } diff --git a/test/hal/tool/include/HalTestTool.h b/test/hal/tool/include/HalTestTool.h index 562b6b3..cde8a28 100644 --- a/test/hal/tool/include/HalTestTool.h +++ b/test/hal/tool/include/HalTestTool.h @@ -71,20 +71,22 @@ public: class KeyControlTest : public KeyControl, public VKeyHal { public: - KeyControlTest() = default; + KeyControlTest(const std::string &keyName); virtual ~KeyControlTest() = default; unsigned int GetStatusCheckPeriodMs(void) override { return PERIPHERAL_CHECK_PERIOD_MS; } void SetKeyMonitor(std::shared_ptr &monitor) override; void CheckKeyStatus(void) override; void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) override; + const std::string GetKeyName(void) override { return mKeyName; } private: - std::shared_ptr mMonitor; + const std::string mKeyName; + std::weak_ptr mMonitor; }; class KeyControlMock : public KeyControlTest { public: - KeyControlMock() = default; + KeyControlMock(const std::string &keyName); virtual ~KeyControlMock() = default; void SetKeyEvent(const KeyHalEvent &event); }; @@ -97,6 +99,7 @@ public: void UnInit(void); void SetAllKeysResult(std::map> &allKeys); void SetKeyEvent(const std::string keyName, const KeyHalEvent &event); + void SetKeyClick(const std::string &keyName, const unsigned int &pressingTimeMs = 200); private: void HalMockInit(std::shared_ptr &mock); diff --git a/test/hal/tool/src/HalTestTool.cpp b/test/hal/tool/src/HalTestTool.cpp index 4d66d77..21afd14 100644 --- a/test/hal/tool/src/HalTestTool.cpp +++ b/test/hal/tool/src/HalTestTool.cpp @@ -15,6 +15,7 @@ #include "HalTestTool.h" #include "HalMakePtrTest.h" #include "ILog.h" +#include StatusCode HalCppTest::GetLedHals(std::vector> &ledHals) { LogInfo("HalCppTest::GetLedHals\n"); @@ -43,6 +44,10 @@ StatusCode HalCppTest::GetAllKeysTrace(std::map &monitor) { // @@ -55,8 +60,17 @@ void KeyControlTest::CheckKeyStatus(void) } void KeyControlTest::KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) { - LogInfo("KeyEventTrigger time = %u\n", timeMs); - mMonitor->KeyEventHappened(keyName, static_cast(event), timeMs); + LogInfo("KeyEventTrigger keyName = %s, event = %s, time = %u\n", keyName.c_str(), PrintKeyEvent(event), timeMs); + auto monitor = mMonitor.lock(); + if (mMonitor.expired()) { + LogError("monitor is nullptr.\n"); + return; + } + monitor->KeyEventHappened(keyName, static_cast(event), timeMs); +} +KeyControlMock::KeyControlMock(const std::string &keyName) : KeyControlTest(keyName) +{ + // } void KeyControlMock::SetKeyEvent(const KeyHalEvent &event) { @@ -71,8 +85,6 @@ void HalTestTool::Init(void) } void HalTestTool::UnInit(void) { - // std::shared_ptr impl = std::make_shared(); - // IHalCpp::GetInstance(&impl); mHalMock.reset(); CancelOverrideHalMakePtrObject(); } @@ -90,6 +102,21 @@ void HalTestTool::SetKeyEvent(const std::string keyName, const KeyHalEvent &even } key->SetKeyEvent(event); } +void HalTestTool::SetKeyClick(const std::string &keyName, const unsigned int &pressingTimeMs) +{ + std::shared_ptr key = SearchKey(keyName); + if (!key) { + LogError("Can't set key event, key not found.\n"); + return; + } + auto keyClickThread = [=](std::shared_ptr key) { + key->KeyHalEventTrigger(KeyHalEvent::PRESSING); + std::this_thread::sleep_for(std::chrono::milliseconds(pressingTimeMs)); + key->KeyHalEventTrigger(KeyHalEvent::NOT_PRESSING); + }; + std::thread clickThread = std::thread(keyClickThread, key); + clickThread.detach(); +} void HalTestTool::SetAllKeysResult(std::shared_ptr &mock, std::map> &allKeys) { diff --git a/test/middleware/DeviceManager/src/DeviceManager_Test.cpp b/test/middleware/DeviceManager/src/DeviceManager_Test.cpp index fa33fcf..c6a45b5 100644 --- a/test/middleware/DeviceManager/src/DeviceManager_Test.cpp +++ b/test/middleware/DeviceManager/src/DeviceManager_Test.cpp @@ -20,6 +20,7 @@ #include namespace DeviceManagerTest { +const char *KEY_TEST = "TEST"; class DeviceManagerTest : public testing::Test, public HalTestTool { public: @@ -33,10 +34,7 @@ public: static void TearDownTestCase() { ILogUnInit(); } virtual void SetUp() { - // mLinuxTest = LinuxTest::CreateLinuxTest(); - // std::shared_ptr test = mLinuxTest; - // LinuxApiMock::GetInstance(&test); - // LinuxApiMock::GetInstance()->Init(); + CreateAllKeysMcok(); HalTestTool::Init(); CreateHalCppModule(); CreateDeviceManagerModule(); @@ -44,28 +42,36 @@ public: } virtual void TearDown() { - // LinuxApiMock::GetInstance()->UnInit(); - // mLinuxTest = std::make_shared(); - // std::shared_ptr test = std::make_shared(); - // LinuxApiMock::GetInstance(&test); HalTestTool::UnInit(); - // DestroyMcuManager(); DestroyDeviceManagerModule(); + DestroyAllKeysMock(); + } + +private: + void CreateAllKeysMcok(void) + { + std::shared_ptr key = std::make_shared(KEY_TEST); + mAllKeysMock[KEY_TEST] = key; + } + void DestroyAllKeysMock(void) + { + // + mAllKeysMock.clear(); } public: // std::shared_ptr mLinuxTest; +protected: + std::map> mAllKeysMock; }; // ../output_files/test/bin/DeviceManagerTest --gtest_filter=DeviceManagerTest.INTEGRATION_DeviceManager_EXAMPLE_Demo TEST_F(DeviceManagerTest, INTEGRATION_DeviceManager_EXAMPLE_Demo) { - std::map> allKeys; - std::shared_ptr key = std::make_shared(); - allKeys["test"] = key; - SetAllKeysResult(allKeys); + SetAllKeysResult(mAllKeysMock); IDeviceManager::GetInstance()->Init(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); - SetKeyEvent("test", KeyHalEvent::PRESSING); + // SetKeyEvent(KEY_TEST, KeyHalEvent::PRESSING); + SetKeyClick(KEY_TEST); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); IDeviceManager::GetInstance()->UnInit(); } diff --git a/utils/KeyControl/include/KeyControl.h b/utils/KeyControl/include/KeyControl.h index eef56b0..503cad4 100644 --- a/utils/KeyControl/include/KeyControl.h +++ b/utils/KeyControl/include/KeyControl.h @@ -17,8 +17,6 @@ #include #include #include -constexpr long int KEY_DO_NOT_HOLD_PRESSING = -1; -constexpr int KEY_ACTION_LONG_CLICK = 1000 * 5; constexpr int KEY_ACTION_SHORT_CLICK = 200; constexpr int KEY_ACTION_HOLD_DWON = 500; constexpr long int KEY_NOT_PRESSING = -1; @@ -42,25 +40,19 @@ public: virtual ~VKeyControl() = default; virtual const std::string GetKeyName(void) { return "undefine"; } virtual unsigned int GetStatusCheckPeriodMs(void) { return 0; } - virtual void KeyHalEventTrigger(const KeyHalEvent &event) {} virtual void KeyEventTrigger(const std::string &keyName, const KeyEvent &event, const unsigned int &timeMs) {} - virtual void TimerKeyEventTrigger(const KeyHalEvent &event) {} - virtual long int GetHoldPressingTimeMs(void) { return KEY_DO_NOT_HOLD_PRESSING; } }; -// using KeyActionReport = std::function; class KeyControl : public VKeyControl, public std::enable_shared_from_this { public: KeyControl(); - // KeyControl(std::shared_ptr &keyHal, const KeyActionReport &keyAction, - // const long int &longClickTime = KEY_ACTION_LONG_CLICK); - ~KeyControl(); - void KeyHalEventTrigger(const KeyHalEvent &event) override; - void TimerKeyEventTrigger(const KeyHalEvent &event) override; - long int GetHoldPressingTimeMs(void) override; + virtual ~KeyControl(); void Init(void); void UnInit(void); - void ActionReport(const std::string &key, const KeyHalEvent &keyEvent); + void KeyHalEventHandle(const std::string &key, const KeyHalEvent &keyEvent); + void TimerKeyEventTrigger(const KeyHalEvent &event); + void KeyHalEventTrigger(const KeyHalEvent &event); + long int GetHoldPressingTimeMs(void); private: void KeyPressingTrigger(const std::string &key); @@ -72,4 +64,5 @@ private: long int mPressingTime; long int mLongClickTime; }; +const char *PrintKeyEvent(const KeyEvent &event); #endif \ No newline at end of file diff --git a/utils/KeyControl/src/KeyControl.cpp b/utils/KeyControl/src/KeyControl.cpp index e2302dd..bd9c5af 100644 --- a/utils/KeyControl/src/KeyControl.cpp +++ b/utils/KeyControl/src/KeyControl.cpp @@ -18,35 +18,13 @@ constexpr long int KEY_PRESSING = 0; constexpr unsigned int NOT_A_HOLD_KEY_ACTION = 0; KeyControl::KeyControl() { - // mKeyHal = nullptr; - // mKeyActionReport = nullptr; mPressingTime = KEY_NOT_PRESSING; mLongClickTime = 0; } -// KeyControl::KeyControl(std::shared_ptr &keyHal, const KeyActionReport &keyAction, -// const long int &longClickTime) -// : mKeyActionReport(keyAction), mLongClickTime(longClickTime) -// { -// mPressingTime = KEY_NOT_PRESSING; -// } KeyControl::~KeyControl() {} -void KeyControl::KeyHalEventTrigger(const KeyHalEvent &event) -{ - std::lock_guard locker(mMutex); - ActionReport(GetKeyName(), event); -} -void KeyControl::TimerKeyEventTrigger(const KeyHalEvent &event) -{ - std::lock_guard locker(mMutex); - if (IsKeyPressing()) { - ActionReport(GetKeyName(), event); - } -} -long int KeyControl::GetHoldPressingTimeMs(void) { return mPressingTime; } bool KeyControl::IsKeyPressing(void) { return mPressingTime >= KEY_PRESSING ? true : false; } -// void KeyControl::Init(void) { SetKeyHalOwner(shared_from_this()); } void KeyControl::UnInit(void) {} -void KeyControl::ActionReport(const std::string &key, const KeyHalEvent &keyEvent) +void KeyControl::KeyHalEventHandle(const std::string &key, const KeyHalEvent &keyEvent) { if (KEY_PRESSING <= mPressingTime) { mPressingTime += GetStatusCheckPeriodMs(); @@ -63,6 +41,23 @@ void KeyControl::ActionReport(const std::string &key, const KeyHalEvent &keyEven break; } } +void KeyControl::TimerKeyEventTrigger(const KeyHalEvent &event) +{ + std::lock_guard locker(mMutex); + if (IsKeyPressing()) { + KeyHalEventHandle(GetKeyName(), event); + } +} +void KeyControl::KeyHalEventTrigger(const KeyHalEvent &event) +{ + std::lock_guard locker(mMutex); + KeyHalEventHandle(GetKeyName(), event); +} +long int KeyControl::GetHoldPressingTimeMs(void) +{ + // + return mPressingTime; +} void KeyControl::KeyPressingTrigger(const std::string &key) { if (mLongClickTime <= mPressingTime) // Do not support long click, it should be count in application code. @@ -84,4 +79,25 @@ void KeyControl::KeyNotPressingTrigger(const std::string &key) KeyEventTrigger(key, KeyEvent::HOLD_UP, mPressingTime); } mPressingTime = KEY_NOT_PRESSING; +} +const char *PrintKeyEvent(const KeyEvent &event) +{ + switch (event) { + case KeyEvent::SHORT_CLICK: { + return "SHORT_CLICK"; + break; + } + case KeyEvent::HOLD_DOWN: { + return "HOLD_DOWN"; + break; + } + case KeyEvent::HOLD_UP: { + return "HOLD_UP"; + break; + } + + default: + return "unknown event"; + break; + } } \ No newline at end of file