diff options
| author | Uros Majstorovic <majstor@majstor.org> | 2026-01-07 22:58:33 +0100 |
|---|---|---|
| committer | Uros Majstorovic <majstor@majstor.org> | 2026-01-07 22:58:33 +0100 |
| commit | 46b08fc235f3f068034355970697acc0956e5c99 (patch) | |
| tree | 96e2bde5d95c295a57afae353684a25544fb09fa /fw/fe310/eos/eve | |
| parent | 285ddd410a559449b7e2cbab9b2b10e850efbd08 (diff) | |
introduced EOSMessage struct for SPI and Event queue messages; added APP <-> FE310 bridge SPI messages; LCD/touch panel driver for app module; save relevant state to AON module before sleep;
Diffstat (limited to 'fw/fe310/eos/eve')
| -rw-r--r-- | fw/fe310/eos/eve/eve.c | 36 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/eve.h | 7 | ||||
| -rwxr-xr-x | fw/fe310/eos/eve/eve_config.h | 28 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/eve_platform.h | 5 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/eve_touch_engine.c | 5 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/eve_touch_engine.h | 1 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/selectw.c | 113 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/selectw.h | 4 |
8 files changed, 98 insertions, 101 deletions
diff --git a/fw/fe310/eos/eve/eve.c b/fw/fe310/eos/eve/eve.c index e5c5f80..2f01358 100644 --- a/fw/fe310/eos/eve/eve.c +++ b/fw/fe310/eos/eve/eve.c @@ -12,9 +12,6 @@ static uint16_t cmd_offset; static char dl_burst; static uint32_t dl_addr; -static uint8_t power_state = EVE_PSTATE_ACTIVE; -static int lcd_absent = 0; - void eve_command(uint8_t command, uint8_t parameter) { eve_spi_set_cs(); eve_spi_xchg24(((uint32_t)command << 16) | ((uint32_t)parameter << 8), 0); @@ -384,7 +381,7 @@ int eve_init(void) { #endif /* nothing is being displayed yet... the pixel clock is still 0x00 */ - power_state = EVE_PSTATE_ACTIVE; + eve_pwr_set_state(EVE_PSTATE_ACTIVE); return EVE_OK; } @@ -408,16 +405,16 @@ void eve_intr_disable(void) { } void eve_activate(void) { - if (power_state == EVE_PSTATE_ACTIVE) return; + if (eve_pwr_get_state() == EVE_PSTATE_ACTIVE) return; eve_command(EVE_ACTIVE, 0); - if (power_state == EVE_PSTATE_SLEEP) { + if (eve_pwr_get_state() == EVE_PSTATE_SLEEP) { eve_sleep(20); } } void eve_deactivate(void) { - switch (power_state) { + switch (eve_pwr_get_state()) { case EVE_PSTATE_ACTIVE: return; @@ -432,33 +429,29 @@ void eve_deactivate(void) { } void eve_pwr_standby(void) { - if (power_state != EVE_PSTATE_ACTIVE) return; + if (eve_pwr_get_state() != EVE_PSTATE_ACTIVE) return; eve_command(EVE_STANDBY, 0); - power_state = EVE_PSTATE_STANDBY; + eve_pwr_set_state(EVE_PSTATE_STANDBY); } void eve_pwr_sleep(void) { - if (power_state != EVE_PSTATE_ACTIVE) return; + if (eve_pwr_get_state() != EVE_PSTATE_ACTIVE) return; eve_command(EVE_SLEEP, 0); - power_state = EVE_PSTATE_SLEEP; + eve_pwr_set_state(EVE_PSTATE_SLEEP); } void eve_pwr_wake(void) { eve_activate(); - power_state = EVE_PSTATE_ACTIVE; -} - -void eve_pwr_set_state(uint8_t state) { - power_state = state; + eve_pwr_set_state(EVE_PSTATE_ACTIVE); } uint8_t eve_pwr_state(void) { - return power_state; + return eve_pwr_get_state(); } int eve_gpio_get(int gpio) { @@ -505,13 +498,14 @@ void eve_gpio_write_dir(uint16_t dir) { eve_write16(REG_GPIOX_DIR, reg); } -void eve_brightness(uint8_t b) { - if (lcd_absent) b = 0; +void eve_set_brightness(uint8_t b) { + if (eve_lcd_get_absent()) b = 0; + if (b > 0x80) b = 0x80; eve_write8(REG_PWM_DUTY, b); } -void eve_lcd_absent(void) { - lcd_absent = 1; +uint8_t eve_get_brightness(void) { + return eve_read8(REG_PWM_DUTY); } void eve_copro_reset(void) { diff --git a/fw/fe310/eos/eve/eve.h b/fw/fe310/eos/eve/eve.h index 02388bb..7936fc2 100644 --- a/fw/fe310/eos/eve/eve.h +++ b/fw/fe310/eos/eve/eve.h @@ -8,7 +8,6 @@ /* defined in eve_platform.h */ #define EVE_GPIO_MASK 0x800f -#define EVE_GPIO_DISP 15 #define EVE_PSTATE_ACTIVE 0 #define EVE_PSTATE_STANDBY 1 @@ -69,8 +68,6 @@ void eve_deactivate(void); void eve_pwr_standby(void); void eve_pwr_sleep(void); void eve_pwr_wake(void); -void eve_pwr_set_state(uint8_t state); - uint8_t eve_pwr_state(void); int eve_gpio_get(int gpio); @@ -80,6 +77,6 @@ void eve_gpio_write(uint16_t gpio); uint16_t eve_gpio_read_dir(void); void eve_gpio_write_dir(uint16_t dir); -void eve_brightness(uint8_t b); -void eve_lcd_absent(void); +void eve_set_brightness(uint8_t b); +uint8_t eve_get_brightness(void); void eve_copro_reset(void); diff --git a/fw/fe310/eos/eve/eve_config.h b/fw/fe310/eos/eve/eve_config.h index 1126277..4a99992 100755 --- a/fw/fe310/eos/eve/eve_config.h +++ b/fw/fe310/eos/eve/eve_config.h @@ -3,31 +3,31 @@ /* FocusLCDs E50RG84885LWAM520-CA */ +#define EVE_HFP 8 /* horizontal front porch */ #define EVE_HLPW 6 /* horizontal low pulse width */ #define EVE_HBP 6 /* horizontal back porch */ -#define EVE_HFP 6 /* horizontal front porch */ #define EVE_HACT 480 /* horizontal active pixels */ -#define EVE_HTOT (EVE_HLPW + EVE_HBP + EVE_HFP + EVE_HACT + 10) +#define EVE_HTOT (EVE_HLPW + EVE_HBP + EVE_HFP + EVE_HACT) +#define EVE_HFPX (EVE_HFP - 2) /* refer to AN_336 - FT8xx - Selecting an LCD Display */ - -#define EVE_VLPW 6 /* vertical low pulse width */ -#define EVE_VBP 6 /* vertical back porch */ -#define EVE_VFP 6 /* vertical front porch */ +#define EVE_VFP 26 /* vertical front porch */ +#define EVE_VLPW 10 /* vertical low pulse width */ +#define EVE_VBP 10 /* vertical back porch */ #define EVE_VACT 854 /* vertical active pixels */ -#define EVE_VTOT (EVE_VLPW + EVE_VBP + EVE_VFP + EVE_VACT + 10) - +#define EVE_VTOT (EVE_VLPW + EVE_VBP + EVE_VFP + EVE_VACT) +#define EVE_VFPY (EVE_VFP - 2) /* refer to AN_336 - FT8xx - Selecting an LCD Display */ #define EVE_HCYCLE (EVE_HTOT) /* Th Total length of line (visible and non-visible) (in PCLKs) */ #define EVE_HSIZE (EVE_HACT) /* Length of visible part of line (in PCLKs) - display width */ -#define EVE_HOFFSET (EVE_HFP + EVE_HLPW + EVE_HBP) /* Length of non-visible part of line (in PCLK cycles) */ -#define EVE_HSYNC0 (EVE_HFP) /* Horizontal Front Porch */ -#define EVE_HSYNC1 (EVE_HFP + EVE_HLPW) /* Horizontal Front Porch plus Hsync Pulse width */ +#define EVE_HOFFSET (EVE_HFPX + EVE_HLPW + EVE_HBP) /* Length of non-visible part of line (in PCLK cycles) */ +#define EVE_HSYNC0 (EVE_HFPX) /* Horizontal Front Porch */ +#define EVE_HSYNC1 (EVE_HFPX + EVE_HLPW) /* Horizontal Front Porch plus Hsync Pulse width */ #define EVE_VCYCLE (EVE_VTOT) /* Total number of lines (visible and non-visible) (in lines) */ #define EVE_VSIZE (EVE_VACT) /* Number of visible lines (in lines) - display height */ -#define EVE_VOFFSET (EVE_VFP + EVE_VLPW + EVE_VBP) /* Number of non-visible lines (in lines) */ -#define EVE_VSYNC0 (EVE_VFP) /* Vertical Front Porch */ -#define EVE_VSYNC1 (EVE_VFP + EVE_VLPW) /* Vertical Front Porch plus Vsync Pulse width */ +#define EVE_VOFFSET (EVE_VFPY + EVE_VLPW + EVE_VBP) /* Number of non-visible lines (in lines) */ +#define EVE_VSYNC0 (EVE_VFPY) /* Vertical Front Porch */ +#define EVE_VSYNC1 (EVE_VFPY + EVE_VLPW) /* Vertical Front Porch plus Vsync Pulse width */ #define EVE_PCLKPOL 1 /* PCLK polarity (0 = rising edge, 1 = falling edge) */ #define EVE_SWIZZLE 0 /* Defines the arrangement of the RGB pins */ diff --git a/fw/fe310/eos/eve/eve_platform.h b/fw/fe310/eos/eve/eve_platform.h index 6f34b81..49c87dc 100644 --- a/fw/fe310/eos/eve/eve_platform.h +++ b/fw/fe310/eos/eve/eve_platform.h @@ -6,6 +6,7 @@ #include "../log.h" #include "../soc/timer.h" #include "../soc/spi.h" +#include "../dev/aon.h" #ifdef EOS_DEBUG #define EVE_DEBUG 1 @@ -49,6 +50,10 @@ void eve_free(void *); #define eve_spi_xchg16 eos_spi_xchg16 #define eve_spi_xchg24 eos_spi_xchg24 #define eve_spi_xchg32 eos_spi_xchg32 +#define eve_pwr_get_state eos_aon_load4eve_pwr +#define eve_pwr_set_state eos_aon_save4eve_pwr +#define eve_lcd_get_absent eos_aon_load4eve_lcd +#define eve_lcd_set_absent eos_aon_save4eve_lcd void eve_sleep(uint32_t ms); uint32_t eve_get_tick(void); diff --git a/fw/fe310/eos/eve/eve_touch_engine.c b/fw/fe310/eos/eve/eve_touch_engine.c index 7c5b39f..aadd07d 100644 --- a/fw/fe310/eos/eve/eve_touch_engine.c +++ b/fw/fe310/eos/eve/eve_touch_engine.c @@ -59,6 +59,11 @@ void eve_touch_set_engine(uint16_t engine) { } } +void eve_touch_reset_engine(void) { + eve_write8(REG_CPURESET, 2); /* touch engine reset */ + eve_write8(REG_CPURESET, 0); /* clear reset */ +} + void eve_touch_intr_enable(void) { uint16_t intr_mask; diff --git a/fw/fe310/eos/eve/eve_touch_engine.h b/fw/fe310/eos/eve/eve_touch_engine.h index 8eb7333..a144885 100644 --- a/fw/fe310/eos/eve/eve_touch_engine.h +++ b/fw/fe310/eos/eve/eve_touch_engine.h @@ -9,6 +9,7 @@ void eve_touch_init_engine(uint16_t engine); uint16_t eve_touch_get_engine(void); void eve_touch_set_engine(uint16_t engine); +void eve_touch_reset_engine(void); void eve_touch_intr_enable(void); void eve_touch_intr_disable(void); void eve_touch_start(void); diff --git a/fw/fe310/eos/eve/widget/selectw.c b/fw/fe310/eos/eve/widget/selectw.c index c0e2bfe..ee924c7 100644 --- a/fw/fe310/eos/eve/widget/selectw.c +++ b/fw/fe310/eos/eve/widget/selectw.c @@ -14,44 +14,42 @@ #define DIVC(x,y) ((x) / (y) + ((x) % (y) != 0)) -static int selectw_verify(utf8_t *option, uint16_t option_size, EVEFont *font, size_t *_o_len) { - size_t o_len; - uint16_t o_curr; +static int selectw_verify(utf8_t *option, uint16_t option_size, EVEFont *font, size_t *len) { + size_t _len, curr; int rv; - o_curr = 0; - while (o_curr < option_size) { - rv = eve_font_verify(font, option + o_curr, option_size - o_curr, NULL, &o_len); + curr = 0; + while (curr < option_size) { + rv = eve_font_verify(font, option + curr, option_size - curr, NULL, &_len); if (rv) { - if (_o_len) *_o_len = o_curr; + if (len) *len = curr; return rv; } - o_curr += o_len + 1; - if (o_len == 0) { - if (_o_len) *_o_len = o_curr; + curr += _len + 1; + if (_len == 0) { + if (len) *len = curr; return EVE_OK; } } - if (_o_len) *_o_len = o_curr; + if (len) *len = curr; return EVE_OK; } static int selectw_count(EVESelectWidget *widget) { - int o_len; - int o_curr; + size_t len, curr; int i; - o_curr = 0; + curr = 0; i = 0; do { - o_len = strnlen(widget->option + o_curr, widget->option_size - o_curr); - if (o_len == widget->option_size - o_curr) return i; - if (o_len) { - o_curr += o_len + 1; + len = strnlen(widget->option + curr, widget->option_size - curr); + if (len == widget->option_size - curr) return i; + if (len) { + curr += len + 1; i++; } - } while (o_len); + } while (len); return i; } @@ -124,11 +122,10 @@ void eve_selectw_destroy(EVEWidget *_widget) { uint8_t eve_selectw_draw(EVEWidget *_widget, uint8_t tag0) { EVESelectWidget *widget = (EVESelectWidget *)_widget; EVEPage *page = _widget->page; - int o_len; - int o_curr; - int i, s; + size_t len, curr; int16_t x1, x2, y1, y2; uint16_t new_h; + int i, s; int line0, lineN; @@ -143,11 +140,11 @@ uint8_t eve_selectw_draw(EVEWidget *_widget, uint8_t tag0) { _widget->tagN = tag0; widget->line0 = line0; - o_curr = 0; + curr = 0; i = 0; do { - o_len = strnlen(widget->option + o_curr, widget->option_size - o_curr); - if (!o_len || (o_len == widget->option_size - o_curr)) break; + len = strnlen(widget->option + curr, widget->option_size - curr); + if (!len || (len == widget->option_size - curr)) break; if ((i >= line0) && (i < lineN)) { if (_widget->tagN != EVE_NOTAG) { eve_cmd_dl(TAG(_widget->tagN)); @@ -170,13 +167,13 @@ uint8_t eve_selectw_draw(EVEWidget *_widget, uint8_t tag0) { } eve_cmd_dl(END()); if (s) eve_cmd_dl(COLOR_RGBC(page->v.color_bg)); - eve_cmd(CMD_TEXT, "hhhhs", x1, y1, widget->font->id, 0, widget->option + o_curr); + eve_cmd(CMD_TEXT, "hhhhs", x1, y1, widget->font->id, 0, widget->option + curr); if (s) eve_cmd_dl(COLOR_RGBC(page->v.color_fg)); } - o_curr += o_len + 1; + curr += len + 1; i++; - } while (o_len); + } while (len); return _widget->tagN; } @@ -216,19 +213,18 @@ int eve_selectw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) { } utf8_t *eve_selectw_option(EVESelectWidget *widget, int idx) { - int o_len; - int o_curr; + size_t len, curr; int i; - o_curr = 0; + curr = 0; i = 0; do { - o_len = strnlen(widget->option + o_curr, widget->option_size - o_curr); - if (o_len == widget->option_size - o_curr) return NULL; - if (o_len && (i == idx)) return widget->option + o_curr; - o_curr += o_len + 1; + len = strnlen(widget->option + curr, widget->option_size - curr); + if (len == widget->option_size - curr) return NULL; + if (len && (i == idx)) return widget->option + curr; + curr += len + 1; i++; - } while (o_len); + } while (len); return NULL; } @@ -239,26 +235,25 @@ utf8_t *eve_selectw_option_selected(EVESelectWidget *widget) { } int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option) { - int o_len; - int o_curr; + size_t len, curr; int rv, i; rv = eve_font_verify(widget->font, option, 0, NULL, NULL); if (rv) return rv; - o_curr = 0; + curr = 0; i = 0; do { - o_len = strnlen(widget->option + o_curr, widget->option_size - o_curr); - if (o_len == widget->option_size - o_curr) return EVE_ERR_FULL; - if (o_len) { - o_curr += o_len + 1; + len = strnlen(widget->option + curr, widget->option_size - curr); + if (len == widget->option_size - curr) return EVE_ERR_FULL; + if (len) { + curr += len + 1; i++; } - } while (o_len); + } while (len); - if (o_curr + strlen(option) + 1 > widget->option_size) return EVE_ERR_FULL; - strcpy(widget->option + o_curr, option); + if (curr + strlen(option) + 1 > widget->option_size) return EVE_ERR_FULL; + strcpy(widget->option + curr, option); widget->option_count = i + 1; selectw_update_sz(widget, 1); @@ -266,16 +261,16 @@ int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option) { return EVE_OK; } -int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size) { +int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t len) { int rv, i; - if (option_size > widget->option_size) return EVE_ERR_FULL; + if (len > widget->option_size) return EVE_ERR_FULL; - rv = selectw_verify(option, option_size, widget->font, NULL); + rv = selectw_verify(option, len, widget->font, NULL); if (rv) return rv; - memcpy(widget->option, option, option_size); - memset(widget->option + option_size, 0, widget->option_size - option_size); + memcpy(widget->option, option, len); + memset(widget->option + len, 0, widget->option_size - len); widget->option_count = selectw_count(widget); selectw_update_sz(widget, 1); @@ -283,22 +278,22 @@ int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t opt return EVE_OK; } -void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size) { +void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t len) { size_t good_l, bad_l; int rv; do { - rv = selectw_verify(option, option_size, widget->font, &good_l); + rv = selectw_verify(option, len, widget->font, &good_l); if (rv == EVE_OK) return; option += good_l; - option_size -= good_l; + len -= good_l; - bad_l = strnlen(option, option_size); - if (bad_l != option_size) { + bad_l = strnlen(option, len); + if (bad_l != len) { bad_l++; } - memmove(option, option + bad_l, option_size - bad_l); - memset(option + option_size - bad_l, 0, bad_l); - } while (bad_l != option_size); + memmove(option, option + bad_l, len - bad_l); + memset(option + len - bad_l, 0, bad_l); + } while (bad_l != len); } diff --git a/fw/fe310/eos/eve/widget/selectw.h b/fw/fe310/eos/eve/widget/selectw.h index 185d787..577fb86 100644 --- a/fw/fe310/eos/eve/widget/selectw.h +++ b/fw/fe310/eos/eve/widget/selectw.h @@ -30,5 +30,5 @@ int eve_selectw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt); utf8_t *eve_selectw_option(EVESelectWidget *widget, int idx); utf8_t *eve_selectw_option_selected(EVESelectWidget *widget); int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option); -int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size); -void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size); +int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t len); +void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t len); |
