mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Update sensor drivers
* Add set_contrast * Fix set_brightness
This commit is contained in:
parent
06ed1c0a53
commit
64b883ceaf
@ -272,6 +272,16 @@ static const uint8_t br_regs[NUM_BR_LEVELS + 1][5] = {
|
||||
{ 0x00, 0x04, 0x09, 0x40, 0x00 }, /* +2 */
|
||||
};
|
||||
|
||||
#define NUM_CONT_LEVELS (5)
|
||||
static const uint8_t cont_regs[NUM_BR_LEVELS + 1][7] = {
|
||||
{ BPADDR, BPDATA, BPADDR, BPDATA, BPDATA, BPDATA, BPDATA },
|
||||
{ 0x00, 0x04, 0x07, 0x20, 0x28, 0x0c, 0x06 }, /* -2 */
|
||||
{ 0x00, 0x04, 0x07, 0x20, 0x24, 0x16, 0x06 }, /* -1 */
|
||||
{ 0x00, 0x04, 0x07, 0x20, 0x20, 0x20, 0x06 }, /* 0 */
|
||||
{ 0x00, 0x04, 0x07, 0x20, 0x1c, 0x2a, 0x06 }, /* +1 */
|
||||
{ 0x00, 0x04, 0x07, 0x20, 0x18, 0x34, 0x06 }, /* +2 */
|
||||
};
|
||||
|
||||
static int reset()
|
||||
{
|
||||
int i=0;
|
||||
@ -350,9 +360,9 @@ static int set_framerate(enum sensor_framerate framerate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_brightness(uint8_t level)
|
||||
static int set_brightness(int level)
|
||||
{
|
||||
int i, ret=0;
|
||||
int ret=0;
|
||||
|
||||
level += (NUM_BR_LEVELS / 2 + 1);
|
||||
if (level < 0 || level > NUM_BR_LEVELS) {
|
||||
@ -363,7 +373,7 @@ static int set_brightness(uint8_t level)
|
||||
ret |= SCCB_Write(R_BYPASS, R_BYPASS_DSP_BYPAS);
|
||||
|
||||
/* Write brightness registers */
|
||||
for (i=0; i<sizeof(br_regs[0])/sizeof(br_regs[0][0]); i++) {
|
||||
for (int i=0; i<sizeof(br_regs[0])/sizeof(br_regs[0][0]); i++) {
|
||||
ret |= SCCB_Write(br_regs[0][i], br_regs[level][i]);
|
||||
}
|
||||
|
||||
@ -373,7 +383,30 @@ static int set_brightness(uint8_t level)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int set_exposure(uint16_t exposure)
|
||||
static int set_contrast(int level)
|
||||
{
|
||||
int ret=0;
|
||||
|
||||
level += (NUM_CONT_LEVELS / 2 + 1);
|
||||
if (level < 0 || level > NUM_CONT_LEVELS) {
|
||||
return -1;
|
||||
}
|
||||
/* Disable DSP */
|
||||
ret |= SCCB_Write(BANK_SEL, BANK_SEL_DSP);
|
||||
ret |= SCCB_Write(R_BYPASS, R_BYPASS_DSP_BYPAS);
|
||||
|
||||
/* Write contrast registers */
|
||||
for (int i=0; i<sizeof(cont_regs[0])/sizeof(cont_regs[0][0]); i++) {
|
||||
ret |= SCCB_Write(cont_regs[0][i], cont_regs[level][i]);
|
||||
}
|
||||
|
||||
/* Enable DSP */
|
||||
ret |= SCCB_Write(BANK_SEL, BANK_SEL_DSP);
|
||||
ret |= SCCB_Write(R_BYPASS, R_BYPASS_USE_DSP);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int set_exposure(int exposure)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@ -409,6 +442,7 @@ int ov2640_init(struct sensor_dev *sensor)
|
||||
sensor->set_pixformat = set_pixformat;
|
||||
sensor->set_framesize = set_framesize;
|
||||
sensor->set_framerate = set_framerate;
|
||||
sensor->set_contrast = set_contrast;
|
||||
sensor->set_brightness= set_brightness;
|
||||
sensor->set_exposure = set_exposure;
|
||||
sensor->set_gainceiling = set_gainceiling;
|
||||
|
||||
@ -284,10 +284,9 @@ static int set_framerate(enum sensor_framerate framerate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_brightness(uint8_t level)
|
||||
static int set_brightness(int level)
|
||||
{
|
||||
int i;
|
||||
// int8_t lvl = (int8_t) level;
|
||||
|
||||
static uint8_t regs[NUM_BR_LEVELS + 1][3] = {
|
||||
{ REG_AEW, REG_AEB, REG_VPT },
|
||||
@ -312,7 +311,7 @@ static int set_brightness(uint8_t level)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_exposure(uint16_t exposure)
|
||||
static int set_exposure(int exposure)
|
||||
{
|
||||
uint8_t val;
|
||||
val = SCCB_Read(REG_COM1);
|
||||
|
||||
@ -10,7 +10,8 @@ static mp_obj_t py_sensor_reset() {
|
||||
sensor_set_framesize(FRAMESIZE_QQVGA);
|
||||
sensor_set_framerate(FRAMERATE_30FPS);
|
||||
sensor_set_gainceiling(GAINCEILING_8X);
|
||||
sensor_set_brightness(-2);
|
||||
sensor_set_contrast(0);
|
||||
sensor_set_brightness(0);
|
||||
return mp_const_none;
|
||||
}
|
||||
|
||||
@ -105,6 +106,13 @@ static mp_obj_t py_sensor_set_brightness(mp_obj_t brightness) {
|
||||
return mp_const_true;
|
||||
}
|
||||
|
||||
static mp_obj_t py_sensor_set_contrast(mp_obj_t contrast) {
|
||||
if (sensor_set_contrast(mp_obj_get_int(contrast)) != 0) {
|
||||
return mp_const_false;
|
||||
}
|
||||
return mp_const_true;
|
||||
}
|
||||
|
||||
static mp_obj_t py_sensor_write_reg(mp_obj_t addr, mp_obj_t val) {
|
||||
SCCB_Write(mp_obj_get_int(addr), mp_obj_get_int(val));
|
||||
return mp_const_none;
|
||||
@ -128,6 +136,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_pixformat_obj, py_sensor_set_pi
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_framerate_obj, py_sensor_set_framerate);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_framesize_obj, py_sensor_set_framesize);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_gainceiling_obj, py_sensor_set_gainceiling);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_contrast_obj, py_sensor_set_contrast);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_brightness_obj, py_sensor_set_brightness);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(py_sensor_write_reg_obj, py_sensor_write_reg);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_read_reg_obj, py_sensor_read_reg);
|
||||
@ -155,6 +164,7 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_framerate), (mp_obj_t)&py_sensor_set_framerate_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_framesize), (mp_obj_t)&py_sensor_set_framesize_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_gainceiling), (mp_obj_t)&py_sensor_set_gainceiling_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_contrast), (mp_obj_t)&py_sensor_set_contrast_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_brightness), (mp_obj_t)&py_sensor_set_brightness_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR___write_reg), (mp_obj_t)&py_sensor_write_reg_obj },
|
||||
{ MP_OBJ_NEW_QSTR(MP_QSTR___read_reg), (mp_obj_t)&py_sensor_read_reg_obj },
|
||||
@ -183,7 +193,8 @@ const mp_obj_module_t *py_sensor_init()
|
||||
sensor_set_framesize(FRAMESIZE_QQVGA);
|
||||
sensor_set_framerate(FRAMERATE_30FPS);
|
||||
sensor_set_gainceiling(GAINCEILING_8X);
|
||||
sensor_set_brightness(-2);
|
||||
sensor_set_contrast(0);
|
||||
sensor_set_brightness(0);
|
||||
|
||||
return &py_sensor_module;
|
||||
}
|
||||
|
||||
@ -489,13 +489,23 @@ int sensor_set_framerate(enum sensor_framerate framerate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sensor_set_brightness(uint8_t level)
|
||||
int sensor_set_brightness(int level)
|
||||
{
|
||||
sensor.set_brightness(level);
|
||||
return 0;
|
||||
if (sensor.set_brightness != NULL) {
|
||||
return sensor.set_brightness(level);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sensor_set_exposure(uint16_t exposure)
|
||||
int sensor_set_contrast(int level)
|
||||
{
|
||||
if (sensor.set_contrast != NULL) {
|
||||
return sensor.set_contrast(level);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sensor_set_exposure(int exposure)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -87,8 +87,9 @@ struct sensor_dev {
|
||||
int (*set_pixformat) (enum sensor_pixformat pixformat);
|
||||
int (*set_framesize) (enum sensor_framesize framesize);
|
||||
int (*set_framerate) (enum sensor_framerate framerate);
|
||||
int (*set_brightness) (uint8_t level);
|
||||
int (*set_exposure) (uint16_t exposure);
|
||||
int (*set_brightness) (int level);
|
||||
int (*set_contrast) (int level);
|
||||
int (*set_exposure) (int exposure);
|
||||
int (*set_gainceiling) (enum sensor_gainceiling gainceiling);
|
||||
};
|
||||
|
||||
@ -166,7 +167,15 @@ int sensor_set_framerate(enum sensor_framerate framerate);
|
||||
* @param level The new brightness level allowed values from -3 to +3.
|
||||
* @return On success, 0 is returned. If the operation not supported by the sensor, -1 is returned.
|
||||
*/
|
||||
int sensor_set_brightness(uint8_t level);
|
||||
int sensor_set_brightness(int level);
|
||||
/**
|
||||
* Set the sensor contrast level.
|
||||
*
|
||||
* @param sensor A pointer to the sensor device handle.
|
||||
* @param level The new contrast level allowed values from -3 to +3.
|
||||
* @return On success, 0 is returned. If the operation not supported by the sensor, -1 is returned.
|
||||
*/
|
||||
int sensor_set_contrast(int level);
|
||||
/**
|
||||
* Set the sensor exposure level. This function has no
|
||||
* effect when AEC (Automatic Exposure Control) is enabled.
|
||||
@ -175,7 +184,7 @@ int sensor_set_brightness(uint8_t level);
|
||||
* @param exposure The new exposure level.
|
||||
* @return On success, 0 is returned. If the operation not supported by the sensor, -1 is returned.
|
||||
*/
|
||||
int sensor_set_exposure(uint16_t exposure);
|
||||
int sensor_set_exposure(int exposure);
|
||||
/**
|
||||
* Set the sensor AGC gain ceiling.
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user