#include "iodef.h"
#include "idle.h"
#include "i2c_io.h"
+#include "i2c_eeprom.h"
#include "akc6955.h"
#include "lcd_acm1602.h"
#include "ui.h"
eeprom_writebyte(*p + 1, sum[0] & 0xff);
}
+
+unsigned int calcsum_frequencies(__freqset_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(__freqset_t) - 2); i++){
+ c = *q;
+ q++;
+ sum = sum + c;
+ }
+ return sum;
+}
+/*
+ * External I2C Map:
+ * 0x0000
+ * 0x00FF : User settings(Reserved not use)
+ * 0x0100
+ * 0x03ff : User bands
+ * 0x0400
+ * 0x0fff : User frequencies ( 12*2*28 = 672chs Max.)
+ * 0x1000- : Reserve.
+ */
+char load_frequencies(unsigned int page, unsigned char check_only)
+{
+
+ __freqset_t *p;
+ unsigned int sum;
+ unsigned int addr = (page << 7) + 512;
+ unsigned char *q;
+ unsigned char *r;
+ unsigned char c;
+ unsigned int i;
+
+// if(addr > 0x0fff) return -1; // Address error
+ if(page > USER_MEMORY_BANKS) return -1; // Address Error
+ p = &freqset_temp;
+ c = i2c_eeprom_burstread(0xa0, addr, (unsigned char *)p, sizeof(__freqset_t));
+ // Pass 1 Read OK?
+ if(c == 0x00) return -2;
+ // Pass 1 check magic
+ if(freqset_temp.magic != 0xfabc) return -3;
+ // Pass 2 check sum
+ sum = calcsum_frequencies(&freqset_temp, 0xa5a5);
+ if(sum != freqset_temp.checksum) return -4;
+ // Move from
+ if(check_only == 0x00){
+ q = (unsigned char *)(&freqset_temp);
+ r = (unsigned char *)(&freqset);
+ for(i = 0; i < sizeof(__freqset_t); i++){
+ *r = *q;
+ q++;
+ r++;
+ }
+ setup.pagenum = page;
+ }
+ return 0;
+}
+
+
+
+void save_frequencies(void)
+{
+ unsigned char c;
+ unsigned int addr = (setup.pagenum <<7) + 512;
+ __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.version = 0x0001;
+ sum = calcsum_frequencies(&freqset, 0xa5a5);
+ freqset.checksum = sum;
+ // Pass 1 write to rom.
+ c = i2c_eeprom_burstwrite(0xa0, addr, (unsigned char *)p, sizeof(__freqset_t));
+ return;
+}
+
+void format_frequencies(unsigned int page)
+{
+ unsigned char i;
+ unsigned int sum;
+
+ freqset_temp.magic = 0xfabc;
+ freqset_temp.version = 0x0001;
+ for(i = 0; i < USER_MEMORY_NUM; i++){
+ freqset_temp.memoryfreqs[i].band = AKC6955_BAND_MW2;
+ freqset_temp.memoryfreqs[i].fm = 0;
+ freqset_temp.memoryfreqs[i].freq = 594;
+ }
+ freqset_temp.pagenum = page;
+ sum = calcsum_frequencies(&freqset_temp, 0xa5a5);
+ freqset_temp.checksum = sum;
+
+ i = i2c_eeprom_burstwrite(0xa0, (page << 7)+ 512, (unsigned char *)(&freqset_temp), sizeof(__freqset_t));
+}
+
+void check_frequencies(void)
+{
+ unsigned int i;
+ _CLS();
+ for(i = 0; i < USER_MEMORY_BANKS; i++){
+ printstr("Check ExtROM:");
+ print_numeric_nosupress(i, 2);
+ _HOME();
+
+ if(load_frequencies(i, 0xff) < 0){
+ printstr("Format:");
+ print_numeric_nosupress(i, 2);
+ _HOME();
+ format_frequencies(i);
+ }
+ }
+}
+
unsigned char load_eeprom(void)
{
unsigned int p[1];
/*
* Check eeprom, and format/restore.
*/
+static void check_eeprom_sub(void)
+{
+ _CLS();
+ _LOCATE(0,0);
+ printstr("Formatting... ");
+ format_eeprom(2,250);
+ _LOCATE(0,0);
+ printstr("Save defaults ");
+ setdefault();
+ save_eeprom();
+}
+
+
void check_eeprom(void)
{
unsigned char c;
- switch(load_eeprom()) {
+
+ switch(load_eeprom()) {
case 0x01: // No magic-word
idle_time_ms(2000);
c = printhelp_2lines("EEPROM FORMAT", "Press any key");
- _CLS();
- _LOCATE(0,0);
- printstr("Formatting... ");
- format_eeprom(2,250);
- _LOCATE(0,0);
- printstr("Save defaults ");
- setdefault();
- save_eeprom();
+ check_eeprom_sub();
break;
case 0x00: // Checksum error
idle_time_ms(2000);
c = printhelp_2lines("X-) Sum error", "Press any key");
- c = pollkey_single();
- _CLS();
- _LOCATE(0,0);
- printstr("Formatting...");
- format_eeprom(2,250);
-// writeword_eeprom(0, &sum, 0x1298);
- _LOCATE(0,0);
- printstr("Save defaults");
- setdefault();
- save_eeprom();
+ check_eeprom_sub();
break;
case 0xff: // Success
+ check_frequencies();
+ load_frequencies(setup.pagenum, 0);
return;
break;
default: // Unknown error
break;
}
valinit();
+ check_frequencies();
+ load_frequencies(setup.pagenum, 0);
}