Skip to content

Commit 7ce8841

Browse files
committed
gc0308: fix incomplete error handling and use defined values
1 parent 138e086 commit 7ce8841

File tree

1 file changed

+44
-45
lines changed

1 file changed

+44
-45
lines changed

sensors/gc0308.c

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,9 @@ static int reset(sensor_t *sensor)
138138
if (ret == 0) {
139139
ESP_LOGD(TAG, "Camera defaults loaded");
140140
vTaskDelay(80 / portTICK_PERIOD_MS);
141-
write_reg(sensor->slv_addr, 0xfe, 0x00);
141+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
142142
#ifdef CONFIG_IDF_TARGET_ESP32
143-
set_reg_bits(sensor->slv_addr, 0x28, 4, 0x07, 1); //frequency division for esp32, ensure pclk <= 15MHz
143+
ret |= set_reg_bits(sensor->slv_addr, PCLK_DIV, 4, 0x07, 1); //frequency division for esp32, ensure pclk <= 15MHz
144144
#endif
145145
}
146146
return ret;
@@ -152,20 +152,19 @@ static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
152152

153153
switch (pixformat) {
154154
case PIXFORMAT_RGB565:
155-
write_reg(sensor->slv_addr, 0xfe, 0x00);
156-
ret = set_reg_bits(sensor->slv_addr, 0x24, 0, 0x0f, 6); //RGB565
155+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
156+
ret |= set_reg_bits(sensor->slv_addr, OUTPUT_FMT, 0, 0x0f, 6); //RGB565
157157
break;
158-
159158
case PIXFORMAT_YUV422:
160-
write_reg(sensor->slv_addr, 0xfe, 0x00);
161-
ret = set_reg_bits(sensor->slv_addr, 0x24, 0, 0x0f, 2); //yuv422 Y Cb Y Cr
159+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
160+
ret |= set_reg_bits(sensor->slv_addr, OUTPUT_FMT, 0, 0x0f, 2); //yuv422 Y Cb Y Cr
162161
break;
163162
case PIXFORMAT_GRAYSCALE:
164-
write_reg(sensor->slv_addr, 0xfe, 0x00);
165-
ret = write_reg(sensor->slv_addr, 0x24, 0xb1);
163+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
164+
ret |= write_reg(sensor->slv_addr, OUTPUT_FMT, 0xb1);
166165
break;
167166
default:
168-
ESP_LOGW(TAG, "unsupport format");
167+
ESP_LOGW(TAG, "Unsupported format %u", pixformat);
169168
ret = -1;
170169
break;
171170
}
@@ -230,45 +229,45 @@ static int set_framesize(sensor_t *sensor, framesize_t framesize)
230229
}
231230
}
232231

233-
write_reg(sensor->slv_addr, 0xfe, 0x00);
234-
235-
write_reg(sensor->slv_addr, 0x05, H8(row_s));
236-
write_reg(sensor->slv_addr, 0x06, L8(row_s));
237-
write_reg(sensor->slv_addr, 0x07, H8(col_s));
238-
write_reg(sensor->slv_addr, 0x08, L8(col_s));
239-
write_reg(sensor->slv_addr, 0x09, H8(win_h + 8));
240-
write_reg(sensor->slv_addr, 0x0a, L8(win_h + 8));
241-
write_reg(sensor->slv_addr, 0x0b, H8(win_w + 8));
242-
write_reg(sensor->slv_addr, 0x0c, L8(win_w + 8));
232+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
243233

244-
write_reg(sensor->slv_addr, 0xfe, 0x01);
245-
set_reg_bits(sensor->slv_addr, 0x53, 7, 0x01, 1);
246-
set_reg_bits(sensor->slv_addr, 0x55, 0, 0x01, 1);
247-
write_reg(sensor->slv_addr, 0x54, cfg->reg0x54);
248-
write_reg(sensor->slv_addr, 0x56, cfg->reg0x56);
249-
write_reg(sensor->slv_addr, 0x57, cfg->reg0x57);
250-
write_reg(sensor->slv_addr, 0x58, cfg->reg0x58);
251-
write_reg(sensor->slv_addr, 0x59, cfg->reg0x59);
234+
ret |= write_reg(sensor->slv_addr, ROW_START_H, H8(row_s));
235+
ret |= write_reg(sensor->slv_addr, ROW_START_L, L8(row_s));
236+
ret |= write_reg(sensor->slv_addr, COL_START_H, H8(col_s));
237+
ret |= write_reg(sensor->slv_addr, COL_START_L, L8(col_s));
238+
ret |= write_reg(sensor->slv_addr, WIN_HEIGHT_H, H8(win_h + 8));
239+
ret |= write_reg(sensor->slv_addr, WIN_HEIGHT_L, L8(win_h + 8));
240+
ret |= write_reg(sensor->slv_addr, WIN_WIDTH_H, H8(win_w + 8));
241+
ret |= write_reg(sensor->slv_addr, WIN_WIDTH_L, L8(win_w + 8));
242+
243+
ret |= write_reg(sensor->slv_addr, 0xfe, 0x01);
244+
ret |= set_reg_bits(sensor->slv_addr, SUBSAMPLE_EN, 7, 0x01, 1);
245+
ret |= set_reg_bits(sensor->slv_addr, SUBSAMPLE_EN2, 0, 0x01, 1);
246+
ret |= write_reg(sensor->slv_addr, SUBSAMPLE_MODE, cfg->reg0x54);
247+
ret |= write_reg(sensor->slv_addr, SUBSAMPLE_Y0, cfg->reg0x56);
248+
ret |= write_reg(sensor->slv_addr, SUBSAMPLE_Y1, cfg->reg0x57);
249+
ret |= write_reg(sensor->slv_addr, SUBSAMPLE_UV0, cfg->reg0x58);
250+
ret |= write_reg(sensor->slv_addr, SUBSAMPLE_UV1, cfg->reg0x59);
252251

253-
write_reg(sensor->slv_addr, 0xfe, 0x00);
252+
ret |= write_reg(sensor->slv_addr, 0xfe, 0x00);
254253

255254
#elif CONFIG_GC_SENSOR_WINDOWING_MODE
256-
write_reg(sensor->slv_addr, 0xfe, 0x00);
257-
258-
write_reg(sensor->slv_addr, 0xf7, col_s / 4);
259-
write_reg(sensor->slv_addr, 0xf8, row_s / 4);
260-
write_reg(sensor->slv_addr, 0xf9, (col_s + w) / 4);
261-
write_reg(sensor->slv_addr, 0xfa, (row_s + h) / 4);
262-
263-
write_reg(sensor->slv_addr, 0x05, H8(row_s));
264-
write_reg(sensor->slv_addr, 0x06, L8(row_s));
265-
write_reg(sensor->slv_addr, 0x07, H8(col_s));
266-
write_reg(sensor->slv_addr, 0x08, L8(col_s));
267-
268-
write_reg(sensor->slv_addr, 0x09, H8(h + 8));
269-
write_reg(sensor->slv_addr, 0x0a, L8(h + 8));
270-
write_reg(sensor->slv_addr, 0x0b, H8(w + 8));
271-
write_reg(sensor->slv_addr, 0x0c, L8(w + 8));
255+
ret = write_reg(sensor->slv_addr, 0xfe, 0x00);
256+
257+
ret |= write_reg(sensor->slv_addr, SUB_COL_N, col_s / 4);
258+
ret |= write_reg(sensor->slv_addr, SUB_ROW_N, row_s / 4);
259+
ret |= write_reg(sensor->slv_addr, SUB_COL_N1, (col_s + w) / 4);
260+
ret |= write_reg(sensor->slv_addr, SUB_ROW_N1, (row_s + h) / 4);
261+
262+
ret |= write_reg(sensor->slv_addr, ROW_START_H, H8(row_s));
263+
ret |= write_reg(sensor->slv_addr, ROW_START_L, L8(row_s));
264+
ret |= write_reg(sensor->slv_addr, COL_START_H, H8(col_s));
265+
ret |= write_reg(sensor->slv_addr, COL_START_L, L8(col_s));
266+
267+
ret |= write_reg(sensor->slv_addr, WIN_HEIGHT_H, H8(h + 8));
268+
ret |= write_reg(sensor->slv_addr, WIN_HEIGHT_L, L8(h + 8));
269+
ret |= write_reg(sensor->slv_addr, WIN_WIDTH_H, H8(w + 8));
270+
ret |= write_reg(sensor->slv_addr, WIN_WIDTH_L, L8(w + 8));
272271

273272
#endif
274273
if (ret == 0) {

0 commit comments

Comments
 (0)