50
50
//| Most people should not use this class directly. Use a specific display driver instead that will
51
51
//| contain the initialization sequence at minimum.
52
52
//|
53
- //| .. 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, single_byte_bounds=False, data_as_commands=False)
53
+ //| .. 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, brightness=1.0, auto_brightness=False, single_byte_bounds=False, data_as_commands=False)
54
54
//|
55
55
//| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`).
56
56
//|
91
91
//| :param int write_ram_command: Command used to write pixels values into the update region
92
92
//| :param int set_vertical_scroll: Command used to set the first row to show
93
93
//| :param microcontroller.Pin backlight_pin: Pin connected to the display's backlight
94
+ //| :param bool brightness: Initial display brightness. This value is ignored if auto_brightness is True.
95
+ //| :param bool auto_brightness: If True, brightness is controlled via an ambient light sensor or other mechanism.
94
96
//| :param bool single_byte_bounds: Display column and row commands use single bytes
95
97
//| :param bool data_as_commands: Treat all init and boundary data as SPI commands. Certain displays require this.
96
98
//|
97
99
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 ) {
98
- 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_single_byte_bounds , ARG_data_as_commands };
100
+ 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_brightness , ARG_auto_brightness , ARG_single_byte_bounds , ARG_data_as_commands };
99
101
static const mp_arg_t allowed_args [] = {
100
102
{ MP_QSTR_display_bus , MP_ARG_REQUIRED | MP_ARG_OBJ },
101
103
{ MP_QSTR_init_sequence , MP_ARG_REQUIRED | MP_ARG_OBJ },
@@ -110,6 +112,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
110
112
{ MP_QSTR_write_ram_command , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 0x2c } },
111
113
{ MP_QSTR_set_vertical_scroll , MP_ARG_INT | MP_ARG_KW_ONLY , {.u_int = 0x0 } },
112
114
{ MP_QSTR_backlight_pin , MP_ARG_OBJ | MP_ARG_KW_ONLY , {.u_obj = mp_const_none } },
115
+ { MP_QSTR_brightness , MP_ARG_OBJ | MP_ARG_KW_ONLY , {.u_obj = MP_OBJ_NEW_SMALL_INT (1 )} },
116
+ { MP_QSTR_auto_brightness , MP_ARG_BOOL | MP_ARG_KW_ONLY , {.u_bool = false} },
113
117
{ MP_QSTR_single_byte_bounds , MP_ARG_BOOL | MP_ARG_KW_ONLY , {.u_bool = false} },
114
118
{ MP_QSTR_data_as_commands , MP_ARG_BOOL | MP_ARG_KW_ONLY , {.u_bool = false} },
115
119
};
@@ -128,6 +132,9 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
128
132
backlight_pin = MP_OBJ_TO_PTR (backlight_pin_obj );
129
133
assert_pin_free (backlight_pin );
130
134
}
135
+
136
+ mp_float_t brightness = mp_obj_get_float (args [ARG_brightness ].u_obj );
137
+
131
138
mp_int_t rotation = args [ARG_rotation ].u_int ;
132
139
if (rotation % 90 != 0 ) {
133
140
mp_raise_ValueError (translate ("Display rotation must be in 90 degree increments" ));
@@ -145,14 +152,19 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
145
152
mp_raise_RuntimeError (translate ("Too many displays" ));
146
153
}
147
154
self -> base .type = & displayio_display_type ;
148
- common_hal_displayio_display_construct (self ,
149
- display_bus , args [ARG_width ].u_int , args [ARG_height ].u_int , args [ARG_colstart ].u_int , args [ARG_rowstart ].u_int , rotation ,
150
- args [ARG_color_depth ].u_int , args [ARG_set_column_command ].u_int , args [ARG_set_row_command ].u_int ,
151
- args [ARG_write_ram_command ].u_int ,
152
- args [ARG_set_vertical_scroll ].u_int ,
153
- bufinfo .buf , bufinfo .len , MP_OBJ_TO_PTR (backlight_pin ),
154
- args [ARG_single_byte_bounds ].u_bool ,
155
- args [ARG_data_as_commands ].u_bool );
155
+ common_hal_displayio_display_construct (
156
+ self ,
157
+ display_bus , args [ARG_width ].u_int , args [ARG_height ].u_int , args [ARG_colstart ].u_int , args [ARG_rowstart ].u_int , rotation ,
158
+ args [ARG_color_depth ].u_int , args [ARG_set_column_command ].u_int , args [ARG_set_row_command ].u_int ,
159
+ args [ARG_write_ram_command ].u_int ,
160
+ args [ARG_set_vertical_scroll ].u_int ,
161
+ bufinfo .buf , bufinfo .len ,
162
+ MP_OBJ_TO_PTR (backlight_pin ),
163
+ brightness ,
164
+ args [ARG_auto_brightness ].u_bool ,
165
+ args [ARG_single_byte_bounds ].u_bool ,
166
+ args [ARG_data_as_commands ].u_bool
167
+ );
156
168
157
169
return self ;
158
170
}
@@ -209,8 +221,8 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_display_wait_for_frame_obj, displayio_displa
209
221
//| .. attribute:: brightness
210
222
//|
211
223
//| The brightness of the display as a float. 0.0 is off and 1.0 is full brightness. When
212
- //| `auto_brightness` is True this value will change automatically and setting it will have no
213
- //| effect. To control the brightness, auto_brightness must be false .
224
+ //| `auto_brightness` is True, the value of `brightness` will change automatically.
225
+ //| If `brightness` is set, ` auto_brightness` will be disabled and will be set to False .
214
226
//|
215
227
STATIC mp_obj_t displayio_display_obj_get_brightness (mp_obj_t self_in ) {
216
228
displayio_display_obj_t * self = native_display (self_in );
@@ -224,6 +236,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_display_get_brightness_obj, displayio_displa
224
236
225
237
STATIC mp_obj_t displayio_display_obj_set_brightness (mp_obj_t self_in , mp_obj_t brightness ) {
226
238
displayio_display_obj_t * self = native_display (self_in );
239
+ common_hal_displayio_display_set_auto_brightness (self , false);
227
240
bool ok = common_hal_displayio_display_set_brightness (self , mp_obj_get_float (brightness ));
228
241
if (!ok ) {
229
242
mp_raise_RuntimeError (translate ("Brightness not adjustable" ));
@@ -241,7 +254,10 @@ const mp_obj_property_t displayio_display_brightness_obj = {
241
254
242
255
//| .. attribute:: auto_brightness
243
256
//|
244
- //| True when the display brightness is auto adjusted.
257
+ //| True when the display brightness is adjusted automatically, based on an ambient
258
+ //| light sensor or other method. Note that some displays may have this set to True by default,
259
+ //| but not actually implement automatic brightness adjustment. `auto_brightness` is set to False
260
+ //| if `brightness` is set manually.
245
261
//|
246
262
STATIC mp_obj_t displayio_display_obj_get_auto_brightness (mp_obj_t self_in ) {
247
263
displayio_display_obj_t * self = native_display (self_in );
0 commit comments