btclock_v3/src/lib/bitaxe_fetch.cpp

73 lines
2.3 KiB
C++
Raw Normal View History

2024-07-29 20:49:46 +02:00
#include "bitaxe_fetch.hpp"
TaskHandle_t bitaxeFetchTaskHandle;
2025-01-05 18:08:21 +01:00
uint64_t bitaxeHashrate;
uint64_t bitaxeBestDiff;
2024-07-29 20:49:46 +02:00
2025-01-05 18:08:21 +01:00
uint64_t getBitAxeHashRate()
2024-07-29 20:49:46 +02:00
{
return bitaxeHashrate;
}
2025-01-05 18:08:21 +01:00
uint64_t getBitaxeBestDiff()
2024-07-29 20:49:46 +02:00
{
return bitaxeBestDiff;
}
void taskBitaxeFetch(void *pvParameters)
{
for (;;)
{
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
HTTPClient http;
http.setUserAgent(USER_AGENT);
String bitaxeApiUrl = "http://" + preferences.getString("bitaxeHostname", DEFAULT_BITAXE_HOSTNAME) + "/api/system/info";
http.begin(bitaxeApiUrl.c_str());
int httpCode = http.GET();
if (httpCode == 200)
{
String payload = http.getString();
JsonDocument doc;
deserializeJson(doc, payload);
2025-01-05 18:08:21 +01:00
// Convert GH/s to H/s (multiply by 10^9)
float hashRateGH = doc["hashRate"].as<float>();
bitaxeHashrate = static_cast<uint64_t>(std::round(hashRateGH * std::pow(10, getHashrateMultiplier('G'))));
// Parse difficulty string and convert to uint64_t
std::string diffStr = doc["bestDiff"].as<std::string>();
char diffUnit = diffStr[diffStr.length() - 1];
if (std::isalpha(diffUnit)) {
float diffValue = std::stof(diffStr.substr(0, diffStr.length() - 1));
bitaxeBestDiff = static_cast<uint64_t>(std::round(diffValue * std::pow(10, getDifficultyMultiplier(diffUnit))));
} else {
bitaxeBestDiff = std::stoull(diffStr);
}
2024-07-29 20:49:46 +02:00
if (workQueue != nullptr && (ScreenHandler::getCurrentScreen() == SCREEN_BITAXE_HASHRATE || ScreenHandler::getCurrentScreen() == SCREEN_BITAXE_BESTDIFF))
2024-07-29 20:49:46 +02:00
{
WorkItem priceUpdate = {TASK_BITAXE_UPDATE, 0};
xQueueSend(workQueue, &priceUpdate, portMAX_DELAY);
}
}
else
{
Serial.print(
F("Error retrieving BitAxe data. HTTP status code: "));
Serial.println(httpCode);
Serial.println(bitaxeApiUrl);
}
}
}
void setupBitaxeFetchTask()
{
2024-12-21 17:53:35 +01:00
xTaskCreate(taskBitaxeFetch, "bitaxeFetch", (3 * 1024), NULL, tskIDLE_PRIORITY,
2024-07-29 20:49:46 +02:00
&bitaxeFetchTaskHandle);
xTaskNotifyGive(bitaxeFetchTaskHandle);
}