sohaib qamar / SWUpdate_RPC

Fork of SWUpdate by David Smart

Revision:
26:f2bb6061dcb3
Parent:
25:af99bdcca2b4
--- a/SWUpdate.cpp	Tue Nov 21 16:58:49 2017 +0000
+++ b/SWUpdate.cpp	Mon May 07 19:56:00 2018 +0000
@@ -166,18 +166,12 @@
     return noFailed;
 }
 
-SWUpdate_T SoftwareUpdate(const char *url, const char * name, Reboot_T action)
+
+int GetSoftwareVersionNumber(const char * name)
 {
-    HTTPClient http;
-    //http.setTimeout( 15000 );
-    char fqurl[SW_MAX_URL];    // fully qualified url
+    char nameroot[7];
     char verfn[SW_MAX_FQFN];     // local version file
-    char fwfn[SW_MAX_FQFN];
-    char nameroot[7];
-    uint16_t result = SWUP_OK;    // starting out quite optimistic, for all the things that can go wrong
-    char buf[50];           // long enough for 3 comma separated numbers...
-
-    INFO("SoftwareUpdate(%s , %s)", url, name);
+    
     strncpy(nameroot, name, 6);
     nameroot[6] = '\0';
     snprintf(verfn, SW_MAX_FQFN, "/local/%s.ver", nameroot);
@@ -188,9 +182,52 @@
     if (fv) {
         fscanf(fv, "%d", &inst_ver);
         fclose(fv);
+    } else {
+        inst_ver = -1;
     }
     INFO("  Installed version: %d", inst_ver);
+    return inst_ver;
+}
 
+bool SetSoftwareVersionNumber(const char * name, int ver, int cksum, int filesize)
+{
+    char nameroot[7];
+    char verfn[SW_MAX_FQFN];     // local version file
+    char buf[40];
+    
+    strncpy(nameroot, name, 6);
+    nameroot[6] = '\0';
+    snprintf(verfn, SW_MAX_FQFN, "/local/%s.ver", nameroot);
+    snprintf(buf, 40, "%d,%d,%d", ver, cksum, filesize);
+    FILE *fv = fopen(verfn, "w");
+    if (fv) {
+        int fr = fputs(buf, fv);
+        fclose( fv );
+        if (fr >= 0) {
+            return true;
+        } else {
+            ERR("Failed (%d) to update stored version number.", fr);
+        }
+    } else {
+        WARN("Failed to update local version info in %s.", verfn);
+    }
+    return false;
+}
+
+SWUpdate_T SoftwareUpdate(const char *url, const char * name, Reboot_T action)
+{
+    HTTPClient http;
+    //http.setTimeout( 15000 );
+    char fqurl[SW_MAX_URL];    // fully qualified url
+    char fwfn[SW_MAX_FQFN];
+    char nameroot[7];
+    uint16_t result = SWUP_OK;    // starting out quite optimistic, for all the things that can go wrong
+    char buf[50];           // long enough for 3 comma separated numbers...
+
+    INFO("SoftwareUpdate(%s , %s)", url, name);
+    strncpy(nameroot, name, 6);
+    nameroot[6] = '\0';
+    int inst_ver = GetSoftwareVersionNumber(name);
     /* Download latest version string */
     //HTTPText server_ver("test message");
     snprintf(fqurl, SW_MAX_URL, "%s/%s.txt", url, name);
@@ -225,23 +262,16 @@
                             result |= SWUP_OLD_STUCK;
                         }
                         INFO("Updating stored version number.");
-                        fv = fopen(verfn, "w");
-                        if (fv) {
-                            int fr = fputs(buf, fv);
-                            if (fr < 0) {
-                                ERR("Failed (%d) to update stored version number.", fr);
-                                fclose( fv );
-                                result |= SWUP_VER_STUCK;
-                            } else {
-                                fclose( fv );
-                                if (action == AUTO_REBOOT) {
-                                    WARN("Resetting...\n");
-                                    wait_ms(200);
-                                    mbed_reset();
-                                }
+                        if (SetSoftwareVersionNumber(name, latest_ver, cksum, fsize)) {
+                            // ok
+                            if (action == AUTO_REBOOT) {
+                                WARN("Resetting...\n");
+                                wait_ms(200);
+                                mbed_reset();
                             }
                         } else {
-                            WARN("Failed to update local version info in %s.", verfn);
+                            // failed
+                            ERR("Failed to update stored version number.");
                             result |= SWUP_VWRITE_FAILED;
                         }
                     } else /* t == bad_crc */ {