OSDN Git Service

[SCHEMATIC] Modify SW/MW/LW Preamp, insert galbanic-isolator replace of common-mode...
[openi2cradio/OpenI2CRadio.git] / menu.c
diff --git a/menu.c b/menu.c
index 577f19c..da99968 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -82,9 +82,9 @@ void setfreq_direct(void)
 {
     unsigned long val;
     _CLS();
-    _LOCATE(0,0);
+//    _LOCATE(0,0);
     printstr("Set Freq:");
-    _LOCATE(0,1);
+    _LOCATE_0_1();
     if(setup.fm != 0){
         // FM
         printstr("FM ");
@@ -108,45 +108,58 @@ void setband_direct(void)
     unsigned long band;
     unsigned char band2;
     unsigned int freq;
+    unsigned char mode3k;
+
     _CLS();
-    _LOCATE(0,0);
+//    _LOCATE(0,0);
     if(setup.fm != 0){
         printstr("Set Band:FM#");
         band2 = setup.fmband & 7;
+        if(band2 == AKC6955_BAND_FMUSER) {
+            userband.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
+        }
         setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
         band2 = pollkey_numeric(band2);
-        if(band2 < 8) {
-            setup.fmband = band2 & 7;
-            setup.fmfreq = setup.fmfreq_bank[setup.fmband];
-            akc6955_set_fmband(setup.fmband);
-            freq = setup.fmfreq;
+        band2 &= 7;
+        if(band2 == AKC6955_BAND_FMUSER) {
+            call_userband(setup.fm_userbandnum);
+            freq = userband.fm_usrbands[setup.fm_userbandnum].freq;
+        } else {
+            freq = setup.fmfreq_bank[band2];
         }
-        akc6955_set_fmband(setup.fmband);
-        freq = setup.fmfreq;
+        setup.fmband = band2;
+        akc6955_set_fmband(band2);
+        setup.fmfreq = freq;
     } else {
         printstr("Set Band:AM#");
         band = setup.amband & 0x1f;
-        setup.amfreq_bank[setup.amband] = setup.amfreq;
+        setup.amfreq_bank[band] = setup.amfreq;
+        if(band == AKC6955_BAND_AMUSER) {
+            userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
+        }
         band = read_numeric(band, 2, 7, 1);
         if((band & 0x80000000) != 0) return;
-        setup.amband = band & 0x1f;
-        setup.amfreq = setup.amfreq_bank[setup.amband];
+        band &= 0x1f;
+        setup.amband = band;
+        freq = setup.amfreq_bank[setup.amband];
         switch(band) {
         case AKC6955_BAND_LW:
         case AKC6955_BAND_MW2:
-          setup.am_mode3k = 0xff;
-          break;
-        case AKC6955_BAND_MW1:
-        case AKC6955_BAND_MW3:
-        case AKC6955_BAND_MW4:
-          setup.am_mode3k = 0x00;
+          mode3k = 0xff;
           break;
+         case AKC6955_BAND_AMUSER:
+            call_userband(setup.am_userbandnum);
+            mode3k = userband.am_usrbands[setup.am_userbandnum].mode3k;
+            freq = userband.am_usrbands[setup.am_userbandnum].freq;
+            break;
         default:
+            mode3k = 0x00;
           break;
        }
-
-        akc6955_set_amband(setup.amband);
-        freq = setup.amfreq;
+        akc6955_mode3k(mode3k);
+        akc6955_set_amband(band);
+        setup.amfreq = freq;
+        setup.am_mode3k = mode3k;
     }
     akc6955_do_tune();
     akc6955_set_freq(freq);
@@ -161,6 +174,24 @@ void menu_poweroff(void)
     }
 }
 
+void menu_setfmresolution(void)
+{
+   unsigned char c;
+    if(setup.fm != 0){
+       _CLS();
+//       _LOCATE(0,0);
+        c = akc6955_get_scanrate_fm();
+        printstr("FM pitch:");
+        _PUTCHAR('0' + c);
+        printstr("->");
+        c = pollkey_numeric(c);
+        setup.fm_tunepitch = c & 3;
+        akc6955_set_scanrate_fm(c);
+        _CLS();
+//        _LOCATE(0,0);
+    }
+}
+
 void setup_akc6955(void)
 {
     akc6955_writecmd(AKC6955_POWER, 0xc0);  // You musto *not* mute, set b2 to '0".
@@ -186,6 +217,7 @@ void setup_akc6955(void)
     akc6955_set_thresh_fmstereo(setup.threshold_fmstereo);
     akc6955_setvolumemode(0);
     akc6955_set_lowboost(setup.lowboost);
+    akc6955_set_scanrate_fm(setup.fm_tunepitch);
     set_stereomode();
 }
 
@@ -201,46 +233,60 @@ void main_menu(void)
 
     printhelp_2lines("Menu:F=HELP", "B=CANCEL");
     c = pollkey_single(); // 1012ms
-        if(c == charcode_1){
+    switch(c) {
+        case charcode_1:
             // Band
             setband_direct();
-        } else if(c == charcode_3){
+            break;
+        case charcode_3:
             // Band
             setfreq_direct();
-        }else if(c == charcode_4){
+            break;
+        case charcode_4:
             on_call_userfreq();
+            break;
             // Scan
-        }else if(c == charcode_5){
-         //   scan_start();
-            // Scan
-        }else if(c == charcode_6){
+        case charcode_5:
+            break;
+        case charcode_6:
             on_set_userfreq();
+            break;
             // Scan
-        } else if(c == charcode_7){
+        case charcode_7:
             menu_poweroff();
-        } else if(c == charcode_8){
+            break;
+        case charcode_8:
             // Set volume
             set_volume();
-        } else if(c == charcode_9){
-            unsigned int freq;
+            break;
+        case charcode_9:
             freq = akc6955_get_freq();
             akc6955_set_freq(freq);
-        } else if(c == charcode_0){
+            break;
+        case charcode_0:
             // Setup Menu
             setup_menu();
-        } else if(c == charcode_a){
+            break;
+        case charcode_a:
             toggle_amfm();
-        } else if(c == charcode_c){
-            // Set userband
+            break;
+        case charcode_c:
             set_userband();
-        } else if(c == charcode_d){
-            // Call userband
+            break;
+        case charcode_d:
             input_userband();
-        } else if (c == charcode_f){
+            break;
+        case charcode_e:
+            menu_setfmresolution();
+            break;
+        case charcode_f:
             mainmenu_help();
             // HELP
+            break;
+        default:
+            break;
         }
        _CLS();
-       _LOCATE(0,0);
+       _LOCATE_0_0();
 }