diff --git a/data/src/js/script.ts b/data/src/js/script.ts
index 0952e77..e370e02 100644
--- a/data/src/js/script.ts
+++ b/data/src/js/script.ts
@@ -1,6 +1,6 @@
import './helpers.js';
-var screens = ["Block Height", "Moscow Time", "Ticker", "Time", "Halving countdown", "Market Cap"];
+var screens = ["Block Height", "Moscow Time", "Ticker", "Time", "Halving countdown"];
toTime = (secs) => {
var hours = Math.floor(secs / (60 * 60));
@@ -28,7 +28,7 @@ getBcStatus = () => {
var source = document.getElementById("entry-template").innerHTML;
var template = Handlebars.compile(source);
- var context = { timerRunning: jsonData.timerRunning, memUsage: Math.round(jsonData.espFreeHeap / jsonData.espHeapSize * 100), memFree: (jsonData.espFreeHeap / 1024), memTotal: (jsonData.espHeapSize / 1024), uptime: toTime(jsonData.espUptime), currentScreen: jsonData.currentScreen, rendered: jsonData.rendered, data: jsonData.data, screens: screens, ledStatus: jsonData.ledStatus ? jsonData.ledStatus.map((t) => (t).toString(16)) : [] };
+ var context = { timerRunning: jsonData.timerRunning, memUsage: Math.round(jsonData.espFreeHeap / jsonData.espHeapSize * 100), memFree: (jsonData.espFreeHeap / 1000), memTotal: (jsonData.espHeapSize / 1000), uptime: toTime(jsonData.espUptime), currentScreen: jsonData.currentScreen, rendered: jsonData.rendered, data: jsonData.data, screens: screens, ledStatus: jsonData.ledStatus ? jsonData.ledStatus.map((t) => (t).toString(16)) : [] };
document.getElementById('output').innerHTML = template(context);
@@ -76,7 +76,6 @@ fetch('/api/settings', {
document.getElementById('fullRefreshMin').value = jsonData.fullRefreshMin;
document.getElementById('wpTimeout').value = jsonData.wpTimeout;
document.getElementById('mempoolInstance').value = jsonData.mempoolInstance;
- document.getElementById('hostnamePrefix').value = jsonData.hostnamePrefix;
if (jsonData.gitRev)
document.getElementById('gitRev').innerHTML = "Version: " + jsonData.gitRev;
diff --git a/doc/Rev.B/IMG_3310.jpeg b/doc/Rev.B/IMG_3310.jpeg
deleted file mode 100644
index 9cd98b4..0000000
Binary files a/doc/Rev.B/IMG_3310.jpeg and /dev/null differ
diff --git a/doc/Rev.B/IMG_3313.jpeg b/doc/Rev.B/IMG_3313.jpeg
deleted file mode 100644
index 1c20403..0000000
Binary files a/doc/Rev.B/IMG_3313.jpeg and /dev/null differ
diff --git a/doc/Rev.B/IMG_3314.jpeg b/doc/Rev.B/IMG_3314.jpeg
deleted file mode 100644
index f26ddf4..0000000
Binary files a/doc/Rev.B/IMG_3314.jpeg and /dev/null differ
diff --git a/doc/Rev.B/IMG_3317.jpeg b/doc/Rev.B/IMG_3317.jpeg
deleted file mode 100644
index 777777b..0000000
Binary files a/doc/Rev.B/IMG_3317.jpeg and /dev/null differ
diff --git a/src/lib/epd.cpp b/src/lib/epd.cpp
index b936e00..3cc5499 100644
--- a/src/lib/epd.cpp
+++ b/src/lib/epd.cpp
@@ -26,7 +26,7 @@ void setFgColor(int color)
void showSetupQr(const String &ssid, const String &password)
{
- uint displayIndex = 6;
+ char displayIndex = 6;
const String text = "WIFI:S:" + ssid + ";T:WPA;P:" + password + ";;";
diff --git a/src/lib/functions.cpp b/src/lib/functions.cpp
index 78d2d33..208521f 100644
--- a/src/lib/functions.cpp
+++ b/src/lib/functions.cpp
@@ -36,8 +36,8 @@ void setupSoftAP()
{
byte mac[6];
WiFi.macAddress(mac);
- softAP_SSID = getMyHostname().c_str();
- WiFi.setHostname(getMyHostname().c_str());
+ softAP_SSID = String("BTClock" + String(mac[5], 16) + String(mac[1], 16));
+ WiFi.setHostname(softAP_SSID.c_str());
softAP_password = base64::encode(String(mac[2], 16) + String(mac[4], 16) + String(mac[5], 16) + String(mac[1], 16)).substring(2, 10);
}
@@ -180,9 +180,7 @@ void setupPreferences()
{SCREEN_MSCW_TIME, "Sats per dollar"},
{SCREEN_BTC_TICKER, "Ticker"},
{SCREEN_TIME, "Time"},
- {SCREEN_HALVING_COUNTDOWN, "Halving countdown"},
- {SCREEN_MARKET_CAP, "Market Cap"}
- };
+ {SCREEN_HALVING_COUNTDOWN, "Halving countdown"}};
#ifdef WITH_RGB_LED
pixels.setBrightness(preferences.getUInt("ledBrightness", 128));
@@ -227,20 +225,22 @@ void handleScreenTasks(uint screen)
switch (currentScreen)
{
case SCREEN_BLOCK_HEIGHT:
+ if (blockNotifyTaskHandle)
+ {
+ vTaskResume(blockNotifyTaskHandle);
+ }
+ break;
case SCREEN_HALVING_COUNTDOWN:
if (blockNotifyTaskHandle)
vTaskResume(blockNotifyTaskHandle);
break;
case SCREEN_BTC_TICKER:
- case SCREEN_MSCW_TIME:
if (getPriceTaskHandle)
vTaskResume(getPriceTaskHandle);
break;
- case SCREEN_MARKET_CAP:
+ case SCREEN_MSCW_TIME:
if (getPriceTaskHandle)
vTaskResume(getPriceTaskHandle);
- if (blockNotifyTaskHandle)
- vTaskResume(blockNotifyTaskHandle);
break;
case SCREEN_TIME:
if (minuteTaskHandle)
@@ -374,21 +374,18 @@ void showNetworkSettings()
String ipAddr = WiFi.localIP().toString();
String subNet = WiFi.subnetMask().toString();
- epdContent[0] = "IP/Subnet";
+ epdContent[1] = "IP/Subnet";
int ipAddrPos = 0;
int subnetPos = 0;
for (int i = 0; i < 4; i++)
{
- epdContent[1 + i] = ipAddr.substring(0, ipAddr.indexOf('.')) + "/" + subNet.substring(0, subNet.indexOf('.'));
+ epdContent[2 + i] = ipAddr.substring(0, ipAddr.indexOf('.')) + "/" + subNet.substring(0, subNet.indexOf('.'));
ipAddrPos = ipAddr.indexOf('.') + 1;
subnetPos = subNet.indexOf('.') + 1;
ipAddr = ipAddr.substring(ipAddrPos);
subNet = subNet.substring(subnetPos);
}
- epdContent[NUM_SCREENS-2] = "RAM/Status";
-
- epdContent[NUM_SCREENS-1] = String((int)round(ESP.getFreeHeap()/1024)) + "/" + (int)round(ESP.getHeapSize()/1024);
CustomTextScreen::setText(epdContent);
diff --git a/src/lib/functions.hpp b/src/lib/functions.hpp
index d4d939d..95177b4 100644
--- a/src/lib/functions.hpp
+++ b/src/lib/functions.hpp
@@ -5,7 +5,6 @@
//#include
#include "config.h"
-#include "utils.hpp"
#include "shared.hpp"
#include "Adafruit_GFX.h"
#include "lib/epd.hpp"
diff --git a/src/lib/utils.cpp b/src/lib/utils.cpp
deleted file mode 100644
index 480ca6a..0000000
--- a/src/lib/utils.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "utils.hpp";
-
-double getSupplyAtBlock(uint blockNr) {
- if (blockNr >= 33 * 210000) {
- return 20999999.9769;
- }
-
- const int initialBlockReward = 50; // Initial block reward
- const int halvingInterval = 210000; // Number of blocks before halving
-
- int halvingCount = blockNr / halvingInterval;
- double totalBitcoinInCirculation = 0;
-
- for (int i = 0; i < halvingCount; ++i) {
- totalBitcoinInCirculation += halvingInterval * initialBlockReward * std::pow(0.5, i);
- }
-
- totalBitcoinInCirculation += (blockNr % halvingInterval) * initialBlockReward * std::pow(0.5, halvingCount);
-
- return totalBitcoinInCirculation;
-}
-
-std::string formatNumberWithSuffix(int64_t num) {
- const long long quadrillion = 1000000000000000LL;
- const long long trillion = 1000000000000LL;
- const long long billion = 1000000000;
- const long long million = 1000000;
- const long long thousand = 1000;
-
- if (num >= quadrillion) {
- return std::to_string(num / quadrillion) + "Q";
- } else if (num >= trillion) {
- return std::to_string(num / trillion) + "T";
- } else if (num >= billion) {
- return std::to_string(num / billion) + "B";
- } else if (num >= million) {
- return std::to_string(num / million) + "M";
- } else if (num >= thousand) {
- return std::to_string(num / thousand) + "K";
- } else {
- return std::to_string(num);
- }
-}
-
-String getMyHostname() {
- uint8_t mac[6];
- //WiFi.macAddress(mac);
- esp_efuse_mac_get_default(mac);
- char hostname[15];
- String hostnamePrefix = preferences.getString("hostnamePrefix", "btclock");
- snprintf(hostname, sizeof(hostname), "%s-%02x%02x%02x",
- hostnamePrefix, mac[3], mac[4], mac[5]);
- return hostname;
-}
\ No newline at end of file
diff --git a/src/lib/utils.hpp b/src/lib/utils.hpp
deleted file mode 100644
index 32f2a6d..0000000
--- a/src/lib/utils.hpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-#include "shared.hpp"
-
-double getSupplyAtBlock(uint blockNr);
-std::string formatNumberWithSuffix(int64_t num);
-String getMyHostname();
diff --git a/src/lib/webserver.cpp b/src/lib/webserver.cpp
index 0f96454..a9a9d1a 100644
--- a/src/lib/webserver.cpp
+++ b/src/lib/webserver.cpp
@@ -52,7 +52,7 @@ void setupWebserver()
// Start server
server.begin();
- if (!MDNS.begin(getMyHostname()))
+ if (!MDNS.begin(HOSTNAME))
{
Serial.println(F("Error setting up MDNS responder!"));
while (1)
@@ -61,16 +61,13 @@ void setupWebserver()
}
}
MDNS.addService("http", "tcp", 80);
- MDNS.addServiceTxt("http", "tcp", "model", "BTClock");
- MDNS.addServiceTxt("http", "tcp", "version", "2.0");
- MDNS.addServiceTxt("http", "tcp", "rev", GIT_REV);
Serial.println(F("Webserver should be running"));
}
/**
* @Api
* @Path("/api/status")
- */
+*/
void onApiStatus(AsyncWebServerRequest *request)
{
AsyncResponseStream *response = request->beginResponseStream("application/json");
@@ -113,7 +110,7 @@ void onApiStatus(AsyncWebServerRequest *request)
/**
* @Api
* @Path("/api/action/pause")
- */
+*/
void onApiActionPause(AsyncWebServerRequest *request)
{
timerRunning = false;
@@ -125,7 +122,7 @@ void onApiActionPause(AsyncWebServerRequest *request)
/**
* @Api
* @Path("/api/action/full_refresh")
- */
+*/
void onApiFullRefresh(AsyncWebServerRequest *request)
{
@@ -137,7 +134,7 @@ void onApiFullRefresh(AsyncWebServerRequest *request)
/**
* @Api
* @Path("/api/action/timer_restart")
- */
+*/
void onApiActionTimerRestart(AsyncWebServerRequest *request)
{
// moment = millis();
@@ -151,7 +148,7 @@ void onApiActionTimerRestart(AsyncWebServerRequest *request)
* @Api
* @Path("/api/action/update")
* @Parameter int rate Time in minutes
- */
+*/
void onApiActionUpdate(AsyncWebServerRequest *request)
{
if (request->hasParam("rate"))
@@ -170,10 +167,10 @@ void onApiActionUpdate(AsyncWebServerRequest *request)
* @Api
* @Method GET
* @Path("/api/settings")
- */
+*/
void onApiSettingsGet(AsyncWebServerRequest *request)
{
- StaticJsonDocument<1536> root;
+ StaticJsonDocument<768> root;
root["numScreens"] = NUM_SCREENS;
root["fgColor"] = getFgColor();
root["bgColor"] = getBgColor();
@@ -187,9 +184,7 @@ void onApiSettingsGet(AsyncWebServerRequest *request)
root["rpcUser"] = preferences.getString("rpcUser", BITCOIND_RPC_USER);
root["rpcHost"] = preferences.getString("rpcHost", BITCOIND_HOST);
root["mempoolInstance"] = preferences.getString("mempoolInstance", DEFAULT_MEMPOOL_INSTANCE);
- root["hostnamePrefix"] = preferences.getString("hostnamePrefix", "btclock");
- root["hostname"] = getMyHostname();
-
+
#ifdef IS_BW
root["epdColors"] = 2;
#else
@@ -217,7 +212,7 @@ void onApiSettingsGet(AsyncWebServerRequest *request)
AsyncResponseStream *response = request->beginResponseStream("application/json");
serializeJson(root, *response);
-
+
request->send(response);
}
@@ -295,14 +290,6 @@ void onApiSettingsPost(AsyncWebServerRequest *request)
settingsChanged = true;
}
- if (request->hasParam("hostnamePrefix", true))
- {
- AsyncWebParameter *hostnamePrefix = request->getParam("hostnamePrefix", true);
-
- preferences.putString("hostnamePrefix", hostnamePrefix->value().c_str());
- settingsChanged = true;
- }
-
if (request->hasParam("ledBrightness", true))
{
AsyncWebParameter *ledBrightness = request->getParam("ledBrightness", true);
diff --git a/src/main.cpp b/src/main.cpp
index 5d30115..a21cf8b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -18,7 +18,6 @@
#include "screens/ticker.hpp"
#include "screens/time.hpp"
#include "screens/halvingcountdown.hpp"
-#include "screens/market_cap.hpp"
#include "tasks/ha.hpp"
#include "tasks/epd.hpp"
@@ -63,7 +62,6 @@ void setup()
BlockHeightScreen::init();
HalvingCountdownScreen::init();
TickerScreen::init();
- MarketCapScreen::init();
#ifdef WITH_BUTTONS
setupButtonTask();
diff --git a/src/screens/blockheight.cpp b/src/screens/blockheight.cpp
index 44bfec4..62d8615 100644
--- a/src/screens/blockheight.cpp
+++ b/src/screens/blockheight.cpp
@@ -57,8 +57,4 @@ std::array BlockHeightScreen::getEpdContent()
// std::copy(std::begin(BlockHeightScreen::epdContent), std::end(BlockHeightScreen::epdContent), std::begin(ret));
return ret;
-}
-
-uint BlockHeightScreen::getBlockNr() {
- return blockNr;
}
\ No newline at end of file
diff --git a/src/screens/blockheight.hpp b/src/screens/blockheight.hpp
index c0a4440..e44443b 100644
--- a/src/screens/blockheight.hpp
+++ b/src/screens/blockheight.hpp
@@ -17,5 +17,4 @@ public:
static void showScreen();
static void onNewBlock(uint blockNr);
static std::array getEpdContent();
- static uint getBlockNr();
};
\ No newline at end of file
diff --git a/src/screens/market_cap.cpp b/src/screens/market_cap.cpp
deleted file mode 100644
index 46db538..0000000
--- a/src/screens/market_cap.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "market_cap.hpp"
-
-uint MarketCapScreen::satsPerDollar = 0;
-std::array MarketCapScreen::epdContent = {"", "", "", "", "", "", ""};
-
-void MarketCapScreen::init()
-{
- // Dependent on price and blocks
- MarketCapScreen::showScreen();
-}
-
-void MarketCapScreen::showScreen()
-{
- double supply = getSupplyAtBlock(BlockHeightScreen::getBlockNr());
- int64_t marketCap = static_cast(supply * double(TickerScreen::getPrice()));
-
- std::string priceString = "$" + formatNumberWithSuffix(marketCap);
- priceString.insert(priceString.begin(), NUM_SCREENS - priceString.length(), ' ');
-
- epdContent[0] = "USD/MCAP";
- for (uint i = 1; i < NUM_SCREENS; i++)
- {
- MarketCapScreen::epdContent[i] = priceString[i];
- }
-}
-
-std::array MarketCapScreen::getEpdContent()
-{
- return MarketCapScreen::epdContent;
-}
\ No newline at end of file
diff --git a/src/screens/market_cap.hpp b/src/screens/market_cap.hpp
deleted file mode 100644
index e7e0e79..0000000
--- a/src/screens/market_cap.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "base.hpp"
-#include "config.h"
-#include "shared.hpp"
-#include "lib/utils.hpp"
-#include "blockheight.hpp";
-#include "ticker.hpp";
-#include "tasks/epd.hpp"
-
-class MarketCapScreen {
- protected:
- static uint satsPerDollar;
- static std::array epdContent;
- public:
- static void init();
- static void showScreen();
- static void onPriceUpdate(uint price);
- static std::array getEpdContent();
-};
\ No newline at end of file
diff --git a/src/screens/sats_per_dollar.cpp b/src/screens/sats_per_dollar.cpp
new file mode 100644
index 0000000..b292b94
--- /dev/null
+++ b/src/screens/sats_per_dollar.cpp
@@ -0,0 +1,30 @@
+// #include "sats_per_dollar.hpp"
+
+// uint SatsPerDollarScreen::satsPerDollar = 0;
+// std::array SatsPerDollarScreen::epdContent = { "", "", "", "", "", "", "" };
+
+// void SatsPerDollarScreen::init() {
+// SatsPerDollarScreen::satsPerDollar = int(round(1 / preferences.getFloat("btcPrice", 12345) * 10e7));
+// setupGetPriceTask();
+// SatsPerDollarScreen::showScreen();
+// }
+
+// void SatsPerDollarScreen::showScreen() {
+// std::string satsPerDollarString = String(SatsPerDollarScreen::satsPerDollar).c_str();
+// satsPerDollarString.insert(satsPerDollarString.begin(), 7 - satsPerDollarString.length(), ' ');
+// epdContent[0] = "MSCW/TIME";
+// for (uint i = 1; i < NUM_SCREENS; i++)
+// {
+// SatsPerDollarScreen::epdContent[i] = satsPerDollarString[i];
+// }
+// }
+
+// void SatsPerDollarScreen::onPriceUpdate(uint price) {
+// SatsPerDollarScreen::satsPerDollar = int(round(1 / float(price) * 10e7));
+
+// SatsPerDollarScreen::showScreen();
+// }
+
+// std::array SatsPerDollarScreen::getEpdContent() {
+// return SatsPerDollarScreen::epdContent;
+// }
\ No newline at end of file
diff --git a/src/screens/sats_per_dollar.hpp b/src/screens/sats_per_dollar.hpp
new file mode 100644
index 0000000..428b49c
--- /dev/null
+++ b/src/screens/sats_per_dollar.hpp
@@ -0,0 +1,17 @@
+// #pragma once
+
+// #include "base.hpp"
+// #include "config.h"
+// #include "shared.hpp"
+// #include "tasks/epd.hpp"
+
+// class SatsPerDollarScreen {
+// protected:
+// static uint satsPerDollar;
+// static std::array epdContent;
+// public:
+// static void init();
+// static void showScreen();
+// static void onPriceUpdate(uint price);
+// static std::array getEpdContent();
+// };
\ No newline at end of file
diff --git a/src/screens/ticker.cpp b/src/screens/ticker.cpp
index b902477..da2f7f0 100644
--- a/src/screens/ticker.cpp
+++ b/src/screens/ticker.cpp
@@ -48,8 +48,4 @@ std::array TickerScreen::getEpdContentSats() {
return epdContentSats;
-}
-
-uint TickerScreen::getPrice() {
- return price;
}
\ No newline at end of file
diff --git a/src/screens/ticker.hpp b/src/screens/ticker.hpp
index df9adf8..420e6ed 100644
--- a/src/screens/ticker.hpp
+++ b/src/screens/ticker.hpp
@@ -18,5 +18,4 @@ public:
static void onPriceUpdate(uint price);
static std::array getEpdContent();
static std::array getEpdContentSats();
- static uint getPrice();
};
\ No newline at end of file
diff --git a/src/shared.hpp b/src/shared.hpp
index 42d038f..e3af487 100644
--- a/src/shared.hpp
+++ b/src/shared.hpp
@@ -55,11 +55,9 @@ const PROGMEM int SCREEN_MSCW_TIME = 1;
const PROGMEM int SCREEN_BTC_TICKER = 2;
const PROGMEM int SCREEN_TIME = 3;
const PROGMEM int SCREEN_HALVING_COUNTDOWN = 4;
-const PROGMEM int SCREEN_MARKET_CAP = 5;
-
const PROGMEM int SCREEN_COUNTDOWN = 98;
const PROGMEM int SCREEN_CUSTOM = 99;
-const PROGMEM int screens[6] = { SCREEN_BLOCK_HEIGHT, SCREEN_MSCW_TIME, SCREEN_BTC_TICKER, SCREEN_TIME, SCREEN_HALVING_COUNTDOWN, SCREEN_MARKET_CAP };
+const PROGMEM int screens[5] = { SCREEN_BLOCK_HEIGHT, SCREEN_MSCW_TIME, SCREEN_BTC_TICKER, SCREEN_TIME, SCREEN_HALVING_COUNTDOWN };
const uint screenCount = sizeof(screens) / sizeof(int);
diff --git a/src/tasks/epd.cpp b/src/tasks/epd.cpp
index a20739b..10fa326 100644
--- a/src/tasks/epd.cpp
+++ b/src/tasks/epd.cpp
@@ -192,9 +192,6 @@ void taskEpd(void *pvParameters)
case SCREEN_HALVING_COUNTDOWN:
epdContent = HalvingCountdownScreen::getEpdContent();
break;
- case SCREEN_MARKET_CAP:
- epdContent = MarketCapScreen::getEpdContent();
- break;
case SCREEN_COUNTDOWN:
epdContent = CountdownScreen::getEpdContent();
break;
@@ -328,7 +325,7 @@ extern "C" void updateDisplay(void *pvParameters) noexcept
if (epdContent[epdIndex].compareTo(currentEpdContent[epdIndex]) != 0)
{
- displays[epdIndex].init(0, false); // Little longer reset duration because of MCP
+ displays[epdIndex].init(0, false, 20); // Little longer reset duration because of MCP
#ifndef USE_UNIVERSAL_PIN
resetSingleDisplay(epdIndex);
#endif
diff --git a/src/tasks/epd.hpp b/src/tasks/epd.hpp
index f1a7644..7378c0e 100644
--- a/src/tasks/epd.hpp
+++ b/src/tasks/epd.hpp
@@ -11,12 +11,10 @@
#include "screens/blockheight.hpp"
#include "screens/ticker.hpp"
#include "screens/time.hpp"
-#include "screens/market_cap.hpp"
+#include "screens/sats_per_dollar.hpp"
#include "screens/countdown.hpp"
#include "screens/custom_text.hpp"
#include "screens/halvingcountdown.hpp"
-
-
#ifdef USE_UNIVERSAL_PIN
#include
#include