4 * Copyright (C) 2013-06-21 K.Ohta <whatisthis.sowhat ai gmail.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2,
10 * or (at your option) any later version.
11 * This library / program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 * See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this library; see the file COPYING. If not, write to the
18 * Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
21 * As a special exception, if you link this(includeed from sdcc) library
22 * with other files, some of which are compiled with SDCC,
23 * to produce an executable, this library does not by itself cause
24 * the resulting executable to be covered by the GNU General Public License.
25 * This exception does not however invalidate any other reasons why
26 * the executable file might be covered by the GNU General Public License.
30 #include "menu_memoryfreq.h"
32 #include "commondef.h"
33 #include "backlight.h"
35 void toggle_amfm(void)
40 setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
41 // akc6955_set_amband(amband);
42 freq = setup.amfreq_bank[setup.amband];
45 setup.amfreq_bank[setup.amband] = setup.amfreq;
46 // akc6955_set_fmband(fmband);
47 freq = setup.fmfreq_bank[setup.fmband];
49 akc6955_chg_fm(setup.fm, freq);
51 // akc6955_set_freq(freq);
56 void set_stereomode(void)
60 if(setup.stereo == 0x00){
61 mode.b0 = 1; // Force mono
62 } else if(setup.stereo < 0x80){
63 mode.b1 = 1; // Force stereo
65 akc6955_set_stereomode(mode.byte);
71 if(setup.stereo == 0xff) {// Force Mono
73 } else if(setup.stereo == 0x00) { //Mono->Stereo
75 } else { // Default, Stereo->auto
87 unsigned char dispf = 0xff;
93 d = akc6955_getvolumemode();
100 print_numeric_nosupress(setup.volume, 2);
104 _PUTCHAR('0' + (setup.prevolume & 3));
106 if(setup.lowboost == 0x00){
113 c = pollkey_single_timeout(41, 1); // 943ms
115 dispf = backlight_dec(dispf);
120 if(setup.volume > 63) setup.volume = 63;
121 akc6955_setvolume(setup.volume);
125 if(setup.volume < 23) setup.volume = 23;
126 akc6955_setvolume(setup.volume);
136 akc6955_setvolumemode(fact);
137 akc6955_setvolume(setup.volume);
141 if(setup.prevolume > 3) setup.prevolume = 0;
142 akc6955_set_prevolume(setup.prevolume);
143 akc6955_setvolume(setup.volume);
147 if(setup.lowboost == 0x00){
150 setup.lowboost = fact;
151 akc6955_set_lowboost(setup.lowboost);
152 akc6955_setvolume(setup.volume);
157 if(setup.volume < 24){
162 idle_time_ms(9); // Pad.
167 void scan_start(void)
176 c = pollkey_single_timeout(20, 0) ; // 23*20 = 460ms
177 if(chk_powerbutton() != 0) shutdown(1);
180 if((akc6955_chk_donescan() == 0) && (scanflag != 0)){
184 printstr("Scan A/4/6/F");
187 } while(c == charcode_null);
192 akc6955_do_scan(0xff);
199 akc6955_abort_scan();
213 void setfreq_direct(void)
218 printstr("Set Freq:");
224 val = read_numeric(val, 5, 7, 1);
230 val = read_numeric(val, 5, 7, 1);
233 akc6955_set_freq(val);
236 void setband_direct(void)
243 printstr("Set Band:FM#");
244 band = setup.fmband & 7;
245 setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
246 setup.fmband = read_numeric(band, 2, 7, 1);
247 setup.fmfreq = setup.fmfreq_bank[setup.fmband];
248 akc6955_set_fmband(setup.fmband);
251 printstr("Set Band:AM#");
252 band = setup.amband & 0x1f;
253 setup.amfreq_bank[setup.amband] = setup.amfreq;
254 setup.amband = read_numeric(band, 2, 7, 1);
255 setup.amfreq = setup.amfreq_bank[setup.amband];
257 case AKC6955_BAND_LW:
258 case AKC6955_BAND_MW2:
259 setup.am_mode3k = 0xff;
261 case AKC6955_BAND_MW1:
262 case AKC6955_BAND_MW3:
263 case AKC6955_BAND_MW4:
264 setup.am_mode3k = 0x00;
270 akc6955_set_amband(setup.amband);
274 akc6955_set_freq(freq);
277 void call_userband(unsigned char num)
283 unsigned char mode3k;
287 if(num >= USER_BAND_NUM) return;
289 p = &(setup.am_usrbands[num]);
291 p = &(setup.fm_usrbands[num]);
298 ch = ((freq - 3000) / 5) * 2;
299 setup.fmband = AKC6955_BAND_FMUSER;
302 if(mode3k != 0) q = 3;
304 setup.amband = AKC6955_BAND_AMUSER;
321 akc6955_set_userband(start, end, ch, mode3k);
324 void set_userband(void)
326 unsigned int from,to;
329 unsigned char mode3k;
334 printstr("User ch:");
335 c = pollkey_single();
337 if(c > charcode_0) return;
338 if(c < charcode_1) return;
339 if(c == charcode_0) {
342 c = c - charcode_1 + 1;
344 if(c >= USER_BAND_NUM) return;
347 from = setup.fm_usrbands[c].start * 80 + 3000; // 32*25/10
348 to = setup.fm_usrbands[c].stop * 80 + 3000;
353 print_numeric_nosupress(c, 1);
356 from = read_numeric(from, 5, 7, 1);
359 to = read_numeric(to, 5, 7, 1);
360 setup.fm_usrbands[c].start = (from - 3000) / 80;
361 setup.fm_usrbands[c].stop = (to - 3000) / 80;
362 setup.fm_usrbands[c].freq = from * 80 + 3000;
363 setup.fm_userbandnum = c;
365 mode3k = setup.am_usrbands[c].mode3k;
367 if(mode3k == 0) pp = 160; // 5*32
368 from = setup.am_usrbands[c].start * pp;
369 to = setup.am_usrbands[c].stop * pp;
373 print_numeric_nosupress(c, 1);
376 printstr("0=3k 1=5k");
377 cc = pollkey_single();
378 if(cc == charcode_0){
381 } else if(cc = charcode_1) {
388 print_numeric_nosupress(c, 1);
391 from = read_numeric(from, 5, 7, 1);
394 to = read_numeric(to, 5, 7, 1);
395 setup.am_usrbands[c].start = from / pp;
396 setup.am_usrbands[c].stop = to / pp;
397 setup.am_usrbands[c].mode3k = mode3k;
398 setup.am_usrbands[c].freq = from * pp;
399 setup.am_userbandnum = c;
405 void input_userband(void)
409 c = printhelp_2lines("User Band", " #");
412 if((c >= charcode_a) && (c <= charcode_f)){
415 if(c == charcode_0) {
418 setup.fm_userbandnum = 0;
420 setup.am_userbandnum = 0;
424 c = c - charcode_1 + 1;
425 if(c < USER_BAND_NUM) {
428 setup.fm_userbandnum = c;
430 setup.am_userbandnum = c;
435 idle(setup.ui_idlecount);
441 void menu_poweroff(void)
444 c = printhelp_2lines("Poweroff", "A=Yes");
445 if(c == charcode_a) {
450 void setup_akc6955(void)
452 akc6955_writecmd(AKC6955_POWER, 0xc0); // You musto *not* mute, set b2 to '0".
453 akc6955_writecmd(AKC6955_VOLUME, 0xc0); // You must select to radio(b1 = '0).
455 akc6955_set_amband(setup.amband);
456 if(setup.amband == AKC6955_BAND_AMUSER) call_userband(setup.am_userbandnum);
457 setup.amfreq = setup.amfreq_bank[setup.amband];
458 akc6955_chg_fm(0, setup.amfreq); // Set to AM
459 akc6955_set_freq(setup.amfreq);
461 akc6955_set_fmband(setup.fmband);
462 if(setup.fmband == AKC6955_BAND_FMUSER) call_userband(setup.fm_userbandnum);
463 setup.fmfreq = setup.fmfreq_bank[setup.fmband];
464 akc6955_chg_fm(0xff, setup.fmfreq); // Set to AM
465 akc6955_set_freq(setup.fmfreq);
466 }// Dummy, TBS (954KHz)
467 akc6955_set_power(0xff); // Power ON
468 akc6955_setvolume(36); // Temporally
469 akc6955_set_thresh_fmcnr(setup.threshold_fmcnr);
470 akc6955_set_thresh_amcnr(setup.threshold_amcnr);
471 akc6955_set_thresh_width(setup.threshold_width);
472 akc6955_set_thresh_fmstereo(setup.threshold_fmstereo);
473 akc6955_setvolumemode(0);
474 akc6955_set_lowboost(setup.lowboost);
481 c = printhelp_2lines("Save settings", "A=Yes");
482 if(c == charcode_a) {
490 c = printhelp_2lines("Load settings", "A=Yes B=Init");
491 if(c == charcode_a) {
496 c = printhelp_2lines("X) Load Error", "A=Fix");
503 } else if(c == charcode_b){
509 void setup_menu(void)
514 c = printhelp_2lines("Setup F=HELP", "5=Return");
519 printstr("BL Level:");
520 val = read_numeric(setup.backlight_level, 3, 0,1);
521 if(val > 255) val = 255;
522 if(val < 10) val = 15;
523 setup.backlight_level = (unsigned char)val;
528 printstr("FM Bandwidth:");
529 akc6955_get_fmbandwidth(val);
530 val = read_numeric(val, 1, 0, 1) & 3;
531 setup.fmbandwidth = (unsigned char)val;
532 akc6955_set_fmbandwidth(setup.fmbandwidth);
539 printstr("FM-CNR threshold:");
540 val = setup.threshold_fmcnr;
541 val = read_numeric(val, 1, 0, 1);
542 akc6955_set_thresh_fmcnr((unsigned char)val);
547 printstr("AM-CNR threshold:");
548 val = setup.threshold_amcnr;
549 val = read_numeric(val, 1, 0, 1);
550 akc6955_set_thresh_amcnr((unsigned char)val);
555 printstr("Stereo threshold:");
556 val = setup.threshold_fmstereo;
557 val = read_numeric(val, 1, 0, 1);
558 akc6955_set_thresh_fmstereo((unsigned char)val);
575 printstr("BL Long:");
576 val = read_numeric(setup.backlight_long, 3, 0,1);
577 if(val > 999) val = 999;
578 setup.backlight_long = val;
588 * Main Menu : initial-screen -> 'F'.
595 printhelp_2lines("Menu:F=HELP", "B=CANCEL");
596 c = pollkey_single(); // 1012ms
600 } else if(c == charcode_3){
603 }else if(c == charcode_4){
606 }else if(c == charcode_5){
609 }else if(c == charcode_6){
612 } else if(c == charcode_7){
614 } else if(c == charcode_8){
617 } else if(c == charcode_9){
620 printstr("Sig width:");
621 val = setup.threshold_width;
622 val = read_numeric(val, 1, 0, 1);
623 akc6955_set_thresh_width((unsigned char)val);
625 } else if(c == charcode_0){
628 } else if(c == charcode_a){
630 } else if(c == charcode_c){
633 } else if(c == charcode_d){
636 } else if (c == charcode_f){