@@ -55,7 +55,7 @@ typedef struct
55
55
} CAMERA_Ctx_t ;
56
56
57
57
CMW_CameraInit_t camera_conf ;
58
- CMW_Sensor_Name_t detected_sensor ;
58
+ CMW_Sensor_Name_t connected_sensor ;
59
59
CAMERA_Ctx_t Camera_Ctx ;
60
60
61
61
DCMIPP_HandleTypeDef hcamera_dcmipp ;
@@ -111,11 +111,11 @@ int32_t CMW_CAMERA_SetPipeConfig(uint32_t pipe, CMW_DCMIPP_Conf_t *p_conf, uint3
111
111
int32_t CMW_CAMERA_GetSensorName (CMW_Sensor_Name_t * sensorName )
112
112
{
113
113
int32_t ret = CMW_ERROR_NONE ;
114
- CMW_Sensor_Init_t initValues ;
114
+ CMW_Sensor_Init_t initValues = { 0 } ;
115
115
116
116
if (is_camera_init != 0 )
117
117
{
118
- * sensorName = detected_sensor ;
118
+ * sensorName = connected_sensor ;
119
119
return CMW_ERROR_NONE ;
120
120
}
121
121
@@ -124,6 +124,7 @@ int32_t CMW_CAMERA_GetSensorName(CMW_Sensor_Name_t *sensorName)
124
124
initValues .fps = 30 ;
125
125
initValues .pixel_format = DCMIPP_PIXEL_PACKER_FORMAT_RGB565_1 ;
126
126
initValues .mirrorFlip = CMW_MIRRORFLIP_NONE ;
127
+ initValues .sensor_config = NULL ;
127
128
128
129
/* Set DCMIPP instance */
129
130
hcamera_dcmipp .Instance = DCMIPP ;
@@ -143,12 +144,12 @@ int32_t CMW_CAMERA_GetSensorName(CMW_Sensor_Name_t *sensorName)
143
144
144
145
CMW_CAMERA_EnableGPIOs ();
145
146
146
- ret = CMW_CAMERA_Probe_Sensor (& initValues , & detected_sensor );
147
+ ret = CMW_CAMERA_Probe_Sensor (& initValues , & connected_sensor );
147
148
if (ret != CMW_ERROR_NONE )
148
149
{
149
150
return CMW_ERROR_UNKNOWN_COMPONENT ;
150
151
}
151
- * sensorName = detected_sensor ;
152
+ * sensorName = connected_sensor ;
152
153
return CMW_ERROR_NONE ;
153
154
}
154
155
@@ -210,7 +211,6 @@ static int CMW_CAMERA_Probe_Sensor(CMW_Sensor_Init_t *initValues, CMW_Sensor_Nam
210
211
return ret ;
211
212
}
212
213
#endif
213
-
214
214
#if defined(USE_VD66GY_SENSOR )
215
215
ret = CMW_CAMERA_VD66GY_Init (initValues );
216
216
if (ret == CMW_ERROR_NONE )
@@ -237,13 +237,14 @@ static int CMW_CAMERA_Probe_Sensor(CMW_Sensor_Init_t *initValues, CMW_Sensor_Nam
237
237
238
238
/**
239
239
* @brief Initializes the camera.
240
- * @param initConf Camera sensor requested config
240
+ * @param initConf Mandatory: General camera config
241
+ * @param sensor_config Optional: Sensor specific configuration
241
242
* @retval CMW status
242
243
*/
243
- int32_t CMW_CAMERA_Init (CMW_CameraInit_t * initConf )
244
+ int32_t CMW_CAMERA_Init (CMW_CameraInit_t * initConf , CMW_Sensor_Config_t * sensor_config )
244
245
{
245
246
int32_t ret = CMW_ERROR_NONE ;
246
- CMW_Sensor_Init_t initValues ;
247
+ CMW_Sensor_Init_t initValues = { 0 } ;
247
248
ISP_SensorInfoTypeDef info = {0 };
248
249
249
250
initValues .width = initConf -> width ;
@@ -252,9 +253,15 @@ int32_t CMW_CAMERA_Init(CMW_CameraInit_t *initConf)
252
253
initValues .pixel_format = initConf -> pixel_format ;
253
254
initValues .mirrorFlip = initConf -> mirror_flip ;
254
255
255
- if (is_camera_init != 0 )
256
+ if (( sensor_config != NULL ) && ( sensor_config -> selected_sensor != CMW_NOTKNOWN_Sensor ) )
256
257
{
257
- return CMW_ERROR_NONE ;
258
+ connected_sensor = sensor_config -> selected_sensor ; // Assume The sensor is the one selected by the application. Check during probe
259
+ initValues .sensor_config = (void * ) & sensor_config -> config ;
260
+ }
261
+ else
262
+ {
263
+ connected_sensor = CMW_NOTKNOWN_Sensor ;
264
+ initValues .sensor_config = NULL ;
258
265
}
259
266
260
267
/* Set DCMIPP instance */
@@ -275,7 +282,7 @@ int32_t CMW_CAMERA_Init(CMW_CameraInit_t *initConf)
275
282
276
283
CMW_CAMERA_EnableGPIOs ();
277
284
278
- ret = CMW_CAMERA_Probe_Sensor (& initValues , & detected_sensor );
285
+ ret = CMW_CAMERA_Probe_Sensor (& initValues , & connected_sensor );
279
286
if (ret != CMW_ERROR_NONE )
280
287
{
281
288
return CMW_ERROR_UNKNOWN_COMPONENT ;
@@ -943,7 +950,6 @@ static int32_t CMW_CAMERA_VD55G1_Init( CMW_Sensor_Init_t *initSensors_params)
943
950
944
951
memset (& camera_bsp , 0 , sizeof (camera_bsp ));
945
952
camera_bsp .vd55g1_bsp .Address = CAMERA_VD55G1_ADDRESS ;
946
- camera_bsp .vd55g1_bsp .ClockInHz = CAMERA_VD55G1_FREQ_IN_HZ ;
947
953
camera_bsp .vd55g1_bsp .Init = CMW_I2C_INIT ;
948
954
camera_bsp .vd55g1_bsp .DeInit = CMW_I2C_DEINIT ;
949
955
camera_bsp .vd55g1_bsp .WriteReg = CMW_I2C_WRITEREG16 ;
@@ -958,6 +964,12 @@ static int32_t CMW_CAMERA_VD55G1_Init( CMW_Sensor_Init_t *initSensors_params)
958
964
return CMW_ERROR_COMPONENT_FAILURE ;
959
965
}
960
966
967
+ if ((connected_sensor != CMW_VD55G1_Sensor ) && (connected_sensor != CMW_NOTKNOWN_Sensor ))
968
+ {
969
+ /* If the selected sensor in the application side has selected a different sensors than VD55G1 */
970
+ return CMW_ERROR_COMPONENT_FAILURE ;
971
+ }
972
+
961
973
/* Special case: when resolution is not specified take the full sensor resolution */
962
974
if ((initSensors_params -> width == 0 ) || (initSensors_params -> height == 0 ))
963
975
{
@@ -1014,7 +1026,6 @@ static int32_t CMW_CAMERA_VD66GY_Init( CMW_Sensor_Init_t *initSensors_params)
1014
1026
1015
1027
memset (& camera_bsp , 0 , sizeof (camera_bsp ));
1016
1028
camera_bsp .vd66gy_bsp .Address = CAMERA_VD66GY_ADDRESS ;
1017
- camera_bsp .vd66gy_bsp .ClockInHz = CAMERA_VD66GY_FREQ_IN_HZ ;
1018
1029
camera_bsp .vd66gy_bsp .Init = CMW_I2C_INIT ;
1019
1030
camera_bsp .vd66gy_bsp .DeInit = CMW_I2C_DEINIT ;
1020
1031
camera_bsp .vd66gy_bsp .ReadReg = CMW_I2C_READREG16 ;
@@ -1035,6 +1046,12 @@ static int32_t CMW_CAMERA_VD66GY_Init( CMW_Sensor_Init_t *initSensors_params)
1035
1046
return CMW_ERROR_COMPONENT_FAILURE ;
1036
1047
}
1037
1048
1049
+ if ((connected_sensor != CMW_VD66GY_Sensor ) && (connected_sensor != CMW_NOTKNOWN_Sensor ))
1050
+ {
1051
+ /* If the selected sensor in the application side has selected a different sensors than VD66GY */
1052
+ return CMW_ERROR_COMPONENT_FAILURE ;
1053
+ }
1054
+
1038
1055
/* Special case: when resolution is not specified take the full sensor resolution */
1039
1056
if ((initSensors_params -> width == 0 ) || (initSensors_params -> height == 0 ))
1040
1057
{
@@ -1112,6 +1129,12 @@ static int32_t CMW_CAMERA_IMX335_Init(CMW_Sensor_Init_t *initSensors_params)
1112
1129
return CMW_ERROR_COMPONENT_FAILURE ;
1113
1130
}
1114
1131
1132
+ if ((connected_sensor != CMW_IMX335_Sensor ) && (connected_sensor != CMW_NOTKNOWN_Sensor ))
1133
+ {
1134
+ /* If the selected sensor in the application side has selected a different sensors than IMX335 */
1135
+ return CMW_ERROR_COMPONENT_FAILURE ;
1136
+ }
1137
+
1115
1138
/* Special case: when resolution is not specified take the full sensor resolution */
1116
1139
if ((initSensors_params -> width == 0 ) || (initSensors_params -> height == 0 ))
1117
1140
{
@@ -1341,3 +1364,31 @@ static int32_t CMW_CAMERA_SetPipe(DCMIPP_HandleTypeDef *hdcmipp, uint32_t pipe,
1341
1364
return HAL_OK ;
1342
1365
}
1343
1366
1367
+ int32_t CMW_CAMERA_SetDefaultSensorValues ( CMW_Sensor_Config_t * sensor_config )
1368
+ {
1369
+ if (sensor_config == NULL )
1370
+ {
1371
+ return CMW_ERROR_WRONG_PARAM ;
1372
+ }
1373
+ switch (sensor_config -> selected_sensor )
1374
+ {
1375
+ #if defined(USE_VD66GY_SENSOR )
1376
+ case CMW_VD66GY_Sensor :
1377
+ CMW_VD66GY_SetDefaultSensorValues (& sensor_config -> config .vd66gy_config );
1378
+ break ;
1379
+ #endif
1380
+ #if defined(USE_VD55G1_SENSOR )
1381
+ case CMW_VD55G1_Sensor :
1382
+ CMW_VD55G1_SetDefaultSensorValues (& sensor_config -> config .vd55g1_config );
1383
+ break ;
1384
+ #endif
1385
+ #if defined(USE_IMX335_SENSOR )
1386
+ case CMW_IMX335_Sensor :
1387
+ #endif
1388
+ default :
1389
+ return CMW_ERROR_WRONG_PARAM ;
1390
+ break ;
1391
+ }
1392
+
1393
+ return CMW_ERROR_NONE ;
1394
+ }
0 commit comments