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