2023-06-06 21:05:43 -04:00
|
|
|
|
2023-04-14 21:37:30 -04:00
|
|
|
#include "esp_event.h"
|
|
|
|
#include "esp_log.h"
|
|
|
|
#include "nvs_flash.h"
|
2023-06-06 21:05:43 -04:00
|
|
|
|
2023-06-12 19:04:51 -04:00
|
|
|
//#include "protocol_examples_common.h"
|
2023-06-21 19:21:49 -04:00
|
|
|
#include "miner.h"
|
2023-04-14 21:37:30 -04:00
|
|
|
|
|
|
|
|
2023-06-06 21:05:43 -04:00
|
|
|
#include "stratum_task.h"
|
|
|
|
#include "asic_task.h"
|
|
|
|
#include "create_jobs_task.h"
|
|
|
|
#include "global_state.h"
|
2023-06-08 17:48:26 -04:00
|
|
|
#include "serial.h"
|
2023-06-12 20:08:31 -04:00
|
|
|
#include "asic_result_task.h"
|
2023-06-13 23:47:12 -04:00
|
|
|
#include "nvs_config.h"
|
2023-05-19 23:08:00 -04:00
|
|
|
|
2023-06-06 21:05:43 -04:00
|
|
|
static GlobalState GLOBAL_STATE = {
|
|
|
|
.extranonce_str = NULL,
|
|
|
|
.extranonce_2_len = 0,
|
2023-06-07 22:00:49 -04:00
|
|
|
.abandon_work = 0,
|
2023-06-14 13:31:25 -04:00
|
|
|
.version_mask = 0,
|
|
|
|
.POWER_MANAGEMENT_MODULE = {
|
|
|
|
.frequency_multiplier = 1,
|
2023-06-18 21:40:30 -04:00
|
|
|
.frequency_value = BM1397_FREQUENCY
|
2023-06-14 13:31:25 -04:00
|
|
|
}
|
2023-06-06 21:05:43 -04:00
|
|
|
};
|
2023-04-14 21:37:30 -04:00
|
|
|
|
2023-05-30 20:40:39 -04:00
|
|
|
static const char *TAG = "miner";
|
2023-04-14 21:37:30 -04:00
|
|
|
|
|
|
|
void app_main(void)
|
|
|
|
{
|
|
|
|
ESP_LOGI(TAG, "Welcome to the bitaxe!");
|
2023-06-14 13:31:25 -04:00
|
|
|
//wait between 0 and 5 seconds for multiple units
|
|
|
|
vTaskDelay(rand() % 5001 / portTICK_RATE_MS);
|
2023-04-14 21:37:30 -04:00
|
|
|
ESP_ERROR_CHECK(nvs_flash_init());
|
|
|
|
|
2023-06-13 09:26:43 -04:00
|
|
|
xTaskCreate(SYSTEM_task, "SYSTEM_task", 4096, (void*)&GLOBAL_STATE, 3, NULL);
|
2023-05-22 17:31:45 -04:00
|
|
|
|
2023-06-12 23:07:47 -04:00
|
|
|
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
|
2023-06-13 23:47:12 -04:00
|
|
|
|
2023-06-21 19:00:09 -04:00
|
|
|
//pull the wifi credentials out of NVS
|
2023-06-13 23:47:12 -04:00
|
|
|
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);
|
2023-06-21 19:00:09 -04:00
|
|
|
|
|
|
|
//copy the wifi ssid to the global state
|
|
|
|
strncpy(GLOBAL_STATE.SYSTEM_MODULE.ssid, wifi_ssid, 20);
|
|
|
|
|
|
|
|
//init and connect to wifi
|
|
|
|
EventBits_t result_bits = wifi_init_sta(wifi_ssid, wifi_pass);
|
|
|
|
|
|
|
|
if (result_bits & WIFI_CONNECTED_BIT) {
|
|
|
|
ESP_LOGI(TAG, "Connected to SSID: %s", wifi_ssid);
|
|
|
|
strncpy(GLOBAL_STATE.SYSTEM_MODULE.wifi_status, "Connected!", 20);
|
|
|
|
} else if (result_bits & WIFI_FAIL_BIT) {
|
|
|
|
ESP_LOGE(TAG, "Failed to connect to SSID: %s", wifi_ssid);
|
|
|
|
strncpy(GLOBAL_STATE.SYSTEM_MODULE.wifi_status, "Failed to connect", 20);
|
|
|
|
esp_restart(); //this is pretty much fatal, so just restart
|
|
|
|
} else {
|
|
|
|
ESP_LOGE(TAG, "UNEXPECTED EVENT");
|
|
|
|
strncpy(GLOBAL_STATE.SYSTEM_MODULE.wifi_status, "unexpected error", 20);
|
|
|
|
esp_restart(); //this is pretty much fatal, so just restart
|
|
|
|
}
|
|
|
|
|
2023-06-13 23:47:12 -04:00
|
|
|
free(wifi_ssid);
|
|
|
|
free(wifi_pass);
|
2023-04-14 21:37:30 -04:00
|
|
|
|
2023-06-06 21:05:43 -04:00
|
|
|
queue_init(&GLOBAL_STATE.stratum_queue);
|
|
|
|
queue_init(&GLOBAL_STATE.ASIC_jobs_queue);
|
2023-04-29 21:23:57 -04:00
|
|
|
|
2023-06-08 17:48:26 -04:00
|
|
|
SERIAL_init();
|
|
|
|
|
2023-06-14 13:31:25 -04:00
|
|
|
BM1397_init(GLOBAL_STATE.POWER_MANAGEMENT_MODULE.frequency_value);
|
2023-06-08 17:48:26 -04:00
|
|
|
|
2023-06-21 19:00:09 -04:00
|
|
|
//set the startup_done flag
|
|
|
|
GLOBAL_STATE.SYSTEM_MODULE.startup_done = true;
|
|
|
|
|
2023-06-12 20:08:31 -04:00
|
|
|
xTaskCreate(stratum_task, "stratum admin", 8192, (void*)&GLOBAL_STATE, 5, NULL);
|
2023-06-06 21:05:43 -04:00
|
|
|
xTaskCreate(create_jobs_task, "stratum miner", 8192, (void*)&GLOBAL_STATE, 10, NULL);
|
2023-06-13 09:26:43 -04:00
|
|
|
xTaskCreate(POWER_MANAGEMENT_task, "power mangement", 8192, (void*)&GLOBAL_STATE, 10, NULL);
|
2023-06-06 21:05:43 -04:00
|
|
|
xTaskCreate(ASIC_task, "asic", 8192, (void*)&GLOBAL_STATE, 10, NULL);
|
2023-06-12 20:08:31 -04:00
|
|
|
xTaskCreate(ASIC_result_task, "asic result", 8192, (void*)&GLOBAL_STATE, 15, NULL);
|
2023-06-13 09:26:43 -04:00
|
|
|
|
2023-04-14 21:37:30 -04:00
|
|
|
}
|
2023-06-06 09:06:30 -04:00
|
|
|
|
2023-06-21 19:21:49 -04:00
|
|
|
void MINER_set_wifi_status(wifi_status_t status, uint16_t retry_count) {
|
|
|
|
if (status == WIFI_RETRYING) {
|
|
|
|
snprintf(GLOBAL_STATE.SYSTEM_MODULE.wifi_status, 20, "Retrying: %d/%d", retry_count, WIFI_MAXIMUM_RETRY);
|
|
|
|
return;
|
|
|
|
} else if (status == WIFI_CONNECT_FAILED) {
|
|
|
|
snprintf(GLOBAL_STATE.SYSTEM_MODULE.wifi_status, 20, "Connect Failed!");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|