1 /*
2  * Copyright (c) 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 #ifndef CAMERA_DEVICE_MANAGER_H
10 #define CAMERA_DEVICE_MANAGER_H
11 
12 #include <utils/device_resource_if.h>
13 #include <camera/camera_product.h>
14 #include "camera_buffer_manager.h"
15 #include "camera_buffer_manager_adapter.h"
16 #include "camera_config_parser.h"
17 
18 #define DEVICE_NAME_SIZE 20
19 #define DEVICE_DRIVER_MAX_NUM 20
20 #define CAMERA_COMPONENT_NAME_MAX_LEN 20
21 #define DRIVER_NAME_SIZE 20
22 #define DEVICE_NUM 3
23 
24 #define CHECK_RETURN_RET(ret) do { \
25     if ((ret) != 0) { \
26         HDF_LOGE("%s: failed, ret = %{public}d, line: %{public}d", __func__, ret, __LINE__); \
27         return ret; \
28     } \
29 } while (0)
30 
31 enum DevicePowerState {
32     CAMERA_DEVICE_POWER_DOWN = 0,
33     CAMERA_DEVICE_POWER_UP = 1
34 };
35 
36 struct UvcQueryCtrl {
37     uint32_t id;
38     uint32_t minimum;
39     uint32_t maximum;
40     uint32_t step;
41     uint32_t defaultValue;
42 };
43 
44 struct Pixel {
45     char description[32];
46     uint32_t format;
47     uint32_t width;
48     uint32_t height;
49     uint32_t maxWidth;
50     uint32_t maxHeight;
51     uint32_t minWidth;
52     uint32_t minHeight;
53     uint32_t sizeImage;
54 };
55 
56 struct FPS {
57     uint32_t numerator;
58     uint32_t denominator;
59 };
60 
61 struct CameraControl {
62     uint32_t id;
63     uint32_t value;
64 };
65 
66 struct Rect {
67     int32_t left;
68     int32_t top;
69     uint32_t width;
70     uint32_t height;
71 };
72 
73 struct Capability {
74     char driver[16];
75     char card[32];
76     char busInfo[32];
77     uint32_t capabilities;
78 };
79 
80 struct PixelFormat {
81     struct FPS fps;
82     struct Pixel pixel;
83     struct Rect crop;
84 };
85 
86 struct CameraCtrlConfig {
87     struct PixelFormat pixelFormat;
88     struct CameraControl ctrl;
89 };
90 
91 struct EnumPixelFormatData {
92     int32_t index;
93     struct PixelFormat pixelFormat;
94 };
95 
96 struct CameraDeviceDriverFactory {
97     const char *deviceName;
98     void (*releaseFactory)(struct CameraDeviceDriverFactory *factory);
99     struct CameraDeviceDriver *(*build)(const char *deviceName);
100     void (*release)(struct CameraDeviceDriver *deviceDriver);
101 };
102 
103 struct CameraDevice {
104     char deviceName[DEVICE_NAME_SIZE];
105     struct CameraDeviceDriver *deviceDriver;
106 };
107 
108 struct DeviceOps {
109     int32_t (*powerUp)(struct CameraDeviceDriver *regDev);
110     int32_t (*powerDown)(struct CameraDeviceDriver *regDev);
111     int32_t (*setConfig)(struct CameraDeviceDriver *regDev, struct CameraCtrlConfig *config);
112     int32_t (*getConfig)(struct CameraDeviceDriver *regDev, struct CameraCtrlConfig *config);
113     int32_t (*uvcQueryCtrl)(struct CameraDeviceDriver *regDev, struct UvcQueryCtrl *query);
114 };
115 
116 struct SensorDevice {
117     char kernelDrvName[DRIVER_NAME_SIZE];
118     struct DeviceOps *devOps;
119 };
120 
121 struct IspDevice {
122     char kernelDrvName[DRIVER_NAME_SIZE];
123     struct DeviceOps *devOps;
124 };
125 
126 struct VcmDevice {
127     char kernelDrvName[DRIVER_NAME_SIZE];
128     struct DeviceOps *devOps;
129 };
130 
131 struct LensDevice {
132     char kernelDrvName[DRIVER_NAME_SIZE];
133     struct DeviceOps *devOps;
134 };
135 
136 struct FlashDevice {
137     char kernelDrvName[DRIVER_NAME_SIZE];
138     struct DeviceOps *devOps;
139 };
140 
141 struct StreamDevice {
142     char kernelDrvName[DRIVER_NAME_SIZE];
143     struct StreamOps *streamOps;
144     struct BufferQueueImp queueImp;
145 };
146 
147 struct UvcDevice {
148     char kernelDrvName[DRIVER_NAME_SIZE];
149     struct DeviceOps *devOps;
150 };
151 
152 struct StreamOps {
153     int32_t (*streamSetFormat)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
154     int32_t (*streamGetFormat)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
155     int32_t (*streamSetCrop)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
156     int32_t (*streamGetCrop)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
157     int32_t (*streamSetFps)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
158     int32_t (*streamGetFps)(struct CameraCtrlConfig *config, struct StreamDevice *streamDev);
159     int32_t (*streamGetAbility)(struct Capability *capability, struct StreamDevice *streamDev);
160     int32_t (*streamEnumFormat)(struct PixelFormat *config, struct StreamDevice *streamDev,
161         uint32_t index, uint32_t cmd);
162     int32_t (*startStreaming)(struct StreamDevice *dev);
163     void (*stopStreaming)(struct StreamDevice *streamDev);
164     int32_t (*streamQueueInit)(struct StreamDevice *streamDev);
165 };
166 
167 struct CameraDeviceDriverManager {
168     struct CameraDeviceDriverFactory **deviceFactoryInsts;
169     int32_t (*regDeviceDriverFactory)(struct CameraDeviceDriverFactory *factoryInst);
170     struct CameraDeviceDriverFactory *(*getDeviceDriverFactoryByName)(const char *name);
171 };
172 
173 struct CameraDeviceDriver {
174     char name[CAMERA_COMPONENT_NAME_MAX_LEN];
175     struct SensorDevice *sensor[DEVICE_NUM];
176     struct IspDevice *isp[DEVICE_NUM];
177     struct VcmDevice *vcm[DEVICE_NUM];
178     struct LensDevice *lens[DEVICE_NUM];
179     struct FlashDevice *flash[DEVICE_NUM];
180     struct UvcDevice *uvc[DEVICE_NUM];
181     struct StreamDevice *stream[DEVICE_NUM];
182     int32_t (*init)(struct CameraDeviceDriver *deviceDriver, struct CameraDevice *camDev);
183     int32_t (*deinit)(struct CameraDeviceDriver *deviceDriver, struct CameraDevice *camDev);
184 };
185 
186 struct CommonDevice {
187     int32_t type;
188     int32_t permissionId;
189     const char *driverName;
190     struct CameraDevice *camDev;
191     int32_t camId;
192     int32_t devId;
193     uint32_t ctrlId;
194     struct HdfSBuf *reqData;
195     struct HdfSBuf *rspData;
196     struct CameraDeviceConfig *cameraHcsConfig;
197 };
198 
199 struct CameraDevice *CameraDeviceCreate(const char *deviceName, uint32_t len);
200 int32_t CameraDeviceRelease(struct CameraDevice *camDev);
201 struct CameraDeviceDriverFactory *CameraDeviceDriverFactoryGetByName(const char *deviceName);
202 int32_t CameraDeviceDriverFactoryRegister(struct CameraDeviceDriverFactory *obj);
203 int32_t DeviceDriverManagerDeInit(void);
204 struct CameraDevice *CameraDeviceGetByName(const char *deviceName);
205 struct CameraDeviceDriverManager *CameraDeviceDriverManagerGet(void);
206 
207 #endif  // CAMERA_DEVICE_MANAGER_H