OSDN Git Service

[Schmetic][MWAMP] Fix typo.
[openi2cradio/OpenI2CRadio.git] / menu.c
diff --git a/menu.c b/menu.c
index 74f038e..da99968 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -78,155 +78,26 @@ void set_stereo(void)
     set_stereomode();
 }
 
-
-void set_volume(void)
-{
-    unsigned char c;
-    unsigned char d;
-    unsigned char fact;
-    unsigned char dispf = 0xff;
-
-    _CLS();
-    do {
-        if(dispf != 0) {
-            _LOCATE(0,0);
-             d = akc6955_getvolumemode();
-            if(d == 0){
-                 _PUTCHAR('D');
-            } else {
-                 _PUTCHAR('K');
-            }
-            printstr(" Vol:");
-            print_numeric_nosupress(setup.volume, 2);
-            printstr("  F:Exit");
-            _LOCATE(0,1);
-            printstr("Pre:");
-            _PUTCHAR('0' + (setup.prevolume & 3));
-            _LOCATE(16-4, 1);
-            if(setup.lowboost == 0x00){
-                 printstr("   ");
-            } else {
-                 printstr("LOW");
-         }
-            _HOME();
-        }
-     c = pollkey_single_timeout(41, 1); // 943ms
-     backlight_reset(c);
-     dispf = backlight_dec(dispf);
-
-     switch(c) {
-             case charcode_6:
-                 setup.volume++;
-                 if(setup.volume > 63) setup.volume = 63;
-                 akc6955_setvolume(setup.volume);
-                 break;
-             case charcode_4:
-                 setup.volume--;
-                 if(setup.volume < 23) setup.volume = 23;
-                 akc6955_setvolume(setup.volume);
-                 break;
-             case charcode_f:
-                 _CLS();
-                 return;
-             case charcode_a:
-                 fact = 0xff;
-                 if(d != 0){
-                     fact = 0x00;
-                 }
-                 akc6955_setvolumemode(fact);
-                 akc6955_setvolume(setup.volume);
-                 break;
-             case charcode_b:
-                 setup.prevolume++;
-                 if(setup.prevolume > 3) setup.prevolume = 0;
-                 akc6955_set_prevolume(setup.prevolume);
-                 akc6955_setvolume(setup.volume);
-                 break;
-             case charcode_d:
-                 fact = 0x00;
-                 if(setup.lowboost == 0x00){
-                     fact = 0xff;
-                 }
-                 setup.lowboost = fact;
-                 akc6955_set_lowboost(setup.lowboost);
-                 akc6955_setvolume(setup.volume);
-                 break;
-             default:
-                 break;
-         }
-         if(setup.volume < 24){
-             set_examp_mute(1);
-        } else {
-             set_examp_mute(0);
-        }
-        idle_time_ms(9); // Pad.
-    } while(1);
-}
-
-
-void scan_start(void)
-{
-    unsigned char c;
-    unsigned char cc;
-    unsigned char n;
-    _CLS();
-    scanflag = 0;
-    do {
-        do {
-             c = pollkey_single_timeout(20, 0) ; // 23*20 = 460ms
-            update_status();
-            cc = ' ';
-            if((akc6955_chk_donescan() == 0) && (scanflag != 0)){
-                cc = '>';
-            }
-            _PUTCHAR(cc);
-            printstr("Scan A/4/6/F");
-            print_freq(1);
-            _HOME();
-        } while(c == charcode_null);
-      // New Scan
-       switch(c){
-           case charcode_6:
-               scanflag = 0xff;
-               akc6955_do_scan(0xff);
-               break;
-           case charcode_4:
-               scanflag = 0xff;
-               akc6955_do_scan(0);
-               break;
-           case charcode_a:
-               akc6955_abort_scan();
-               goto _l0;
-               break;
-           case charcode_f:
-               goto _l0;
-               break;
-           default:
-               break;
-       }
-    } while(1);
-_l0:
-    _CLS();
-}
-
 void setfreq_direct(void)
 {
-    unsigned int val;
+    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 ");
         val = setup.fmfreq;
         val = read_numeric(val, 5, 7, 1);
+        if((val & 0x80000000) != 0) return;
         setup.fmfreq = val;
     } else {
         // FM
         printstr("AM ");
         val = setup.amfreq;
         val = read_numeric(val, 5, 7, 1);
+        if((val & 0x80000000) != 0) return;
         setup.amfreq = val;
     }
     akc6955_set_freq(val);
@@ -234,215 +105,90 @@ void setfreq_direct(void)
 
 void setband_direct(void)
 {
-    unsigned int band;
+    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#");
-        band = setup.fmband & 7;
+        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;
-        setup.fmband = read_numeric(band, 2, 7, 1);
-        setup.fmfreq = setup.fmfreq_bank[setup.fmband];
-        akc6955_set_fmband(setup.fmband);
-        freq = setup.fmfreq;
+        band2 = pollkey_numeric(band2);
+        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];
+        }
+        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.amband = read_numeric(band, 2, 7, 1);
-        setup.amfreq = setup.amfreq_bank[setup.amband];
+        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;
+        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);
 }
 
-void call_userband(unsigned char num)
+void menu_poweroff(void)
 {
-    unsigned int freq;
-    unsigned int ch;
-    unsigned char start;
-    unsigned char end;
-    unsigned char mode3k;
-    unsigned char freq2;
-    _userband_t *p;
-
-    if(num >= USER_BAND_NUM) return;
-    
-    p = &(setup.am_usrbands[num]);
-    if(setup.fm != 0){
-        p = &(setup.fm_usrbands[num]);
-    }
-    freq = p->freq;
-    start = p->start;
-    end = p->stop;
-    mode3k = p->mode3k;
-    if(setup.fm != 0) {
-        ch = ((freq - 3000) / 5) * 2;
-        setup.fmband = AKC6955_BAND_FMUSER;
-    } else {
-        unsigned int q = 5;
-        if(mode3k != 0) q = 3;
-        ch = freq / q;
-        setup.amband = AKC6955_BAND_AMUSER;
-    }
-
-    if(start > end) {
-        unsigned char tmp;
-        tmp = start;
-        start = end;
-        end = tmp;
-    }
-    
-    freq2 = ch / 32;
-    if(freq2 > end) {
-        ch = end * 32;
-    }
-    if(freq2 < start){
-        ch = start * 32;
+    unsigned char c;
+    c = printhelp_2lines("Poweroff", "A=Yes");
+    if(c == charcode_a) {
+        shutdown(1);
     }
-    akc6955_set_userband(start, end, ch, mode3k);
 }
 
-void set_userband(void)
+void menu_setfmresolution(void)
 {
-    unsigned int from,to;
-    unsigned char c;
-    unsigned char pp;
-    unsigned char mode3k;
-    char cc;
-
-    _CLS();
-    _LOCATE(0,0);
-    printstr("User ch:");
-    c = pollkey_single();
-
-    if(c > charcode_0) return;
-    if(c < charcode_1) return;
-    if(c == charcode_0) {
-        c = 0;
-    } else {
-        c = c - charcode_1 + 1;
-    }
-    if(c >= USER_BAND_NUM) return;
-
+   unsigned char c;
     if(setup.fm != 0){
-        from = setup.fm_usrbands[c].start * 80 + 3000; // 32*25/10
-        to = setup.fm_usrbands[c].stop * 80 + 3000;
-        _CLS();
-        _LOCATE(0,0);
-        _LOCATE(0,0);
-        printstr("FM#");
-        print_numeric_nosupress(c, 1);
-        _LOCATE(0,1);
-        printstr(" From:");
-        from = read_numeric(from, 5, 7, 1);
-        _LOCATE(0,1);
-        printstr(" To:  ");
-        to = read_numeric(to, 5, 7, 1);
-        setup.fm_usrbands[c].start = (from - 3000) / 80;
-        setup.fm_usrbands[c].stop = (to - 3000) / 80;
-        setup.fm_usrbands[c].freq = from * 80 + 3000;
-        setup.fm_userbandnum = c;
-    } else {
-        mode3k = setup.am_usrbands[c].mode3k;
-        pp = 96; // 3*32
-        if(mode3k == 0) pp = 160; // 5*32
-        from = setup.am_usrbands[c].start * pp;
-        to = setup.am_usrbands[c].stop * pp;
-        _CLS();
-        _LOCATE(0,0);
-        printstr("AM#");
-        print_numeric_nosupress(c, 1);
-        printstr(" Step:");
-        _LOCATE(0,1);
-        printstr("0=3k 1=5k");
-        cc = pollkey_single();
-        if(cc == charcode_0){
-            pp = 96;
-            mode3k = 0xff;
-        } else if(cc = charcode_1) {
-            pp = 160;
-            mode3k = 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);
-        printstr("AM#");
-        print_numeric_nosupress(c, 1);
-        _LOCATE(0,1);
-        printstr(" From:");
-        from = read_numeric(from, 5, 7, 1);
-        _LOCATE(0,1);
-        printstr(" To:  ");
-        to = read_numeric(to, 5, 7, 1);
-        setup.am_usrbands[c].start = from / pp;
-        setup.am_usrbands[c].stop = to  / pp;
-        setup.am_usrbands[c].mode3k = mode3k;
-        setup.am_usrbands[c].freq = from * pp;
-        setup.am_userbandnum = c;
-    }
-    call_userband(c);
-    _CLS();
-}
-
-void input_userband(void)
-{
-    unsigned char c;
-    do{
-      c = printhelp_2lines("User Band", "   #");
-
-
-       if((c >= charcode_a) && (c <= charcode_f)){
-         break;
-       }
-       if(c == charcode_0) {
-         _PUTCHAR('0');
-         if(setup.fm != 0){
-            setup.fm_userbandnum = 0;
-         } else {
-            setup.am_userbandnum = 0;
-         }
-         call_userband(0);
-       } else {
-         c = c - charcode_1 + 1;
-         if(c < USER_BAND_NUM) {
-            _PUTCHAR(c + '0');
-            if(setup.fm != 0){
-               setup.fm_userbandnum = c;
-            } else {
-               setup.am_userbandnum = c;
-            }
-            call_userband(c);
-        }
-       }
-       idle(setup.ui_idlecount);
-    } while(1);
-    _CLS();
-}
-
-
-void menu_poweroff(void)
-{
-    unsigned char c;
-    c = printhelp_2lines("Poweroff", "A=Yes");
-    if(c == charcode_a) {
-        shutdown(1);
+//        _LOCATE(0,0);
     }
 }
 
@@ -471,172 +217,76 @@ 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();
 }
 
-void menu_save(void)
-{
-    unsigned char c;
-    c = printhelp_2lines("Save settings", "A=Yes");
-    if(c == charcode_a) {
-        save_eeprom();
-    }
-}
-
-void menu_load(void)
-{
-    unsigned char c;
-    c = printhelp_2lines("Load settings", "A=Yes B=Init");
-    if(c == charcode_a) {
-        c = load_eeprom();
-        if( c != 0xff) {
-            _CLS();
-            _LOCATE(0,0);
-            c = printhelp_2lines("X) Load Error", "A=Fix");
-            setdefault();
-            if(c == charcode_a){
-                save_eeprom();
-            }
-        }
-        setup_akc6955();
-    } else if(c == charcode_b){
-        setdefault();
-        setup_akc6955();
-    }
-}
-
-void setup_menu(void)
+/*
+ * Main Menu : initial-screen -> 'F'.
+ */
+void main_menu(void)
 {
     unsigned char c;
+    unsigned char d;
     unsigned int val;
+    unsigned int freq;
 
-    c = printhelp_2lines("Setup F=HELP", "5=Return");
-    switch(c){
+    printhelp_2lines("Menu:F=HELP", "B=CANCEL");
+    c = pollkey_single(); // 1012ms
+    switch(c) {
+        case charcode_1:
+            // Band
+            setband_direct();
+            break;
         case charcode_3:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("BL Level:");
-            val = read_numeric(setup.backlight_level, 3, 0,1);
-            if(val > 255) val = 255;
-            if(val < 10) val = 15;
-            setup.backlight_level = (unsigned char)val;
+            // Band
+            setfreq_direct();
             break;
         case charcode_4:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("FM Bandwidth:");
-            akc6955_get_fmbandwidth(val);
-            val = read_numeric(val, 1, 0, 1) & 3;
-            setup.fmbandwidth = (unsigned char)val;
-            akc6955_set_fmbandwidth(setup.fmbandwidth);
+            on_call_userfreq();
             break;
+            // Scan
         case charcode_5:
             break;
+        case charcode_6:
+            on_set_userfreq();
+            break;
+            // Scan
         case charcode_7:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("FM-CNR threshold:");
-            val = setup.threshold_fmcnr;
-            val = read_numeric(val, 1, 0, 1);
-            akc6955_set_thresh_fmcnr((unsigned char)val);
+            menu_poweroff();
             break;
         case charcode_8:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("AM-CNR threshold:");
-            val = setup.threshold_amcnr;
-            val = read_numeric(val, 1, 0, 1);
-            akc6955_set_thresh_amcnr((unsigned char)val);
+            // Set volume
+            set_volume();
             break;
         case charcode_9:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("Stereo threshold:");
-            val = setup.threshold_fmstereo;
-            val = read_numeric(val, 1, 0, 1);
-            akc6955_set_thresh_fmstereo((unsigned char)val);
+            freq = akc6955_get_freq();
+            akc6955_set_freq(freq);
             break;
         case charcode_0:
-            menu_poweroff();
+            // Setup Menu
+            setup_menu();
             break;
         case charcode_a:
-            menu_load();
+            toggle_amfm();
             break;
         case charcode_c:
-            menu_save();
+            set_userband();
             break;
         case charcode_d:
-            setdefault();
+            input_userband();
             break;
         case charcode_e:
-            _CLS();
-            _LOCATE(0,0);
-            printstr("BL Long:");
-            val = read_numeric(setup.backlight_long, 3, 0,1);
-            if(val > 999) val = 999;
-            setup.backlight_long = val;
+            menu_setfmresolution();
             break;
         case charcode_f:
-            setup_help();
+            mainmenu_help();
+            // HELP
             break;
         default:
             break;
-    }
-}
-/*
- * Main Menu : initial-screen -> 'F'.
- */
-void main_menu(void)
-{
-    unsigned char c;
-    unsigned int val;
-
-    printhelp_2lines("Menu:F=HELP", "B=CANCEL");
-    c = pollkey_single(); // 1012ms
-        if(c == charcode_1){
-            // Band
-            setband_direct();
-        } else if(c == charcode_3){
-            // Band
-            setfreq_direct();
-        }else if(c == charcode_4){
-            on_call_userfreq();
-            // Scan
-        }else if(c == charcode_5){
-         //   scan_start();
-            // Scan
-        }else if(c == charcode_6){
-            on_set_userfreq();
-            // Scan
-        } else if(c == charcode_7){
-            menu_poweroff();
-        } else if(c == charcode_8){
-            // Set volume
-            set_volume();
-        } else if(c == charcode_9){
-            _CLS();
-            _LOCATE(0,0);
-            printstr("Sig width:");
-            val = setup.threshold_width;
-            val = read_numeric(val, 1, 0, 1);
-            akc6955_set_thresh_width((unsigned char)val);
-            // Set NF
-        } else if(c == charcode_0){
-            // Setup Menu
-            setup_menu();
-        } else if(c == charcode_a){
-            toggle_amfm();
-        } else if(c == charcode_c){
-            // Set userband
-            set_userband();
-        } else if(c == charcode_d){
-            // Call userband
-            input_userband();
-        } else if (c == charcode_f){
-            mainmenu_help();
-            // HELP
         }
        _CLS();
-       _LOCATE(0,0);
+       _LOCATE_0_0();
 }