diff options
Diffstat (limited to 'fw/fe310/eos/dev/app.c')
| -rw-r--r-- | fw/fe310/eos/dev/app.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/fw/fe310/eos/dev/app.c b/fw/fe310/eos/dev/app.c index ce2cf05..4c6b7cd 100644 --- a/fw/fe310/eos/dev/app.c +++ b/fw/fe310/eos/dev/app.c @@ -4,7 +4,18 @@ #include "eos.h" #include "log.h" +#include "eve/eve.h" +#include "eve/eve_touch_engine.h" + +#include "egpio.h" +#include "egpio_priv.h" +#include "eve.h" + +#include "aon.h" +#include "ctp.h" +#include "lcd.h" #include "hpamp.h" + #include "app.h" void eos_app_hp_change(int hp_det) { @@ -18,3 +29,86 @@ void eos_app_hp_change(int hp_det) { } } } + +int eos_app_give(void) { + int rv, _rv; + + if (!eos_egpio_get_val(EGPIO_PIN_DISP_SEL)) return EOS_ERR; + + eos_aon_save4app(eos_egpio_get_val(EGPIO_PIN_CTP_SEL)); + + rv = eos_egpio_intr_disable(); + if (rv) return rv; + + rv = eve_select(); + if (rv) goto app_give_err_select; + + _eos_eve_sleep(); + + rv = eos_lcd_give(); + if (rv) goto app_give_err; + + rv = eos_egpio_set_val(EGPIO_PIN_CTP_SEL, 0); + if (rv) goto app_give_err; + + rv = eos_egpio_set_val(EGPIO_PIN_DISP_SEL, 0); + if (rv) goto app_give_err; + + eve_pwr_sleep(); + +app_give_err: + if (rv) _eos_eve_wake(); + eve_deselect(); + +app_give_err_select: + _rv = eos_egpio_intr_set(); + if (!rv && _rv) return _rv; + + return rv; +} + +int eos_app_take(void) { + int rv, _rv, ctp_sel; + + if (eos_egpio_get_val(EGPIO_PIN_DISP_SEL)) return EOS_ERR; + + ctp_sel = eos_aon_load4app(); + + rv = eos_egpio_intr_disable(); + if (rv) return rv; + + rv = eve_select(); + if (rv) goto app_take_err_select; + + eve_pwr_wake(); + + rv = eos_egpio_set_val(EGPIO_PIN_DISP_SEL, 1); + if (rv) goto app_take_err; + + rv = eos_egpio_set_val(EGPIO_PIN_CTP_SEL, ctp_sel); + if (rv) goto app_take_err; + + if (!ctp_sel) { + eve_touch_reset_engine(); + } + + rv = eos_lcd_take(); + if (rv) goto app_take_err; + + _eos_eve_wake(); + +app_take_err: + if (rv) eve_pwr_sleep(); + eve_deselect(); + + if (!rv && ctp_sel) { + _rv = _eos_ctp_reset(); + if (_rv) rv = _rv; + } + +app_take_err_select: + _rv = eos_egpio_intr_set(); + if (!rv && _rv) return _rv; + + return rv; +} |
