OSDN Git Service

[AKC6955] Compress code-size.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 27 Sep 2013 16:17:04 +0000 (01:17 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 27 Sep 2013 16:17:04 +0000 (01:17 +0900)
[DISPLAY] ADD CNRLEVEL.

akc6955.c
akc6955.h
nbproject/Makefile-genesis.properties
radio_getstat.c
ui_display.c

index 355a7d3..0a2330e 100644 (file)
--- a/akc6955.c
+++ b/akc6955.c
@@ -40,6 +40,7 @@
 #include "power.h"
 #include "commondef.h"
 #include "menu.h"
+#include "ui.h"
 
 unsigned char akc6955_readcmd(unsigned char reg)
 {
@@ -51,6 +52,11 @@ void akc6955_writecmd(unsigned char reg,unsigned char data)
     i2c_send_byte(AKC6955_ADDRESS, reg, data);
 }
 
+unsigned char akc6955_get_band(void)
+{
+    return akc6955_readcmd(AKC6955_BAND);
+}
+
 unsigned char akc6955_get_amband(void)
 {
    return akc6955_get_band() >> 3; 
@@ -119,12 +125,6 @@ void akc6955_set_fmband(unsigned char band)
     akc6955_do_tune();
 }
 
-unsigned char akc6955_get_band(void)
-{
-    return akc6955_readcmd(AKC6955_BAND);
-}
-
-
 void akc6955_set_power(unsigned char on)
 {
     __bitops_t b;
@@ -179,36 +179,46 @@ void akc6955_mode3k(unsigned char flag)
     akc6955_do_tune();
 }
 
+unsigned char akc6955_get_mode3k(void)
+{
+    __bitops_t c;
+    c.byte = akc6955_readcmd(AKC6955_CNR_AM);
+    if(c.b7) {
+        return 0xff;
+    }
+    return 0;
+}
+
 void akc6955_set_tune(unsigned char mode_3k, unsigned int ch)
 {
     unsigned char band;
-    __bitops_t f;
+    unsigned char f;
     __bitops_t b;
     unsigned int i = ch;
     unsigned char comp;
     unsigned int start, stop;
+    unsigned char q;
 
     do { // Wait for before completed
         comp = akc6955_chk_donescan();
         idle_time_35ms();
     } while(comp == 0x00);
-    f.byte = akc6955_readcmd(AKC6955_POWER);
+
+    f = akc6955_get_fm();
     band = 0;
-    if(!f.b6){
+    if(f == 0){
         band = akc6955_get_amband();
-        start = ambands[band].start;
-        stop  = ambands[band].end;
         if(band == AKC6955_BAND_AMUSER){
             start = userband.am_usrbands[setup.am_userbandnum].start * 32;
             stop = userband.am_usrbands[setup.am_userbandnum].stop * 32;
         } else {
-            if(mode_3k != 0) {
-               start = start / 3; // See datasheet.
-               stop = stop / 3;
+            if((mode_3k != 0) || (band == AKC6955_BAND_MW2) || (band == AKC6955_BAND_LW)) {
+                q = 3;
             } else {
-                start = start / 5;
-                stop = stop / 5;
+                q = 5;
             }
+            start = ambands[band].start / q;
+            stop  = ambands[band].end / q;
         }
     } else {
         band = akc6955_get_fmband();
@@ -238,12 +248,15 @@ void akc6955_set_tune(unsigned char mode_3k, unsigned int ch)
 void akc6955_do_scan(unsigned char up)
 {
     __bitops_t b;
+    unsigned char c;
 
     //20130823 Need wait for scan/tune completed w/o SDCC 3.3.x.
 #ifndef __SDCC
     while(akc6955_chk_donescan() == 0)
     {
-        idle_time_ms(5);
+        c = pollkey_single_timeout(1, 0);  // 23ms
+        if(c == charcode_a) return; // IF 'A' abort.
+        //idle_time_ms(35);
     }
 #endif
     b.byte = akc6955_readcmd(AKC6955_POWER);
@@ -317,22 +330,26 @@ unsigned int akc6955_get_channel(void)
  */
 unsigned int akc6955_get_freq(void)
 {
-    __bitops_t f, b;
+    __bitops_t b;
     unsigned int i;
     unsigned int freq;
     unsigned char band;
+    unsigned char q;
+    unsigned char f;
 
-    f.byte = akc6955_readcmd(AKC6955_POWER);
+    f = akc6955_get_fm();
     i = akc6955_get_channel();
-    if(f.b6){ // 25KHz
-        freq = (i * 5) / 2 + 3000; // freq' = 25*i[KHz] = (25 / 10) *i [10KHz]
+    if(f != 0){ // 25KHz
+        freq = i * 2 + i / 2 + 3000; // freq' = 25*i[KHz] = (25 / 10) *i [10KHz]
     } else { // 5K
        b.byte = akc6955_readcmd(AKC6955_CH_HI);
        band = akc6955_get_amband();
-       freq = i * 5;
-       if((band == AKC6955_BAND_MW2) || (b.b5)){
-           freq = i * 3;
+       if((band == AKC6955_BAND_MW2) || (band == AKC6955_BAND_LW) || (b.b5)){
+           q = 3;
+       } else {
+           q = 5;
        }
+       freq = i * q;
     }
     return freq;
 }
@@ -340,37 +357,37 @@ unsigned int akc6955_get_freq(void)
 void akc6955_set_freq(unsigned int freq)
 {
     unsigned int ch;
-    __bitops_t f;
     __bitops_t mode3k;
     unsigned char band;
     unsigned char q;
+    unsigned char f;
 
-    f.byte = akc6955_readcmd(AKC6955_POWER);
-    if(f.b6) { // FM
+    f = akc6955_get_fm();
+    if(f != 0) { // FM
        band = akc6955_get_fmband();
        //        band &= 7;
-       ch = ((freq - 3000) * 4) / 10;
+       ch = ((freq - 3000) * 2) / 5;
     } else {
         band = akc6955_get_amband();
-//        if(band >= AKC6955_BAND_AMEND) band = AKC6955_BAND_AMEND - 1;
         mode3k.byte = akc6955_readcmd(AKC6955_CNR_AM);
-        if((band == AKC6955_BAND_MW2) || (mode3k.b7)){
-            ch = freq / 3;
+        if((band == AKC6955_BAND_MW2) || (band == AKC6955_BAND_LW) || (mode3k.b7)){
+            q = 3;
         } else {
-            ch = freq / 5;
+            q = 5;
         }
+        ch = freq / q;
     }
     akc6955_set_tune(mode3k.b7, ch);
 }
 
 void akc6955_set_userband(unsigned char start, unsigned char stop, unsigned int ch, unsigned char mode3k)
 {
-    __bitops_t f;
+    unsigned char f;
 
-    f.byte = akc6955_readcmd(AKC6955_POWER);
+    f = akc6955_get_fm();
     akc6955_writecmd(AKC6955_UCH_ST, start);
     akc6955_writecmd(AKC6955_UCH_EN, stop);
-    if(f.b6){
+    if(f != 0){
         akc6955_set_fmband(AKC6955_BAND_FMUSER);
     } else {
         akc6955_set_amband(AKC6955_BAND_AMUSER);
@@ -381,10 +398,10 @@ void akc6955_set_userband(unsigned char start, unsigned char stop, unsigned int
 
 unsigned char akc6955_get_cnr(void)
 {
-    __bitops_t f;
+    unsigned char f;
     __bitops_t b;
-    f.byte = akc6955_readcmd(AKC6955_POWER);
-    if(f.b6) { // FM
+    f = akc6955_get_fm();
+    if(f != 0) { // FM
         b.byte = akc6955_readcmd(AKC6955_CNR_FM);
     } else { // AM
         b.byte = akc6955_readcmd(AKC6955_CNR_AM);
@@ -395,7 +412,7 @@ unsigned char akc6955_get_cnr(void)
 
 int akc6955_read_level(void)
 {
-    __bitops_t f;
+    unsigned char f;
     unsigned char rflevel, iflevel;
     unsigned char b;
     int rssi;
@@ -403,16 +420,15 @@ int akc6955_read_level(void)
     int totallevel;
     int level;
 
-    f.byte = akc6955_readcmd(AKC6955_POWER);
+    f = akc6955_get_fm();
     b =  akc6955_readcmd(AKC6955_PGALEVEL);
     rflevel = (b & 0xe0) >> 5;
     iflevel = (b & 0x1c) >> 2;
     totallevel = rflevel + iflevel;
 
     rssi = (int)(akc6955_readcmd(AKC6955_RSSI) & 0x7f);
-    // totallevel = rssi + 6*totallevel;
     level = (int)(totallevel * 6 + rssi);
-    if(f.b6){
+    if(f != 0){
         level = 103 - level; // totallevel * 6
     } else {
         freq = akc6955_get_freq();
@@ -430,7 +446,7 @@ int akc6955_read_level(void)
 int akc6955_get_diff(void)
 {
     __bitops_t diff;
-    __bitops_t f;
+    unsigned char f;
     int n;
 
     diff.byte = akc6955_readcmd(AKC6955_FDNUM);
@@ -442,8 +458,8 @@ int akc6955_get_diff(void)
         n = (int)diff.byte;
     }
 
-    f.byte = akc6955_readcmd(AKC6955_POWER);
-    if(f.b6) { // FM
+    f = akc6955_get_fm();
+    if(f != 0) { // FM
         return n * 10;
     }
     return n; // 10n
@@ -465,7 +481,6 @@ void akc6955_down_freq(unsigned int step)
 {
     unsigned int freq;
     __bitops_t mode3k;
-    unsigned int start;
 
     freq = akc6955_get_channel();
     if(freq <= step) return;
index 48584c6..7adcaeb 100644 (file)
--- a/akc6955.h
+++ b/akc6955.h
@@ -167,9 +167,11 @@ extern void akc6955_set_fmband(unsigned char band);
 extern void akc6955_set_power(unsigned char on);
 extern void akc6955_do_tune(void);
 extern unsigned char akc6955_tune(void);
+extern void akc6955_set_tune(unsigned char mode_3k, unsigned int ch);
 
 extern void akc6955_mode3k(unsigned char flag);
-extern void akc6955_set_tune(unsigned char mode_3k, unsigned int ch);
+extern unsigned char akc6955_get_mode3k(void);
+
 extern void akc6955_do_scan(unsigned char up);
 extern void akc6955_abort_scan(void);
 extern unsigned char akc6955_chk_donescan(void);
index d75047a..47a1e2a 100644 (file)
@@ -1,5 +1,5 @@
 #
-#Wed Sep 25 08:07:51 JST 2013
+#Sat Sep 28 01:00:03 JST 2013
 default.languagetoolchain.dir=/opt/microchip/xc8/v1.20/bin
 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=1c49f19f6a43b876c317e0d8d41c0854
 default.languagetoolchain.version=1.20
index 3e2cad1..d60a260 100644 (file)
 #include "power.h"
 #include "adc_int.h"
 
+#ifndef ADC_BATT_CH
+#define ADC_BATT_CH 7
+#endif
+
 
 void update_status(void)
 {
 
     unsigned int adc;
-    __bitops_t c;
 
     setup.fm = akc6955_get_fm();
     recv_signal = akc6955_read_level();
     diffstat = akc6955_get_diff();
     setup.volume = akc6955_getvolume();
     setup.prevolume = akc6955_get_prevolume();
-        if(setup.fm != 0){
+    if(setup.fm != 0){
             setup.fmfreq = akc6955_get_freq();
             setup.fmband = akc6955_get_fmband();
             setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
             stereoflag = akc6955_get_stereo();
             setup.fmbandwidth = akc6955_get_fmbandwidth();
-        } else {
+    } else {
             setup.amfreq = akc6955_get_freq();
             setup.amband = akc6955_get_amband();
             setup.amfreq_bank[setup.amband] = setup.amfreq;
-            c.byte = akc6955_readcmd(AKC6955_CNR_AM);
-            if(c.b7) {
-                setup.am_mode3k = 0xff;
-            } else {
-                setup.am_mode3k = 0;
-            }
+            setup.am_mode3k = akc6955_get_mode3k();
             stereoflag = 0x00;
-        }
-        tuneflag = akc6955_tune();
-        cnrlevel = akc6955_get_cnr();
-        batlevel_6955 = akc6955_get_battery();
-        startadc(7);
-        do {
-            idle_time_ms(1);
-            adc = polladc();
-        } while(adc == 0xffff);
-   battlevel = adc_rawtobatt(adc, batlevel_6955);
+    }
+    tuneflag = akc6955_tune();
+    cnrlevel = akc6955_get_cnr();
+    // Battery
+    batlevel_6955 = akc6955_get_battery();
+    // ADC
+    startadc(ADC_BATT_CH);
+    do {
+        idle_time_ms(1);
+        adc = polladc();
+    } while(adc == 0xffff);
+    battlevel = adc_rawtobatt(adc, batlevel_6955);
 }
index 7eea242..371246b 100644 (file)
@@ -122,13 +122,21 @@ void update_display(void)
 
     unsigned int vol;
     int sig;
-    int lv;
-    unsigned int batlv;
+
  //   _CLS();
     _LOCATE(0,0);
     printstr("S");
-    sig = recv_signal + 40;
-    print_numeric_nosupress(sig / 20, 1);
+    if(recv_signal > 99){
+        printstr("9+");
+    } else {
+        print_numeric_nosupress(recv_signal, 2);
+    }
+    _PUTCHAR('/');
+    if(cnrlevel > 99) {
+        printstr("++");
+    } else {
+        print_numeric_nosupress(cnrlevel, 2);
+    }
     _PUTCHAR(' ');
     set_amfmlamp(~setup.fm);
     _PUTCHAR('W');
@@ -144,7 +152,7 @@ void update_display(void)
          printstr("MUTE");
      }
 #endif
-     _LOCATE(15-4,0);
+     _LOCATE(16-5, 0);
      print_numeric_nosupress(battlevel / 100, 1);
      _PUTCHAR('.');
      print_numeric_nosupress(battlevel % 100, 2);