summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/dev/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/dev/app.c')
-rw-r--r--fw/fe310/eos/dev/app.c94
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;
+}