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_CONFIG_PARSER_H
10 #define CAMERA_CONFIG_PARSER_H
11 
12 #include <utils/device_resource_if.h>
13 #include <utils/hdf_base.h>
14 
15 #define BUFFER_TYPE_MAX_NUM 3
16 #define FORMAT_TYPE_MAX_NUM 23
17 #define CAMERA_MAX_NUM 16
18 #define CAMERA_DEVICE_MAX_NUM 4
19 #define CTRL_INFO_COUNT 5
20 #define CTRL_ID_INDEX 0
21 #define CTRL_MAX_INDEX 1
22 #define CTRL_MIN_INDEX 2
23 #define CTRL_STEP_INDEX 3
24 #define CTRL_DEF_INDEX 4
25 #define CTRL_MAX_NUM 21
26 #define CTRL_VALUE_MAX_NUM CTRL_MAX_NUM * CTRL_INFO_COUNT
27 #define DEVICE_SUPPORT 1
28 #define DEVICE_NOT_SUPPORT 0
29 
30 struct CtrlCapInfo {
31     uint32_t ctrlId;
32     uint32_t max;
33     uint32_t min;
34     uint32_t step;
35     uint32_t def;
36 };
37 
38 struct SensorDeviceConfig {
39     const char *name;
40     uint8_t id;
41     uint8_t exposure;
42     uint8_t mirror;
43     uint8_t gain;
44     uint32_t ctrlValueNum;
45     uint32_t ctrlValue[CTRL_VALUE_MAX_NUM];
46     struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM];
47 };
48 
49 struct IspDeviceConfig {
50     const char *name;
51     uint8_t id;
52     uint8_t brightness;
53     uint8_t contrast;
54     uint8_t saturation;
55     uint8_t hue;
56     uint8_t sharpness;
57     uint8_t gain;
58     uint8_t gamma;
59     uint8_t whiteBalance;
60     uint32_t ctrlValueNum;
61     uint32_t ctrlValue[CTRL_VALUE_MAX_NUM];
62     struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM];
63 };
64 
65 struct LensDeviceConfig {
66     const char *name;
67     uint8_t id;
68     uint8_t aperture;
69     uint32_t ctrlValueNum;
70     uint32_t ctrlValue[CTRL_VALUE_MAX_NUM];
71     struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM];
72 };
73 
74 struct VcmDeviceConfig {
75     const char *name;
76     uint8_t id;
77     uint8_t focus;
78     uint8_t autoFocus;
79     uint8_t zoom;
80     uint32_t zoomMaxNum;
81     uint32_t ctrlValueNum;
82     uint32_t ctrlValue[CTRL_VALUE_MAX_NUM];
83     struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM];
84 };
85 
86 struct FlashDeviceConfig {
87     const char *name;
88     uint8_t id;
89     uint8_t flashMode;
90     uint8_t flashIntensity;
91     uint32_t ctrlValueNum;
92     uint32_t ctrlValue[CTRL_VALUE_MAX_NUM];
93     struct CtrlCapInfo ctrlCap[CTRL_MAX_NUM];
94 };
95 
96 struct StreamDeviceConfig {
97     const char *name;
98     uint8_t id;
99     uint32_t heightMaxNum;
100     uint32_t widthMaxNum;
101     uint32_t frameRateMaxNum;
102     uint8_t bufferCount;
103     uint32_t bufferTypeNum;
104     uint32_t bufferType[BUFFER_TYPE_MAX_NUM];
105     uint32_t formatTypeNum;
106     uint32_t formatType[FORMAT_TYPE_MAX_NUM];
107 };
108 
109 struct CameraSensorConfig {
110     uint8_t mode;
111     uint16_t sensorNum;
112     struct SensorDeviceConfig sensor[CAMERA_DEVICE_MAX_NUM];
113 };
114 
115 struct CameraIspConfig {
116     uint8_t mode;
117     uint16_t ispNum;
118     struct IspDeviceConfig isp[CAMERA_DEVICE_MAX_NUM];
119 };
120 
121 struct CameraLensConfig {
122     uint8_t mode;
123     uint16_t lensNum;
124     struct LensDeviceConfig lens[CAMERA_DEVICE_MAX_NUM];
125 };
126 
127 struct CameraVcmConfig {
128     uint8_t mode;
129     uint16_t vcmNum;
130     struct VcmDeviceConfig vcm[CAMERA_DEVICE_MAX_NUM];
131 };
132 
133 struct CameraFlashConfig {
134     uint8_t mode;
135     uint16_t flashNum;
136     struct FlashDeviceConfig flash[CAMERA_DEVICE_MAX_NUM];
137 };
138 
139 struct CameraStreamConfig {
140     uint8_t mode;
141     uint16_t streamNum;
142     struct StreamDeviceConfig stream[CAMERA_DEVICE_MAX_NUM];
143 };
144 
145 struct CameraDeviceConfig {
146     const char *deviceName;
147     struct CameraSensorConfig sensor;
148     struct CameraIspConfig isp;
149     struct CameraLensConfig lens;
150     struct CameraVcmConfig vcm;
151     struct CameraFlashConfig flash;
152     struct CameraStreamConfig stream;
153 };
154 
155 struct CameraConfigRoot {
156     uint8_t uvcMode;
157     uint16_t deviceNum;
158     struct CameraDeviceConfig deviceConfig[CAMERA_MAX_NUM];
159 };
160 
161 struct CameraConfigRoot *HdfCameraGetConfigRoot(void);
162 int32_t HdfParseCameraConfig(const struct DeviceResourceNode *node);
163 
164 #endif  // CAMERA_CONFIG_PARSER_H
165