4 * Copyright (C) 2013-06-10 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.
35 #include <pic18fregs.h> /* ONLY FOR PIC18x */
46 #include "lcd_acm1602.h"
51 #include "menu_memoryfreq.h"
54 #include "backlight.h"
57 static void setfreq_updown_amsub(void)
59 if(setup.amband >= AKC6955_BAND_AMEND) {
62 akc6955_set_amband(setup.amband);
63 setup.amfreq = setup.amfreq_bank[setup.amband];
64 // idle_time_62_5ms(); // 62.5ms
66 akc6955_mode3k(setup.am_mode3k);
67 akc6955_set_freq(setup.amfreq);
70 static void setfreq_updown_fmsub(void)
72 if(setup.fmband >= AKC6955_BAND_FMEND) {
75 akc6955_set_fmband(setup.fmband);
76 setup.fmfreq = setup.fmfreq_bank[setup.fmband];
77 // idle_time_62_5ms(); // 62.5ms
79 akc6955_set_freq(setup.fmfreq);
82 static void setband_updown(unsigned char updown)
85 if(setup.fm == 0){ // MW
86 band = setup.amband + 1;
87 if(setup.amband == AKC6955_BAND_AMUSER){
88 userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
90 setup.amfreq_bank[setup.amband] = setup.amfreq;
91 if(updown == 0) { // down
93 band = AKC6955_BAND_AMEND + 1;
98 switch(setup.amband) {
100 case AKC6955_BAND_MW2:
101 setup.am_mode3k = 0xff;
103 case AKC6955_BAND_AMUSER:
104 call_userband(setup.am_userbandnum);
107 setup.am_mode3k = 0x00;
110 setfreq_updown_amsub();
112 if(setup.fmband == AKC6955_BAND_FMUSER){
113 userband.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
115 band = setup.fmband + 1;
116 setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
117 if(updown == 0) { // down
119 band = AKC6955_BAND_FMEND + 1;
124 if(setup.fmband == AKC6955_BAND_FMUSER){
125 // setup.fmfreq = fm_usrbands[fm_userbandnum].freq;
126 call_userband(setup.fm_userbandnum);
128 setfreq_updown_fmsub();
132 unsigned char setfreq_renc_updown(unsigned char dispf)
137 switch(setup.fm_tunepitch & 3) {
148 freq = 8; // 200KHz excepts TV1/TV2.
149 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
154 freq = freq * renc_count;
156 if(setup.amband == AKC6955_BAND_MW2) {
157 freq = renc_count * 3;
163 if(freq != 0) { // WORKAROUND: IF STEP=0 then go maximum X-)
164 if(renc_dir == RENC_LEFT) {
165 akc6955_down_freq(freq);
166 } else if(renc_dir == RENC_RIGHT) {
167 akc6955_up_freq(freq);
170 acm1602_resume(LCD_I2CADDR);
173 backlight_reset(charcode_f);
181 void setfreq_updown(unsigned char ctlword)
185 backlight_reset(ctlword);
189 case charcode_8: // Up band
190 setband_updown(0xff);
192 case charcode_2: // Down band
193 setband_updown(0x00);
195 case charcode_6: // Up Middle;
196 case charcode_4: // Down Middle;
197 freq = 9; // 27KHz@3K/9KStep.
199 switch(setup.fm_tunepitch & 3) {
201 freq = 20; // 500KHz excepts TV1/TV2.
202 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
210 } else if(setup.am_mode3k == 0){
213 if(ctlword == charcode_6) {
214 akc6955_up_freq(freq); // 225 or 27 or 45KHz
216 akc6955_down_freq(freq); // 225 or 27 or 45KHz
219 case charcode_9: // Up Fast;
220 case charcode_7: // Down Fast;
221 freq = 33; // 99KHz@3K/9KStep.
223 switch(setup.fm_tunepitch & 3) {
225 freq = 80; // 2MHz excepts TV1/TV2.
226 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
234 } else if(setup.am_mode3k == 0){
237 if(ctlword == charcode_9) {
238 akc6955_up_freq(freq); // 825 or 90 or 165KHz
240 akc6955_down_freq(freq); // 825 or 90 or 165KHz
243 case charcode_3: // Up Slow;
244 case charcode_1: // Down Slow;
246 switch(setup.fm_tunepitch & 3) {
257 freq = 8; // 200KHz excepts TV1/TV2.
258 if((setup.fmband == AKC6955_BAND_TV1) || (setup.fmband == AKC6955_BAND_TV2)) {
264 freq = 1; // 5KHz or 3KHz
265 if(setup.amband == AKC6955_BAND_MW2) {
267 } else if((setup.amband == AKC6955_BAND_MW3) || (setup.amband == AKC6955_BAND_MW4)) {
271 if(ctlword == charcode_1) {
272 akc6955_down_freq(freq);
274 akc6955_up_freq(freq);
277 case charcode_0: // Step
278 setup.threshold_width++;
279 akc6955_set_thresh_width(setup.threshold_width);
282 case charcode_a: // Toggle FM
287 on_updown_userfreq();