OSDN Git Service

[Power] Improve more efficient power.
[openi2cradio/OpenI2CRadio.git] / power.c
diff --git a/power.c b/power.c
index 377fe01..bd98772 100644 (file)
--- a/power.c
+++ b/power.c
@@ -58,13 +58,19 @@ unsigned char chk_reset(void)
 #endif
     rcon.byte = RCON;
     stkptr.byte = STKPTR;
-    RCON |= 0b01010011; // SBOREN,*RI,*POR,*BOR = '1'.
-    if((rcon.b.POR ==0) && (rcon.b.BOR == 0)) {
+    if(rcon.b.POR ==0) {
+        RCONbits.POR = 1;
         return RESET_POR;
     }
 
-    if(rcon.b.BOR == 0) return RESET_BOR;
-    if(rcon.b.RI == 0) return RESET_SOFTWARE;
+    if(rcon.b.BOR == 0) {
+        RCONbits.BOR = 1;
+        return RESET_BOR;
+    }
+    if(rcon.b.RI == 0) {
+        RCONbits.RI = 1;
+        return RESET_SOFTWARE;
+    }
     if(rcon.b.TO == 0) return RESET_WDT;
     if(rcon.b.PD == 0) return RESET_POWERDOWN;
     if(stkptr.b.STKOVF) return RESET_STACK_FULL;
@@ -85,13 +91,13 @@ void power_on_inthook(void)
 void power_on(unsigned char f)
 {
     if(f == 0x00){
-        set_examp_mute(1);
+        set_examp_mute(0xff);
         idle_time_ms(200);
-        set_radiopower(0);
+        set_radiopower(0x00);
     } else {
-        set_examp_mute(0);
+        set_examp_mute(0x00);
         idle_time_ms(100);
-        set_radiopower(1);
+        set_radiopower(0xff);
     }
 }
 
@@ -117,12 +123,14 @@ unsigned char chk_powerbutton(void)
 {
     unsigned char count = 0;
     char i;
-    for(i = 0; i < 24; i++) {  // 10*24=240ms.
+
+    TRISBbits.RB4 = 1; // Set Input
+    for(i = 0; i < 24; i++) {  // 2*24=48ms.
         if(PORTBbits.RB4) count++;
         _POWER_DELAY();
         ClrWdt();
     }
-    if(count <= 12) { // 120ms
+    if(count <= 12) { // 24ms
         return 0xff; // Pressed
     }
     return 0; // Not pressed
@@ -160,7 +168,9 @@ void power_off(unsigned char save)
         // Wake up
         if(INTCONbits.RBIF) {
                 INTCONbits.RBIF = 0;
+                idle_init();
                 sts = chk_powerbutton();
+          //      sts = 0xff;
         }
     } while(sts == 0);