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 #ifndef HDF_DEVICE_NODE_H 10 #define HDF_DEVICE_NODE_H 11 12 #include "hdf_device.h" 13 #include "hdf_device_info.h" 14 #include "hdf_device_desc.h" 15 #include "hdf_dlist.h" 16 #include "hdf_driver.h" 17 #include "hdf_pm.h" 18 19 struct HdfDeviceNode; 20 struct DevHostService; 21 22 struct IDeviceNode { 23 struct HdfObject object; 24 int (*PublishService)(struct HdfDeviceNode *devNode); 25 int (*RemoveService)(struct HdfDeviceNode *devNode); 26 int (*LaunchNode)(struct HdfDeviceNode *devNode); 27 void (*UnlaunchNode)(struct HdfDeviceNode *devNode); 28 }; 29 30 struct HdfDeviceNode { 31 struct IDeviceNode super; 32 struct DListHead entry; 33 struct PowerStateToken *powerToken; 34 struct DevHostService *hostService; 35 struct HdfDeviceObject deviceObject; 36 struct IHdfDeviceToken *token; 37 struct HdfDriver *driver; 38 struct HdfDevice *device; 39 char *servName; 40 const char *servInfo; 41 char *driverName; 42 devid_t devId; 43 uint16_t policy; 44 uint16_t permission; 45 uint8_t devStatus; 46 bool servStatus; 47 char *interfaceDesc; 48 }; 49 50 enum DevNodeStaus { 51 DEVNODE_NONE = 0, 52 DEVNODE_INITED, 53 DEVNODE_LAUNCHED, 54 }; 55 56 int HdfDeviceNodeAddPowerStateListener( 57 struct HdfDeviceNode *devNode, const struct IPowerEventListener *listener); 58 void HdfDeviceNodeRemovePowerStateListener( 59 struct HdfDeviceNode *devNode, const struct IPowerEventListener *listener); 60 void HdfDeviceNodeConstruct(struct HdfDeviceNode *devNode); 61 void HdfDeviceNodeDestruct(struct HdfDeviceNode *devNode); 62 struct HdfDeviceNode *HdfDeviceNodeNewInstance(const struct HdfDeviceInfo *deviceInfo, struct HdfDriver *driver); 63 void HdfDeviceNodeFreeInstance(struct HdfDeviceNode *devNode); 64 void HdfDeviceNodeDelete(struct HdfDeviceNode *devNode); 65 int HdfDeviceNodePublishPublicService(struct HdfDeviceNode *devNode); 66 int HdfDeviceNodeRemoveService(struct HdfDeviceNode *devNode); 67 int DeviceDriverBind(struct HdfDeviceNode *devNode); 68 69 #endif /* HDF_DEVICE_NODE_H */ 70