• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020-2021 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 "devsvc_manager_clnt.h"
10 #include "hdf_log.h"
11 #include "hdf_object_manager.h"
12 
13 #define HDF_LOG_TAG devsvc_manager_clnt
14 
DevSvcManagerClntAddService(const char * svcName,uint16_t devClass,struct HdfDeviceObject * service,const char * servinfo)15 int DevSvcManagerClntAddService(const char *svcName, uint16_t devClass,
16     struct HdfDeviceObject *service, const char *servinfo)
17 {
18     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
19     struct IDevSvcManager *serviceManager = NULL;
20     if (devSvcMgrClnt == NULL) {
21         HDF_LOGE("failed to add service, client is null");
22         return HDF_FAILURE;
23     }
24     if (devClass >= DEVICE_CLASS_MAX) {
25         HDF_LOGE("failed to add service, invalid class");
26         return HDF_FAILURE;
27     }
28 
29     serviceManager = devSvcMgrClnt->devSvcMgrIf;
30     if (serviceManager == NULL || serviceManager->AddService == NULL) {
31         HDF_LOGE("serviceManager AddService function is null");
32         return HDF_FAILURE;
33     }
34     return serviceManager->AddService(serviceManager, svcName, devClass, service, servinfo);
35 }
36 
DevSvcManagerClntUpdateService(const char * svcName,uint16_t devClass,struct HdfDeviceObject * service,const char * servinfo)37 int DevSvcManagerClntUpdateService(const char *svcName, uint16_t devClass,
38     struct HdfDeviceObject *service, const char *servinfo)
39 {
40     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
41     struct IDevSvcManager *serviceManager = NULL;
42     if (devSvcMgrClnt == NULL) {
43         HDF_LOGE("failed to add service, client is null");
44         return HDF_FAILURE;
45     }
46     if (devClass >= DEVICE_CLASS_MAX) {
47         HDF_LOGE("failed to add service, invalid class");
48         return HDF_FAILURE;
49     }
50 
51     serviceManager = devSvcMgrClnt->devSvcMgrIf;
52     if (serviceManager == NULL || serviceManager->UpdateService == NULL) {
53         HDF_LOGE("serviceManager UpdateService function is null");
54         return HDF_FAILURE;
55     }
56     return serviceManager->UpdateService(serviceManager, svcName, devClass, service, servinfo);
57 }
58 
DevSvcManagerClntGetService(const char * svcName)59 const struct HdfObject *DevSvcManagerClntGetService(const char *svcName)
60 {
61     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
62     struct IDevSvcManager *serviceManager = NULL;
63     if (devSvcMgrClnt == NULL) {
64         HDF_LOGE("failed to get service, client is null");
65         return NULL;
66     }
67 
68     serviceManager = devSvcMgrClnt->devSvcMgrIf;
69     if (serviceManager == NULL || serviceManager->GetService == NULL) {
70         HDF_LOGE("serviceManager GetService function is null");
71         return NULL;
72     }
73     return serviceManager->GetService(serviceManager, svcName);
74 }
75 
DevSvcManagerClntGetDeviceObject(const char * svcName)76 struct HdfDeviceObject *DevSvcManagerClntGetDeviceObject(const char *svcName)
77 {
78     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
79     struct IDevSvcManager *serviceManager = NULL;
80     if (devSvcMgrClnt == NULL) {
81         HDF_LOGE("failed to get device object, client is null");
82         return NULL;
83     }
84 
85     serviceManager = devSvcMgrClnt->devSvcMgrIf;
86     if (serviceManager == NULL || serviceManager->GetObject == NULL) {
87         HDF_LOGE("failed to get device object, method not implement");
88         return NULL;
89     }
90     return serviceManager->GetObject(serviceManager, svcName);
91 }
92 
DevSvcManagerClntSubscribeService(const char * svcName,struct SubscriberCallback callback)93 int DevSvcManagerClntSubscribeService(const char *svcName, struct SubscriberCallback callback)
94 {
95     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
96     struct IDevSvcManager *serviceManager = NULL;
97     if (devSvcMgrClnt == NULL) {
98         HDF_LOGE("failed to subscribe service, client is null");
99         return HDF_FAILURE;
100     }
101 
102     serviceManager = devSvcMgrClnt->devSvcMgrIf;
103     if (serviceManager == NULL || serviceManager->SubscribeService == NULL) {
104         HDF_LOGE("failed to subscribe service, method not implement");
105         return HDF_FAILURE;
106     }
107     return serviceManager->SubscribeService(serviceManager, svcName, callback);
108 }
109 
DevSvcManagerClntUnsubscribeService(const char * svcName)110 int DevSvcManagerClntUnsubscribeService(const char *svcName)
111 {
112     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
113     struct IDevSvcManager *serviceManager = NULL;
114     if (devSvcMgrClnt == NULL) {
115         HDF_LOGE("failed to unsubscribe service, client is null");
116         return HDF_FAILURE;
117     }
118 
119     serviceManager = devSvcMgrClnt->devSvcMgrIf;
120     if (serviceManager == NULL || serviceManager->UnsubscribeService == NULL) {
121         HDF_LOGE("failed to unsubscribe service, method not implement");
122         return HDF_FAILURE;
123     }
124     return serviceManager->UnsubscribeService(serviceManager, svcName);
125 }
126 
DevSvcManagerClntRemoveService(const char * svcName)127 void DevSvcManagerClntRemoveService(const char *svcName)
128 {
129     struct DevSvcManagerClnt *devSvcMgrClnt = DevSvcManagerClntGetInstance();
130     struct IDevSvcManager *serviceManager = NULL;
131     if (devSvcMgrClnt == NULL) {
132         HDF_LOGE("failed to remove service, devSvcMgrClnt is null");
133         return;
134     }
135 
136     serviceManager = devSvcMgrClnt->devSvcMgrIf;
137     if (serviceManager == NULL || serviceManager->RemoveService == NULL) {
138         return;
139     }
140     serviceManager->RemoveService(serviceManager, svcName);
141 }
142 
DevSvcManagerClntConstruct(struct DevSvcManagerClnt * inst)143 static void DevSvcManagerClntConstruct(struct DevSvcManagerClnt *inst)
144 {
145     inst->devSvcMgrIf = (struct IDevSvcManager *)HdfObjectManagerGetObject(HDF_OBJECT_ID_DEVSVC_MANAGER);
146 }
147 
DevSvcManagerClntGetInstance()148 struct DevSvcManagerClnt *DevSvcManagerClntGetInstance()
149 {
150     static struct DevSvcManagerClnt *instance = NULL;
151     if (instance == NULL) {
152         static struct DevSvcManagerClnt singletonInstance;
153         DevSvcManagerClntConstruct(&singletonInstance);
154         instance = &singletonInstance;
155     }
156     return instance;
157 }
158 
DevSvcManagerClntFreeInstance(struct DevSvcManagerClnt * instance)159 void DevSvcManagerClntFreeInstance(struct DevSvcManagerClnt *instance)
160 {
161     if (instance != NULL) {
162         HdfObjectManagerFreeObject((struct HdfObject *)instance->devSvcMgrIf);
163     }
164 }
165 
166