#include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" #include "init.h" #include "pool.h" /* Power management for the bitsy */ int powerup; enum { pmcr_sf = 0, pcfr_opde = 0, pcfr_fp = 1, pcfr_fs = 2, pcfr_fo = 3, }; static void onoffintr(Ureg*, void *x) { /* On/off button interrupt */ int i; if (powerup) { /* Power back up */ powerup = 0; exit(0); } else { /* Power down */ /* debounce, 50 ms*/ for (i = 0; i < 50; i++) { delay(1); if ((gpioregs->level & GPIO_PWR_ON_i) == 0) return; /* bounced */ } powerup = 1; irpower(0); audiopower(0); lcdpower(0); rs232power(0); sa1100_power_off(); } } static void sa1100_power_off(void) { delay(100); splhi(); /* disable internal oscillator, float CS lines */ powerregs->pcfr = 1<ppcr = 0; /* set all GPIOs to input mode */ gpioregs->direction = 0; /* enter sleep mode */ powerregs->pmcr = 1<