mirror of
https://github.com/skot/ESP-Miner.git
synced 2025-04-10 12:59:25 +02:00
refactor self_test to be modular for new hardware
This commit is contained in:
parent
2070108814
commit
3d6619f534
@ -14,10 +14,27 @@
|
||||
|
||||
static const char * TAG = "self_test";
|
||||
|
||||
static bool fan_sense_pass(GlobalState * global_state)
|
||||
static void display_msg(char * msg, GlobalState * GLOBAL_STATE) {
|
||||
SystemModule * module = &GLOBAL_STATE->SYSTEM_MODULE;
|
||||
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, msg);
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
static bool fan_sense_pass(GlobalState * GLOBAL_STATE)
|
||||
{
|
||||
uint16_t fan_speed = 0;
|
||||
switch (global_state->device_model) {
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
@ -42,9 +59,9 @@ static bool power_consumption_pass()
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool core_voltage_pass(GlobalState * global_state)
|
||||
static bool core_voltage_pass(GlobalState * GLOBAL_STATE)
|
||||
{
|
||||
uint16_t core_voltage = VCORE_get_voltage_mv(global_state);
|
||||
uint16_t core_voltage = VCORE_get_voltage_mv(GLOBAL_STATE);
|
||||
ESP_LOGI(TAG, "Voltage: %u", core_voltage);
|
||||
|
||||
if (core_voltage > 1100 && core_voltage < 1300) {
|
||||
@ -57,7 +74,6 @@ void self_test(void * pvParameters)
|
||||
{
|
||||
|
||||
GlobalState * GLOBAL_STATE = (GlobalState *) pvParameters;
|
||||
SystemModule * module = &GLOBAL_STATE->SYSTEM_MODULE;
|
||||
|
||||
GLOBAL_STATE->ASIC_TASK_MODULE.active_jobs = malloc(sizeof(bm_job *) * 128);
|
||||
GLOBAL_STATE->valid_jobs = malloc(sizeof(uint8_t) * 128);
|
||||
@ -68,9 +84,16 @@ void self_test(void * pvParameters)
|
||||
GLOBAL_STATE->valid_jobs[i] = 0;
|
||||
}
|
||||
|
||||
// turn ASIC on
|
||||
gpio_set_direction(GPIO_NUM_10, GPIO_MODE_OUTPUT);
|
||||
gpio_set_level(GPIO_NUM_10, 0);
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
// turn ASIC on
|
||||
gpio_set_direction(GPIO_NUM_10, GPIO_MODE_OUTPUT);
|
||||
gpio_set_level(GPIO_NUM_10, 0);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
// Init I2C
|
||||
ESP_ERROR_CHECK(i2c_master_init());
|
||||
@ -79,30 +102,44 @@ void self_test(void * pvParameters)
|
||||
VCORE_init(GLOBAL_STATE);
|
||||
VCORE_set_voltage(nvs_config_get_u16(NVS_CONFIG_ASIC_VOLTAGE, CONFIG_ASIC_VOLTAGE) / 1000.0, GLOBAL_STATE);
|
||||
|
||||
EMC2101_init(nvs_config_get_u16(NVS_CONFIG_INVERT_FAN_POLARITY, 1));
|
||||
EMC2101_set_fan_speed(1);
|
||||
|
||||
// oled
|
||||
if (!OLED_init()) {
|
||||
ESP_LOGI(TAG, "OLED init failed!");
|
||||
} else {
|
||||
ESP_LOGI(TAG, "OLED init success!");
|
||||
// clear the oled screen
|
||||
OLED_fill(0);
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
EMC2101_init(nvs_config_get_u16(NVS_CONFIG_INVERT_FAN_POLARITY, 1));
|
||||
EMC2101_set_fan_speed(1);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "SELF TEST...");
|
||||
OLED_writeString(0, 0, module->oled_buf);
|
||||
// Display testing
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
if (!OLED_init()) {
|
||||
ESP_LOGE(TAG, "OLED init failed!");
|
||||
} else {
|
||||
ESP_LOGI(TAG, "OLED init success!");
|
||||
// clear the oled screen
|
||||
OLED_fill(0);
|
||||
display_msg("SELF TEST...", GLOBAL_STATE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
if(!DS4432U_test()){
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "DS4432U:FAIL");
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
}
|
||||
// VCore regulator testing
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
if(!DS4432U_test()){
|
||||
ESP_LOGE(TAG, "DS4432 test failed!");
|
||||
display_msg("DS4432U:FAIL", GLOBAL_STATE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
|
||||
@ -177,11 +214,7 @@ void self_test(void * pvParameters)
|
||||
if (chips_detected < 1) {
|
||||
ESP_LOGE(TAG, "SELF TEST FAIL, NO CHIPS DETECTED");
|
||||
// ESP_LOGE(TAG, "SELF TEST FAIL, INCORRECT NONCE DIFF");
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "ASIC:FAIL NO CHIPS");
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
}
|
||||
display_msg("ASIC:FAIL NO CHIPS", GLOBAL_STATE);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -189,33 +222,30 @@ void self_test(void * pvParameters)
|
||||
free(GLOBAL_STATE->valid_jobs);
|
||||
|
||||
if (!core_voltage_pass(GLOBAL_STATE)) {
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "POWER: FAIL");
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
}
|
||||
ESP_LOGE(TAG, "SELF TEST FAIL, NO CHIPS DETECTED");
|
||||
display_msg("POWER: FAIL", GLOBAL_STATE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (INA260_installed() && !power_consumption_pass()) {
|
||||
if (OLED_status()) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "POWER: FAIL");
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
}
|
||||
return;
|
||||
switch (GLOBAL_STATE->device_model) {
|
||||
case DEVICE_MAX:
|
||||
case DEVICE_ULTRA:
|
||||
case DEVICE_SUPRA:
|
||||
if (INA260_installed() && !power_consumption_pass()) {
|
||||
ESP_LOGE(TAG, "INA260 test failed!");
|
||||
display_msg("MONITOR: FAIL", GLOBAL_STATE);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
|
||||
if (!fan_sense_pass(GLOBAL_STATE)) {
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, "FAN: WARN");
|
||||
OLED_writeString(0, 1, module->oled_buf);
|
||||
ESP_LOGE(TAG, "FAN test failed!");
|
||||
display_msg("FAN: WARN", GLOBAL_STATE);
|
||||
}
|
||||
|
||||
|
||||
memset(module->oled_buf, 0, 20);
|
||||
snprintf(module->oled_buf, 20, " PASS");
|
||||
OLED_writeString(0, 2, module->oled_buf);
|
||||
display_msg(" PASS", GLOBAL_STATE);
|
||||
nvs_config_set_u16(NVS_CONFIG_SELF_TEST, 0);
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user