Badger2040: Add support for colour inverted mode

pull/252/head
Phil Howard 2022-02-25 14:49:28 +00:00
rodzic 169e332917
commit f90559ed41
8 zmienionych plików z 35 dodań i 1 usunięć

Wyświetl plik

@ -377,7 +377,7 @@ namespace pimoroni {
});
command(TCON, {0x22}); // tcon setting
command(CDI, {0b01'00'1100}); // vcom and data interval
command(CDI, {(uint8_t)(inverted ? 0b01'01'1100 : 0b01'00'1100)}); // vcom and data interval
command(PLL, {
HZ_100
@ -459,6 +459,11 @@ namespace pimoroni {
*p |= b; // set bit value
}
void UC8151::invert(bool inv) {
inverted = inv;
command(CDI, {(uint8_t)(inverted ? 0b01'01'1100 : 0b01'00'1100)}); // vcom and data interval
}
void UC8151::update_speed(uint8_t speed) {
setup(speed);
}

Wyświetl plik

@ -144,6 +144,8 @@ namespace pimoroni {
uint BUSY = PIN_UNUSED;
uint RESET = PIN_UNUSED;
bool inverted = false;
public:
UC8151(uint16_t width, uint16_t height) :
width(width), height(height), frame_buffer(new uint8_t[width * height / 8]) {
@ -195,6 +197,7 @@ namespace pimoroni {
void command(uint8_t reg) {command(reg, 0, nullptr);};
void data(size_t len, const uint8_t *data);
void invert(bool invert);
void update_speed(uint8_t speed);
void update(bool blocking = true);
void partial_update(int x, int y, int w, int h, bool blocking = true);

Wyświetl plik

@ -195,6 +195,10 @@ namespace pimoroni {
uc8151.power_off();
}
void Badger2040::invert(bool invert) {
uc8151.invert(invert);
}
void Badger2040::update_speed(uint8_t speed) {
uc8151.update_speed(speed);
}

Wyświetl plik

@ -34,6 +34,7 @@ namespace pimoroni {
void sleep();
bool is_busy();
void power_off();
void invert(bool invert);
// state
void led(uint8_t brightness);

Wyświetl plik

@ -32,6 +32,7 @@ Badger 2040 is an RP2040 powered EInk badge.
- [Update](#update)
- [Clear](#clear)
- [Partial Update](#partial-update)
- [Invert (aka Dark Mode)](#invert-aka-dark-mode)
- [Update Speed](#update-speed-1)
- [LED](#led)
@ -95,6 +96,7 @@ clear()
update()
partial_update(x, y, w, h)
update_speed(speed)
invert(inverted)
```
## Other Constants
@ -365,6 +367,16 @@ partial_update(
)
```
### Invert (aka Dark Mode)
Badger2040 can invert all your display data for a quick and easy dark mode:
```python
invert(
inverted # bool: True to invert, False to... not invert!
)
```
### Update Speed
Badger2040 is capable of updating the display at multiple different speeds.

Wyświetl plik

@ -9,6 +9,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(Badger2040_is_busy_obj, Badger2040_is_busy);
MP_DEFINE_CONST_FUN_OBJ_1(Badger2040_update_obj, Badger2040_update);
MP_DEFINE_CONST_FUN_OBJ_KW(Badger2040_partial_update_obj, 4, Badger2040_partial_update);
MP_DEFINE_CONST_FUN_OBJ_2(Badger2040_invert_obj, Badger2040_invert);
MP_DEFINE_CONST_FUN_OBJ_2(Badger2040_led_obj, Badger2040_led);
MP_DEFINE_CONST_FUN_OBJ_2(Badger2040_font_obj, Badger2040_font);
MP_DEFINE_CONST_FUN_OBJ_2(Badger2040_pen_obj, Badger2040_pen);
@ -39,6 +40,7 @@ STATIC const mp_rom_map_elem_t Badger2040_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&Badger2040_update_obj) },
{ MP_ROM_QSTR(MP_QSTR_partial_update), MP_ROM_PTR(&Badger2040_partial_update_obj) },
{ MP_ROM_QSTR(MP_QSTR_invert), MP_ROM_PTR(&Badger2040_invert_obj) },
{ MP_ROM_QSTR(MP_QSTR_led), MP_ROM_PTR(&Badger2040_led_obj) },
{ MP_ROM_QSTR(MP_QSTR_font), MP_ROM_PTR(&Badger2040_font_obj) },
{ MP_ROM_QSTR(MP_QSTR_pen), MP_ROM_PTR(&Badger2040_pen_obj) },

Wyświetl plik

@ -173,6 +173,12 @@ MICROPY_EVENT_POLL_HOOK
// halt
// sleep
mp_obj_t Badger2040_invert(mp_obj_t self_in, mp_obj_t invert) {
_Badger2040_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Badger2040_obj_t);
self->badger2040->invert(invert == mp_const_true);
return mp_const_none;
}
mp_obj_t Badger2040_led(mp_obj_t self_in, mp_obj_t brightness) {
_Badger2040_obj_t *self = MP_OBJ_TO_PTR2(self_in, _Badger2040_obj_t);
self->badger2040->led(mp_obj_get_int(brightness));

Wyświetl plik

@ -15,6 +15,7 @@ extern mp_obj_t Badger2040_update_speed(mp_obj_t self_in, mp_obj_t speed);
extern mp_obj_t Badger2040_update(mp_obj_t self_in);
extern mp_obj_t Badger2040_partial_update(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t Badger2040_invert(mp_obj_t self_in, mp_obj_t invert);
extern mp_obj_t Badger2040_led(mp_obj_t self_in, mp_obj_t brightness);
extern mp_obj_t Badger2040_font(mp_obj_t self_in, mp_obj_t font);
extern mp_obj_t Badger2040_pen(mp_obj_t self_in, mp_obj_t color);