OSDN Git Service

[v2.0][SHELL][SRECORD] Invert checksum before check.
[openi2cradio/OpenI2CRadio.git] / ui_updown.c
index 42c67f2..eaffc11 100644 (file)
@@ -52,6 +52,7 @@
 #include "power.h"
 #include "adc_int.h"
 #include "backlight.h"
+#include "rencoder.h"
 
 static void setfreq_updown_amsub(void)
 {
@@ -62,6 +63,7 @@ static void setfreq_updown_amsub(void)
     setup.amfreq = setup.amfreq_bank[setup.amband];
 //    idle_time_62_5ms(); // 62.5ms
     ClrWdt();
+    akc6955_mode3k(setup.am_mode3k);
     akc6955_set_freq(setup.amfreq);
 }
 
@@ -83,7 +85,7 @@ static void setband_updown(unsigned char updown)
     if(setup.fm == 0){  // MW
         band = setup.amband + 1;
         if(setup.amband == AKC6955_BAND_AMUSER){
-            setup.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
+            userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
         }
         setup.amfreq_bank[setup.amband] = setup.amfreq;
         if(updown == 0) { // down
@@ -98,31 +100,23 @@ static void setband_updown(unsigned char updown)
         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;
-          break;
         case AKC6955_BAND_AMUSER:
            call_userband(setup.am_userbandnum);
           break;
         default:
+          setup.am_mode3k = 0x00;
           break;
        }
-        if(setup.amband == AKC6955_BAND_AMUSER){
-//            amfreq = am_usrbands[am_userbandnum].freq;
-            call_userband(setup.am_userbandnum);
-        }
         setfreq_updown_amsub();
     } else { // FM
         if(setup.fmband == AKC6955_BAND_FMUSER){
-            setup.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
+            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 = AKC6955_BAND_FMEND + 1;
             }
             band -= 2;
         }
@@ -135,6 +129,55 @@ static void setband_updown(unsigned char updown)
     }
 }
 
+unsigned char setfreq_renc_updown(unsigned char dispf)
+{
+    unsigned int freq;
+
+    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;
+            }
+        freq = freq * renc_count;
+    } else {
+        if(setup.amband == AKC6955_BAND_MW2) {
+            freq = renc_count * 3;
+        } else {
+            freq = renc_count;
+        }
+    }
+
+    if(freq != 0) {  // WORKAROUND: IF STEP=0 then go maximum X-)
+        if(renc_dir == RENC_LEFT) {
+            akc6955_down_freq(freq);
+        } else if(renc_dir == RENC_RIGHT) {
+            akc6955_up_freq(freq);
+        }
+        if(dispf == 0) {
+             acm1602_resume(LCD_I2CADDR);
+             dispf = 0xff;
+        }
+       backlight_reset(charcode_f);
+       update_status();
+       update_display();
+       rencoder_start();
+    }
+    return dispf;
+}
+
 void setfreq_updown(unsigned char ctlword)
 {
     unsigned int freq;
@@ -149,11 +192,21 @@ void setfreq_updown(unsigned char ctlword)
         case charcode_2: // Down band
             setband_updown(0x00);
             break;
-        case charcode_6: // Up Fast;
-        case charcode_4: // Down Freq;
+        case charcode_6: // Up Middle;
+        case charcode_4: // Down Middle;
             freq = 9; // 27KHz@3K/9KStep.
             if(setup.fm != 0) {
-                freq = 10; // 250KHz
+              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
             }
@@ -167,7 +220,17 @@ void setfreq_updown(unsigned char ctlword)
         case charcode_7: // Down Fast;
             freq = 33; // 99KHz@3K/9KStep.
             if(setup.fm != 0){
-                freq = 40; // 1MHz
+              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
             }
@@ -180,14 +243,28 @@ void setfreq_updown(unsigned char ctlword)
         case charcode_3: // Up Slow;
         case charcode_1: // Down Slow;
             if(setup.fm != 0){
-                freq = 4; // DOWN 100KHz
+              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(setup.amband == AKC6955_BAND_MW2) {
                     freq = 3; // 9KHz
-                } else if(setup.amband == AKC6955_BAND_MW3) {
-                    freq = 2; // 10KHz
-                } else if(setup.amband == AKC6955_BAND_MW4) {
+                } else if((setup.amband == AKC6955_BAND_MW3) || (setup.amband == AKC6955_BAND_MW4)) {
                     freq = 2; // 10KHz
                 }
            }
@@ -223,7 +300,7 @@ void setfreq_updown(unsigned char ctlword)
         case charcode_f:
             updown_help();
             _CLS();
-            _LOCATE(0,0);
+//            _LOCATE(0,0);
             break;
         default:
             break;