diff --git a/interfaces/ddk/hid/hid_ddk_api.h b/interfaces/ddk/hid/hid_ddk_api.h index 706601d0bfa48869c6c0c64118a2e572ad9e255a..39477f43f8152ba2dcc79b1e3251262f828c3f44 100644 --- a/interfaces/ddk/hid/hid_ddk_api.h +++ b/interfaces/ddk/hid/hid_ddk_api.h @@ -63,10 +63,10 @@ int32_t OH_Hid_CreateDevice(Hid_Device *hidDevice, Hid_EventProperties *hidEvent * * @permission ohos.permission.ACCESS_DDK_HID * @param deviceId ID of the device, to which the event list is sent. - * @param items List of events to sent. The event information includes the event type (HidEventType), - * event code (HidSynEvent for a synchronization event code, HidKeyCode for a key code, HidBtnCode - * for a button code, HidAbsAxes for an absolute coordinate code, HidRelAxes - * for a relative coordinate event, and HidMscEvent for other input event code), and value input by the device. + * @param items List of events to sent. The event information includes the event type (Hid_EventType), + * event code (Hid_SynEvent for a synchronization event code, Hid_KeyCode for a key code, + * Hid_AbsAxes for an absolute coordinate code, Hid_RelAxes for a relative coordinate event, + * and Hid_MscEvent for other input event code), and value input by the device. * @param length Length of the event list (number of events sent at a time). * @return Returns 0 if the operation is successful; returns a negative number otherwise. * @since 11 diff --git a/interfaces/ddk/hid/hid_ddk_types.h b/interfaces/ddk/hid/hid_ddk_types.h index e90ba7d3d03f9c51cad9eb12715c3f1d3acd485f..6002980feddb32b84e915c5d5749df0fd4ad7bfe 100644 --- a/interfaces/ddk/hid/hid_ddk_types.h +++ b/interfaces/ddk/hid/hid_ddk_types.h @@ -347,7 +347,7 @@ typedef enum { /** Lens */ HID_BTN_TOOL_LENS = 0x147, /** Five-finger touch */ - HID_BTN_TOOL_QUINTTAP = 0x148, + HID_BTN_TOOL_QUINT_TAP = 0x148, /** Stylus 3 */ HID_BTN_STYLUS3 = 0x149, /** Touch */ @@ -357,11 +357,11 @@ typedef enum { /** Stylus 2 */ HID_BTN_STYLUS2 = 0x14c, /** Two-finger touch */ - HID_BTN_TOOL_DOUBLETAP = 0x14d, + HID_BTN_TOOL_DOUBLE_TAP = 0x14d, /** Three-finger touch */ - HID_BTN_TOOL_TRIPLETAP = 0x14e, + HID_BTN_TOOL_TRIPLE_TAP = 0x14e, /** Four-finger touch */ - HID_BTN_TOOL_QUADTAP = 0x14f, + HID_BTN_TOOL_QUAD_TAP = 0x14f, /** Scroll wheel */ HID_BTN_WHEEL = 0x150 } Hid_KeyCode; @@ -472,7 +472,7 @@ typedef enum { /** Serial number */ HID_MSC_SERIAL = 0x00, /** Pulse */ - HID_MSC_PULSELED = 0x01, + HID_MSC_PULSE_LED = 0x01, /** Gesture */ HID_MSC_GESTURE = 0x02, /** Start event */ diff --git a/test/unittest/emit_event_test/BUILD.gn b/test/unittest/emit_event_test/BUILD.gn index 22565511b622c5060f91e5553e9ac7e7867a64e7..5c6e1732732e70473f9a7409d50a66fa68196263 100644 --- a/test/unittest/emit_event_test/BUILD.gn +++ b/test/unittest/emit_event_test/BUILD.gn @@ -21,6 +21,7 @@ ohos_unittest("emit_event_test") { include_dirs = [ "${ext_mgr_path}/interfaces/ddk/hid/", "${ext_mgr_path}/interfaces/innerkits/", + "${ext_mgr_path}/services/zidl/include", ] deps = [ "${ext_mgr_path}/interfaces/innerkits:driver_ext_mgr_client" ] @@ -28,5 +29,6 @@ ohos_unittest("emit_event_test") { "c_utils:utils", "hilog:libhilog", "ipc:ipc_single", + "samgr:samgr_proxy", ] } diff --git a/test/unittest/emit_event_test/emit_event_test.cpp b/test/unittest/emit_event_test/emit_event_test.cpp index c010976e6587d892294f0aea5ed85eec9fb97da9..fa7310a42c11fa4c608dd0bccbb00d80c42b5084 100644 --- a/test/unittest/emit_event_test/emit_event_test.cpp +++ b/test/unittest/emit_event_test/emit_event_test.cpp @@ -15,10 +15,13 @@ #include #include +#include +#include #include #include "driver_ext_mgr_client.h" #include "hilog_wrapper.h" - +#include "iservice_registry.h" +#include "system_ability_load_callback_stub.h" namespace OHOS { namespace ExternalDeviceManager { @@ -30,52 +33,110 @@ public: void SetUp() override {}; void TearDown() override {}; - static Hid_Device* CreateDeviceMock(int8_t isPropExMax); - static Hid_EventProperties* CreateEventPropertiesMock(int8_t isEventTypeExMax, int8_t isKeyExMax, int8_t isAbsExMax, - int8_t isRelExMax, int8_t isMscExMax); - static DriverExtMgrClient &edmClient; - static int32_t deviceId; +private: + class LoadCallback : public SystemAbilityLoadCallbackStub { + public: + void OnLoadSystemAbilitySuccess(int32_t systemAbilityId, const sptr &remoteObject) override; + void OnLoadSystemAbilityFail(int32_t systemAbilityId) override; + }; +}; + +static DriverExtMgrClient &edmClient = DriverExtMgrClient::GetInstance(); +static int32_t deviceId = -1; +enum class LoadStatus { + LOAD_SUCCESS, + LOAD_FAILED, + ALREADY_EXISTS, }; -DriverExtMgrClient &EmitEventTest::edmClient = DriverExtMgrClient::GetInstance(); -int32_t EmitEventTest::deviceId = -1; +static LoadStatus g_loadStatus_ = LoadStatus::LOAD_FAILED; +static sptr g_saObject = nullptr; +static constexpr uint64_t START_SA_SERVICE_WAIT_TIME = 3; + +void EmitEventTest::SetUpTestCase() +{ + sptr samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + EDM_LOGE(EDM_MODULE_TEST, "%{public}s get samgr failed", __func__); + g_loadStatus_ = LoadStatus::LOAD_FAILED; + return; + } + + auto saObj = samgr->CheckSystemAbility(HDF_EXTERNAL_DEVICE_MANAGER_SA_ID); + if (saObj != nullptr) { + g_saObject = saObj; + g_loadStatus_ = LoadStatus::ALREADY_EXISTS; + EDM_LOGE(EDM_MODULE_TEST, "%{public}s external device SA exist", __func__); + return; + } + + sptr loadCallback_ = new LoadCallback(); + int32_t ret = samgr->LoadSystemAbility(HDF_EXTERNAL_DEVICE_MANAGER_SA_ID, loadCallback_); + if (ret != UsbErrCode::EDM_OK) { + g_loadStatus_ = LoadStatus::LOAD_FAILED; + } + EDM_LOGE(EDM_MODULE_TEST, "%{public}s load hdf_ext_devmgr, ret:%{public}d", __func__, ret); +} + +void EmitEventTest::TearDownTestCase() +{ + if (g_loadStatus_ == LoadStatus::LOAD_FAILED || g_loadStatus_ == LoadStatus::ALREADY_EXISTS) { + return; + } + + sptr samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + EDM_LOGE(EDM_MODULE_TEST, "%{public}s get samgr failed", __func__); + return; + } + + int32_t ret = samgr->UnloadSystemAbility(HDF_EXTERNAL_DEVICE_MANAGER_SA_ID); + EDM_LOGE(EDM_MODULE_TEST, "%{public}s unload hdf_ext_devmgr, ret:%{public}d", __func__, ret); +} + +void EmitEventTest::LoadCallback::OnLoadSystemAbilitySuccess( + int32_t systemAbilityId, const sptr &remoteObject) +{ + std::cout << "load success: systemAbilityId:" << systemAbilityId + << " IRemoteObject result:" << ((remoteObject != nullptr) ? "succeed" : "failed") << std::endl; + g_loadStatus_ = LoadStatus::LOAD_SUCCESS; + g_saObject = remoteObject; +} + +void EmitEventTest::LoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId) +{ + std::cout << "load failed: systemAbilityId:" << systemAbilityId << std::endl; + g_loadStatus_ = LoadStatus::LOAD_FAILED; + g_saObject = nullptr; +} -void EmitEventTest::SetUpTestCase() {} +HWTEST_F(EmitEventTest, CheckSAServiceLoad001, TestSize.Level1) +{ + if (g_loadStatus_ != LoadStatus::ALREADY_EXISTS) { + std::this_thread::sleep_for(std::chrono::seconds(START_SA_SERVICE_WAIT_TIME)); + } -void EmitEventTest::TearDownTestCase() {} + ASSERT_NE(g_saObject, nullptr); +} -Hid_Device* EmitEventTest::CreateDeviceMock(int8_t isPropExMax) +HWTEST_F(EmitEventTest, CreateDevice001, TestSize.Level1) { - Hid_DeviceProp hidDeviceProp[MAX_HID_DEVICE_PROP_LEN] = { HID_PROP_POINTER, HID_PROP_DIRECT }; Hid_Device hidDevice = { .deviceName = "VSoC keyboard", .vendorId = 0x6006, .productId = 0x6008, .version = 1, - .bustype = BUS_USB, - .properties = hidDeviceProp, - .propLength = isPropExMax ? (MAX_HID_DEVICE_PROP_LEN + 1) : 2 - }; - return &hidDevice; -} - -Hid_EventProperties* EmitEventTest::CreateEventPropertiesMock(int8_t isEventTypeExMax, int8_t isKeyExMax, - int8_t isAbsExMax, int8_t isRelExMax, int8_t isMscExMax) -{ - Hid_EventType hidEventType[MAX_HID_EVENT_TYPES_LEN] = { HID_EV_SYN, HID_EV_KEY }; - Hid_KeyCode hidKeyCode[MAX_HID_KEYS_LEN] = { HID_KEY_A, HID_KEY_B }; - Hid_AbsAxes hidAbsAxes[MAX_HID_ABS_LEN] = { HID_ABS_X, HID_ABS_Y }; - Hid_RelAxes hidRelAxes[MAX_HID_REL_BITS_LEN] = { HID_REL_X, HID_REL_Y }; - Hid_MscEvent hidMscEvent[MAX_HID_MISC_EVENT_LEN] = { HID_MSC_SERIAL, HID_MSC_PULSELED }; - - Hid_EventProperties hidEventProperties = { - .hidEventTypes = { hidEventType, isEventTypeExMax ? (MAX_HID_EVENT_TYPES_LEN + 1) : 2 }, - .hidKeys = { hidKeyCode, isKeyExMax ? (MAX_HID_KEYS_LEN + 1) : 2 }, - .hidAbs = { hidAbsAxes, isAbsExMax ? (MAX_HID_ABS_LEN + 1) : 2 }, - .hidRelBits = { hidRelAxes, isRelExMax ? (MAX_HID_REL_BITS_LEN + 1) : 2 }, - .hidMiscellaneous = { hidMscEvent, isMscExMax ? (MAX_HID_MISC_EVENT_LEN + 1) : 2 } + .bustype = BUS_USB }; - return &hidEventProperties; + std::vector eventType = {HID_EV_KEY}; + Hid_EventTypeArray eventTypeArray = {.hidEventType = eventType.data(), .length = (uint16_t)eventType.size()}; + std::vector keyCode = {HID_KEY_1, HID_KEY_SPACE, HID_KEY_BACKSPACE, HID_KEY_ENTER}; + Hid_KeyCodeArray keyCodeArray = {.hidKeyCode = keyCode.data(), .length = (uint16_t)keyCode.size()}; + Hid_EventProperties hidEventProp = {.hidEventTypes = eventTypeArray, .hidKeys = keyCodeArray}; + auto ret = edmClient.CreateDevice(&hidDevice, &hidEventProp); + deviceId = ret; + std::cout << "create device: deviceId:" << deviceId << std::endl; + ASSERT_GE(ret, 0); } HWTEST_F(EmitEventTest, EmitEvent001, TestSize.Level1) @@ -93,9 +154,9 @@ HWTEST_F(EmitEventTest, EmitEvent002, TestSize.Level1) { const uint16_t len = 21; std::vector items; - Hid_EmitItem item = {1, 0x14a, 108}; for (uint16_t i = 0; i < len; ++i) { - items[i] = item; + Hid_EmitItem item = {1, 0x14a, 108}; + items.push_back(item); } auto ret = edmClient.EmitEvent(deviceId, items); ASSERT_NE(ret, 0); @@ -105,94 +166,17 @@ HWTEST_F(EmitEventTest, EmitEvent003, TestSize.Level1) { const uint16_t len = 20; std::vector items; - Hid_EmitItem item = {1, 0x14a, 108}; for (uint16_t i = 0; i < len; ++i) { - items[i] = item; + Hid_EmitItem item = {1, 0x14a, 108}; + items.push_back(item); } auto ret = edmClient.EmitEvent(deviceId, items); ASSERT_EQ(ret, 0); } -HWTEST_F(EmitEventTest, CreateDevice001, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(0, 0, 0, 0, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_GE(ret, 0); - deviceId = ret; -} - -HWTEST_F(EmitEventTest, CreateDevice002, TestSize.Level1) -{ - auto device = CreateDeviceMock(1); - auto eventProperties = CreateEventPropertiesMock(0, 0, 0, 0, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice003, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(1, 0, 0, 0, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice004, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(0, 1, 0, 0, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice005, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(0, 0, 1, 0, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice006, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(0, 0, 0, 1, 0); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice007, TestSize.Level1) -{ - auto device = CreateDeviceMock(0); - auto eventProperties = CreateEventPropertiesMock(0, 0, 0, 0, 1); - auto ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - -HWTEST_F(EmitEventTest, CreateDevice008, TestSize.Level1) -{ - const int16_t num = 200; - int16_t idx = deviceId < 0 ? 0 : 1; - Hid_EventProperties *eventProperties; - Hid_Device* device; - int32_t ret; - while (idx <= num) { - device = CreateDeviceMock(0); - eventProperties = CreateEventPropertiesMock(0, 0, 0, 0, 0); - ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - if (ret >= 0) { - idx++; - } - } - device = CreateDeviceMock(0); - eventProperties = CreateEventPropertiesMock(0, 0, 0, 0, 0); - ret = EmitEventTest::edmClient.CreateDevice(device, eventProperties); - ASSERT_LT(ret, 0); -} - HWTEST_F(EmitEventTest, DestroyDevice001, TestSize.Level1) { + std::cout << "destroy device: deviceId:" << deviceId << std::endl; int32_t ret = edmClient.DestroyDevice(deviceId); ASSERT_EQ(ret, 0); } @@ -205,8 +189,8 @@ HWTEST_F(EmitEventTest, DestroyDevice002, TestSize.Level1) HWTEST_F(EmitEventTest, DestroyDevice003, TestSize.Level1) { - const int16_t deviceId = 200; - int32_t ret = edmClient.DestroyDevice(deviceId); + const int16_t devId = 200; + int32_t ret = edmClient.DestroyDevice(devId); ASSERT_NE(ret, 0); } } // namespace ExternalDeviceManager