diff options
author | inmarket <andrewh@inmarket.com.au> | 2013-10-02 16:30:06 +1000 |
---|---|---|
committer | inmarket <andrewh@inmarket.com.au> | 2013-10-02 16:30:06 +1000 |
commit | d7d02395d0c1afe27bc39eeddc17899084c72de9 (patch) | |
tree | 55ce695c48c08f52aa8afbdbd92f7ad4ec3746aa /drivers/gdisp/ILI9320/gdisp_lld.c | |
parent | 884db04e8c13d9258c6aea10248e42615e10ab83 (diff) | |
download | uGFX-d7d02395d0c1afe27bc39eeddc17899084c72de9.tar.gz uGFX-d7d02395d0c1afe27bc39eeddc17899084c72de9.tar.bz2 uGFX-d7d02395d0c1afe27bc39eeddc17899084c72de9.zip |
Updates to ported drivers to support new optimisation method.
Includes Bug fixes.
Diffstat (limited to 'drivers/gdisp/ILI9320/gdisp_lld.c')
-rw-r--r-- | drivers/gdisp/ILI9320/gdisp_lld.c | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/drivers/gdisp/ILI9320/gdisp_lld.c b/drivers/gdisp/ILI9320/gdisp_lld.c index d8bc411a..68081b96 100644 --- a/drivers/gdisp/ILI9320/gdisp_lld.c +++ b/drivers/gdisp/ILI9320/gdisp_lld.c @@ -57,31 +57,43 @@ uint32_t DISPLAY_CODE; #define dummy_read() { volatile uint16_t dummy; dummy = read_data(); (void) dummy; } #define write_reg(reg, data) { write_index(reg); write_data(data); } -static void set_viewport(uint16_t x, uint16_t y, uint16_t cx, uint16_t cy) { +static void set_cursor(GDISPDriver *g) { switch(g->g.Orientation) { case GDISP_ROTATE_0: case GDISP_ROTATE_180: - write_reg(0x0050, x); - write_reg(0x0051, x + cx - 1); - write_reg(0x0052, y); - write_reg(0x0053, y + cy - 1); - write_reg(0x0020, x); - write_reg(0x0021, y); + write_reg(0x0020, g->p.x); + write_reg(0x0021, g->p.y); break; case GDISP_ROTATE_90: case GDISP_ROTATE_270: - write_reg(0x0050, y); - write_reg(0x0051, y + cy - 1); - write_reg(0x0052, x); - write_reg(0x0053, x + cx - 1); - write_reg(0x0020, y); - write_reg(0x0021, x); + write_reg(0x0020, g->p.y); + write_reg(0x0021, g->p.x); break; } write_index(0x0022); } +static void set_viewport(GDISPDriver *g) { + switch(g->g.Orientation) { + case GDISP_ROTATE_0: + case GDISP_ROTATE_180: + write_reg(0x0050, g->p.x); + write_reg(0x0051, g->p.x + g->p.cx - 1); + write_reg(0x0052, g->p.y); + write_reg(0x0053, g->p.y + g->p.cy - 1); + break; + + case GDISP_ROTATE_90: + case GDISP_ROTATE_270: + write_reg(0x0050, g->p.y); + write_reg(0x0051, g->p.y + g->p.cy - 1); + write_reg(0x0052, g->p.x); + write_reg(0x0053, g->p.x + g->p.cx - 1); + break; + } +} + LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { /* Initialise your display */ init_board(); @@ -181,12 +193,17 @@ LLDSPEC bool_t gdisp_lld_init(GDISPDriver *g) { LLDSPEC void gdisp_lld_write_stop(GDISPDriver *g) { release_bus(); } + LLDSPEC void gdisp_lld_write_pos(GDISPDriver *g) { + set_cursor(g); + } + #endif #endif #if GDISP_HARDWARE_STREAM_READ LLDSPEC void gdisp_lld_read_start(GDISPDriver *g) { acquire_bus(); set_viewport(g); + set_cursor(g); setreadmode(); dummy_read(); } |