• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 "ioservstat_listener.h"
10 #include "hdf_service_status_inner.h"
11 #include "osal_mem.h"
12 
OnIoServiceEventReceive(struct HdfDevEventlistener * listener,struct HdfIoService * service,uint32_t id,struct HdfSBuf * data)13 static int OnIoServiceEventReceive(
14     struct HdfDevEventlistener *listener, struct HdfIoService *service, uint32_t id, struct HdfSBuf *data)
15 {
16     if (listener == NULL || service == NULL || data == NULL) {
17         return HDF_ERR_INVALID_PARAM;
18     }
19     (void)id;
20     struct ServiceStatus status = { 0 };
21     if (ServiceStatusUnMarshalling(&status, data) != HDF_SUCCESS) {
22         return HDF_ERR_INVALID_PARAM;
23     }
24 
25     struct IoServiceStatusListener *statusListener = listener->priv;
26     if (statusListener->svcstatListener.callback != NULL &&
27         (statusListener->deviceClass & status.deviceClass)) {
28         statusListener->svcstatListener.callback(&statusListener->svcstatListener, &status);
29     }
30 
31     return HDF_SUCCESS;
32 }
33 
IoServiceStatusListenerNewInstance(void)34 struct ServiceStatusListener *IoServiceStatusListenerNewInstance(void)
35 {
36     struct IoServiceStatusListener *listener = OsalMemCalloc(sizeof(struct IoServiceStatusListener));
37     if (listener == NULL) {
38         return NULL;
39     }
40 
41     listener->ioservListener.onReceive = OnIoServiceEventReceive;
42     listener->ioservListener.priv = (void *)listener;
43 
44     return &listener->svcstatListener;
45 }
46 
IoServiceStatusListenerFree(struct ServiceStatusListener * listener)47 void IoServiceStatusListenerFree(struct ServiceStatusListener *listener)
48 {
49     if (listener == NULL) {
50         return;
51     }
52     struct IoServiceStatusListener *ioservListener
53         = CONTAINER_OF(listener, struct IoServiceStatusListener, svcstatListener);
54     OsalMemFree(ioservListener);
55 }