akc6955_get_fmband(band);
// band &= 7;
if(band == AKC6955_BAND_FMUSER){
- start = setup.fm_usrbands[setup.fm_userbandnum].start * 32;
- stop = setup.fm_usrbands[setup.fm_userbandnum].stop * 32;
+ 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;
akc6955_get_amband(band);
// if(band >= AKC6955_BAND_AMEND) band = AKC6955_BAND_AMEND - 1;
if(band == AKC6955_BAND_AMUSER){
- start = setup.am_usrbands[setup.am_userbandnum].start * 32;
- stop = setup.am_usrbands[setup.am_userbandnum].stop * 32;
+ 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;
/*
* Band defines
*/
- typedef struct {
+typedef struct {
unsigned int start;
unsigned int end;
} banddesc;
extern void check_frequencies(void);
extern void save_frequencies(void);
extern char load_frequencies(unsigned int page, unsigned char check_only);
+extern char load_userbands(void);
+extern void save_userbands(void);
+extern void format_userbands(void);
+/*
+ * Constants
+ */
+#define EEPROM_INTSET_MAGIC 0x1298
+#define EEPROM_FREQSET_MAGIC 0xfabc
+#define EEPROM_BANDSET_MAGIC 0xfd0f
+#define EEPROM_SET_ADDR 0x0000
+#define EEPROM_BANDSET_ADDR 0x0100
+#define EEPROM_FREQSET_ADDR 0x0200
#ifdef __cplusplus
}
*p = 0;
*sum = 0;
// Magic word
- writeword_eeprom(p, sum, 0x1298);
+ writeword_eeprom(p, sum, EEPROM_INTSET_MAGIC);
// amfreq
for(i = 0; i < sizeof(__radioset_t); i++) {
writebyte_eeprom(p, sum, *q);
/*
* External I2C Map:
* 0x0000
- * 0x00FF : User settings(Reserved not use)
+ * 0x01FF : User settings(Reserved not use)
* 0x0100
- * 0x03ff : User bands
- * 0x0400
+ * 0x01ff : User bands
+ * 0x0200
* 0x0fff : User frequencies ( 12*2*28 = 672chs Max.)
* 0x1000- : Reserve.
*/
__freqset_t *p;
unsigned int sum;
- unsigned int addr = (page << 7) + 512;
+ unsigned int addr = (page << 7) + EEPROM_FREQSET_ADDR;
unsigned char *q;
unsigned char *r;
unsigned char c;
// Pass 1 Read OK?
if(c == 0x00) return -2;
// Pass 1 check magic
- if(freqset_temp.magic != 0xfabc) return -3;
+ if(freqset_temp.magic != EEPROM_FREQSET_MAGIC) return -3;
// Pass 2 check sum
sum = calcsum_frequencies(&freqset_temp, 0xa5a5);
if(sum != freqset_temp.checksum) return -4;
void save_frequencies(void)
{
unsigned char c;
- unsigned int addr = (setup.pagenum <<7) + 512;
+ unsigned int addr = (setup.pagenum <<7) + EEPROM_FREQSET_ADDR;
__freqset_t *p = &freqset;
unsigned char i;
unsigned int sum;
if(setup.pagenum > USER_MEMORY_BANKS) return; // Address Error
// Pass 0 Calc checksum
- freqset.magic = 0xfabc;
+ freqset.magic = EEPROM_FREQSET_MAGIC;
freqset.version = 0x0001;
sum = calcsum_frequencies(&freqset, 0xa5a5);
freqset.checksum = sum;
unsigned char i;
unsigned int sum;
- freqset_temp.magic = 0xfabc;
+ freqset_temp.magic = EEPROM_FREQSET_MAGIC;
freqset_temp.version = 0x0001;
for(i = 0; i < USER_MEMORY_NUM; i++){
freqset_temp.memoryfreqs[i].band = AKC6955_BAND_MW2;
sum = calcsum_frequencies(&freqset_temp, 0xa5a5);
freqset_temp.checksum = sum;
- i = i2c_eeprom_burstwrite(I2CEEPROM_ADDR, (page << 7)+ 512, (unsigned char *)(&freqset_temp), sizeof(__freqset_t));
+ i = i2c_eeprom_burstwrite(I2CEEPROM_ADDR, (page << 7)+ EEPROM_FREQSET_ADDR, (unsigned char *)(&freqset_temp), sizeof(__freqset_t));
}
void check_frequencies(void)
_HOME();
if(load_frequencies(i, 0xff) < 0){
- printstr("Format:");
- print_numeric_nosupress(i, 2);
+// printstr("Format:");
+// print_numeric_nosupress(i, 2);
_HOME();
format_frequencies(i);
}
}
+ if(load_userbands() < 0) {
+ format_userbands();
+ }
}
+static unsigned int calcsum_userband(__userband_t_t *p, unsigned int start)
+{
+ unsigned int sum = start;
+ unsigned char *q = (unsigned char *)p;
+ unsigned char c;
+ unsigned char i;
+
+ for(i = 0; i < (sizeof(__userband_t_t) - 2); i++){
+ c = *q;
+ q++;
+ sum = sum + c;
+ }
+ return sum;
+}
+
+char load_userbands(void)
+{
+
+ __userband_t_t *p = &userband;
+ unsigned int sum;
+ unsigned int addr = EEPROM_BANDSET_ADDR;
+ unsigned char c;
+
+// if(addr > 0x0fff) return -1; // Address error
+ c = i2c_eeprom_burstread(I2CEEPROM_ADDR, addr, (unsigned char *)p, sizeof(__userband_t_t));
+ // Pass 1 Read OK?
+ if(c == 0x00) return -2;
+ // Pass 1 check magic
+ if(p->magic != EEPROM_BANDSET_MAGIC) return -3;
+ // Pass 2 check sum
+ sum = calcsum_userband(p, 0x5a5a);
+ if(sum != p->checksum) return -4;
+ return 0;
+}
+
+void save_userbands(void)
+{
+ unsigned char c;
+ unsigned int addr = EEPROM_BANDSET_ADDR;
+ __userband_t_t *p = &userband;
+ unsigned char i;
+ unsigned int sum;
+
+ // Pass 0 Calc checksum
+ userband.magic = EEPROM_FREQSET_MAGIC;
+ userband.version = 0x0001;
+ sum = calcsum_userband(&userband, 0x5a5a);
+ userband.checksum = sum;
+ // Pass 1 write to rom.
+ c = i2c_eeprom_burstwrite(I2CEEPROM_ADDR, addr, (unsigned char *)p, sizeof(__userband_t_t));
+ return;
+}
+
+void format_userbands(void)
+{
+ unsigned char i;
+ for(i = 0; i < USER_BAND_NUM; i++) {
+ userband.am_usrbands[i].start = 0x19;
+ userband.am_usrbands[i].stop = 0x32;
+ userband.am_usrbands[i].freq = 1216; //0x32 - (0x32-0x19) / 2 *32
+ userband.am_usrbands[i].mode3k = 0;
+ }
+ for(i = 0; i < USER_BAND_NUM; i++) {
+ userband.fm_usrbands[i].start = 0x19;
+ userband.fm_usrbands[i].stop = 0x32;
+ userband.fm_usrbands[i].freq = 1216; //0x32 - (0x32-0x19) / 2 *32
+ userband.fm_usrbands[i].mode3k = 0;
+ }
+}
+
+
unsigned char load_eeprom(void)
{
unsigned int p[1];
sum[0] = 0;
// Magic word
magic = readword_eeprom(p, sum);
- if(magic != 0x1298) return 0x01; // NO MAGICWORD
+ if(magic != EEPROM_INTSET_MAGIC) return 0x01; // NO MAGICWORD
// amfreq
for(i = 0; i < sizeof(__radioset_t); i++ ){
*q = readbyte_eeprom(p, sum);
#ifdef __cplusplus
extern "C" {
#endif
-#define USER_BAND_NUM 3
- typedef struct {
- unsigned char mode3k; // mode3k if am
- unsigned char start;
- unsigned char stop;
- unsigned int freq;
- } _userband_t;
+
#define USER_MEMORY_NUM 28
#define USER_MEMORY_BANKS 24
unsigned char threshold_fmcnr; // Reg 0x08
unsigned char threshold_width; // Reg 0x08
unsigned char threshold_fmstereo; // Reg 0x08
- _userband_t am_usrbands[USER_BAND_NUM];
- _userband_t fm_usrbands[USER_BAND_NUM];
- 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 ui_idlecount;
unsigned int memorynum;
unsigned char fm_tunepitch;
-// _memoryfreq_t memoryfreqs[USER_MEMORY_NUM];
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 unsigned char scanflag;
extern unsigned char stereoflag;
__radioset_t setup;
__freqset_t freqset;
__freqset_t freqset_temp;
+__userband_t_t userband;
unsigned char scanflag;
setup.threshold_fmstereo = 0;
setup.threshold_width = 0;
for(i = 0; i < USER_BAND_NUM; i++){
- setup.am_usrbands[i].start = 0x19;
- setup.am_usrbands[i].stop = 0x32;
+ userband.am_usrbands[i].start = 0x19;
+ userband.am_usrbands[i].stop = 0x32;
}
for(i = 0; i < USER_BAND_NUM; i++){
- setup.fm_usrbands[i].start = 0x19;
- setup.fm_usrbands[i].stop = 0x32;
+ userband.fm_usrbands[i].start = 0x19;
+ userband.fm_usrbands[i].stop = 0x32;
}
for(i =0; i < AKC6955_BAND_AMEND; i++){
setup.amfreq_bank[i] = ((ambands[i].end - ambands[i].start) / 2) + ambands[i].start;
if(num >= USER_BAND_NUM) return;
- p = &(setup.am_usrbands[num]);
+ p = &(userband.am_usrbands[num]);
if(setup.fm != 0){
- p = &(setup.fm_usrbands[num]);
+ p = &(userband.fm_usrbands[num]);
}
freq = p->freq;
start = p->start;
if(c >= USER_BAND_NUM) return;
if(setup.fm != 0){
- from = setup.fm_usrbands[c].start * 80 + 3000; // 32*25/10
- to = setup.fm_usrbands[c].stop * 80 + 3000;
+ from = userband.fm_usrbands[c].start * 80 + 3000; // 32*25/10
+ to = userband.fm_usrbands[c].stop * 80 + 3000;
_CLS();
_LOCATE(0,0);
printstr("FM#");
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
if((to & 0x80000000) != 0) goto _l0;
- setup.fm_usrbands[c].start = (from - 3000) / 80;
- setup.fm_usrbands[c].stop = (to - 3000) / 80;
- setup.fm_usrbands[c].freq = from;
+ userband.fm_usrbands[c].start = (from - 3000) / 80;
+ userband.fm_usrbands[c].stop = (to - 3000) / 80;
+ userband.fm_usrbands[c].freq = from;
setup.fm_userbandnum = c;
} else {
- mode3k = setup.am_usrbands[c].mode3k;
+ mode3k = userband.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;
+ from = userband.am_usrbands[c].start * pp;
+ to = userband.am_usrbands[c].stop * pp;
_CLS();
_LOCATE(0,0);
printstr("AM#");
printstr(" To: ");
to = read_numeric(to, 5, 7, 1);
if((to & 0x80000000) != 0) goto _l0;
- 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;
+ userband.am_usrbands[c].start = from / pp;
+ userband.am_usrbands[c].stop = to / pp;
+ userband.am_usrbands[c].mode3k = mode3k;
+ userband.am_usrbands[c].freq = from;
setup.am_userbandnum = c;
}
call_userband(c);
if(setup.fm == 0){ // MW
band = setup.amband + 1;
if(setup.amband == AKC6955_BAND_AMUSER){
- setup.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
+ userband.am_usrbands[setup.am_userbandnum].freq = setup.amfreq;
}
setup.amfreq_bank[setup.amband] = setup.amfreq;
if(updown == 0) { // down
setfreq_updown_amsub();
} else { // FM
if(setup.fmband == AKC6955_BAND_FMUSER){
- setup.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
+ userband.fm_usrbands[setup.fm_userbandnum].freq = setup.fmfreq;
}
band = setup.fmband + 1;
setup.fmfreq_bank[setup.fmband] = setup.fmfreq;