*/
#include "menu.h"
+#include "menu_memoryfreq.h"
#include "power.h"
#include "commondef.h"
-
+#include "backlight.h"
void toggle_amfm(void)
{
unsigned int freq;
- if(fm != 0){
- fm = 0;
- fmfreq_bank[fmband] = fmfreq;
+ if(setup.fm != 0){
+ setup.fm = 0;
+ setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
// akc6955_set_amband(amband);
- freq = amfreq_bank[amband];
+ freq = setup.amfreq_bank[setup.amband];
} else {
- fm = 0xff;
- amfreq_bank[amband] = amfreq;
+ setup.fm = 0xff;
+ setup.amfreq_bank[setup.amband] = setup.amfreq;
// akc6955_set_fmband(fmband);
- freq = fmfreq_bank[fmband];
+ freq = setup.fmfreq_bank[setup.fmband];
}
- akc6955_chg_fm(fm, freq);
+ akc6955_chg_fm(setup.fm, freq);
idle_time_ms(500);
// akc6955_set_freq(freq);
}
{
__bitops_t mode;
mode.byte = 0x00;
- if(stereo == 0x00){
+ if(setup.stereo == 0x00){
mode.b0 = 1; // Force mono
- } else if(stereo < 0x80){
+ } else if(setup.stereo < 0x80){
mode.b1 = 1; // Force stereo
}
akc6955_set_stereomode(mode.byte);
void set_stereo(void)
{
- if(stereo == 0xff) {// Force Mono
- stereo = 0x00;
- } else if(stereo == 0x00) { //Mono->Stereo
- stereo = 0x7f;
+ if(setup.stereo == 0xff) {// Force Mono
+ setup.stereo = 0x00;
+ } else if(setup.stereo == 0x00) { //Mono->Stereo
+ setup.stereo = 0x7f;
} else { // Default, Stereo->auto
- stereo = 0xff;
+ setup.stereo = 0xff;
}
set_stereomode();
}
{
unsigned char c;
unsigned char d;
- unsigned char p;
unsigned char fact;
+ unsigned char dispf = 0xff;
_CLS();
do {
- _LOCATE(0,0);
- d = akc6955_getvolumemode();
- if(d == 0){
- _PUTCHAR('D');
- } else {
- _PUTCHAR('K');
- }
- printstr(" Vol:");
- print_numeric_nosupress(volume, 2);
- printstr(" F:Exit");
- _LOCATE(0,1);
- printstr("Pre:");
- _PUTCHAR('0' + (prevolume & 3));
- _LOCATE(16-4, 1);
- if(lowboost == 0x00){
- printstr(" ");
- } else {
- printstr("LOW");
- }
- _HOME();
- c = pollkeys(pollkeybuf, 60, 1);
- p = 0;
- while(c > 0) {
- switch(pollkeybuf[p]) {
+ 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:
- volume++;
- if(volume > 63) volume = 63;
+ setup.volume++;
+ if(setup.volume > 63) setup.volume = 63;
+ akc6955_setvolume(setup.volume);
break;
case charcode_4:
- volume--;
- if(volume < 23) volume = 23;
+ setup.volume--;
+ if(setup.volume < 23) setup.volume = 23;
+ akc6955_setvolume(setup.volume);
break;
case charcode_f:
_CLS();
fact = 0x00;
}
akc6955_setvolumemode(fact);
+ akc6955_setvolume(setup.volume);
break;
case charcode_b:
- prevolume++;
- if(prevolume > 3) prevolume = 0;
- akc6955_set_prevolume(prevolume);
+ 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(lowboost == 0x00){
+ if(setup.lowboost == 0x00){
fact = 0xff;
}
- lowboost = fact;
- akc6955_set_lowboost(lowboost);
+ setup.lowboost = fact;
+ akc6955_set_lowboost(setup.lowboost);
+ akc6955_setvolume(setup.volume);
break;
default:
break;
}
- c--;
- p++;
+ if(setup.volume < 24){
+ set_examp_mute(1);
+ } else {
+ set_examp_mute(0);
}
- if(volume < 24){
- set_examp_mute(1);
- } else {
- set_examp_mute(0);
- }
- akc6955_setvolume(volume);
-// _HOME();
+ idle_time_ms(9); // Pad.
} while(1);
}
+
void scan_start(void)
{
unsigned char c;
+ unsigned char cc;
+ unsigned char n;
_CLS();
- _PUTCHAR(' ');
+ scanflag = 0;
do {
do {
+ c = pollkey_single_timeout(20, 0) ; // 23*20 = 460ms
+ if(chk_powerbutton() != 0) shutdown(1);
update_status();
- _HOME();
-// _LOCATE(0,0);
- printstr("Scan F/A/4/6");
+ cc = ' ';
+ if((akc6955_chk_donescan() == 0) && (scanflag != 0)){
+ cc = '>';
+ }
+ _PUTCHAR(cc);
+ printstr("Scan A/4/6/F");
print_freq(1);
- c = pollkeys(pollkeybuf, 20, 0); // 23*20 = 460ms
-// idle_time_ms(2000);
- } while(c == 0);
+ _HOME();
+ } while(c == charcode_null);
// New Scan
- if(pollkeybuf[0] == charcode_6){
- scanflag = 0xff;
- akc6955_do_scan(0xff);
- } else if(pollkeybuf[0] == charcode_4){
- scanflag = 0xff;
- akc6955_do_scan(0);
- } else if(pollkeybuf[0] == charcode_a){
- scanflag = 0;
- akc6955_abort_scan();
- break;
- } else if(pollkeybuf[0] == charcode_f){
- break;
- }// else {
-// if((scanflag != 0) && (akc6955_chk_donescan() != 0)) {
-// scanflag = 0;
- // }
-// }
+ 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();
}
_LOCATE(0,0);
printstr("Set Freq:");
_LOCATE(0,1);
- if(fm != 0){
+ if(setup.fm != 0){
// FM
printstr("FM ");
- val = fmfreq;
+ val = setup.fmfreq;
val = read_numeric(val, 5, 7, 1);
- fmfreq = val;
+ setup.fmfreq = val;
} else {
// FM
printstr("AM ");
- val = amfreq;
+ val = setup.amfreq;
val = read_numeric(val, 5, 7, 1);
- amfreq = val;
+ setup.amfreq = val;
}
akc6955_set_freq(val);
}
void setband_direct(void)
{
unsigned int band;
+ unsigned int freq;
_CLS();
_LOCATE(0,0);
- if(fm != 0){
+ if(setup.fm != 0){
printstr("Set Band:FM#");
- band = fmband & 7;
- fmfreq_bank[fmband] = amfreq;
- fmband = read_numeric(band, 2, 7, 1);
- akc6955_set_fmband(fmband);
- akc6955_do_tune();
- fmfreq = fmfreq_bank[fmband];
- akc6955_set_freq(fmfreq);
+ band = setup.fmband & 7;
+ 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;
} else {
printstr("Set Band:AM#");
- band = amband & 0x1f;
- amfreq_bank[amband] = amfreq;
- amband = read_numeric(band, 2, 7, 1);
- amfreq = amfreq_bank[amband];
- akc6955_set_amband(amband);
- akc6955_do_tune();
- akc6955_set_freq(amfreq);
+ 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];
+ 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;
+ break;
+ default:
+ break;
+ }
+
+ akc6955_set_amband(setup.amband);
+ freq = setup.amfreq;
}
+ akc6955_do_tune();
+ akc6955_set_freq(freq);
}
void call_userband(unsigned char num)
if(num >= USER_BAND_NUM) return;
- p = &(am_usrbands[num]);
- if(fm != 0){
- p = &(fm_usrbands[num]);
+ 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(fm != 0) {
+ if(setup.fm != 0) {
ch = ((freq - 3000) / 5) * 2;
- fmband = AKC6955_BAND_FMUSER;
+ setup.fmband = AKC6955_BAND_FMUSER;
} else {
unsigned int q = 5;
if(mode3k != 0) q = 3;
ch = freq / q;
- amband = AKC6955_BAND_AMUSER;
+ setup.amband = AKC6955_BAND_AMUSER;
}
if(start > end) {
{
unsigned int from,to;
unsigned char c;
- unsigned char p;
+ unsigned char pp;
unsigned char mode3k;
char cc;
c = c - charcode_1 + 1;
}
if(c >= USER_BAND_NUM) return;
- if(fm != 0){
- from = fm_usrbands[c].start * 80 + 3000; // 32*25/10
- to = fm_usrbands[c].stop * 80 + 3000;
+
+ 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);
_LOCATE(0,1);
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
- fm_usrbands[c].start = (from - 3000) / 80;
- fm_usrbands[c].stop = (to - 3000) / 80;
- fm_usrbands[c].freq = from * 80 + 3000;
- fm_userbandnum = c;
+ 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 = am_usrbands[c].mode3k;
- p = 96; // 3*32
- if(mode3k == 0) p = 160; // 5*32
- from = am_usrbands[c].start * p;
- to = am_usrbands[c].stop * p;
+ 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#");
printstr("0=3k 1=5k");
cc = pollkey_single();
if(cc == charcode_0){
- p = 96;
+ pp = 96;
mode3k = 0xff;
} else if(cc = charcode_1) {
- p = 160;
+ pp = 160;
mode3k = 0;
}
_CLS();
_LOCATE(0,1);
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
- am_usrbands[c].start = from / p;
- am_usrbands[c].stop = to / p;
- am_usrbands[c].mode3k = mode3k;
- am_usrbands[c].freq = from * p;
- am_userbandnum = c;
+ 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();
{
unsigned char c;
do{
- _CLS();
- _LOCATE(0,0);
- printstr("User Band");
- _LOCATE(0,1);
- printstr(" #");
- c = pollkey_single();
+ c = printhelp_2lines("User Band", " #");
- if((c >= charcode_a) && (c <= charcode_f)){
- break;
- }
- if(c == charcode_0) {
- _PUTCHAR('0');
- if(fm != 0){
- fm_userbandnum = 0;
- } else {
- am_userbandnum = 0;
- }
- call_userband(0);
- } else {
- c = c - charcode_1 + 1;
- if(c < USER_BAND_NUM) {
- _PUTCHAR(c + '0');
- if(fm != 0){
- fm_userbandnum = c;
+
+ 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 {
- am_userbandnum = c;
+ setup.am_userbandnum = c;
}
call_userband(c);
}
- }
- idle(ui_idlecount);
+ }
+ idle(setup.ui_idlecount);
} while(1);
_CLS();
}
void setup_akc6955(void)
{
-// akc6955_chg_fm(fm); // Set to AM
-#if 0
-/*
- * CR_DEF[18]= {
- 0x4c, //REG00 //Modify
- 0x10, //REG01
- 0x4a, //REG02
- 0xc8, //REG03
- 0x19, //REG04
- 0x32, //REG05
- 0xa1, //REG06
- 0xa1, //REG07
- 0x54, //REG08
- 0xC7, //REG09
- 0x7f, //REG10
- 0xe0, //REG11
- 0x00, //REG12
- 0x0C, //REG13
- 0x40, //REG14
- 0x82, //REG15 //Modify
- 0xcc, //REG16
- 0xf9 //REG17
- */
- akc6955_writecmd(0x00, 0x4c);
- akc6955_writecmd(0x01, 0b00010000);
- akc6955_writecmd(0x02, 0b01001010);
- akc6955_writecmd(0x03, 0xc8);
- akc6955_writecmd(0x04, 0x19);
- akc6955_writecmd(0x05, 0x32);
- akc6955_writecmd(0x06, 0xa1);
- akc6955_writecmd(0x07, 0b10100001);
- akc6955_writecmd(0x08, 0b01010000);
- akc6955_writecmd(0x09, 0b11000111);
- akc6955_writecmd(0x09, 0b01111111);
- akc6955_writecmd(0x0b, 0b11100000);
- akc6955_writecmd(0x0c, 0b00000000);
- akc6955_writecmd(0x0d, 0b00001100);
- akc6955_writecmd(0x0e, 0x40);
- akc6955_writecmd(0x0f, 0x82);
- akc6955_writecmd(0x10, 0xcc);
- akc6955_writecmd(0x11, 0xf9);
-
-
-#else
akc6955_writecmd(AKC6955_POWER, 0xc0); // You musto *not* mute, set b2 to '0".
akc6955_writecmd(AKC6955_VOLUME, 0xc0); // You must select to radio(b1 = '0).
- if(fm == 0) {
- akc6955_set_amband(amband);
- if(amband == AKC6955_BAND_AMUSER) call_userband(am_userbandnum);
- amfreq = amfreq_bank[amband];
- akc6955_chg_fm(0, amfreq); // Set to AM
- akc6955_set_freq(amfreq);
+ if(setup.fm == 0) {
+ akc6955_set_amband(setup.amband);
+ if(setup.amband == AKC6955_BAND_AMUSER) call_userband(setup.am_userbandnum);
+ setup.amfreq = setup.amfreq_bank[setup.amband];
+ akc6955_chg_fm(0, setup.amfreq); // Set to AM
+ akc6955_set_freq(setup.amfreq);
} else {
- akc6955_set_fmband(fmband);
- if(fmband == AKC6955_BAND_FMUSER) call_userband(fm_userbandnum);
- fmfreq = fmfreq_bank[fmband];
- akc6955_chg_fm(0xff, fmfreq); // Set to AM
- akc6955_set_freq(fmfreq);
+ akc6955_set_fmband(setup.fmband);
+ if(setup.fmband == AKC6955_BAND_FMUSER) call_userband(setup.fm_userbandnum);
+ setup.fmfreq = setup.fmfreq_bank[setup.fmband];
+ akc6955_chg_fm(0xff, setup.fmfreq); // Set to AM
+ akc6955_set_freq(setup.fmfreq);
}// Dummy, TBS (954KHz)
akc6955_set_power(0xff); // Power ON
akc6955_setvolume(36); // Temporally
- akc6955_set_thresh_fmcnr(threshold_fmcnr);
- akc6955_set_thresh_amcnr(threshold_amcnr);
- akc6955_set_thresh_width(threshold_width);
- akc6955_set_thresh_fmstereo(threshold_fmstereo);
+ akc6955_set_thresh_fmcnr(setup.threshold_fmcnr);
+ akc6955_set_thresh_amcnr(setup.threshold_amcnr);
+ akc6955_set_thresh_width(setup.threshold_width);
+ akc6955_set_thresh_fmstereo(setup.threshold_fmstereo);
akc6955_setvolumemode(0);
- akc6955_set_lowboost(lowboost);
+ akc6955_set_lowboost(setup.lowboost);
set_stereomode();
-#endif
}
void menu_save(void)
_CLS();
_LOCATE(0,0);
printstr("BL Level:");
- val = read_numeric(backlight_level, 3, 0,1);
+ val = read_numeric(setup.backlight_level, 3, 0,1);
if(val > 255) val = 255;
if(val < 10) val = 15;
- backlight_level = (unsigned char)val;
+ setup.backlight_level = (unsigned char)val;
break;
case charcode_4:
_CLS();
printstr("FM Bandwidth:");
akc6955_get_fmbandwidth(val);
val = read_numeric(val, 1, 0, 1) & 3;
- fmbandwidth = (unsigned char)val;
- akc6955_set_fmbandwidth(fmbandwidth);
+ setup.fmbandwidth = (unsigned char)val;
+ akc6955_set_fmbandwidth(setup.fmbandwidth);
break;
case charcode_5:
break;
_CLS();
_LOCATE(0,0);
printstr("FM-CNR threshold:");
- val = threshold_fmcnr;
+ val = setup.threshold_fmcnr;
val = read_numeric(val, 1, 0, 1);
akc6955_set_thresh_fmcnr((unsigned char)val);
break;
_CLS();
_LOCATE(0,0);
printstr("AM-CNR threshold:");
- val = threshold_amcnr;
+ val = setup.threshold_amcnr;
val = read_numeric(val, 1, 0, 1);
akc6955_set_thresh_amcnr((unsigned char)val);
break;
_CLS();
_LOCATE(0,0);
printstr("Stereo threshold:");
- val = threshold_fmstereo;
+ val = setup.threshold_fmstereo;
val = read_numeric(val, 1, 0, 1);
akc6955_set_thresh_fmstereo((unsigned char)val);
break;
_CLS();
_LOCATE(0,0);
printstr("BL Long:");
- val = read_numeric(backlight_long, 3, 0,1);
+ val = read_numeric(setup.backlight_long, 3, 0,1);
if(val > 999) val = 999;
- backlight_long = val;
+ setup.backlight_long = val;
break;
case charcode_f:
setup_help();
void main_menu(void)
{
unsigned char c;
- unsigned char p;
- unsigned char n;
unsigned int val;
- _CLS();
- _HOME();
- _LOCATE(0,0);
- printstr("Menu:F=HELP");
- _LOCATE(0,1);
- printstr("B=CANCEL");
- do {
- n = pollkeys(pollkeybuf, 60, 1);
- } while(n == 0);
- p = 0;
- c = pollkeybuf[0];
+ printhelp_2lines("Menu:F=HELP", "B=CANCEL");
+ c = pollkey_single(); // 1012ms
if(c == charcode_1){
// Band
setband_direct();
- } else if(c == charcode_2){
} else if(c == charcode_3){
// Band
setfreq_direct();
- } else if(c == charcode_4){
-
+ }else if(c == charcode_4){
+ on_call_userfreq();
+ // Scan
}else if(c == charcode_5){
- scan_start();
+ // scan_start();
+ // Scan
+ }else if(c == charcode_6){
+ on_set_userfreq();
// Scan
- } else if(c == charcode_6){
-
} else if(c == charcode_7){
menu_poweroff();
} else if(c == charcode_8){
_CLS();
_LOCATE(0,0);
printstr("Sig width:");
- val = threshold_width;
+ val = setup.threshold_width;
val = read_numeric(val, 1, 0, 1);
akc6955_set_thresh_width((unsigned char)val);
// Set NF
setup_menu();
} else if(c == charcode_a){
toggle_amfm();
- } else if(c == charcode_b){
- // Cancel
} else if(c == charcode_c){
// Set userband
set_userband();
} else if(c == charcode_d){
// Call userband
input_userband();
- } else if(c == charcode_e){
- // Backlight
-
} else if (c == charcode_f){
mainmenu_help();
// HELP