#include "power.h"
#include "commondef.h"
#include "menu.h"
+#include "ui.h"
unsigned char akc6955_readcmd(unsigned char reg)
{
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;
akc6955_do_tune();
}
-unsigned char akc6955_get_band(void)
-{
- return akc6955_readcmd(AKC6955_BAND);
-}
-
-
void akc6955_set_power(unsigned char on)
{
__bitops_t b;
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();
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);
*/
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;
}
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);
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);
int akc6955_read_level(void)
{
- __bitops_t f;
+ unsigned char f;
unsigned char rflevel, iflevel;
unsigned char b;
int rssi;
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();
int akc6955_get_diff(void)
{
__bitops_t diff;
- __bitops_t f;
+ unsigned char f;
int n;
diff.byte = akc6955_readcmd(AKC6955_FDNUM);
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
{
unsigned int freq;
__bitops_t mode3k;
- unsigned int start;
freq = akc6955_get_channel();
if(freq <= step) return;
#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);
}