From 6e90eac42bc90bcd99b8b3593bbd4cc516765ae9 Mon Sep 17 00:00:00 2001 From: dacb Date: Thu, 18 Dec 2014 22:14:47 -0800 Subject: [PATCH] tested BAUD and PORT --- bin/eagle.app.v6.flash.bin | Bin 32432 -> 33168 bytes bin/eagle.app.v6.irom0text.bin | Bin 141660 -> 141988 bytes user/config.c | 22 ++++++++++++++++++---- user/config_wifi.h | 8 ++++++++ user/flash_param.c | 11 ++++++----- user/flash_param.h | 1 + user/user_main.c | 5 ++++- 7 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 user/config_wifi.h diff --git a/bin/eagle.app.v6.flash.bin b/bin/eagle.app.v6.flash.bin index fecf2bc2c59c9c6a0eca0aa9e323af7bef34af58..51cf0bfefe38f0b19ea606fd1ff34a63f90acd0c 100644 GIT binary patch delta 4953 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 = baud; - flash_param_set(); - espconn_sent(conn, MSG_OK, strlen(MSG_OK)); + if (flash_param_set()) + espconn_sent(conn, MSG_OK, strlen(MSG_OK)); + else + espconn_sent(conn, MSG_ERROR, strlen(MSG_ERROR)); } } } @@ -223,14 +226,24 @@ void config_cmd_port(struct espconn *conn, uint8_t argc, char *argv[]) { } else { if (port != flash_param->port) { flash_param->port = port; - flash_param_set(); - espconn_sent(conn, MSG_OK, strlen(MSG_OK)); + if (flash_param_set()) + espconn_sent(conn, MSG_OK, strlen(MSG_OK)); + else + espconn_sent(conn, MSG_ERROR, strlen(MSG_ERROR)); + os_delay_us(10000); system_restart(); } else { espconn_sent(conn, MSG_OK, strlen(MSG_OK)); } } } +// debug +{ + char buf[1024]; + flash_param = flash_param_get(); + os_sprintf(buf, "flash param:\n\tmagic\t%d\n\tversion\t%d\n\tbaud\t%d\n\tport\t%d\n", flash_param->magic, flash_param->version, flash_param->baud, flash_param->port); + espconn_sent(conn, buf, strlen(buf)); +} } void config_cmd_mode(struct espconn *conn, uint8_t argc, char *argv[]) { @@ -252,6 +265,7 @@ void config_cmd_mode(struct espconn *conn, uint8_t argc, char *argv[]) { wifi_set_opmode(mode); ETS_UART_INTR_ENABLE(); espconn_sent(conn, MSG_OK, strlen(MSG_OK)); + os_delay_us(10000); system_restart(); } else { espconn_sent(conn, MSG_OK, strlen(MSG_OK)); diff --git a/user/config_wifi.h b/user/config_wifi.h new file mode 100644 index 0000000..2d81382 --- /dev/null +++ b/user/config_wifi.h @@ -0,0 +1,8 @@ +#undef STA_SSID +#define STA_SSID "root" +#undef STA_PASSWORD +#define STA_PASSWORD "conortimothy" +#undef AP_SSID +#define AP_SSID "toor" +#undef AP_PASSWORD +#define AP_PASSWORD "conortimothy" diff --git a/user/flash_param.c b/user/flash_param.c index f745b16..e95c2b3 100644 --- a/user/flash_param.c +++ b/user/flash_param.c @@ -5,7 +5,8 @@ #include "flash_param.h" #define FLASH_PARAM_START_SECTOR 0x3C -#define FLASH_PARAM_ADDR (SPI_FLASH_SEC_SIZE * FLASH_PARAM_START_SECTOR) +#define FLASH_PARAM_SECTOR (FLASH_PARAM_START_SECTOR + 0) +#define FLASH_PARAM_ADDR (SPI_FLASH_SEC_SIZE * FLASH_PARAM_SECTOR) static int flash_param_loaded = 0; static flash_param_t flash_param; @@ -16,7 +17,7 @@ void ICACHE_FLASH_ATTR flash_param_read(flash_param_t *flash_param) { void ICACHE_FLASH_ATTR flash_param_write(flash_param_t *flash_param) { ETS_UART_INTR_DISABLE(); - spi_flash_erase_sector(FLASH_PARAM_START_SECTOR); + spi_flash_erase_sector(FLASH_PARAM_SECTOR); spi_flash_write(FLASH_PARAM_ADDR, (uint32 *) flash_param, sizeof(flash_param_t)); ETS_UART_INTR_ENABLE(); } @@ -29,13 +30,14 @@ flash_param_t *ICACHE_FLASH_ATTR flash_param_get(void) { return &flash_param; } -void ICACHE_FLASH_ATTR flash_param_set(void) { +int ICACHE_FLASH_ATTR flash_param_set(void) { flash_param_write(&flash_param); flash_param_t tmp; flash_param_read(&tmp); if (memcmp(&tmp, &flash_param, sizeof(flash_param_t)) != 0) { - DCE_FAIL("flash_param verify failed"); + return 0; } + return 1; } void ICACHE_FLASH_ATTR flash_param_init_defaults(void) { @@ -54,4 +56,3 @@ flash_param_t* ICACHE_FLASH_ATTR flash_param_init(void) { } return flash_param; } - diff --git a/user/flash_param.h b/user/flash_param.h index 1a558b5..8354663 100644 --- a/user/flash_param.h +++ b/user/flash_param.h @@ -12,5 +12,6 @@ typedef struct flash_param { } flash_param_t; flash_param_t *flash_param_get(void); +int flash_param_set(void); #endif /* __FLASH_PARAM_H__ */ diff --git a/user/user_main.c b/user/user_main.c index 25a7e89..68716d9 100644 --- a/user/user_main.c +++ b/user/user_main.c @@ -22,6 +22,7 @@ #include "task.h" #include "server.h" +#include "config.h" #include "flash_param.h" os_event_t recvTaskQueue[recvTaskQueueLen]; @@ -64,7 +65,9 @@ void user_init(void) #ifdef CONFIG_DYNAMIC - flash_param_t *flash_param = flash_param_get(); + flash_param_t *flash_param; + flash_param_init(); + flash_param = flash_param_get(); uart_init(flash_param->baud, BIT_RATE_115200); #else uart_init(BIT_RATE_115200, BIT_RATE_115200);