OSDN Git Service

[ADC][Battery] Fix stability, but still not collect.
[openi2cradio/OpenI2CRadio.git] / ui_updown.c
index 8750139..7efa6f4 100644 (file)
 #include "eeprom.h"
 #include "ioports.h"
 #include "menu.h"
+#include "menu_memoryfreq.h"
 #include "power.h"
 #include "adc_int.h"
+#include "backlight.h"
 
-void setfreq_updown(unsigned char ctlword)
+static void setfreq_updown_amsub(void)
 {
-    unsigned int freq;
-    if((ctlword != charcode_e) && (ctlword >= charcode_1)
-            && (ctlword <= charcode_f)) {
-            backlight_counter = backlight_long;
-            lcd_setbacklight(0xff, backlight_level); // Turn ON
-    } else if(ctlword == charcode_e){
-        if(backlight_counter != 0){
-            backlight_counter = 0;
-        } else {
-            backlight_counter = backlight_long;
+    if(setup.amband >= AKC6955_BAND_AMEND) {
+        setup.amband = 0;
+    }
+    akc6955_set_amband(setup.amband);
+    setup.amfreq = setup.amfreq_bank[setup.amband];
+//    idle_time_62_5ms(); // 62.5ms
+    ClrWdt();
+    akc6955_mode3k(setup.am_mode3k);
+    akc6955_set_freq(setup.amfreq);
+}
+
+static void setfreq_updown_fmsub(void)
+{
+    if(setup.fmband >= AKC6955_BAND_FMEND) {
+        setup.fmband = 0;
+    }
+    akc6955_set_fmband(setup.fmband);
+    setup.fmfreq = setup.fmfreq_bank[setup.fmband];
+//    idle_time_62_5ms(); // 62.5ms
+    ClrWdt();
+    akc6955_set_freq(setup.fmfreq);
+}
+
+static void setband_updown(unsigned char updown)
+{
+    unsigned char band;
+    if(setup.fm == 0){  // MW
+        band = setup.amband + 1;
+        if(setup.amband == AKC6955_BAND_AMUSER){
+            userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
+        }
+        setup.amfreq_bank[setup.amband] = setup.amfreq;
+        if(updown == 0) { // down
+            if(band <= 1) {
+                band = AKC6955_BAND_AMEND + 1;
+            }
+            band -= 2;
         }
-        return;
+        setup.amband = band;
+        switch(setup.amband) {
+        case AKC6955_BAND_LW:
+        case AKC6955_BAND_MW2:
+          setup.am_mode3k = 0xff;
+          break;
+        case AKC6955_BAND_AMUSER:
+           call_userband(setup.am_userbandnum);
+          break;
+        default:
+          setup.am_mode3k = 0x00;
+          break;
+       }
+        setfreq_updown_amsub();
+    } else { // FM
+        if(setup.fmband == AKC6955_BAND_FMUSER){
+            userband.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
+        }
+        band = setup.fmband + 1;
+        setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
+        if(updown == 0) { // down
+            if(band <= 1) {
+                band = AKC6955_BAND_FMEND + 1;
+            }
+            band -= 2;
+        }
+        setup.fmband = band;
+        if(setup.fmband == AKC6955_BAND_FMUSER){
+   //         setup.fmfreq = fm_usrbands[fm_userbandnum].freq;
+            call_userband(setup.fm_userbandnum);
+        }
+        setfreq_updown_fmsub();
     }
+}
+
+void setfreq_updown(unsigned char ctlword)
+{
+    unsigned int freq;
+
+    backlight_reset(ctlword);
 
     update_status();
     switch(ctlword){
-        case charcode_8: // Change band
-            if(fm == 0){
-                amfreq_bank[amband] = amfreq;
-                if(amband >= AKC6955_BAND_MW4) {
-                   amband = 0;
-                } else {
-                    amband++;
-                }
-                akc6955_set_amband(amband);
-                freq = amfreq_bank[amband];
-            } else {
-              fmfreq_bank[fmband] = fmfreq;
-              if(fmband >= AKC6955_BAND_FMUSER) {
-                  fmband = 0;
-              } else {
-                  fmband++;
-              }
-              freq = fmfreq_bank[fmband];
-              akc6955_set_fmband(fmband);
-            }
-            idle_time_62_5ms(); // 62.5ms
-            ClrWdt();
-            akc6955_set_freq(freq);
-            break;
-        case charcode_2: // Change band
-            if(fm == 0){
-                amfreq_bank[amband] = amfreq;
-                if(amband == 0 ) {
-                   amband = AKC6955_BAND_MW4;
-                } else {
-                    amband--;
-                }
-                akc6955_set_amband(amband);
-                freq = amfreq_bank[amband];
-            } else {
-              fmfreq_bank[fmband] = fmfreq;
-              if(fmband == 0) {
-                  fmband = AKC6955_BAND_FMUSER;
-              } else {
-                  fmband--;
-              }
-              freq = fmfreq_bank[fmband];
-              akc6955_set_fmband(fmband);
-            }
-            idle_time_62_5ms(); // 62.5ms
-            ClrWdt();
-            akc6955_set_freq(freq);
+        case charcode_8: // Up band
+            setband_updown(0xff);
             break;
-        case charcode_4: // Down Freq;
-            freq = 9; // 27KHz@3K/9KStep.
-            if(fm != 0) {
-                freq = 10; // 250KHz
-            } else if(am_mode3k == 0){
-                freq = 6; // 30KHz
-            }
-            akc6955_down_freq(freq);
+        case charcode_2: // Down band
+            setband_updown(0x00);
             break;
-        case charcode_6: // Down Freq;
+        case charcode_6: // Up Middle;
+        case charcode_4: // Down Middle;
             freq = 9; // 27KHz@3K/9KStep.
-            if(fm != 0) {
-                freq = 10; // 250KHz
-            } else if(am_mode3k == 0){
+            if(setup.fm != 0) {
+              switch(setup.fm_tunepitch & 3) {
+               case 3:
+                 freq = 20; // 500KHz excepts TV1/TV2.
+                 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
+                      freq = 10; // 250KHz
+                 }
+                 break;
+               default:
+                 freq = 10; // 250KHz
+                 break;
+              }
+            } else if(setup.am_mode3k == 0){
                 freq = 6; // 30KHz
             }
-            akc6955_up_freq(freq); // 225 or 27 or 45KHz
-            break;
-        case charcode_9: // Down Fast;
-            freq = 33; // 99KHz@3K/9KStep.
-            if(fm != 0){
-                freq = 40; // 1MHz
-            } else if(am_mode3k != 0){
-                freq = 20; // 100KHz
-            }
-            akc6955_up_freq(freq); // 825 or 90 or 165KHz
+            if(ctlword == charcode_6) {
+              akc6955_up_freq(freq); // 225 or 27 or 45KHz
+           } else {
+              akc6955_down_freq(freq); // 225 or 27 or 45KHz
+           }
             break;
+        case charcode_9: // Up Fast;
         case charcode_7: // Down Fast;
             freq = 33; // 99KHz@3K/9KStep.
-            if(fm != 0){
-                freq = 40; // 1MHz
-            } else if(am_mode3k != 0){
+            if(setup.fm != 0){
+              switch(setup.fm_tunepitch & 3) {
+               case 3:
+                 freq = 80; // 2MHz excepts TV1/TV2.
+                 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
+                      freq = 40; // 1MHz
+                 }
+                 break;
+               default:
+                 freq = 40; // 1MHz
+                 break;
+              }
+            } else if(setup.am_mode3k == 0){
                 freq = 20; // 100KHz
             }
-            akc6955_down_freq(freq); // 825 or 90 or 165KHz
-            break;
-        case charcode_1: // Down Slow;
-            if(fm != 0){
-                freq = 4; // DOWN 100KHz
-            } else {
-                freq = 1; // 5KHz or 3KHz
-                if(amband == AKC6955_BAND_MW2) {
-                    freq = 3; // 9KHz
-                } else if(amband == AKC6955_BAND_MW3) {
-                    freq = 2; // 10KHz
-                }
-            }
-            akc6955_down_freq(freq);
+            if(ctlword == charcode_9) {
+              akc6955_up_freq(freq); // 825 or 90 or 165KHz
+           } else {
+              akc6955_down_freq(freq); // 825 or 90 or 165KHz
+           }
             break;
         case charcode_3: // Up Slow;
-            if(fm != 0){
-                freq = 4; // DOWN 100KHz
+        case charcode_1: // Down Slow;
+            if(setup.fm != 0){
+              switch(setup.fm_tunepitch & 3) {
+               case 0:
+                 freq = 1; // 25KHz
+                 break;
+               case 1:
+                 freq = 2; // 50KHz
+                 break;
+               case 2:
+                 freq = 4; // 100KHz
+                 break;
+               default:
+                 freq = 8; // 200KHz excepts TV1/TV2.
+                 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
+                      freq = 4; // 100KHz
+                 }
+                 break;
+              }
             } else {
                 freq = 1; // 5KHz or 3KHz
-                if(amband == AKC6955_BAND_MW2) {
+                if(setup.amband == AKC6955_BAND_MW2) {
                     freq = 3; // 9KHz
-                } else if(amband == AKC6955_BAND_MW3) {
+                } else if((setup.amband == AKC6955_BAND_MW3) || (setup.amband == AKC6955_BAND_MW4)) {
                     freq = 2; // 10KHz
                 }
-            }
-            akc6955_up_freq(freq);
+           }
+            if(ctlword == charcode_1) {
+              akc6955_down_freq(freq);
+           } else {
+              akc6955_up_freq(freq);
+           }
             break;
         case charcode_0: // Step
-            threshold_width++;
-            set_thresh_width(threshold_width);
+            setup.threshold_width++;
+            akc6955_set_thresh_width(setup.threshold_width);
+            akc6955_do_tune();
             break;
         case charcode_a: // Toggle FM
             toggle_amfm();
             break;
         case charcode_b:
-            set_volume();
+//            set_volume();
+             on_updown_userfreq();
             break;
         case charcode_c:
             // Scan
@@ -203,18 +250,9 @@ void setfreq_updown(unsigned char ctlword)
         case charcode_f:
             updown_help();
             _CLS();
-            _LOCATE(0,0);
+//            _LOCATE(0,0);
             break;
         default:
             break;
     }
-    if(fm == 0){
-        akc6955_get_amband(amband);
-        amfreq = akc6955_get_freq();
-        amfreq_bank[amband] = amfreq;
-    } else {
-        akc6955_get_fmband(fmband);
-        fmfreq = akc6955_get_freq();
-        fmfreq_bank[fmband] = fmfreq;
-    }
 }