Added option to toggle cs in displayio init sequence
This commit is contained in:
parent
fce63b17c6
commit
fadb5a1024
@ -50,7 +50,7 @@
|
||||
//| Most people should not use this class directly. Use a specific display driver instead that will
|
||||
//| contain the initialization sequence at minimum.
|
||||
//|
|
||||
//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None)
|
||||
//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, init_cs_toggle=False)
|
||||
//|
|
||||
//| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`).
|
||||
//|
|
||||
@ -93,7 +93,7 @@
|
||||
//| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight
|
||||
//|
|
||||
STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin };
|
||||
enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_init_cs_toggle };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_init_sequence, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
@ -108,6 +108,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
|
||||
{ MP_QSTR_write_ram_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2c} },
|
||||
{ MP_QSTR_set_vertical_scroll, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x0} },
|
||||
{ MP_QSTR_backlight_pin, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} },
|
||||
{ MP_QSTR_init_cs_toggle, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} },
|
||||
};
|
||||
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
||||
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
@ -146,7 +147,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
|
||||
args[ARG_color_depth].u_int, args[ARG_set_column_command].u_int, args[ARG_set_row_command].u_int,
|
||||
args[ARG_write_ram_command].u_int,
|
||||
args[ARG_set_vertical_scroll].u_int,
|
||||
bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin));
|
||||
bufinfo.buf, bufinfo.len, MP_OBJ_TO_PTR(backlight_pin),
|
||||
args[ARG_init_cs_toggle].u_bool);
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
mp_obj_t bus, uint16_t width, uint16_t height,
|
||||
int16_t colstart, int16_t rowstart, uint16_t rotation, uint16_t color_depth,
|
||||
uint8_t set_column_command, uint8_t set_row_command, uint8_t write_ram_command, uint8_t set_vertical_scroll,
|
||||
uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin);
|
||||
uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin, bool init_cs_toggle);
|
||||
|
||||
int32_t common_hal_displayio_display_wait_for_frame(displayio_display_obj_t* self);
|
||||
|
||||
|
@ -47,4 +47,6 @@ void common_hal_displayio_fourwire_send(mp_obj_t self, bool command, uint8_t *da
|
||||
|
||||
void common_hal_displayio_fourwire_end_transaction(mp_obj_t self);
|
||||
|
||||
void common_hal_displayio_fourwire_set_cs(mp_obj_t self, bool high);
|
||||
|
||||
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DISPLAYBUSIO_FOURWIRE_H
|
||||
|
@ -44,7 +44,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
mp_obj_t bus, uint16_t width, uint16_t height, int16_t colstart, int16_t rowstart, uint16_t rotation,
|
||||
uint16_t color_depth, uint8_t set_column_command, uint8_t set_row_command,
|
||||
uint8_t write_ram_command, uint8_t set_vertical_scroll, uint8_t* init_sequence, uint16_t init_sequence_len,
|
||||
const mcu_pin_obj_t* backlight_pin) {
|
||||
const mcu_pin_obj_t* backlight_pin, bool init_cs_toggle) {
|
||||
self->color_depth = color_depth;
|
||||
self->set_column_command = set_column_command;
|
||||
self->set_row_command = set_row_command;
|
||||
@ -54,6 +54,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
self->colstart = colstart;
|
||||
self->rowstart = rowstart;
|
||||
self->auto_brightness = false;
|
||||
self->init_cs_toggle = init_cs_toggle;
|
||||
|
||||
if (MP_OBJ_IS_TYPE(bus, &displayio_parallelbus_type)) {
|
||||
self->begin_transaction = common_hal_displayio_parallelbus_begin_transaction;
|
||||
@ -63,6 +64,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
self->begin_transaction = common_hal_displayio_fourwire_begin_transaction;
|
||||
self->send = common_hal_displayio_fourwire_send;
|
||||
self->end_transaction = common_hal_displayio_fourwire_end_transaction;
|
||||
self->set_cs = common_hal_displayio_fourwire_set_cs;
|
||||
} else {
|
||||
mp_raise_ValueError(translate("Unsupported display bus type"));
|
||||
}
|
||||
@ -82,6 +84,10 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
uint8_t *data = cmd + 2;
|
||||
self->send(self->bus, true, cmd, 1);
|
||||
self->send(self->bus, false, data, data_size);
|
||||
if (self->init_cs_toggle && self->set_cs != NULL) {
|
||||
self->set_cs(self->bus, true);
|
||||
self->set_cs(self->bus, false);
|
||||
}
|
||||
uint16_t delay_length_ms = 10;
|
||||
if (delay) {
|
||||
data_size++;
|
||||
|
@ -34,6 +34,7 @@
|
||||
typedef bool (*display_bus_begin_transaction)(mp_obj_t bus);
|
||||
typedef void (*display_bus_send)(mp_obj_t bus, bool command, uint8_t *data, uint32_t data_length);
|
||||
typedef void (*display_bus_end_transaction)(mp_obj_t bus);
|
||||
typedef void (*display_bus_set_cs)(mp_obj_t bus, bool high);
|
||||
|
||||
typedef struct {
|
||||
mp_obj_base_t base;
|
||||
@ -49,9 +50,11 @@ typedef struct {
|
||||
uint64_t last_refresh;
|
||||
int16_t colstart;
|
||||
int16_t rowstart;
|
||||
bool init_cs_toggle;
|
||||
display_bus_begin_transaction begin_transaction;
|
||||
display_bus_send send;
|
||||
display_bus_end_transaction end_transaction;
|
||||
display_bus_set_cs set_cs;
|
||||
union {
|
||||
digitalio_digitalinout_obj_t backlight_inout;
|
||||
pulseio_pwmout_obj_t backlight_pwm;
|
||||
|
@ -87,3 +87,8 @@ void common_hal_displayio_fourwire_end_transaction(mp_obj_t obj) {
|
||||
common_hal_digitalio_digitalinout_set_value(&self->chip_select, true);
|
||||
common_hal_busio_spi_unlock(self->bus);
|
||||
}
|
||||
|
||||
void common_hal_displayio_fourwire_set_cs(mp_obj_t obj, bool high) {
|
||||
displayio_fourwire_obj_t* self = MP_OBJ_TO_PTR(obj);
|
||||
common_hal_digitalio_digitalinout_set_value(&self->chip_select, high);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user