diff options
Diffstat (limited to 'drivers/ugfx/gdisp')
-rw-r--r-- | drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h | 85 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c | 268 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h | 14 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/st7565/board_st7565_template.h | 71 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c | 337 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/st7565/gdisp_lld_config.h | 16 | ||||
-rw-r--r-- | drivers/ugfx/gdisp/st7565/st7565.h | 42 |
7 files changed, 407 insertions, 426 deletions
diff --git a/drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h b/drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h index f248cc25ba..0755ddf6c4 100644 --- a/drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h +++ b/drivers/ugfx/gdisp/is31fl3731c/board_is31fl3731c_template.h @@ -19,54 +19,53 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define _GDISP_LLD_BOARD_H static const I2CConfig i2ccfg = { - 400000 // clock speed (Hz); 400kHz max for IS31 + 400000 // clock speed (Hz); 400kHz max for IS31 }; static const uint8_t led_mask[] = { - 0xFF, 0x00, /* C1-1 -> C1-16 */ - 0xFF, 0x00, /* C2-1 -> C2-16 */ - 0xFF, 0x00, /* C3-1 -> C3-16 */ - 0xFF, 0x00, /* C4-1 -> C4-16 */ - 0x3F, 0x00, /* C5-1 -> C5-16 */ - 0x00, 0x00, /* C6-1 -> C6-16 */ - 0x00, 0x00, /* C7-1 -> C7-16 */ - 0x00, 0x00, /* C8-1 -> C8-16 */ - 0x00, 0x00, /* C9-1 -> C9-16 */ + 0xFF, 0x00, /* C1-1 -> C1-16 */ + 0xFF, 0x00, /* C2-1 -> C2-16 */ + 0xFF, 0x00, /* C3-1 -> C3-16 */ + 0xFF, 0x00, /* C4-1 -> C4-16 */ + 0x3F, 0x00, /* C5-1 -> C5-16 */ + 0x00, 0x00, /* C6-1 -> C6-16 */ + 0x00, 0x00, /* C7-1 -> C7-16 */ + 0x00, 0x00, /* C8-1 -> C8-16 */ + 0x00, 0x00, /* C9-1 -> C9-16 */ }; // The address of the LED -#define LA(c, r) (c + r * 16 ) +#define LA(c, r) (c + r * 16) // Need to be an address that is not mapped, but inside the range of the controller matrix #define NA LA(8, 8) // The numbers in the comments are the led numbers DXX on the PCB // The mapping is taken from the schematic of left hand side static const uint8_t led_mapping[GDISP_SCREEN_HEIGHT][GDISP_SCREEN_WIDTH] = { -// 45 44 43 42 41 40 39 - { LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, -// 52 51 50 49 48 47 46 - { LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2) }, -// 58 57 56 55 54 53 N/A - { LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA }, -// 67 66 65 64 63 62 61 - { LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2) }, -// 76 75 74 73 72 60 59 - { LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0) }, -// N/A N/A N/A N/A N/A N/A 68 - { NA, NA, NA, NA, NA, NA, LA(5, 4) }, -// N/A N/A N/A N/A 71 70 69 - { NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0) }, + // 45 44 43 42 41 40 39 + {LA(1, 1), LA(1, 0), LA(0, 4), LA(0, 3), LA(0, 2), LA(0, 1), LA(0, 0)}, + // 52 51 50 49 48 47 46 + {LA(2, 3), LA(2, 2), LA(2, 1), LA(2, 0), LA(1, 4), LA(1, 3), LA(1, 2)}, + // 58 57 56 55 54 53 N/A + {LA(3, 4), LA(3, 3), LA(3, 2), LA(3, 1), LA(3, 0), LA(2, 4), NA}, + // 67 66 65 64 63 62 61 + {LA(5, 3), LA(5, 2), LA(5, 1), LA(5, 0), LA(4, 4), LA(4, 3), LA(4, 2)}, + // 76 75 74 73 72 60 59 + {LA(7, 3), LA(7, 2), LA(7, 1), LA(7, 0), LA(6, 3), LA(4, 1), LA(4, 0)}, + // N/A N/A N/A N/A N/A N/A 68 + {NA, NA, NA, NA, NA, NA, LA(5, 4)}, + // N/A N/A N/A N/A 71 70 69 + {NA, NA, NA, NA, LA(6, 2), LA(6, 1), LA(6, 0)}, }; - -#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND +#define IS31_ADDR_DEFAULT 0x74 // AD connected to GND #define IS31_TIMEOUT 5000 -static GFXINLINE void init_board(GDisplay *g) { - (void) g; +static GFXINLINE void init_board(GDisplay* g) { + (void)g; /* I2C pins */ - palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL - palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA + palSetPadMode(GPIOB, 0, PAL_MODE_ALTERNATIVE_2); // PTB0/I2C0/SCL + palSetPadMode(GPIOB, 1, PAL_MODE_ALTERNATIVE_2); // PTB1/I2C0/SDA palSetPadMode(GPIOB, 16, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOB, 16); /* start I2C */ @@ -77,34 +76,30 @@ static GFXINLINE void init_board(GDisplay *g) { I2CD1.i2c->FLT = 4; } -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} +static GFXINLINE void post_init_board(GDisplay* g) { (void)g; } static GFXINLINE const uint8_t* get_led_mask(GDisplay* g) { - (void) g; + (void)g; return led_mask; } -static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) -{ - (void) g; +static GFXINLINE uint8_t get_led_address(GDisplay* g, uint16_t x, uint16_t y) { + (void)g; return led_mapping[y][x]; } static GFXINLINE void set_hardware_shutdown(GDisplay* g, bool shutdown) { - (void) g; - if(!shutdown) { + (void)g; + if (!shutdown) { palSetPad(GPIOB, 16); - } - else { + } else { palClearPad(GPIOB, 16); } } -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; - i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); +static GFXINLINE void write_data(GDisplay* g, uint8_t* data, uint16_t length) { + (void)g; + i2cMasterTransmitTimeout(&I2CD1, IS31_ADDR_DEFAULT, data, length, 0, 0, US2ST(IS31_TIMEOUT)); } #endif /* _GDISP_LLD_BOARD_H */ diff --git a/drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c b/drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c index 917adadb84..7188244022 100644 --- a/drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c +++ b/drivers/ugfx/gdisp/is31fl3731c/gdisp_is31fl3731c.c @@ -19,15 +19,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #if GFX_USE_GDISP -#define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_QMK -#define GDISP_SCREEN_HEIGHT LED_HEIGHT -#define GDISP_SCREEN_WIDTH LED_WIDTH +# define GDISP_DRIVER_VMT GDISPVMT_IS31FL3731C_QMK +# define GDISP_SCREEN_HEIGHT LED_HEIGHT +# define GDISP_SCREEN_WIDTH LED_WIDTH -#include "gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" - -#include "board_is31fl3731c.h" +# include "gdisp_lld_config.h" +# include "src/gdisp/gdisp_driver.h" +# include "board_is31fl3731c.h" // Can't include led_tables from here extern const uint8_t CIE1931_CURVE[]; @@ -36,96 +35,96 @@ extern const uint8_t CIE1931_CURVE[]; /* Driver local definitions. */ /*===========================================================================*/ -#ifndef GDISP_INITIAL_CONTRAST - #define GDISP_INITIAL_CONTRAST 0 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT - #define GDISP_INITIAL_BACKLIGHT 0 -#endif +# ifndef GDISP_INITIAL_CONTRAST +# define GDISP_INITIAL_CONTRAST 0 +# endif +# ifndef GDISP_INITIAL_BACKLIGHT +# define GDISP_INITIAL_BACKLIGHT 0 +# endif -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) +# define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER << 0) -#define IS31_ADDR_DEFAULT 0x74 +# define IS31_ADDR_DEFAULT 0x74 -#define IS31_REG_CONFIG 0x00 +# define IS31_REG_CONFIG 0x00 // bits in reg -#define IS31_REG_CONFIG_PICTUREMODE 0x00 -#define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 -#define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 +# define IS31_REG_CONFIG_PICTUREMODE 0x00 +# define IS31_REG_CONFIG_AUTOPLAYMODE 0x08 +# define IS31_REG_CONFIG_AUDIOPLAYMODE 0x18 // D2:D0 bits are starting frame for autoplay mode -#define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode +# define IS31_REG_PICTDISP 0x01 // D2:D0 frame select for picture mode -#define IS31_REG_AUTOPLAYCTRL1 0x02 +# define IS31_REG_AUTOPLAYCTRL1 0x02 // D6:D4 number of loops (000=infty) // D2:D0 number of frames to be used -#define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) +# define IS31_REG_AUTOPLAYCTRL2 0x03 // D5:D0 delay time (*11ms) -#define IS31_REG_DISPLAYOPT 0x05 -#define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames -#define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 +# define IS31_REG_DISPLAYOPT 0x05 +# define IS31_REG_DISPLAYOPT_INTENSITY_SAME 0x20 // same intensity for all frames +# define IS31_REG_DISPLAYOPT_BLINK_ENABLE 0x8 // D2:D0 bits blink period time (*0.27s) -#define IS31_REG_AUDIOSYNC 0x06 -#define IS31_REG_AUDIOSYNC_ENABLE 0x1 +# define IS31_REG_AUDIOSYNC 0x06 +# define IS31_REG_AUDIOSYNC_ENABLE 0x1 -#define IS31_REG_FRAMESTATE 0x07 +# define IS31_REG_FRAMESTATE 0x07 -#define IS31_REG_BREATHCTRL1 0x08 +# define IS31_REG_BREATHCTRL1 0x08 // D6:D4 fade out time (26ms*2^i) // D2:D0 fade in time (26ms*2^i) -#define IS31_REG_BREATHCTRL2 0x09 -#define IS31_REG_BREATHCTRL2_ENABLE 0x10 +# define IS31_REG_BREATHCTRL2 0x09 +# define IS31_REG_BREATHCTRL2_ENABLE 0x10 // D2:D0 extinguish time (3.5ms*2^i) -#define IS31_REG_SHUTDOWN 0x0A -#define IS31_REG_SHUTDOWN_OFF 0x0 -#define IS31_REG_SHUTDOWN_ON 0x1 +# define IS31_REG_SHUTDOWN 0x0A +# define IS31_REG_SHUTDOWN_OFF 0x0 +# define IS31_REG_SHUTDOWN_ON 0x1 -#define IS31_REG_AGCCTRL 0x0B -#define IS31_REG_ADCRATE 0x0C +# define IS31_REG_AGCCTRL 0x0B +# define IS31_REG_ADCRATE 0x0C -#define IS31_COMMANDREGISTER 0xFD -#define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' -#define IS31_FUNCTIONREG_SIZE 0xD +# define IS31_COMMANDREGISTER 0xFD +# define IS31_FUNCTIONREG 0x0B // helpfully called 'page nine' +# define IS31_FUNCTIONREG_SIZE 0xD -#define IS31_FRAME_SIZE 0xB4 +# define IS31_FRAME_SIZE 0xB4 -#define IS31_PWM_REG 0x24 -#define IS31_PWM_SIZE 0x90 +# define IS31_PWM_REG 0x24 +# define IS31_PWM_SIZE 0x90 -#define IS31_LED_MASK_SIZE 0x12 +# define IS31_LED_MASK_SIZE 0x12 -#define IS31 +# define IS31 /*===========================================================================*/ /* Driver local functions. */ /*===========================================================================*/ -typedef struct{ +typedef struct { uint8_t write_buffer_offset; uint8_t write_buffer[IS31_FRAME_SIZE]; uint8_t frame_buffer[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH]; uint8_t page; -}__attribute__((__packed__)) PrivData; +} __attribute__((__packed__)) PrivData; // Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) +# define PRIV(g) ((PrivData *)g->priv) /*===========================================================================*/ /* Driver exported functions. */ /*===========================================================================*/ -static GFXINLINE void write_page(GDisplay* g, uint8_t page) { +static GFXINLINE void write_page(GDisplay *g, uint8_t page) { uint8_t tx[2] __attribute__((aligned(2))); tx[0] = IS31_COMMANDREGISTER; tx[1] = page; write_data(g, tx, 2); } -static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uint8_t data) { +static GFXINLINE void write_register(GDisplay *g, uint8_t page, uint8_t reg, uint8_t data) { uint8_t tx[2] __attribute__((aligned(2))); tx[0] = reg; tx[1] = data; @@ -136,7 +135,7 @@ static GFXINLINE void write_register(GDisplay* g, uint8_t page, uint8_t reg, uin static GFXINLINE void write_ram(GDisplay *g, uint8_t page, uint16_t offset, uint16_t length) { PRIV(g)->write_buffer_offset = offset; write_page(g, page); - write_data(g, (uint8_t*)PRIV(g), length + 1); + write_data(g, (uint8_t *)PRIV(g), length + 1); } LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { @@ -160,10 +159,9 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { write_ram(g, IS31_FUNCTIONREG, 0, IS31_FUNCTIONREG_SIZE); gfxSleepMilliseconds(10); - // zero all LED registers on all 8 pages, and enable the mask __builtin_memcpy(PRIV(g)->write_buffer, get_led_mask(g), IS31_LED_MASK_SIZE); - for(uint8_t i=0; i<8; i++) { + for (uint8_t i = 0; i < 8; i++) { write_ram(g, i, 0, IS31_FRAME_SIZE); gfxSleepMilliseconds(1); } @@ -176,133 +174,129 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { post_init_board(g); /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOff; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; + g->g.Powermode = powerOff; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; return TRUE; } -#if GDISP_HARDWARE_FLUSH - LLDSPEC void gdisp_lld_flush(GDisplay *g) { - // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; - - PRIV(g)->page++; - PRIV(g)->page %= 2; - // TODO: some smarter algorithm for this - // We should run only one physical page at a time - // This way we don't need to send so much data, and - // we could use slightly less memory - uint8_t* src = PRIV(g)->frame_buffer; - for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) { - for (int x=0;x<GDISP_SCREEN_WIDTH;x++) { - uint8_t val = (uint16_t)*src * g->g.Backlight / 100; - PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[val]; - ++src; - } +# if GDISP_HARDWARE_FLUSH +LLDSPEC void gdisp_lld_flush(GDisplay *g) { + // Don't flush if we don't need it. + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) return; + + PRIV(g)->page++; + PRIV(g)->page %= 2; + // TODO: some smarter algorithm for this + // We should run only one physical page at a time + // This way we don't need to send so much data, and + // we could use slightly less memory + uint8_t *src = PRIV(g)->frame_buffer; + for (int y = 0; y < GDISP_SCREEN_HEIGHT; y++) { + for (int x = 0; x < GDISP_SCREEN_WIDTH; x++) { + uint8_t val = (uint16_t)*src * g->g.Backlight / 100; + PRIV(g)->write_buffer[get_led_address(g, x, y)] = CIE1931_CURVE[val]; + ++src; } - write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); - gfxSleepMilliseconds(1); - write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); - - g->flags &= ~GDISP_FLG_NEEDFLUSH; } -#endif + write_ram(g, PRIV(g)->page, IS31_PWM_REG, IS31_PWM_SIZE); + gfxSleepMilliseconds(1); + write_register(g, IS31_FUNCTIONREG, IS31_REG_PICTDISP, PRIV(g)->page); -#if GDISP_HARDWARE_DRAWPIXEL - LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; + g->flags &= ~GDISP_FLG_NEEDFLUSH; +} +# endif - switch(g->g.Orientation) { +# if GDISP_HARDWARE_DRAWPIXEL +LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { + coord_t x, y; + + switch (g->g.Orientation) { default: case GDISP_ROTATE_0: x = g->p.x; y = g->p.y; break; case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; + x = GDISP_SCREEN_WIDTH - 1 - g->p.x; y = g->p.y; break; - } - PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); - g->flags |= GDISP_FLG_NEEDFLUSH; } -#endif + PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x] = gdispColor2Native(g->p.color); + g->flags |= GDISP_FLG_NEEDFLUSH; +} +# endif -#if GDISP_HARDWARE_PIXELREAD - LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; +# if GDISP_HARDWARE_PIXELREAD +LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { + coord_t x, y; - switch(g->g.Orientation) { + switch (g->g.Orientation) { default: case GDISP_ROTATE_0: x = g->p.x; y = g->p.y; break; case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; + x = GDISP_SCREEN_WIDTH - 1 - g->p.x; y = g->p.y; break; - } - return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); } -#endif + return gdispNative2Color(PRIV(g)->frame_buffer[y * GDISP_SCREEN_WIDTH + x]); +} +# endif -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL - LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { +# if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL +LLDSPEC void gdisp_lld_control(GDisplay *g) { + switch (g->p.x) { case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); - break; - case powerOn: - write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); - break; - default: - return; + if (g->g.Powermode == (powermode_t)g->p.ptr) return; + switch ((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_OFF); + break; + case powerOn: + write_register(g, IS31_FUNCTIONREG, IS31_REG_SHUTDOWN, IS31_REG_SHUTDOWN_ON); + break; + default: + return; } g->g.Powermode = (powermode_t)g->p.ptr; return; case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; + if (g->g.Orientation == (orientation_t)g->p.ptr) return; + switch ((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; } g->g.Orientation = (orientation_t)g->p.ptr; return; case GDISP_CONTROL_BACKLIGHT: - if (g->g.Backlight == (unsigned)g->p.ptr) - return; - unsigned val = (unsigned)g->p.ptr; + if (g->g.Backlight == (unsigned)g->p.ptr) return; + unsigned val = (unsigned)g->p.ptr; g->g.Backlight = val > 100 ? 100 : val; g->flags |= GDISP_FLG_NEEDFLUSH; return; - } } -#endif // GDISP_NEED_CONTROL +} +# endif // GDISP_NEED_CONTROL -#endif // GFX_USE_GDISP +#endif // GFX_USE_GDISP diff --git a/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h b/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h index 588d688cf6..1b9fadba16 100644 --- a/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h +++ b/drivers/ugfx/gdisp/is31fl3731c/gdisp_lld_config.h @@ -24,13 +24,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. /* Driver hardware support. */ /*===========================================================================*/ -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE +# define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +# define GDISP_HARDWARE_DRAWPIXEL TRUE +# define GDISP_HARDWARE_PIXELREAD TRUE +# define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 +# define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_GRAY256 -#endif /* GFX_USE_GDISP */ +#endif /* GFX_USE_GDISP */ -#endif /* _GDISP_LLD_CONFIG_H */ +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/drivers/ugfx/gdisp/st7565/board_st7565_template.h b/drivers/ugfx/gdisp/st7565/board_st7565_template.h index 9ab636c95d..194f8ea24d 100644 --- a/drivers/ugfx/gdisp/st7565/board_st7565_template.h +++ b/drivers/ugfx/gdisp/st7565/board_st7565_template.h @@ -8,10 +8,10 @@ #ifndef _GDISP_LLD_BOARD_H #define _GDISP_LLD_BOARD_H -#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 -#define ST7565_ADC ST7565_ADC_NORMAL -#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC -#define ST7565_PAGE_ORDER 0,1,2,3 +#define ST7565_LCD_BIAS ST7565_LCD_BIAS_9 // actually 6 +#define ST7565_ADC ST7565_ADC_NORMAL +#define ST7565_COM_SCAN ST7565_COM_SCAN_DEC +#define ST7565_PAGE_ORDER 0, 1, 2, 3 /* * Custom page order for several LCD boards, e.g. HEM12864-99 * #define ST7565_PAGE_ORDER 4,5,6,7,0,1,2,3 @@ -25,11 +25,9 @@ #define ST7565_SLCK_PIN 5 #define ST7565_SS_PIN 4 -#define palSetPadModeRaw(portname, bits) \ - ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits +#define palSetPadModeRaw(portname, bits) ST7565_PORT->PCR[ST7565_##portname##_PIN] = bits -#define palSetPadModeNamed(portname, portmode) \ - palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) +#define palSetPadModeNamed(portname, portmode) palSetPadMode(ST7565_GPIOPORT, ST7565_##portname##_PIN, portmode) #define ST7565_SPI_MODE PORTx_PCRn_DSE | PORTx_PCRn_MUX(2) // DSPI Clock and Transfer Attributes @@ -37,38 +35,37 @@ // MSB First // CLK Low by default static const SPIConfig spi1config = { - // Operation complete callback or @p NULL. - .end_cb = NULL, - //The chip select line port - when not using pcs. - .ssport = ST7565_GPIOPORT, - // brief The chip select line pad number - when not using pcs. - .sspad=ST7565_SS_PIN, - // SPI initialization data. - .tar0 = - SPIx_CTARn_FMSZ(7) // Frame size = 8 bytes - | SPIx_CTARn_ASC(1) // After SCK Delay Scaler (min 50 ns) = 55.56ns - | SPIx_CTARn_DT(0) // Delay After Transfer Scaler (no minimum)= 27.78ns - | SPIx_CTARn_CSSCK(0) // PCS to SCK Delay Scaler (min 20 ns) = 27.78ns - | SPIx_CTARn_PBR(0) // Baud Rate Prescaler = 2 - | SPIx_CTARn_BR(0) // Baud rate (min 50ns) = 55.56ns + // Operation complete callback or @p NULL. + .end_cb = NULL, + // The chip select line port - when not using pcs. + .ssport = ST7565_GPIOPORT, + // brief The chip select line pad number - when not using pcs. + .sspad = ST7565_SS_PIN, + // SPI initialization data. + .tar0 = SPIx_CTARn_FMSZ(7) // Frame size = 8 bytes + | SPIx_CTARn_ASC(1) // After SCK Delay Scaler (min 50 ns) = 55.56ns + | SPIx_CTARn_DT(0) // Delay After Transfer Scaler (no minimum)= 27.78ns + | SPIx_CTARn_CSSCK(0) // PCS to SCK Delay Scaler (min 20 ns) = 27.78ns + | SPIx_CTARn_PBR(0) // Baud Rate Prescaler = 2 + | SPIx_CTARn_BR(0) // Baud rate (min 50ns) = 55.56ns }; static GFXINLINE void acquire_bus(GDisplay *g) { - (void) g; + (void)g; // Only the LCD is using the SPI bus, so no need to acquire // spiAcquireBus(&SPID1); spiSelect(&SPID1); } static GFXINLINE void release_bus(GDisplay *g) { - (void) g; + (void)g; // Only the LCD is using the SPI bus, so no need to release - //spiReleaseBus(&SPID1); + // spiReleaseBus(&SPID1); spiUnselect(&SPID1); } static GFXINLINE void init_board(GDisplay *g) { - (void) g; + (void)g; palSetPadModeNamed(A0, PAL_MODE_OUTPUT_PUSHPULL); palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); palSetPadModeNamed(RST, PAL_MODE_OUTPUT_PUSHPULL); @@ -82,31 +79,23 @@ static GFXINLINE void init_board(GDisplay *g) { release_bus(g); } -static GFXINLINE void post_init_board(GDisplay *g) { - (void) g; -} +static GFXINLINE void post_init_board(GDisplay *g) { (void)g; } static GFXINLINE void setpin_reset(GDisplay *g, bool_t state) { - (void) g; + (void)g; if (state) { palClearPad(ST7565_GPIOPORT, ST7565_RST_PIN); - } - else { + } else { palSetPad(ST7565_GPIOPORT, ST7565_RST_PIN); } } -static GFXINLINE void enter_data_mode(GDisplay *g) { - palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); -} - -static GFXINLINE void enter_cmd_mode(GDisplay *g) { - palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); -} +static GFXINLINE void enter_data_mode(GDisplay *g) { palSetPad(ST7565_GPIOPORT, ST7565_A0_PIN); } +static GFXINLINE void enter_cmd_mode(GDisplay *g) { palClearPad(ST7565_GPIOPORT, ST7565_A0_PIN); } -static GFXINLINE void write_data(GDisplay *g, uint8_t* data, uint16_t length) { - (void) g; +static GFXINLINE void write_data(GDisplay *g, uint8_t *data, uint16_t length) { + (void)g; spiSend(&SPID1, length, data); } diff --git a/drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c b/drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c index c38194b069..fde320981b 100644 --- a/drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c +++ b/drivers/ugfx/gdisp/st7565/gdisp_lld_ST7565.c @@ -9,82 +9,89 @@ #if GFX_USE_GDISP -#define GDISP_DRIVER_VMT GDISPVMT_ST7565_QMK -#include "gdisp_lld_config.h" -#include "src/gdisp/gdisp_driver.h" +# define GDISP_DRIVER_VMT GDISPVMT_ST7565_QMK +# include "gdisp_lld_config.h" +# include "src/gdisp/gdisp_driver.h" -#include "board_st7565.h" +# include "board_st7565.h" /*===========================================================================*/ /* Driver local definitions. */ /*===========================================================================*/ -#ifndef GDISP_SCREEN_HEIGHT -#define GDISP_SCREEN_HEIGHT LCD_HEIGHT -#endif -#ifndef GDISP_SCREEN_WIDTH -#define GDISP_SCREEN_WIDTH LCD_WIDTH -#endif -#ifndef GDISP_INITIAL_CONTRAST -#define GDISP_INITIAL_CONTRAST 35 -#endif -#ifndef GDISP_INITIAL_BACKLIGHT -#define GDISP_INITIAL_BACKLIGHT 100 -#endif +# ifndef GDISP_SCREEN_HEIGHT +# define GDISP_SCREEN_HEIGHT LCD_HEIGHT +# endif +# ifndef GDISP_SCREEN_WIDTH +# define GDISP_SCREEN_WIDTH LCD_WIDTH +# endif +# ifndef GDISP_INITIAL_CONTRAST +# define GDISP_INITIAL_CONTRAST 35 +# endif +# ifndef GDISP_INITIAL_BACKLIGHT +# define GDISP_INITIAL_BACKLIGHT 100 +# endif -#define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER<<0) +# define GDISP_FLG_NEEDFLUSH (GDISP_FLG_DRIVER << 0) -#include "st7565.h" +# include "st7565.h" /*===========================================================================*/ /* Driver config defaults for backward compatibility. */ /*===========================================================================*/ -#ifndef ST7565_LCD_BIAS -#define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 -#endif -#ifndef ST7565_ADC -#define ST7565_ADC ST7565_ADC_NORMAL -#endif -#ifndef ST7565_COM_SCAN -#define ST7565_COM_SCAN ST7565_COM_SCAN_INC -#endif -#ifndef ST7565_PAGE_ORDER -#define ST7565_PAGE_ORDER 0,1,2,3 -#endif +# ifndef ST7565_LCD_BIAS +# define ST7565_LCD_BIAS ST7565_LCD_BIAS_7 +# endif +# ifndef ST7565_ADC +# define ST7565_ADC ST7565_ADC_NORMAL +# endif +# ifndef ST7565_COM_SCAN +# define ST7565_COM_SCAN ST7565_COM_SCAN_INC +# endif +# ifndef ST7565_PAGE_ORDER +# define ST7565_PAGE_ORDER 0, 1, 2, 3 +# endif /*===========================================================================*/ /* Driver local functions. */ /*===========================================================================*/ -typedef struct{ - bool_t buffer2; +typedef struct { + bool_t buffer2; uint8_t data_pos; uint8_t data[16]; uint8_t ram[GDISP_SCREEN_HEIGHT * GDISP_SCREEN_WIDTH / 8]; -}PrivData; +} PrivData; // Some common routines and macros -#define PRIV(g) ((PrivData*)g->priv) -#define RAM(g) (PRIV(g)->ram) +# define PRIV(g) ((PrivData *)g->priv) +# define RAM(g) (PRIV(g)->ram) -static GFXINLINE void write_cmd(GDisplay* g, uint8_t cmd) { - PRIV(g)->data[PRIV(g)->data_pos++] = cmd; -} +static GFXINLINE void write_cmd(GDisplay *g, uint8_t cmd) { PRIV(g)->data[PRIV(g)->data_pos++] = cmd; } -static GFXINLINE void flush_cmd(GDisplay* g) { +static GFXINLINE void flush_cmd(GDisplay *g) { write_data(g, PRIV(g)->data, PRIV(g)->data_pos); PRIV(g)->data_pos = 0; } -#define write_cmd2(g, cmd1, cmd2) { write_cmd(g, cmd1); write_cmd(g, cmd2); } -#define write_cmd3(g, cmd1, cmd2, cmd3) { write_cmd(g, cmd1); write_cmd(g, cmd2); write_cmd(g, cmd3); } +# define write_cmd2(g, cmd1, cmd2) \ + { \ + write_cmd(g, cmd1); \ + write_cmd(g, cmd2); \ + } +# define write_cmd3(g, cmd1, cmd2, cmd3) \ + { \ + write_cmd(g, cmd1); \ + write_cmd(g, cmd2); \ + write_cmd(g, cmd3); \ + } // Some common routines and macros -#define delay(us) gfxSleepMicroseconds(us) -#define delay_ms(ms) gfxSleepMilliseconds(ms) +# define delay(us) gfxSleepMicroseconds(us) +# define delay_ms(ms) gfxSleepMilliseconds(ms) -#define xyaddr(x, y) ((x) + ((y)>>3)*GDISP_SCREEN_WIDTH) -#define xybit(y) (1<<((y)&7)) +# define xyaddr(x, y) ((x) + ((y) >> 3) * GDISP_SCREEN_WIDTH) +# define xybit(y) (1 << ((y)&7)) /*===========================================================================*/ /* Driver exported functions. */ @@ -99,8 +106,8 @@ static GFXINLINE void flush_cmd(GDisplay* g) { LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { // The private area is the display surface. - g->priv = gfxAlloc(sizeof(PrivData)); - PRIV(g)->buffer2 = false; + g->priv = gfxAlloc(sizeof(PrivData)); + PRIV(g)->buffer2 = false; PRIV(g)->data_pos = 0; // Initialise the board interface @@ -139,22 +146,21 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { release_bus(g); /* Initialise the GDISP structure */ - g->g.Width = GDISP_SCREEN_WIDTH; - g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + g->g.Height = GDISP_SCREEN_HEIGHT; g->g.Orientation = GDISP_ROTATE_0; - g->g.Powermode = powerOff; - g->g.Backlight = GDISP_INITIAL_BACKLIGHT; - g->g.Contrast = GDISP_INITIAL_CONTRAST; + g->g.Powermode = powerOff; + g->g.Backlight = GDISP_INITIAL_BACKLIGHT; + g->g.Contrast = GDISP_INITIAL_CONTRAST; return TRUE; } -#if GDISP_HARDWARE_FLUSH +# if GDISP_HARDWARE_FLUSH LLDSPEC void gdisp_lld_flush(GDisplay *g) { - unsigned p; + unsigned p; // Don't flush if we don't need it. - if (!(g->flags & GDISP_FLG_NEEDFLUSH)) - return; + if (!(g->flags & GDISP_FLG_NEEDFLUSH)) return; acquire_bus(g); enter_cmd_mode(g); @@ -166,7 +172,7 @@ LLDSPEC void gdisp_lld_flush(GDisplay *g) { write_cmd(g, ST7565_RMW); flush_cmd(g); enter_data_mode(g); - write_data(g, RAM(g) + (p*GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); + write_data(g, RAM(g) + (p * GDISP_SCREEN_WIDTH), GDISP_SCREEN_WIDTH); enter_cmd_mode(g); } unsigned line = (PRIV(g)->buffer2 ? 32 : 0); @@ -177,30 +183,30 @@ LLDSPEC void gdisp_lld_flush(GDisplay *g) { g->flags &= ~GDISP_FLG_NEEDFLUSH; } -#endif +# endif -#if GDISP_HARDWARE_DRAWPIXEL +# if GDISP_HARDWARE_DRAWPIXEL LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; + coord_t x, y; + + switch (g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT - 1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH - 1 - g->p.x; + y = GDISP_SCREEN_HEIGHT - 1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT - 1 - g->p.y; + y = g->p.x; + break; } if (gdispColor2Native(g->p.color) != Black) RAM(g)[xyaddr(x, y)] |= xybit(y); @@ -208,53 +214,52 @@ LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) { RAM(g)[xyaddr(x, y)] &= ~xybit(y); g->flags |= GDISP_FLG_NEEDFLUSH; } -#endif +# endif -#if GDISP_HARDWARE_PIXELREAD +# if GDISP_HARDWARE_PIXELREAD LLDSPEC color_t gdisp_lld_get_pixel_color(GDisplay *g) { - coord_t x, y; - - switch(g->g.Orientation) { - default: - case GDISP_ROTATE_0: - x = g->p.x; - y = g->p.y; - break; - case GDISP_ROTATE_90: - x = g->p.y; - y = GDISP_SCREEN_HEIGHT-1 - g->p.x; - break; - case GDISP_ROTATE_180: - x = GDISP_SCREEN_WIDTH-1 - g->p.x; - y = GDISP_SCREEN_HEIGHT-1 - g->p.y; - break; - case GDISP_ROTATE_270: - x = GDISP_SCREEN_HEIGHT-1 - g->p.y; - y = g->p.x; - break; + coord_t x, y; + + switch (g->g.Orientation) { + default: + case GDISP_ROTATE_0: + x = g->p.x; + y = g->p.y; + break; + case GDISP_ROTATE_90: + x = g->p.y; + y = GDISP_SCREEN_HEIGHT - 1 - g->p.x; + break; + case GDISP_ROTATE_180: + x = GDISP_SCREEN_WIDTH - 1 - g->p.x; + y = GDISP_SCREEN_HEIGHT - 1 - g->p.y; + break; + case GDISP_ROTATE_270: + x = GDISP_SCREEN_HEIGHT - 1 - g->p.y; + y = g->p.x; + break; } return (RAM(g)[xyaddr(x, y)] & xybit(y)) ? White : Black; } -#endif +# endif LLDSPEC void gdisp_lld_blit_area(GDisplay *g) { - uint8_t* buffer = (uint8_t*)g->p.ptr; - int linelength = g->p.cx; + uint8_t *buffer = (uint8_t *)g->p.ptr; + int linelength = g->p.cx; for (int i = 0; i < g->p.cy; i++) { - unsigned dstx = g->p.x; - unsigned dsty = g->p.y + i; - unsigned srcx = g->p.x1; - unsigned srcy = g->p.y1 + i; + unsigned dstx = g->p.x; + unsigned dsty = g->p.y + i; + unsigned srcx = g->p.x1; + unsigned srcy = g->p.y1 + i; unsigned srcbit = srcy * g->p.x2 + srcx; - for(int j=0; j < linelength; j++) { - uint8_t src = buffer[srcbit / 8]; - uint8_t bit = 7-(srcbit % 8); - uint8_t bitset = (src >> bit) & 1; - uint8_t* dst = &(RAM(g)[xyaddr(dstx, dsty)]); + for (int j = 0; j < linelength; j++) { + uint8_t src = buffer[srcbit / 8]; + uint8_t bit = 7 - (srcbit % 8); + uint8_t bitset = (src >> bit) & 1; + uint8_t *dst = &(RAM(g)[xyaddr(dstx, dsty)]); if (bitset) { *dst |= xybit(dsty); - } - else { + } else { *dst &= ~xybit(dsty); } dstx++; @@ -264,66 +269,64 @@ LLDSPEC void gdisp_lld_blit_area(GDisplay *g) { g->flags |= GDISP_FLG_NEEDFLUSH; } -#if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL +# if GDISP_NEED_CONTROL && GDISP_HARDWARE_CONTROL LLDSPEC void gdisp_lld_control(GDisplay *g) { - switch(g->p.x) { - case GDISP_CONTROL_POWER: - if (g->g.Powermode == (powermode_t)g->p.ptr) - return; - switch((powermode_t)g->p.ptr) { - case powerOff: - case powerSleep: - case powerDeepSleep: - acquire_bus(g); - enter_cmd_mode(g); - write_cmd(g, ST7565_DISPLAY_OFF); - flush_cmd(g); - release_bus(g); - break; - case powerOn: - acquire_bus(g); - enter_cmd_mode(g); - write_cmd(g, ST7565_DISPLAY_ON); - flush_cmd(g); - release_bus(g); - break; - default: + switch (g->p.x) { + case GDISP_CONTROL_POWER: + if (g->g.Powermode == (powermode_t)g->p.ptr) return; + switch ((powermode_t)g->p.ptr) { + case powerOff: + case powerSleep: + case powerDeepSleep: + acquire_bus(g); + enter_cmd_mode(g); + write_cmd(g, ST7565_DISPLAY_OFF); + flush_cmd(g); + release_bus(g); + break; + case powerOn: + acquire_bus(g); + enter_cmd_mode(g); + write_cmd(g, ST7565_DISPLAY_ON); + flush_cmd(g); + release_bus(g); + break; + default: + return; + } + g->g.Powermode = (powermode_t)g->p.ptr; return; - } - g->g.Powermode = (powermode_t)g->p.ptr; - return; case GDISP_CONTROL_ORIENTATION: - if (g->g.Orientation == (orientation_t)g->p.ptr) - return; - switch((orientation_t)g->p.ptr) { - /* Rotation is handled by the drawing routines */ - case GDISP_ROTATE_0: - case GDISP_ROTATE_180: - g->g.Height = GDISP_SCREEN_HEIGHT; - g->g.Width = GDISP_SCREEN_WIDTH; - break; - case GDISP_ROTATE_90: - case GDISP_ROTATE_270: - g->g.Height = GDISP_SCREEN_WIDTH; - g->g.Width = GDISP_SCREEN_HEIGHT; - break; - default: - return; + if (g->g.Orientation == (orientation_t)g->p.ptr) return; + switch ((orientation_t)g->p.ptr) { + /* Rotation is handled by the drawing routines */ + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + g->g.Height = GDISP_SCREEN_HEIGHT; + g->g.Width = GDISP_SCREEN_WIDTH; + break; + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + g->g.Height = GDISP_SCREEN_WIDTH; + g->g.Width = GDISP_SCREEN_HEIGHT; + break; + default: + return; } g->g.Orientation = (orientation_t)g->p.ptr; return; - case GDISP_CONTROL_CONTRAST: - g->g.Contrast = (unsigned)g->p.ptr & 63; - acquire_bus(g); - enter_cmd_mode(g); - write_cmd2(g, ST7565_CONTRAST, g->g.Contrast); - flush_cmd(g); - release_bus(g); - return; + case GDISP_CONTROL_CONTRAST: + g->g.Contrast = (unsigned)g->p.ptr & 63; + acquire_bus(g); + enter_cmd_mode(g); + write_cmd2(g, ST7565_CONTRAST, g->g.Contrast); + flush_cmd(g); + release_bus(g); + return; } } -#endif // GDISP_NEED_CONTROL +# endif // GDISP_NEED_CONTROL -#endif // GFX_USE_GDISP +#endif // GFX_USE_GDISP diff --git a/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h b/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h index 4446bd38bc..9ab5daac1c 100644 --- a/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h +++ b/drivers/ugfx/gdisp/st7565/gdisp_lld_config.h @@ -14,14 +14,14 @@ /* Driver hardware support. */ /*===========================================================================*/ -#define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing -#define GDISP_HARDWARE_DRAWPIXEL TRUE -#define GDISP_HARDWARE_PIXELREAD TRUE -#define GDISP_HARDWARE_CONTROL TRUE -#define GDISP_HARDWARE_BITFILLS TRUE +# define GDISP_HARDWARE_FLUSH TRUE // This controller requires flushing +# define GDISP_HARDWARE_DRAWPIXEL TRUE +# define GDISP_HARDWARE_PIXELREAD TRUE +# define GDISP_HARDWARE_CONTROL TRUE +# define GDISP_HARDWARE_BITFILLS TRUE -#define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO +# define GDISP_LLD_PIXELFORMAT GDISP_PIXELFORMAT_MONO -#endif /* GFX_USE_GDISP */ +#endif /* GFX_USE_GDISP */ -#endif /* _GDISP_LLD_CONFIG_H */ +#endif /* _GDISP_LLD_CONFIG_H */ diff --git a/drivers/ugfx/gdisp/st7565/st7565.h b/drivers/ugfx/gdisp/st7565/st7565.h index 24924ff050..3c77a88569 100644 --- a/drivers/ugfx/gdisp/st7565/st7565.h +++ b/drivers/ugfx/gdisp/st7565/st7565.h @@ -8,32 +8,32 @@ #ifndef _ST7565_H #define _ST7565_H -#define ST7565_CONTRAST 0x81 -#define ST7565_ALLON_NORMAL 0xA4 -#define ST7565_ALLON 0xA5 -#define ST7565_POSITIVE_DISPLAY 0xA6 -#define ST7565_INVERT_DISPLAY 0xA7 -#define ST7565_DISPLAY_OFF 0xAE -#define ST7565_DISPLAY_ON 0xAF +#define ST7565_CONTRAST 0x81 +#define ST7565_ALLON_NORMAL 0xA4 +#define ST7565_ALLON 0xA5 +#define ST7565_POSITIVE_DISPLAY 0xA6 +#define ST7565_INVERT_DISPLAY 0xA7 +#define ST7565_DISPLAY_OFF 0xAE +#define ST7565_DISPLAY_ON 0xAF -#define ST7565_LCD_BIAS_7 0xA3 -#define ST7565_LCD_BIAS_9 0xA2 +#define ST7565_LCD_BIAS_7 0xA3 +#define ST7565_LCD_BIAS_9 0xA2 -#define ST7565_ADC_NORMAL 0xA0 -#define ST7565_ADC_REVERSE 0xA1 +#define ST7565_ADC_NORMAL 0xA0 +#define ST7565_ADC_REVERSE 0xA1 -#define ST7565_COM_SCAN_INC 0xC0 -#define ST7565_COM_SCAN_DEC 0xC8 +#define ST7565_COM_SCAN_INC 0xC0 +#define ST7565_COM_SCAN_DEC 0xC8 -#define ST7565_START_LINE 0x40 -#define ST7565_PAGE 0xB0 -#define ST7565_COLUMN_MSB 0x10 -#define ST7565_COLUMN_LSB 0x00 -#define ST7565_RMW 0xE0 +#define ST7565_START_LINE 0x40 +#define ST7565_PAGE 0xB0 +#define ST7565_COLUMN_MSB 0x10 +#define ST7565_COLUMN_LSB 0x00 +#define ST7565_RMW 0xE0 -#define ST7565_RESISTOR_RATIO 0x20 -#define ST7565_POWER_CONTROL 0x28 +#define ST7565_RESISTOR_RATIO 0x20 +#define ST7565_POWER_CONTROL 0x28 -#define ST7565_RESET 0xE2 +#define ST7565_RESET 0xE2 #endif /* _ST7565_H */ |