(arduino) update on reboot, require sd, + webserver upload

redowl
Posts: 5
Joined: Fri Jul 12, 2024 4:52 pm

(arduino) update on reboot, require sd, + webserver upload

Postby redowl » Fri Jul 12, 2024 5:27 pm

  1. uint64_t SD_CARD_INFO[5]            = {0,0,0,0,0}; //type and present, size, totalbyte, used, freebyte
  2.  
  3. Preferences nvs_;
  4.  
  5. void gatto_fw_set_writable(){
  6.     nvs_.putBool("update",true);
  7. }
  8. void gatto_fw_set_protect(){
  9.     nvs_.putBool("update",false);
  10. }
  11. bool gatto_fw_get_staus(){
  12.   bool str = nvs_.getBool("update");
  13.   return str;
  14. }
  15.  
  16.  
  17. void firmware_progress(size_t currSize, size_t totalSize) {
  18.       Serial.printf("FIRMWARE:  Update %d of %d bytes...\n", currSize, totalSize);
  19. }
  20.  
  21.  
  22. void firmware_update(){
  23.   if(SD_CARD_INFO[0]>0){
  24.       String pluto = gatto_fw_get_staus();                         //  enable update (?)
  25.       if(pluto=="true"){
  26.             if (SD.exists("/firmware.bin")) {
  27.             SD.remove("/firmware.bak");
  28.           if (SD.rename("/firmware.bin", "/firmware.bak")){
  29.             // Serial.println(F("Firmware rename succesfully!"));
  30.             gatto_fw_set_protect();                                    // disable update (!)
  31.             File firmware =  SD.open("/firmware.bak");
  32.             if (firmware) {
  33.               Update.onProgress(firmware_progress);
  34.               Update.begin(firmware.size(), U_FLASH);
  35.               Update.writeStream(firmware);
  36.               if (Update.end()){
  37.                 // Serial.println(F("Update finished!"));
  38.               }else{
  39.                 //Serial.println(F("Update error!"));
  40.                 //Serial.println(Update.getError());
  41.               }
  42.             firmware.close();
  43.             // delay(2000);
  44.             ESP.restart();
  45.             }else{
  46.             // Serial.println(F("error reading firmware"));
  47.             }
  48.           }else{
  49.             // Serial.println(F("error rename firmware"));
  50.           }
  51.         }else{
  52.            // Serial.println(F("No new firmware"));
  53.         }
  54.     }else{
  55.       if (SD.exists("/firmware.bin")) {
  56.           SD.remove("/firmware.bin");
  57.       }
  58.     }
  59.   }
  60. }
  61.  
  62.  
  63.  
  64. void setup_sdcard(){
  65.   pinMode(SD_CS, OUTPUT);
  66.   digitalWrite(SD_CS, HIGH);
  67.   SPI.begin(SDMMC_CLK, SDMMC_D0, SDMMC_CMD);
  68.  if(!SD.begin(SD_CS)){
  69.  
  70. //   if(!SD.begin(SD_CS)){
  71.     SD_CARD_INFO[0] = 0;
  72.   }else{
  73.     SD_CARD_INFO[0] = SD.cardType();
  74.     //onError["SD"]["type"] = tipo;
  75.     SD_CARD_INFO[1] = SD.cardSize() / (1024 * 1024);
  76.     //onError["SD"]["size"] = cardSize;
  77.     SD_CARD_INFO[2] = SD.totalBytes() / (1024 * 1024);
  78.     //onError["SD"]["totalbytes"] = totalBytes;
  79.     SD_CARD_INFO[3] = SD.usedBytes() / (1024 * 1024);
  80.     //onError["SD"]["usedbytes"] = usedBytes;
  81.     SD_CARD_INFO[4] = (SD_CARD_INFO[2] - SD_CARD_INFO[3]); //free
  82.   }
  83. }
  84.  
  85.  
  86. setup(){
  87.   Serial.begin(115200);
  88. setup_sdcard();    
  89. firmware_update();
  90. ....
  91.  
  92.  

Who is online

Users browsing this forum: No registered users and 31 guests