1 /*
2 * Copyright (c) 2020-2022 Huawei Device Co., Ltd.
3 *
4 * HDF is dual licensed: you can use it either under the terms of
5 * the GPL, or the BSD license, at your option.
6 * See the LICENSE file in the root of this repository for complete details.
7 */
8
9 #include "hdf_base.h"
10 #include "hdf_io_service.h"
11 #include "hdf_log.h"
12 #include "hdf_sbuf.h"
13
14 #define HDF_LOG_TAG hdf_devmgr_adapter
15
HdfLoadDriverByServiceName(const char * serviceName)16 int32_t HdfLoadDriverByServiceName(const char *serviceName)
17 {
18 int32_t ret = HDF_FAILURE;
19 struct HdfSBuf *data = NULL;
20 if (serviceName == NULL || strcmp(serviceName, DEV_MGR_NODE) == 0) {
21 return ret;
22 }
23 struct HdfIoService *ioService = HdfIoServiceBind(DEV_MGR_NODE);
24 if (ioService == NULL) {
25 HDF_LOGE("HdfLoadDriverByServiceName failed to get %{public}s service", DEV_MGR_NODE);
26 return ret;
27 }
28 data = HdfSbufObtainDefaultSize();
29 if (data == NULL) {
30 HDF_LOGE("HdfLoadDriverByServiceName failed to obtain sbuf data");
31 ret = HDF_DEV_ERR_NO_MEMORY;
32 goto OUT;
33 }
34 if (!HdfSbufWriteString(data, serviceName)) {
35 HDF_LOGE("HdfLoadDriverByServiceName failed to write sbuf");
36 ret = HDF_FAILURE;
37 goto OUT;
38 }
39 ret = ioService->dispatcher->Dispatch(&ioService->object, DEVMGR_LOAD_SERVICE, data, NULL);
40 if (ret != HDF_SUCCESS) {
41 HDF_LOGE("HdfLoadDriverByServiceName failed to load khdf driver %{public}s", serviceName);
42 }
43 OUT:
44 HdfIoServiceRecycle(ioService);
45 HdfSbufRecycle(data);
46 return ret;
47 }
48
HdfGetServiceNameByDeviceClass(DeviceClass deviceClass,struct HdfSBuf * reply)49 int32_t HdfGetServiceNameByDeviceClass(DeviceClass deviceClass, struct HdfSBuf *reply)
50 {
51 int32_t ret = HDF_FAILURE;
52 struct HdfSBuf *data = NULL;
53 if (reply == NULL) {
54 HDF_LOGE("%{public}s input reply is null", __func__);
55 return ret;
56 }
57 struct HdfIoService *ioService = HdfIoServiceBind(DEV_MGR_NODE);
58 if (ioService == NULL) {
59 HDF_LOGE("HdfGetServiceNameByDeviceClass failed to get %{public}s service", DEV_MGR_NODE);
60 return ret;
61 }
62 data = HdfSbufObtainDefaultSize();
63 if (data == NULL) {
64 HDF_LOGE("HdfGetServiceNameByDeviceClass failed to obtain sbuf data");
65 ret = HDF_DEV_ERR_NO_MEMORY;
66 goto OUT;
67 }
68 if (!HdfSbufWriteInt32(data, deviceClass)) {
69 HDF_LOGE("HdfGetServiceNameByDeviceClass failed to write sbuf");
70 ret = HDF_FAILURE;
71 goto OUT;
72 }
73 ret = ioService->dispatcher->Dispatch(&ioService->object, DEVMGR_GET_SERVICE, data, reply);
74 if (ret != HDF_SUCCESS) {
75 HDF_LOGE("HdfGetServiceNameByDeviceClass failed to query service by class");
76 }
77 OUT:
78 HdfIoServiceRecycle(ioService);
79 HdfSbufRecycle(data);
80 return ret;
81 }
82
HdfListAllService(struct HdfSBuf * reply)83 int32_t HdfListAllService(struct HdfSBuf *reply)
84 {
85 int32_t ret = HDF_FAILURE;
86 if (reply == NULL) {
87 HDF_LOGE("HdfListAllService input reply is null");
88 return ret;
89 }
90 struct HdfIoService *ioService = HdfIoServiceBind(DEV_MGR_NODE);
91 if (ioService == NULL) {
92 HDF_LOGE("HdfListAllService failed to get %{public}s service", DEV_MGR_NODE);
93 return ret;
94 }
95
96 ret = ioService->dispatcher->Dispatch(&ioService->object, DEVMGR_LIST_ALL_SERVICE, NULL, reply);
97 if (ret != HDF_SUCCESS) {
98 HDF_LOGE("failed to list all service info");
99 }
100 HdfIoServiceRecycle(ioService);
101 return ret;
102 }
103
HdfListAllDevice(struct HdfSBuf * reply)104 int32_t HdfListAllDevice(struct HdfSBuf *reply)
105 {
106 int32_t ret = HDF_FAILURE;
107 if (reply == NULL) {
108 HDF_LOGE("HdfListAllDevice input reply is null");
109 return ret;
110 }
111 struct HdfIoService *ioService = HdfIoServiceBind(DEV_MGR_NODE);
112 if (ioService == NULL) {
113 HDF_LOGE("HdfListAllDevice failed to get %{public}s service", DEV_MGR_NODE);
114 return ret;
115 }
116
117 ret = ioService->dispatcher->Dispatch(&ioService->object, DEVMGR_LIST_ALL_DEVICE, NULL, reply);
118 if (ret != HDF_SUCCESS) {
119 HDF_LOGE("failed to list all device info");
120 }
121 HdfIoServiceRecycle(ioService);
122 return ret;
123 }
124