Implement sensor soft sleep.

This commit is contained in:
iabdalkader 2017-10-05 01:25:49 +02:00
parent f86a5fb63d
commit 20c8b66789
4 changed files with 42 additions and 0 deletions

View File

@ -173,6 +173,24 @@ static int reset(sensor_t *sensor)
return 0;
}
static int sleep(sensor_t *sensor, int enable)
{
int ret=0;
// Read register
uint8_t reg = SCCB_Read(sensor->slv_addr, COM2);
if (enable) {
reg |= COM2_SOFT_SLEEP;
} else {
reg &= ~COM2_SOFT_SLEEP;
}
// Write back register
ret |= SCCB_Write(sensor->slv_addr, COM2, reg);
return ret;
}
static int set_pixformat(sensor_t *sensor, pixformat_t pixformat)
{
int ret=0;
@ -467,6 +485,7 @@ int ov7725_init(sensor_t *sensor)
{
// Set function pointers
sensor->reset = reset;
sensor->sleep = sleep;
sensor->set_pixformat = set_pixformat;
sensor->set_framesize = set_framesize;
sensor->set_framerate = set_framerate;

View File

@ -27,6 +27,13 @@ static mp_obj_t py_sensor_reset() {
return mp_const_none;
}
static mp_obj_t py_sensor_sleep(mp_obj_t enable) {
if (sensor_sleep(mp_obj_is_true(enable)) != 0) {
return mp_const_false;
}
return mp_const_true;
}
static mp_obj_t py_sensor_flush() {
fb_update_jpeg_buffer();
return mp_const_none;
@ -366,6 +373,7 @@ static mp_obj_t py_sensor_read_reg(mp_obj_t addr) {
//}
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_reset_obj, py_sensor_reset);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_sleep_obj, py_sensor_sleep);
STATIC MP_DEFINE_CONST_FUN_OBJ_0(py_sensor_flush_obj, py_sensor_flush);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_sensor_snapshot_obj, 0, py_sensor_snapshot);
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_sensor_skip_frames_obj, 0, py_sensor_skip_frames);
@ -438,6 +446,7 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
// Sensor functions
{ MP_OBJ_NEW_QSTR(MP_QSTR_reset), (mp_obj_t)&py_sensor_reset_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_sleep), (mp_obj_t)&py_sensor_sleep_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_flush), (mp_obj_t)&py_sensor_flush_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_snapshot), (mp_obj_t)&py_sensor_snapshot_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_skip_frames), (mp_obj_t)&py_sensor_skip_frames_obj },

View File

@ -345,6 +345,16 @@ int sensor_get_id()
return sensor.id.PID;
}
int sensor_sleep(int enable)
{
if (sensor.sleep == NULL
|| sensor.sleep(&sensor, enable) != 0) {
// Operation not supported
return -1;
}
return 0;
}
int sensor_read_reg(uint8_t reg)
{
return SCCB_Read(sensor.slv_addr, reg);

View File

@ -127,6 +127,7 @@ typedef struct _sensor {
// Sensor function pointers
int (*reset) (sensor_t *sensor);
int (*sleep) (sensor_t *sensor, int enable);
int (*set_pixformat) (sensor_t *sensor, pixformat_t pixformat);
int (*set_framesize) (sensor_t *sensor, framesize_t framesize);
int (*set_framerate) (sensor_t *sensor, framerate_t framerate);
@ -160,6 +161,9 @@ int sensor_reset();
// Return sensor PID.
int sensor_get_id();
// Sleep mode.
int sensor_sleep(int enable);
// Read a sensor register.
int sensor_read_reg(uint8_t reg);