diff --git a/main/global_state.h b/main/global_state.h index 125f62c..b8aa95f 100644 --- a/main/global_state.h +++ b/main/global_state.h @@ -72,6 +72,7 @@ typedef struct { DeviceModel device_model; char * device_model_str; + int board_version; AsicModel asic_model; char * asic_model_str; uint16_t asic_count; diff --git a/main/main.c b/main/main.c index 49d3396..21906c8 100644 --- a/main/main.c +++ b/main/main.c @@ -48,6 +48,9 @@ void app_main(void) ESP_LOGE(TAG, "Invalid DEVICE model"); // maybe should return here to now execute anything with a faulty device parameter ! } + GLOBAL_STATE.board_version = atoi(nvs_config_get_string(NVS_CONFIG_BOARD_VERSION, "000")); + ESP_LOGI(TAG, "Found Device Model: %s", GLOBAL_STATE.device_model_str); + ESP_LOGI(TAG, "Found Board Version: %d", GLOBAL_STATE.board_version); GLOBAL_STATE.asic_model_str = nvs_config_get_string(NVS_CONFIG_ASIC_MODEL, ""); if (strcmp(GLOBAL_STATE.asic_model_str, "BM1366") == 0) { diff --git a/main/tasks/power_management_task.c b/main/tasks/power_management_task.c index e81d68e..42b3805 100644 --- a/main/tasks/power_management_task.c +++ b/main/tasks/power_management_task.c @@ -68,35 +68,37 @@ void POWER_MANAGEMENT_task(void * pvParameters) power_management->frequency_multiplier = 1; - char * board_version = nvs_config_get_string(NVS_CONFIG_BOARD_VERSION, "unknown"); - power_management->HAS_POWER_EN = - (strcmp(board_version, "202") == 1 || strcmp(board_version, "203") == 1 || strcmp(board_version, "204") == 1); - power_management->HAS_PLUG_SENSE = strcmp(board_version, "204") == 1; - free(board_version); + power_management->HAS_POWER_EN = GLOBAL_STATE->board_version == 202 || GLOBAL_STATE->board_version == 203 || GLOBAL_STATE->board_version == 204; + power_management->HAS_PLUG_SENSE = GLOBAL_STATE->board_version == 204; int last_frequency_increase = 0; - bool read_power = INA260_installed(); - uint16_t frequency_target = nvs_config_get_u16(NVS_CONFIG_ASIC_FREQ, CONFIG_ASIC_FREQUENCY); uint16_t auto_fan_speed = nvs_config_get_u16(NVS_CONFIG_AUTO_FAN_SPEED, 1); - // Configure GPIO12 as input(barrel jack) 1 is plugged in - gpio_config_t barrel_jack_conf = { - .pin_bit_mask = (1ULL << GPIO_NUM_12), - .mode = GPIO_MODE_INPUT, - }; - gpio_config(&barrel_jack_conf); - int barrel_jack_plugged_in = gpio_get_level(GPIO_NUM_12); + switch (GLOBAL_STATE->device_model) { + case DEVICE_MAX: + case DEVICE_ULTRA: + case DEVICE_SUPRA: + // Configure GPIO12 as input(barrel jack) 1 is plugged in + gpio_config_t barrel_jack_conf = { + .pin_bit_mask = (1ULL << GPIO_NUM_12), + .mode = GPIO_MODE_INPUT, + }; + gpio_config(&barrel_jack_conf); + int barrel_jack_plugged_in = gpio_get_level(GPIO_NUM_12); - gpio_set_direction(GPIO_NUM_10, GPIO_MODE_OUTPUT); - if (barrel_jack_plugged_in == 1 || !power_management->HAS_PLUG_SENSE) { - // turn ASIC on - gpio_set_level(GPIO_NUM_10, 0); - } else { - // turn ASIC off - gpio_set_level(GPIO_NUM_10, 1); + gpio_set_direction(GPIO_NUM_10, GPIO_MODE_OUTPUT); + if (barrel_jack_plugged_in == 1 || !power_management->HAS_PLUG_SENSE) { + // turn ASIC on + gpio_set_level(GPIO_NUM_10, 0); + } else { + // turn ASIC off + gpio_set_level(GPIO_NUM_10, 1); + } + break; + default: } vTaskDelay(3000 / portTICK_PERIOD_MS); @@ -107,7 +109,7 @@ void POWER_MANAGEMENT_task(void * pvParameters) case DEVICE_MAX: case DEVICE_ULTRA: case DEVICE_SUPRA: - if (read_power == true) { + if (INA260_installed() == true) { power_management->voltage = INA260_read_voltage(); power_management->power = INA260_read_power() / 1000; power_management->current = INA260_read_current(); @@ -185,23 +187,32 @@ void POWER_MANAGEMENT_task(void * pvParameters) } } } else if (GLOBAL_STATE->asic_model == ASIC_BM1366 || GLOBAL_STATE->asic_model == ASIC_BM1368) { - power_management->chip_temp_avg = EMC2101_get_internal_temp() + 5; + switch (GLOBAL_STATE->device_model) { + case DEVICE_MAX: + case DEVICE_ULTRA: + case DEVICE_SUPRA: + power_management->chip_temp_avg = EMC2101_get_internal_temp() + 5; - if (power_management->chip_temp_avg > THROTTLE_TEMP && - (power_management->frequency_value > 50 || power_management->voltage > 1000)) { - ESP_LOGE(TAG, "OVERHEAT"); + if (power_management->chip_temp_avg > THROTTLE_TEMP && + (power_management->frequency_value > 50 || power_management->voltage > 1000)) { + ESP_LOGE(TAG, "OVERHEAT"); - EMC2101_set_fan_speed(1); - if (power_management->HAS_POWER_EN) { - gpio_set_level(GPIO_NUM_10, 1); - } else { - nvs_config_set_u16(NVS_CONFIG_ASIC_VOLTAGE, 990); - nvs_config_set_u16(NVS_CONFIG_ASIC_FREQ, 50); - nvs_config_set_u16(NVS_CONFIG_FAN_SPEED, 100); - nvs_config_set_u16(NVS_CONFIG_AUTO_FAN_SPEED, 0); - exit(EXIT_FAILURE); - } + EMC2101_set_fan_speed(1); + if (power_management->HAS_POWER_EN) { + gpio_set_level(GPIO_NUM_10, 1); + } else { + nvs_config_set_u16(NVS_CONFIG_ASIC_VOLTAGE, 990); + nvs_config_set_u16(NVS_CONFIG_ASIC_FREQ, 50); + nvs_config_set_u16(NVS_CONFIG_FAN_SPEED, 100); + nvs_config_set_u16(NVS_CONFIG_AUTO_FAN_SPEED, 0); + exit(EXIT_FAILURE); + } + } + // ESP_LOGI(TAG, "target %f, Freq %f, Volt %f, Power %f", target_frequency, power_management->frequency_value, + // power_management->voltage, power_management->power); + break; + default: } } @@ -217,8 +228,6 @@ void POWER_MANAGEMENT_task(void * pvParameters) default: } } - // ESP_LOGI(TAG, "target %f, Freq %f, Volt %f, Power %f", target_frequency, power_management->frequency_value, - // power_management->voltage, power_management->power); // Read the state of GPIO12 if (power_management->HAS_PLUG_SENSE) {