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