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_PRODUCT_H
10 #define CAMERA_PRODUCT_H
11 
12 #include <utils/hdf_base.h>
13 
14 #define CAMERA_MAX_CMD_ID    23
15 
16 enum CameraDeviceType {
17     SENSOR_TYPE,
18     ISP_TYPE,
19     VCM_TYPE,
20     LENS_TYPE,
21     FLASH_TYPE,
22     UVC_TYPE,
23     STREAM_TYPE,
24 };
25 
26 enum CameraQueryMemeryFlags {
27     RELEASE_FLAG,
28     ALLOC_FLAG,
29 };
30 
31 typedef enum {
32     CAMERA_UVC_EVENT,
33 } CameraReceiveEventType;
34 
35 enum CameraMethodCmd {
36     CMD_OPEN_CAMERA,
37     CMD_CLOSE_CAMERA,
38     CMD_POWER_UP,
39     CMD_POWER_DOWN,
40     CMD_QUERY_CONFIG,
41     CMD_GET_CONFIG,
42     CMD_SET_CONFIG,
43     CMD_GET_FMT,
44     CMD_SET_FMT,
45     CMD_GET_CROP,
46     CMD_SET_CROP,
47     CMD_GET_FPS,
48     CMD_SET_FPS,
49     CMD_ENUM_FMT,
50     CMD_ENUM_DEVICES,
51     CMD_GET_ABILITY,
52     CMD_QUEUE_INIT,
53     CMD_REQ_MEMORY,
54     CMD_QUERY_MEMORY,
55     CMD_STREAM_QUEUE,
56     CMD_STREAM_DEQUEUE,
57     CMD_STREAM_ON,
58     CMD_STREAM_OFF,
59 };
60 
61 enum CameraPixFmt {
62     CAMERA_PIX_FMT_UNDIFINED = 0,
63 
64     CAMERA_PIX_FMT_YUV420 = 1,
65     CAMERA_PIX_FMT_YUV422 = 2,
66     CAMERA_PIX_FMT_YUV444 = 3,
67 
68     CAMERA_PIX_FMT_RGB565 = 100,
69     CAMERA_PIX_FMT_RGB444 = 101,
70     CAMERA_PIX_FMT_RGB555 = 102,
71     CAMERA_PIX_FMT_RGB32 = 103,
72 
73     CAMERA_PIX_FMT_SRGGB8 = 200,
74     CAMERA_PIX_FMT_SRGGB10 = 201,
75     CAMERA_PIX_FMT_SRGGB12 = 202,
76     CAMERA_PIX_FMT_SBGGR8 = 203,
77     CAMERA_PIX_FMT_SBGGR10 = 204,
78     CAMERA_PIX_FMT_SBGGR12 = 205,
79 
80     CAMERA_PIX_FMT_JPEG = 300,
81     CAMERA_PIX_FMT_MJPEG = 301,
82     CAMERA_PIX_FMT_MPEG = 302,
83     CAMERA_PIX_FMT_MPEG1 = 303,
84     CAMERA_PIX_FMT_MPEG2 = 304,
85     CAMERA_PIX_FMT_MPEG4 = 305,
86 
87     CAMERA_PIX_FMT_H264 = 400,
88     CAMERA_PIX_FMT_H264_NO_SC = 401,
89     CAMERA_PIX_FMT_H264_MVC = 402,
90 };
91 
92 enum CameraCmdEnumTypeFmt {
93     CAMERA_CMD_ENUM_FMT,
94     CAMERA_CMD_ENUM_FRAMESIZES,
95     CAMERA_CMD_ENUM_FRAMEINTERVALS,
96 };
97 
98 enum CameraPermissionId {
99     CAMERA_MASTER = 1,
100     CAMERA_SLAVE0,
101     CAMERA_SLAVE1,
102     CAMERA_SLAVE2,
103     CAMERA_SLAVE3,
104     CAMERA_SLAVE4,
105     CAMERA_SLAVE5,
106     CAMERA_SLAVE6,
107     CAMERA_SLAVE7,
108     CAMERA_SLAVE8,
109 };
110 
111 enum CmdGetConfigValue {
112     CAMERA_CMD_GET_EXPOSURE,                  /* SENSOR exposure time query */
113     CAMERA_CMD_GET_WHITE_BALANCE_MODE,        /* White balance mode query */
114     CAMERA_CMD_GET_WHITE_BALANCE,             /* White balance value query */
115 
116     CAMERA_CMD_GET_BRIGHTNESS,                /* Brightness query */
117     CAMERA_CMD_GET_CONTRAST,                  /* Contrast query */
118     CAMERA_CMD_GET_SATURATION,                /* Saturation query */
119     CAMERA_CMD_GET_HUE,                       /* Hue query */
120     CAMERA_CMD_GET_SHARPNESS,                 /* Sharpness query */
121     CAMERA_CMD_GET_GAIN,                      /* Gain query */
122     CAMERA_CMD_GET_GAMMA,                     /* Gamma query */
123     CAMERA_CMD_GET_HFLIP,                     /* Horizontal mirror query */
124     CAMERA_CMD_GET_VFLIP,                     /* Vertical mirror query */
125 
126     CAMERA_CMD_GET_FOCUS_MODE,                /* Focus mode query */
127     CAMERA_CMD_GET_FOCUS_ABSOLUTE,            /* Query of absolute value of focusing position */
128     CAMERA_CMD_GET_ZOOM_ABSOLUTE,             /* Zoom position absolute value query */
129     CAMERA_CMD_GET_ZOOM_CONTINUOUS,           /* Continuous zoom query */
130     CAMERA_CMD_GET_IRIS_ABSOLUTE,             /* Aperture absolute value query */
131     CAMERA_CMD_GET_IRIS_RELATIVE,             /* Aperture relative value query */
132 
133     CAMERA_CMD_GET_FLASH_FAULT,               /* Flash error query */
134     CAMERA_CMD_GET_FLASH_READY,               /* Flash ready query */
135 };
136 
137 enum CmdSetConfigValue {
138     CAMERA_CMD_SET_EXPOSURE,                  /* Sensor exposure time setting */
139     CAMERA_CMD_SET_WHITE_BALANCE_MODE,        /* White balance mode setting */
140     CAMERA_CMD_SET_WHITE_BALANCE,             /* White balance value setting */
141 
142     CAMERA_CMD_SET_BRIGHTNESS,                /* Brightness settings */
143     CAMERA_CMD_SET_CONTRAST,                  /* Contrast settings */
144     CAMERA_CMD_SET_SATURATION,                /* Saturation settings */
145     CAMERA_CMD_SET_HUE,                       /* Hue settings */
146     CAMERA_CMD_SET_SHARPNESS,                 /* Sharpness settings */
147 
148     CAMERA_CMD_SET_GAIN,                      /* Gain value setting */
149     CAMERA_CMD_SET_GAMMA,                     /* Gamma value setting */
150     CAMERA_CMD_SET_HFLIP,                     /* Horizontal mirror settings */
151     CAMERA_CMD_SET_VFLIP,                     /* Vertical mirror settings */
152 
153     CAMERA_CMD_SET_FOCUS_MODE,                /* Focus mode setting */
154     CAMERA_CMD_SET_FOCUS_ABSOLUTE,            /* Focus position absolute value setting */
155     CAMERA_CMD_SET_FOCUS_RELATIVE,            /* Setting of relative value of focusing position */
156     CAMERA_CMD_SET_ZOOM_ABSOLUTE,             /* Zoom position absolute value setting */
157     CAMERA_CMD_SET_ZOOM_RELATIVE,             /* Relative value setting of zoom position */
158     CAMERA_CMD_SET_ZOOM_CONTINUOUS,           /* Continuous zoom setting */
159     CAMERA_CMD_SET_IRIS_ABSOLUTE,             /* Aperture absolute value setting */
160     CAMERA_CMD_SET_IRIS_RELATIVE,             /* Aperture relative value setting */
161 
162     CAMERA_CMD_SET_FLASH_STROBE,              /* Flash settings setting */
163     CAMERA_CMD_SET_FLASH_INTENSITY,           /* Flash intensity setting */
164 };
165 
166 enum CameraExposureAutoType {
167     CAMERA_EXPOSURE_AUTO = 0,
168     CAMERA_EXPOSURE_MANUAL,
169     CAMERA_EXPOSURE_SHUTTER_PRIORITY,
170     CAMERA_EXPOSURE_APERTURE_PRIORITY,
171 };
172 
173 enum CameraWhitleBalanceAutoType {
174     CAMERA_WHITE_BALANCE_AUTO = 0,
175     CAMERA_WHITE_BALANCE_MANUAL,
176 };
177 
178 enum CameraFocusAutoType {
179     CAMERA_FOCUS_AUTO = 0,
180     CAMERA_FOCUS_MANUAL,
181 };
182 
183 enum CameraFlashMode {
184     CAMERA_FLASH_STROBE = 0,
185     CAMERA_FLASH_STROBE_STOP,
186 };
187 
188 enum CameraIrisAbsolute {
189     CAMERA_IRIS_F1 = 0,
190     CAMERA_IRIS_F1P2,
191     CAMERA_IRIS_F1P4,
192     CAMERA_IRIS_F2,
193     CAMERA_IRIS_F2P8,
194     CAMERA_IRIS_F4,
195     CAMERA_IRIS_F5P6,
196     CAMERA_IRIS_F8,
197     CAMERA_IRIS_F11,
198     CAMERA_IRIS_F16,
199     CAMERA_IRIS_F22,
200     CAMERA_IRIS_F32,
201     CAMERA_IRIS_F44,
202     CAMERA_IRIS_F64,
203 };
204 
205 enum CameraZoomContinuous {
206     CAMERA_ZOOM_WIDE = 0,
207     CAMERA_ZOOM_TELE,
208     CAMERA_ZOOM_STOP,
209 };
210 
211 struct UserCameraBuffer {
212     uint32_t id;
213     uint32_t flags;
214     uint32_t field;
215     uint64_t timeStamp;
216     uint32_t sequence;
217     uint32_t memType;
218     struct UserCameraPlane *planes;
219     uint32_t planeCount;
220 };
221 
222 struct UserCameraPlane {
223     uint32_t bytesUsed;
224     uint32_t length;
225     union {
226         uint32_t offset;
227         uint64_t userPtr;
228         uint32_t fd;
229     } memory;
230     unsigned long vaddr;
231     uint32_t dataOffset;
232 };
233 
234 struct UserCameraReq {
235     uint32_t count;
236     uint32_t memType;
237     uint32_t capabilities;
238 };
239 
240 enum CameraMemType {
241     MEMTYPE_UNKNOWN = 0,
242     MEMTYPE_MMAP = (1 << 0),
243     MEMTYPE_USERPTR = (1 << 1),
244     MEMTYPE_DMABUF = (1 << 2),
245 };
246 
247 /* UserCameraBuffer flags */
248 enum UserBufferFlags {
249     USER_BUFFER_QUEUED = (1 << 0),
250     USER_BUFFER_DONE = (1 << 1),
251     USER_BUFFER_ERROR = (1 << 2),
252     USER_BUFFER_LAST = (1 << 3),
253     USER_BUFFER_BLOCKING = (1 << 4),
254 };
255 
256 #endif  // CAMERA_PRODUCT_H