Update /spiffs via internet. http://update.mbse.eu is now the update server.

Wed, 24 Oct 2018 23:15:04 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 24 Oct 2018 23:15:04 +0200
changeset 13
8f01b74bf1dd
parent 12
063a21ca11f7
child 14
9fbdf8e0bd52

Update /spiffs via internet. http://update.mbse.eu is now the update server.

image/files.list file | annotate | diff | comparison | revisions
image/version.txt file | annotate | diff | comparison | revisions
image/w/chart.html file | annotate | diff | comparison | revisions
image/w/index.html file | annotate | diff | comparison | revisions
image/w/index.html.gz file | annotate | diff | comparison | revisions
image/w/logfiles.json file | annotate | diff | comparison | revisions
image/w/vnc.html.orig file | annotate | diff | comparison | revisions
main/task_sdcard.c file | annotate | diff | comparison | revisions
main/updates.c file | annotate | diff | comparison | revisions
--- a/image/files.list	Wed Oct 24 11:55:39 2018 +0200
+++ b/image/files.list	Wed Oct 24 23:15:04 2018 +0200
@@ -1,81 +1,75 @@
-/fonts/BigFont.fon
-/fonts/DejaVuSans12.fon
-/fonts/DejaVuSans18.fon
-/fonts/DejaVuSans24.fon
-/fonts/DotMatrix_M.fon
-/fonts/Grotesk24x48.fon
-/fonts/SmallFont.fon
-/fonts/Ubuntu.fon
-/fonts/arial_bold.fon
-/fonts/ocrfont.c
-/fonts/swiss721_outline.fon
-/www/app/error-handler.js.gz
-/www/app/localization.js.gz
-/www/app/ui.js.gz
-/www/app/webutil.js.gz
-/www/app/images/clipboard.svg.gz
-/www/app/images/connect.svg.gz
-/www/app/images/disconnect.svg.gz
-/www/app/images/drag.svg.gz
-/www/app/images/error.svg.gz
-/www/app/images/expander.svg.gz
-/www/app/images/fullscreen.svg.gz
-/www/app/images/handle.svg.gz
-/www/app/images/handle_bg.svg.gz
-/www/app/images/info.svg.gz
-/www/app/images/mouse_left.svg.gz
-/www/app/images/mouse_middle.svg.gz
-/www/app/images/mouse_none.svg.gz
-/www/app/images/mouse_right.svg.gz
-/www/app/images/settings.svg.gz
-/www/app/images/warning.svg.gz
-/www/app/locale/de.json
-/www/app/locale/el.json
-/www/app/locale/es.json
-/www/app/locale/nl.json
-/www/app/locale/pl.json
-/www/app/locale/sv.json
-/www/app/locale/tr.json
-/www/app/locale/zh.json
-/www/app/sounds/bell.mp3
-/www/app/sounds/bell.oga
-/www/app/styles/base.css
-/www/app/styles/web.css
-/www/core/base64.js.gz
-/www/core/des.js.gz
-/www/core/display.js.gz
-/www/core/encodings.js.gz
-/www/core/inflator.js.gz
-/www/core/rfb.js.gz
-/www/core/websock.js.gz
-/www/core/input/mouse.js.gz
-/www/core/util/browser.js.gz
-/www/core/util/events.js.gz
-/www/core/util/eventtarget.js.gz
-/www/core/util/logging.js.gz
-/www/core/util/polyfill.js.gz
-/www/core/util/strings.js.gz
-www/css/style.css
-www/js/Chart.min.js.gz
-www/js/ch-plug-anno.min.js.gz
-www/js/jquery-1.12.4.min.js.gz
-www/js/webui.js
-www/js/modl/babel.js.gz
-www/js/modl/brloader.js.gz
-www/js/utils/common.js.gz
-www/js/zlib/adler32.js.gz
-www/js/zlib/constants.js.gz
-www/js/zlib/crc32.js.gz
-www/js/zlib/deflate.js.gz
-www/js/zlib/gzheader.js.gz
-www/js/zlib/inffast.js.gz
-www/js/zlib/inflate.js.gz
-www/js/zlib/inftrees.js.gz
-www/js/zlib/messages.js.gz
-www/js/zlib/trees.js.gz
-www/js/zlib/zstream.js.gz
-www/chart.html
-www/index.html
-www/logs.html
-www/vnc.html.gz
-www/webui.html
+fonts/DejaVuSans18.fon
+fonts/DejaVuSans24.fon
+fonts/Grotesk24x48.fon
+fonts/SmallFont.fon
+fonts/Ubuntu.fon
+w/app/error-handler.js.gz
+w/app/localization.js.gz
+w/app/ui.js.gz
+w/app/webutil.js.gz
+w/app/images/clipboard.svg.gz
+w/app/images/connect.svg.gz
+w/app/images/disconnect.svg.gz
+w/app/images/drag.svg.gz
+w/app/images/error.svg.gz
+w/app/images/expander.svg.gz
+w/app/images/fullscreen.svg.gz
+w/app/images/handle.svg.gz
+w/app/images/handle_bg.svg.gz
+w/app/images/info.svg.gz
+w/app/images/mouse_left.svg.gz
+w/app/images/mouse_middle.svg.gz
+w/app/images/mouse_none.svg.gz
+w/app/images/mouse_right.svg.gz
+w/app/images/settings.svg.gz
+w/app/images/warning.svg.gz
+w/app/locale/de.json
+w/app/locale/el.json
+w/app/locale/es.json
+w/app/locale/nl.json
+w/app/locale/pl.json
+w/app/locale/sv.json
+w/app/locale/tr.json
+w/app/locale/zh.json
+w/app/sounds/bell.mp3
+w/app/sounds/bell.oga
+w/app/styles/base.css
+w/app/styles/web.css
+w/core/base64.js.gz
+w/core/des.js.gz
+w/core/display.js.gz
+w/core/encodings.js.gz
+w/core/inflator.js.gz
+w/core/rfb.js.gz
+w/core/websock.js.gz
+w/core/input/mouse.js.gz
+w/core/util/browser.js.gz
+w/core/util/events.js.gz
+w/core/util/eventtarget.js.gz
+w/core/util/logging.js.gz
+w/core/util/polyfill.js.gz
+w/core/util/strings.js.gz
+w/css/style.css
+w/js/Chart.min.js.gz
+w/js/ch-plug-anno.min.js.gz
+w/js/jquery-1.12.4.min.js.gz
+w/js/webui.js
+w/js/modl/babel.js.gz
+w/js/modl/brloader.js.gz
+w/js/utils/common.js.gz
+w/js/zlib/adler32.js.gz
+w/js/zlib/constants.js.gz
+w/js/zlib/crc32.js.gz
+w/js/zlib/deflate.js.gz
+w/js/zlib/gzheader.js.gz
+w/js/zlib/inffast.js.gz
+w/js/zlib/inflate.js.gz
+w/js/zlib/inftrees.js.gz
+w/js/zlib/messages.js.gz
+w/js/zlib/trees.js.gz
+w/js/zlib/zstream.js.gz
+w/chart.html
+w/index.html.gz
+w/logs.html
+w/vnc.html.gz
+w/webui.html
--- a/image/version.txt	Wed Oct 24 11:55:39 2018 +0200
+++ b/image/version.txt	Wed Oct 24 23:15:04 2018 +0200
@@ -1,1 +1,1 @@
-0.2.4
+0.0.g
--- a/image/w/chart.html	Wed Oct 24 11:55:39 2018 +0200
+++ b/image/w/chart.html	Wed Oct 24 23:15:04 2018 +0200
@@ -1,34 +1,35 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-  <title>Brew Log</title>
-  <meta charset="utf-8" />
-  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
-  <script src="js/jquery-1.12.4.min.js"></script>
-  <script src="js/Chart.min.js"></script>
-  <script src="js/ch-plug-anno.min.js"></script>
-  <link rel="stylesheet" href="app/styles/web.css">
-  <style>
+ <title>Brew Log</title>
+ <meta charset="utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
+ <script src="js/jquery-1.12.4.min.js"></script>
+ <script src="js/Chart.min.js"></script>
+ <script src="js/ch-plug-anno.min.js"></script>
+ <link rel="stylesheet" href="app/styles/web.css">
+ <style>
    canvas{
 	-moz-user-select: none;
 	-webkit-user-select: none;
 	-ms-user-select: none;
 	background: white;
    }
-  </style>
+ </style>
 </head>
 <body>
 
-  <div id="tmap"></div>
+ <div id="tmap"></div>
  <div style="width:95%; margin:0 auto; margin-top: 20px;">
   <canvas id="myChart"></canvas>
  </div>
- <br>
- <form action="index.html"><input type="submit" class="button" value="Hoofdmenu"></form>
+ <div class="menu">
+  <form action="index.html"><input type="submit" class="button" value="Hoofdmenu"></form>
+  <form action="logs.html"><input type="submit" class="button" value="Brouw logs"></form>
+ </div>
 
  <script>
-
 var tokens = [];
 var query = location.search;
 query = query.slice(1);
@@ -40,7 +41,6 @@
   tokens[key] = data;
 });
 
-
 var logfile = tokens["show"];
 $('#tmap').append(logfile);
 
--- a/image/w/index.html	Wed Oct 24 11:55:39 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<!DOCTYPE HTML>
-<HTML>
- <HEAD>
-  <title>BrewBoard</title>
-  <meta charset="utf-8" />
-  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
-  <link rel="stylesheet" href="app/styles/web.css" />
- </HEAD>
- <BODY>
-
-  <div class="columns menu">
-   <ul>
-    <li><input type="none" class="button" value="BrewBoard menu"></li>
-    <li><form action="vnc.html"><input type="submit" class="button" value="Touch Scherm"></form></li>
-    <li><form action="logs.html"><input type="submit" class="button" value="Brouw logs"></form></li>
-    <li><form action="webui.html"><input type="submit" class="button" value="Web User Interface"></form></li>
-    <li><form action="#"><input type="submit" class="button" value="Menu 3"></form></li>
-   </ul>
-  </div>
-
- </BODY>
-</HTML>
-
Binary file image/w/index.html.gz has changed
--- a/image/w/logfiles.json	Wed Oct 24 11:55:39 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-{"Dir":[{"Folder":"/log","Files":[{"File":"br1806302319.json","Size":1073,"Date":1530397502},{"File":"br1807011111.json","Size":11510,"Date":1530445220},{"File":"br1806301536.json","Size":761,"Date":1530369610},{"File":"br1806301624.json","Size":8165,"Date":1530375054},{"File":"br1806301750.json","Size":18921,"Date":1530384530},{"File":"br1806302023.json","Size":9399,"Date":1530390360}]}]}
--- a/image/w/vnc.html.orig	Wed Oct 24 11:55:39 2018 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-<!DOCTYPE html>
-<html class="noVNC_loading">
-<head>
-
-    <!--
-    noVNC example: simple example using default UI
-    Copyright (C) 2012 Joel Martin
-    Copyright (C) 2016 Samuel Mannehed for Cendio AB
-    Copyright (C) 2016 Pierre Ossman for Cendio AB
-    noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
-    This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
-
-    Connect parameters are provided in query string:
-        http://example.com/?host=HOST&port=PORT&encrypt=1
-    or the fragment:
-        http://example.com/#host=HOST&port=PORT&encrypt=1
-    -->
-    <title>noVNC</title>
-
-    <meta charset="utf-8" />
-
-    <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
-                Remove this if you use the .htaccess -->
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
-
-    <!-- Icons (see Makefile for what the sizes are for) -->
-    <link rel="icon" sizes="16x16" type="image/png" href="app/images/icons/novnc-16x16.png">
-    <link rel="icon" sizes="24x24" type="image/png" href="app/images/icons/novnc-24x24.png">
-    <link rel="icon" sizes="32x32" type="image/png" href="app/images/icons/novnc-32x32.png">
-    <link rel="icon" sizes="48x48" type="image/png" href="app/images/icons/novnc-48x48.png">
-    <link rel="icon" sizes="60x60" type="image/png" href="app/images/icons/novnc-60x60.png">
-    <link rel="icon" sizes="64x64" type="image/png" href="app/images/icons/novnc-64x64.png">
-    <link rel="icon" sizes="72x72" type="image/png" href="app/images/icons/novnc-72x72.png">
-    <link rel="icon" sizes="76x76" type="image/png" href="app/images/icons/novnc-76x76.png">
-    <link rel="icon" sizes="96x96" type="image/png" href="app/images/icons/novnc-96x96.png">
-    <link rel="icon" sizes="120x120" type="image/png" href="app/images/icons/novnc-120x120.png">
-    <link rel="icon" sizes="144x144" type="image/png" href="app/images/icons/novnc-144x144.png">
-    <link rel="icon" sizes="152x152" type="image/png" href="app/images/icons/novnc-152x152.png">
-    <link rel="icon" sizes="192x192" type="image/png" href="app/images/icons/novnc-192x192.png">
-    <!-- Firefox currently mishandles SVG, see #1419039
-    <link rel="icon" sizes="any" type="image/svg+xml" href="app/images/icons/novnc-icon.svg">
-    -->
-    <!-- Repeated last so that legacy handling will pick this -->
-    <link rel="icon" sizes="16x16" type="image/png" href="app/images/icons/novnc-16x16.png">
-
-    <!-- Apple iOS Safari settings -->
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
-    <meta name="apple-mobile-web-app-capable" content="yes" />
-    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
-    <!-- Home Screen Icons (favourites and bookmarks use the normal icons) -->
-    <link rel="apple-touch-icon" sizes="60x60" type="image/png" href="app/images/icons/novnc-60x60.png">
-    <link rel="apple-touch-icon" sizes="76x76" type="image/png" href="app/images/icons/novnc-76x76.png">
-    <link rel="apple-touch-icon" sizes="120x120" type="image/png" href="app/images/icons/novnc-120x120.png">
-    <link rel="apple-touch-icon" sizes="152x152" type="image/png" href="app/images/icons/novnc-152x152.png">
-
-    <!-- Stylesheets -->
-    <link rel="stylesheet" href="app/styles/base.css" />
-
-    <!--
-    <script type='text/javascript'
-        src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
-    -->
-
-    <!-- this is included as a normal file in order to catch script-loading errors as well -->
-    <script type="text/javascript" src="app/error-handler.js"></script>
-
-    <!-- begin scripts -->
-    <!-- promise polyfills promises for IE11 -->
-    <script src="js/promise.js"></script>
-    <!-- ES2015/ES6 modules polyfill -->
-    <script type="module">
-        window._noVNC_has_module_support = true;
-    </script>
-    <script>
-        window.addEventListener("load", function() {
-            if (window._noVNC_has_module_support) return;
-            var loader = document.createElement("script");
-            loader.src = "js/modl/brloader.js";
-            document.head.appendChild(loader);
-        });
-    </script>
-    <!-- actual script modules -->
-    <script type="module" crossorigin="anonymous" src="app/ui.js"></script>
-    <!-- end scripts -->
-</head>
-
-<body>
-
-    <div id="noVNC_fallback_error" class="noVNC_center">
-        <div>
-            <div>noVNC encountered an error:</div>
-            <br>
-            <div id="noVNC_fallback_errormsg"></div>
-        </div>
-    </div>
-
-    <!-- noVNC Control Bar -->
-    <div id="noVNC_control_bar_anchor" class="noVNC_vcenter">
-
-        <div id="noVNC_control_bar">
-            <div id="noVNC_control_bar_handle" title="Hide/Show the control bar"><div></div></div>
-
-            <div class="noVNC_scroll">
-
-            <h1 class="noVNC_logo" translate="no"><span>no</span><br />VNC</h1>
-
-            <!-- Drag/Pan the viewport -->
-            <input type="image" alt="viewport drag" src="app/images/drag.svg"
-                id="noVNC_view_drag_button" class="noVNC_button noVNC_hidden"
-                title="Move/Drag Viewport" />
-
-            <!--noVNC Touch Device only buttons-->
-            <div id="noVNC_mobile_buttons">
-                <input type="image" alt="No mousebutton" src="app/images/mouse_none.svg"
-                    id="noVNC_mouse_button0" class="noVNC_button"
-                    title="Active Mouse Button"/>
-                <input type="image" alt="Left mousebutton" src="app/images/mouse_left.svg"
-                    id="noVNC_mouse_button1" class="noVNC_button"
-                    title="Active Mouse Button"/>
-                <input type="image" alt="Middle mousebutton" src="app/images/mouse_middle.svg"
-                    id="noVNC_mouse_button2" class="noVNC_button"
-                    title="Active Mouse Button"/>
-                <input type="image" alt="Right mousebutton" src="app/images/mouse_right.svg"
-                    id="noVNC_mouse_button4" class="noVNC_button"
-                    title="Active Mouse Button"/>
-                <input type="image" alt="Keyboard" src="app/images/keyboard.svg"
-                    id="noVNC_keyboard_button" class="noVNC_button"
-                    value="Keyboard" title="Show Keyboard" />
-            </div>
-
-            <!-- Extra manual keys -->
-            <div id="noVNC_extra_keys">
-                <input type="image" alt="Extra keys" src="app/images/toggleextrakeys.svg"
-                    id="noVNC_toggle_extra_keys_button" class="noVNC_button"
-                    title="Show Extra Keys"/>
-                <div class="noVNC_vcenter">
-                <div id="noVNC_modifiers" class="noVNC_panel">
-                    <input type="image" alt="Ctrl" src="app/images/ctrl.svg"
-                        id="noVNC_toggle_ctrl_button" class="noVNC_button"
-                        title="Toggle Ctrl"/>
-                    <input type="image" alt="Alt" src="app/images/alt.svg"
-                        id="noVNC_toggle_alt_button" class="noVNC_button"
-                        title="Toggle Alt"/>
-                    <input type="image" alt="Tab" src="app/images/tab.svg"
-                        id="noVNC_send_tab_button" class="noVNC_button"
-                        title="Send Tab"/>
-                    <input type="image" alt="Esc" src="app/images/esc.svg"
-                        id="noVNC_send_esc_button" class="noVNC_button"
-                        title="Send Escape"/>
-                    <input type="image" alt="Ctrl+Alt+Del" src="app/images/ctrlaltdel.svg"
-                        id="noVNC_send_ctrl_alt_del_button" class="noVNC_button"
-                        title="Send Ctrl-Alt-Del" />
-                </div>
-                </div>
-            </div>
-
-            <!-- Shutdown/Reboot -->
-            <input type="image" alt="Shutdown/Reboot" src="app/images/power.svg"
-                id="noVNC_power_button" class="noVNC_button"
-                title="Shutdown/Reboot..." />
-            <div class="noVNC_vcenter">
-            <div id="noVNC_power" class="noVNC_panel">
-                <div class="noVNC_heading">
-                    <img src="app/images/power.svg"> Power
-                </div>
-                <input type="button" id="noVNC_shutdown_button" value="Shutdown" />
-                <input type="button" id="noVNC_reboot_button" value="Reboot" />
-                <input type="button" id="noVNC_reset_button" value="Reset" />
-            </div>
-            </div>
-
-            <!-- Clipboard -->
-            <input type="image" alt="Clipboard" src="app/images/clipboard.svg"
-                id="noVNC_clipboard_button" class="noVNC_button"
-                title="Clipboard" />
-            <div class="noVNC_vcenter">
-            <div id="noVNC_clipboard" class="noVNC_panel">
-                <div class="noVNC_heading">
-                    <img src="app/images/clipboard.svg"> Clipboard
-                </div>
-                <textarea id="noVNC_clipboard_text" rows=5></textarea>
-                <br />
-                <input id="noVNC_clipboard_clear_button" type="button"
-                    value="Clear" class="noVNC_submit" />
-            </div>
-            </div>
-
-            <!-- Toggle fullscreen -->
-            <input type="image" alt="Fullscreen" src="app/images/fullscreen.svg"
-                id="noVNC_fullscreen_button" class="noVNC_button noVNC_hidden"
-                title="Fullscreen" />
-
-            <!-- Settings -->
-            <input type="image" alt="Settings" src="app/images/settings.svg"
-                id="noVNC_settings_button" class="noVNC_button"
-                title="Settings" />
-            <div class="noVNC_vcenter">
-            <div id="noVNC_settings" class="noVNC_panel">
-                <ul>
-                    <li class="noVNC_heading">
-                        <img src="app/images/settings.svg"> Settings
-                    </li>
-                    <li>
-                        <label><input id="noVNC_setting_shared" type="checkbox" /> Shared Mode</label>
-                    </li>
-                    <li>
-                        <label><input id="noVNC_setting_view_only" type="checkbox" /> View Only</label>
-                    </li>
-                    <li><hr></li>
-                    <li>
-                        <label><input id="noVNC_setting_view_clip" type="checkbox" /> Clip to Window</label>
-                    </li>
-                    <li>
-                        <label for="noVNC_setting_resize">Scaling Mode:</label>
-                        <select id="noVNC_setting_resize" name="vncResize">
-                            <option value="off">None</option>
-                            <option value="scale">Local Scaling</option>
-                            <option value="remote">Remote Resizing</option>
-                        </select>
-                    </li>
-                    <li><hr></li>
-                    <li>
-                        <div class="noVNC_expander">Advanced</div>
-                        <div><ul>
-                            <li>
-                                <label for="noVNC_setting_repeaterID">Repeater ID:</label>
-                                <input id="noVNC_setting_repeaterID" type="input" value="" />
-                            </li>
-                            <li>
-                                <div class="noVNC_expander">WebSocket</div>
-                                <div><ul>
-                                    <li>
-                                        <label><input id="noVNC_setting_encrypt" type="checkbox" /> Encrypt</label>
-                                    </li>
-                                    <li>
-                                        <label for="noVNC_setting_host">Host:</label>
-                                        <input id="noVNC_setting_host" />
-                                    </li>
-                                    <li>
-                                        <label for="noVNC_setting_port">Port:</label>
-                                        <input id="noVNC_setting_port" type="number" />
-                                    </li>
-                                    <li>
-                                        <label for="noVNC_setting_path">Path:</label>
-                                        <input id="noVNC_setting_path" type="input" value="websockify" />
-                                    </li>
-                                </ul></div>
-                            </li>
-                            <li><hr></li>
-                            <li>
-                                <label><input id="noVNC_setting_reconnect" type="checkbox" /> Automatic Reconnect</label>
-                            </li>
-                            <li>
-                                <label for="noVNC_setting_reconnect_delay">Reconnect Delay (ms):</label>
-                                <input id="noVNC_setting_reconnect_delay" type="number" />
-                            </li>
-                            <li><hr></li>
-                            <!-- Logging selection dropdown -->
-                            <li>
-                                <label>Logging:
-                                    <select id="noVNC_setting_logging" name="vncLogging">
-                                    </select>
-                                </label>
-                            </li>
-                        </ul></div>
-                    </li>
-                </ul>
-            </div>
-            </div>
-
-            <!-- Connection Controls -->
-            <input type="image" alt="Disconnect" src="app/images/disconnect.svg"
-                id="noVNC_disconnect_button" class="noVNC_button"
-                title="Disconnect" />
-
-            </div>
-        </div>
-
-        <div id="noVNC_control_bar_hint"></div>
-
-    </div> <!-- End of noVNC_control_bar -->
-
-    <!-- Status Dialog -->
-    <div id="noVNC_status"></div>
-
-    <!-- Connect button -->
-    <div class="noVNC_center">
-        <div id="noVNC_connect_dlg">
-            <div class="noVNC_logo" translate="no"><span>no</span>VNC</div>
-            <div id="noVNC_connect_button"><div>
-                <img src="app/images/connect.svg"> Connect
-            </div></div>
-        </div>
-    </div>
-
-    <!-- Password Dialog -->
-    <div class="noVNC_center noVNC_connect_layer">
-    <div id="noVNC_password_dlg" class="noVNC_panel"><form>
-        <ul>
-            <li>
-                <label>Password:</label>
-                <input id="noVNC_password_input" type="password" />
-            </li>
-            <li>
-                <input id="noVNC_password_button" type="submit" value="Send Password" class="noVNC_submit" />
-            </li>
-        </ul>
-    </form></div>
-    </div>
-
-    <!-- Transition Screens -->
-    <div id="noVNC_transition">
-        <div id="noVNC_transition_text"></div>
-        <div>
-        <input type="button" id="noVNC_cancel_reconnect_button" value="Cancel" class="noVNC_submit" />
-        </div>
-        <div class="noVNC_spinner"></div>
-    </div>
-
-    <!-- This is where the RFB elements will attach -->
-    <div id="noVNC_container">
-        <!-- Note that Google Chrome on Android doesn't respect any of these,
-             html attributes which attempt to disable text suggestions on the
-             on-screen keyboard. Let's hope Chrome implements the ime-mode
-             style for example -->
-        <textarea id="noVNC_keyboardinput" autocapitalize="off"
-            autocorrect="off" autocomplete="off" spellcheck="false"
-            mozactionhint="Enter" tabindex="-1"></textarea>
-    </div>
-
-    <audio id="noVNC_bell">
-        <source src="app/sounds/bell.oga" type="audio/ogg">
-        <source src="app/sounds/bell.mp3" type="audio/mpeg">
-    </audio>
- </body>
-</html>
--- a/main/task_sdcard.c	Wed Oct 24 11:55:39 2018 +0200
+++ b/main/task_sdcard.c	Wed Oct 24 23:15:04 2018 +0200
@@ -374,6 +374,7 @@
  * @param fromdir Source directory
  * @param todir Destination directory
  */
+#if 0
 void SyncDirs(char *fromdir, char *todir)
 {
     char	ff[64], tf[64];
@@ -425,6 +426,7 @@
     }
     closedir(dir);
 }
+#endif
 
 
 
@@ -499,15 +501,14 @@
 		DIR* dir = opendir("/sdcard/w/log");
 		if (dir == NULL) {
 		    ret = mkdir("/sdcard/w/log", 0755);
-		    printf("Dir created ret=%d\n", ret);
 		} else {
 		    closedir(dir);
 		}
 
 
-		SyncDirs("/sdcard/w",            "/spiffs/w");
-		SyncDirs("/sdcard/w/js",         "/spiffs/w/js");
-		SyncDirs("/sdcard/w/css",         "/spiffs/w/css");
+//		SyncDirs("/sdcard/w",            "/spiffs/w");
+//		SyncDirs("/sdcard/w/js",         "/spiffs/w/js");
+//		SyncDirs("/sdcard/w/css",         "/spiffs/w/css");
 //		SyncDirs("/sdcard/w/js/modl" ,   "/spiffs/w/js/modl"); //
 //		SyncDirs("/sdcard/w/js/utils",   "/spiffs/w/js/utils");
 //		SyncDirs("/sdcard/w/js/zlib",    "/spiffs/w/js/zlib");
@@ -518,7 +519,7 @@
 //		SyncDirs("/sdcard/w/app/images", "/spiffs/w/app/images");
 //		SyncDirs("/sdcard/w/app/locale", "/spiffs/w/app/locale");
 //		SyncDirs("/sdcard/w/app/sounds", "/spiffs/w/app/sounds");  //
-		SyncDirs("/sdcard/w/app/styles", "/spiffs/w/app/styles");
+//		SyncDirs("/sdcard/w/app/styles", "/spiffs/w/app/styles");
 //		SyncDirs("/sdcard/fonts",        "/spiffs/fonts"); //
 
 	    }
--- a/main/updates.c	Wed Oct 24 11:55:39 2018 +0200
+++ b/main/updates.c	Wed Oct 24 23:15:04 2018 +0200
@@ -24,9 +24,9 @@
 
 
 /**
- * @brief Run update procedure
+ * @brief Run binary update procedure
  */
-void run_update(void)
+void bin_update(void)
 {
     char                        temp[64];
     esp_err_t                   err;
@@ -38,13 +38,13 @@
     const esp_partition_t       *running = esp_ota_get_running_partition();
     snprintf(temp, 63, "Running part.type %d sub %d,\r\nat offset 0x%08x\r\n",
 		running->type, running->subtype, running->address);
-    TFT_print(temp, 0, 25);
+    TFT_print(temp, 0, LASTY);
 
     /*
      * Don't use https because it costs more then 100K memory.
      */
     esp_http_client_config_t update = {
-	.url = "http://seaport.mbse.ym/update/brewboard.bin",
+	.url = "http://update.mbse.eu/ap1/fw/brewboard.bin",
     };
 
     esp_http_client_handle_t client = esp_http_client_init(&update);
@@ -60,7 +60,13 @@
 	goto updateerr;
     }
 
-    esp_http_client_fetch_headers(client);
+    int content_length = esp_http_client_fetch_headers(client);
+    int status_code = esp_http_client_get_status_code(client);
+    if (status_code != 200) {
+	ESP_LOGE(TAG, "GET %s error %d", update.url, status_code);
+	esp_http_client_cleanup(client);
+	goto updateerr;
+    }
     update_partition = esp_ota_get_next_update_partition(NULL);
     if (update_partition == NULL) {
 	ESP_LOGE(TAG, "No update partition");
@@ -77,7 +83,7 @@
     }
 
     TFT_print("Begin download.\r\n", 0, LASTY);
-    ESP_LOGI(TAG, "Download update %s", update.url);
+    ESP_LOGI(TAG, "Download update %s size %d", update.url, content_length);
     int binary_file_length = 0;
     /*deal with all receive packet*/
     while (1) {
@@ -140,6 +146,183 @@
 
 
 
+/**
+ * @brief Download a file to /spiffs
+ * @param filename The name and path of the file to download.
+ * @return Return 0 if ok, negative if errors.
+ */
+int DownloadSpiffs(char *filename)
+{
+    esp_err_t	err;
+    static char	theurl[73], thefile[41];
+    FILE	*f;
+
+//    static char	todel[41];
+//    snprintf(todel, 40, "/spiffs//%s", filename);
+//    unlink(todel);
+//    return 0;
+
+    snprintf(theurl, 72, "http://update.mbse.eu/ap1/image/%s", filename);
+    snprintf(thefile, 40, "/spiffs/%s", filename);
+
+    esp_http_client_config_t update = {
+	.url = theurl,
+    };
+
+    esp_http_client_handle_t client = esp_http_client_init(&update);
+    if (client == NULL) {
+	ESP_LOGE(TAG, "Failed to init HTTP connection");
+	return -1;
+    }
+
+    err = esp_http_client_open(client, 0);
+    if (err != ESP_OK) {
+	ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err));
+	esp_http_client_cleanup(client);
+	return -1;
+    }
+
+    int content_length = esp_http_client_fetch_headers(client);
+    int status_code = esp_http_client_get_status_code(client);
+    if (status_code != 200) {
+	ESP_LOGE(TAG, "GET %s error %d", update.url, status_code);
+	esp_http_client_cleanup(client);
+	return -1;
+    }
+
+    /*
+     * Remove a possible stale download.
+     */
+    unlink("/spiffs/tmpfile");
+    f = fopen("/spiffs/tmpfile", "w");
+    if (f == NULL) {
+	ESP_LOGE(TAG, "Cannot create /spiffs/tmpfile");
+	esp_http_client_cleanup(client);
+	return -1;
+    }
+
+    int read_length = 0;
+    int write_length = 0;
+    while (1) {
+	int data_read = esp_http_client_read(client, ota_write_data, BUFFSIZE);
+	if (data_read < 0) {
+	    ESP_LOGE(TAG, "Error: data read error %s", theurl);
+	    http_cleanup(client);
+	    return -1;
+	} else if (data_read > 0) {
+	    size_t bytes = fwrite(ota_write_data, 1, data_read, f);
+	    if (bytes != data_read) {
+		ESP_LOGE(TAG, "fwrite %s %d/%d at %d", theurl, bytes, data_read, write_length);
+	    }
+	    write_length += bytes;
+	    read_length += data_read;
+	} else if (data_read == 0) {
+	    break;
+	}
+	vTaskDelay(5 / portTICK_PERIOD_MS);
+    }
+    fclose(f);
+
+    if (content_length != write_length) {
+	ESP_LOGE(TAG, "Download %s size %d but got %d bytes", theurl, content_length, write_length);
+	unlink("/spiffs/tmpfile");
+	return -1;
+    }
+
+    ESP_LOGI(TAG, "Download %s size %d Ok", theurl, content_length);
+    unlink(thefile);
+    rename("/spiffs/tmpfile", thefile);
+    esp_http_client_cleanup(client);
+    return 0;
+}
+
+
+
+/**
+ * @brief Update /spiffs filesystem
+ */
+void spiffs_update(void)
+{
+    int		rc;
+    FILE	*f;
+    char	v1[12], v2[12], fn[41];
+
+    TFT_setFont(DEJAVU18_FONT, NULL);
+    _fg = TFT_CYAN;
+    TFT_print("Update /spiffs ", 0, 25);
+
+    rc = rename("/spiffs/version.txt", "/spiffs/version.old");
+    if ((rc != 0) && (errno == ENOENT)) {
+	/* No old file. */
+	ESP_LOGI(TAG, "No old /spiffs/version.txt");
+	/* Download, install old and new */
+	DownloadSpiffs("version.txt");
+	rename("/spiffs/version.txt", "/spiffs/version.old");
+	DownloadSpiffs("version.txt");
+	goto spiffs_update;
+    }
+
+    if (DownloadSpiffs("version.txt") < 0)
+	goto spiffs_error;
+
+    /* Compare spiffs/version.old and /spiffs/version.txt */
+    v1[0] = '\0';
+    v2[0] = '\0';
+    f = fopen("/spiffs/version.old", "r");
+    if (f) {
+	fgets(v1, 11, f);
+	fclose(f);
+    }
+    f = fopen("/spiffs/version.txt", "r");
+    if (f) {
+	fgets(v2, 11, f);
+	fclose(f);
+    }
+//    ESP_LOG_BUFFER_HEXDUMP(TAG, v1, strlen(v1), ESP_LOG_INFO);
+//    ESP_LOG_BUFFER_HEXDUMP(TAG, v2, strlen(v2), ESP_LOG_INFO);
+    if (strcmp(v1, v2) == 0) {
+	ESP_LOGI(TAG, "/spiffs is up to date");
+	TFT_print("Ok\r\n", LASTX, LASTY);
+	unlink("/spiffs/version.old");
+	return;
+    }
+
+spiffs_update:
+    /*
+     * Run the update, get the filelist.
+     */
+    ESP_LOGI(TAG, "Full /spiffs update");
+    rc = DownloadSpiffs("files.list");
+    if (rc < 0) {
+	unlink("/spiffs/version.txt");
+	rename("/spiffs/version.old", "/spiffs/version.txt");	// So next time we try again.
+	goto spiffs_error;
+    }
+
+    f = fopen("/spiffs/files.list", "r");
+    while (fgets(fn, 40, f)) {
+	fn[strlen(fn)-1] = '\0';
+	rc = DownloadSpiffs(fn);
+	if (rc < 0) {
+	    ESP_LOGE(TAG, "Updates failed");
+	    fclose(f);
+	    goto spiffs_error;
+	}
+//	vTaskDelay(10 / portTICK_PERIOD_MS);
+    }
+    fclose(f);
+    unlink("/spiffs/version.old");
+    TFT_print("updated\r\n", LASTX, LASTY);
+    return;
+
+spiffs_error:
+    _fg = TFT_RED;
+    TFT_print("error\r\n", LASTX, LASTY);
+
+}
+
+
+
 /*
  * Files init function, only runs once a new screen is entered.
  */
@@ -166,7 +349,8 @@
     switch (Main_Screen) {
 
 	case MAIN_TOOLS_UPDATES:
-			run_update();
+			spiffs_update();
+			bin_update();
 			Main_Screen = MAIN_TOOLS;
 			break;
 

mercurial