3 * Menu sub-routines: Memory Freq.
4 * Copyright (C) 2013-08-14 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.
31 #include "commondef.h"
33 #include "backlight.h"
36 void call_freqbank(unsigned int num)
40 unsigned char _userband;
41 unsigned int bank = num / USER_MEMORY_NUM;
42 unsigned int n = num % USER_MEMORY_NUM;
44 if(num >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) return;
46 if(bank != setup.pagenum){ // Swap memory
47 // save_frequencies();
48 load_frequencies(bank, 0x00);
51 _fm = freqset.memoryfreqs[n].fm;
52 _userband = freqset.memoryfreqs[n].band;
53 _band = _userband & 0x1f;
54 _userband = _userband >> 5;
57 setup.fm_userbandnum = _userband;
60 setup.am_userbandnum = _userband;
62 setup.memorynum = num;
63 akc6955_chg_fm(_fm, freqset.memoryfreqs[n].freq);
67 void set_freqbank(unsigned int num)
71 unsigned char _userband;
73 unsigned int bank = num / USER_MEMORY_NUM;
74 unsigned int n = num % USER_MEMORY_NUM;
76 if(num >= (USER_MEMORY_NUM * USER_MEMORY_BANKS)) return;
78 if(bank != setup.pagenum){ // Save now bank, and load using bank
80 load_frequencies(bank, 0x00);
85 _userband = setup.am_userbandnum;
88 _userband = setup.fm_userbandnum;
92 freqset.memoryfreqs[n].fm = _fm;
93 freqset.memoryfreqs[n].band = (_userband << 5) | (_band & 0x1f);
94 freqset.memoryfreqs[n].freq = _freq;
100 void on_call_userfreq(void)
102 unsigned long val = USER_MEMORY_NUM * USER_MEMORY_BANKS;
105 printstr("Mem: 000-");
106 print_numeric_nosupress(val - 1, 3);
107 val = read_numeric(val, 3, 4, 1);
108 if(val >= 0x80000000) return;
112 void on_set_userfreq(void)
114 unsigned long val = USER_MEMORY_NUM * USER_MEMORY_BANKS;
119 printstr("Set Mem: 000-");
120 print_numeric_nosupress(val - 1, 3);
121 val = read_numeric(val, 3, 4, 1);
122 if(val >= 0x80000000) return;
125 printstr("OK? A=OK ");
126 c = pollkey_single();
127 if(c != charcode_a) return;
132 static void disp_updown_lcd(void)
136 print_numeric_nosupress(setup.memorynum, 3);
144 static unsigned char renc_updown_userfreq(unsigned char dispf)
149 if((renc_dir == RENC_NONE) || (count == 0)) return dispf;
150 if(renc_dir == RENC_RIGHT) {
151 setup.memorynum += count;
152 } else if(renc_dir == RENC_LEFT) {
153 setup.memorynum = (setup.memorynum +
154 USER_MEMORY_NUM * USER_MEMORY_BANKS) - count;
158 setup.memorynum = setup.memorynum % (USER_MEMORY_NUM * USER_MEMORY_BANKS);
160 call_freqbank(setup.memorynum);
161 backlight_reset(charcode_f);
162 dispf = backlight_dec(0x00);
167 void on_updown_userfreq(void)
172 unsigned char _userband;
174 unsigned char dispf = 0xff;
175 unsigned int _ui_idle = setup.ui_idlecount / 23;
176 unsigned char _ui_pad = setup.ui_idlecount % 23;
177 unsigned char changef = 0x00;
179 if(_ui_idle == 0) _ui_idle = 1;
181 _freq = setup.amfreq;
182 _userband = setup.am_userbandnum;
183 _band = setup.amband;
185 _userband = setup.fm_userbandnum;
186 _band = setup.fmband;
187 _freq = setup.fmfreq;
192 dispf = renc_updown_userfreq(dispf);
196 c = pollkey_single_timeout(_ui_idle, 1); // 23*41 = 943ms
198 dispf = backlight_dec(dispf);
202 case charcode_7: // UP 1CH
206 case charcode_1: // Down 1CH
208 setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - 1;
210 case charcode_9: // Up CH FAST
212 setup.memorynum += 100;
214 case charcode_3: // Down CH FAST
216 setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - 100;
218 case charcode_8: // Up CH MID
220 setup.memorynum += USER_MEMORY_NUM;
222 case charcode_2: // Down CH MID
224 setup.memorynum = setup.memorynum + (USER_MEMORY_NUM * USER_MEMORY_BANKS) - USER_MEMORY_NUM;
226 case charcode_5: // Recall
229 case charcode_d: // Reset
231 setup.fmband = _band;
232 setup.fm_userbandnum = _userband;
233 setup.fmfreq = _freq;
235 setup.amband = _band;
236 setup.am_userbandnum = _userband;
237 setup.amfreq = _freq;
239 akc6955_chg_fm(_fm, _freq);
254 case charcode_e: // Set Light
265 setup.memorynum = setup.memorynum % (USER_MEMORY_NUM * USER_MEMORY_BANKS);
267 call_freqbank(setup.memorynum);
269 if(_ui_pad != 0) idle_time_ms(_ui_pad); // Pad 9ms, 1Loop = 1000ms.