|
| 1 | +from micropython import const # NOQA |
| 2 | +import display_driver_framework |
| 3 | +import lvgl as lv |
| 4 | + |
| 5 | + |
| 6 | +STATE_HIGH = display_driver_framework.STATE_HIGH |
| 7 | +STATE_LOW = display_driver_framework.STATE_LOW |
| 8 | +STATE_PWM = display_driver_framework.STATE_PWM |
| 9 | + |
| 10 | +BYTE_ORDER_RGB = display_driver_framework.BYTE_ORDER_RGB |
| 11 | +BYTE_ORDER_BGR = display_driver_framework.BYTE_ORDER_BGR |
| 12 | + |
| 13 | + |
| 14 | +_MADCTL_MY = const(0x01) # mirror y |
| 15 | +_MADCTL_MX = const(0x02) # mirror x |
| 16 | +_MADCTL_MV = const(0x20) # x, y = y, x |
| 17 | + |
| 18 | + |
| 19 | +# Write Display Brightness |
| 20 | +# 0 to 255 |
| 21 | +_WRDISBV = const(0x51) |
| 22 | + |
| 23 | +# Set Color Enhance |
| 24 | +_IMGEHCCTR = const(0x58) |
| 25 | +_SLR_EN = const(0x04) # Sunlight Readable |
| 26 | +# Sunlight Readable Level values are 0, 1, and 3 |
| 27 | + |
| 28 | +# Set Color Enhance 1 |
| 29 | +_CESLRCTR_L = const(0x5A) |
| 30 | +_CESLRCTR_H = const(0x5B) |
| 31 | + |
| 32 | +# High Brightness Mode |
| 33 | +# 0x00 disable |
| 34 | +# 0x02 enable |
| 35 | +_SETHBM = const(0xB0) |
| 36 | +_HBM_EN = const(0x02) |
| 37 | + |
| 38 | + |
| 39 | +class RM67162(display_driver_framework.DisplayDriver): |
| 40 | + _ORIENTATION_TABLE = ( |
| 41 | + 0x00, |
| 42 | + _MADCTL_MV, |
| 43 | + _MADCTL_MY | _MADCTL_MX, |
| 44 | + _MADCTL_MY | _MADCTL_MX | _MADCTL_MV |
| 45 | + ) |
| 46 | + |
| 47 | + def __init__( |
| 48 | + self, |
| 49 | + data_bus, |
| 50 | + display_width, |
| 51 | + display_height, |
| 52 | + frame_buffer1=None, |
| 53 | + frame_buffer2=None, |
| 54 | + reset_pin=None, |
| 55 | + reset_state=STATE_HIGH, |
| 56 | + power_pin=None, |
| 57 | + power_on_state=STATE_HIGH, |
| 58 | + backlight_pin=None, |
| 59 | + backlight_on_state=STATE_HIGH, |
| 60 | + offset_x=0, |
| 61 | + offset_y=0, |
| 62 | + color_byte_order=BYTE_ORDER_RGB, |
| 63 | + color_space=lv.COLOR_FORMAT.RGB888, # NOQA |
| 64 | + rgb565_byte_swap=False |
| 65 | + ): |
| 66 | + |
| 67 | + self.__brightness = 0 |
| 68 | + self.__sunlight = 0 |
| 69 | + self.__ambient = 0x7FFF |
| 70 | + self.__high_brightness = 0x00 |
| 71 | + |
| 72 | + super().__init__( |
| 73 | + data_bus=data_bus, |
| 74 | + display_width=display_width, |
| 75 | + display_height=display_height, |
| 76 | + frame_buffer1=frame_buffer1, |
| 77 | + frame_buffer2=frame_buffer2, |
| 78 | + reset_pin=reset_pin, |
| 79 | + reset_state=reset_state, |
| 80 | + power_pin=power_pin, |
| 81 | + power_on_state=power_on_state, |
| 82 | + backlight_pin=backlight_pin, |
| 83 | + backlight_on_state=backlight_on_state, |
| 84 | + offset_x=offset_x, |
| 85 | + offset_y=offset_y, |
| 86 | + color_byte_order=color_byte_order, |
| 87 | + color_space=color_space, |
| 88 | + rgb565_byte_swap=rgb565_byte_swap |
| 89 | + ) |
| 90 | + |
| 91 | + def set_brightness(self, val): |
| 92 | + # convert the value from a 0.0 - 100.0 scale to a 0 - 255 scale |
| 93 | + val = int(val * 255 / 100) |
| 94 | + # clamp the balue so it is 0 - 255 |
| 95 | + val = max(min(val, 255), 0) |
| 96 | + |
| 97 | + self.__brightness = val |
| 98 | + self._param_buf[0] = val |
| 99 | + |
| 100 | + self.set_params(_WRDISBV, self._param_mv[:1]) |
| 101 | + |
| 102 | + def get_brightness(self): |
| 103 | + return round(self.__brightness / 255.0 * 100.0, 2) |
| 104 | + |
| 105 | + def set_ambient_light_level(self, val): |
| 106 | + val = int(val * 65535 / 100) |
| 107 | + val = max(min(val, 65535), 0) |
| 108 | + |
| 109 | + self.__ambient = val |
| 110 | + self._param_buf[0] = val >> 8 |
| 111 | + self.set_params(_CESLRCTR_H, self._param_mv[:1]) |
| 112 | + |
| 113 | + self._param_buf[0] = val & 0xFF |
| 114 | + self.set_params(_CESLRCTR_L, self._param_mv[:1]) |
| 115 | + |
| 116 | + def get_amblent_light_level(self): |
| 117 | + return round(self.__ambient / 65535.0 * 100.0, 2) |
| 118 | + |
| 119 | + def set_sunlight_enhance(self, val): |
| 120 | + if val == -1: |
| 121 | + self.__sunlight &= ~_SLR_EN |
| 122 | + else: |
| 123 | + val = min(val, 3) |
| 124 | + self.__sunlight = _SLR_EN | val |
| 125 | + |
| 126 | + self._param_buf[0] = self.__sunlight |
| 127 | + self.set_params(_IMGEHCCTR, self._param_mv[:1]) |
| 128 | + |
| 129 | + def get_sunlight_enhance(self): |
| 130 | + if self.__sunlight & _SLR_EN: |
| 131 | + return self.__sunlight & ~_SLR_EN |
| 132 | + |
| 133 | + return -1 |
| 134 | + |
| 135 | + def set_high_brightness(self, val): |
| 136 | + if val: |
| 137 | + self.__high_brightness |= _HBM_EN |
| 138 | + else: |
| 139 | + self.__high_brightness &= ~_HBM_EN |
| 140 | + |
| 141 | + self._param_buf[0] = self.__high_brightness |
| 142 | + self.set_params(_SETHBM, self._param_mv[:1]) |
| 143 | + |
| 144 | + def get_high_brightness(self): |
| 145 | + return bool(self.__high_brightness & _HBM_EN) |
0 commit comments