[UI] Set limit of frequencies.
__bitops_t b;
unsigned int i = ch;
unsigned char comp;
+ unsigned int start, stop;
do { // Wait for before completed
comp = akc6955_chk_donescan();
band = 0;
if(!f.b6){
akc6955_get_amband(band);
+ 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;
+ } else {
+ start = start / 5;
+ stop = stop / 5;
+ }
+ }
+ } else {
+ akc6955_get_fmband(band);
+ start = ((fmbands[band].start - 3000) * 2) / 5;
+ stop = ((fmbands[band].end - 3000) * 2) / 5;;
+ if(band == AKC6955_BAND_FMUSER){
+ start = userband.fm_usrbands[setup.fm_userbandnum].start * 32;
+ stop = userband.fm_usrbands[setup.fm_userbandnum].stop * 32;
+ }
}
-
- if(band == AKC6955_BAND_MW2){
- // BAND=AM && MW2
- i = ch / 3; // On MW2, Channnel must be multiple of 3.
- i = i * 3; // i = (i/3) * 3
- }
- if(i > 0x1fff) i = 0x1fff;
- //i = ch & 0x1fff;
+ if(i > stop) i = stop; // ADD
+ if(i < start) i = start;
b.byte = i & 0xff;
akc6955_writecmd(AKC6955_CH_LO, b.byte);
if(f.b6) { // FM
akc6955_get_fmband(band);
// band &= 7;
- if(band == AKC6955_BAND_FMUSER){
- start = userband.fm_usrbands[setup.fm_userbandnum].start * 32;
- stop = userband.fm_usrbands[setup.fm_userbandnum].stop * 32;
- } else {
- start = fmbands[band].start;
- stop = fmbands[band].end;
- }
- ch = freq - 3000;
- ch = (ch << 2) / 10;
+ ch = ((freq - 3000) * 4) / 10;
} else {
akc6955_get_amband(band);
// if(band >= AKC6955_BAND_AMEND) band = AKC6955_BAND_AMEND - 1;
- if(band == AKC6955_BAND_AMUSER){
- start = userband.am_usrbands[setup.am_userbandnum].start * 32;
- stop = userband.am_usrbands[setup.am_userbandnum].stop * 32;
- } else {
- start = ambands[band].start;
- stop = ambands[band].end;
- }
mode3k.byte = akc6955_readcmd(AKC6955_CNR_AM);
if(band == AKC6955_BAND_MW2) {
ch = (freq / 9) * 3; // See datasheet.
- } else if(band == AKC6955_BAND_MW3) {
- ch = freq / 5;
} else if(mode3k.b7){
ch = freq / 3;
} else {
ch = freq / 5;
}
}
- if(freq < start) freq = start;
- if(freq >= stop) freq = stop - 1;
akc6955_set_tune(mode3k.b7, ch);
}
{
unsigned int freq;
__bitops_t mode3k;
+ unsigned int start;
freq = akc6955_get_channel();
if(freq <= step) return;
unsigned long band;
unsigned char band2;
unsigned int freq;
+ unsigned char mode3k;
+
_CLS();
_LOCATE(0,0);
if(setup.fm != 0){
printstr("Set Band:FM#");
band2 = setup.fmband & 7;
+ if(band2 == AKC6955_BAND_FMUSER) {
+ userband.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
+ }
setup.fmfreq_bank[setup.fmband] = setup.fmfreq;
band2 = pollkey_numeric(band2);
- if(band2 < 8) {
- setup.fmband = band2 & 7;
- setup.fmfreq = setup.fmfreq_bank[setup.fmband];
- akc6955_set_fmband(setup.fmband);
- freq = setup.fmfreq;
+ band2 &= 7;
+ if(band2 == AKC6955_BAND_FMUSER) {
+ call_userband(setup.fm_userbandnum);
+ freq = userband.fm_usrbands[setup.fm_userbandnum].freq;
+ } else {
+ freq = setup.fmfreq_bank[band2];
}
- akc6955_set_fmband(setup.fmband);
- freq = setup.fmfreq;
+ setup.fmband = band2;
+ akc6955_set_fmband(band2);
+ setup.fmfreq = freq;
} else {
printstr("Set Band:AM#");
band = setup.amband & 0x1f;
- setup.amfreq_bank[setup.amband] = setup.amfreq;
+ setup.amfreq_bank[band] = setup.amfreq;
+ if(band == AKC6955_BAND_AMUSER) {
+ userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
+ }
band = read_numeric(band, 2, 7, 1);
if((band & 0x80000000) != 0) return;
- setup.amband = band & 0x1f;
- setup.amfreq = setup.amfreq_bank[setup.amband];
+ band &= 0x1f;
+ setup.amband = band;
+ freq = 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;
+ mode3k = 0xff;
break;
+ case AKC6955_BAND_AMUSER:
+ call_userband(setup.am_userbandnum);
+ mode3k = userband.am_usrbands[setup.am_userbandnum].mode3k;
+ freq = userband.am_usrbands[setup.am_userbandnum].freq;
+ break;
default:
+ mode3k = 0x00;
break;
}
-
- akc6955_set_amband(setup.amband);
- freq = setup.amfreq;
+ akc6955_set_amband(band);
+ setup.amfreq = freq;
+ setup.am_mode3k = mode3k;
}
akc6955_do_tune();
akc6955_set_freq(freq);
/*
* main.c
*/
+
+typedef struct {
+ unsigned char mode3k; // mode3k if am
+ unsigned char start;
+ unsigned char stop;
+ unsigned int freq;
+ unsigned char reserve[3];
+} _userband_t;
+
+#define USER_BAND_NUM 10
+typedef struct {
+ unsigned int magic;
+ unsigned int version;
+ _userband_t am_usrbands[USER_BAND_NUM];
+ _userband_t fm_usrbands[USER_BAND_NUM];
+ unsigned int checksum;
+} __userband_t_t;
+
// Frequencyset of 1Sector.
// Below v1.0.
typedef struct {
unsigned char threshold_fmcnr; // Reg 0x08
unsigned char threshold_width; // Reg 0x08
unsigned char threshold_fmstereo; // Reg 0x08
-// banddesc am_userband_freq[USER_BAND_NUM];
-// banddesc fm_userband_freq[USER_BAND_NUM];
+ banddesc am_userband_freq[USER_BAND_NUM];
+ banddesc fm_userband_freq[USER_BAND_NUM];
unsigned char stereo;
unsigned char volume;
unsigned char prevolume;
unsigned int pagenum;
} __radioset_t;
-typedef struct {
- unsigned char mode3k; // mode3k if am
- unsigned char start;
- unsigned char stop;
- unsigned int freq;
- unsigned char reserve[3];
-} _userband_t;
-
-#define USER_BAND_NUM 10
-typedef struct {
- unsigned int magic;
- unsigned int version;
- _userband_t am_usrbands[USER_BAND_NUM];
- _userband_t fm_usrbands[USER_BAND_NUM];
- unsigned int checksum;
-} __userband_t_t;
-
extern __radioset_t setup;
extern __freqset_t freqset;
extern __freqset_t freqset_temp;
extern __userband_t_t userband;
+ extern const banddesc ambands[19];
+ extern const banddesc fmbands[8];
extern unsigned char scanflag;
extern unsigned char stereoflag;
const banddesc ambands[19] = {
- {150,285},
+// {150,285},
+ {100,522}, // Extend LW.
{520,1710},
{522,1620},
{520,1710},
for(i = 0; i < USER_BAND_NUM; i++){
userband.am_usrbands[i].start = 0x19;
userband.am_usrbands[i].stop = 0x32;
- }
- for(i = 0; i < USER_BAND_NUM; i++){
userband.fm_usrbands[i].start = 0x19;
userband.fm_usrbands[i].stop = 0x32;
}
recv_signal = 103;
battlevel = 0;
batlevel_6955 = 330; // 3.30V(temporally).
- if(setup.amband > 18) setup.amband = 18;
- if(setup.fmband > 7) setup.fmband = 7;
- if(setup.am_userbandnum >= USER_BAND_NUM) setup.am_userbandnum = USER_BAND_NUM - 1;
- if(setup.fm_userbandnum >= USER_BAND_NUM) setup.fm_userbandnum = USER_BAND_NUM - 1;
setup.volume = 36;
setup.prevolume = 3;
setup.fmbandwidth = 0;
#include "power.h"
#include "commondef.h"
#include "backlight.h"
-
+#include "eeprom_util.h"
void call_userband(unsigned char num)
{
unsigned char start;
unsigned char end;
unsigned char mode3k;
- unsigned char freq2;
+ unsigned int q;
_userband_t *p;
if(num >= USER_BAND_NUM) return;
- p = &(userband.am_usrbands[num]);
if(setup.fm != 0){
p = &(userband.fm_usrbands[num]);
- }
- freq = p->freq;
- start = p->start;
- end = p->stop;
- mode3k = p->mode3k;
- if(setup.fm != 0) {
+ freq = p->freq;
+ mode3k = 0;
ch = ((freq - 3000) / 5) * 2;
setup.fmband = AKC6955_BAND_FMUSER;
+ setup.fmfreq = freq;
} else {
- unsigned int q = 5;
+ p = &(userband.am_usrbands[num]);
+ freq = p->freq;
+ mode3k = p->mode3k;
+ q = 5;
if(mode3k != 0) q = 3;
ch = freq / q;
setup.amband = AKC6955_BAND_AMUSER;
+ setup.amfreq = freq;
+ setup.am_mode3k = mode3k;
}
+ start = p->start;
+ end = p->stop;
- if(start > end) {
- unsigned char tmp;
- tmp = start;
- start = end;
- end = tmp;
- }
- freq2 = ch / 32;
- if(freq2 > end) {
- ch = end * 32;
- }
- if(freq2 < start){
- ch = start * 32;
- }
akc6955_set_userband(start, end, ch, mode3k);
}
void set_userband(void)
{
- unsigned long from,to;
+ unsigned long from,to, tmp;
unsigned char c;
unsigned char pp;
unsigned char mode3k;
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
if((to & 0x80000000) != 0) goto _l0;
+ if(from > to){
+ tmp = to;
+ to = from;
+ from = tmp;
+ }
userband.fm_usrbands[c].start = (from - 3000) / 80;
- userband.fm_usrbands[c].stop = (to - 3000) / 80;
+ userband.fm_usrbands[c].stop = (to - 3000) / 80 + 1;
userband.fm_usrbands[c].freq = from;
setup.fm_userbandnum = c;
} else {
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
if((to & 0x80000000) != 0) goto _l0;
+ if(from > to){
+ tmp = to;
+ to = from;
+ from = tmp;
+ }
userband.am_usrbands[c].start = from / pp;
- userband.am_usrbands[c].stop = to / pp;
+ userband.am_usrbands[c].stop = to / pp + 1;
userband.am_usrbands[c].mode3k = mode3k;
userband.am_usrbands[c].freq = from;
setup.am_userbandnum = c;
}
+ save_userbands();
call_userband(c);
_l0:
_CLS();
void input_userband(void)
{
unsigned char c;
- do{
- c = printhelp_2lines("User Band", " #");
- if((c >= charcode_a) && (c <= charcode_f)){
- break;
- }
- if(c == charcode_0) {
- _PUTCHAR('0');
- if(setup.fm != 0){
- setup.fm_userbandnum = 0;
+ char d;
+ c = printhelp_2lines("User Band", " #");
+ if((c > charcode_a) && (c <= charcode_f)){
+ goto _l0;
+ }
+ if(c == charcode_a){
+ d = load_userbands();
+ if(d < 0) format_userbands();
+
} else {
- setup.am_userbandnum = 0;
- }
- call_userband(0);
- } else {
- c = c - charcode_1 + 1;
- if(c < USER_BAND_NUM) {
- _PUTCHAR(c + '0');
+ c = c % 10;
+ _PUTCHAR('0' + c);
if(setup.fm != 0){
- setup.fm_userbandnum = c;
+ setup.fm_userbandnum = c;
} else {
setup.am_userbandnum = c;
}
call_userband(c);
}
- }
- idle(setup.ui_idlecount);
- } while(1);
+_l0:
_CLS();
}
#
-#Tue Sep 24 14:03:48 JST 2013
+#Wed Sep 25 08:07:51 JST 2013
default.languagetoolchain.dir=/opt/microchip/xc8/v1.20/bin
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=1c49f19f6a43b876c317e0d8d41c0854
default.languagetoolchain.version=1.20
if(save != 0) {
save_eeprom();
-// save_frequencies();
+ save_userbands();
}
lcd_setbacklight(0, 0);
set_powerlamp(0);
default:
break;
}
- if(setup.amband == AKC6955_BAND_AMUSER){
-// amfreq = am_usrbands[am_userbandnum].freq;
- call_userband(setup.am_userbandnum);
- }
setfreq_updown_amsub();
} else { // FM
if(setup.fmband == AKC6955_BAND_FMUSER){
void setfreq_updown(unsigned char ctlword)
{
unsigned int freq;
+ unsigned int start, end;
backlight_reset(ctlword);
freq = 1; // 5KHz or 3KHz
if(setup.amband == AKC6955_BAND_MW2) {
freq = 3; // 9KHz
- } else if(setup.amband == AKC6955_BAND_MW3) {
- freq = 2; // 10KHz
- } else if(setup.amband == AKC6955_BAND_MW4) {
+ } else if((setup.amband == AKC6955_BAND_MW3) || (setup.amband == AKC6955_BAND_MW4)) {
freq = 2; // 10KHz
}
}