OSDN Git Service

[Schematic] Add External EEPROM;24LC64.
[openi2cradio/OpenI2CRadio.git] / menu_memoryfreq.c
index d080443..faebacd 100644 (file)
@@ -38,16 +38,17 @@ void call_freqbank(unsigned int num)
     unsigned char _band;
     unsigned char _userband;
     unsigned int bank = num / USER_MEMORY_NUM;
+    unsigned int n = num % USER_MEMORY_NUM;
 
-    if(num >= (USER_MEMORY_NUM * 24)) return;
+    if(num >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) return;
 
-//    if(bank != setup.pagenum){ // Swap memory
+    if(bank != setup.pagenum){ // Swap memory
 //        save_frequencies();
         load_frequencies(bank, 0x00);
//   }
+    }
 
-    _fm = freqset.memoryfreqs[num].fm;
-    _userband = freqset.memoryfreqs[num].band;
+    _fm = freqset.memoryfreqs[n].fm;
+    _userband = freqset.memoryfreqs[n].band;
     _band = _userband & 0x1f;
     _userband = _userband >> 5;
     if(_fm) { // AM
@@ -58,7 +59,7 @@ void call_freqbank(unsigned int num)
         setup.am_userbandnum = _userband;
     }
     setup.memorynum = num;
-    akc6955_chg_fm(_fm, freqset.memoryfreqs[num].freq);
+    akc6955_chg_fm(_fm, freqset.memoryfreqs[n].freq);
 }
 
 
@@ -69,8 +70,9 @@ void set_freqbank(unsigned int num)
     unsigned char _userband;
     unsigned int _freq;
     unsigned int bank = num / USER_MEMORY_NUM;
+    unsigned int n = num % USER_MEMORY_NUM;
 
-    if(num >= (USER_MEMORY_NUM * 24)) return;
+    if(num >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) return;
 
      if(bank != setup.pagenum){ // Save now bank, and load using bank
         save_frequencies();
@@ -86,9 +88,9 @@ void set_freqbank(unsigned int num)
         _band = setup.fmband;
         _freq = setup.fmfreq;
     }
-    freqset.memoryfreqs[num].fm = _fm;
-    freqset.memoryfreqs[num].band = (_userband << 5) | (_band & 0x1f);
-    freqset.memoryfreqs[num].freq = _freq;
+    freqset.memoryfreqs[n].fm = _fm;
+    freqset.memoryfreqs[n].band = (_userband << 5) | (_band & 0x1f);
+    freqset.memoryfreqs[n].freq = _freq;
 
     save_frequencies();
 }
@@ -96,7 +98,7 @@ void set_freqbank(unsigned int num)
 
 void on_call_userfreq(void)
 {
-    unsigned int val = USER_MEMORY_NUM * 24;
+    unsigned int val = USER_MEMORY_NUM * USER_MEMORY_BANKS;
     _CLS();
     _LOCATE(0,0);
     printstr("Mem: 000-");
@@ -107,7 +109,7 @@ void on_call_userfreq(void)
 
 void on_set_userfreq(void)
 {
-    unsigned int val = USER_MEMORY_NUM * 24;
+    unsigned int val = USER_MEMORY_NUM * USER_MEMORY_BANKS;
     unsigned char n;
     unsigned char c;
     _CLS();
@@ -157,29 +159,67 @@ void on_updown_userfreq(void)
         _HOME();
         c = pollkey_single_timeout(44, 1); // About 1s
        switch(c) {
-           case charcode_8: // UP CH
+           case charcode_7: // UP 1CH
                 setup.memorynum++;
-                if(setup.memorynum >= (USER_MEMORY_NUM * 24)) setup.memorynum = 0;
-                call_freqbank(setup.memorynum);
-                break;
-           case charcode_2: // Down CH
-                if(setup.memorynum == 0) setup.memorynum = USER_MEMORY_NUM * 24;
-                setup.memorynum--;
+                if(setup.memorynum >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) setup.memorynum = 0;
                 call_freqbank(setup.memorynum);
                 break;
+           case charcode_1: // Down 1CH
+               if(setup.memorynum == 0) setup.memorynum = USER_MEMORY_NUM * USER_MEMORY_BANKS;
+               setup.memorynum--;
+               call_freqbank(setup.memorynum);
+               break;
+           case charcode_9: // Up CH FAST
+               setup.memorynum += 100;
+               if(setup.memorynum > (USER_MEMORY_NUM * USER_MEMORY_BANKS)) {
+                    setup.memorynum = setup.memorynum % 100;
+               }
+               call_freqbank(setup.memorynum);
+               break;
+           case charcode_3: // Down CH FAST
+               if(setup.memorynum < 100) {
+                    setup.memorynum = (((USER_MEMORY_NUM * USER_MEMORY_BANKS) / 100 - 1) * 100) + (setup.memorynum % 100);
+               } else {
+                    setup.memorynum -= 100;
+               }
+               call_freqbank(setup.memorynum);
+               break;
+           case charcode_8: // Up CH MID
+               setup.memorynum += USER_MEMORY_NUM;
+               if(setup.memorynum >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) {
+                    setup.memorynum = setup.memorynum - USER_MEMORY_NUM * USER_MEMORY_BANKS;
+               }
+               call_freqbank(setup.memorynum);
+               break;
+           case charcode_2: // Down CH MID
+               if(setup.memorynum < USER_MEMORY_NUM) {
+                    setup.memorynum = (USER_MEMORY_NUM * USER_MEMORY_BANKS) - USER_MEMORY_NUM + setup.memorynum;
+               } else {
+                    setup.memorynum -= USER_MEMORY_NUM;
+               }
+               call_freqbank(setup.memorynum);
+               break;
+            case charcode_5: // Recall
+               call_freqbank(setup.memorynum);
+               break;
             case charcode_d: // Reset
-                if(_fm) { // AM
+               if(_fm) { // AM
                     setup.fmband = _band;
                     setup.fm_userbandnum = _userband;
                     setup.fmfreq = _freq;
-                } else {
+               } else {
                     setup.amband = _band;
                     setup.am_userbandnum = _userband;
                     setup.amfreq = _freq;
-                }
-                akc6955_chg_fm(_fm, _freq);
-                break;
-           case charcode_5: // exit
+               }
+               akc6955_chg_fm(_fm, _freq);
+               break;
+           case charcode_4:
+               on_call_userfreq();
+               break;
+           case charcode_6:
+               on_set_userfreq();
+               break;
            case charcode_a:
                 goto _l0;
                 break;