X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=ao_ee.c;h=a0f2e23a3f9392e4d1ed781d156f43c6cdf815d1;hp=ea127c12e4a6cb917de7f7e50ac9f79153c7db92;hb=e9584e846b9bd7926d61451d32ba5d7a30416f7b;hpb=5be13b76a2e29b84cd6d1eec065e3354b0dafce5 diff --git a/ao_ee.c b/ao_ee.c index ea127c12..a0f2e23a 100644 --- a/ao_ee.c +++ b/ao_ee.c @@ -331,6 +331,7 @@ ao_ee_write_config(uint8_t *buf, uint16_t len) __reentrant ao_ee_fill(AO_EE_CONFIG_BLOCK); memcpy(ao_ee_data, buf, len); ao_ee_block_dirty = 1; + ao_ee_flush_internal(); } ao_mutex_put(&ao_ee_mutex); return 1; } @@ -347,6 +348,67 @@ ao_ee_read_config(uint8_t *buf, uint16_t len) __reentrant return 1; } +static void +ee_dump(void) +{ + __xdata uint8_t b; + __xdata uint16_t block; + __xdata uint8_t i; + + ao_cmd_hex(); + block = ao_cmd_lex_i; + if (ao_cmd_status != ao_cmd_success) + return; + i = 0; + do { + if ((i & 7) == 0) { + if (i) + putchar('\n'); + ao_cmd_put16((uint16_t) i); + } + putchar(' '); + ao_ee_read(((uint32_t) block << 8) | i, &b, 1); + ao_cmd_put8(b); + ++i; + } while (i != 0); + putchar('\n'); +} + +static void +ee_store(void) +{ + __xdata uint16_t block; + __xdata uint8_t i; + __xdata uint16_t len; + __xdata uint8_t b; + __xdata uint32_t addr; + + ao_cmd_hex(); + block = ao_cmd_lex_i; + ao_cmd_hex(); + i = ao_cmd_lex_i; + addr = ((uint32_t) block << 8) | i; + ao_cmd_hex(); + len = ao_cmd_lex_i; + if (ao_cmd_status != ao_cmd_success) + return; + while (len--) { + ao_cmd_hex(); + if (ao_cmd_status != ao_cmd_success) + return; + b = ao_cmd_lex_i; + ao_ee_write(addr, &b, 1); + addr++; + } + ao_ee_flush(); +} + +__code struct ao_cmds ao_ee_cmds[] = { + { 'e', ee_dump, "e Dump a block of EEPROM data" }, + { 'w', ee_store, "w ... Write data to EEPROM" }, + { 0, ee_store, NULL }, +}; + /* * To initialize the chip, set up the CS line and * the SPI interface @@ -393,4 +455,5 @@ ao_ee_init(void) UxGCR_CPHA_FIRST_EDGE | UxGCR_ORDER_MSB | (17 << UxGCR_BAUD_E_SHIFT)); + ao_cmd_register(&ao_ee_cmds[0]); }