diff --git a/README.md b/README.md index 3d30a3c..c9ead6f 100644 --- a/README.md +++ b/README.md @@ -143,9 +143,8 @@ Recommended low difficulty share pools: | Pool URL | Port | Web URL | Status | | ----------------- | ----- | -------------------------- | ------------------------------------------------------------------ | | public-pool.io | 21496 | https://web.public-pool.io | Open Source Solo Bitcoin Mining Pool supporting open source miners | -| nerdminers.org | | https://nerdminers.org | Team domain for future pool - Currently pointing to public-pool.io | +| pool.nerdminers.org | 3333 | https://nerdminers.org | The official Nerdminer pool site - Mantained by @golden-guy | | pool.nerdminer.io | 3333 | https://nerdminer.io | Mantained by CHMEX | -| pool.vkbit.com | 3333 | https://vkbit.com/ | Mantained by djerfy - public-pool fork | | pool.pyblock.xyz | 3333 | https://pool.pyblock.xyz/ | Mantained by curly60e | | pool.sethforprivacy.com | 3333 | https://pool.sethforprivacy.com/ | Mantained by @sethforprivacy - public-pool fork | diff --git a/bin/bin DUO/DUO_A/0x0000_bootloader.bin b/bin/bin DUO/DUO_A/0x0000_bootloader.bin new file mode 100644 index 0000000..ccd50d3 Binary files /dev/null and b/bin/bin DUO/DUO_A/0x0000_bootloader.bin differ diff --git a/bin/bin DUO/DUO_A/0x10000_firmware.bin b/bin/bin DUO/DUO_A/0x10000_firmware.bin new file mode 100644 index 0000000..c7831c1 Binary files /dev/null and b/bin/bin DUO/DUO_A/0x10000_firmware.bin differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x8000_NerdMinerV2.ino.partitions.bin b/bin/bin DUO/DUO_A/0x8000_partitions.bin similarity index 100% rename from bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x8000_NerdMinerV2.ino.partitions.bin rename to bin/bin DUO/DUO_A/0x8000_partitions.bin diff --git a/bin/bin DUO/DUO_A/0xe000_boot_app0.bin b/bin/bin DUO/DUO_A/0xe000_boot_app0.bin new file mode 100644 index 0000000..13562ca Binary files /dev/null and b/bin/bin DUO/DUO_A/0xe000_boot_app0.bin differ diff --git a/bin/bin DUO/DUO_B/0x0000_bootloader.bin b/bin/bin DUO/DUO_B/0x0000_bootloader.bin new file mode 100644 index 0000000..ccd50d3 Binary files /dev/null and b/bin/bin DUO/DUO_B/0x0000_bootloader.bin differ diff --git a/bin/bin DUO/DUO_B/0x10000_firmware.bin b/bin/bin DUO/DUO_B/0x10000_firmware.bin new file mode 100644 index 0000000..3a54ec6 Binary files /dev/null and b/bin/bin DUO/DUO_B/0x10000_firmware.bin differ diff --git a/bin/bin DUO/DUO_B/0x8000_partitions.bin b/bin/bin DUO/DUO_B/0x8000_partitions.bin new file mode 100644 index 0000000..1954582 Binary files /dev/null and b/bin/bin DUO/DUO_B/0x8000_partitions.bin differ diff --git a/bin/bin DUO/DUO_B/0xe000_boot_app0.bin b/bin/bin DUO/DUO_B/0xe000_boot_app0.bin new file mode 100644 index 0000000..13562ca Binary files /dev/null and b/bin/bin DUO/DUO_B/0xe000_boot_app0.bin differ diff --git a/bin/bin ESP32-devKit- no pass/0x10000_firmware.bin b/bin/bin ESP32-devKit- no pass/0x10000_firmware.bin new file mode 100644 index 0000000..520976f Binary files /dev/null and b/bin/bin ESP32-devKit- no pass/0x10000_firmware.bin differ diff --git a/bin/bin ESP32-devKit- no pass/0x1000_bootloader.bin b/bin/bin ESP32-devKit- no pass/0x1000_bootloader.bin new file mode 100644 index 0000000..bfc27cf Binary files /dev/null and b/bin/bin ESP32-devKit- no pass/0x1000_bootloader.bin differ diff --git a/bin/bin ESP32-devKit- no pass/0x8000_partitions.bin b/bin/bin ESP32-devKit- no pass/0x8000_partitions.bin new file mode 100644 index 0000000..1954582 Binary files /dev/null and b/bin/bin ESP32-devKit- no pass/0x8000_partitions.bin differ diff --git a/bin/bin ESP32-devKit- no pass/0xe000_boot_app0.bin b/bin/bin ESP32-devKit- no pass/0xe000_boot_app0.bin new file mode 100644 index 0000000..13562ca Binary files /dev/null and b/bin/bin ESP32-devKit- no pass/0xe000_boot_app0.bin differ diff --git a/bin/bin LYLYGO TDisplay S3 - no pass/0x0000_bootloader.bin b/bin/bin LYLYGO TDisplay S3 - no pass/0x0000_bootloader.bin new file mode 100644 index 0000000..ccd50d3 Binary files /dev/null and b/bin/bin LYLYGO TDisplay S3 - no pass/0x0000_bootloader.bin differ diff --git a/bin/bin LYLYGO TDisplay S3 - no pass/0x10000_firmware.bin b/bin/bin LYLYGO TDisplay S3 - no pass/0x10000_firmware.bin new file mode 100644 index 0000000..ba60198 Binary files /dev/null and b/bin/bin LYLYGO TDisplay S3 - no pass/0x10000_firmware.bin differ diff --git a/bin/bin LYLYGO TDisplay S3 - no pass/0x8000_partitions.bin b/bin/bin LYLYGO TDisplay S3 - no pass/0x8000_partitions.bin new file mode 100644 index 0000000..1954582 Binary files /dev/null and b/bin/bin LYLYGO TDisplay S3 - no pass/0x8000_partitions.bin differ diff --git a/bin/bin LYLYGO TDisplay S3 - no pass/0xe000_boot_app0.bin b/bin/bin LYLYGO TDisplay S3 - no pass/0xe000_boot_app0.bin new file mode 100644 index 0000000..13562ca Binary files /dev/null and b/bin/bin LYLYGO TDisplay S3 - no pass/0xe000_boot_app0.bin differ diff --git a/bin/flash_download_tool_3.9.3/configure/esp32/spi_download.conf b/bin/flash_download_tool_3.9.3/configure/esp32/spi_download.conf index 1026985..660d1e4 100644 --- a/bin/flash_download_tool_3.9.3/configure/esp32/spi_download.conf +++ b/bin/flash_download_tool_3.9.3/configure/esp32/spi_download.conf @@ -4,16 +4,16 @@ efuse_err_halt = 1 [DOWNLOAD PATH] file_sel0 = 1 -file_path0 = C:\Users\RogerPC\Desktop\CRYPTO\BITMAKER\Projectes\EN CURSO\SEEDER\Seeder\bin\0xe000_boot_app0.bin -file_offset0 = 0xe000 +file_path0 = C:\Users\RogerPC\Desktop\BITMAKER\BITMAKER\Projectes\EN CURSO\NERDMINERv2\NerdMinerV2\bin\bin ESP32-devKit- no pass\0x1000_bootloader.bin +file_offset0 = 0x1000 file_sel1 = 1 -file_path1 = C:\Users\RogerPC\Desktop\CRYPTO\BITMAKER\Projectes\EN CURSO\SEEDER\Seeder\bin\0x1000_bootloader_qio_80m.bin -file_offset1 = 0x1000 +file_path1 = C:\Users\RogerPC\Desktop\BITMAKER\BITMAKER\Projectes\EN CURSO\NERDMINERv2\NerdMinerV2\bin\bin ESP32-devKit- no pass\0xe000_boot_app0.bin +file_offset1 = 0xe000 file_sel2 = 1 -file_path2 = C:\Users\RogerPC\Desktop\CRYPTO\BITMAKER\Projectes\EN CURSO\SEEDER\Seeder\bin\0x8000_Seeder.ino.partitions.bin +file_path2 = C:\Users\RogerPC\Desktop\BITMAKER\BITMAKER\Projectes\EN CURSO\NERDMINERv2\NerdMinerV2\bin\bin ESP32-devKit- no pass\0x8000_partitions.bin file_offset2 = 0x8000 file_sel3 = 1 -file_path3 = C:\Users\RogerPC\Desktop\CRYPTO\BITMAKER\Projectes\EN CURSO\SEEDER\Seeder\bin\0x10000_Seeder.ino.bin +file_path3 = C:\Users\RogerPC\Desktop\BITMAKER\BITMAKER\Projectes\EN CURSO\NERDMINERv2\NerdMinerV2\bin\bin ESP32-devKit- no pass\0x10000_firmware.bin file_offset3 = 0x10000 file_sel4 = 0 file_path4 = @@ -45,12 +45,12 @@ file_offset12 = file_sel13 = 0 file_path13 = file_offset13 = -default_path = C:\Users\RogerPC\Desktop\CRYPTO\BITMAKER\Projectes\EN CURSO\SEEDER\Seeder\bin +default_path = C:\Users\RogerPC\Desktop\BITMAKER\BITMAKER\Projectes\EN CURSO\NERDMINERv2\NerdMinerV2\bin\bin ESP32-devKit- no pass [FLASH_CRYSTAL] spicfgdis = 0 spispeed = 3 -spimode = 0 +spimode = 2 [MAC SAVE] mac_save_enable = False @@ -84,7 +84,7 @@ flash_write_size = 1024 [DOWNLOAD] autostart1 = 0 -com_port1 = COM4 +com_port1 = COM157 baudrate1 = 4 checkmac1 = 1 erase_flash_en = True diff --git a/bin/flash_download_tool_3.9.3/dl_temp/_temp_by_dltool/downloadPanel1/0x1000_bootloader.bin_rep b/bin/flash_download_tool_3.9.3/dl_temp/_temp_by_dltool/downloadPanel1/0x1000_bootloader.bin_rep new file mode 100644 index 0000000..08ec5d5 Binary files /dev/null and b/bin/flash_download_tool_3.9.3/dl_temp/_temp_by_dltool/downloadPanel1/0x1000_bootloader.bin_rep differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x0000_NerdMinerV2.ino.bootloader.bin_rep b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x0000_NerdMinerV2.ino.bootloader.bin_rep deleted file mode 100644 index bd34cd9..0000000 Binary files a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x0000_NerdMinerV2.ino.bootloader.bin_rep and /dev/null differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_NerdMinerV2.ino.bin b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_NerdMinerV2.ino.bin deleted file mode 100644 index a8c7a39..0000000 Binary files a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_NerdMinerV2.ino.bin and /dev/null differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_firmware.bin b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_firmware.bin new file mode 100644 index 0000000..520976f Binary files /dev/null and b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x10000_firmware.bin differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x1000_bootloader.bin_rep b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x1000_bootloader.bin_rep new file mode 100644 index 0000000..08ec5d5 Binary files /dev/null and b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x1000_bootloader.bin_rep differ diff --git a/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x8000_partitions.bin b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x8000_partitions.bin new file mode 100644 index 0000000..1954582 Binary files /dev/null and b/bin/flash_download_tool_3.9.3/dl_temp/bin_tmp/downloadPanel1/0x8000_partitions.bin differ diff --git a/platformio.ini b/platformio.ini index f687edc..dc526dc 100644 --- a/platformio.ini +++ b/platformio.ini @@ -462,14 +462,17 @@ monitor_filters = esp32_exception_decoder time log2file -board_build.arduino.memory_type = qio_opi +# Commenting out 'board_build.arduino.memory_type' fixes missing 'sdkconfig.h' errors: +;board_build.arduino.memory_type = qio_opi monitor_speed = 115200 upload_speed = 115200 # 2 x 4.5MB app, 6.875MB SPIFFS board_build.partitions = huge_app.csv build_flags = ;-D DEBUG_MINING=1 - -D TDISPLAY=1 + # Switching from 'TDISPLAY' to 'NERDMINER_T_DISPLAY_V1' fixes font related compile errors + ;-D TDISPLAY=1 + -D NERDMINER_T_DISPLAY_V1=1 lib_deps = https://github.com/takkaO/OpenFontRender#v1.2 bblanchon/ArduinoJson@^6.21.5 @@ -685,6 +688,11 @@ platform = espressif32@6.6.0 board = esp32dev framework = arduino monitor_speed = 115200 +monitor_filters = + esp32_exception_decoder + time + colorize + ;debug upload_speed = 921600 ;build_type = debug board_build.partitions = huge_app.csv @@ -714,6 +722,7 @@ build_flags = -DSPI_FREQUENCY=55000000 -DSPI_READ_FREQUENCY=20000000 -DSPI_TOUCH_FREQUENCY=2500000 + lib_deps = https://github.com/takkaO/OpenFontRender#v1.2 bblanchon/ArduinoJson@^6.21.5 diff --git a/src/NerdMinerV2.ino.cpp b/src/NerdMinerV2.ino.cpp index 7e9c239..0df28ce 100644 --- a/src/NerdMinerV2.ino.cpp +++ b/src/NerdMinerV2.ino.cpp @@ -115,8 +115,12 @@ void setup() /******** CREATE STRATUM TASK *****/ sprintf(name, "(%s)", "Stratum"); + #ifdef ESP32_2432S028R + // Free a little bit of the heap to the screen + BaseType_t res2 = xTaskCreatePinnedToCore(runStratumWorker, "Stratum", 13500, (void*)name, 3, NULL,1); + #else BaseType_t res2 = xTaskCreatePinnedToCore(runStratumWorker, "Stratum", 15000, (void*)name, 3, NULL,1); - + #endif /******** CREATE MINER TASKS *****/ //for (size_t i = 0; i < THREADS; i++) { diff --git a/src/drivers/devices/esp322432s028r.h b/src/drivers/devices/esp322432s028r.h index aa6d1a0..9e407f2 100644 --- a/src/drivers/devices/esp322432s028r.h +++ b/src/drivers/devices/esp322432s028r.h @@ -3,9 +3,22 @@ #define PIN_BUTTON_1 0 //#define PIN_BUTTON_2 22 // Not used -#define PIN_ENABLE5V 21 // Not used +// #define PIN_ENABLE5V 21 // Not used #define LED_PIN 4 // Red pin -#define LED_PIN_G 17 // Green pin +#define LED_PIN_G 16 // Green pin +#define LED_PIN_B 17 // Green pin + +// Pin defines for the SD card interface +// This is working for both, ESP32 2432S028R and ESP 2432S028_2USB boards +// -------------------------------------- +// use SPI interface +// (default SPI unit provided by ) +// setup SPI pins. + +#define SDSPI_CS 5 +#define SDSPI_CLK 18 +#define SDSPI_MOSI 23 +#define SDSPI_MISO 19 // Pin defines for the SD card interface // This is working for both, ESP32 2432S028R and ESP 2432S028_2USB boards diff --git a/src/drivers/displays/esp23_2432s028r.cpp b/src/drivers/displays/esp23_2432s028r.cpp index 8c55c08..fe2545d 100644 --- a/src/drivers/displays/esp23_2432s028r.cpp +++ b/src/drivers/displays/esp23_2432s028r.cpp @@ -13,10 +13,14 @@ #include "OpenFontRender.h" #include #include "rotation.h" +#include "drivers/storage/nvMemory.h" +#include "drivers/storage/storage.h" #define WIDTH 130 //320 #define HEIGHT 170 +extern nvMemory nvMem; + OpenFontRender render; TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in platformio.ini TFT_eSprite background = TFT_eSprite(&tft); // Invoke library sprite @@ -26,25 +30,46 @@ TFT_eTouch touch(tft, ETOUCH_CS, 0xFF, hSPI); extern monitor_data mMonitor; extern pool_data pData; extern DisplayDriver *currentDisplayDriver; - +extern bool invertColors; +extern TSettings Settings; bool hasChangedScreen = true; +void getChipInfo(void){ + Serial.print("Chip: "); + Serial.println(ESP.getChipModel()); + Serial.print("ChipRevision: "); + Serial.println(ESP.getChipRevision()); + Serial.print("Psram size: "); + Serial.print(ESP.getPsramSize() / 1024); + Serial.println("KB"); + Serial.print("Flash size: "); + Serial.print(ESP.getFlashChipSize() / 1024); + Serial.println("KB"); + Serial.print("CPU frequency: "); + Serial.print(ESP.getCpuFreqMHz()); + Serial.println("MHz"); +} + void esp32_2432S028R_Init(void) { + // getChipInfo(); tft.init(); - tft.setRotation(ROTATION_90); - #ifdef ESP32_2432S028_2USB - /* - In addition to TFT_INVERSION this adjusts the gamma curve to have better - picture quality for this type of ESP32_2432S028 TFT with for example two USB connectors - */ - tft.writecommand(ILI9341_GAMMASET); // Gamma curve selected - tft.writedata(2); - delay(120); - tft.writecommand(ILI9341_GAMMASET); // Gamma curve selected - tft.writedata(1); - #endif + if (nvMem.loadConfig(&Settings)) + { + // Serial.print("Invert Colors: "); + // Serial.println(Settings.invertColors); + invertColors = Settings.invertColors; + } + tft.invertDisplay(invertColors); + tft.setRotation(1); tft.setSwapBytes(true); // Swap the colour byte order when rendering + if (invertColors) { + tft.writecommand(ILI9341_GAMMASET); + tft.writedata(2); + delay(120); + tft.writecommand(ILI9341_GAMMASET); //Gamma curve selected + tft.writedata(1); + } hSPI.begin(TOUCH_CLK, TOUCH_MISO, TOUCH_MOSI, ETOUCH_CS); touch.init(); @@ -52,9 +77,9 @@ void esp32_2432S028R_Init(void) touch.setCalibration(calibation); //background.createSprite(WIDTH, HEIGHT); // Background Sprite - background.setSwapBytes(true); - render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) - render.setLineSpaceRatio(0.9); // Espaciado entre texto + //background.setSwapBytes(true); + //render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) + //render.setLineSpaceRatio(0.9); // Espaciado entre texto // Load the font and check it can be read OK // if (render.loadFont(NotoSans_Bold, sizeof(NotoSans_Bold))) @@ -65,6 +90,11 @@ void esp32_2432S028R_Init(void) } pinMode(LED_PIN, OUTPUT); + pinMode(LED_PIN_B, OUTPUT); + pinMode(LED_PIN_G, OUTPUT); + digitalWrite(LED_PIN, LOW); + digitalWrite(LED_PIN_B, HIGH); + digitalWrite(LED_PIN_G, HIGH); pData.bestDifficulty = "0"; pData.workersHash = "0"; pData.workersCount = 0; @@ -86,68 +116,108 @@ void esp32_2432S028R_AlternateRotation(void) bool bottomScreenBlue = true; -void printPoolData(){ - - pData = getPoolData(); - background.createSprite(320,70); //Background Sprite - background.setSwapBytes(true); - if (bottomScreenBlue) { - background.pushImage(0, 0, 320, 70, bottonPoolScreen); - //background.fillRect(295,43,25,10,TFT_CYAN); - - } else { - background.pushImage(0, 0, 320, 70, bottonPoolScreen_g); - } - //background.setTextDatum(MC_DATUM); - render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) - render.setLineSpaceRatio(1); - - render.setFontSize(24); - render.cdrawString(String(pData.workersCount).c_str(), 155, 35, TFT_BLACK); - render.setFontSize(18); - render.setAlignment(Align::BottomRight); - render.cdrawString(pData.workersHash.c_str(), 265, 34, TFT_BLACK); - render.setAlignment(Align::BottomLeft); - render.cdrawString(pData.bestDifficulty.c_str(), 54, 34, TFT_BLACK); - - background.pushSprite(0,170); - background.deleteSprite(); -} - void printheap(){ - //Serial.print("============ Free Heap:"); - //Serial.println(ESP.getFreeHeap()); + Serial.print("$$ Free Heap:"); + Serial.println(ESP.getFreeHeap()); + // Serial.printf("### stack WMark usage: %d\n", uxTaskGetStackHighWaterMark(NULL)); } -void createBackgroundSprite(int16_t wdt, int16_t hgt){ // Set the background and link the render, used multiple times to fit in heap +bool createBackgroundSprite(int16_t wdt, int16_t hgt){ // Set the background and link the render, used multiple times to fit in heap background.createSprite(wdt, hgt) ; //Background Sprite - printheap(); - background.setColorDepth(16); - background.setSwapBytes(true); - render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) - render.setLineSpaceRatio(0.9); + // printheap(); + if (background.created()) { + background.setColorDepth(16); + background.setSwapBytes(true); + render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) + render.setLineSpaceRatio(0.9); + } else { + Serial.println("#### Sprite Error ####"); + Serial.printf("Size w:%d h:%d \n", wdt, hgt); + printheap(); + } + return background.created(); } +extern unsigned long mPoolUpdate; + +void printPoolData(){ + if ((hasChangedScreen) || (mPoolUpdate == 0) || (millis() - mPoolUpdate > UPDATE_POOL_min * 60 * 1000)){ + if (Settings.PoolAddress != "tn.vkbit.com") { + pData = getPoolData(); + background.createSprite(320,50); //Background Sprite + if (!background.created()) { + Serial.println("###### POOL SPRITE ERROR ######"); + // Serial.printf("Pool data W:%d H:%s D:%s\n", pData.workersCount, pData.workersHash, pData.bestDifficulty); + printheap(); + } + background.setSwapBytes(true); + if (bottomScreenBlue) { + background.pushImage(0, -20, 320, 70, bottonPoolScreen); + tft.pushImage(0,170,320,20,bottonPoolScreen); + } else { + background.pushImage(0, -20, 320, 70, bottonPoolScreen_g); + tft.pushImage(0,170,320,20,bottonPoolScreen_g); + } + + render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background) + render.setLineSpaceRatio(1); + + render.setFontSize(24); + render.cdrawString(String(pData.workersCount).c_str(), 157, 16, TFT_BLACK); + render.setFontSize(18); + render.setAlignment(Align::BottomRight); + render.cdrawString(pData.workersHash.c_str(), 265, 14, TFT_BLACK); + render.setAlignment(Align::BottomLeft); + render.cdrawString(pData.bestDifficulty.c_str(), 54, 14, TFT_BLACK); + background.pushSprite(0,190); + background.deleteSprite(); + } else { + pData.bestDifficulty = "TESTNET"; + pData.workersHash = "TESTNET"; + pData.workersCount = 1; + tft.fillRect(0,170,320,70, TFT_DARKGREEN); + background.createSprite(320,40); //Background Sprite + background.fillSprite(TFT_DARKGREEN); + if (!background.created()) { + Serial.println("###### POOL SPRITE ERROR ######"); + // Serial.printf("Pool data W:%d H:%s D:%s\n", pData.workersCount, pData.workersHash, pData.bestDifficulty); + printheap(); + } + background.setFreeFont(FF24); + background.setTextDatum(TL_DATUM); + background.setTextSize(1); + background.setTextColor(TFT_WHITE, TFT_DARKGREEN); + background.drawString("TESTNET", 50, 0, GFXFF); + background.pushSprite(0,185); + mPoolUpdate = millis(); + Serial.println("Testnet"); + background.deleteSprite(); + } + } +} + + + void esp32_2432S028R_MinerScreen(unsigned long mElapsed) { - if (hasChangedScreen) tft.pushImage(0, 0, initWidth, initHeight, MinerScreen); - hasChangedScreen = false; - mining_data data = getMiningData(mElapsed); + + printPoolData(); + + if (hasChangedScreen) tft.pushImage(0, 0, initWidth, initHeight, MinerScreen); + + hasChangedScreen = false; - //Serial.println("Proximo sprite..."); int wdtOffset = 190; // Recreate sprite to the right side of the screen createBackgroundSprite(WIDTH-5, HEIGHT-7); //Print background screen background.pushImage(-190, 0, MinerWidth, MinerHeight, MinerScreen); - // Total hashes render.setFontSize(18); render.rdrawString(data.totalMHashes.c_str(), 268-wdtOffset, 138, TFT_BLACK); - // Block templates render.setFontSize(18); render.setAlignment(Align::TopLeft); @@ -182,7 +252,7 @@ void esp32_2432S028R_MinerScreen(unsigned long mElapsed) // Delete sprite to free the memory heap background.deleteSprite(); - printheap(); + // printheap(); //Serial.println("=========== Mining Display ==============") ; // Create background sprite to print data at once @@ -190,9 +260,6 @@ void esp32_2432S028R_MinerScreen(unsigned long mElapsed) //Print background screen background.pushImage(0, -90, MinerWidth, MinerHeight, MinerScreen); - Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", - data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); - // Hashrate render.setFontSize(35); render.setCursor(19, 118); @@ -203,11 +270,11 @@ void esp32_2432S028R_MinerScreen(unsigned long mElapsed) background.pushSprite(0, 90); // Delete sprite to free the memory heap - background.deleteSprite(); - //delay(50); - - printPoolData(); + background.deleteSprite(); + Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", + data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); + #ifdef DEBUG_MEMORY // Print heap printheap(); @@ -218,13 +285,13 @@ void esp32_2432S028R_ClockScreen(unsigned long mElapsed) { if (hasChangedScreen) tft.pushImage(0, 0, minerClockWidth, minerClockHeight, minerClockScreen); + + printPoolData(); + hasChangedScreen = false; clock_data data = getClockData(mElapsed); - Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", - data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); - // Create background sprite to print data at once createBackgroundSprite(270,36); @@ -267,9 +334,8 @@ void esp32_2432S028R_ClockScreen(unsigned long mElapsed) // Delete sprite to free the memory heap background.deleteSprite(); - #ifdef ESP32_2432S028R - printPoolData(); - #endif + Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", + data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); #ifdef DEBUG_MEMORY // Print heap @@ -280,18 +346,18 @@ void esp32_2432S028R_ClockScreen(unsigned long mElapsed) void esp32_2432S028R_GlobalHashScreen(unsigned long mElapsed) { if (hasChangedScreen) tft.pushImage(0, 0, globalHashWidth, globalHashHeight, globalHashScreen); + + printPoolData(); + hasChangedScreen = false; + coin_data data = getCoinData(mElapsed); // Create background sprite to print data at once createBackgroundSprite(169,105); // Print background screen background.pushImage(-160, -3, minerClockWidth, minerClockHeight, globalHashScreen); - //background.fillScreen(TFT_BLUE); - - Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", - data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); - + // Print BTC Price background.setFreeFont(FSSB9); background.setTextSize(1); @@ -359,9 +425,9 @@ void esp32_2432S028R_GlobalHashScreen(unsigned long mElapsed) background.pushSprite(5, 100); // Delete sprite to free the memory heap background.deleteSprite(); - #ifdef ESP32_2432S028R - printPoolData(); - #endif + + Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", + data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); #ifdef DEBUG_MEMORY // Print heap @@ -372,13 +438,11 @@ void esp32_2432S028R_BTCprice(unsigned long mElapsed) { if (hasChangedScreen) tft.pushImage(0, 0, priceScreenWidth, priceScreenHeight, priceScreen); + printPoolData(); hasChangedScreen = false; clock_data data = getClockData(mElapsed); - Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", - data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); - // Create background sprite to print data at once createBackgroundSprite(270,36); @@ -402,16 +466,17 @@ void esp32_2432S028R_BTCprice(unsigned long mElapsed) // Print background screen background.pushImage(-130, -3, priceScreenWidth, priceScreenHeight, priceScreen); - // Print BTC Price + // Print Hour background.setFreeFont(FSSB9); background.setTextSize(1); background.setTextDatum(TL_DATUM); background.setTextColor(TFT_BLACK); background.drawString(data.currentTime.c_str(), 202-130, 0, GFXFF); - // Print Hour - background.setFreeFont(FF22); - background.setTextSize(2); + // Print BTC Price + background.setFreeFont(FF24); + background.setTextDatum(TL_DATUM); + background.setTextSize(1); background.setTextColor(0xDEDB, TFT_BLACK); background.drawString(data.btcPrice.c_str(), 0, 50, GFXFF); @@ -421,9 +486,8 @@ void esp32_2432S028R_BTCprice(unsigned long mElapsed) // Delete sprite to free the memory heap background.deleteSprite(); - #ifdef ESP32_2432S028R - printPoolData(); - #endif + Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n", + data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str()); #ifdef DEBUG_MEMORY // Print heap @@ -437,13 +501,14 @@ void esp32_2432S028R_LoadingScreen(void) tft.pushImage(0, 33, initWidth, initHeight, initScreen); tft.setTextColor(TFT_BLACK); tft.drawString(CURRENT_VERSION, 24, 147, FONT2); - delay(2000); - tft.fillScreen(TFT_BLACK); - tft.pushImage(0, 0, initWidth, initHeight, MinerScreen); + // delay(2000); + // tft.fillScreen(TFT_BLACK); + // tft.pushImage(0, 0, initWidth, initHeight, MinerScreen); } void esp32_2432S028R_SetupScreen(void) { + tft.fillScreen(TFT_BLACK); tft.pushImage(0, 33, setupModeWidth, setupModeHeight, setupModeScreen); } @@ -465,24 +530,22 @@ void esp32_2432S028R_DoLedStuff(unsigned long frame) int16_t t_x , t_y; // To store the touch coordinates bool pressed = touch.getXY(t_x, t_y); if (pressed) { - if (((t_x > 109)&&(t_x < 211)) && ((t_y > 185)&&(t_y < 241))) bottomScreenBlue ^= true; + if (((t_x > 109)&&(t_x < 211)) && ((t_y > 185)&&(t_y < 241))) { + bottomScreenBlue ^= true; + hasChangedScreen = true; + } else if (t_x > 160) { // next screen - Serial.print(t_x); - Serial.print(":x Próxima Tela y:"); - Serial.println(t_y); + // Serial.printf("Next screen touch( x:%d y:%d )\n", t_x, t_y); currentDisplayDriver->current_cyclic_screen = (currentDisplayDriver->current_cyclic_screen + 1) % currentDisplayDriver->num_cyclic_screens; } else if (t_x < 160) { // Previus screen - Serial.print(t_x); - Serial.print(":x Tela anterior y:"); - Serial.println(t_y); + // Serial.printf("Previus screen touch( x:%d y:%d )\n", t_x, t_y); /* Serial.println(currentDisplayDriver->current_cyclic_screen); */ currentDisplayDriver->current_cyclic_screen = currentDisplayDriver->current_cyclic_screen - 1; - if (currentDisplayDriver->current_cyclic_screen<0) currentDisplayDriver->current_cyclic_screen = currentDisplayDriver->num_cyclic_screens - 1; - Serial.println(currentDisplayDriver->current_cyclic_screen); + if (currentDisplayDriver->current_cyclic_screen<0) currentDisplayDriver->current_cyclic_screen = currentDisplayDriver->num_cyclic_screens - 1; } } previousTouchMillis = currentMillis; @@ -494,22 +557,26 @@ void esp32_2432S028R_DoLedStuff(unsigned long frame) switch (mMonitor.NerdStatus) { case NM_waitingConfig: - digitalWrite(LED_PIN, HIGH); // LED encendido de forma continua + digitalWrite(LED_PIN, LOW); // LED encendido de forma continua break; case NM_Connecting: if (currentMillis - previousMillis >= 500) { // 0.5sec blink previousMillis = currentMillis; - digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Cambia el estado del LED + // Serial.print("C"); + digitalWrite(LED_PIN, HIGH); + digitalWrite(LED_PIN_B, !digitalRead(LED_PIN)); // Cambia el estado del LED } break; case NM_hashing: - if (currentMillis - previousMillis >= 100) + if (currentMillis - previousMillis >= 500) { // 0.1sec blink + // Serial.print("h"); previousMillis = currentMillis; - digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Cambia el estado del LED + digitalWrite(LED_PIN_B, HIGH); + digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Cambia el estado del LED } break; } diff --git a/src/drivers/displays/tDisplayDriver.cpp b/src/drivers/displays/tDisplayDriver.cpp index 88c0344..3bab4a2 100644 --- a/src/drivers/displays/tDisplayDriver.cpp +++ b/src/drivers/displays/tDisplayDriver.cpp @@ -20,6 +20,12 @@ TFT_eSprite background = TFT_eSprite(&tft); // Invoke library sprite void tDisplay_Init(void) { + //Init pin 15 to eneble 5V external power (LilyGo bug) +#ifdef PIN_ENABLE5V + pinMode(PIN_ENABLE5V, OUTPUT); + digitalWrite(PIN_ENABLE5V, HIGH); +#endif + tft.init(); #ifdef LILYGO_S3_T_EMBED tft.setRotation(ROTATION_270); diff --git a/src/drivers/displays/tDisplayV1Driver.cpp b/src/drivers/displays/tDisplayV1Driver.cpp index 080a1a7..c13c43b 100644 --- a/src/drivers/displays/tDisplayV1Driver.cpp +++ b/src/drivers/displays/tDisplayV1Driver.cpp @@ -67,14 +67,12 @@ void tDisplay_MinerScreen(unsigned long mElapsed) render.rdrawString(data.currentHashRate.c_str(), 96, 90, TFT_BLACK); // Total hashes render.setFontSize(13); - render.rdrawString(data.totalMHashes.c_str(), 200, 112, TFT_BLACK); + render.rdrawString(data.totalMHashes.c_str(), 200, 106, TFT_BLACK); // Block templates - render.setFontSize(13); render.drawString(data.templates.c_str(), 140, 15, 0xDEDB); // Best diff render.drawString(data.bestDiff.c_str(), 140, 38, 0xDEDB); // 32Bit shares - render.setFontSize(13); render.drawString(data.completedShares.c_str(), 140, 60, 0xDEDB); // Hores render.setFontSize(9); diff --git a/src/drivers/storage/SDCard.cpp b/src/drivers/storage/SDCard.cpp index 4552f8c..a12f5fe 100644 --- a/src/drivers/storage/SDCard.cpp +++ b/src/drivers/storage/SDCard.cpp @@ -57,6 +57,15 @@ bool SDCard::cardBusy() return cardBusy_; } +/// @brief End the card to free heap space. +void SDCard::terminate() +{ + iSD_->end(); +#ifdef BUILD_SDSPI + ispi_->end(); +#endif +} + /// @brief Transfer settings from config file on a SD card to the device. /// @param nvMemory* where to save /// @param TSettings* passing a struct is required, to save memory @@ -96,9 +105,13 @@ bool SDCard::loadConfigFile(TSettings* Settings) if (!error) { serializeJsonPretty(json, Serial); - Serial.print('\n'); - Settings->WifiSSID = json[JSON_KEY_SSID] | Settings->WifiSSID; - Settings->WifiPW = json[JSON_KEY_PASW] | Settings->WifiPW; + Serial.print('\n'); + if (json.containsKey(JSON_KEY_SSID)) { + Settings->WifiSSID = json[JSON_KEY_SSID] | Settings->WifiSSID; + } + if (json.containsKey(JSON_KEY_PASW)) { + Settings->WifiPW = json[JSON_KEY_PASW] | Settings->WifiPW; + } Settings->PoolAddress = json[JSON_KEY_POOLURL] | Settings->PoolAddress; strcpy(Settings->PoolPassword, json[JSON_KEY_POOLPASS] | Settings->PoolPassword); strcpy(Settings->BtcWallet, json[JSON_KEY_WALLETID] | Settings->BtcWallet); @@ -108,6 +121,13 @@ bool SDCard::loadConfigFile(TSettings* Settings) Settings->Timezone = json[JSON_KEY_TIMEZONE].as(); if (json.containsKey(JSON_KEY_STATS2NV)) Settings->saveStats = json[JSON_KEY_STATS2NV].as(); + if (json.containsKey(JSON_KEY_INVCOLOR)) { + Settings->invertColors = json[JSON_KEY_INVCOLOR].as(); + } else { + Settings->invertColors = false; + } + // Serial.printf("Carteira Lida SD:%s\n", Settings.BtcWallet); + Serial.printf("Carteira Lida SDs:%s\n", Settings->BtcWallet); return true; } else @@ -156,7 +176,7 @@ bool SDCard::cardAvailable() /// @return true on success bool SDCard::initSDcard() { - if (!cardAvailable()) + if (!cardAvailable()) { Serial.println("SDCard: init SD card interface."); #if defined (BUILD_SDMMC_4) @@ -184,7 +204,6 @@ bool SDCard::initSDcard() } #else - SDCard::SDCard(int ID) {} SDCard::~SDCard() {} void SDCard::SD2nvMemory(nvMemory* nvMem, TSettings* Settings) {}; @@ -192,5 +211,5 @@ bool SDCard::loadConfigFile(TSettings* Settings) { return false; } bool SDCard::initSDcard() { return false; } bool SDCard::cardAvailable() { return false; } bool SDCard::cardBusy() { return false; } - +void SDCard::terminate() {} #endif //BUILD_SDMMC diff --git a/src/drivers/storage/SDCard.h b/src/drivers/storage/SDCard.h index a90deb3..4ff0076 100644 --- a/src/drivers/storage/SDCard.h +++ b/src/drivers/storage/SDCard.h @@ -58,6 +58,7 @@ public: bool loadConfigFile(TSettings* Settings); bool cardAvailable(); bool cardBusy(); + void terminate(); private: bool initSDcard(); bool cardInitialized_; diff --git a/src/drivers/storage/nvMemory.cpp b/src/drivers/storage/nvMemory.cpp index 0e88f07..2dbb0aa 100644 --- a/src/drivers/storage/nvMemory.cpp +++ b/src/drivers/storage/nvMemory.cpp @@ -35,6 +35,7 @@ bool nvMemory::saveConfig(TSettings* Settings) json[JSON_SPIFFS_KEY_WALLETID] = Settings->BtcWallet; json[JSON_SPIFFS_KEY_TIMEZONE] = Settings->Timezone; json[JSON_SPIFFS_KEY_STATS2NV] = Settings->saveStats; + json[JSON_SPIFFS_KEY_INVCOLOR] = Settings->invertColors; // Open config file File configFile = SPIFFS.open(JSON_CONFIG_FILE, "w"); @@ -97,6 +98,11 @@ bool nvMemory::loadConfig(TSettings* Settings) Settings->Timezone = json[JSON_SPIFFS_KEY_TIMEZONE].as(); if (json.containsKey(JSON_SPIFFS_KEY_STATS2NV)) Settings->saveStats = json[JSON_SPIFFS_KEY_STATS2NV].as(); + if (json.containsKey(JSON_SPIFFS_KEY_INVCOLOR)) { + Settings->invertColors = json[JSON_SPIFFS_KEY_INVCOLOR].as(); + } else { + Settings->invertColors = false; + } return true; } else diff --git a/src/drivers/storage/storage.h b/src/drivers/storage/storage.h index fe5d8e4..b667966 100644 --- a/src/drivers/storage/storage.h +++ b/src/drivers/storage/storage.h @@ -18,6 +18,7 @@ #define DEFAULT_POOLPORT 21496 #define DEFAULT_TIMEZONE 2 #define DEFAULT_SAVESTATS false +#define DEFAULT_INVERTCOLORS false // JSON config files #define JSON_CONFIG_FILE "/config.json" @@ -31,6 +32,7 @@ #define JSON_KEY_POOLPORT "PoolPort" #define JSON_KEY_TIMEZONE "Timezone" #define JSON_KEY_STATS2NV "SaveStats" +#define JSON_KEY_INVCOLOR "invertColors" // JSON config file SPIFFS (different for backward compatibility with existing devices) #define JSON_SPIFFS_KEY_POOLURL "poolString" @@ -39,6 +41,7 @@ #define JSON_SPIFFS_KEY_WALLETID "btcString" #define JSON_SPIFFS_KEY_TIMEZONE "gmtZone" #define JSON_SPIFFS_KEY_STATS2NV "saveStatsToNVS" +#define JSON_SPIFFS_KEY_INVCOLOR "invertColors" // settings struct TSettings @@ -51,6 +54,7 @@ struct TSettings int PoolPort{ DEFAULT_POOLPORT }; int Timezone{ DEFAULT_TIMEZONE }; bool saveStats{ DEFAULT_SAVESTATS }; + bool invertColors{ DEFAULT_INVERTCOLORS }; }; #endif // _STORAGE_H_ \ No newline at end of file diff --git a/src/media/images_240_135.h b/src/media/images_240_135.h index cb4935c..ae036f3 100644 --- a/src/media/images_240_135.h +++ b/src/media/images_240_135.h @@ -142,7 +142,7 @@ const unsigned short setupModeScreen[0xFD20] PROGMEM = { // Icon width and height const uint16_t MinerWidth = 240; -const uint16_t MinerHeight = 128; +const uint16_t MinerHeight = 135; const unsigned short MinerScreen[0x7800] PROGMEM = { diff --git a/src/mining.cpp b/src/mining.cpp index 1b22107..8e529a9 100644 --- a/src/mining.cpp +++ b/src/mining.cpp @@ -400,6 +400,13 @@ void saveStat() { nvs_set_u64(stat_handle, "upTime", upTime + (esp_timer_get_time()/1000000)); } +void resetStat() { + Serial.printf("[MONITOR] Resetting NVS stats\n"); + templates = hashes = Mhashes = totalKHashes = elapsedKHs = upTime = shares = valids = 0; + best_diff = 0.0; + saveStat(); +} + void runMonitor(void *name) { diff --git a/src/mining.h b/src/mining.h index 2eff707..a1adf14 100644 --- a/src/mining.h +++ b/src/mining.h @@ -17,6 +17,8 @@ void runStratumWorker(void *name); void runMiner(void *name); String printLocalTime(void); +void resetStat(); + typedef struct{ uint8_t bytearray_target[32]; uint8_t bytearray_pooltarget[32]; diff --git a/src/monitor.cpp b/src/monitor.cpp index 0d129a0..7652105 100644 --- a/src/monitor.cpp +++ b/src/monitor.cpp @@ -25,6 +25,7 @@ extern monitor_data mMonitor; //from saved config extern TSettings Settings; +bool invertColors = false; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000); @@ -356,14 +357,13 @@ String getPoolAPIUrl(void) { pool_data getPoolData(void){ //pool_data pData; if((mPoolUpdate == 0) || (millis() - mPoolUpdate > UPDATE_POOL_min * 60 * 1000)){ - if (WiFi.status() != WL_CONNECTED) return pData; - + if (WiFi.status() != WL_CONNECTED) return pData; //Make first API call to get global hash and current difficulty HTTPClient http; http.setReuse(true); try { String btcWallet = Settings.BtcWallet; - Serial.println(btcWallet); + // Serial.println(btcWallet); if (btcWallet.indexOf(".")>0) btcWallet = btcWallet.substring(0,btcWallet.indexOf(".")); #ifdef NERDMINER_T_HMI Serial.println("Pool API : " + poolAPIUrl+btcWallet); @@ -405,10 +405,28 @@ pool_data getPoolData(void){ } doc.clear(); mPoolUpdate = millis(); + Serial.println("\n####### Pool Data OK!"); + } else { + Serial.println("\n####### Pool Data HTTP Error!"); + /* Serial.println(httpCode); + String payload = http.getString(); + Serial.println(payload); */ + // mPoolUpdate = millis(); + pData.bestDifficulty = "P"; + pData.workersHash = "E"; + pData.workersCount = 0; + http.end(); + return pData; } http.end(); } catch(...) { + Serial.println("####### Pool Error!"); + // mPoolUpdate = millis(); + pData.bestDifficulty = "P"; + pData.workersHash = "Error"; + pData.workersCount = 0; http.end(); + return pData; } } return pData; diff --git a/src/monitor.h b/src/monitor.h index 8c458d2..bf2b7b6 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -12,8 +12,8 @@ //Time update period #define UPDATE_PERIOD_h 5 -//API BTC price -#define getBTCAPI "https://api.blockchain.com/v3/exchange/tickers/BTC-USD" +//API BTC price (Update to USDT cus it's more liquidity and flow price updade) +#define getBTCAPI "https://api.blockchain.com/v3/exchange/tickers/BTC-USDT" #define UPDATE_BTC_min 1 //API Block height @@ -31,7 +31,7 @@ #define getPublicPool "https://public-pool.io:40557/api/client/" // +btcString #define UPDATE_POOL_min 1 -#define NEXT_HALVING_EVENT 840000 +#define NEXT_HALVING_EVENT 1050000 //840000 #define HALVING_BLOCKS 210000 enum NMState { diff --git a/src/utils.cpp b/src/utils.cpp index 58df0ca..20120be 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -136,21 +136,37 @@ bool checkValid(unsigned char* hash, unsigned char* target) { return valid; } +/** + * get random extranonce2 +*/ +void getRandomExtranonce2(int extranonce2_size, char *extranonce2) { + uint8_t b0, b1, b2, b3; + + b0 = rand() % 256; + b1 = rand() % 256; + b2 = rand() % 256; + b3 = rand() % 256; + + unsigned long extranonce2_number = b3 << 24 | b2 << 16 | b1 << 8 | b0; + + char format[] = "%00x"; + + sprintf(&format[1], "%02dx", extranonce2_size * 2); + sprintf(extranonce2, format, extranonce2_number); +} + +/** + * get linear extranonce2 +*/ void getNextExtranonce2(int extranonce2_size, char *extranonce2) { - unsigned long extranonce2_number = strtoul(extranonce2, NULL, 10); + extranonce2_number++; - - memset(extranonce2, '0', 2 * extranonce2_size); - if (extranonce2_number > long(pow(10, 2 * extranonce2_size))) { - return; - } - - char next_extranounce2[2 * extranonce2_size + 1]; - memset(extranonce2, '0', 2 * extranonce2_size); - ultoa(extranonce2_number, next_extranounce2, 10); - memcpy(extranonce2 + (2 * extranonce2_size) - long(log10(extranonce2_number)) - 1 , next_extranounce2, strlen(next_extranounce2)); - extranonce2[2 * extranonce2_size] = 0; + + char format[] = "%00x"; + + sprintf(&format[1], "%02dx", extranonce2_size * 2); + sprintf(extranonce2, format, extranonce2_number); } miner_data init_miner_data(void){ diff --git a/src/wManager.cpp b/src/wManager.cpp index be196e1..f4eee2c 100644 --- a/src/wManager.cpp +++ b/src/wManager.cpp @@ -13,6 +13,7 @@ #include "drivers/storage/SDCard.h" #include "drivers/storage/nvMemory.h" #include "drivers/storage/storage.h" +#include "mining.h" #include "timeconst.h" @@ -34,15 +35,23 @@ void saveConfigCallback() // Callback notifying us of the need to save configuration { Serial.println("Should save config"); - shouldSaveConfig = true; + shouldSaveConfig = true; //wm.setConfigPortalBlocking(false); } +/* void saveParamsCallback() +// Callback notifying us of the need to save configuration +{ + Serial.println("Should save config"); + shouldSaveConfig = true; + nvMem.saveConfig(&Settings); +} */ + void configModeCallback(WiFiManager* myWiFiManager) // Called when config mode launched { Serial.println("Entered Configuration Mode"); - + drawSetupScreen(); Serial.print("Config SSID: "); Serial.println(myWiFiManager->getConfigPortalSSID()); @@ -54,6 +63,7 @@ void reset_configuration() { Serial.println("Erasing Config, restarting"); nvMem.deleteConfig(); + resetStat(); wm.resetSettings(); ESP.restart(); } @@ -101,7 +111,10 @@ void init_WifiManager() forceConfig = true; } }; - + + // Free the memory from SDCard class + SDCrd.terminate(); + // Reset settings (only for development) //wm.resetSettings(); @@ -110,14 +123,15 @@ void init_WifiManager() // Set config save notify callback wm.setSaveConfigCallback(saveConfigCallback); + wm.setSaveParamsCallback(saveConfigCallback); // Set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode - wm.setAPCallback(configModeCallback); + wm.setAPCallback(configModeCallback); //Advanced settings wm.setConfigPortalBlocking(false); //Hacemos que el portal no bloquee el firmware - wm.setConnectTimeout(50); // how long to try to connect for before continuing - //wm.setConfigPortalTimeout(30); // auto close configportal after n seconds + wm.setConnectTimeout(40); // how long to try to connect for before continuing + wm.setConfigPortalTimeout(180); // auto close configportal after n seconds // wm.setCaptivePortalEnable(false); // disable captive portal redirection // wm.setAPClientCheck(true); // avoid timeout if client connected to softap //wm.setTimeout(120); @@ -136,7 +150,7 @@ void init_WifiManager() WiFiManagerParameter port_text_box_num("Poolport", "Pool port", convertedValue, 7); // Text box (String) - 80 characters maximum - WiFiManagerParameter password_text_box("Poolpassword", "Pool password (Optional)", Settings.PoolPassword, 80); + //WiFiManagerParameter password_text_box("Poolpassword", "Pool password (Optional)", Settings.PoolPassword, 80); // Text box (String) - 80 characters maximum WiFiManagerParameter addr_text_box("btcAddress", "Your BTC address", Settings.BtcWallet, 80); @@ -153,7 +167,9 @@ void init_WifiManager() { strcat(checkboxParams, " checked"); } - WiFiManagerParameter save_stats_to_nvs("SaveStatsToNVS", "Track Uptime, Best Diff, Total Hashes in device Flash memory. (Experimental)", "T", 2, checkboxParams, WFM_LABEL_AFTER); + WiFiManagerParameter save_stats_to_nvs("SaveStatsToNVS", "Save mining statistics to flash memory.", "T", 2, checkboxParams, WFM_LABEL_AFTER); + // Text box (String) - 80 characters maximum + WiFiManagerParameter password_text_box("Poolpassword - Optional", "Pool password", Settings.PoolPassword, 80); // Add all defined parameters wm.addParameter(&pool_text_box); @@ -163,6 +179,15 @@ void init_WifiManager() wm.addParameter(&time_text_box_num); wm.addParameter(&features_html); wm.addParameter(&save_stats_to_nvs); + #ifdef ESP32_2432S028R + char checkboxParams2[24] = "type=\"checkbox\""; + if (Settings.invertColors) + { + strcat(checkboxParams2, " checked"); + } + WiFiManagerParameter invertColors("inverColors", "Invert Display Colors (if the colors looks weird)", "T", 2, checkboxParams2, WFM_LABEL_AFTER); + wm.addParameter(&invertColors); + #endif Serial.println("AllDone: "); if (forceConfig) @@ -171,8 +196,8 @@ void init_WifiManager() //No configuramos timeout al modulo wm.setConfigPortalBlocking(true); //Hacemos que el portal SI bloquee el firmware drawSetupScreen(); - - if (wm.startConfigPortal(DEFAULT_SSID, DEFAULT_WIFIPW)) + mMonitor.NerdStatus = NM_Connecting; + if (!wm.startConfigPortal(DEFAULT_SSID, DEFAULT_WIFIPW)) { //Could be break forced after edditing, so save new config Serial.println("failed to connect and hit timeout"); @@ -181,33 +206,48 @@ void init_WifiManager() strncpy(Settings.PoolPassword, password_text_box.getValue(), sizeof(Settings.PoolPassword)); strncpy(Settings.BtcWallet, addr_text_box.getValue(), sizeof(Settings.BtcWallet)); Settings.Timezone = atoi(time_text_box_num.getValue()); - Serial.println(save_stats_to_nvs.getValue()); + //Serial.println(save_stats_to_nvs.getValue()); Settings.saveStats = (strncmp(save_stats_to_nvs.getValue(), "T", 1) == 0); - + #ifdef ESP32_2432S028R + Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0); + #endif nvMem.saveConfig(&Settings); delay(3*SECOND_MS); //reset and try again, or maybe put it to deep sleep - ESP.restart(); - delay(5*SECOND_MS); + ESP.restart(); }; } else { //Tratamos de conectar con la configuración inicial ya almacenada mMonitor.NerdStatus = NM_Connecting; - wm.setCaptivePortalEnable(false); // disable captive portal redirection - if (!wm.autoConnect(Settings.WifiSSID.c_str(), Settings.WifiPW.c_str())) + // disable captive portal redirection + wm.setCaptivePortalEnable(true); + wm.setConfigPortalBlocking(true); + wm.setEnableConfigPortal(true); + // if (!wm.autoConnect(Settings.WifiSSID.c_str(), Settings.WifiPW.c_str())) + if (!wm.autoConnect(DEFAULT_SSID, DEFAULT_WIFIPW)) { - Serial.println("Failed to connect and hit timeout"); - //delay(3000); - // if we still have not connected restart and try all over again - //ESP.restart(); - //delay(5000); - } + Serial.println("Failed to connect to configured WIFI, and hit timeout"); + if (shouldSaveConfig) { + // Save new config + Settings.PoolAddress = pool_text_box.getValue(); + Settings.PoolPort = atoi(port_text_box_num.getValue()); + strncpy(Settings.PoolPassword, password_text_box.getValue(), sizeof(Settings.PoolPassword)); + strncpy(Settings.BtcWallet, addr_text_box.getValue(), sizeof(Settings.BtcWallet)); + Settings.Timezone = atoi(time_text_box_num.getValue()); + // Serial.println(save_stats_to_nvs.getValue()); + Settings.saveStats = (strncmp(save_stats_to_nvs.getValue(), "T", 1) == 0); + #ifdef ESP32_2432S028R + Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0); + #endif + nvMem.saveConfig(&Settings); + vTaskDelay(2000 / portTICK_PERIOD_MS); + } + ESP.restart(); + } } - - mMonitor.NerdStatus = NM_Connecting; - + //Conectado a la red Wifi if (WiFi.status() == WL_CONNECTED) { //tft.pushImage(0, 0, MinerWidth, MinerHeight, MinerScreen); @@ -244,12 +284,21 @@ void init_WifiManager() Serial.print("TimeZone fromUTC: "); Serial.println(Settings.Timezone); + #ifdef ESP32_2432S028R + Settings.invertColors = (strncmp(invertColors.getValue(), "T", 1) == 0); + Serial.print("Invert Colors: "); + Serial.println(Settings.invertColors); + #endif + } // Save the custom parameters to FS if (shouldSaveConfig) { nvMem.saveConfig(&Settings); + #ifdef ESP32_2432S028R + if (Settings.invertColors) ESP.restart(); + #endif } }