diff --git a/components/connect/connect.c b/components/connect/connect.c index ffc39fce..25e35564 100644 --- a/components/connect/connect.c +++ b/components/connect/connect.c @@ -13,8 +13,6 @@ #include "lwip/sys.h" -#define WIFI_SSD CONFIG_ESP_WIFI_SSID -#define WIFI_PASS CONFIG_ESP_WIFI_PASSWORD #define MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY #if CONFIG_ESP_WPA3_SAE_PWE_HUNT_AND_PECK @@ -84,7 +82,7 @@ static void event_handler(void* arg, esp_event_base_t event_base, } } -void wifi_init_sta(void) +void wifi_init_sta(const char * wifi_ssid, const char * wifi_pass) { s_wifi_event_group = xEventGroupCreate(); @@ -111,8 +109,6 @@ void wifi_init_sta(void) wifi_config_t wifi_config = { .sta = { - .ssid = WIFI_SSD, - .password = WIFI_PASS, /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8). * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to @@ -123,9 +119,14 @@ void wifi_init_sta(void) // .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER, }, }; - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) ); - ESP_ERROR_CHECK(esp_wifi_start() ); + strncpy((char *) wifi_config.sta.ssid, wifi_ssid, 31); + wifi_config.sta.ssid[31] = '\0'; + strncpy((char *) wifi_config.sta.password, wifi_pass, 63); + wifi_config.sta.password[63] = '\0'; + + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); + ESP_ERROR_CHECK(esp_wifi_start()); ESP_LOGI(TAG, "wifi_init_sta finished."); @@ -140,9 +141,9 @@ void wifi_init_sta(void) /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually * happened. */ if (bits & WIFI_CONNECTED_BIT) { - ESP_LOGI(TAG, "Connected to SSID: %s", WIFI_SSD); + ESP_LOGI(TAG, "Connected to SSID: %s", wifi_ssid); } else if (bits & WIFI_FAIL_BIT) { - ESP_LOGI(TAG, "Failed to connect to SSID: %s", WIFI_SSD); + ESP_LOGI(TAG, "Failed to connect to SSID: %s", wifi_ssid); } else { ESP_LOGE(TAG, "UNEXPECTED EVENT"); } diff --git a/components/connect/include/connect.h b/components/connect/include/connect.h index 46ee01ef..8b1c09ed 100644 --- a/components/connect/include/connect.h +++ b/components/connect/include/connect.h @@ -1,9 +1,10 @@ - - #pragma once #include "lwip/sys.h" #include #include -void wifi_init_sta(void); \ No newline at end of file +#define WIFI_SSID CONFIG_ESP_WIFI_SSID +#define WIFI_PASS CONFIG_ESP_WIFI_PASSWORD + +void wifi_init_sta(const char * ssid, const char * pass); \ No newline at end of file diff --git a/config.cvs.example b/config.cvs.example new file mode 100644 index 00000000..c1c80700 --- /dev/null +++ b/config.cvs.example @@ -0,0 +1,10 @@ +key,type,encoding,value +main,namespace,, +wifissid,data,string,myssid +wifipass,data,string,mypass +stratumurl,data,string,solo.ckpool.org +stratumport,data,u16,3333 +stratumuser,data,string,1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.bitaxe +stratumpass,data,string,x +bm1397frequency,data,u16,425 +bm1397voltage,data,u16,1400 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 6cf71825..564a2c91 100755 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -7,6 +7,7 @@ SRCS "INA260.c" "led_controller.c" "miner.c" + "nvs_config.c" "oled.c" "system.c" "work_queue.c" @@ -15,7 +16,7 @@ SRCS "./tasks/asic_task.c" "./tasks/asic_result_task.c" "./tasks/power_management_task.c" -INCLUDE_DIRS +INCLUDE_DIRS "." "tasks" ) diff --git a/main/miner.c b/main/miner.c index 592fe151..9e63552b 100755 --- a/main/miner.c +++ b/main/miner.c @@ -13,6 +13,7 @@ #include "global_state.h" #include "serial.h" #include "asic_result_task.h" +#include "nvs_config.h" static GlobalState GLOBAL_STATE = { .extranonce_str = NULL, @@ -24,7 +25,6 @@ static GlobalState GLOBAL_STATE = { static const char *TAG = "miner"; - void app_main(void) { ESP_LOGI(TAG, "Welcome to the bitaxe!"); @@ -35,7 +35,12 @@ void app_main(void) xTaskCreate(SYSTEM_task, "SYSTEM_task", 4096, (void*)&GLOBAL_STATE, 3, NULL); ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); - wifi_init_sta(); + + char * wifi_ssid = nvs_config_get_string(NVS_CONFIG_WIFI_SSID, WIFI_SSID); + char * wifi_pass = nvs_config_get_string(NVS_CONFIG_WIFI_PASS, WIFI_PASS); + wifi_init_sta(wifi_ssid, wifi_pass); + free(wifi_ssid); + free(wifi_pass); queue_init(&GLOBAL_STATE.stratum_queue); queue_init(&GLOBAL_STATE.ASIC_jobs_queue); diff --git a/main/nvs_config.c b/main/nvs_config.c new file mode 100644 index 00000000..92493d90 --- /dev/null +++ b/main/nvs_config.c @@ -0,0 +1,65 @@ +#include "nvs_config.h" +#include "nvs.h" +#include "esp_log.h" +#include + +#define NVS_CONFIG_NAMESPACE "main" + +static const char * TAG = "nvs_config"; + +char * nvs_config_get_string(const char * key, const char * default_value) +{ + nvs_handle handle; + esp_err_t err; + err = nvs_open(NVS_CONFIG_NAMESPACE, NVS_READONLY, &handle); + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Key %s not found in nvs, using default value", key); + return strdup(default_value); + } + + size_t size = 0; + err = nvs_get_str(handle, key, NULL, &size); + + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Key %s not found in nvs, using default value", key); + return strdup(default_value); + } + + char * out = malloc(size); + err = nvs_get_str(handle, key, out, &size); + + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Key %s not found in nvs, using default value", key); + return strdup(default_value); + } + + nvs_close(handle); + return out; +} + +uint16_t nvs_config_get_u16(const char * key, const uint16_t default_value) +{ + nvs_handle handle; + esp_err_t err; + err = nvs_open(NVS_CONFIG_NAMESPACE, NVS_READONLY, &handle); + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Key %s not found in nvs, using default value", key); + return default_value; + } + + uint16_t out; + err = nvs_get_u16(handle, key, &out); + + if (err != ESP_OK) + { + ESP_LOGW(TAG, "Key %s not found in nvs, using default value", key); + return default_value; + } + + nvs_close(handle); + return out; +} diff --git a/main/nvs_config.h b/main/nvs_config.h new file mode 100644 index 00000000..c71fb9b6 --- /dev/null +++ b/main/nvs_config.h @@ -0,0 +1,18 @@ +#ifndef MAIN_NVS_CONFIG_H +#define MAIN_NVS_CONFIG_H + +#include + +#define NVS_CONFIG_WIFI_SSID "wifissid" +#define NVS_CONFIG_WIFI_PASS "wifipass" +#define NVS_CONFIG_STRATUM_URL "stratumurl" +#define NVS_CONFIG_STRATUM_PORT "stratumport" +#define NVS_CONFIG_STRATUM_USER "stratumuser" +#define NVS_CONFIG_STRATUM_PASS "stratumpass" +#define NVS_CONFIG_BM1397_FREQ "bm1397frequency" +#define NVS_CONFIG_BM1397_VOLTAGE "bm1397voltage" + +char * nvs_config_get_string(const char * key, const char * default_value); +uint16_t nvs_config_get_u16(const char * key, const uint16_t default_value); + +#endif // MAIN_NVS_CONFIG_H diff --git a/main/tasks/stratum_task.c b/main/tasks/stratum_task.c index a35549cb..1ea84a8c 100644 --- a/main/tasks/stratum_task.c +++ b/main/tasks/stratum_task.c @@ -1,4 +1,3 @@ - #include "esp_log.h" //#include "addr_from_stdin.h" #include "connect.h" @@ -7,6 +6,7 @@ #include "bm1397.h" #include "global_state.h" #include "stratum_task.h" +#include "nvs_config.h" #include #include @@ -32,10 +32,8 @@ void dns_found_cb(const char * name, const ip_addr_t * ipaddr, void * callback_a bDNSFound = true; } - void stratum_task(void * pvParameters) { - GlobalState *GLOBAL_STATE = (GlobalState*)pvParameters; STRATUM_V1_initialize_buffer(); @@ -43,14 +41,17 @@ void stratum_task(void * pvParameters) int addr_family = 0; int ip_protocol = 0; + char * stratum_url = nvs_config_get_string(NVS_CONFIG_STRATUM_URL, STRATUM_URL); + uint16_t port = nvs_config_get_u16(NVS_CONFIG_STRATUM_PORT, PORT); + //check to see if the STRATUM_URL is an ip address already - if (inet_pton(AF_INET, STRATUM_URL, &ip_Addr) == 1) { + if (inet_pton(AF_INET, stratum_url, &ip_Addr) == 1) { bDNSFound = true; } else { //it's a hostname. Lookup the ip address. IP_ADDR4(&ip_Addr, 0, 0, 0, 0); - ESP_LOGI(TAG, "Get IP for URL: %s\n", STRATUM_URL); - dns_gethostbyname(STRATUM_URL, &ip_Addr, dns_found_cb, NULL); + ESP_LOGI(TAG, "Get IP for URL: %s\n", stratum_url); + dns_gethostbyname(stratum_url, &ip_Addr, dns_found_cb, NULL); while (!bDNSFound); } @@ -60,13 +61,14 @@ void stratum_task(void * pvParameters) ip4_addr2(&ip_Addr.u_addr.ip4), ip4_addr3(&ip_Addr.u_addr.ip4), ip4_addr4(&ip_Addr.u_addr.ip4)); - ESP_LOGI(TAG, "Connecting to: stratum+tcp://%s:%d (%s)\n", STRATUM_URL, PORT, host_ip); + ESP_LOGI(TAG, "Connecting to: stratum+tcp://%s:%d (%s)\n", stratum_url, port, host_ip); + free(stratum_url); while (1) { struct sockaddr_in dest_addr; dest_addr.sin_addr.s_addr = inet_addr(host_ip); dest_addr.sin_family = AF_INET; - dest_addr.sin_port = htons(PORT); + dest_addr.sin_port = htons(port); addr_family = AF_INET; ip_protocol = IPPROTO_IP; @@ -76,7 +78,7 @@ void stratum_task(void * pvParameters) ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); break; } - ESP_LOGI(TAG, "Socket created, connecting to %s:%d", host_ip, PORT); + ESP_LOGI(TAG, "Socket created, connecting to %s:%d", host_ip, port); int err = connect(GLOBAL_STATE->sock, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr_in6)); if (err != 0) @@ -89,7 +91,9 @@ void stratum_task(void * pvParameters) STRATUM_V1_configure_version_rolling(GLOBAL_STATE->sock); - STRATUM_V1_authenticate(GLOBAL_STATE->sock, STRATUM_USER); + char * username = nvs_config_get_string(NVS_CONFIG_STRATUM_USER, STRATUM_USER); + STRATUM_V1_authenticate(GLOBAL_STATE->sock, username); + free(username); ESP_LOGI(TAG, "Extranonce: %s", GLOBAL_STATE->extranonce_str); ESP_LOGI(TAG, "Extranonce 2 length: %d", GLOBAL_STATE->extranonce_2_len);