Add set_color_palette

This commit is contained in:
iabdalkader 2019-03-05 18:21:53 +02:00
parent 2944d42bea
commit 164f2e71c1
4 changed files with 46 additions and 3 deletions

View File

@ -435,6 +435,22 @@ static mp_obj_t py_sensor_ioctl(uint n_args, const mp_obj_t *args)
return ret_obj;
}
static mp_obj_t py_sensor_set_color_palette(mp_obj_t palette_obj) {
int palette = mp_obj_get_int(palette_obj);
switch (palette) {
case COLOR_PALETTE_RAINBOW:
sensor_set_color_palette(rainbow_table);
break;
case COLOR_PALETTE_IRONBOW:
sensor_set_color_palette(ironbow_table);
break;
default:
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "Invalid color palette!"));
break;
}
return mp_const_true;
}
static mp_obj_t py_sensor_write_reg(mp_obj_t addr, mp_obj_t val) {
sensor_write_reg(mp_obj_get_int(addr), mp_obj_get_int(val));
return mp_const_none;
@ -482,9 +498,10 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_vflip_obj, py_sensor_se
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_special_effect_obj, py_sensor_set_special_effect);
STATIC MP_DEFINE_CONST_FUN_OBJ_3(py_sensor_set_lens_correction_obj, py_sensor_set_lens_correction);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_vsync_output_obj, py_sensor_set_vsync_output);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(py_sensor_ioctl_obj, 1, 5, py_sensor_ioctl);
STATIC MP_DEFINE_CONST_FUN_OBJ_1(py_sensor_set_color_palette_obj, py_sensor_set_color_palette);
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);
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(py_sensor_ioctl_obj, 1, 5, py_sensor_ioctl);
STATIC const mp_map_elem_t globals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_sensor) },
@ -534,6 +551,10 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_SXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_SXGA)}, /* 1280x1024 */
{ MP_OBJ_NEW_QSTR(MP_QSTR_UXGA), MP_OBJ_NEW_SMALL_INT(FRAMESIZE_UXGA)}, /* 1600x1200 */
// Color Palettes
{ MP_OBJ_NEW_QSTR(MP_QSTR_PALETTE_RAINBOW), MP_OBJ_NEW_SMALL_INT(COLOR_PALETTE_RAINBOW)},
{ MP_OBJ_NEW_QSTR(MP_QSTR_PALETTE_IRONBOW), MP_OBJ_NEW_SMALL_INT(COLOR_PALETTE_IRONBOW)},
// IOCTLs
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_SET_TRIGGERED_MODE), MP_OBJ_NEW_SMALL_INT(IOCTL_SET_TRIGGERED_MODE)},
{ MP_OBJ_NEW_QSTR(MP_QSTR_IOCTL_GET_TRIGGERED_MODE), MP_OBJ_NEW_SMALL_INT(IOCTL_GET_TRIGGERED_MODE)},
@ -573,6 +594,7 @@ STATIC const mp_map_elem_t globals_dict_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_lens_correction), (mp_obj_t)&py_sensor_set_lens_correction_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_vsync_output), (mp_obj_t)&py_sensor_set_vsync_output_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_ioctl), (mp_obj_t)&py_sensor_ioctl_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_set_color_palette), (mp_obj_t)&py_sensor_set_color_palette_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 },
};

View File

@ -50,6 +50,7 @@ Q(CORNER_AGAST)
Q(load_descriptor)
Q(save_descriptor)
Q(match_descriptor)
// Image class
Q(find_template)
Q(kp_desc)
@ -205,6 +206,10 @@ Q(NEGATIVE)
Q(IOCTL_SET_TRIGGERED_MODE)
Q(IOCTL_GET_TRIGGERED_MODE)
// Color Palettes
Q(PALETTE_RAINBOW)
Q(PALETTE_IRONBOW)
Q(reset)
Q(flush)
Q(snapshot)
@ -240,6 +245,7 @@ Q(set_vflip)
Q(set_special_effect)
Q(set_lens_correction)
Q(ioctl)
Q(set_color_palette)
Q(__write_reg)
Q(__read_reg)

View File

@ -364,6 +364,9 @@ int sensor_init()
// This is executed only once to initialize the FB enabled flag.
JPEG_FB()->enabled = 0;
// Set default color palette.
sensor.color_palette = rainbow_table;
/* All good! */
return 0;
}
@ -377,6 +380,8 @@ int sensor_reset()
sensor.framerate = 0;
sensor.gainceiling = 0;
sensor.vsync_gpio = NULL;
// Reset default color palette.
sensor.color_palette = rainbow_table;
// Call sensor-specific reset function
if (sensor.reset(&sensor) != 0) {
@ -733,6 +738,12 @@ int sensor_set_vsync_output(GPIO_TypeDef *gpio, uint32_t pin)
return 0;
}
int sensor_set_color_palette(const uint16_t *color_palette)
{
sensor.color_palette = color_palette;
return 0;
}
void DCMI_VsyncExtiCallback()
{
__HAL_GPIO_EXTI_CLEAR_FLAG(1 << DCMI_VSYNC_IRQ_LINE);

View File

@ -118,12 +118,13 @@ typedef struct _sensor {
uint8_t slv_addr; // Sensor I2C slave address.
uint16_t gs_bpp; // Grayscale bytes per pixel.
uint32_t hw_flags; // Hardware flags (clock polarities/hw capabilities)
const uint16_t *color_palette; // Color palette used for color lookup.
uint32_t vsync_pin; // VSYNC GPIO output pin.
GPIO_TypeDef *vsync_gpio; // VSYNC GPIO output port.
polarity_t pwdn_pol; // PWDN polarity (TODO move to hw_flags)
polarity_t reset_pol; // Reset polarity (TODO move to hw_flags)
polarity_t pwdn_pol; // PWDN polarity (TODO move to hw_flags)
polarity_t reset_pol; // Reset polarity (TODO move to hw_flags)
// Sensor state
sde_t sde; // Special digital effects
@ -254,6 +255,9 @@ int sensor_ioctl(int request, ...);
// Set vsync output pin
int sensor_set_vsync_output(GPIO_TypeDef *gpio, uint32_t pin);
// Set color palette
int sensor_set_color_palette(const uint16_t *color_palette);
// Default snapshot function.
int sensor_snapshot(sensor_t *sensor, image_t *image, streaming_cb_t streaming_cb);
#endif /* __SENSOR_H__ */