4 * Copyright (C) 2013-06-10 K.Ohta <whatisthis.sowhat ai gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2,
10 * or (at your option) any later version.
11 * This library / program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this library; see the file COPYING. If not, write to the
18 * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 * As a special exception, if you link this(includeed from sdcc) library
22 * with other files, some of which are compiled with SDCC,
23 * to produce an executable, this library does not by itself cause
24 * the resulting executable to be covered by the GNU General Public License.
25 * This exception does not however invalidate any other reasons why
26 * the executable file might be covered by the GNU General Public License.
29 #include "commondef.h"
30 #include "lcd_acm1602.h"
35 * Detect reset condition.
37 unsigned char chk_reset(void)
61 RCON |= 0b01010011; // SBOREN,*RI,*POR,*BOR = '1'.
62 if((rcon.b.POR ==0) && (rcon.b.BOR == 0)) {
66 if(rcon.b.BOR == 0) return RESET_BOR;
67 if(rcon.b.RI == 0) return RESET_SOFTWARE;
68 if(rcon.b.TO == 0) return RESET_WDT;
69 if(rcon.b.PD == 0) return RESET_POWERDOWN;
70 if(stkptr.b.STKOVF) return RESET_STACK_FULL;
71 if(stkptr.b.STKUNF) return RESET_STACK_UNDER;
75 void power_on_inthook(void)
79 // IOCBbits.IOCB4 = 1;
86 void power_on(unsigned char f)
99 void rfamp_power(unsigned char b)
117 unsigned char chk_powerbutton(void)
119 unsigned char count = 0;
121 for(i = 0; i < 24; i++) { // 10*24=240ms.
122 if(PORTBbits.RB4) count++;
126 if(count <= 12) { // 120ms
127 return 0xff; // Pressed
129 return 0; // Not pressed
132 void shutdown(unsigned char save)
136 // printstr("Bye...");
137 // idle_time_ms(1500); // 1.5Sec
138 rfamp_power(RFAMP_OFF);
140 acm1602_suspend(LCD_I2CADDR);
144 void power_off(unsigned char save)
148 if(save != 0) save_eeprom();
150 lcd_setbacklight(0, 0);
156 WDTCONbits.SWDTEN = 0; // Lame WDT OFF.
160 IOCBbits.IOCB4 = 1; // IOCB4 ONLY.
161 OSCCONbits.IDLEN = 0; // Not Idle.
162 INTCON2bits.RBIP = 1; // Priority = HIGH;
169 if(INTCONbits.RBIF) {
170 sts = chk_powerbutton();
176 OSCCONbits.IDLEN = 1; // Not Idle.
180 WDTCONbits.SWDTEN = 1; //WDT ON.
182 // Button pressed, software reset.