From 2d8d23b99873f3612b4d24a60cb20a1787381ce9 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 27 May 2018 18:50:08 +0200 Subject: wip --- main/main.c | 184 ------------------------------------- main/main.cpp | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 289 insertions(+), 184 deletions(-) delete mode 100644 main/main.c create mode 100644 main/main.cpp diff --git a/main/main.c b/main/main.c deleted file mode 100644 index f1d9594..0000000 --- a/main/main.c +++ /dev/null @@ -1,184 +0,0 @@ -#include "esp_sta.h" -#include "esp_system.h" -#include "esp_wifi.h" -#include "esp_spiffs.h" -#include "spiffs.h" -#include "sdkconfig.h" - -#include - -#include "main-config.h" - -// static bool show_ip = false; - -/****************************************************************************** - * FunctionName : user_rf_cal_sector_set - * Description : SDK just reversed 4 sectors, used for rf init data and paramters. - * We add this function to force users to set rf cal sector, since - * we don't know which sector is free in user's application. - * sector map for last several sectors : ABCCC - * A : rf cal - * B : rf init data - * C : sdk parameters - * Parameters : none - * Returns : rf cal sector -*******************************************************************************/ -uint32_t user_rf_cal_sector_set(void) -{ - flash_size_map size_map = system_get_flash_size_map(); - uint32_t rf_cal_sec = 0; - - switch (size_map) { - case FLASH_SIZE_4M_MAP_256_256: - rf_cal_sec = 128 - 5; - break; - - case FLASH_SIZE_8M_MAP_512_512: - rf_cal_sec = 256 - 5; - break; - - case FLASH_SIZE_16M_MAP_512_512: - case FLASH_SIZE_16M_MAP_1024_1024: - rf_cal_sec = 512 - 5; - break; - - case FLASH_SIZE_32M_MAP_512_512: - case FLASH_SIZE_32M_MAP_1024_1024: - rf_cal_sec = 1024 - 5; - break; - case FLASH_SIZE_64M_MAP_1024_1024: - rf_cal_sec = 2048 - 5; - break; - case FLASH_SIZE_128M_MAP_1024_1024: - rf_cal_sec = 4096 - 5; - break; - default: - rf_cal_sec = 0; - break; - } - - return rf_cal_sec; -} - -__attribute__((used)) -static int32_t fs_init(void) -{ - struct esp_spiffs_config config; - - uint32_t log_page_size = CONFIG_MAIN_FLASH_LOG_PAGE_SIZE; - - config.phys_size = CONFIG_MAIN_FLASH_SIZE_KB * 1024; - config.phys_addr = CONFIG_MAIN_FLASH_FLASH_ADDR_KB * 1024; - config.phys_erase_block = CONFIG_MAIN_FLASH_SECTOR_SIZE_KB * 1024; - config.log_block_size = CONFIG_MAIN_FLASH_LOG_BLOCK_SIZE_KB * 1024; - config.log_page_size = log_page_size; - config.fd_buf_size = CONFIG_MAIN_FLASH_FD_BUF_SIZE * 2; - config.cache_buf_size = (log_page_size + 32) * 8; - - return esp_spiffs_init(&config); -} - -void wifi_event_handler_cb(System_Event_t *event) -{ - if (event == NULL) { - os_printf("NULL event\n"); - return; - } - - if (event->event_id == EVENT_STAMODE_GOT_IP) { - printf("STA GOT IP"); - // show_ip = true; - } else if (event->event_id == EVENT_STAMODE_CONNECTED) { - os_printf("STA CONNECTED\n"); - } else if (event->event_id == EVENT_STAMODE_DISCONNECTED) { - os_printf("STA DISCONNECTED\n"); - wifi_station_connect(); - } else { - os_printf("Unknown event\n"); - } -} - -static void set_station_mode() { - printf("STATION_MODE\n"); - if (wifi_get_opmode_default() != NULL_MODE) { - printf("Setting default station mode"); - wifi_set_opmode(NULL_MODE); - } - - wifi_set_opmode_current(STATION_MODE); - - struct station_config config; - bzero(&config, sizeof(struct station_config)); - sprintf((char *)config.ssid, WIFI_SSID); - sprintf((char *)config.password, WIFI_PASSWORD); - wifi_station_set_config(&config); - - wifi_set_event_handler_cb(wifi_event_handler_cb); - - wifi_station_connect(); -} - -void ets_wdt_disable(); -void my_thread(void* ctx) { - (void) ctx; - - // wifi_set_opmode(NULL_MODE); - - int count = 0; - while (1) { - printf("Hello World! %d\n", count); - if (count == 2) { - // pvShowMalloc(); - } - - if (count == 5) { - // set_station_mode(); - } - /* - */ - - /* - show_ip = false; - if (show_ip) { - show_ip = false; - - struct ip_info info; - bool ok = wifi_get_ip_info(STATION_IF, &info); - - if (ok) { - printf("ip=" IPSTR ", nm=" IPSTR ", gw=" IPSTR "\n", IP2STR(&info.ip), IP2STR(&info.netmask), IP2STR(&info.gw)); - } else { - printf("show ip failed\n"); - } - } - */ - - count++; - vTaskDelay(500 / portTICK_PERIOD_MS); - } -} - -#define THREAD_NAME "my_thread" -#define THREAD_STACK_WORDS 2048 -#define THREAD_PRIO 8 - -void user_init() { - os_printf("SDK version: %s, free: %d\n", system_get_sdk_version(), system_get_free_heap_size()); - - set_station_mode(); - // pvShowMalloc(); - - // assert(fs_init() != -1); - - xTaskHandle thread_handle; - - // set_station_mode(); - - int ret = xTaskCreate(my_thread, - THREAD_NAME, - THREAD_STACK_WORDS, - NULL, - THREAD_PRIO, - &thread_handle); - assert(ret == pdPASS); -} diff --git a/main/main.cpp b/main/main.cpp new file mode 100644 index 0000000..648c415 --- /dev/null +++ b/main/main.cpp @@ -0,0 +1,289 @@ +#include "esp_misc.h" +#include "esp_sta.h" +#include "esp_system.h" +#include "esp_wifi.h" +#include "esp_spiffs.h" +#include "spiffs.h" +#include "spiffs.h" +#include "sdkconfig.h" + +#include + +/* +#include +#include +#include +#include +#include +*/ + +#include "main-config.h" + +extern "C" +uint32_t user_rf_cal_sector_set(); + +extern "C" +void user_init(); + +enum events { + EVENTS_GOT_IP = (1 << 0) +}; + +struct config { + int loaded; + char mqtt_host[20]; + int mqtt_port; +}; + +struct _reent fs_reent; + +xTaskHandle main_task_handle; + +/****************************************************************************** + * FunctionName : user_rf_cal_sector_set + * Description : SDK just reversed 4 sectors, used for rf init data and paramters. + * We add this function to force users to set rf cal sector, since + * we don't know which sector is free in user's application. + * sector map for last several sectors : ABCCC + * A : rf cal + * B : rf init data + * C : sdk parameters + * Parameters : none + * Returns : rf cal sector +*******************************************************************************/ +uint32_t user_rf_cal_sector_set() +{ + flash_size_map size_map = system_get_flash_size_map(); + uint32_t rf_cal_sec = 0; + + switch (size_map) { + case FLASH_SIZE_4M_MAP_256_256: + rf_cal_sec = 128 - 5; + break; + + case FLASH_SIZE_8M_MAP_512_512: + rf_cal_sec = 256 - 5; + break; + + case FLASH_SIZE_16M_MAP_512_512: + case FLASH_SIZE_16M_MAP_1024_1024: + rf_cal_sec = 512 - 5; + break; + + case FLASH_SIZE_32M_MAP_512_512: + case FLASH_SIZE_32M_MAP_1024_1024: + rf_cal_sec = 1024 - 5; + break; + case FLASH_SIZE_64M_MAP_1024_1024: + rf_cal_sec = 2048 - 5; + break; + case FLASH_SIZE_128M_MAP_1024_1024: + rf_cal_sec = 4096 - 5; + break; + default: + rf_cal_sec = 0; + break; + } + + return rf_cal_sec; +} + +static int config_load(spiffs *fs, struct config &config) +{ + int ret = 0; + + bzero(&config, sizeof(config)); + + int fd = _spiffs_open_r(&fs_reent, "config", O_RDONLY, 0); + + printf("fd=%d\n", fd); + if (fd < 0) { + ret = -1; + goto fail; + } + + while (1) { + char buf[6]; + ret = _spiffs_read_r(&fs_reent, fd, buf, sizeof(buf)); + printf("read: ret=%d\n", ret); + if (ret == 0) { + printf("EOF\n"); + break; + } else if (ret < 0) { + printf("FAIL\n"); + break; + } + } + + config.loaded = 1; + +fail: + if (fd != -1) { + _spiffs_close_r(&fs_reent, fd); + } + + printf("%s: ret=%d\n", __FUNCTION__, ret); + + return ret; +} + +static int config_write_string(int fd, const char *str) { + int ret; + size_t sz = strlen(str); + printf("Writing %s, sz=%d\n", str, sz); + + ret = _spiffs_write_r(&fs_reent, fd, (char *)str, sz); + if (ret != sz) { + return ret; + } + + return _spiffs_write_r(&fs_reent, fd, (char *)"\0", 1) != 1; +} + +static int config_write(struct config &config) { + int ret = 0; + + int fd = _spiffs_open_r(&fs_reent, "config", O_WRONLY | O_CREAT, 0); + + if (fd == -1) { + ret = -1; + goto fail; + } + + config_write_string(fd, config.mqtt_host); + +fail: + if (fd != -1) { + _spiffs_close_r(&fs_reent, fd); + } + + printf("%s: ret=%d\n", __FUNCTION__, ret); + return ret; +} + +void wifi_event_handler_cb(System_Event_t *event) +{ + if (event == NULL) { + os_printf("NULL event\n"); + return; + } + + if (event->event_id == EVENT_STAMODE_GOT_IP) { + printf("STA GOT IP\n"); + xTaskNotify(main_task_handle, EVENTS_GOT_IP, eSetBits); + printf("%s: xTaskGetCurrentTaskHandle=%p\n", __FUNCTION__, xTaskGetCurrentTaskHandle()); + } else if (event->event_id == EVENT_STAMODE_CONNECTED) { + os_printf("STA CONNECTED\n"); + } else if (event->event_id == EVENT_STAMODE_DISCONNECTED) { + os_printf("STA DISCONNECTED\n"); + wifi_station_connect(); + } else { + os_printf("Unknown event\n"); + } +} + +static int fs_init() +{ + struct esp_spiffs_config config; + + uint32_t log_page_size = CONFIG_MAIN_FLASH_LOG_PAGE_SIZE; + + config.phys_size = CONFIG_MAIN_FLASH_SIZE_KB * 1024; + config.phys_addr = CONFIG_MAIN_FLASH_FLASH_ADDR_KB * 1024; + config.phys_erase_block = CONFIG_MAIN_FLASH_SECTOR_SIZE_KB * 1024; + config.log_block_size = CONFIG_MAIN_FLASH_LOG_BLOCK_SIZE_KB * 1024; + config.log_page_size = log_page_size; + config.fd_buf_size = CONFIG_MAIN_FLASH_FD_BUF_SIZE * 2; + config.cache_buf_size = (log_page_size + 32) * 8; + + return esp_spiffs_init(&config); +} + +static void set_station_mode() { + printf("STATION_MODE\n"); + if (wifi_get_opmode_default() != NULL_MODE) { + printf("Setting default station mode"); + wifi_set_opmode(NULL_MODE); + } + + wifi_set_opmode_current(STATION_MODE); + + struct station_config config; + bzero(&config, sizeof(struct station_config)); + sprintf((char *)config.ssid, WIFI_SSID); + sprintf((char *)config.password, WIFI_PASSWORD); + wifi_station_set_config(&config); + + wifi_set_event_handler_cb(wifi_event_handler_cb); + + wifi_station_connect(); +} + +void main_task(void* ctx) { + (void) ctx; + + printf("%s: xTaskGetCurrentTaskHandle=%p\n", __FUNCTION__, xTaskGetCurrentTaskHandle()); + + int count = 0; + uint32_t notification_value; + while (1) { + int timeout = xTaskNotifyWait(0, UINT32_MAX, ¬ification_value, pdMS_TO_TICKS(500)) == pdFALSE; + + if (notification_value & EVENTS_GOT_IP) { + struct ip_info info; + wifi_get_ip_info(STATION_IF, &info); + printf("ip=" IPSTR ", nm=" IPSTR ", gw=" IPSTR "\n", IP2STR(&info.ip), IP2STR(&info.netmask), IP2STR(&info.gw)); + } + + if (timeout) { + printf("Hello World! %d\n", count); + if (count == 2) { + // pvShowMalloc(); + } + + if (count == 5) { + // set_station_mode(); + } + + count++; + } + + // vTaskDelay(pdMS_TO_TICKS(500)); + } +} + +#define THREAD_NAME "main" +#define THREAD_STACK_WORDS 2048 +#define THREAD_PRIO 8 + +void user_init() { + int ret; + + os_printf("SDK version: %s, free: %d\n", system_get_sdk_version(), system_get_free_heap_size()); + + fs_init(); + + struct config config; + ret = config_load(nullptr, config); + if (ret) { + printf("Loading file failed, errno=%d\n", fs_reent._errno); + } + + if (!config.loaded) { + printf("No config loaded, writing new\n"); + strncpy(config.mqtt_host, "trygvis.io", sizeof(config.mqtt_host)); + config.mqtt_port = 1883; + ret = config_write(config); + if (ret) { + printf("Writing file failed, errno=%d\n", fs_reent._errno); + } + } + + return; + + set_station_mode(); + + printf("%s: xTaskGetCurrentTaskHandle=%p\n", __FUNCTION__, xTaskGetCurrentTaskHandle()); + ret = xTaskCreate(main_task, THREAD_NAME, THREAD_STACK_WORDS, NULL, THREAD_PRIO, &main_task_handle); + assert(ret == pdPASS); +} -- cgit v1.2.3