From b0b82cf648ead9e3c73b304eb3c08aba58363c3a Mon Sep 17 00:00:00 2001 From: Udo Waechter Date: Sun, 23 Nov 2025 13:31:29 +0100 Subject: [PATCH] removed backups --- 3B/archive/root_10.bak/app.lua | 13 - 3B/archive/root_10.bak/cfg.lua | 45 - 3B/archive/root_10.bak/ctrlapp | 44 - 3B/archive/root_10.bak/display.ini | 4 - 3B/archive/root_10.bak/env.lua | 9 - 3B/archive/root_10.bak/font/arial.ttf | 3 - 3B/archive/root_10.bak/font/mono.ttf | 3 - 3B/archive/root_10.bak/locale.lua | 12 - 3B/archive/root_10.bak/mb.lua | 24 - 3B/archive/root_10.bak/mqtt.lua | 66 - 3B/archive/root_10.bak/panel.lua | 27 - 3B/archive/root_10.bak/run.lua | 308 - 3B/archive/root_10.bak/run_line.lua | 114 - 3B/archive/root_10.bak/run_logi.lua | 289 - 3B/archive/root_10.bak/run_mqtt.lua | 130 - 3B/archive/root_10.bak/scheduler.lua | 50 - 3B/archive/root_10.bak/secs.lua | 599 -- 3B/archive/root_10.bak/secs_i.lua | 184 - 3B/archive/root_10.bak/secs_ii.lua | 633 -- 3B/archive/root_10.bak/shm.lua | 31 - 3B/archive/root_10.bak/st.lua | 114 - 3B/archive/root_10.bak/struct.lua | 197 - 3B/archive/root_10.bak/tabs.lua | 18 - 3B/archive/root_10.bak/ti.lua | 9 - 3B/archive/root_10.bak/touch.lua | 45 - 3B/archive/root_10.bak/tr.lua | 9 - 3B/archive/root_11.bak/app.lua | 13 - 3B/archive/root_11.bak/cfg.lua | 45 - 3B/archive/root_11.bak/ctrlapp | 44 - 3B/archive/root_11.bak/display.ini | 4 - 3B/archive/root_11.bak/env.lua | 9 - 3B/archive/root_11.bak/font/arial.ttf | 3 - 3B/archive/root_11.bak/font/mono.ttf | 3 - 3B/archive/root_11.bak/locale.lua | 12 - 3B/archive/root_11.bak/mb.lua | 24 - 3B/archive/root_11.bak/mqtt.lua | 66 - 3B/archive/root_11.bak/panel.lua | 27 - 3B/archive/root_11.bak/run.lua | 308 - 3B/archive/root_11.bak/run_line.lua | 114 - 3B/archive/root_11.bak/run_logi.lua | 289 - 3B/archive/root_11.bak/run_mqtt.lua | 130 - 3B/archive/root_11.bak/scheduler.lua | 50 - 3B/archive/root_11.bak/secs.lua | 599 -- 3B/archive/root_11.bak/secs_i.lua | 184 - 3B/archive/root_11.bak/secs_ii.lua | 633 -- 3B/archive/root_11.bak/shm.lua | 31 - 3B/archive/root_11.bak/st.lua | 114 - 3B/archive/root_11.bak/struct.lua | 197 - 3B/archive/root_11.bak/tabs.lua | 18 - 3B/archive/root_11.bak/ti.lua | 9 - 3B/archive/root_11.bak/touch.lua | 45 - 3B/archive/root_11.bak/tr.lua | 9 - 3B/archive/root_12.bak/app.lua | 13 - 3B/archive/root_12.bak/cfg.lua | 45 - 3B/archive/root_12.bak/ctrlapp | 44 - 3B/archive/root_12.bak/display.ini | 4 - 3B/archive/root_12.bak/env.lua | 9 - 3B/archive/root_12.bak/font/arial.ttf | 3 - 3B/archive/root_12.bak/font/mono.ttf | 3 - 3B/archive/root_12.bak/locale.lua | 12 - 3B/archive/root_12.bak/mb.lua | 24 - 3B/archive/root_12.bak/mqtt.lua | 66 - 3B/archive/root_12.bak/panel.lua | 27 - 3B/archive/root_12.bak/run.lua | 310 - 3B/archive/root_12.bak/run_line.lua | 114 - 3B/archive/root_12.bak/run_logi.lua | 289 - 3B/archive/root_12.bak/run_mqtt.lua | 130 - 3B/archive/root_12.bak/scheduler.lua | 50 - 3B/archive/root_12.bak/secs.lua | 599 -- 3B/archive/root_12.bak/secs_i.lua | 184 - 3B/archive/root_12.bak/secs_ii.lua | 633 -- 3B/archive/root_12.bak/shm.lua | 31 - 3B/archive/root_12.bak/st.lua | 114 - 3B/archive/root_12.bak/struct.lua | 197 - 3B/archive/root_12.bak/tabs.lua | 18 - 3B/archive/root_12.bak/ti.lua | 9 - 3B/archive/root_12.bak/touch.lua | 45 - 3B/archive/root_12.bak/tr.lua | 9 - 3B/archive/root_3.bak/app.lua | 13 - 3B/archive/root_3.bak/cfg.lua | 45 - 3B/archive/root_3.bak/ctrlapp | 44 - 3B/archive/root_3.bak/display.ini | 4 - 3B/archive/root_3.bak/env.lua | 9 - 3B/archive/root_3.bak/font/arial.ttf | 3 - 3B/archive/root_3.bak/font/mono.ttf | 3 - 3B/archive/root_3.bak/locale.lua | 12 - 3B/archive/root_3.bak/mb.lua | 24 - 3B/archive/root_3.bak/mqtt.lua | 66 - 3B/archive/root_3.bak/panel.lua | 27 - 3B/archive/root_3.bak/run.lua | 191 - 3B/archive/root_3.bak/run_line.lua | 114 - 3B/archive/root_3.bak/run_logi.lua | 289 - 3B/archive/root_3.bak/run_mqtt.lua | 130 - 3B/archive/root_3.bak/scheduler.lua | 50 - 3B/archive/root_3.bak/secs.lua | 599 -- 3B/archive/root_3.bak/secs_i.lua | 184 - 3B/archive/root_3.bak/secs_ii.lua | 633 -- 3B/archive/root_3.bak/shm.lua | 31 - 3B/archive/root_3.bak/st.lua | 114 - 3B/archive/root_3.bak/struct.lua | 197 - 3B/archive/root_3.bak/tabs.lua | 18 - 3B/archive/root_3.bak/ti.lua | 9 - 3B/archive/root_3.bak/touch.lua | 21 - 3B/archive/root_3.bak/tr.lua | 9 - 3B/archive/root_4.bak/app.lua | 13 - 3B/archive/root_4.bak/cfg.lua | 45 - 3B/archive/root_4.bak/ctrlapp | 44 - 3B/archive/root_4.bak/display.ini | 4 - 3B/archive/root_4.bak/env.lua | 9 - 3B/archive/root_4.bak/font/arial.ttf | 3 - 3B/archive/root_4.bak/font/mono.ttf | 3 - 3B/archive/root_4.bak/locale.lua | 12 - 3B/archive/root_4.bak/mb.lua | 24 - 3B/archive/root_4.bak/mqtt.lua | 66 - 3B/archive/root_4.bak/panel.lua | 27 - 3B/archive/root_4.bak/run.lua | 198 - 3B/archive/root_4.bak/run_line.lua | 114 - 3B/archive/root_4.bak/run_logi.lua | 289 - 3B/archive/root_4.bak/run_mqtt.lua | 130 - 3B/archive/root_4.bak/scheduler.lua | 50 - 3B/archive/root_4.bak/secs.lua | 599 -- 3B/archive/root_4.bak/secs_i.lua | 184 - 3B/archive/root_4.bak/secs_ii.lua | 633 -- 3B/archive/root_4.bak/shm.lua | 31 - 3B/archive/root_4.bak/st.lua | 114 - 3B/archive/root_4.bak/struct.lua | 197 - 3B/archive/root_4.bak/tabs.lua | 18 - 3B/archive/root_4.bak/ti.lua | 9 - 3B/archive/root_4.bak/touch.lua | 21 - 3B/archive/root_4.bak/tr.lua | 9 - 3B/archive/root_5.bak/app.lua | 13 - 3B/archive/root_5.bak/cfg.lua | 45 - 3B/archive/root_5.bak/ctrlapp | 44 - 3B/archive/root_5.bak/display.ini | 4 - 3B/archive/root_5.bak/env.lua | 9 - 3B/archive/root_5.bak/font/arial.ttf | 3 - 3B/archive/root_5.bak/font/mono.ttf | 3 - 3B/archive/root_5.bak/locale.lua | 12 - 3B/archive/root_5.bak/mb.lua | 24 - 3B/archive/root_5.bak/mqtt.lua | 66 - 3B/archive/root_5.bak/panel.lua | 27 - 3B/archive/root_5.bak/run.lua | 225 - 3B/archive/root_5.bak/run_line.lua | 114 - 3B/archive/root_5.bak/run_logi.lua | 289 - 3B/archive/root_5.bak/run_mqtt.lua | 130 - 3B/archive/root_5.bak/scheduler.lua | 50 - 3B/archive/root_5.bak/secs.lua | 599 -- 3B/archive/root_5.bak/secs_i.lua | 184 - 3B/archive/root_5.bak/secs_ii.lua | 633 -- 3B/archive/root_5.bak/shm.lua | 31 - 3B/archive/root_5.bak/st.lua | 114 - 3B/archive/root_5.bak/struct.lua | 197 - 3B/archive/root_5.bak/tabs.lua | 18 - 3B/archive/root_5.bak/ti.lua | 9 - 3B/archive/root_5.bak/touch.lua | 21 - 3B/archive/root_5.bak/tr.lua | 9 - 3B/archive/root_6.bak/app.lua | 13 - 3B/archive/root_6.bak/cfg.lua | 45 - 3B/archive/root_6.bak/ctrlapp | 44 - 3B/archive/root_6.bak/display.ini | 4 - 3B/archive/root_6.bak/env.lua | 9 - 3B/archive/root_6.bak/font/arial.ttf | 3 - 3B/archive/root_6.bak/font/mono.ttf | 3 - 3B/archive/root_6.bak/locale.lua | 12 - 3B/archive/root_6.bak/mb.lua | 24 - 3B/archive/root_6.bak/mqtt.lua | 66 - 3B/archive/root_6.bak/panel.lua | 27 - 3B/archive/root_6.bak/run.lua | 225 - 3B/archive/root_6.bak/run_line.lua | 114 - 3B/archive/root_6.bak/run_logi.lua | 289 - 3B/archive/root_6.bak/run_mqtt.lua | 130 - 3B/archive/root_6.bak/scheduler.lua | 50 - 3B/archive/root_6.bak/secs.lua | 599 -- 3B/archive/root_6.bak/secs_i.lua | 184 - 3B/archive/root_6.bak/secs_ii.lua | 633 -- 3B/archive/root_6.bak/shm.lua | 31 - 3B/archive/root_6.bak/st.lua | 114 - 3B/archive/root_6.bak/struct.lua | 197 - 3B/archive/root_6.bak/tabs.lua | 18 - 3B/archive/root_6.bak/ti.lua | 9 - 3B/archive/root_6.bak/touch.lua | 21 - 3B/archive/root_6.bak/tr.lua | 9 - 3B/archive/root_7.bak/app.lua | 13 - 3B/archive/root_7.bak/cfg.lua | 45 - 3B/archive/root_7.bak/ctrlapp | 44 - 3B/archive/root_7.bak/display.ini | 4 - 3B/archive/root_7.bak/env.lua | 9 - 3B/archive/root_7.bak/font/arial.ttf | 3 - 3B/archive/root_7.bak/font/mono.ttf | 3 - 3B/archive/root_7.bak/locale.lua | 12 - 3B/archive/root_7.bak/mb.lua | 24 - 3B/archive/root_7.bak/mqtt.lua | 66 - 3B/archive/root_7.bak/panel.lua | 27 - 3B/archive/root_7.bak/run.lua | 286 - 3B/archive/root_7.bak/run_line.lua | 114 - 3B/archive/root_7.bak/run_logi.lua | 289 - 3B/archive/root_7.bak/run_mqtt.lua | 130 - 3B/archive/root_7.bak/scheduler.lua | 50 - 3B/archive/root_7.bak/secs.lua | 599 -- 3B/archive/root_7.bak/secs_i.lua | 184 - 3B/archive/root_7.bak/secs_ii.lua | 633 -- 3B/archive/root_7.bak/shm.lua | 31 - 3B/archive/root_7.bak/st.lua | 114 - 3B/archive/root_7.bak/struct.lua | 197 - 3B/archive/root_7.bak/tabs.lua | 18 - 3B/archive/root_7.bak/ti.lua | 9 - 3B/archive/root_7.bak/touch.lua | 45 - 3B/archive/root_7.bak/tr.lua | 9 - 3B/archive/root_8.bak/app.lua | 13 - 3B/archive/root_8.bak/cfg.lua | 45 - 3B/archive/root_8.bak/ctrlapp | 44 - 3B/archive/root_8.bak/display.ini | 4 - 3B/archive/root_8.bak/env.lua | 9 - 3B/archive/root_8.bak/font/arial.ttf | 3 - 3B/archive/root_8.bak/font/mono.ttf | 3 - 3B/archive/root_8.bak/locale.lua | 12 - 3B/archive/root_8.bak/mb.lua | 24 - 3B/archive/root_8.bak/mqtt.lua | 66 - 3B/archive/root_8.bak/panel.lua | 27 - 3B/archive/root_8.bak/run.lua | 295 - 3B/archive/root_8.bak/run_line.lua | 114 - 3B/archive/root_8.bak/run_logi.lua | 289 - 3B/archive/root_8.bak/run_mqtt.lua | 130 - 3B/archive/root_8.bak/scheduler.lua | 50 - 3B/archive/root_8.bak/secs.lua | 599 -- 3B/archive/root_8.bak/secs_i.lua | 184 - 3B/archive/root_8.bak/secs_ii.lua | 633 -- 3B/archive/root_8.bak/shm.lua | 31 - 3B/archive/root_8.bak/st.lua | 114 - 3B/archive/root_8.bak/struct.lua | 197 - 3B/archive/root_8.bak/tabs.lua | 18 - 3B/archive/root_8.bak/ti.lua | 9 - 3B/archive/root_8.bak/touch.lua | 45 - 3B/archive/root_8.bak/tr.lua | 9 - 3B/archive/root_9.bak/app.lua | 13 - 3B/archive/root_9.bak/cfg.lua | 45 - 3B/archive/root_9.bak/ctrlapp | 44 - 3B/archive/root_9.bak/display.ini | 4 - 3B/archive/root_9.bak/env.lua | 9 - 3B/archive/root_9.bak/font/arial.ttf | 3 - 3B/archive/root_9.bak/font/mono.ttf | 3 - 3B/archive/root_9.bak/locale.lua | 12 - 3B/archive/root_9.bak/mb.lua | 24 - 3B/archive/root_9.bak/mqtt.lua | 66 - 3B/archive/root_9.bak/panel.lua | 27 - 3B/archive/root_9.bak/run.lua | 308 - 3B/archive/root_9.bak/run_line.lua | 114 - 3B/archive/root_9.bak/run_logi.lua | 289 - 3B/archive/root_9.bak/run_mqtt.lua | 130 - 3B/archive/root_9.bak/scheduler.lua | 50 - 3B/archive/root_9.bak/secs.lua | 599 -- 3B/archive/root_9.bak/secs_i.lua | 184 - 3B/archive/root_9.bak/secs_ii.lua | 633 -- 3B/archive/root_9.bak/shm.lua | 31 - 3B/archive/root_9.bak/st.lua | 114 - 3B/archive/root_9.bak/struct.lua | 197 - 3B/archive/root_9.bak/tabs.lua | 18 - 3B/archive/root_9.bak/ti.lua | 9 - 3B/archive/root_9.bak/touch.lua | 45 - 3B/archive/root_9.bak/tr.lua | 9 - .../www_10.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_10.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_10.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_10.bak/panel/index.html | 196 - .../www_10.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_10.bak/panel/js/bootstrap.js | 2363 ------ .../www_10.bak/panel/js/bootstrap.min.js | 7 - .../www_10.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_10.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_10.bak/panel/js/npm.js | 13 - .../www_10.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_10.bak/panel/mqtthost.html | 191 - 3B/archive/www_10.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_10.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_10.bak/panel/old_js/socket.io.min.js | 3 - .../www_11.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_11.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_11.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_11.bak/panel/index.html | 196 - .../www_11.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_11.bak/panel/js/bootstrap.js | 2363 ------ .../www_11.bak/panel/js/bootstrap.min.js | 7 - .../www_11.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_11.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_11.bak/panel/js/npm.js | 13 - .../www_11.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_11.bak/panel/mqtthost.html | 191 - 3B/archive/www_11.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_11.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_11.bak/panel/old_js/socket.io.min.js | 3 - .../www_12.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_12.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_12.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_12.bak/panel/index.html | 196 - .../www_12.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_12.bak/panel/js/bootstrap.js | 2363 ------ .../www_12.bak/panel/js/bootstrap.min.js | 7 - .../www_12.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_12.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_12.bak/panel/js/npm.js | 13 - .../www_12.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_12.bak/panel/mqtthost.html | 191 - 3B/archive/www_12.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_12.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_12.bak/panel/old_js/socket.io.min.js | 3 - .../www_3.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_3.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_3.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_3.bak/panel/index.html | 196 - .../www_3.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_3.bak/panel/js/bootstrap.js | 2363 ------ .../www_3.bak/panel/js/bootstrap.min.js | 7 - .../www_3.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_3.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_3.bak/panel/js/npm.js | 13 - .../www_3.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_3.bak/panel/mqtthost.html | 191 - 3B/archive/www_3.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_3.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_3.bak/panel/old_js/socket.io.min.js | 3 - .../www_4.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_4.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_4.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_4.bak/panel/index.html | 196 - .../www_4.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_4.bak/panel/js/bootstrap.js | 2363 ------ .../www_4.bak/panel/js/bootstrap.min.js | 7 - .../www_4.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_4.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_4.bak/panel/js/npm.js | 13 - .../www_4.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_4.bak/panel/mqtthost.html | 191 - 3B/archive/www_4.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_4.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_4.bak/panel/old_js/socket.io.min.js | 3 - .../www_5.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_5.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_5.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_5.bak/panel/index.html | 196 - .../www_5.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_5.bak/panel/js/bootstrap.js | 2363 ------ .../www_5.bak/panel/js/bootstrap.min.js | 7 - .../www_5.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_5.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_5.bak/panel/js/npm.js | 13 - .../www_5.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_5.bak/panel/mqtthost.html | 191 - 3B/archive/www_5.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_5.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_5.bak/panel/old_js/socket.io.min.js | 3 - .../www_6.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_6.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_6.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_6.bak/panel/index.html | 196 - .../www_6.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_6.bak/panel/js/bootstrap.js | 2363 ------ .../www_6.bak/panel/js/bootstrap.min.js | 7 - .../www_6.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_6.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_6.bak/panel/js/npm.js | 13 - .../www_6.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_6.bak/panel/mqtthost.html | 191 - 3B/archive/www_6.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_6.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_6.bak/panel/old_js/socket.io.min.js | 3 - .../www_7.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_7.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_7.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_7.bak/panel/index.html | 196 - .../www_7.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_7.bak/panel/js/bootstrap.js | 2363 ------ .../www_7.bak/panel/js/bootstrap.min.js | 7 - .../www_7.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_7.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_7.bak/panel/js/npm.js | 13 - .../www_7.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_7.bak/panel/mqtthost.html | 191 - 3B/archive/www_7.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_7.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_7.bak/panel/old_js/socket.io.min.js | 3 - .../www_8.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_8.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_8.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_8.bak/panel/index.html | 196 - .../www_8.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_8.bak/panel/js/bootstrap.js | 2363 ------ .../www_8.bak/panel/js/bootstrap.min.js | 7 - .../www_8.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_8.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_8.bak/panel/js/npm.js | 13 - .../www_8.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_8.bak/panel/mqtthost.html | 191 - 3B/archive/www_8.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_8.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_8.bak/panel/old_js/socket.io.min.js | 3 - .../www_9.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - 3B/archive/www_9.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_9.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - 3B/archive/www_9.bak/panel/index.html | 196 - .../www_9.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - 3B/archive/www_9.bak/panel/js/bootstrap.js | 2363 ------ .../www_9.bak/panel/js/bootstrap.min.js | 7 - .../www_9.bak/panel/js/jquery-3.2.1.min.js | 4 - 3B/archive/www_9.bak/panel/js/mqttws31.js | 2143 ------ 3B/archive/www_9.bak/panel/js/npm.js | 13 - .../www_9.bak/panel/js/socket.io.min.js | 3 - 3B/archive/www_9.bak/panel/mqtthost.html | 191 - 3B/archive/www_9.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - 3B/archive/www_9.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_9.bak/panel/old_js/socket.io.min.js | 3 - .../archive/root_10.bak/app.lua | 13 - .../archive/root_10.bak/cfg.lua | 45 - .../archive/root_10.bak/ctrlapp | 44 - .../archive/root_10.bak/display.ini | 4 - .../archive/root_10.bak/env.lua | 9 - .../archive/root_10.bak/font/arial.ttf | 3 - .../archive/root_10.bak/font/mono.ttf | 3 - .../archive/root_10.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_10.bak/mb.lua | 24 - .../archive/root_10.bak/mqtt.lua | 66 - .../archive/root_10.bak/panel.lua | 27 - .../archive/root_10.bak/run.lua | 308 - .../archive/root_10.bak/run_line.lua | 114 - .../archive/root_10.bak/run_logi.lua | 289 - .../archive/root_10.bak/run_mqtt.lua | 130 - .../archive/root_10.bak/scheduler.lua | 50 - .../archive/root_10.bak/secs.lua | 599 -- .../archive/root_10.bak/secs_i.lua | 184 - .../archive/root_10.bak/secs_ii.lua | 633 -- .../archive/root_10.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_10.bak/st.lua | 114 - .../archive/root_10.bak/struct.lua | 197 - .../archive/root_10.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_10.bak/ti.lua | 9 - .../archive/root_10.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_10.bak/tr.lua | 9 - .../archive/root_11.bak/app.lua | 13 - .../archive/root_11.bak/cfg.lua | 45 - .../archive/root_11.bak/ctrlapp | 44 - .../archive/root_11.bak/display.ini | 4 - .../archive/root_11.bak/env.lua | 9 - .../archive/root_11.bak/font/arial.ttf | 3 - .../archive/root_11.bak/font/mono.ttf | 3 - .../archive/root_11.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_11.bak/mb.lua | 24 - .../archive/root_11.bak/mqtt.lua | 66 - .../archive/root_11.bak/panel.lua | 27 - .../archive/root_11.bak/run.lua | 308 - .../archive/root_11.bak/run_line.lua | 114 - .../archive/root_11.bak/run_logi.lua | 289 - .../archive/root_11.bak/run_mqtt.lua | 130 - .../archive/root_11.bak/scheduler.lua | 50 - .../archive/root_11.bak/secs.lua | 599 -- .../archive/root_11.bak/secs_i.lua | 184 - .../archive/root_11.bak/secs_ii.lua | 633 -- .../archive/root_11.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_11.bak/st.lua | 114 - .../archive/root_11.bak/struct.lua | 197 - .../archive/root_11.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_11.bak/ti.lua | 9 - .../archive/root_11.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_11.bak/tr.lua | 9 - .../archive/root_12.bak/app.lua | 13 - .../archive/root_12.bak/cfg.lua | 45 - .../archive/root_12.bak/ctrlapp | 44 - .../archive/root_12.bak/display.ini | 4 - .../archive/root_12.bak/env.lua | 9 - .../archive/root_12.bak/font/arial.ttf | 3 - .../archive/root_12.bak/font/mono.ttf | 3 - .../archive/root_12.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_12.bak/mb.lua | 24 - .../archive/root_12.bak/mqtt.lua | 66 - .../archive/root_12.bak/panel.lua | 27 - .../archive/root_12.bak/run.lua | 310 - .../archive/root_12.bak/run_line.lua | 114 - .../archive/root_12.bak/run_logi.lua | 289 - .../archive/root_12.bak/run_mqtt.lua | 130 - .../archive/root_12.bak/scheduler.lua | 50 - .../archive/root_12.bak/secs.lua | 599 -- .../archive/root_12.bak/secs_i.lua | 184 - .../archive/root_12.bak/secs_ii.lua | 633 -- .../archive/root_12.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_12.bak/st.lua | 114 - .../archive/root_12.bak/struct.lua | 197 - .../archive/root_12.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_12.bak/ti.lua | 9 - .../archive/root_12.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_12.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_3.bak/app.lua | 13 - fsi_touch_05042021/archive/root_3.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_3.bak/ctrlapp | 44 - .../archive/root_3.bak/display.ini | 4 - fsi_touch_05042021/archive/root_3.bak/env.lua | 9 - .../archive/root_3.bak/font/arial.ttf | 3 - .../archive/root_3.bak/font/mono.ttf | 3 - .../archive/root_3.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_3.bak/mb.lua | 24 - .../archive/root_3.bak/mqtt.lua | 66 - .../archive/root_3.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_3.bak/run.lua | 191 - .../archive/root_3.bak/run_line.lua | 114 - .../archive/root_3.bak/run_logi.lua | 289 - .../archive/root_3.bak/run_mqtt.lua | 130 - .../archive/root_3.bak/scheduler.lua | 50 - .../archive/root_3.bak/secs.lua | 599 -- .../archive/root_3.bak/secs_i.lua | 184 - .../archive/root_3.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_3.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_3.bak/st.lua | 114 - .../archive/root_3.bak/struct.lua | 197 - .../archive/root_3.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_3.bak/ti.lua | 9 - .../archive/root_3.bak/touch.lua | 21 - fsi_touch_05042021/archive/root_3.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_4.bak/app.lua | 13 - fsi_touch_05042021/archive/root_4.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_4.bak/ctrlapp | 44 - .../archive/root_4.bak/display.ini | 4 - fsi_touch_05042021/archive/root_4.bak/env.lua | 9 - .../archive/root_4.bak/font/arial.ttf | 3 - .../archive/root_4.bak/font/mono.ttf | 3 - .../archive/root_4.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_4.bak/mb.lua | 24 - .../archive/root_4.bak/mqtt.lua | 66 - .../archive/root_4.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_4.bak/run.lua | 198 - .../archive/root_4.bak/run_line.lua | 114 - .../archive/root_4.bak/run_logi.lua | 289 - .../archive/root_4.bak/run_mqtt.lua | 130 - .../archive/root_4.bak/scheduler.lua | 50 - .../archive/root_4.bak/secs.lua | 599 -- .../archive/root_4.bak/secs_i.lua | 184 - .../archive/root_4.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_4.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_4.bak/st.lua | 114 - .../archive/root_4.bak/struct.lua | 197 - .../archive/root_4.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_4.bak/ti.lua | 9 - .../archive/root_4.bak/touch.lua | 21 - fsi_touch_05042021/archive/root_4.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_5.bak/app.lua | 13 - fsi_touch_05042021/archive/root_5.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_5.bak/ctrlapp | 44 - .../archive/root_5.bak/display.ini | 4 - fsi_touch_05042021/archive/root_5.bak/env.lua | 9 - .../archive/root_5.bak/font/arial.ttf | 3 - .../archive/root_5.bak/font/mono.ttf | 3 - .../archive/root_5.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_5.bak/mb.lua | 24 - .../archive/root_5.bak/mqtt.lua | 66 - .../archive/root_5.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_5.bak/run.lua | 225 - .../archive/root_5.bak/run_line.lua | 114 - .../archive/root_5.bak/run_logi.lua | 289 - .../archive/root_5.bak/run_mqtt.lua | 130 - .../archive/root_5.bak/scheduler.lua | 50 - .../archive/root_5.bak/secs.lua | 599 -- .../archive/root_5.bak/secs_i.lua | 184 - .../archive/root_5.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_5.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_5.bak/st.lua | 114 - .../archive/root_5.bak/struct.lua | 197 - .../archive/root_5.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_5.bak/ti.lua | 9 - .../archive/root_5.bak/touch.lua | 21 - fsi_touch_05042021/archive/root_5.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_6.bak/app.lua | 13 - fsi_touch_05042021/archive/root_6.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_6.bak/ctrlapp | 44 - .../archive/root_6.bak/display.ini | 4 - fsi_touch_05042021/archive/root_6.bak/env.lua | 9 - .../archive/root_6.bak/font/arial.ttf | 3 - .../archive/root_6.bak/font/mono.ttf | 3 - .../archive/root_6.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_6.bak/mb.lua | 24 - .../archive/root_6.bak/mqtt.lua | 66 - .../archive/root_6.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_6.bak/run.lua | 225 - .../archive/root_6.bak/run_line.lua | 114 - .../archive/root_6.bak/run_logi.lua | 289 - .../archive/root_6.bak/run_mqtt.lua | 130 - .../archive/root_6.bak/scheduler.lua | 50 - .../archive/root_6.bak/secs.lua | 599 -- .../archive/root_6.bak/secs_i.lua | 184 - .../archive/root_6.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_6.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_6.bak/st.lua | 114 - .../archive/root_6.bak/struct.lua | 197 - .../archive/root_6.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_6.bak/ti.lua | 9 - .../archive/root_6.bak/touch.lua | 21 - fsi_touch_05042021/archive/root_6.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_7.bak/app.lua | 13 - fsi_touch_05042021/archive/root_7.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_7.bak/ctrlapp | 44 - .../archive/root_7.bak/display.ini | 4 - fsi_touch_05042021/archive/root_7.bak/env.lua | 9 - .../archive/root_7.bak/font/arial.ttf | 3 - .../archive/root_7.bak/font/mono.ttf | 3 - .../archive/root_7.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_7.bak/mb.lua | 24 - .../archive/root_7.bak/mqtt.lua | 66 - .../archive/root_7.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_7.bak/run.lua | 286 - .../archive/root_7.bak/run_line.lua | 114 - .../archive/root_7.bak/run_logi.lua | 289 - .../archive/root_7.bak/run_mqtt.lua | 130 - .../archive/root_7.bak/scheduler.lua | 50 - .../archive/root_7.bak/secs.lua | 599 -- .../archive/root_7.bak/secs_i.lua | 184 - .../archive/root_7.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_7.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_7.bak/st.lua | 114 - .../archive/root_7.bak/struct.lua | 197 - .../archive/root_7.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_7.bak/ti.lua | 9 - .../archive/root_7.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_7.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_8.bak/app.lua | 13 - fsi_touch_05042021/archive/root_8.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_8.bak/ctrlapp | 44 - .../archive/root_8.bak/display.ini | 4 - fsi_touch_05042021/archive/root_8.bak/env.lua | 9 - .../archive/root_8.bak/font/arial.ttf | 3 - .../archive/root_8.bak/font/mono.ttf | 3 - .../archive/root_8.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_8.bak/mb.lua | 24 - .../archive/root_8.bak/mqtt.lua | 66 - .../archive/root_8.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_8.bak/run.lua | 295 - .../archive/root_8.bak/run_line.lua | 114 - .../archive/root_8.bak/run_logi.lua | 289 - .../archive/root_8.bak/run_mqtt.lua | 130 - .../archive/root_8.bak/scheduler.lua | 50 - .../archive/root_8.bak/secs.lua | 599 -- .../archive/root_8.bak/secs_i.lua | 184 - .../archive/root_8.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_8.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_8.bak/st.lua | 114 - .../archive/root_8.bak/struct.lua | 197 - .../archive/root_8.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_8.bak/ti.lua | 9 - .../archive/root_8.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_8.bak/tr.lua | 9 - fsi_touch_05042021/archive/root_9.bak/app.lua | 13 - fsi_touch_05042021/archive/root_9.bak/cfg.lua | 45 - fsi_touch_05042021/archive/root_9.bak/ctrlapp | 44 - .../archive/root_9.bak/display.ini | 4 - fsi_touch_05042021/archive/root_9.bak/env.lua | 9 - .../archive/root_9.bak/font/arial.ttf | 3 - .../archive/root_9.bak/font/mono.ttf | 3 - .../archive/root_9.bak/locale.lua | 12 - fsi_touch_05042021/archive/root_9.bak/mb.lua | 24 - .../archive/root_9.bak/mqtt.lua | 66 - .../archive/root_9.bak/panel.lua | 27 - fsi_touch_05042021/archive/root_9.bak/run.lua | 308 - .../archive/root_9.bak/run_line.lua | 114 - .../archive/root_9.bak/run_logi.lua | 289 - .../archive/root_9.bak/run_mqtt.lua | 130 - .../archive/root_9.bak/scheduler.lua | 50 - .../archive/root_9.bak/secs.lua | 599 -- .../archive/root_9.bak/secs_i.lua | 184 - .../archive/root_9.bak/secs_ii.lua | 633 -- fsi_touch_05042021/archive/root_9.bak/shm.lua | 31 - fsi_touch_05042021/archive/root_9.bak/st.lua | 114 - .../archive/root_9.bak/struct.lua | 197 - .../archive/root_9.bak/tabs.lua | 18 - fsi_touch_05042021/archive/root_9.bak/ti.lua | 9 - .../archive/root_9.bak/touch.lua | 45 - fsi_touch_05042021/archive/root_9.bak/tr.lua | 9 - .../www_10.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_10.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_10.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_10.bak/panel/index.html | 196 - .../www_10.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_10.bak/panel/js/bootstrap.js | 2363 ------ .../www_10.bak/panel/js/bootstrap.min.js | 7 - .../www_10.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_10.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_10.bak/panel/js/npm.js | 13 - .../www_10.bak/panel/js/socket.io.min.js | 3 - .../archive/www_10.bak/panel/mqtthost.html | 191 - .../archive/www_10.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_10.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_10.bak/panel/old_js/socket.io.min.js | 3 - .../www_11.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_11.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_11.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_11.bak/panel/index.html | 196 - .../www_11.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_11.bak/panel/js/bootstrap.js | 2363 ------ .../www_11.bak/panel/js/bootstrap.min.js | 7 - .../www_11.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_11.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_11.bak/panel/js/npm.js | 13 - .../www_11.bak/panel/js/socket.io.min.js | 3 - .../archive/www_11.bak/panel/mqtthost.html | 191 - .../archive/www_11.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_11.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_11.bak/panel/old_js/socket.io.min.js | 3 - .../www_12.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_12.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_12.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_12.bak/panel/index.html | 196 - .../www_12.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_12.bak/panel/js/bootstrap.js | 2363 ------ .../www_12.bak/panel/js/bootstrap.min.js | 7 - .../www_12.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_12.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_12.bak/panel/js/npm.js | 13 - .../www_12.bak/panel/js/socket.io.min.js | 3 - .../archive/www_12.bak/panel/mqtthost.html | 191 - .../archive/www_12.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_12.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_12.bak/panel/old_js/socket.io.min.js | 3 - .../www_3.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_3.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_3.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_3.bak/panel/index.html | 196 - .../www_3.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_3.bak/panel/js/bootstrap.js | 2363 ------ .../www_3.bak/panel/js/bootstrap.min.js | 7 - .../www_3.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_3.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_3.bak/panel/js/npm.js | 13 - .../www_3.bak/panel/js/socket.io.min.js | 3 - .../archive/www_3.bak/panel/mqtthost.html | 191 - .../archive/www_3.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_3.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_3.bak/panel/old_js/socket.io.min.js | 3 - .../www_4.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_4.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_4.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_4.bak/panel/index.html | 196 - .../www_4.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_4.bak/panel/js/bootstrap.js | 2363 ------ .../www_4.bak/panel/js/bootstrap.min.js | 7 - .../www_4.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_4.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_4.bak/panel/js/npm.js | 13 - .../www_4.bak/panel/js/socket.io.min.js | 3 - .../archive/www_4.bak/panel/mqtthost.html | 191 - .../archive/www_4.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_4.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_4.bak/panel/old_js/socket.io.min.js | 3 - .../www_5.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_5.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_5.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_5.bak/panel/index.html | 196 - .../www_5.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_5.bak/panel/js/bootstrap.js | 2363 ------ .../www_5.bak/panel/js/bootstrap.min.js | 7 - .../www_5.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_5.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_5.bak/panel/js/npm.js | 13 - .../www_5.bak/panel/js/socket.io.min.js | 3 - .../archive/www_5.bak/panel/mqtthost.html | 191 - .../archive/www_5.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_5.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_5.bak/panel/old_js/socket.io.min.js | 3 - .../www_6.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_6.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_6.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_6.bak/panel/index.html | 196 - .../www_6.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_6.bak/panel/js/bootstrap.js | 2363 ------ .../www_6.bak/panel/js/bootstrap.min.js | 7 - .../www_6.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_6.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_6.bak/panel/js/npm.js | 13 - .../www_6.bak/panel/js/socket.io.min.js | 3 - .../archive/www_6.bak/panel/mqtthost.html | 191 - .../archive/www_6.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_6.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_6.bak/panel/old_js/socket.io.min.js | 3 - .../www_7.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_7.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_7.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_7.bak/panel/index.html | 196 - .../www_7.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_7.bak/panel/js/bootstrap.js | 2363 ------ .../www_7.bak/panel/js/bootstrap.min.js | 7 - .../www_7.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_7.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_7.bak/panel/js/npm.js | 13 - .../www_7.bak/panel/js/socket.io.min.js | 3 - .../archive/www_7.bak/panel/mqtthost.html | 191 - .../archive/www_7.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_7.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_7.bak/panel/old_js/socket.io.min.js | 3 - .../www_8.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_8.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_8.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_8.bak/panel/index.html | 196 - .../www_8.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_8.bak/panel/js/bootstrap.js | 2363 ------ .../www_8.bak/panel/js/bootstrap.min.js | 7 - .../www_8.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_8.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_8.bak/panel/js/npm.js | 13 - .../www_8.bak/panel/js/socket.io.min.js | 3 - .../archive/www_8.bak/panel/mqtthost.html | 191 - .../archive/www_8.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_8.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_8.bak/panel/old_js/socket.io.min.js | 3 - .../www_9.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_9.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_9.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_9.bak/panel/index.html | 196 - .../www_9.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_9.bak/panel/js/bootstrap.js | 2363 ------ .../www_9.bak/panel/js/bootstrap.min.js | 7 - .../www_9.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_9.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_9.bak/panel/js/npm.js | 13 - .../www_9.bak/panel/js/socket.io.min.js | 3 - .../archive/www_9.bak/panel/mqtthost.html | 191 - .../archive/www_9.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_9.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_9.bak/panel/old_js/socket.io.min.js | 3 - .../archive/root_10.bak/app.lua | 13 - .../archive/root_10.bak/cfg.lua | 45 - .../archive/root_10.bak/ctrlapp | 44 - .../archive/root_10.bak/display.ini | 4 - .../archive/root_10.bak/env.lua | 9 - .../archive/root_10.bak/font/arial.ttf | 3 - .../archive/root_10.bak/font/mono.ttf | 3 - .../archive/root_10.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_10.bak/mb.lua | 24 - .../archive/root_10.bak/mqtt.lua | 66 - .../archive/root_10.bak/panel.lua | 27 - .../archive/root_10.bak/run.lua | 308 - .../archive/root_10.bak/run_line.lua | 114 - .../archive/root_10.bak/run_logi.lua | 289 - .../archive/root_10.bak/run_mqtt.lua | 130 - .../archive/root_10.bak/scheduler.lua | 50 - .../archive/root_10.bak/secs.lua | 599 -- .../archive/root_10.bak/secs_i.lua | 184 - .../archive/root_10.bak/secs_ii.lua | 633 -- .../archive/root_10.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_10.bak/st.lua | 114 - .../archive/root_10.bak/struct.lua | 197 - .../archive/root_10.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_10.bak/ti.lua | 9 - .../archive/root_10.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_10.bak/tr.lua | 9 - .../archive/root_11.bak/app.lua | 13 - .../archive/root_11.bak/cfg.lua | 45 - .../archive/root_11.bak/ctrlapp | 44 - .../archive/root_11.bak/display.ini | 4 - .../archive/root_11.bak/env.lua | 9 - .../archive/root_11.bak/font/arial.ttf | 3 - .../archive/root_11.bak/font/mono.ttf | 3 - .../archive/root_11.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_11.bak/mb.lua | 24 - .../archive/root_11.bak/mqtt.lua | 66 - .../archive/root_11.bak/panel.lua | 27 - .../archive/root_11.bak/run.lua | 308 - .../archive/root_11.bak/run_line.lua | 114 - .../archive/root_11.bak/run_logi.lua | 289 - .../archive/root_11.bak/run_mqtt.lua | 130 - .../archive/root_11.bak/scheduler.lua | 50 - .../archive/root_11.bak/secs.lua | 599 -- .../archive/root_11.bak/secs_i.lua | 184 - .../archive/root_11.bak/secs_ii.lua | 633 -- .../archive/root_11.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_11.bak/st.lua | 114 - .../archive/root_11.bak/struct.lua | 197 - .../archive/root_11.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_11.bak/ti.lua | 9 - .../archive/root_11.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_11.bak/tr.lua | 9 - .../archive/root_12.bak/app.lua | 13 - .../archive/root_12.bak/cfg.lua | 45 - .../archive/root_12.bak/ctrlapp | 44 - .../archive/root_12.bak/display.ini | 4 - .../archive/root_12.bak/env.lua | 9 - .../archive/root_12.bak/font/arial.ttf | 3 - .../archive/root_12.bak/font/mono.ttf | 3 - .../archive/root_12.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_12.bak/mb.lua | 24 - .../archive/root_12.bak/mqtt.lua | 66 - .../archive/root_12.bak/panel.lua | 27 - .../archive/root_12.bak/run.lua | 310 - .../archive/root_12.bak/run_line.lua | 114 - .../archive/root_12.bak/run_logi.lua | 289 - .../archive/root_12.bak/run_mqtt.lua | 130 - .../archive/root_12.bak/scheduler.lua | 50 - .../archive/root_12.bak/secs.lua | 599 -- .../archive/root_12.bak/secs_i.lua | 184 - .../archive/root_12.bak/secs_ii.lua | 633 -- .../archive/root_12.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_12.bak/st.lua | 114 - .../archive/root_12.bak/struct.lua | 197 - .../archive/root_12.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_12.bak/ti.lua | 9 - .../archive/root_12.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_12.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_3.bak/app.lua | 13 - fsi_touch_10052021/archive/root_3.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_3.bak/ctrlapp | 44 - .../archive/root_3.bak/display.ini | 4 - fsi_touch_10052021/archive/root_3.bak/env.lua | 9 - .../archive/root_3.bak/font/arial.ttf | 3 - .../archive/root_3.bak/font/mono.ttf | 3 - .../archive/root_3.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_3.bak/mb.lua | 24 - .../archive/root_3.bak/mqtt.lua | 66 - .../archive/root_3.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_3.bak/run.lua | 191 - .../archive/root_3.bak/run_line.lua | 114 - .../archive/root_3.bak/run_logi.lua | 289 - .../archive/root_3.bak/run_mqtt.lua | 130 - .../archive/root_3.bak/scheduler.lua | 50 - .../archive/root_3.bak/secs.lua | 599 -- .../archive/root_3.bak/secs_i.lua | 184 - .../archive/root_3.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_3.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_3.bak/st.lua | 114 - .../archive/root_3.bak/struct.lua | 197 - .../archive/root_3.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_3.bak/ti.lua | 9 - .../archive/root_3.bak/touch.lua | 21 - fsi_touch_10052021/archive/root_3.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_4.bak/app.lua | 13 - fsi_touch_10052021/archive/root_4.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_4.bak/ctrlapp | 44 - .../archive/root_4.bak/display.ini | 4 - fsi_touch_10052021/archive/root_4.bak/env.lua | 9 - .../archive/root_4.bak/font/arial.ttf | 3 - .../archive/root_4.bak/font/mono.ttf | 3 - .../archive/root_4.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_4.bak/mb.lua | 24 - .../archive/root_4.bak/mqtt.lua | 66 - .../archive/root_4.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_4.bak/run.lua | 198 - .../archive/root_4.bak/run_line.lua | 114 - .../archive/root_4.bak/run_logi.lua | 289 - .../archive/root_4.bak/run_mqtt.lua | 130 - .../archive/root_4.bak/scheduler.lua | 50 - .../archive/root_4.bak/secs.lua | 599 -- .../archive/root_4.bak/secs_i.lua | 184 - .../archive/root_4.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_4.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_4.bak/st.lua | 114 - .../archive/root_4.bak/struct.lua | 197 - .../archive/root_4.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_4.bak/ti.lua | 9 - .../archive/root_4.bak/touch.lua | 21 - fsi_touch_10052021/archive/root_4.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_5.bak/app.lua | 13 - fsi_touch_10052021/archive/root_5.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_5.bak/ctrlapp | 44 - .../archive/root_5.bak/display.ini | 4 - fsi_touch_10052021/archive/root_5.bak/env.lua | 9 - .../archive/root_5.bak/font/arial.ttf | 3 - .../archive/root_5.bak/font/mono.ttf | 3 - .../archive/root_5.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_5.bak/mb.lua | 24 - .../archive/root_5.bak/mqtt.lua | 66 - .../archive/root_5.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_5.bak/run.lua | 225 - .../archive/root_5.bak/run_line.lua | 114 - .../archive/root_5.bak/run_logi.lua | 289 - .../archive/root_5.bak/run_mqtt.lua | 130 - .../archive/root_5.bak/scheduler.lua | 50 - .../archive/root_5.bak/secs.lua | 599 -- .../archive/root_5.bak/secs_i.lua | 184 - .../archive/root_5.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_5.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_5.bak/st.lua | 114 - .../archive/root_5.bak/struct.lua | 197 - .../archive/root_5.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_5.bak/ti.lua | 9 - .../archive/root_5.bak/touch.lua | 21 - fsi_touch_10052021/archive/root_5.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_6.bak/app.lua | 13 - fsi_touch_10052021/archive/root_6.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_6.bak/ctrlapp | 44 - .../archive/root_6.bak/display.ini | 4 - fsi_touch_10052021/archive/root_6.bak/env.lua | 9 - .../archive/root_6.bak/font/arial.ttf | 3 - .../archive/root_6.bak/font/mono.ttf | 3 - .../archive/root_6.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_6.bak/mb.lua | 24 - .../archive/root_6.bak/mqtt.lua | 66 - .../archive/root_6.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_6.bak/run.lua | 225 - .../archive/root_6.bak/run_line.lua | 114 - .../archive/root_6.bak/run_logi.lua | 289 - .../archive/root_6.bak/run_mqtt.lua | 130 - .../archive/root_6.bak/scheduler.lua | 50 - .../archive/root_6.bak/secs.lua | 599 -- .../archive/root_6.bak/secs_i.lua | 184 - .../archive/root_6.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_6.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_6.bak/st.lua | 114 - .../archive/root_6.bak/struct.lua | 197 - .../archive/root_6.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_6.bak/ti.lua | 9 - .../archive/root_6.bak/touch.lua | 21 - fsi_touch_10052021/archive/root_6.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_7.bak/app.lua | 13 - fsi_touch_10052021/archive/root_7.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_7.bak/ctrlapp | 44 - .../archive/root_7.bak/display.ini | 4 - fsi_touch_10052021/archive/root_7.bak/env.lua | 9 - .../archive/root_7.bak/font/arial.ttf | 3 - .../archive/root_7.bak/font/mono.ttf | 3 - .../archive/root_7.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_7.bak/mb.lua | 24 - .../archive/root_7.bak/mqtt.lua | 66 - .../archive/root_7.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_7.bak/run.lua | 286 - .../archive/root_7.bak/run_line.lua | 114 - .../archive/root_7.bak/run_logi.lua | 289 - .../archive/root_7.bak/run_mqtt.lua | 130 - .../archive/root_7.bak/scheduler.lua | 50 - .../archive/root_7.bak/secs.lua | 599 -- .../archive/root_7.bak/secs_i.lua | 184 - .../archive/root_7.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_7.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_7.bak/st.lua | 114 - .../archive/root_7.bak/struct.lua | 197 - .../archive/root_7.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_7.bak/ti.lua | 9 - .../archive/root_7.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_7.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_8.bak/app.lua | 13 - fsi_touch_10052021/archive/root_8.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_8.bak/ctrlapp | 44 - .../archive/root_8.bak/display.ini | 4 - fsi_touch_10052021/archive/root_8.bak/env.lua | 9 - .../archive/root_8.bak/font/arial.ttf | 3 - .../archive/root_8.bak/font/mono.ttf | 3 - .../archive/root_8.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_8.bak/mb.lua | 24 - .../archive/root_8.bak/mqtt.lua | 66 - .../archive/root_8.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_8.bak/run.lua | 295 - .../archive/root_8.bak/run_line.lua | 114 - .../archive/root_8.bak/run_logi.lua | 289 - .../archive/root_8.bak/run_mqtt.lua | 130 - .../archive/root_8.bak/scheduler.lua | 50 - .../archive/root_8.bak/secs.lua | 599 -- .../archive/root_8.bak/secs_i.lua | 184 - .../archive/root_8.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_8.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_8.bak/st.lua | 114 - .../archive/root_8.bak/struct.lua | 197 - .../archive/root_8.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_8.bak/ti.lua | 9 - .../archive/root_8.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_8.bak/tr.lua | 9 - fsi_touch_10052021/archive/root_9.bak/app.lua | 13 - fsi_touch_10052021/archive/root_9.bak/cfg.lua | 45 - fsi_touch_10052021/archive/root_9.bak/ctrlapp | 44 - .../archive/root_9.bak/display.ini | 4 - fsi_touch_10052021/archive/root_9.bak/env.lua | 9 - .../archive/root_9.bak/font/arial.ttf | 3 - .../archive/root_9.bak/font/mono.ttf | 3 - .../archive/root_9.bak/locale.lua | 12 - fsi_touch_10052021/archive/root_9.bak/mb.lua | 24 - .../archive/root_9.bak/mqtt.lua | 66 - .../archive/root_9.bak/panel.lua | 27 - fsi_touch_10052021/archive/root_9.bak/run.lua | 308 - .../archive/root_9.bak/run_line.lua | 114 - .../archive/root_9.bak/run_logi.lua | 289 - .../archive/root_9.bak/run_mqtt.lua | 130 - .../archive/root_9.bak/scheduler.lua | 50 - .../archive/root_9.bak/secs.lua | 599 -- .../archive/root_9.bak/secs_i.lua | 184 - .../archive/root_9.bak/secs_ii.lua | 633 -- fsi_touch_10052021/archive/root_9.bak/shm.lua | 31 - fsi_touch_10052021/archive/root_9.bak/st.lua | 114 - .../archive/root_9.bak/struct.lua | 197 - .../archive/root_9.bak/tabs.lua | 18 - fsi_touch_10052021/archive/root_9.bak/ti.lua | 9 - .../archive/root_9.bak/touch.lua | 45 - fsi_touch_10052021/archive/root_9.bak/tr.lua | 9 - .../www_10.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_10.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_10.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_10.bak/panel/index.html | 196 - .../www_10.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_10.bak/panel/js/bootstrap.js | 2363 ------ .../www_10.bak/panel/js/bootstrap.min.js | 7 - .../www_10.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_10.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_10.bak/panel/js/npm.js | 13 - .../www_10.bak/panel/js/socket.io.min.js | 3 - .../archive/www_10.bak/panel/mqtthost.html | 191 - .../archive/www_10.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_10.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_10.bak/panel/old_js/socket.io.min.js | 3 - .../www_11.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_11.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_11.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_11.bak/panel/index.html | 196 - .../www_11.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_11.bak/panel/js/bootstrap.js | 2363 ------ .../www_11.bak/panel/js/bootstrap.min.js | 7 - .../www_11.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_11.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_11.bak/panel/js/npm.js | 13 - .../www_11.bak/panel/js/socket.io.min.js | 3 - .../archive/www_11.bak/panel/mqtthost.html | 191 - .../archive/www_11.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_11.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_11.bak/panel/old_js/socket.io.min.js | 3 - .../www_12.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../www_12.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_12.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_12.bak/panel/index.html | 196 - .../www_12.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_12.bak/panel/js/bootstrap.js | 2363 ------ .../www_12.bak/panel/js/bootstrap.min.js | 7 - .../www_12.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_12.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_12.bak/panel/js/npm.js | 13 - .../www_12.bak/panel/js/socket.io.min.js | 3 - .../archive/www_12.bak/panel/mqtthost.html | 191 - .../archive/www_12.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_12.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_12.bak/panel/old_js/socket.io.min.js | 3 - .../www_3.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_3.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_3.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_3.bak/panel/index.html | 196 - .../www_3.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_3.bak/panel/js/bootstrap.js | 2363 ------ .../www_3.bak/panel/js/bootstrap.min.js | 7 - .../www_3.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_3.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_3.bak/panel/js/npm.js | 13 - .../www_3.bak/panel/js/socket.io.min.js | 3 - .../archive/www_3.bak/panel/mqtthost.html | 191 - .../archive/www_3.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_3.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_3.bak/panel/old_js/socket.io.min.js | 3 - .../www_4.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_4.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_4.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_4.bak/panel/index.html | 196 - .../www_4.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_4.bak/panel/js/bootstrap.js | 2363 ------ .../www_4.bak/panel/js/bootstrap.min.js | 7 - .../www_4.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_4.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_4.bak/panel/js/npm.js | 13 - .../www_4.bak/panel/js/socket.io.min.js | 3 - .../archive/www_4.bak/panel/mqtthost.html | 191 - .../archive/www_4.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_4.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_4.bak/panel/old_js/socket.io.min.js | 3 - .../www_5.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_5.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_5.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_5.bak/panel/index.html | 196 - .../www_5.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_5.bak/panel/js/bootstrap.js | 2363 ------ .../www_5.bak/panel/js/bootstrap.min.js | 7 - .../www_5.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_5.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_5.bak/panel/js/npm.js | 13 - .../www_5.bak/panel/js/socket.io.min.js | 3 - .../archive/www_5.bak/panel/mqtthost.html | 191 - .../archive/www_5.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_5.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_5.bak/panel/old_js/socket.io.min.js | 3 - .../www_6.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_6.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_6.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_6.bak/panel/index.html | 196 - .../www_6.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_6.bak/panel/js/bootstrap.js | 2363 ------ .../www_6.bak/panel/js/bootstrap.min.js | 7 - .../www_6.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_6.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_6.bak/panel/js/npm.js | 13 - .../www_6.bak/panel/js/socket.io.min.js | 3 - .../archive/www_6.bak/panel/mqtthost.html | 191 - .../archive/www_6.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_6.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_6.bak/panel/old_js/socket.io.min.js | 3 - .../www_7.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_7.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_7.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_7.bak/panel/index.html | 196 - .../www_7.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_7.bak/panel/js/bootstrap.js | 2363 ------ .../www_7.bak/panel/js/bootstrap.min.js | 7 - .../www_7.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_7.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_7.bak/panel/js/npm.js | 13 - .../www_7.bak/panel/js/socket.io.min.js | 3 - .../archive/www_7.bak/panel/mqtthost.html | 191 - .../archive/www_7.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_7.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_7.bak/panel/old_js/socket.io.min.js | 3 - .../www_8.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_8.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_8.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_8.bak/panel/index.html | 196 - .../www_8.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_8.bak/panel/js/bootstrap.js | 2363 ------ .../www_8.bak/panel/js/bootstrap.min.js | 7 - .../www_8.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_8.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_8.bak/panel/js/npm.js | 13 - .../www_8.bak/panel/js/socket.io.min.js | 3 - .../archive/www_8.bak/panel/mqtthost.html | 191 - .../archive/www_8.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_8.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_8.bak/panel/old_js/socket.io.min.js | 3 - .../www_9.bak/panel/css/bootstrap-toggle.css | 83 - .../panel/css/bootstrap-toggle.min.css | 28 - .../archive/www_9.bak/panel/css/bootstrap.css | 6760 ----------------- .../www_9.bak/panel/css/bootstrap.min.css | 11 - .../fonts/glyphicons-halflings-regular.eot | 3 - .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | 3 - .../fonts/glyphicons-halflings-regular.woff | 3 - .../fonts/glyphicons-halflings-regular.woff2 | 3 - .../archive/www_9.bak/panel/index.html | 196 - .../www_9.bak/panel/js/bootstrap-toggle.js | 180 - .../panel/js/bootstrap-toggle.min.js | 9 - .../panel/js/bootstrap-toggle.min.js.map | 1 - .../archive/www_9.bak/panel/js/bootstrap.js | 2363 ------ .../www_9.bak/panel/js/bootstrap.min.js | 7 - .../www_9.bak/panel/js/jquery-3.2.1.min.js | 4 - .../archive/www_9.bak/panel/js/mqttws31.js | 2143 ------ .../archive/www_9.bak/panel/js/npm.js | 13 - .../www_9.bak/panel/js/socket.io.min.js | 3 - .../archive/www_9.bak/panel/mqtthost.html | 191 - .../archive/www_9.bak/panel/mqttpub.html | 199 - .../jqplot.canvasAxisLabelRenderer.min.js | 3 - .../panel/old_js/jqplot.canvasTextRenderer.js | 449 -- .../old_js/jqplot.canvasTextRenderer.min.js | 3 - .../old_js/jqplot.dateAxisRenderer.min.js | 3 - .../panel/old_js/jquery-1.11.2.min.js | 4 - .../panel/old_js/jquery.jqplot.min.js | 3 - .../panel/old_js/jquery.sparkline.min.js | 5 - .../www_9.bak/panel/old_js/mqttws31.js | 2143 ------ .../www_9.bak/panel/old_js/socket.io.min.js | 3 - 1680 files changed, 541044 deletions(-) delete mode 100644 3B/archive/root_10.bak/app.lua delete mode 100644 3B/archive/root_10.bak/cfg.lua delete mode 100644 3B/archive/root_10.bak/ctrlapp delete mode 100644 3B/archive/root_10.bak/display.ini delete mode 100644 3B/archive/root_10.bak/env.lua delete mode 100644 3B/archive/root_10.bak/font/arial.ttf delete mode 100644 3B/archive/root_10.bak/font/mono.ttf delete mode 100644 3B/archive/root_10.bak/locale.lua delete mode 100644 3B/archive/root_10.bak/mb.lua delete mode 100644 3B/archive/root_10.bak/mqtt.lua delete mode 100644 3B/archive/root_10.bak/panel.lua delete mode 100644 3B/archive/root_10.bak/run.lua delete mode 100644 3B/archive/root_10.bak/run_line.lua delete mode 100644 3B/archive/root_10.bak/run_logi.lua delete mode 100644 3B/archive/root_10.bak/run_mqtt.lua delete mode 100644 3B/archive/root_10.bak/scheduler.lua delete mode 100644 3B/archive/root_10.bak/secs.lua delete mode 100644 3B/archive/root_10.bak/secs_i.lua delete mode 100644 3B/archive/root_10.bak/secs_ii.lua delete mode 100644 3B/archive/root_10.bak/shm.lua delete mode 100644 3B/archive/root_10.bak/st.lua delete mode 100644 3B/archive/root_10.bak/struct.lua delete mode 100644 3B/archive/root_10.bak/tabs.lua delete mode 100644 3B/archive/root_10.bak/ti.lua delete mode 100644 3B/archive/root_10.bak/touch.lua delete mode 100644 3B/archive/root_10.bak/tr.lua delete mode 100644 3B/archive/root_11.bak/app.lua delete mode 100644 3B/archive/root_11.bak/cfg.lua delete mode 100644 3B/archive/root_11.bak/ctrlapp delete mode 100644 3B/archive/root_11.bak/display.ini delete mode 100644 3B/archive/root_11.bak/env.lua delete mode 100644 3B/archive/root_11.bak/font/arial.ttf delete mode 100644 3B/archive/root_11.bak/font/mono.ttf delete mode 100644 3B/archive/root_11.bak/locale.lua delete mode 100644 3B/archive/root_11.bak/mb.lua delete mode 100644 3B/archive/root_11.bak/mqtt.lua delete mode 100644 3B/archive/root_11.bak/panel.lua delete mode 100644 3B/archive/root_11.bak/run.lua delete mode 100644 3B/archive/root_11.bak/run_line.lua delete mode 100644 3B/archive/root_11.bak/run_logi.lua delete mode 100644 3B/archive/root_11.bak/run_mqtt.lua delete mode 100644 3B/archive/root_11.bak/scheduler.lua delete mode 100644 3B/archive/root_11.bak/secs.lua delete mode 100644 3B/archive/root_11.bak/secs_i.lua delete mode 100644 3B/archive/root_11.bak/secs_ii.lua delete mode 100644 3B/archive/root_11.bak/shm.lua delete mode 100644 3B/archive/root_11.bak/st.lua delete mode 100644 3B/archive/root_11.bak/struct.lua delete mode 100644 3B/archive/root_11.bak/tabs.lua delete mode 100644 3B/archive/root_11.bak/ti.lua delete mode 100644 3B/archive/root_11.bak/touch.lua delete mode 100644 3B/archive/root_11.bak/tr.lua delete mode 100644 3B/archive/root_12.bak/app.lua delete mode 100644 3B/archive/root_12.bak/cfg.lua delete mode 100644 3B/archive/root_12.bak/ctrlapp delete mode 100644 3B/archive/root_12.bak/display.ini delete mode 100644 3B/archive/root_12.bak/env.lua delete mode 100644 3B/archive/root_12.bak/font/arial.ttf delete mode 100644 3B/archive/root_12.bak/font/mono.ttf delete mode 100644 3B/archive/root_12.bak/locale.lua delete mode 100644 3B/archive/root_12.bak/mb.lua delete mode 100644 3B/archive/root_12.bak/mqtt.lua delete mode 100644 3B/archive/root_12.bak/panel.lua delete mode 100644 3B/archive/root_12.bak/run.lua delete mode 100644 3B/archive/root_12.bak/run_line.lua delete mode 100644 3B/archive/root_12.bak/run_logi.lua delete mode 100644 3B/archive/root_12.bak/run_mqtt.lua delete mode 100644 3B/archive/root_12.bak/scheduler.lua delete mode 100644 3B/archive/root_12.bak/secs.lua delete mode 100644 3B/archive/root_12.bak/secs_i.lua delete mode 100644 3B/archive/root_12.bak/secs_ii.lua delete mode 100644 3B/archive/root_12.bak/shm.lua delete mode 100644 3B/archive/root_12.bak/st.lua delete mode 100644 3B/archive/root_12.bak/struct.lua delete mode 100644 3B/archive/root_12.bak/tabs.lua delete mode 100644 3B/archive/root_12.bak/ti.lua delete mode 100644 3B/archive/root_12.bak/touch.lua delete mode 100644 3B/archive/root_12.bak/tr.lua delete mode 100644 3B/archive/root_3.bak/app.lua delete mode 100644 3B/archive/root_3.bak/cfg.lua delete mode 100644 3B/archive/root_3.bak/ctrlapp delete mode 100644 3B/archive/root_3.bak/display.ini delete mode 100644 3B/archive/root_3.bak/env.lua delete mode 100644 3B/archive/root_3.bak/font/arial.ttf delete mode 100644 3B/archive/root_3.bak/font/mono.ttf delete mode 100644 3B/archive/root_3.bak/locale.lua delete mode 100644 3B/archive/root_3.bak/mb.lua delete mode 100644 3B/archive/root_3.bak/mqtt.lua delete mode 100644 3B/archive/root_3.bak/panel.lua delete mode 100644 3B/archive/root_3.bak/run.lua delete mode 100644 3B/archive/root_3.bak/run_line.lua delete mode 100644 3B/archive/root_3.bak/run_logi.lua delete mode 100644 3B/archive/root_3.bak/run_mqtt.lua delete mode 100644 3B/archive/root_3.bak/scheduler.lua delete mode 100644 3B/archive/root_3.bak/secs.lua delete mode 100644 3B/archive/root_3.bak/secs_i.lua delete mode 100644 3B/archive/root_3.bak/secs_ii.lua delete mode 100644 3B/archive/root_3.bak/shm.lua delete mode 100644 3B/archive/root_3.bak/st.lua delete mode 100644 3B/archive/root_3.bak/struct.lua delete mode 100644 3B/archive/root_3.bak/tabs.lua delete mode 100644 3B/archive/root_3.bak/ti.lua delete mode 100644 3B/archive/root_3.bak/touch.lua delete mode 100644 3B/archive/root_3.bak/tr.lua delete mode 100644 3B/archive/root_4.bak/app.lua delete mode 100644 3B/archive/root_4.bak/cfg.lua delete mode 100644 3B/archive/root_4.bak/ctrlapp delete mode 100644 3B/archive/root_4.bak/display.ini delete mode 100644 3B/archive/root_4.bak/env.lua delete mode 100644 3B/archive/root_4.bak/font/arial.ttf delete mode 100644 3B/archive/root_4.bak/font/mono.ttf delete mode 100644 3B/archive/root_4.bak/locale.lua delete mode 100644 3B/archive/root_4.bak/mb.lua delete mode 100644 3B/archive/root_4.bak/mqtt.lua delete mode 100644 3B/archive/root_4.bak/panel.lua delete mode 100644 3B/archive/root_4.bak/run.lua delete mode 100644 3B/archive/root_4.bak/run_line.lua delete mode 100644 3B/archive/root_4.bak/run_logi.lua delete mode 100644 3B/archive/root_4.bak/run_mqtt.lua delete mode 100644 3B/archive/root_4.bak/scheduler.lua delete mode 100644 3B/archive/root_4.bak/secs.lua delete mode 100644 3B/archive/root_4.bak/secs_i.lua delete mode 100644 3B/archive/root_4.bak/secs_ii.lua delete mode 100644 3B/archive/root_4.bak/shm.lua delete mode 100644 3B/archive/root_4.bak/st.lua delete mode 100644 3B/archive/root_4.bak/struct.lua delete mode 100644 3B/archive/root_4.bak/tabs.lua delete mode 100644 3B/archive/root_4.bak/ti.lua delete mode 100644 3B/archive/root_4.bak/touch.lua delete mode 100644 3B/archive/root_4.bak/tr.lua delete mode 100644 3B/archive/root_5.bak/app.lua delete mode 100644 3B/archive/root_5.bak/cfg.lua delete mode 100644 3B/archive/root_5.bak/ctrlapp delete mode 100644 3B/archive/root_5.bak/display.ini delete mode 100644 3B/archive/root_5.bak/env.lua delete mode 100644 3B/archive/root_5.bak/font/arial.ttf delete mode 100644 3B/archive/root_5.bak/font/mono.ttf delete mode 100644 3B/archive/root_5.bak/locale.lua delete mode 100644 3B/archive/root_5.bak/mb.lua delete mode 100644 3B/archive/root_5.bak/mqtt.lua delete mode 100644 3B/archive/root_5.bak/panel.lua delete mode 100644 3B/archive/root_5.bak/run.lua delete mode 100644 3B/archive/root_5.bak/run_line.lua delete mode 100644 3B/archive/root_5.bak/run_logi.lua delete mode 100644 3B/archive/root_5.bak/run_mqtt.lua delete mode 100644 3B/archive/root_5.bak/scheduler.lua delete mode 100644 3B/archive/root_5.bak/secs.lua delete mode 100644 3B/archive/root_5.bak/secs_i.lua delete mode 100644 3B/archive/root_5.bak/secs_ii.lua delete mode 100644 3B/archive/root_5.bak/shm.lua delete mode 100644 3B/archive/root_5.bak/st.lua delete mode 100644 3B/archive/root_5.bak/struct.lua delete mode 100644 3B/archive/root_5.bak/tabs.lua delete mode 100644 3B/archive/root_5.bak/ti.lua delete mode 100644 3B/archive/root_5.bak/touch.lua delete mode 100644 3B/archive/root_5.bak/tr.lua delete mode 100644 3B/archive/root_6.bak/app.lua delete mode 100644 3B/archive/root_6.bak/cfg.lua delete mode 100644 3B/archive/root_6.bak/ctrlapp delete mode 100644 3B/archive/root_6.bak/display.ini delete mode 100644 3B/archive/root_6.bak/env.lua delete mode 100644 3B/archive/root_6.bak/font/arial.ttf delete mode 100644 3B/archive/root_6.bak/font/mono.ttf delete mode 100644 3B/archive/root_6.bak/locale.lua delete mode 100644 3B/archive/root_6.bak/mb.lua delete mode 100644 3B/archive/root_6.bak/mqtt.lua delete mode 100644 3B/archive/root_6.bak/panel.lua delete mode 100644 3B/archive/root_6.bak/run.lua delete mode 100644 3B/archive/root_6.bak/run_line.lua delete mode 100644 3B/archive/root_6.bak/run_logi.lua delete mode 100644 3B/archive/root_6.bak/run_mqtt.lua delete mode 100644 3B/archive/root_6.bak/scheduler.lua delete mode 100644 3B/archive/root_6.bak/secs.lua delete mode 100644 3B/archive/root_6.bak/secs_i.lua delete mode 100644 3B/archive/root_6.bak/secs_ii.lua delete mode 100644 3B/archive/root_6.bak/shm.lua delete mode 100644 3B/archive/root_6.bak/st.lua delete mode 100644 3B/archive/root_6.bak/struct.lua delete mode 100644 3B/archive/root_6.bak/tabs.lua delete mode 100644 3B/archive/root_6.bak/ti.lua delete mode 100644 3B/archive/root_6.bak/touch.lua delete mode 100644 3B/archive/root_6.bak/tr.lua delete mode 100644 3B/archive/root_7.bak/app.lua delete mode 100644 3B/archive/root_7.bak/cfg.lua delete mode 100644 3B/archive/root_7.bak/ctrlapp delete mode 100644 3B/archive/root_7.bak/display.ini delete mode 100644 3B/archive/root_7.bak/env.lua delete mode 100644 3B/archive/root_7.bak/font/arial.ttf delete mode 100644 3B/archive/root_7.bak/font/mono.ttf delete mode 100644 3B/archive/root_7.bak/locale.lua delete mode 100644 3B/archive/root_7.bak/mb.lua delete mode 100644 3B/archive/root_7.bak/mqtt.lua delete mode 100644 3B/archive/root_7.bak/panel.lua delete mode 100644 3B/archive/root_7.bak/run.lua delete mode 100644 3B/archive/root_7.bak/run_line.lua delete mode 100644 3B/archive/root_7.bak/run_logi.lua delete mode 100644 3B/archive/root_7.bak/run_mqtt.lua delete mode 100644 3B/archive/root_7.bak/scheduler.lua delete mode 100644 3B/archive/root_7.bak/secs.lua delete mode 100644 3B/archive/root_7.bak/secs_i.lua delete mode 100644 3B/archive/root_7.bak/secs_ii.lua delete mode 100644 3B/archive/root_7.bak/shm.lua delete mode 100644 3B/archive/root_7.bak/st.lua delete mode 100644 3B/archive/root_7.bak/struct.lua delete mode 100644 3B/archive/root_7.bak/tabs.lua delete mode 100644 3B/archive/root_7.bak/ti.lua delete mode 100644 3B/archive/root_7.bak/touch.lua delete mode 100644 3B/archive/root_7.bak/tr.lua delete mode 100644 3B/archive/root_8.bak/app.lua delete mode 100644 3B/archive/root_8.bak/cfg.lua delete mode 100644 3B/archive/root_8.bak/ctrlapp delete mode 100644 3B/archive/root_8.bak/display.ini delete mode 100644 3B/archive/root_8.bak/env.lua delete mode 100644 3B/archive/root_8.bak/font/arial.ttf delete mode 100644 3B/archive/root_8.bak/font/mono.ttf delete mode 100644 3B/archive/root_8.bak/locale.lua delete mode 100644 3B/archive/root_8.bak/mb.lua delete mode 100644 3B/archive/root_8.bak/mqtt.lua delete mode 100644 3B/archive/root_8.bak/panel.lua delete mode 100644 3B/archive/root_8.bak/run.lua delete mode 100644 3B/archive/root_8.bak/run_line.lua delete mode 100644 3B/archive/root_8.bak/run_logi.lua delete mode 100644 3B/archive/root_8.bak/run_mqtt.lua delete mode 100644 3B/archive/root_8.bak/scheduler.lua delete mode 100644 3B/archive/root_8.bak/secs.lua delete mode 100644 3B/archive/root_8.bak/secs_i.lua delete mode 100644 3B/archive/root_8.bak/secs_ii.lua delete mode 100644 3B/archive/root_8.bak/shm.lua delete mode 100644 3B/archive/root_8.bak/st.lua delete mode 100644 3B/archive/root_8.bak/struct.lua delete mode 100644 3B/archive/root_8.bak/tabs.lua delete mode 100644 3B/archive/root_8.bak/ti.lua delete mode 100644 3B/archive/root_8.bak/touch.lua delete mode 100644 3B/archive/root_8.bak/tr.lua delete mode 100644 3B/archive/root_9.bak/app.lua delete mode 100644 3B/archive/root_9.bak/cfg.lua delete mode 100644 3B/archive/root_9.bak/ctrlapp delete mode 100644 3B/archive/root_9.bak/display.ini delete mode 100644 3B/archive/root_9.bak/env.lua delete mode 100644 3B/archive/root_9.bak/font/arial.ttf delete mode 100644 3B/archive/root_9.bak/font/mono.ttf delete mode 100644 3B/archive/root_9.bak/locale.lua delete mode 100644 3B/archive/root_9.bak/mb.lua delete mode 100644 3B/archive/root_9.bak/mqtt.lua delete mode 100644 3B/archive/root_9.bak/panel.lua delete mode 100644 3B/archive/root_9.bak/run.lua delete mode 100644 3B/archive/root_9.bak/run_line.lua delete mode 100644 3B/archive/root_9.bak/run_logi.lua delete mode 100644 3B/archive/root_9.bak/run_mqtt.lua delete mode 100644 3B/archive/root_9.bak/scheduler.lua delete mode 100644 3B/archive/root_9.bak/secs.lua delete mode 100644 3B/archive/root_9.bak/secs_i.lua delete mode 100644 3B/archive/root_9.bak/secs_ii.lua delete mode 100644 3B/archive/root_9.bak/shm.lua delete mode 100644 3B/archive/root_9.bak/st.lua delete mode 100644 3B/archive/root_9.bak/struct.lua delete mode 100644 3B/archive/root_9.bak/tabs.lua delete mode 100644 3B/archive/root_9.bak/ti.lua delete mode 100644 3B/archive/root_9.bak/touch.lua delete mode 100644 3B/archive/root_9.bak/tr.lua delete mode 100644 3B/archive/www_10.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_10.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_10.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_10.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_10.bak/panel/index.html delete mode 100644 3B/archive/www_10.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_10.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_10.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_10.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_10.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_10.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_10.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_10.bak/panel/js/npm.js delete mode 100644 3B/archive/www_10.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_10.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_10.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_10.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_10.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_11.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_11.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_11.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_11.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_11.bak/panel/index.html delete mode 100644 3B/archive/www_11.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_11.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_11.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_11.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_11.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_11.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_11.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_11.bak/panel/js/npm.js delete mode 100644 3B/archive/www_11.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_11.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_11.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_11.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_11.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_12.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_12.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_12.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_12.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_12.bak/panel/index.html delete mode 100644 3B/archive/www_12.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_12.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_12.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_12.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_12.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_12.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_12.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_12.bak/panel/js/npm.js delete mode 100644 3B/archive/www_12.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_12.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_12.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_12.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_12.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_3.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_3.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_3.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_3.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_3.bak/panel/index.html delete mode 100644 3B/archive/www_3.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_3.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_3.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_3.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_3.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_3.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_3.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_3.bak/panel/js/npm.js delete mode 100644 3B/archive/www_3.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_3.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_3.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_3.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_3.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_4.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_4.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_4.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_4.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_4.bak/panel/index.html delete mode 100644 3B/archive/www_4.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_4.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_4.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_4.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_4.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_4.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_4.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_4.bak/panel/js/npm.js delete mode 100644 3B/archive/www_4.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_4.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_4.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_4.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_4.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_5.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_5.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_5.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_5.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_5.bak/panel/index.html delete mode 100644 3B/archive/www_5.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_5.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_5.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_5.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_5.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_5.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_5.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_5.bak/panel/js/npm.js delete mode 100644 3B/archive/www_5.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_5.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_5.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_5.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_5.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_6.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_6.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_6.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_6.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_6.bak/panel/index.html delete mode 100644 3B/archive/www_6.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_6.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_6.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_6.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_6.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_6.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_6.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_6.bak/panel/js/npm.js delete mode 100644 3B/archive/www_6.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_6.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_6.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_6.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_6.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_7.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_7.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_7.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_7.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_7.bak/panel/index.html delete mode 100644 3B/archive/www_7.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_7.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_7.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_7.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_7.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_7.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_7.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_7.bak/panel/js/npm.js delete mode 100644 3B/archive/www_7.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_7.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_7.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_7.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_7.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_8.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_8.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_8.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_8.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_8.bak/panel/index.html delete mode 100644 3B/archive/www_8.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_8.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_8.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_8.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_8.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_8.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_8.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_8.bak/panel/js/npm.js delete mode 100644 3B/archive/www_8.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_8.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_8.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_8.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_8.bak/panel/old_js/socket.io.min.js delete mode 100644 3B/archive/www_9.bak/panel/css/bootstrap-toggle.css delete mode 100644 3B/archive/www_9.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 3B/archive/www_9.bak/panel/css/bootstrap.css delete mode 100644 3B/archive/www_9.bak/panel/css/bootstrap.min.css delete mode 100644 3B/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 3B/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 3B/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 3B/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 3B/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 3B/archive/www_9.bak/panel/index.html delete mode 100644 3B/archive/www_9.bak/panel/js/bootstrap-toggle.js delete mode 100644 3B/archive/www_9.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 3B/archive/www_9.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 3B/archive/www_9.bak/panel/js/bootstrap.js delete mode 100644 3B/archive/www_9.bak/panel/js/bootstrap.min.js delete mode 100644 3B/archive/www_9.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 3B/archive/www_9.bak/panel/js/mqttws31.js delete mode 100644 3B/archive/www_9.bak/panel/js/npm.js delete mode 100644 3B/archive/www_9.bak/panel/js/socket.io.min.js delete mode 100644 3B/archive/www_9.bak/panel/mqtthost.html delete mode 100644 3B/archive/www_9.bak/panel/mqttpub.html delete mode 100644 3B/archive/www_9.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/mqttws31.js delete mode 100644 3B/archive/www_9.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/root_10.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_10.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_10.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_10.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_10.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_10.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_11.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_11.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_11.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_11.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_11.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_12.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_12.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_12.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_12.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_12.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_3.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_3.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_3.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_3.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_3.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_4.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_4.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_4.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_4.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_4.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_5.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_5.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_5.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_5.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_5.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_6.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_6.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_6.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_6.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_6.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_7.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_7.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_7.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_7.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_7.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_8.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_8.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_8.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_8.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_8.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/app.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/cfg.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/ctrlapp delete mode 100644 fsi_touch_05042021/archive/root_9.bak/display.ini delete mode 100644 fsi_touch_05042021/archive/root_9.bak/env.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/font/arial.ttf delete mode 100644 fsi_touch_05042021/archive/root_9.bak/font/mono.ttf delete mode 100644 fsi_touch_05042021/archive/root_9.bak/locale.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/mb.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/panel.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/run.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/run_line.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/run_logi.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/run_mqtt.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/scheduler.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/secs.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/secs_i.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/secs_ii.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/shm.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/st.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/struct.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/tabs.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/ti.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/touch.lua delete mode 100644 fsi_touch_05042021/archive/root_9.bak/tr.lua delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_10.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_11.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_12.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_3.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_4.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_5.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_6.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_7.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_8.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/index.html delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/npm.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/mqtthost.html delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/mqttpub.html delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_05042021/archive/www_9.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/root_10.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_10.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_10.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_10.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_10.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_10.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_11.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_11.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_11.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_11.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_11.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_12.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_12.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_12.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_12.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_12.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_3.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_3.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_3.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_3.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_3.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_4.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_4.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_4.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_4.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_4.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_5.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_5.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_5.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_5.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_5.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_6.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_6.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_6.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_6.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_6.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_7.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_7.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_7.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_7.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_7.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_8.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_8.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_8.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_8.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_8.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/app.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/cfg.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/ctrlapp delete mode 100644 fsi_touch_10052021/archive/root_9.bak/display.ini delete mode 100644 fsi_touch_10052021/archive/root_9.bak/env.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/font/arial.ttf delete mode 100644 fsi_touch_10052021/archive/root_9.bak/font/mono.ttf delete mode 100644 fsi_touch_10052021/archive/root_9.bak/locale.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/mb.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/panel.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/run.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/run_line.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/run_logi.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/run_mqtt.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/scheduler.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/secs.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/secs_i.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/secs_ii.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/shm.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/st.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/struct.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/tabs.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/ti.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/touch.lua delete mode 100644 fsi_touch_10052021/archive/root_9.bak/tr.lua delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_10.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_11.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_12.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_3.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_4.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_5.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_6.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_7.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_8.bak/panel/old_js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/css/bootstrap-toggle.css delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/css/bootstrap-toggle.min.css delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/css/bootstrap.css delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/css/bootstrap.min.css delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.eot delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.svg delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.ttf delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/index.html delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/bootstrap-toggle.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/bootstrap-toggle.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/bootstrap-toggle.min.js.map delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/bootstrap.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/bootstrap.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/jquery-3.2.1.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/npm.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/js/socket.io.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/mqtthost.html delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/mqttpub.html delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jqplot.canvasAxisLabelRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jqplot.canvasTextRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jqplot.dateAxisRenderer.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jquery-1.11.2.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jquery.jqplot.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/jquery.sparkline.min.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/mqttws31.js delete mode 100644 fsi_touch_10052021/archive/www_9.bak/panel/old_js/socket.io.min.js diff --git a/3B/archive/root_10.bak/app.lua b/3B/archive/root_10.bak/app.lua deleted file mode 100644 index 26633ca..0000000 --- a/3B/archive/root_10.bak/app.lua +++ /dev/null @@ -1,13 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -app.mqttBroker = {"192.168.9.99",inf="MQTT Broker"}; -app.mqttRoot = {"pilogi",inf="MQTT Root"}; - diff --git a/3B/archive/root_10.bak/cfg.lua b/3B/archive/root_10.bak/cfg.lua deleted file mode 100644 index bdb8e04..0000000 --- a/3B/archive/root_10.bak/cfg.lua +++ /dev/null @@ -1,45 +0,0 @@ -modules = {"panel","app","locale"}; - ----------------- Application module app configuration --------------- - -app = {} -require "app" - -function app.apply() - print( - "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_10.bak/ctrlapp b/3B/archive/root_10.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_10.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_10.bak/display.ini b/3B/archive/root_10.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_10.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_10.bak/env.lua b/3B/archive/root_10.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_10.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_10.bak/font/arial.ttf b/3B/archive/root_10.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_10.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_10.bak/font/mono.ttf b/3B/archive/root_10.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_10.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_10.bak/locale.lua b/3B/archive/root_10.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_10.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_10.bak/mb.lua b/3B/archive/root_10.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_10.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_10.bak/mqtt.lua b/3B/archive/root_10.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_10.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_10.bak/panel.lua b/3B/archive/root_10.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_10.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_10.bak/run.lua b/3B/archive/root_10.bak/run.lua deleted file mode 100644 index 9bc7244..0000000 --- a/3B/archive/root_10.bak/run.lua +++ /dev/null @@ -1,308 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - local x = 0; - local y = 0; - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 53 then - touchX = value - elseif eventCode == 54 then - touchY = value - end - end - if eventType == 1 then - if eventCode == 330 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl1: ",y,x,idx) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl2: ",y,x,idx) - end - if touchY > 320 and touchY < 399 then - x = 8 + math.floor(touchX/80)*4 - y = 19 - print("Numbs: ",y,x) - end - if touchY > 80 and touchY < 319 then - y = math.floor((touchY-80)/240*10+6) - x = math.floor(touchX/720*36+7) - print("Lines: ",y,x) - end - if x > 0 and y > 0 then - if value == 1 then - print("down") - serial:write(string.char(0x5F,y,x)) - serial:flush() - --serial:write(string.char(0x5F,x,y)) - else - print("up") - serial:write(string.char(0x6F,y,x)) - serial:flush() - end - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_10.bak/run_line.lua b/3B/archive/root_10.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_10.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_10.bak/run_logi.lua b/3B/archive/root_10.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_10.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_10.bak/run_mqtt.lua b/3B/archive/root_10.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_10.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_10.bak/scheduler.lua b/3B/archive/root_10.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_10.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_10.bak/secs.lua b/3B/archive/root_10.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_10.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_10.bak/secs_i.lua b/3B/archive/root_10.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_10.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_10.bak/secs_ii.lua b/3B/archive/root_10.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_10.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_10.bak/shm.lua b/3B/archive/root_10.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_10.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_10.bak/st.lua b/3B/archive/root_10.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_10.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_10.bak/struct.lua b/3B/archive/root_10.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_10.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_10.bak/tabs.lua b/3B/archive/root_10.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_10.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_10.bak/ti.lua b/3B/archive/root_10.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_10.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_10.bak/touch.lua b/3B/archive/root_10.bak/touch.lua deleted file mode 100644 index d233ec4..0000000 --- a/3B/archive/root_10.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail()) - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_10.bak/tr.lua b/3B/archive/root_10.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_10.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_11.bak/ctrlapp b/3B/archive/root_11.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_11.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_11.bak/display.ini b/3B/archive/root_11.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_11.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_11.bak/env.lua b/3B/archive/root_11.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_11.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_11.bak/font/arial.ttf b/3B/archive/root_11.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_11.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_11.bak/font/mono.ttf b/3B/archive/root_11.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_11.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_11.bak/locale.lua b/3B/archive/root_11.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_11.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_11.bak/mb.lua b/3B/archive/root_11.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_11.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_11.bak/mqtt.lua b/3B/archive/root_11.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_11.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_11.bak/panel.lua b/3B/archive/root_11.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_11.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_11.bak/run.lua b/3B/archive/root_11.bak/run.lua deleted file mode 100644 index 9bc7244..0000000 --- a/3B/archive/root_11.bak/run.lua +++ /dev/null @@ -1,308 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - local x = 0; - local y = 0; - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 53 then - touchX = value - elseif eventCode == 54 then - touchY = value - end - end - if eventType == 1 then - if eventCode == 330 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl1: ",y,x,idx) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl2: ",y,x,idx) - end - if touchY > 320 and touchY < 399 then - x = 8 + math.floor(touchX/80)*4 - y = 19 - print("Numbs: ",y,x) - end - if touchY > 80 and touchY < 319 then - y = math.floor((touchY-80)/240*10+6) - x = math.floor(touchX/720*36+7) - print("Lines: ",y,x) - end - if x > 0 and y > 0 then - if value == 1 then - print("down") - serial:write(string.char(0x5F,y,x)) - serial:flush() - --serial:write(string.char(0x5F,x,y)) - else - print("up") - serial:write(string.char(0x6F,y,x)) - serial:flush() - end - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_11.bak/run_line.lua b/3B/archive/root_11.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_11.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_11.bak/run_logi.lua b/3B/archive/root_11.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_11.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_11.bak/run_mqtt.lua b/3B/archive/root_11.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_11.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_11.bak/scheduler.lua b/3B/archive/root_11.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_11.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_11.bak/secs.lua b/3B/archive/root_11.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_11.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_11.bak/secs_i.lua b/3B/archive/root_11.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_11.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_11.bak/secs_ii.lua b/3B/archive/root_11.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_11.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_11.bak/shm.lua b/3B/archive/root_11.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_11.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_11.bak/st.lua b/3B/archive/root_11.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_11.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_11.bak/struct.lua b/3B/archive/root_11.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_11.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_11.bak/tabs.lua b/3B/archive/root_11.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_11.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_11.bak/ti.lua b/3B/archive/root_11.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_11.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_11.bak/touch.lua b/3B/archive/root_11.bak/touch.lua deleted file mode 100644 index d233ec4..0000000 --- a/3B/archive/root_11.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail()) - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_11.bak/tr.lua b/3B/archive/root_11.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_11.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_12.bak/ctrlapp b/3B/archive/root_12.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_12.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_12.bak/display.ini b/3B/archive/root_12.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_12.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_12.bak/env.lua b/3B/archive/root_12.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_12.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_12.bak/font/arial.ttf b/3B/archive/root_12.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_12.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_12.bak/font/mono.ttf b/3B/archive/root_12.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_12.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_12.bak/locale.lua b/3B/archive/root_12.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_12.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_12.bak/mb.lua b/3B/archive/root_12.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_12.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_12.bak/mqtt.lua b/3B/archive/root_12.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_12.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_12.bak/panel.lua b/3B/archive/root_12.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_12.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_12.bak/run.lua b/3B/archive/root_12.bak/run.lua deleted file mode 100644 index 466fcde..0000000 --- a/3B/archive/root_12.bak/run.lua +++ /dev/null @@ -1,310 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -socket = require('socket') - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local timestamp = socket.gettime()*1000 - - while socket.gettime()*1000 - timestamp < 100 do - if serial:poll(0.01) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - local x = 0; - local y = 0; - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 53 then - touchX = value - elseif eventCode == 54 then - touchY = value - end - end - if eventType == 1 then - if eventCode == 330 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl1: ",y,x,idx) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl2: ",y,x,idx) - end - if touchY > 320 and touchY < 399 then - x = 8 + math.floor(touchX/80)*4 - y = 19 - print("Numbs: ",y,x) - end - if touchY > 80 and touchY < 319 then - y = math.floor((touchY-80)/240*10+6) - x = math.floor(touchX/720*36+7) - print("Lines: ",y,x) - end - if x > 0 and y > 0 then - if value == 1 then - print("down") - serial:write(string.char(0x5F,y,x)) - serial:flush() - --serial:write(string.char(0x5F,x,y)) - else - print("up") - serial:write(string.char(0x6F,y,x)) - serial:flush() - end - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_12.bak/run_line.lua b/3B/archive/root_12.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_12.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_12.bak/run_logi.lua b/3B/archive/root_12.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_12.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_12.bak/run_mqtt.lua b/3B/archive/root_12.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_12.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_12.bak/scheduler.lua b/3B/archive/root_12.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_12.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_12.bak/secs.lua b/3B/archive/root_12.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_12.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_12.bak/secs_i.lua b/3B/archive/root_12.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_12.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_12.bak/secs_ii.lua b/3B/archive/root_12.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_12.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_12.bak/shm.lua b/3B/archive/root_12.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_12.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_12.bak/st.lua b/3B/archive/root_12.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_12.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_12.bak/struct.lua b/3B/archive/root_12.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_12.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_12.bak/tabs.lua b/3B/archive/root_12.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_12.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_12.bak/ti.lua b/3B/archive/root_12.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_12.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_12.bak/touch.lua b/3B/archive/root_12.bak/touch.lua deleted file mode 100644 index d233ec4..0000000 --- a/3B/archive/root_12.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail()) - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_12.bak/tr.lua b/3B/archive/root_12.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_12.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_3.bak/ctrlapp b/3B/archive/root_3.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_3.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_3.bak/display.ini b/3B/archive/root_3.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_3.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_3.bak/env.lua b/3B/archive/root_3.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_3.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_3.bak/font/arial.ttf b/3B/archive/root_3.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_3.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_3.bak/font/mono.ttf b/3B/archive/root_3.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_3.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_3.bak/locale.lua b/3B/archive/root_3.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_3.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_3.bak/mb.lua b/3B/archive/root_3.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_3.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_3.bak/mqtt.lua b/3B/archive/root_3.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_3.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_3.bak/panel.lua b/3B/archive/root_3.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_3.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_3.bak/run.lua b/3B/archive/root_3.bak/run.lua deleted file mode 100644 index add452f..0000000 --- a/3B/archive/root_3.bak/run.lua +++ /dev/null @@ -1,191 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function doRead() - local loops = 0 - while loops < 100 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - local label = line[posY+1][posX+1] - label:setText(c) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function setup() - serial = Serial("/dev/ttyAMA0",19200) - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - cnt = 0; -end - -function loop() - doRead() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_3.bak/run_line.lua b/3B/archive/root_3.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_3.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_3.bak/run_logi.lua b/3B/archive/root_3.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_3.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_3.bak/run_mqtt.lua b/3B/archive/root_3.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_3.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_3.bak/scheduler.lua b/3B/archive/root_3.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_3.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_3.bak/secs.lua b/3B/archive/root_3.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_3.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_3.bak/secs_i.lua b/3B/archive/root_3.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_3.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_3.bak/secs_ii.lua b/3B/archive/root_3.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_3.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_3.bak/shm.lua b/3B/archive/root_3.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_3.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_3.bak/st.lua b/3B/archive/root_3.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_3.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_3.bak/struct.lua b/3B/archive/root_3.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_3.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_3.bak/tabs.lua b/3B/archive/root_3.bak/tabs.lua deleted file mode 100644 index b0c3070..0000000 --- a/3B/archive/root_3.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, - {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} --- {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_3.bak/ti.lua b/3B/archive/root_3.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_3.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_3.bak/touch.lua b/3B/archive/root_3.bak/touch.lua deleted file mode 100644 index 6cf9248..0000000 --- a/3B/archive/root_3.bak/touch.lua +++ /dev/null @@ -1,21 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 - -while true do - local timestamp, eventType, eventCode, value = dev:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - print("Up: ",x,y) - end - elseif eventCode == 0 then - y = value - elseif eventCode == 1 then - x = value - end - end -end diff --git a/3B/archive/root_3.bak/tr.lua b/3B/archive/root_3.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_3.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_4.bak/ctrlapp b/3B/archive/root_4.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_4.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_4.bak/display.ini b/3B/archive/root_4.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_4.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_4.bak/env.lua b/3B/archive/root_4.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_4.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_4.bak/font/arial.ttf b/3B/archive/root_4.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_4.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_4.bak/font/mono.ttf b/3B/archive/root_4.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_4.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_4.bak/locale.lua b/3B/archive/root_4.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_4.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_4.bak/mb.lua b/3B/archive/root_4.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_4.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_4.bak/mqtt.lua b/3B/archive/root_4.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_4.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_4.bak/panel.lua b/3B/archive/root_4.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_4.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_4.bak/run.lua b/3B/archive/root_4.bak/run.lua deleted file mode 100644 index c10f67a..0000000 --- a/3B/archive/root_4.bak/run.lua +++ /dev/null @@ -1,198 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function doRead() - local loops = 0 - while loops < 100 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - cnt = 0; -end - -function loop() - doRead() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_4.bak/run_line.lua b/3B/archive/root_4.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_4.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_4.bak/run_logi.lua b/3B/archive/root_4.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_4.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_4.bak/run_mqtt.lua b/3B/archive/root_4.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_4.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_4.bak/scheduler.lua b/3B/archive/root_4.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_4.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_4.bak/secs.lua b/3B/archive/root_4.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_4.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_4.bak/secs_i.lua b/3B/archive/root_4.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_4.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_4.bak/secs_ii.lua b/3B/archive/root_4.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_4.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_4.bak/shm.lua b/3B/archive/root_4.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_4.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_4.bak/st.lua b/3B/archive/root_4.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_4.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_4.bak/struct.lua b/3B/archive/root_4.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_4.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_4.bak/tabs.lua b/3B/archive/root_4.bak/tabs.lua deleted file mode 100644 index b0c3070..0000000 --- a/3B/archive/root_4.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, - {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} --- {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_4.bak/ti.lua b/3B/archive/root_4.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_4.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_4.bak/touch.lua b/3B/archive/root_4.bak/touch.lua deleted file mode 100644 index 6cf9248..0000000 --- a/3B/archive/root_4.bak/touch.lua +++ /dev/null @@ -1,21 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 - -while true do - local timestamp, eventType, eventCode, value = dev:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - print("Up: ",x,y) - end - elseif eventCode == 0 then - y = value - elseif eventCode == 1 then - x = value - end - end -end diff --git a/3B/archive/root_4.bak/tr.lua b/3B/archive/root_4.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_4.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_5.bak/ctrlapp b/3B/archive/root_5.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_5.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_5.bak/display.ini b/3B/archive/root_5.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_5.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_5.bak/env.lua b/3B/archive/root_5.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_5.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_5.bak/font/arial.ttf b/3B/archive/root_5.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_5.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_5.bak/font/mono.ttf b/3B/archive/root_5.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_5.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_5.bak/locale.lua b/3B/archive/root_5.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_5.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_5.bak/mb.lua b/3B/archive/root_5.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_5.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_5.bak/mqtt.lua b/3B/archive/root_5.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_5.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_5.bak/panel.lua b/3B/archive/root_5.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_5.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_5.bak/run.lua b/3B/archive/root_5.bak/run.lua deleted file mode 100644 index f37c3ea..0000000 --- a/3B/archive/root_5.bak/run.lua +++ /dev/null @@ -1,225 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 1 - posY = 1 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - cnt = 0; -end - -function loop() - doRead() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_5.bak/run_line.lua b/3B/archive/root_5.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_5.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_5.bak/run_logi.lua b/3B/archive/root_5.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_5.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_5.bak/run_mqtt.lua b/3B/archive/root_5.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_5.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_5.bak/scheduler.lua b/3B/archive/root_5.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_5.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_5.bak/secs.lua b/3B/archive/root_5.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_5.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_5.bak/secs_i.lua b/3B/archive/root_5.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_5.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_5.bak/secs_ii.lua b/3B/archive/root_5.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_5.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_5.bak/shm.lua b/3B/archive/root_5.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_5.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_5.bak/st.lua b/3B/archive/root_5.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_5.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_5.bak/struct.lua b/3B/archive/root_5.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_5.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_5.bak/tabs.lua b/3B/archive/root_5.bak/tabs.lua deleted file mode 100644 index b0c3070..0000000 --- a/3B/archive/root_5.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, - {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} --- {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_5.bak/ti.lua b/3B/archive/root_5.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_5.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_5.bak/touch.lua b/3B/archive/root_5.bak/touch.lua deleted file mode 100644 index 6cf9248..0000000 --- a/3B/archive/root_5.bak/touch.lua +++ /dev/null @@ -1,21 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 - -while true do - local timestamp, eventType, eventCode, value = dev:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - print("Up: ",x,y) - end - elseif eventCode == 0 then - y = value - elseif eventCode == 1 then - x = value - end - end -end diff --git a/3B/archive/root_5.bak/tr.lua b/3B/archive/root_5.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_5.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_6.bak/ctrlapp b/3B/archive/root_6.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_6.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_6.bak/display.ini b/3B/archive/root_6.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_6.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_6.bak/env.lua b/3B/archive/root_6.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_6.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_6.bak/font/arial.ttf b/3B/archive/root_6.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_6.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_6.bak/font/mono.ttf b/3B/archive/root_6.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_6.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_6.bak/locale.lua b/3B/archive/root_6.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_6.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_6.bak/mb.lua b/3B/archive/root_6.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_6.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_6.bak/mqtt.lua b/3B/archive/root_6.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_6.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_6.bak/panel.lua b/3B/archive/root_6.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_6.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_6.bak/run.lua b/3B/archive/root_6.bak/run.lua deleted file mode 100644 index f37c3ea..0000000 --- a/3B/archive/root_6.bak/run.lua +++ /dev/null @@ -1,225 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 1 - posY = 1 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - cnt = 0; -end - -function loop() - doRead() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_6.bak/run_line.lua b/3B/archive/root_6.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_6.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_6.bak/run_logi.lua b/3B/archive/root_6.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_6.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_6.bak/run_mqtt.lua b/3B/archive/root_6.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_6.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_6.bak/scheduler.lua b/3B/archive/root_6.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_6.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_6.bak/secs.lua b/3B/archive/root_6.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_6.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_6.bak/secs_i.lua b/3B/archive/root_6.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_6.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_6.bak/secs_ii.lua b/3B/archive/root_6.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_6.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_6.bak/shm.lua b/3B/archive/root_6.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_6.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_6.bak/st.lua b/3B/archive/root_6.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_6.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_6.bak/struct.lua b/3B/archive/root_6.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_6.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_6.bak/tabs.lua b/3B/archive/root_6.bak/tabs.lua deleted file mode 100644 index b0c3070..0000000 --- a/3B/archive/root_6.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, - {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} --- {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_6.bak/ti.lua b/3B/archive/root_6.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_6.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_6.bak/touch.lua b/3B/archive/root_6.bak/touch.lua deleted file mode 100644 index 6cf9248..0000000 --- a/3B/archive/root_6.bak/touch.lua +++ /dev/null @@ -1,21 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 - -while true do - local timestamp, eventType, eventCode, value = dev:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - print("Up: ",x,y) - end - elseif eventCode == 0 then - y = value - elseif eventCode == 1 then - x = value - end - end -end diff --git a/3B/archive/root_6.bak/tr.lua b/3B/archive/root_6.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_6.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_7.bak/ctrlapp b/3B/archive/root_7.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_7.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_7.bak/display.ini b/3B/archive/root_7.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_7.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_7.bak/env.lua b/3B/archive/root_7.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_7.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_7.bak/font/arial.ttf b/3B/archive/root_7.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_7.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_7.bak/font/mono.ttf b/3B/archive/root_7.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_7.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_7.bak/locale.lua b/3B/archive/root_7.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_7.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_7.bak/mb.lua b/3B/archive/root_7.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_7.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_7.bak/mqtt.lua b/3B/archive/root_7.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_7.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_7.bak/panel.lua b/3B/archive/root_7.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_7.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_7.bak/run.lua b/3B/archive/root_7.bak/run.lua deleted file mode 100644 index 638896a..0000000 --- a/3B/archive/root_7.bak/run.lua +++ /dev/null @@ -1,286 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - print("Ctrl1: ",idx,controlPos[idx][1],controlPos[idx][2]) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - print("Ctrl2: ",idx,controlPos[idx][1],controlPos[idx][2]) - end - if touchY > 320 and touchY < 399 then - print("Numbs: ",math.floor(touchX/80)+1) - end - if touchY > 80 and touchY < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((touchY-80)/240*10+6),math.floor(touchX/720*36+7)) - end - end - elseif eventCode == 0 then - touchX = value - elseif eventCode == 1 then - touchY = value - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_7.bak/run_line.lua b/3B/archive/root_7.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_7.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_7.bak/run_logi.lua b/3B/archive/root_7.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_7.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_7.bak/run_mqtt.lua b/3B/archive/root_7.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_7.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_7.bak/scheduler.lua b/3B/archive/root_7.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_7.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_7.bak/secs.lua b/3B/archive/root_7.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_7.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_7.bak/secs_i.lua b/3B/archive/root_7.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_7.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_7.bak/secs_ii.lua b/3B/archive/root_7.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_7.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_7.bak/shm.lua b/3B/archive/root_7.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_7.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_7.bak/st.lua b/3B/archive/root_7.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_7.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_7.bak/struct.lua b/3B/archive/root_7.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_7.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_7.bak/tabs.lua b/3B/archive/root_7.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_7.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_7.bak/ti.lua b/3B/archive/root_7.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_7.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_7.bak/touch.lua b/3B/archive/root_7.bak/touch.lua deleted file mode 100644 index d233ec4..0000000 --- a/3B/archive/root_7.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail()) - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_7.bak/tr.lua b/3B/archive/root_7.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_7.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_8.bak/ctrlapp b/3B/archive/root_8.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_8.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_8.bak/display.ini b/3B/archive/root_8.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_8.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_8.bak/env.lua b/3B/archive/root_8.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_8.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_8.bak/font/arial.ttf b/3B/archive/root_8.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_8.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_8.bak/font/mono.ttf b/3B/archive/root_8.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_8.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_8.bak/locale.lua b/3B/archive/root_8.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_8.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_8.bak/mb.lua b/3B/archive/root_8.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_8.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_8.bak/mqtt.lua b/3B/archive/root_8.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_8.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_8.bak/panel.lua b/3B/archive/root_8.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_8.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_8.bak/run.lua b/3B/archive/root_8.bak/run.lua deleted file mode 100644 index 0f69a6b..0000000 --- a/3B/archive/root_8.bak/run.lua +++ /dev/null @@ -1,295 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - local x = 0; - local y = 0; - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - x = controlPos[idx][1] - y = controlPos[idx][2] - print("Ctrl1: ",idx,x,y) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - x = controlPos[idx][1] - y = controlPos[idx][2] - print("Ctrl2: ",idx,x,y) - end - if touchY > 320 and touchY < 399 then - x = 8 + math.floor(touchX/80) - y = 19 - print("Numbs: ",x,y) - end - if touchY > 80 and touchY < 319 then - x = math.floor((touchY-80)/240*10+6) - y = math.floor(touchX/720*36+7) - print("Lines: ",x,y) - end - end - elseif eventCode == 0 then - touchX = value - elseif eventCode == 1 then - touchY = value - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_8.bak/run_line.lua b/3B/archive/root_8.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_8.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_8.bak/run_logi.lua b/3B/archive/root_8.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_8.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_8.bak/run_mqtt.lua b/3B/archive/root_8.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_8.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_8.bak/scheduler.lua b/3B/archive/root_8.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_8.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_8.bak/secs.lua b/3B/archive/root_8.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_8.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_8.bak/secs_i.lua b/3B/archive/root_8.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_8.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_8.bak/secs_ii.lua b/3B/archive/root_8.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_8.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_8.bak/shm.lua b/3B/archive/root_8.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_8.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_8.bak/st.lua b/3B/archive/root_8.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_8.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_8.bak/struct.lua b/3B/archive/root_8.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_8.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_8.bak/tabs.lua b/3B/archive/root_8.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_8.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_8.bak/ti.lua b/3B/archive/root_8.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_8.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_8.bak/touch.lua b/3B/archive/root_8.bak/touch.lua deleted file mode 100644 index d233ec4..0000000 --- a/3B/archive/root_8.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail()) - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_8.bak/tr.lua b/3B/archive/root_8.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_8.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = "
Apply module app !

".. - "
Damit die Änderungen wirksam werden, musste die Anwendung neu gestartet werden !

" - ); - os.execute("/root/ctrlapp stop") - os.execute("sleep 2") - os.execute("/root/ctrlapp start") -end - -function app.validate() - print("
Validate modlue app !

"); -end - ----------------- Witty Administration localisation ------------------ - -locale = {} -require "locale"; - ----------------- Witty Administration Tabs configuration ------------ - -tabs = {} -require "tabs"; - -panel = {}; -require "panel" - -function panel.apply() - local mqttBroker = app.mqttBroker[1] - local mqttRoot = app.mqttRoot[1] - print( - "
Apply module panel !

".. - "
Damit die Änderungen wirksam werden, wird die Konfiguration via MQTT publiziert !

" - ); - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m apply") - os.execute("sleep 2") - os.execute("mosquitto_pub -h "..mqttBroker.. " -t "..mqttRoot.."/ctrl/cmd/panel/config -m publish") -end \ No newline at end of file diff --git a/3B/archive/root_9.bak/ctrlapp b/3B/archive/root_9.bak/ctrlapp deleted file mode 100644 index 90e1abc..0000000 --- a/3B/archive/root_9.bak/ctrlapp +++ /dev/null @@ -1,44 +0,0 @@ -#! /bin/sh -# -# - -case "$1" in - start|"") - # Run App use default run.lua - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - stop) - /usr/bin/killall app - ;; - kill) - /usr/bin/killall -kill app - ;; - run) - /usr/bin/killall app - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/app -d -r /root -l /tmp/lotlog.txt 2>/dev/null - ;; - debug) - /usr/bin/killall app -# /bin/app -e -r /root /root/run.lua -# websocket fix, daq should lower permissions - if [ -f /mnt/app.ini ] ; then - source /mnt/app.ini - fi - /bin/su -p -c '/bin/app -e -r /root /root/run.lua' lua - ;; - websocket) - /usr/bin/killall websocketd - /usr/bin/screen -dmS websock /bin/websocketd --staticdir=/mnt/www --port=88 /root/ctrlapp debug - ;; - *) - echo "Usage: $0 {start|stop|run|debug|websocket}" >&2 - exit 1 - ;; -esac diff --git a/3B/archive/root_9.bak/display.ini b/3B/archive/root_9.bak/display.ini deleted file mode 100644 index 99489c8..0000000 --- a/3B/archive/root_9.bak/display.ini +++ /dev/null @@ -1,4 +0,0 @@ -[Info] -Version = 1 -[Framebuffer] -Device = /dev/fb0 diff --git a/3B/archive/root_9.bak/env.lua b/3B/archive/root_9.bak/env.lua deleted file mode 100644 index 4287b8d..0000000 --- a/3B/archive/root_9.bak/env.lua +++ /dev/null @@ -1,9 +0,0 @@ ----------------- Application module app configuration --------------- - -app = {}; -require "app" - ----------------- Application module locale configuration --------------- - -locale = {}; -require "locale"; diff --git a/3B/archive/root_9.bak/font/arial.ttf b/3B/archive/root_9.bak/font/arial.ttf deleted file mode 100644 index b251fe2..0000000 --- a/3B/archive/root_9.bak/font/arial.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:413c78f91bd39e134f3c0bb204b1d5a90f29df9efddc8fd26950a178058d5d74 -size 367112 diff --git a/3B/archive/root_9.bak/font/mono.ttf b/3B/archive/root_9.bak/font/mono.ttf deleted file mode 100644 index a320ccf..0000000 --- a/3B/archive/root_9.bak/font/mono.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19ec8400c40e7886bdd643a8d25fa05358cf37687c7a8077ef4ce2212b83ecfb -size 323288 diff --git a/3B/archive/root_9.bak/locale.lua b/3B/archive/root_9.bak/locale.lua deleted file mode 100644 index dbf9cc6..0000000 --- a/3B/archive/root_9.bak/locale.lua +++ /dev/null @@ -1,12 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -locale.version = {"Version 1.0",inf="Software Version"}; - diff --git a/3B/archive/root_9.bak/mb.lua b/3B/archive/root_9.bak/mb.lua deleted file mode 100644 index f2f1db6..0000000 --- a/3B/archive/root_9.bak/mb.lua +++ /dev/null @@ -1,24 +0,0 @@ -PLC = require('modbus') -socket = require('socket') - -plc = PLC.Modbus("pi_daq",502) - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - plc:sync(); - print(plc:getReal(1)) - end - socket.sleep(0.5) -end - -setup() - -while 1 do - loop() -end diff --git a/3B/archive/root_9.bak/mqtt.lua b/3B/archive/root_9.bak/mqtt.lua deleted file mode 100644 index 50800c6..0000000 --- a/3B/archive/root_9.bak/mqtt.lua +++ /dev/null @@ -1,66 +0,0 @@ -MQTT = require("mosquitto") -mqtt = MQTT.new() - -local function errLog(msg) - io.stderr:write(msg) -end - -local connected = false -local broker = "localhost" - -local onMessage = nil -local onConnect = nil - -local function publish(topic,msg,retain) - retain = retain or false - mqtt:publish(topic,msg, qos, retain) -end - -local function loop() - local ok,err,msg - - if connected then - ok,err,msg = mqtt:loop(0) - if not ok then - errLog("MQTT:\t "..msg.."\n") - if onError then onError(1) end - connected = false - end - else - ok,err,msg = mqtt:loop(0) - if not ok then - if onError then onError(2) end - errLog("MQTT:\t "..msg.."\n") - mqtt:connect(broker,1883,5) - errLog("MQTT:\t Reconnect".."\n") - end - end -end - -local function subscribe(msg) - mqtt:subscribe(msg) -end - -mqtt.ON_CONNECT = function() - connected = true - if onConnect then onConnect() end -end - -mqtt.ON_MESSAGE = function(mid, topic, payload) - if onMessage then onMessage(mid, topic, payload) end -end - -local function begin(hostname) - broker = hostname - mqtt:connect(broker,1883,5) -end - -return { - begin = begin; - loop = loop; - publish = publish; - subscribe = subscribe; - onConnect = function(callback) onConnect = callback end; - onMessage = function(callback) onMessage = callback end; - onError = function(callback) onError = callback end; -} \ No newline at end of file diff --git a/3B/archive/root_9.bak/panel.lua b/3B/archive/root_9.bak/panel.lua deleted file mode 100644 index f5b509c..0000000 --- a/3B/archive/root_9.bak/panel.lua +++ /dev/null @@ -1,27 +0,0 @@ ------------------ Configuration LUA ----------------------- --- --- Text in "" --- Zahlen ohne "" --- Komentare mit -- --- --- Achtung Gross/Kleinschreibung ist wichtig ! --- ------------------------------------------------------------ - -panel.Debug = {idx=2,alt={"on","off"},inf="Debug Ausgabe aktivieren, MQTT:-t /debug -m off -m on | off"}; -panel.LabelButtonSend = {"Send",inf="Beschriftung Panel Send, MQTT: -t /label/button/send -m 'Send'"}; -panel.LabelButton_1 = {"Sensor Analog",inf="Beschriftung Panel Button 1, MQTT: -t /label/button/0 -m 'Text'"}; -panel.LabelButton_2 = {"Endpoint Logic",inf="Beschriftung Panel Button 2, MQTT: -t /label/button/1 -m 'Text'"}; -panel.LabelButton_3 = {"Kanal 3",inf="Beschriftung Panel Button 3, MQTT: -t /label/button/2 -m 'Text'"}; -panel.LabelButton_4 = {"Kanal 4",inf="Beschriftung Panel Button 4, MQTT: -t /label/button/3 -m 'Text'"}; -panel.LabelHeader = {"AL01 Datalogger",inf="Beschriftung Ueberschrift, MQTT: -t /label/header -m 'Text'"}; -panel.OptionsSamples = {100.000000,inf="Samples, MQTT: /options/samples -m 100"}; -panel.OptionsXaxisMax = {100.000000,inf="Maximum X-Achse, MQTT: -t /options/xaxis/max -m 100"}; -panel.OptionsXaxisMin = {0.000000,inf="Minimum X-Achse, MQTT: -t /options/xaxis/min -m 0"}; -panel.OptionsXaxis_1_Max = {15.000000,inf="Maximum Y-Achse 1, MQTT: -t /options/yaxis/0/max -m 15"}; -panel.OptionsXaxis_2_Max = {30.000000,inf="Maximum Y-Achse 2, MQTT: -t /options/yaxis/1/max -m 30"}; -panel.OptionsXaxis_2_Min = {0.000000,inf="Minimum Y-Achse 2, MQTT: -t /options/yaxis/1/min -m 0"}; -panel.OptionsYaxis_1_Min = {0.000000,inf="Minimum Y-Achse 1, MQTT: -t /options/yaxis/0/min -m 0"}; -panel.TextSendMessage = {"ping",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/message -m 'ping'"}; -panel.TextSendTopic = {"/ctrl/cmd",inf="Beschriftung Panel Button 1, MQTT: -t /text/send/topic -m 'ctrl/cmd'"}; - diff --git a/3B/archive/root_9.bak/run.lua b/3B/archive/root_9.bak/run.lua deleted file mode 100644 index 4940c44..0000000 --- a/3B/archive/root_9.bak/run.lua +++ /dev/null @@ -1,308 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" - -periphery = require('periphery') -Serial = periphery.Serial - -evdev = require "evdev" -touch = evdev.Device("/dev/input/event0") - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_HOME = 0x0C - -COMMAND_PASSWORD = 0x7F - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_ON = 0x0F -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -touchY = 0 -touchX = 0 - -LOGING = 1 --- 1 2 3 4 5 6 7 8 9 10 --- 11 12 13 14 15 16 17 18 19 20 -controlLabels = {"<-" ,"<<" ,"^" ,"^^" ,"vv" , "v" ,">>" ,"->" ,"Help" ,"Del", - "Done" ," " ,"Insert","," ,"Space" , " " ,"=" ,"Remove","Enter" ," "} -controlFonts = {"C" ,"C" ,"C" ,"C" ,"C" , "C" ,"C" ,"C" ,"T" ,"C", - "C" ,"T" ,"T" ,"C" ,"C" , "T" ,"C" ,"T" ,"C" ,"T"} -controlPos = {{02,06}, {01,18}, {02,02}, {01,30}, {01,22}, {18,02}, {01,34}, {02,44}, {02,10}, {02,50}, - {10,01}, {10,01}, {06,01}, {10,50}, {14,50}, {14,50}, {06,50}, {15,02}, {18,50}, {18,50}} - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -function clearAndHome(void) - for i=1, 6, 1 do - for j=1, 40, 1 do - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setText(" ") - line[i][j]:draw() - end - end - posX = 0 - posY = 0 -end - - -function doRead() - local loops = 0 - while loops < 30 do - loops = loops + 1 - if serial:poll(1) then - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - elseif cmd:byte() == COMMAND_HOME then - clearAndHome(); - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CURSOR_ON then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() == COMMAND_PASSWORD then - c = '*' - end - - if c:byte() >= 0x20 and c:byte() < 0x7F then - --print(c.." at "..posX.." "..posY.."\n") - local label = line[posY+1][posX+1] - label:setText(c) - if blinkFlag then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - posX = posX + 1 - checkX(posX) - label:draw() - else - print("Unknown: "..c:byte().."\n"); - end - end - end - end -end - -function doTouch() - local x = 0; - local y = 0; - if touch:avail() > 0 then - local timestamp, eventType, eventCode, value = touch:read() - if eventType == evdev.EV_ABS then - if eventCode == 53 then - touchX = value - elseif eventCode == 54 then - touchY = value - end - end - if eventType == 1 then - if eventCode == 330 then - if touchY > 0 and touchY < 79 then - idx = math.floor(touchX/80)+1 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl1: ",y,x,idx) - end - if touchY > 400 and touchY < 479 then - idx = math.floor(touchX/80)+11 - x = controlPos[idx][2] - y = controlPos[idx][1] - print("Ctrl2: ",y,x,idx) - end - if touchY > 320 and touchY < 399 then - x = 8 + math.floor(touchX/80)*4 - y = 19 - print("Numbs: ",y,x) - end - if touchY > 80 and touchY < 319 then - x = math.floor((touchY-80)/240*10+6) - y = math.floor(touchX/720*36+7) - print("Lines: ",y,x) - end - if x > 0 and y > 0 then - if value == 1 then - print("down") - serial:write(string.char(0x5F,y,x)) - serial:flush() - --serial:write(string.char(0x5F,x,y)) - else - print("up") - serial:write(string.char(0x6F,y,x)) - serial:flush() - end - end - end - end - end -end - -function setup() - serial = Serial{device="/dev/ttyAMA0", baudrate=9600, databits=7, parity="odd", stopbits=1} - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - monoChar = HMI.Font("/root/font/mono.ttf",34) - monoText = HMI.Font("/root/font/mono.ttf",20) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4," "); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(monoChar) - line[i][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),34,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.white); - number[i]:setFont(monoChar) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - local idx = i+j*10 - if idx ~= 12 and idx ~= 16 and idx ~= 20 then - if idx == 11 or idx == 15 or idx == 19 then - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,40,7,i-1); - else - control[idx] = HMI.Cell(layout,1+20*(i-1),j*41,20,7,i-1); - end - if controlLabels[idx] then - control[idx]:setText(controlLabels[idx]) - end - control[idx]:setTextColor(HMI.Color.black); - control[idx]:setBackground(HMI.Color.grey); - if controlFonts[idx] == 'T' then - control[idx]:setFont(monoText) - else - control[i+j*10]:setFont(monoChar) - end - end - end - end - - cnt = 0; -end - -function loop() - doRead() - doTouch() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_9.bak/run_line.lua b/3B/archive/root_9.bak/run_line.lua deleted file mode 100644 index 652dd1c..0000000 --- a/3B/archive/root_9.bak/run_line.lua +++ /dev/null @@ -1,114 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+1) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData then - line[posY+1]:setText(strData); - line[posY+1]:draw() - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i]:setTextColor(HMI.Color.green); - line[i]:setBackground(HMI.Color.black); - line[i]:setFont(mono) - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_9.bak/run_logi.lua b/3B/archive/root_9.bak/run_logi.lua deleted file mode 100644 index f7b41e0..0000000 --- a/3B/archive/root_9.bak/run_logi.lua +++ /dev/null @@ -1,289 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -panel = {} -require "panel" - -socket = require('socket') -PLC = require('vwago') -Scheduler = require('scheduler') ---I2CClass = require('periphery').I2C -I2CDevice = nil; -MQTT = require("mqtt") - -daq = {}; - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg) - print(msg); -end - -local function pubPanelConfig() - MQTT.publish(mqttRoot.."/panel/label/button/send",panel.LabelButtonSend[1]) - MQTT.publish(mqttRoot.."/panel/label/button/0",panel.LabelButton_1[1]) - MQTT.publish(mqttRoot.."/panel/label/button/1",panel.LabelButton_2[1]) - MQTT.publish(mqttRoot.."/panel/label/button/2",panel.LabelButton_3[1]) - MQTT.publish(mqttRoot.."/panel/label/button/3",panel.LabelButton_4[1]) - MQTT.publish(mqttRoot.."/panel/label/header",panel.LabelHeader[1]) - MQTT.publish(mqttRoot.."/panel/options/samples",panel.OptionsSamples[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/max",panel.OptionsXaxisMax[1]) - MQTT.publish(mqttRoot.."/panel/options/xaxis/min",panel.OptionsXaxisMin[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/max",panel.OptionsXaxis_1_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/max",panel.OptionsXaxis_2_Max[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/1/min",panel.OptionsXaxis_2_Min[1]) - MQTT.publish(mqttRoot.."/panel/options/yaxis/0/min",panel.OptionsYaxis_1_Min[1]) - MQTT.publish(mqttRoot.."/panel/text/send/message", panel.TextSendMessage[1]) - MQTT.publish(mqttRoot.."/panel/text/send/topic",panel.TextSendTopic[1]) - MQTT.publish(mqttRoot.."/panel/debug",panel.Debug["alt"][panel.Debug["idx"]]) -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.publish(mqttRoot.."/info", "PIALU") - MQTT.subscribe(mqttRoot.."/ctrl/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message "..topic, payload) - - subTopic = string.match(topic,mqttRoot.."/ctrl/(%w+)") - if subTopic then - if subTopic == "cmd" then - logPrint("MQTT:\t Command"); - analogChannel = string.match(topic,mqttRoot.."/ctrl/cmd/analog/(%w)") - if analogChannel then - - if analogChannel == "0" then - logPrint("MQTT:\t Command Analog Channel "..analogChannel.." "..payload); - if payload == "on" then - channel_0 = true - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - else - channel_0 = false - MQTT.publish(mqttRoot.."/status/analog/0", "off",true) - end - elseif analogChannel == "1" then - if payload == "on" then - channel_1 = true - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - else - channel_1 = false - MQTT.publish(mqttRoot.."/status/analog/1", "off",true) - end - elseif analogChannel == "2" then - if payload == "on" then - channel_2 = true - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - else - channel_2 = false - MQTT.publish(mqttRoot.."/status/analog/2", "off",true) - end - elseif analogChannel == "3" then - if payload == "on" then - channel_3 = true - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) - else - channel_3 = false - MQTT.publish(mqttRoot.."/status/analog/3", "off",true) - end - end - elseif string.match(topic,mqttRoot.."/ctrl/cmd/panel/config") then - if string.match(payload,"publish") then - pubPanelConfig() - elseif string.match(payload,"apply") then - panel = {} - dofile("panel.lua") - end - end - end - end - end -) - - -local function getInt32(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 4) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8) + bit32.lshift(bytes[offset+3],16) + bit32.lshift(bytes[offset+4],24); - if ( num > 0x80000000 ) then - return num - 0x100000000; - else - return num; - end - end - - return 9999999999; -end - -local function getInt16(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 2) then - num = bytes[offset+1] + bit32.lshift(bytes[offset+2],8); - end - - if ( num > 0x8000 ) then - return num - 0x10000; - else - return num; - end - - return 9999999999; -end - -local function getUint8(bytes,offset) - if (offset >= 0) and ((#bytes-offset) >= 1) then - return bytes[offset+1]; - end - - return 999999999; -end ---[[ -local function i2cBegin() - I2CDevice = I2CClass("/dev/i2c-1") -end - -local function i2cRecvMsg() - local msg = {{ - 0x00, -- uint8_t hartbeat; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - 0x00, 0x00, 0x00, 0x00, -- int32_t data_32; - flags = I2CClass.I2C_M_RD - }} - I2CDevice:transfer(6, msg) --- print(table.unpack(msg[1])); - return msg[1] -end - -local function i2cSendMsg(cmd) - local msg = {{cmd, 0x00, 0x00, 0x00, 0x00, flags = 0}} - I2CDevice:transfer(4, msg) -end ---]] -local function recv() ---[[ - daqData = i2cRecvMsg(); --- print(table.unpack(daqData)); - daq.hartbeat = getUint8(daqData,0); - daq.sum0 = getInt32(daqData,1); - daq.sum1 = getInt32(daqData,5); - daq.sum2 = getInt32(daqData,9); - daq.sum3 = getInt32(daqData,13); ---]] - daq.hartbeat = 123; - daq.sum0 = 3; - daq.sum1 = 1.7; - daq.sum2 = 9; - daq.sum3 = 5.5; -end - -function setup() - mqttBroker = app.mqttBroker[1] - mqttRoot = app.mqttRoot[1] - - instance = HMI.App.instance; - layout = HMI.Layout(instance,32,24); - - label = HMI.Label(layout,0,0,32,3,"Plot"); - label:setTextColor(HMI.Color.white); - label:setBackground(HMI.Color.blue); - - chart = HMI.Timechart(layout,0,4,32,16) - chart:setBaseline(0) - chart:setValuePerDivison(2) - chart:setSamplesPerDivison(20) - chart:setSamplesFormat("%d Samples/Div, Samplerate 0.5s <=> 10 Sekunden/Div") - - txt0 = HMI.Label(layout, 1,20,6,2,"Ch 0"); - txt0:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt1 = HMI.Label(layout,17,20,6,2,"Ch 1"); - txt1:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt2 = HMI.Label(layout, 1,22,6,2,"Ch 2"); - txt2:getTextObject():setAlign(HMI.ALIGN_LEFT); - txt3 = HMI.Label(layout,17,22,6,2,"Ch 3"); - txt3:getTextObject():setAlign(HMI.ALIGN_LEFT); - - out0 = HMI.Output(layout, 7,20,6,2,"0000"); - out1 = HMI.Output(layout,23,20,6,2,"0000"); - out2 = HMI.Output(layout, 7,22,6,2,"0000"); - out3 = HMI.Output(layout,23,22,6,2,"0000"); - - updateTimer = Scheduler.Timer(500) - --- i2cBegin() - - if mqttBroker then - errLog("MQTT:\t Begin\n"); - MQTT.begin(mqttBroker) - end - - MQTT.loop() - - channel_0 = true; - channel_1 = true; - channel_2 = true; - channel_3 = true; - - MQTT.publish(mqttRoot.."/status/analog/0", "on",true) - MQTT.publish(mqttRoot.."/status/analog/1", "on",true) - MQTT.publish(mqttRoot.."/status/analog/2", "on",true) - MQTT.publish(mqttRoot.."/status/analog/3", "on",true) -end - -function loop() - MQTT.loop() - - if updateTimer.elapsed() then - updateTimer.restart() - recv() - - val0 = daq.sum0*0.0000707750682632 - val1 = daq.sum1*0.0000707750682632 - val2 = daq.sum2*0.0000208350713273 - val3 = daq.sum3*0.0000208350713273 - - out0:setText(string.format("%5.2f",val0)) - out1:setText(string.format("%5.2f",val1)) - out2:setText(string.format("%5.2f",val2)) - out3:setText(string.format("%5.2f",val3)) - chart:plot(daq.sum0*0.0000707750682632) - --chart:plot(daq.sum1*0.0000707750682632) - --chart:plot(daq.sum2*0.0000208350713273) - --chart:plot(daq.sum3*0.0000208350713273) - - compound = "" - - if channel_0 then - MQTT.publish(mqttRoot.."/analog/0",val0) - compound = compound..",0:"..val0 - end - if channel_1 then - MQTT.publish(mqttRoot.."/analog/1",val1) - compound = compound..",1:"..val1 - end - if channel_2 then - MQTT.publish(mqttRoot.."/analog/2",val2) - compound = compound..",2:"..val2 - end - if channel_3 then - MQTT.publish(mqttRoot.."/analog/3",val3) - compound = compound..",3:"..val3 - end - all = string.sub(compound,2) - if string.len(all) > 0 then - MQTT.publish(mqttRoot.."/analog/all",all) - end - end -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_9.bak/run_mqtt.lua b/3B/archive/root_9.bak/run_mqtt.lua deleted file mode 100644 index cf72dd6..0000000 --- a/3B/archive/root_9.bak/run_mqtt.lua +++ /dev/null @@ -1,130 +0,0 @@ --- LUA default run file - --- LUA default run file - -require "env" -MQTT = require("mqtt") -Scheduler = require('scheduler') - -LOGING = 1 - -local function errLog(msg) - io.stderr:write(msg) -end - -function logPrint(msg,aux) - if ( LOGING ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -function dbgPrint(msg,aux) - if ( DEBUG ) then - if aux then - print(msg.." , "..aux) - else - print(msg); - end - end -end - -MQTT.onConnect ( - function() - errLog("MQTT:\t Connect\n"); - MQTT.subscribe("+/#") - end -) - -MQTT.onMessage ( - function(mid, topic, payload) - logPrint("MQTT:\t Message <"..topic..">", payload) - --posY,posX,strData,attrData = string.match(payload,"(%d+)|(%d+)|([^|])|([^|])") - posY,posX,rawData = string.match(payload,"(%d+)|(%d+)|(.+)") - strData=string.sub(rawData,1,string.len(rawData)/2) - attrData=string.sub(rawData,string.len(rawData)/2+2) - print(posY.."|"..posX.."|"..strData.."|"..attrData.."\n") - if posY and posX and strData and attrData then - local len = string.len(strData) - for j=1, len, 1 do - local label = line[posY+1][posX+j] - if attrData:sub(j,j) == 'b' then - label:setTextColor(HMI.Color.black); - label:setBackground(HMI.Color.green); - else - label:setTextColor(HMI.Color.green); - label:setBackground(HMI.Color.black); - end - label:setText(strData:sub(j,j)) - label:draw() - end - end - end -) - -function setup() - - if app.mqttBroker then - MQTT.begin(app.mqttBroker[1]) - end - MQTT.loop() - - instance = HMI.App.instance; - layout = HMI.Layout(instance,200,48); - - mono = HMI.Font("/root/font/mono.ttf",34) - - line = {} - for i=1, 6, 1 do - line[i] = {} - for j=1, 40, 1 do - line[i][j] = HMI.Label(layout,5*(j-1),8+4*(i-1),5,4,j%10); --- line[i] = HMI.Label(layout,0,8+4*(i-1),200,4,"1234567890123456789012345678901234567890"); - line[i][j]:setTextColor(HMI.Color.green); - line[i][j]:setBackground(HMI.Color.black); - line[i][j]:setFont(mono) - line[1][j]:draw() - end - end - - number = {} - for i=1, 10, 1 do - number[i] = HMI.Cell(layout,1+20*(i-1),0,20,7,i-1); - number[i]:setTextColor(HMI.Color.black); - number[i]:setBackground(HMI.Color.grey); - number[i]:setFont(mono) - end - - control = {} - for j=0, 1, 1 do - for i=1, 10, 1 do - control[i+j] = HMI.Cell(layout,1+20*(i-1),34+j*7,20,7,i-1); - control[i+j]:setTextColor(HMI.Color.black); - control[i+j]:setBackground(HMI.Color.grey); - control[i+j]:setFont(mono) - end - end - - updateTimer = Scheduler.Timer(500) - cnt = 0; -end - -function loop() ---[[ - if updateTimer.elapsed() then - line[1]:setText(string.format("%5.2f",cnt)) - line[1]:draw() - cnt = cnt + 1 - updateTimer.restart() - end ---]] - MQTT.loop() -end - -io.stderr:write("Run LUA\n"); - --------------------------------------------------- - diff --git a/3B/archive/root_9.bak/scheduler.lua b/3B/archive/root_9.bak/scheduler.lua deleted file mode 100644 index 4d428cf..0000000 --- a/3B/archive/root_9.bak/scheduler.lua +++ /dev/null @@ -1,50 +0,0 @@ -local scheduler = {} - -socket = require('socket') - -function scheduler.Timer(init) - -- the new instance - - local self = { - -- public fields go in the instance table - interval = init - } - - local function millis() - return socket.gettime()*1000 - end - - -- private fields are implemented using locals - -- they are faster than table access, and are truly private, - -- so the code that uses your class can't get them - - local _timestamp = millis() - local _running = true - - function self.elapsed() - if _running and (millis() - _timestamp ) >= self.interval then - _running = false - return true - else - return false - end - end - - function self.running() - return (millis() - _timestamp ) < self.interval - end - - function self.restart() - _timestamp = millis() - _running = true - end - - function self.count() - return millis() - timestamp - end - - -- return the instance - return self -end - -return scheduler diff --git a/3B/archive/root_9.bak/secs.lua b/3B/archive/root_9.bak/secs.lua deleted file mode 100644 index 5292353..0000000 --- a/3B/archive/root_9.bak/secs.lua +++ /dev/null @@ -1,599 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- -periphery = require('periphery') - -Serial = periphery.Serial -Scheduler = require('scheduler') - -struct = require('struct') - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local T1 = 300 -local T2 = 1000 -local T3 = 3000 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local serial -local host = false -local connected = false -local pending = false -local transaction_id = 1 - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - - parseData(msg,buf,11,100); - - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) --- io.stderr:write("packList type("..type(l)..")\n") - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secaId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) - pending = true - transactionTimer.restart() - - local h = {} - - h.secsId = 0; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -local function SxF0(h) - io.stderr:write("SxF0\n----\n") - - return { - secondaryHeader(h,h.s_stream,0) - } -end - -local function S1F1() - io.stderr:write("S1F1\n----\n") - - return { - primaryHeader(1,1) - } -end - -local function S1F2(h) - io.stderr:write("S1F2\n----\n") - - if host then - return { - secondaryHeader(h,1,2), - packList( {} ) - } - else - return { - secondaryHeader(h,1,2), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } - end -end - -local function S1F13() - io.stderr:write("S1F13\n----\n") - - if host then - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - primaryHeader(1,13), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S1F14(h) - io.stderr:write("S1F14\n----\n") - - if host then - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( {} ) - } ) - } - else - return { - secondaryHeader(h,1,14), - packList( { - packBinary(0), - packList( { - packString(MDLN), - packString(SOFTREV) - } ) - } ) - } - end -end - -local function S2F41(ppid,mid1,mid2,mid3) - io.stderr:write("S2F41("..ppid..","..mid1..","..mid2..","..mid3..")\n----\n") - - if host then - return { - primaryHeader(2,41), - packList( { - packString("START"), - packList( { - packList( { - packString("PPID"), - packString(ppid) - } ), - packList( { - packString("MID1"), - packString(mid1) - } ), - packList( { - packString("MID2"), - packString(mid2) - } ), - packList( { - packString("MID3"), - packString(mid3) - } ) - } ) - } ) - } - else - return {} - end -end - -local function S2F42(h) - io.stderr:write("S2F42\n----\n") - - return { - secondaryHeader(h,2,42), - packList( { - packBinary(4), - packList({}) -- empty list - } ) - } -end - -local function S6F12(h) - io.stderr:write("S6F12\n----\n") - - if host then - - return { - secondaryHeader(h,6,12), - packBinary(0) - } - else - secondaryHeader(h,h.secsStream,0) - end -end - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function sendMsg(msg) - - local buf = table.concat(msg); - --- hexDumpString(buf) - - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(chksum / 256)) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I: NAK Received\n") - end - else - io.stderr:write("SECS I: AKN Timeout\n") - end - end - else - io.stderr:write("SECS I: EOT Timeout\n") - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("receiveMsg\n----------\ncount: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - --- TODO checksum error handling - --- hexDumpString(buf); - - serial:write(ASCII_ACK) - - msg = parseMsg(buf) --- dumpMsg(msg) - - return msg - else - io.stderr:write("SECS I: Countbyte Timeout\n") - return {} - end -end - -local function poll() - - local request = {} - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - - request = receiveMsg() - - -------------------------------------------------------------------- - - if not request.header.wait then - pending = false; - end - - msgSignature(request) - - if isSF(request,1,1) then - sendMsg(S1F2(request.header)) - SECS.onPrimary(1,1,"are you there") - elseif isSF(request,1,2) then - SECS.onSecondary(1,2,"are you there akn") - elseif isSF(request,1,13) then - sendMsg(S1F14(request.header)) - connected = true; - SECS.onPrimary(1,13,"establish communication request") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,1,14) then - connected = true; - SECS.onSecondary(1,14,"establish communication request akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - SECS.onProcessMsg(msg) - sendMsg(S2F42(request.header)) - SECS.onPrimary(2,41,"host command send") - elseif isSF(request,2,42) then - SECS.onSecondary(2,42,"host command send akn") - elseif isSF(request,6,11) then - SECS.onProcessMsg(msg) - sendMsg(S6F12(request.header)) - SECS.onPrimary(6,11,"event report send") - elseif isSF(request,6,12) then - -- - SECS.onSecondary(6,12,"event report send akn") - else - if not isSxF0(request) then - sendMsg(SxF0(request.header)) - SECS.onPrimary(0,0,"abort transaction akn") - end - end - - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write("loop poll:"..string.byte(c).."\n") - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("loop poll: Transaction timeout\n") - pending = false; - end - end - - io.stderr:flush(); - -end - -local function setHost(mode) - host = mode -end - -local function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature= msgSignature; - msgData = msgData; - - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isPending = function() return pending end; - - poll = poll; - - sendS1F13 = function() sendMsg(S1F13()) end; - sendS1F1 = function() sendMsg(S1F1()) end; - sendS2F41 = function(a1,a2,a3,a4) sendMsg(S2F41(a1,a2,a3,a4)) end; -} diff --git a/3B/archive/root_9.bak/secs_i.lua b/3B/archive/root_9.bak/secs_i.lua deleted file mode 100644 index 4733714..0000000 --- a/3B/archive/root_9.bak/secs_i.lua +++ /dev/null @@ -1,184 +0,0 @@ -periphery = require('periphery') - -Serial = periphery.Serial - -Scheduler = require('scheduler') - -local T1 = 100 --300 -local T2 = 2000 --1000 -local T3 = 5000 --3000 - -local ASCII_EOT = "\x04" -- end of transmission -local ASCII_ENQ = "\x05" -- enquiary -local ASCII_ACK = "\x06" -- acknowledge -local ASCII_NAK = "\x15" -- negative acknowledge - -local pending = false -local reading = false -local writing = false - -local serial - -local onProcessRequest; - ------------------------------------------------------------------------ -local function hexDumpString(buf) - if buf then - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); - end -end ------------------------------------------------------------------------ - -function begin(device, baud) - serial = Serial(device,baud) - transactionTimer = Scheduler.Timer(T3) -end - -local function discardInput() - hexDumpString(buf); - io.stderr:write("SECS I:\t Discard input: ") - while serial:poll(100) do - c = serial:read(1) - io.stderr:write(string.format('%02X ',c:byte(1))); - end - io.stderr:write("\n") -end - -local function sendMsg(buf) - --- hexDumpString(buf) - - writing = true - serial:write(ASCII_ENQ) - - if serial:poll(T1) then - c = serial:read(1) - - if c == ASCII_EOT then - serial:write(string.char(#buf)) - - local chksum = 0 -- 0 normal, 1 force error - - for i=1, #buf do - serial:write(string.char(buf:byte(i))) - chksum = chksum + buf:byte(i); --- io.stderr:write(string.format('%02X ',buf:byte(i))); - end - - serial:write(string.char(math.floor(chksum / 256))) - serial:write(string.char(chksum % 256)) - - if serial:poll(T1) then - c = serial:read(1) - if not (c == ASCII_ACK) then - io.stderr:write("SECS I:\t NAK Received\n") - --discardInput() - end - else - io.stderr:write("SECS I:\t AKN Timeout\n") - discardInput() - end - writing = false - end - else - io.stderr:write("SECS I:\t EOT Timeout\n") - discardInput() - writing = false - end - -end - -local function receiveMsg() - serial:write(ASCII_EOT) - - reading = true - if serial:poll(T1) then - local cnt = string.byte(serial:read(1)) - io.stderr:write("SECS I:\t receiveMsg count: "..cnt.."\n") - - local buf = serial:read(cnt+2,10*T1) - - local chksum = 0 -- 0 normal, 1 force error - for i=1, #buf-2 do - chksum = chksum + buf:byte(i) - end - - local msgChksum = buf:byte(#buf-1)*256 + buf:byte(#buf) - - if msgChksum == chksum then - serial:write(ASCII_ACK) - return buf - else - io.stderr:write("SECS I:\t Checksum Error\n") - hexDumpString(buf) - serial:write(ASCII_NAK) - discardInput() - --io.stderr:write(string.format("SECS I:\t Checksum: %04X %04X\n",chksum,msgChksum)) - io.stderr:write(string.format("SECS I:\t Bytes: %d Checksum: %04X %04X\n",#buf,chksum,msgChksum)) - return "" - end - reading = false - else - io.stderr:write("SECS I:\t Countbyte Timeout\n") - discardInput() - reading = false - return "" - end -end - -local function poll() - - if ( serial:poll(T1) ) then - c = serial:read(1) --- io.stderr:write(string.format("C: %02X\n",c:byte())); - if c == ASCII_ENQ then - local buf=receiveMsg() - if #buf >= 11 then - onProcessRequest(buf) - else - io.stderr:write("SECS I:\t Poll error bytes: "..#buf.."\n") - discardInput(buf) - serial:write(ASCII_NAK) - end - elseif c == ASCII_NAK then - io.stderr:write("SECS I:\t Poll NAK received\n") - --discardInput() - pending = false - else - ---- TODO: Illegal byte, skip input send NAK ---- - io.stderr:write(string.format("SECS I:\t Poll error byte = %02X\n",string.byte(c))) - discardInput() - serial:write(ASCII_NAK) - pending = false - end - else - if pending and transactionTimer.elapsed() then - ---- TODO: Timeout, skip input send NAK ---- - io.stderr:write("SECS I:\t Poll transaction timeout\n") - discardInput(buf) - serial:write(ASCII_NAK) - pending = false; - end - end - - io.stderr:flush(); -end - -return { - begin = begin; - poll = poll; - sendMsg = sendMsg; - receiveMsg = receiveMsg; - isReading = function() return reading end; - isWriting = function() return writing end; - isPending = function() return pending end; - onProcessRequest = function(cb) onProcessRequest = cb end; - startTransaction = function() transactionTimer.restart(); pending = true end; - stopTransaction = function() pending = false end; -} \ No newline at end of file diff --git a/3B/archive/root_9.bak/secs_ii.lua b/3B/archive/root_9.bak/secs_ii.lua deleted file mode 100644 index 31766fe..0000000 --- a/3B/archive/root_9.bak/secs_ii.lua +++ /dev/null @@ -1,633 +0,0 @@ ----------------------------- SECS I / SECS II ---------------------------------- - -SECS_IO = require('secs_i') -struct = require('struct') - -local SF_LIST = 0x00 -local SF_NITEMS = 0x1F -local SF_BINARY = 0x20 -local SF_BOOLEAN = 0x24 -local SF_ASCII = 0x40 -local SF_JIS_8 = 0x44 -local SF_INT8 = 0x60 -local SF_INT1 = 0x64 -local SF_INT2 = 0x68 -local SF_INT4 = 0x70 -local SF_FLOAT8 = 0x80 -local SF_FLOAT4 = 0x90 -local SF_UINT8 = 0xA0 -local SF_UINT1 = 0xA4 -local SF_UINT2 = 0xA8 -local SF_UINT4 = 0xB0 - -local MDLN = "DS-80B" -local SOFTREV = "MI370E" - -local secsId = 0x1234 -local host = false -local connected = false - -local transaction_id = 1 - -local eq_online = 3 -- 1: online remote, 2: online local, 3: offline -local eq_status = 2 -- 1: not ready, 2: ready, 3: busy, 4: process cmpl, 5: pause, 6: complete - -local onSendEventMsg = nil -local onPrimaryMsg = nil -local onSecondaryMsg = nil -local onProcessMsg = nil - -local msgQueue = {} - --------------------------------------------------------------------------------------------- - -local function hexDumpString(buf) - for i=1,math.ceil(#buf/16) * 16 do - if (i-1) % 16 == 0 then io.stderr:write(string.format('%06X ', i-1)) end - io.stderr:write( i > #buf and ' ' or string.format('%02X ', buf:byte(i)) ) - if i % 8 == 0 then io.stderr:write(' ') end - if i % 16 == 0 then io.stderr:write( buf:sub(i-16+1, i):gsub('[^%g]','.'), '\n' ) end - end - io.stderr:write("\n"); -end - -local function dumpData(items) - if items.list then - io.stderr:write(string.format("list: %d\n",#items)) - end - for i=1, #items do - if not items.list then - if i == 1 then - io.stderr:write(string.format("type: "..items[1].."\n")); - io.stderr:write(string.format("value: "..items[2].."\n")); - end - else - dumpData(items[i]) - end - end -end - -local function dumpMsg(msg) - io.stderr:write("dumpMsg\n-------\n") - io.stderr:write(string.format("id: %02X\n", msg.header.secsId)) - io.stderr:write(string.format("reverse:%s\n", msg.header.secsReverse)) - io.stderr:write(string.format("stream: %02X\n", msg.header.secsStream)) - io.stderr:write(string.format("func: %02X\n", msg.header.secsFunction)) - io.stderr:write(string.format("blkn: %02X\n", msg.header.secsBlock)) - io.stderr:write(string.format("sys1: %04X\n", msg.header.secsSys1)) - io.stderr:write(string.format("sys2: %04X\n", msg.header.secsSys2)) - if #msg > 0 then - dumpData(msg[1]) - end - io.stderr:write("\n") -end - -local function appendData(values,types,items) - - for i=1, #items do - if items.list then - appendData(values,types,items[i]) - else - if i == 1 then - table.insert(types,items[i]) - else - table.insert(values,items[i]) - end - end - end - -end - -local function msgData(msg) - local values = {} - local types = {} - - if #msg > 0 then - appendData(values,types,msg[1]) - end - - return values,types; -end - -local function dataSignature(items) - local sig = "" - - if items.list then - sig = string.format("L%d",#items) - end - - for i=1, #items do - if items.list then - sig = sig..dataSignature(items[i]) - else - if i == 1 then - sig = sig..string.format(items[i]); - end - end - end - - return sig -end - -local function msgSignature(msg) - local sig = "" - - if #msg > 0 then - sig = dataSignature(msg[1]) - end - - return sig -end ---[[ -local function parseData(items,buf,idx,cnt) - local len ; - local code; - --- io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - len = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); --- io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,len)) - len = buf:byte(idx+1); --- io.stderr:write(string.format("DATA LEN: %02X\n",len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + 2; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + 2; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + 4; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + 8; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + 1; --- elseif TODO more formats - end - end --- io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end ---]] - -local function parseData(items,buf,idx,cnt) - local len ; - local code; - - io.stderr:write(string.format("IN: %d\n",idx)) - while (idx < #buf - 2) and (cnt>0) do - io.stderr:write(string.format("IDX: %d\n",idx)) - num = bit32.band(buf:byte(idx),0x03); - code = bit32.band(buf:byte(idx),0xFC); - io.stderr:write(string.format("CODE: %02X LEN: %02X\n",code,num)) - len = buf:byte(idx+1); - io.stderr:write(string.format("DATA LEN: %02X %03d\n",len,len)) - cnt = cnt - 1; - if code == SF_LIST then - local list = {} - list.list = true - idx = parseData(list,buf,idx+2,len) - table.insert(items,list) - elseif code == SF_ASCII then - table.insert(items,{"A",buf:sub(idx+2,idx+1+len)}) - idx = idx + len + num + 1; - elseif code == SF_INT1 then - table.insert(items,{"I1",struct.unpack(">b",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT2 then - table.insert(items,{"I2",struct.unpack(">h",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"I4",struct.unpack(">i",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT8 then - table.insert(items,{"I8",struct.unpack(">l",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT1 then - table.insert(items,{"U1",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT2 then - table.insert(items,{"U2",struct.unpack(">H",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_INT4 then - table.insert(items,{"U4",struct.unpack(">I",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_UINT8 then - table.insert(items,{"U8",struct.unpack(">L",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BOOLEAN then - table.insert(items,{"BOOL",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; - elseif code == SF_BINARY then - table.insert(items,{"B",struct.unpack(">B",buf:sub(idx+2))}) - idx = idx + len + num + 1; --- elseif TODO more formats - end - end - io.stderr:write(string.format("OUT: %d\n",idx)) - return idx; -end - -local function unpackHeader(b) - local h = {} - h.secsId, h.secsStream, h.secsFunction, h.secsBlock, h.secsSys1, h.secsSys2 = struct.unpack('>HBBHHH',b) - h.secsReverse = h.secsId > 0x8000; - h.secsId = bit32.band(h.secsId,0x7FFF); - h.secsWait = h.secsStream > 0x80; - h.secsStream = bit32.band(h.secsStream,0x7F); - h.secsEnd = h.secsBlock > 0x8000; - h.secsBlock = bit32.band(h.secsBlock,0x7FFF); - - return h; -end - -local function parseMsg(buf) - local msg = {}; - local len = 0; - local code = 0; - - msg.header = unpackHeader(buf); - msg.list = false; - parseData(msg,buf,11,#buf); - return msg; -end - -local function packHeader(h) - return struct.pack('>HBBHHH', - ( h.secsReverse and bit32.bor(h.secsId, 0x8000) or h.secsId ), - ( h.secsWait and bit32.bor(h.secsStream, 0x80) or h.secsStream ), - h.secsFunction, - ( h.secsEnd and bit32.bor(h.secsBlock, 0x8000) or h.secsBlock), - h.secsSys1, - h.secsSys2 - ) -end - -local function packString(s) - return struct.pack('BB',SF_ASCII+1,#s)..s -end - -local function packBinary(b) - return struct.pack('BBB',SF_BINARY+1,1,b) -end - -local function packList(l) - return struct.pack('BB',SF_LIST+1,#l)..table.concat(l) -end - -local function secondaryHeader(h,s,f) - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- secondary Message SsFf - h.secsWait = false; -- no reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - return packHeader(h); -end - -local function primaryHeader(s,f) --- SECS_IO.startTransaction() - - local h = {} - - h.secsId = secsId; -- - h.secsReverse = not host -- false: host --> equipment - - h.secsStream = s; - h.secsFunction = f; -- primary Message SsFf - h.secsWait = true; -- reply - - h.secsBlock = 1; - h.secsEnd = true; -- last block - h.secsSys1 = 0 - h.secsSys2 = transaction_id; - - transaction_id = transaction_id + 1 - - return packHeader(h); -end - -function string.pop(s) - return string.sub(s,1,1),string.sub(s,2) -end - -function table.pop(t) - local i = t[1] - table.remove(t,1) - return i,t -end - -local function packData(sig,items) - local buf = "" - --- print("packData sig: ",sig) - while #sig > 0 do --- print("packData len1: ",#sig) - typ, sig = string.pop(sig) --- print("packData len2: ",#sig,typ,sig) - if typ == "L" then - len , sig = string.pop(sig) --- print("packData len3: ",#sig,len,sig) - buf = buf..struct.pack('BB',SF_LIST+1,len)..packData(sig,items) --- hexDumpString(buf) - return buf - elseif typ == "A" then - item, items = table.pop(items) - buf = buf..packString(item) - elseif typ == "B" then - item, items = table.pop(items) - buf = buf..packBinary(item) - end - end --- hexDumpString(buf) - return buf -end - -local function primaryMsg(s,f,sig,items) - return primaryHeader(s,f)..packData(sig,items) -end - -local function secondaryMsg(h,s,f,sig,items) - return secondaryHeader(h,s,f)..packData(sig,items) -end - -------------------------------------------------------- - -local function SxF0(h) - io.stderr:write("\nSECS II: SxF0\n----\n") - return secondaryHeader(h,h.secsStream,0) -end - -local function S1F1() - io.stderr:write("\nSECS II: S1F1\n----\n") - return primaryHeader(1,1) -end - -local function S1F2(h) - io.stderr:write("\nSECS II: S1F2\n----\n") - - if host then - return secondaryMsg(h,1,2,"L0",{}) - else - return secondaryMsg(h,1,2,"L2AA",{MDLN,SOFTREV}) - end -end - -local function S1F13() - io.stderr:write("\nSECS II: S1F13\n----\n") - - if host then - return primaryMsg(1,13,"L2BL0",{0}) - else - return primaryMsg(1,13,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S1F14(h) - io.stderr:write("\nSECS II: S1F14\n----\n") - - if host then - return secondaryMsg(h,1,14,"L2BL0",{0}) - else - return secondaryMsg(h,1,14,"L2BL2AA",{0,MDLN,SOFTREV}) - end -end - -local function S2F41(c) - - io.stderr:write("\nSECS II: S2F41("..c..")\n----\n") - if host then - return onCreateMsg(2,41,c) - else - return "" -- host only command - end - -end - -local function S2F42(h) - io.stderr:write("\nSECS II: S2F42\n----\n") - - return secondaryMsg(h,2,42,"L2BL0",{4}) -end - -local function S5F2(h) - io.stderr:write("\nSECS II: S5F2\n----\n") - - if host then - return secondaryMsg(h,5,2,"B",{0}) - end - -end - -local function S6F12(h) - io.stderr:write("\nSECS II: S6F12\n----\n") - - if host then - return secondaryMsg(h,6,12,"B",{0}) - else - return secondaryHeader(h,h.secsStream,0) - end - -end - -local function S6F11(e) - io.stderr:write("\nSECS II: S6F11("..e..")\n----\n") - - if not host then - return onCreateMsg(6,11,e) - else - return "" -- equipment only command - end -end - -------------------------------------------------------- - -local function isSF(msg,s,f) - return msg.header.secsStream == s and msg.header.secsFunction == f -end - -local function isSxF0(msg) - return msg.header.secsFunction == 0 -end - -local function isS5Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 5 -end - -local function isS9Fx(msg) - dumpMsg(msg) - return msg.header.secsStream == 9 -end - -SECS_IO.onProcessRequest ( - function(buf) - local request = parseMsg(buf) - io.stderr:write("SECS II: ID: ",request.header.secsId,"\n") - local s = request.header.secsStream - local f = request.header.secsFunction - io.stderr:write("SECS II: onProcessMsg ".."S"..s.."F"..f.."\n"); - - -------------------------------------------------------------------- - - if not request.header.wait then - SECS_IO.stopTransaction() - end - - local sig = msgSignature(request) - - if isSF(request,1,1) then - onPrimaryMsg(1,1,"are you there received") - SECS_IO.sendMsg(S1F2(request.header)) - elseif isSF(request,1,2) then - onSecondaryMsg(1,2,"are you there received akn") - elseif isSF(request,1,13) then - connected = true; - onPrimaryMsg(1,13,"establish communication request received") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - SECS_IO.sendMsg(S1F14(request.header)) - elseif isSF(request,1,14) then - connected = true; - onSecondaryMsg(1,14,"establish communication request received akn") - --io.stderr:write(string.format("CONNECTED %d\n",request[1][1][2])); - elseif isSF(request,2,41) then - --print("SECS II: Message ",#request) - onProcessMsg(request) - onPrimaryMsg(2,41,"host command received") - SECS_IO.sendMsg(S2F42(request.header)) - elseif isSF(request,2,42) then - onProcessMsg(request) - onSecondaryMsg(2,42,"host command received akn") - elseif isSF(request,6,11) then - onProcessMsg(request) - onPrimaryMsg(6,11,"event report received") - SECS_IO.sendMsg(S6F12(request.header)) - elseif isSF(request,6,12) then - onSecondaryMsg(6,12,"event report received akn") - elseif isS5Fx(request) then - onProcessMsg(request) - --hexDumpString(buf) - --io.stderr:write("SIG: "..sig.."\n") - onPrimaryMsg(5,request.header.secsFunction,"alarm received") - SECS_IO.sendMsg(S5F2(request.header)) - elseif isS9Fx(request) then - -- no secondary message - onProcessMsg(request) - onPrimaryMsg(9,request.header.secsFunction,"error received") - else - if not isSxF0(request) then - onPrimaryMsg(0,0,"abort transaction send") - SECS_IO.sendMsg(SxF0(request.header)) - end - end - end -) - -local function dequeMsg() - local m = msgQueue[1] - table.remove(msgQueue,1) - return m -end - -local function queueMsg(msg) - io.stderr:write("\n====\nSECS II: queueMsg\n====\n"); - table.insert(msgQueue,msg) -end - -local function poll() - if not SECS_IO.isPending() and #msgQueue > 0 then --- if not pending and #msgQueue > 0 then - io.stderr:write("\n====\nSECS II: dequeueMsg\n====\n"); - SECS_IO.startTransaction() - SECS_IO.sendMsg(dequeMsg()) - end - SECS_IO.poll() -end; - -local function setHost(mode) - host = mode -end - -local function setId(id) - secsId = id -end - -local function begin(device, baud) - SECS_IO.begin(device,baud) - io.stderr:write("begin\n") - SECS_IO.stopTransaction() -end - -return { - begin = begin; - sendMsg = sendMsg; - dumpMsg = dumpMsg; - msgSignature = msgSignature; - msgData = msgData; - ---------- DEBUG only ---------------- --- dataSignature = dataSignature; --- parseMsg = parseMsg; --- dumpData = dumpData; --- parseData = parseData; - --- packString = packString; --- packBinary = packBinary; --- packList = packList; --- packData = packData; --------------------------------------- - - primaryMsg = primaryMsg; - secondaryMsg = secondaryMsg; - - setId = setId; - setHost = setHost; - isHost = function() return host end; - - isConnected = function() return connected end; - isReading = function() return SECS_IO.isReading() end; - isWriting = function() return SECS_IO.isWriting() end; - isPending = function() return SECS_IO.isPending() end; - - poll = poll; - - sendS1F13 = function() queueMsg(S1F13()) end; - sendS1F1 = function() queueMsg(S1F1()) end; - sendS2F41 = function(c) queueMsg(S2F41(c)) end; - sendS6F11 = function(e) queueMsg(S6F11(e)) end; - - onCreateMsg = function(cb) onCreateMsg = cb end; - onPrimaryMsg = function(cb) onPrimaryMsg = cb end; - onSecondaryMsg = function(cb) onSecondaryMsg = cb end; - onProcessMsg = function(cb) onProcessMsg = cb end; -} diff --git a/3B/archive/root_9.bak/shm.lua b/3B/archive/root_9.bak/shm.lua deleted file mode 100644 index 3c77706..0000000 --- a/3B/archive/root_9.bak/shm.lua +++ /dev/null @@ -1,31 +0,0 @@ -PLC = require('vwago') - -plc = PLC.VWago("wago") - -function setup() - if ( plc ) then - print("OK") - end -end - -function loop() - if ( plc ) then - i = plc:getDouble(1) - plc:setDouble(0,i) - i = i + 1234 - if i > 2147483647 then - i = 0 - o = plc:getDouble(2) - plc:setDouble(2,o+1) - end - plc:setDouble(1,i) - plc:update() - print(i) - end -end - -setup() - -while 1 do - loop() -end \ No newline at end of file diff --git a/3B/archive/root_9.bak/st.lua b/3B/archive/root_9.bak/st.lua deleted file mode 100644 index e2526d1..0000000 --- a/3B/archive/root_9.bak/st.lua +++ /dev/null @@ -1,114 +0,0 @@ -periphery = require('periphery') -Serial = periphery.Serial - -serial = Serial("/dev/ttyAMA0",9600) - -COMMAND_POSITION = 0x19 -COMMAND_POSITION_X = 0x13 -COMMAND_POSITION_Y = 0x11 - -COMMAND_01H = 0x01 -COMMAND_03H = 0x03 - -COMMAND_CURSOR_OFF = 0x0E - -COMMAND_BLINK = 0x0B -COMMAND_UNBLINK = 0x0C - -COMMAND_CR = 0x0D -COMMAND_LF = 0x0A - -blinkFlag = false - -posX = 0 -posY = 0 - -function checkY(y) - if y < 0 then - y = 0 - end - if y > 5 then - y = 5 - end - posY = y - return y -end - -function checkX(x) - if x < 0 then - x = 39; - posY = posY - 1 - checkY(posY) - end - if x > 39 then - if posY == 5 then - x = 39; - else - x = 0; - posY = posY + 1 - checkY(posY); - end - end - posX = x - return x -end - -function gotoXY(x,y) - checkX(x); - checkY(y); -end - -function lineFeed(void) - posY = posY + 1 - gotoXY(posX, checkY(posY)); -end - -function carriageReturn(void) - gotoXY(0, posY); -end - -while (1) do - while serial:poll(100) do - local c = serial:read(1) - if c:byte() == COMMAND_POSITION then - local cmd = serial:read(1) - if cmd:byte() == COMMAND_POSITION_X then - local x = string.byte(serial:read(1)) - gotoXY(x,posY) - elseif cmd:byte() == COMMAND_POSITION_Y then - local y = string.byte(serial:read(1)) - gotoXY(posX,y) - end - elseif c:byte() == COMMAND_03H then - serial:read(1) - serial:read(1) - elseif c:byte() == COMMAND_BLINK then - blinkFlag = true - elseif c:byte() == COMMAND_UNBLINK then - blinkFlag = false - elseif c:byte() == COMMAND_CURSOR_OFF then - -- curs_set(0); - elseif c:byte() == COMMAND_CR then - carriageReturn() - elseif c:byte() == COMMAND_LF then - lineFeed() - else - if c:byte() >= 0x20 and c:byte() < 0x7F then - print(c.." at "..posX.." "..posY.."\n") - posX = posX + 1 - checkX(posX) - --[[ - if ( c >= 0x20 && c < 0x7F ) { - (c==buf_char[y_now][x_now])?(buf_chng[y_now][x_now]='n'):(buf_chng[y_now][x_now]='y'); - (BLINK_FLAG?(buf_args[y_now][x_now] = 'b'):( buf_args[y_now][x_now] = 'n')); - buf_char[y_now][x_now] = c; - checkX(++x_now); - --]] - else - print("Unknown: "..c:byte().."\n"); - end - end --- --- io.stderr:write(string.format('%02X ',c:byte(1))); - end -end \ No newline at end of file diff --git a/3B/archive/root_9.bak/struct.lua b/3B/archive/root_9.bak/struct.lua deleted file mode 100644 index c80b779..0000000 --- a/3B/archive/root_9.bak/struct.lua +++ /dev/null @@ -1,197 +0,0 @@ ---[[ - * Copyright (c) 2015-2017 Iryont - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. -]] - -struct = {} - -function struct.pack(format, ...) - local stream = {} - local vars = {...} - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local val = tonumber(table.remove(vars, 1)) - - local bytes = {} - for j = 1, n do - table.insert(bytes, string.char(val % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt:find('[fd]') then - local val = tonumber(table.remove(vars, 1)) - local sign = 0 - - if val < 0 then - sign = 1 - val = -val - end - - local mantissa, exponent = math.frexp(val) - if val == 0 then - mantissa = 0 - exponent = 0 - else - mantissa = (mantissa * 2 - 1) * math.ldexp(0.5, (opt == 'd') and 53 or 24) - exponent = exponent + ((opt == 'd') and 1022 or 126) - end - - local bytes = {} - if opt == 'd' then - val = mantissa - for i = 1, 6 do - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - else - table.insert(bytes, string.char(math.floor(mantissa) % (2 ^ 8))) - val = math.floor(mantissa / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(val) % (2 ^ 8))) - val = math.floor(val / (2 ^ 8)) - end - - table.insert(bytes, string.char(math.floor(exponent * ((opt == 'd') and 16 or 128) + val) % (2 ^ 8))) - val = math.floor((exponent * ((opt == 'd') and 16 or 128) + val) / (2 ^ 8)) - table.insert(bytes, string.char(math.floor(sign * 128 + val) % (2 ^ 8))) - val = math.floor((sign * 128 + val) / (2 ^ 8)) - - if not endianness then - table.insert(stream, string.reverse(table.concat(bytes))) - else - table.insert(stream, table.concat(bytes)) - end - elseif opt == 's' then - table.insert(stream, tostring(table.remove(vars, 1))) - table.insert(stream, string.char(0)) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - local length = tonumber(n) - - if length > 0 then - local str = tostring(table.remove(vars, 1)) - if length - str:len() > 0 then - str = str .. string.rep(' ', length - str:len()) - end - table.insert(stream, str:sub(1, length)) - end - i = i + n:len() - end - end - - return table.concat(stream) -end - -function struct.unpack(format, stream) - local vars = {} - local iterator = 1 - local endianness = true - - for i = 1, format:len() do - local opt = format:sub(i, i) - - if opt == '<' then - endianness = true - elseif opt == '>' then - endianness = false - elseif opt:find('[bBhHiIlL]') then - local n = opt:find('[hH]') and 2 or opt:find('[iI]') and 4 or opt:find('[lL]') and 8 or 1 - local signed = opt:lower() == opt - - local val = 0 - for j = 1, n do - local byte = string.byte(stream:sub(iterator, iterator)) - if endianness then - val = val + byte * (2 ^ ((j - 1) * 8)) - else - val = val + byte * (2 ^ ((n - j) * 8)) - end - iterator = iterator + 1 - end - - if signed and val >= 2 ^ (n * 8 - 1) then - val = val - 2 ^ (n * 8) - end - - table.insert(vars, val) - elseif opt:find('[fd]') then - local n = (opt == 'd') and 8 or 4 - local x = stream:sub(iterator, iterator + n - 1) - iterator = iterator + n - - if not endianness then - x = string.reverse(x) - end - - local sign = 1 - local mantissa = string.byte(x, (opt == 'd') and 7 or 3) % ((opt == 'd') and 16 or 128) - for i = n - 2, 1, -1 do - mantissa = mantissa * (2 ^ 8) + string.byte(x, i) - end - - if string.byte(x, n) > 127 then - sign = -1 - end - - local exponent = (string.byte(x, n) % 128) * ((opt == 'd') and 16 or 2) + math.floor(string.byte(x, n - 1) / ((opt == 'd') and 16 or 128)) - if exponent == 0 then - table.insert(vars, 0.0) - else - mantissa = (math.ldexp(mantissa, (opt == 'd') and -52 or -23) + 1) * sign - table.insert(vars, math.ldexp(mantissa, exponent - ((opt == 'd') and 1023 or 127))) - end - elseif opt == 's' then - local bytes = {} - for j = iterator, stream:len() do - if stream:sub(j, j) == string.char(0) then - break - end - - table.insert(bytes, stream:sub(j, j)) - end - - local str = table.concat(bytes) - iterator = iterator + str:len() + 1 - table.insert(vars, str) - elseif opt == 'c' then - local n = format:sub(i + 1):match('%d+') - table.insert(vars, stream:sub(iterator, iterator + tonumber(n)-1)) - iterator = iterator + tonumber(n) - i = i + n:len() - end - end - - return unpack(vars) -end - -return struct diff --git a/3B/archive/root_9.bak/tabs.lua b/3B/archive/root_9.bak/tabs.lua deleted file mode 100644 index ed9e59a..0000000 --- a/3B/archive/root_9.bak/tabs.lua +++ /dev/null @@ -1,18 +0,0 @@ -tabs = { - {class="ShellCommandWidget", title="Info", args={"cat","/mnt/info.txt"} }, - {class="ConfigSystemWidget", title="System"}, - {class="ProcessStateWidget", title="ps"}, --- {class="ShellCommandWidget", title="MB", args={"mb","-rd","localhost"} }, --- {class="ProcessStateWidget", title="ps"}, - {class="TailFileWidget", title="Log"}, --- {class="ScriptProgrammerWidget", title="ELFI Script"}, --- {class="RemoteProgrammerWidget", title="AVRDude"}, --- {class="LuaProgrammerWidget", title="LUA Script"}, - {class="LuaAdminWidget", title="LUA Admin"}, - {class="AceEditorWidget", title="Lua ACE 1"}, - {class="AceEditorWidget", title="Lua ACE 2"}, - {class="AceEditorWidget", title="Lua ACE 3"}, - {class="AceEditorWidget", title="HTML ACE 1", args={"/mnt/www","",".html","html"}}, --- {class="RemoteContainerWidget", title="Lua Shell", args={"http://192.168.9.101:4200"}} - {class="RemoteContainerWidget", title="Lua Shell"} -} diff --git a/3B/archive/root_9.bak/ti.lua b/3B/archive/root_9.bak/ti.lua deleted file mode 100644 index 39707fe..0000000 --- a/3B/archive/root_9.bak/ti.lua +++ /dev/null @@ -1,9 +0,0 @@ -Scheduler = require('scheduler') - -updateTimer = Scheduler.Timer(5000) -oneSecond = Scheduler.Timer(1000) - -while updateTimer:running() do - if oneSecond:elapsed() then print("1 Sekunde") end -end - diff --git a/3B/archive/root_9.bak/touch.lua b/3B/archive/root_9.bak/touch.lua deleted file mode 100644 index d314679..0000000 --- a/3B/archive/root_9.bak/touch.lua +++ /dev/null @@ -1,45 +0,0 @@ -local evdev = require "evdev" - -local dev = evdev.Device("/dev/input/event0") - -local x = 0 -local y = 0 -local cnt = 0 - - - -while true do - --local timestamp, eventType, eventCode, value = dev:read() - --print(dev:avail() - if dev:avail() > 0 then - local timestamp, eventType, eventCode, value = dev:read() - print(eventType, eventCode, value) - if eventType == evdev.EV_ABS then - if eventCode == 57 then - if value < 0 then - if y > 0 and y < 79 then - print("Ctrl1: ",math.floor(x/80)+1) - end - if y > 400 and y < 479 then - print("Ctrl2: ",math.floor(x/80)+1) - end - if y > 320 and y < 399 then - print("Numbs: ",math.floor(x/80)+1) - end - if y > 80 and y < 319 then --- print("Lines: ",math.floor(y/((320-80)/6))-1,math.floor(x/20)+1,x,y,math.floor((y-80)/240*10+6),math.floor(x/465*23+5)) - print("Lines: ",math.floor((y-80)/240*10+6),math.floor(x/720*36+7)) - end - end - elseif eventCode == 0 then - x = value - elseif eventCode == 1 then - y = value - end - end - - else - cnt = cnt + 1 - end - -end diff --git a/3B/archive/root_9.bak/tr.lua b/3B/archive/root_9.bak/tr.lua deleted file mode 100644 index 4367865..0000000 --- a/3B/archive/root_9.bak/tr.lua +++ /dev/null @@ -1,9 +0,0 @@ --- tr[""] = " .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; - } - .label { - border: 1px solid #000; - } - .table { - border-collapse: collapse !important; - } - .table td, - .table th { - background-color: #fff !important; - } - .table-bordered th, - .table-bordered td { - border: 1px solid #ddd !important; - } -} -@font-face { - font-family: 'Glyphicons Halflings'; - - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); -} -.glyphicon { - position: relative; - top: 1px; - display: inline-block; - font-family: 'Glyphicons Halflings'; - font-style: normal; - font-weight: normal; - line-height: 1; - - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.glyphicon-asterisk:before { - content: "\002a"; -} -.glyphicon-plus:before { - content: "\002b"; -} -.glyphicon-euro:before, -.glyphicon-eur:before { - content: "\20ac"; -} -.glyphicon-minus:before { - content: "\2212"; -} -.glyphicon-cloud:before { - content: "\2601"; -} -.glyphicon-envelope:before { - content: "\2709"; -} -.glyphicon-pencil:before { - content: "\270f"; -} -.glyphicon-glass:before { - content: "\e001"; -} -.glyphicon-music:before { - content: "\e002"; -} -.glyphicon-search:before { - content: "\e003"; -} -.glyphicon-heart:before { - content: "\e005"; -} -.glyphicon-star:before { - content: "\e006"; -} -.glyphicon-star-empty:before { - content: "\e007"; -} -.glyphicon-user:before { - content: "\e008"; -} -.glyphicon-film:before { - content: "\e009"; -} -.glyphicon-th-large:before { - content: "\e010"; -} -.glyphicon-th:before { - content: "\e011"; -} -.glyphicon-th-list:before { - content: "\e012"; -} -.glyphicon-ok:before { - content: "\e013"; -} -.glyphicon-remove:before { - content: "\e014"; -} -.glyphicon-zoom-in:before { - content: "\e015"; -} -.glyphicon-zoom-out:before { - content: "\e016"; -} -.glyphicon-off:before { - content: "\e017"; -} -.glyphicon-signal:before { - content: "\e018"; -} -.glyphicon-cog:before { - content: "\e019"; -} -.glyphicon-trash:before { - content: "\e020"; -} -.glyphicon-home:before { - content: "\e021"; -} -.glyphicon-file:before { - content: "\e022"; -} -.glyphicon-time:before { - content: "\e023"; -} -.glyphicon-road:before { - content: "\e024"; -} -.glyphicon-download-alt:before { - content: "\e025"; -} -.glyphicon-download:before { - content: "\e026"; -} -.glyphicon-upload:before { - content: "\e027"; -} -.glyphicon-inbox:before { - content: "\e028"; -} -.glyphicon-play-circle:before { - content: "\e029"; -} -.glyphicon-repeat:before { - content: "\e030"; -} -.glyphicon-refresh:before { - content: "\e031"; -} -.glyphicon-list-alt:before { - content: "\e032"; -} -.glyphicon-lock:before { - content: "\e033"; -} -.glyphicon-flag:before { - content: "\e034"; -} -.glyphicon-headphones:before { - content: "\e035"; -} -.glyphicon-volume-off:before { - content: "\e036"; -} -.glyphicon-volume-down:before { - content: "\e037"; -} -.glyphicon-volume-up:before { - content: "\e038"; -} -.glyphicon-qrcode:before { - content: "\e039"; -} -.glyphicon-barcode:before { - content: "\e040"; -} -.glyphicon-tag:before { - content: "\e041"; -} -.glyphicon-tags:before { - content: "\e042"; -} -.glyphicon-book:before { - content: "\e043"; -} -.glyphicon-bookmark:before { - content: "\e044"; -} -.glyphicon-print:before { - content: "\e045"; -} -.glyphicon-camera:before { - content: "\e046"; -} -.glyphicon-font:before { - content: "\e047"; -} -.glyphicon-bold:before { - content: "\e048"; -} -.glyphicon-italic:before { - content: "\e049"; -} -.glyphicon-text-height:before { - content: "\e050"; -} -.glyphicon-text-width:before { - content: "\e051"; -} -.glyphicon-align-left:before { - content: "\e052"; -} -.glyphicon-align-center:before { - content: "\e053"; -} -.glyphicon-align-right:before { - content: "\e054"; -} -.glyphicon-align-justify:before { - content: "\e055"; -} -.glyphicon-list:before { - content: "\e056"; -} -.glyphicon-indent-left:before { - content: "\e057"; -} -.glyphicon-indent-right:before { - content: "\e058"; -} -.glyphicon-facetime-video:before { - content: "\e059"; -} -.glyphicon-picture:before { - content: "\e060"; -} -.glyphicon-map-marker:before { - content: "\e062"; -} -.glyphicon-adjust:before { - content: "\e063"; -} -.glyphicon-tint:before { - content: "\e064"; -} -.glyphicon-edit:before { - content: "\e065"; -} -.glyphicon-share:before { - content: "\e066"; -} -.glyphicon-check:before { - content: "\e067"; -} -.glyphicon-move:before { - content: "\e068"; -} -.glyphicon-step-backward:before { - content: "\e069"; -} -.glyphicon-fast-backward:before { - content: "\e070"; -} -.glyphicon-backward:before { - content: "\e071"; -} -.glyphicon-play:before { - content: "\e072"; -} -.glyphicon-pause:before { - content: "\e073"; -} -.glyphicon-stop:before { - content: "\e074"; -} -.glyphicon-forward:before { - content: "\e075"; -} -.glyphicon-fast-forward:before { - content: "\e076"; -} -.glyphicon-step-forward:before { - content: "\e077"; -} -.glyphicon-eject:before { - content: "\e078"; -} -.glyphicon-chevron-left:before { - content: "\e079"; -} -.glyphicon-chevron-right:before { - content: "\e080"; -} -.glyphicon-plus-sign:before { - content: "\e081"; -} -.glyphicon-minus-sign:before { - content: "\e082"; -} -.glyphicon-remove-sign:before { - content: "\e083"; -} -.glyphicon-ok-sign:before { - content: "\e084"; -} -.glyphicon-question-sign:before { - content: "\e085"; -} -.glyphicon-info-sign:before { - content: "\e086"; -} -.glyphicon-screenshot:before { - content: "\e087"; -} -.glyphicon-remove-circle:before { - content: "\e088"; -} -.glyphicon-ok-circle:before { - content: "\e089"; -} -.glyphicon-ban-circle:before { - content: "\e090"; -} -.glyphicon-arrow-left:before { - content: "\e091"; -} -.glyphicon-arrow-right:before { - content: "\e092"; -} -.glyphicon-arrow-up:before { - content: "\e093"; -} -.glyphicon-arrow-down:before { - content: "\e094"; -} -.glyphicon-share-alt:before { - content: "\e095"; -} -.glyphicon-resize-full:before { - content: "\e096"; -} -.glyphicon-resize-small:before { - content: "\e097"; -} -.glyphicon-exclamation-sign:before { - content: "\e101"; -} -.glyphicon-gift:before { - content: "\e102"; -} -.glyphicon-leaf:before { - content: "\e103"; -} -.glyphicon-fire:before { - content: "\e104"; -} -.glyphicon-eye-open:before { - content: "\e105"; -} -.glyphicon-eye-close:before { - content: "\e106"; -} -.glyphicon-warning-sign:before { - content: "\e107"; -} -.glyphicon-plane:before { - content: "\e108"; -} -.glyphicon-calendar:before { - content: "\e109"; -} -.glyphicon-random:before { - content: "\e110"; -} -.glyphicon-comment:before { - content: "\e111"; -} -.glyphicon-magnet:before { - content: "\e112"; -} -.glyphicon-chevron-up:before { - content: "\e113"; -} -.glyphicon-chevron-down:before { - content: "\e114"; -} -.glyphicon-retweet:before { - content: "\e115"; -} -.glyphicon-shopping-cart:before { - content: "\e116"; -} -.glyphicon-folder-close:before { - content: "\e117"; -} -.glyphicon-folder-open:before { - content: "\e118"; -} -.glyphicon-resize-vertical:before { - content: "\e119"; -} -.glyphicon-resize-horizontal:before { - content: "\e120"; -} -.glyphicon-hdd:before { - content: "\e121"; -} -.glyphicon-bullhorn:before { - content: "\e122"; -} -.glyphicon-bell:before { - content: "\e123"; -} -.glyphicon-certificate:before { - content: "\e124"; -} -.glyphicon-thumbs-up:before { - content: "\e125"; -} -.glyphicon-thumbs-down:before { - content: "\e126"; -} -.glyphicon-hand-right:before { - content: "\e127"; -} -.glyphicon-hand-left:before { - content: "\e128"; -} -.glyphicon-hand-up:before { - content: "\e129"; -} -.glyphicon-hand-down:before { - content: "\e130"; -} -.glyphicon-circle-arrow-right:before { - content: "\e131"; -} -.glyphicon-circle-arrow-left:before { - content: "\e132"; -} -.glyphicon-circle-arrow-up:before { - content: "\e133"; -} -.glyphicon-circle-arrow-down:before { - content: "\e134"; -} -.glyphicon-globe:before { - content: "\e135"; -} -.glyphicon-wrench:before { - content: "\e136"; -} -.glyphicon-tasks:before { - content: "\e137"; -} -.glyphicon-filter:before { - content: "\e138"; -} -.glyphicon-briefcase:before { - content: "\e139"; -} -.glyphicon-fullscreen:before { - content: "\e140"; -} -.glyphicon-dashboard:before { - content: "\e141"; -} -.glyphicon-paperclip:before { - content: "\e142"; -} -.glyphicon-heart-empty:before { - content: "\e143"; -} -.glyphicon-link:before { - content: "\e144"; -} -.glyphicon-phone:before { - content: "\e145"; -} -.glyphicon-pushpin:before { - content: "\e146"; -} -.glyphicon-usd:before { - content: "\e148"; -} -.glyphicon-gbp:before { - content: "\e149"; -} -.glyphicon-sort:before { - content: "\e150"; -} -.glyphicon-sort-by-alphabet:before { - content: "\e151"; -} -.glyphicon-sort-by-alphabet-alt:before { - content: "\e152"; -} -.glyphicon-sort-by-order:before { - content: "\e153"; -} -.glyphicon-sort-by-order-alt:before { - content: "\e154"; -} -.glyphicon-sort-by-attributes:before { - content: "\e155"; -} -.glyphicon-sort-by-attributes-alt:before { - content: "\e156"; -} -.glyphicon-unchecked:before { - content: "\e157"; -} -.glyphicon-expand:before { - content: "\e158"; -} -.glyphicon-collapse-down:before { - content: "\e159"; -} -.glyphicon-collapse-up:before { - content: "\e160"; -} -.glyphicon-log-in:before { - content: "\e161"; -} -.glyphicon-flash:before { - content: "\e162"; -} -.glyphicon-log-out:before { - content: "\e163"; -} -.glyphicon-new-window:before { - content: "\e164"; -} -.glyphicon-record:before { - content: "\e165"; -} -.glyphicon-save:before { - content: "\e166"; -} -.glyphicon-open:before { - content: "\e167"; -} -.glyphicon-saved:before { - content: "\e168"; -} -.glyphicon-import:before { - content: "\e169"; -} -.glyphicon-export:before { - content: "\e170"; -} -.glyphicon-send:before { - content: "\e171"; -} -.glyphicon-floppy-disk:before { - content: "\e172"; -} -.glyphicon-floppy-saved:before { - content: "\e173"; -} -.glyphicon-floppy-remove:before { - content: "\e174"; -} -.glyphicon-floppy-save:before { - content: "\e175"; -} -.glyphicon-floppy-open:before { - content: "\e176"; -} -.glyphicon-credit-card:before { - content: "\e177"; -} -.glyphicon-transfer:before { - content: "\e178"; -} -.glyphicon-cutlery:before { - content: "\e179"; -} -.glyphicon-header:before { - content: "\e180"; -} -.glyphicon-compressed:before { - content: "\e181"; -} -.glyphicon-earphone:before { - content: "\e182"; -} -.glyphicon-phone-alt:before { - content: "\e183"; -} -.glyphicon-tower:before { - content: "\e184"; -} -.glyphicon-stats:before { - content: "\e185"; -} -.glyphicon-sd-video:before { - content: "\e186"; -} -.glyphicon-hd-video:before { - content: "\e187"; -} -.glyphicon-subtitles:before { - content: "\e188"; -} -.glyphicon-sound-stereo:before { - content: "\e189"; -} -.glyphicon-sound-dolby:before { - content: "\e190"; -} -.glyphicon-sound-5-1:before { - content: "\e191"; -} -.glyphicon-sound-6-1:before { - content: "\e192"; -} -.glyphicon-sound-7-1:before { - content: "\e193"; -} -.glyphicon-copyright-mark:before { - content: "\e194"; -} -.glyphicon-registration-mark:before { - content: "\e195"; -} -.glyphicon-cloud-download:before { - content: "\e197"; -} -.glyphicon-cloud-upload:before { - content: "\e198"; -} -.glyphicon-tree-conifer:before { - content: "\e199"; -} -.glyphicon-tree-deciduous:before { - content: "\e200"; -} -.glyphicon-cd:before { - content: "\e201"; -} -.glyphicon-save-file:before { - content: "\e202"; -} -.glyphicon-open-file:before { - content: "\e203"; -} -.glyphicon-level-up:before { - content: "\e204"; -} -.glyphicon-copy:before { - content: "\e205"; -} -.glyphicon-paste:before { - content: "\e206"; -} -.glyphicon-alert:before { - content: "\e209"; -} -.glyphicon-equalizer:before { - content: "\e210"; -} -.glyphicon-king:before { - content: "\e211"; -} -.glyphicon-queen:before { - content: "\e212"; -} -.glyphicon-pawn:before { - content: "\e213"; -} -.glyphicon-bishop:before { - content: "\e214"; -} -.glyphicon-knight:before { - content: "\e215"; -} -.glyphicon-baby-formula:before { - content: "\e216"; -} -.glyphicon-tent:before { - content: "\26fa"; -} -.glyphicon-blackboard:before { - content: "\e218"; -} -.glyphicon-bed:before { - content: "\e219"; -} -.glyphicon-apple:before { - content: "\f8ff"; -} -.glyphicon-erase:before { - content: "\e221"; -} -.glyphicon-hourglass:before { - content: "\231b"; -} -.glyphicon-lamp:before { - content: "\e223"; -} -.glyphicon-duplicate:before { - content: "\e224"; -} -.glyphicon-piggy-bank:before { - content: "\e225"; -} -.glyphicon-scissors:before { - content: "\e226"; -} -.glyphicon-bitcoin:before { - content: "\e227"; -} -.glyphicon-btc:before { - content: "\e227"; -} -.glyphicon-xbt:before { - content: "\e227"; -} -.glyphicon-yen:before { - content: "\00a5"; -} -.glyphicon-jpy:before { - content: "\00a5"; -} -.glyphicon-ruble:before { - content: "\20bd"; -} -.glyphicon-rub:before { - content: "\20bd"; -} -.glyphicon-scale:before { - content: "\e230"; -} -.glyphicon-ice-lolly:before { - content: "\e231"; -} -.glyphicon-ice-lolly-tasted:before { - content: "\e232"; -} -.glyphicon-education:before { - content: "\e233"; -} -.glyphicon-option-horizontal:before { - content: "\e234"; -} -.glyphicon-option-vertical:before { - content: "\e235"; -} -.glyphicon-menu-hamburger:before { - content: "\e236"; -} -.glyphicon-modal-window:before { - content: "\e237"; -} -.glyphicon-oil:before { - content: "\e238"; -} -.glyphicon-grain:before { - content: "\e239"; -} -.glyphicon-sunglasses:before { - content: "\e240"; -} -.glyphicon-text-size:before { - content: "\e241"; -} -.glyphicon-text-color:before { - content: "\e242"; -} -.glyphicon-text-background:before { - content: "\e243"; -} -.glyphicon-object-align-top:before { - content: "\e244"; -} -.glyphicon-object-align-bottom:before { - content: "\e245"; -} -.glyphicon-object-align-horizontal:before { - content: "\e246"; -} -.glyphicon-object-align-left:before { - content: "\e247"; -} -.glyphicon-object-align-vertical:before { - content: "\e248"; -} -.glyphicon-object-align-right:before { - content: "\e249"; -} -.glyphicon-triangle-right:before { - content: "\e250"; -} -.glyphicon-triangle-left:before { - content: "\e251"; -} -.glyphicon-triangle-bottom:before { - content: "\e252"; -} -.glyphicon-triangle-top:before { - content: "\e253"; -} -.glyphicon-console:before { - content: "\e254"; -} -.glyphicon-superscript:before { - content: "\e255"; -} -.glyphicon-subscript:before { - content: "\e256"; -} -.glyphicon-menu-left:before { - content: "\e257"; -} -.glyphicon-menu-right:before { - content: "\e258"; -} -.glyphicon-menu-down:before { - content: "\e259"; -} -.glyphicon-menu-up:before { - content: "\e260"; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; - color: #333; - background-color: #fff; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - display: inline-block; - max-width: 100%; - height: auto; - padding: 4px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -h1, -h2, -h3, -h4, -h5, -h6, -.h1, -.h2, -.h3, -.h4, -.h5, -.h6 { - font-family: inherit; - font-weight: 500; - line-height: 1.1; - color: inherit; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small, -.h1 small, -.h2 small, -.h3 small, -.h4 small, -.h5 small, -.h6 small, -h1 .small, -h2 .small, -h3 .small, -h4 .small, -h5 .small, -h6 .small, -.h1 .small, -.h2 .small, -.h3 .small, -.h4 .small, -.h5 .small, -.h6 .small { - font-weight: normal; - line-height: 1; - color: #777; -} -h1, -.h1, -h2, -.h2, -h3, -.h3 { - margin-top: 20px; - margin-bottom: 10px; -} -h1 small, -.h1 small, -h2 small, -.h2 small, -h3 small, -.h3 small, -h1 .small, -.h1 .small, -h2 .small, -.h2 .small, -h3 .small, -.h3 .small { - font-size: 65%; -} -h4, -.h4, -h5, -.h5, -h6, -.h6 { - margin-top: 10px; - margin-bottom: 10px; -} -h4 small, -.h4 small, -h5 small, -.h5 small, -h6 small, -.h6 small, -h4 .small, -.h4 .small, -h5 .small, -.h5 .small, -h6 .small, -.h6 .small { - font-size: 75%; -} -h1, -.h1 { - font-size: 36px; -} -h2, -.h2 { - font-size: 30px; -} -h3, -.h3 { - font-size: 24px; -} -h4, -.h4 { - font-size: 18px; -} -h5, -.h5 { - font-size: 14px; -} -h6, -.h6 { - font-size: 12px; -} -p { - margin: 0 0 10px; -} -.lead { - margin-bottom: 20px; - font-size: 16px; - font-weight: 300; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -mark, -.mark { - padding: .2em; - background-color: #fcf8e3; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-nowrap { - white-space: nowrap; -} -.text-lowercase { - text-transform: lowercase; -} -.text-uppercase { - text-transform: uppercase; -} -.text-capitalize { - text-transform: capitalize; -} -.text-muted { - color: #777; -} -.text-primary { - color: #337ab7; -} -a.text-primary:hover, -a.text-primary:focus { - color: #286090; -} -.text-success { - color: #3c763d; -} -a.text-success:hover, -a.text-success:focus { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover, -a.text-info:focus { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover, -a.text-warning:focus { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover, -a.text-danger:focus { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #337ab7; -} -a.bg-primary:hover, -a.bg-primary:focus { - background-color: #286090; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover, -a.bg-success:focus { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover, -a.bg-info:focus { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover, -a.bg-warning:focus { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover, -a.bg-danger:focus { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - margin-left: -5px; - list-style: none; -} -.list-inline > li { - display: inline-block; - padding-right: 5px; - padding-left: 5px; -} -dl { - margin-top: 0; - margin-bottom: 20px; -} -dt, -dd { - line-height: 1.42857143; -} -dt { - font-weight: bold; -} -dd { - margin-left: 0; -} -@media (min-width: 768px) { - .dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; - } - .dl-horizontal dd { - margin-left: 180px; - } -} -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #777; -} -.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 10px 20px; - margin: 0 0 20px; - font-size: 17.5px; - border-left: 5px solid #eee; -} -blockquote p:last-child, -blockquote ul:last-child, -blockquote ol:last-child { - margin-bottom: 0; -} -blockquote footer, -blockquote small, -blockquote .small { - display: block; - font-size: 80%; - line-height: 1.42857143; - color: #777; -} -blockquote footer:before, -blockquote small:before, -blockquote .small:before { - content: '\2014 \00A0'; -} -.blockquote-reverse, -blockquote.pull-right { - padding-right: 15px; - padding-left: 0; - text-align: right; - border-right: 5px solid #eee; - border-left: 0; -} -.blockquote-reverse footer:before, -blockquote.pull-right footer:before, -.blockquote-reverse small:before, -blockquote.pull-right small:before, -.blockquote-reverse .small:before, -blockquote.pull-right .small:before { - content: ''; -} -.blockquote-reverse footer:after, -blockquote.pull-right footer:after, -.blockquote-reverse small:after, -blockquote.pull-right small:after, -.blockquote-reverse .small:after, -blockquote.pull-right .small:after { - content: '\00A0 \2014'; -} -address { - margin-bottom: 20px; - font-style: normal; - line-height: 1.42857143; -} -code, -kbd, -pre, -samp { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; -} -code { - padding: 2px 4px; - font-size: 90%; - color: #c7254e; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -kbd kbd { - padding: 0; - font-size: 100%; - font-weight: bold; - -webkit-box-shadow: none; - box-shadow: none; -} -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 1.42857143; - color: #333; - word-break: break-all; - word-wrap: break-word; - background-color: #f5f5f5; - border: 1px solid #ccc; - border-radius: 4px; -} -pre code { - padding: 0; - font-size: inherit; - color: inherit; - white-space: pre-wrap; - background-color: transparent; - border-radius: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -.container { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto; -} -.row { - margin-right: -15px; - margin-left: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-right: 15px; - padding-left: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0; - } -} -table { - background-color: transparent; -} -caption { - padding-top: 8px; - padding-bottom: 8px; - color: #777; - text-align: left; -} -th { - text-align: left; -} -.table { - width: 100%; - max-width: 100%; - margin-bottom: 20px; -} -.table > thead > tr > th, -.table > tbody > tr > th, -.table > tfoot > tr > th, -.table > thead > tr > td, -.table > tbody > tr > td, -.table > tfoot > tr > td { - padding: 8px; - line-height: 1.42857143; - vertical-align: top; - border-top: 1px solid #ddd; -} -.table > thead > tr > th { - vertical-align: bottom; - border-bottom: 2px solid #ddd; -} -.table > caption + thead > tr:first-child > th, -.table > colgroup + thead > tr:first-child > th, -.table > thead:first-child > tr:first-child > th, -.table > caption + thead > tr:first-child > td, -.table > colgroup + thead > tr:first-child > td, -.table > thead:first-child > tr:first-child > td { - border-top: 0; -} -.table > tbody + tbody { - border-top: 2px solid #ddd; -} -.table .table { - background-color: #fff; -} -.table-condensed > thead > tr > th, -.table-condensed > tbody > tr > th, -.table-condensed > tfoot > tr > th, -.table-condensed > thead > tr > td, -.table-condensed > tbody > tr > td, -.table-condensed > tfoot > tr > td { - padding: 5px; -} -.table-bordered { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > tbody > tr > th, -.table-bordered > tfoot > tr > th, -.table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td, -.table-bordered > tfoot > tr > td { - border: 1px solid #ddd; -} -.table-bordered > thead > tr > th, -.table-bordered > thead > tr > td { - border-bottom-width: 2px; -} -.table-striped > tbody > tr:nth-of-type(odd) { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover { - background-color: #f5f5f5; -} -table col[class*="col-"] { - position: static; - display: table-column; - float: none; -} -table td[class*="col-"], -table th[class*="col-"] { - position: static; - display: table-cell; - float: none; -} -.table > thead > tr > td.active, -.table > tbody > tr > td.active, -.table > tfoot > tr > td.active, -.table > thead > tr > th.active, -.table > tbody > tr > th.active, -.table > tfoot > tr > th.active, -.table > thead > tr.active > td, -.table > tbody > tr.active > td, -.table > tfoot > tr.active > td, -.table > thead > tr.active > th, -.table > tbody > tr.active > th, -.table > tfoot > tr.active > th { - background-color: #f5f5f5; -} -.table-hover > tbody > tr > td.active:hover, -.table-hover > tbody > tr > th.active:hover, -.table-hover > tbody > tr.active:hover > td, -.table-hover > tbody > tr:hover > .active, -.table-hover > tbody > tr.active:hover > th { - background-color: #e8e8e8; -} -.table > thead > tr > td.success, -.table > tbody > tr > td.success, -.table > tfoot > tr > td.success, -.table > thead > tr > th.success, -.table > tbody > tr > th.success, -.table > tfoot > tr > th.success, -.table > thead > tr.success > td, -.table > tbody > tr.success > td, -.table > tfoot > tr.success > td, -.table > thead > tr.success > th, -.table > tbody > tr.success > th, -.table > tfoot > tr.success > th { - background-color: #dff0d8; -} -.table-hover > tbody > tr > td.success:hover, -.table-hover > tbody > tr > th.success:hover, -.table-hover > tbody > tr.success:hover > td, -.table-hover > tbody > tr:hover > .success, -.table-hover > tbody > tr.success:hover > th { - background-color: #d0e9c6; -} -.table > thead > tr > td.info, -.table > tbody > tr > td.info, -.table > tfoot > tr > td.info, -.table > thead > tr > th.info, -.table > tbody > tr > th.info, -.table > tfoot > tr > th.info, -.table > thead > tr.info > td, -.table > tbody > tr.info > td, -.table > tfoot > tr.info > td, -.table > thead > tr.info > th, -.table > tbody > tr.info > th, -.table > tfoot > tr.info > th { - background-color: #d9edf7; -} -.table-hover > tbody > tr > td.info:hover, -.table-hover > tbody > tr > th.info:hover, -.table-hover > tbody > tr.info:hover > td, -.table-hover > tbody > tr:hover > .info, -.table-hover > tbody > tr.info:hover > th { - background-color: #c4e3f3; -} -.table > thead > tr > td.warning, -.table > tbody > tr > td.warning, -.table > tfoot > tr > td.warning, -.table > thead > tr > th.warning, -.table > tbody > tr > th.warning, -.table > tfoot > tr > th.warning, -.table > thead > tr.warning > td, -.table > tbody > tr.warning > td, -.table > tfoot > tr.warning > td, -.table > thead > tr.warning > th, -.table > tbody > tr.warning > th, -.table > tfoot > tr.warning > th { - background-color: #fcf8e3; -} -.table-hover > tbody > tr > td.warning:hover, -.table-hover > tbody > tr > th.warning:hover, -.table-hover > tbody > tr.warning:hover > td, -.table-hover > tbody > tr:hover > .warning, -.table-hover > tbody > tr.warning:hover > th { - background-color: #faf2cc; -} -.table > thead > tr > td.danger, -.table > tbody > tr > td.danger, -.table > tfoot > tr > td.danger, -.table > thead > tr > th.danger, -.table > tbody > tr > th.danger, -.table > tfoot > tr > th.danger, -.table > thead > tr.danger > td, -.table > tbody > tr.danger > td, -.table > tfoot > tr.danger > td, -.table > thead > tr.danger > th, -.table > tbody > tr.danger > th, -.table > tfoot > tr.danger > th { - background-color: #f2dede; -} -.table-hover > tbody > tr > td.danger:hover, -.table-hover > tbody > tr > th.danger:hover, -.table-hover > tbody > tr.danger:hover > td, -.table-hover > tbody > tr:hover > .danger, -.table-hover > tbody > tr.danger:hover > th { - background-color: #ebcccc; -} -.table-responsive { - min-height: .01%; - overflow-x: auto; -} -@media screen and (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-y: hidden; - -ms-overflow-style: -ms-autohiding-scrollbar; - border: 1px solid #ddd; - } - .table-responsive > .table { - margin-bottom: 0; - } - .table-responsive > .table > thead > tr > th, - .table-responsive > .table > tbody > tr > th, - .table-responsive > .table > tfoot > tr > th, - .table-responsive > .table > thead > tr > td, - .table-responsive > .table > tbody > tr > td, - .table-responsive > .table > tfoot > tr > td { - white-space: nowrap; - } - .table-responsive > .table-bordered { - border: 0; - } - .table-responsive > .table-bordered > thead > tr > th:first-child, - .table-responsive > .table-bordered > tbody > tr > th:first-child, - .table-responsive > .table-bordered > tfoot > tr > th:first-child, - .table-responsive > .table-bordered > thead > tr > td:first-child, - .table-responsive > .table-bordered > tbody > tr > td:first-child, - .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; - } - .table-responsive > .table-bordered > thead > tr > th:last-child, - .table-responsive > .table-bordered > tbody > tr > th:last-child, - .table-responsive > .table-bordered > tfoot > tr > th:last-child, - .table-responsive > .table-bordered > thead > tr > td:last-child, - .table-responsive > .table-bordered > tbody > tr > td:last-child, - .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; - } - .table-responsive > .table-bordered > tbody > tr:last-child > th, - .table-responsive > .table-bordered > tfoot > tr:last-child > th, - .table-responsive > .table-bordered > tbody > tr:last-child > td, - .table-responsive > .table-bordered > tfoot > tr:last-child > td { - border-bottom: 0; - } -} -fieldset { - min-width: 0; - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: inherit; - color: #333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} -label { - display: inline-block; - max-width: 100%; - margin-bottom: 5px; - font-weight: bold; -} -input[type="search"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; - -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; - transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; -} -.form-control:focus { - border-color: #66afe9; - outline: 0; - -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); - box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); -} -.form-control::-moz-placeholder { - color: #999; - opacity: 1; -} -.form-control:-ms-input-placeholder { - color: #999; -} -.form-control::-webkit-input-placeholder { - color: #999; -} -.form-control::-ms-expand { - background-color: transparent; - border: 0; -} -.form-control[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - background-color: #eee; - opacity: 1; -} -.form-control[disabled], -fieldset[disabled] .form-control { - cursor: not-allowed; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -@media screen and (-webkit-min-device-pixel-ratio: 0) { - input[type="date"].form-control, - input[type="time"].form-control, - input[type="datetime-local"].form-control, - input[type="month"].form-control { - line-height: 34px; - } - input[type="date"].input-sm, - input[type="time"].input-sm, - input[type="datetime-local"].input-sm, - input[type="month"].input-sm, - .input-group-sm input[type="date"], - .input-group-sm input[type="time"], - .input-group-sm input[type="datetime-local"], - .input-group-sm input[type="month"] { - line-height: 30px; - } - input[type="date"].input-lg, - input[type="time"].input-lg, - input[type="datetime-local"].input-lg, - input[type="month"].input-lg, - .input-group-lg input[type="date"], - .input-group-lg input[type="time"], - .input-group-lg input[type="datetime-local"], - .input-group-lg input[type="month"] { - line-height: 46px; - } -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - position: relative; - display: block; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - min-height: 20px; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - position: absolute; - margin-top: 4px \9; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - position: relative; - display: inline-block; - padding-left: 20px; - margin-bottom: 0; - font-weight: normal; - vertical-align: middle; - cursor: pointer; -} -.radio-inline + .radio-inline, -.checkbox-inline + .checkbox-inline { - margin-top: 0; - margin-left: 10px; -} -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"].disabled, -input[type="checkbox"].disabled, -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"] { - cursor: not-allowed; -} -.radio-inline.disabled, -.checkbox-inline.disabled, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.radio.disabled label, -.checkbox.disabled label, -fieldset[disabled] .radio label, -fieldset[disabled] .checkbox label { - cursor: not-allowed; -} -.form-control-static { - min-height: 34px; - padding-top: 7px; - padding-bottom: 7px; - margin-bottom: 0; -} -.form-control-static.input-lg, -.form-control-static.input-sm { - padding-right: 0; - padding-left: 0; -} -.input-sm { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-sm { - height: 30px; - line-height: 30px; -} -textarea.input-sm, -select[multiple].input-sm { - height: auto; -} -.form-group-sm .form-control { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.form-group-sm select.form-control { - height: 30px; - line-height: 30px; -} -.form-group-sm textarea.form-control, -.form-group-sm select[multiple].form-control { - height: auto; -} -.form-group-sm .form-control-static { - height: 30px; - min-height: 32px; - padding: 6px 10px; - font-size: 12px; - line-height: 1.5; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.form-group-lg .form-control { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.form-group-lg select.form-control { - height: 46px; - line-height: 46px; -} -.form-group-lg textarea.form-control, -.form-group-lg select[multiple].form-control { - height: auto; -} -.form-group-lg .form-control-static { - height: 46px; - min-height: 38px; - padding: 11px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.form-control-feedback { - position: absolute; - top: 0; - right: 0; - z-index: 2; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; - pointer-events: none; -} -.input-lg + .form-control-feedback, -.input-group-lg + .form-control-feedback, -.form-group-lg .form-control + .form-control-feedback { - width: 46px; - height: 46px; - line-height: 46px; -} -.input-sm + .form-control-feedback, -.input-group-sm + .form-control-feedback, -.form-group-sm .form-control + .form-control-feedback { - width: 30px; - height: 30px; - line-height: 30px; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline, -.has-success.radio label, -.has-success.checkbox label, -.has-success.radio-inline label, -.has-success.checkbox-inline label { - color: #3c763d; -} -.has-success .form-control { - border-color: #3c763d; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-success .form-control:focus { - border-color: #2b542c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; -} -.has-success .input-group-addon { - color: #3c763d; - background-color: #dff0d8; - border-color: #3c763d; -} -.has-success .form-control-feedback { - color: #3c763d; -} -.has-warning .help-block, -.has-warning .control-label, -.has-warning .radio, -.has-warning .checkbox, -.has-warning .radio-inline, -.has-warning .checkbox-inline, -.has-warning.radio label, -.has-warning.checkbox label, -.has-warning.radio-inline label, -.has-warning.checkbox-inline label { - color: #8a6d3b; -} -.has-warning .form-control { - border-color: #8a6d3b; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-warning .form-control:focus { - border-color: #66512c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; -} -.has-warning .input-group-addon { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #8a6d3b; -} -.has-warning .form-control-feedback { - color: #8a6d3b; -} -.has-error .help-block, -.has-error .control-label, -.has-error .radio, -.has-error .checkbox, -.has-error .radio-inline, -.has-error .checkbox-inline, -.has-error.radio label, -.has-error.checkbox label, -.has-error.radio-inline label, -.has-error.checkbox-inline label { - color: #a94442; -} -.has-error .form-control { - border-color: #a94442; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); -} -.has-error .form-control:focus { - border-color: #843534; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; -} -.has-error .input-group-addon { - color: #a94442; - background-color: #f2dede; - border-color: #a94442; -} -.has-error .form-control-feedback { - color: #a94442; -} -.has-feedback label ~ .form-control-feedback { - top: 25px; -} -.has-feedback label.sr-only ~ .form-control-feedback { - top: 0; -} -.help-block { - display: block; - margin-top: 5px; - margin-bottom: 10px; - color: #737373; -} -@media (min-width: 768px) { - .form-inline .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .form-inline .form-control-static { - display: inline-block; - } - .form-inline .input-group { - display: inline-table; - vertical-align: middle; - } - .form-inline .input-group .input-group-addon, - .form-inline .input-group .input-group-btn, - .form-inline .input-group .form-control { - width: auto; - } - .form-inline .input-group > .form-control { - width: 100%; - } - .form-inline .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio, - .form-inline .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio label, - .form-inline .checkbox label { - padding-left: 0; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .radio, -.form-horizontal .checkbox, -.form-horizontal .radio-inline, -.form-horizontal .checkbox-inline { - padding-top: 7px; - margin-top: 0; - margin-bottom: 0; -} -.form-horizontal .radio, -.form-horizontal .checkbox { - min-height: 27px; -} -.form-horizontal .form-group { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - padding-top: 7px; - margin-bottom: 0; - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - right: 15px; -} -@media (min-width: 768px) { - .form-horizontal .form-group-lg .control-label { - padding-top: 11px; - font-size: 18px; - } -} -@media (min-width: 768px) { - .form-horizontal .form-group-sm .control-label { - padding-top: 6px; - font-size: 12px; - } -} -.btn { - display: inline-block; - padding: 6px 12px; - margin-bottom: 0; - font-size: 14px; - font-weight: normal; - line-height: 1.42857143; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -ms-touch-action: manipulation; - touch-action: manipulation; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.btn:focus, -.btn:active:focus, -.btn.active:focus, -.btn.focus, -.btn:active.focus, -.btn.active.focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.btn:focus, -.btn.focus { - color: #333; - text-decoration: none; -} -.btn:active, -.btn.active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn.disabled, -.btn[disabled], -fieldset[disabled] .btn { - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -a.btn.disabled, -fieldset[disabled] a.btn { - pointer-events: none; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:focus, -.btn-default.focus { - color: #333; - background-color: #e6e6e6; - border-color: #8c8c8c; -} -.btn-default:hover { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - color: #333; - background-color: #e6e6e6; - border-color: #adadad; -} -.btn-default:active:hover, -.btn-default.active:hover, -.open > .dropdown-toggle.btn-default:hover, -.btn-default:active:focus, -.btn-default.active:focus, -.open > .dropdown-toggle.btn-default:focus, -.btn-default:active.focus, -.btn-default.active.focus, -.open > .dropdown-toggle.btn-default.focus { - color: #333; - background-color: #d4d4d4; - border-color: #8c8c8c; -} -.btn-default:active, -.btn-default.active, -.open > .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled.focus, -.btn-default[disabled].focus, -fieldset[disabled] .btn-default.focus { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary:focus, -.btn-primary.focus { - color: #fff; - background-color: #286090; - border-color: #122b40; -} -.btn-primary:hover { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - color: #fff; - background-color: #286090; - border-color: #204d74; -} -.btn-primary:active:hover, -.btn-primary.active:hover, -.open > .dropdown-toggle.btn-primary:hover, -.btn-primary:active:focus, -.btn-primary.active:focus, -.open > .dropdown-toggle.btn-primary:focus, -.btn-primary:active.focus, -.btn-primary.active.focus, -.open > .dropdown-toggle.btn-primary.focus { - color: #fff; - background-color: #204d74; - border-color: #122b40; -} -.btn-primary:active, -.btn-primary.active, -.open > .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled.focus, -.btn-primary[disabled].focus, -fieldset[disabled] .btn-primary.focus { - background-color: #337ab7; - border-color: #2e6da4; -} -.btn-primary .badge { - color: #337ab7; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:focus, -.btn-success.focus { - color: #fff; - background-color: #449d44; - border-color: #255625; -} -.btn-success:hover { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - color: #fff; - background-color: #449d44; - border-color: #398439; -} -.btn-success:active:hover, -.btn-success.active:hover, -.open > .dropdown-toggle.btn-success:hover, -.btn-success:active:focus, -.btn-success.active:focus, -.open > .dropdown-toggle.btn-success:focus, -.btn-success:active.focus, -.btn-success.active.focus, -.open > .dropdown-toggle.btn-success.focus { - color: #fff; - background-color: #398439; - border-color: #255625; -} -.btn-success:active, -.btn-success.active, -.open > .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled.focus, -.btn-success[disabled].focus, -fieldset[disabled] .btn-success.focus { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:focus, -.btn-info.focus { - color: #fff; - background-color: #31b0d5; - border-color: #1b6d85; -} -.btn-info:hover { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - color: #fff; - background-color: #31b0d5; - border-color: #269abc; -} -.btn-info:active:hover, -.btn-info.active:hover, -.open > .dropdown-toggle.btn-info:hover, -.btn-info:active:focus, -.btn-info.active:focus, -.open > .dropdown-toggle.btn-info:focus, -.btn-info:active.focus, -.btn-info.active.focus, -.open > .dropdown-toggle.btn-info.focus { - color: #fff; - background-color: #269abc; - border-color: #1b6d85; -} -.btn-info:active, -.btn-info.active, -.open > .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled.focus, -.btn-info[disabled].focus, -fieldset[disabled] .btn-info.focus { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:focus, -.btn-warning.focus { - color: #fff; - background-color: #ec971f; - border-color: #985f0d; -} -.btn-warning:hover { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ec971f; - border-color: #d58512; -} -.btn-warning:active:hover, -.btn-warning.active:hover, -.open > .dropdown-toggle.btn-warning:hover, -.btn-warning:active:focus, -.btn-warning.active:focus, -.open > .dropdown-toggle.btn-warning:focus, -.btn-warning:active.focus, -.btn-warning.active.focus, -.open > .dropdown-toggle.btn-warning.focus { - color: #fff; - background-color: #d58512; - border-color: #985f0d; -} -.btn-warning:active, -.btn-warning.active, -.open > .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled.focus, -.btn-warning[disabled].focus, -fieldset[disabled] .btn-warning.focus { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:focus, -.btn-danger.focus { - color: #fff; - background-color: #c9302c; - border-color: #761c19; -} -.btn-danger:hover { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - color: #fff; - background-color: #c9302c; - border-color: #ac2925; -} -.btn-danger:active:hover, -.btn-danger.active:hover, -.open > .dropdown-toggle.btn-danger:hover, -.btn-danger:active:focus, -.btn-danger.active:focus, -.open > .dropdown-toggle.btn-danger:focus, -.btn-danger:active.focus, -.btn-danger.active.focus, -.open > .dropdown-toggle.btn-danger.focus { - color: #fff; - background-color: #ac2925; - border-color: #761c19; -} -.btn-danger:active, -.btn-danger.active, -.open > .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled.focus, -.btn-danger[disabled].focus, -fieldset[disabled] .btn-danger.focus { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #337ab7; - border-radius: 0; -} -.btn-link, -.btn-link:active, -.btn-link.active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - -webkit-box-shadow: none; - box-shadow: none; -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} -.btn-link:hover, -.btn-link:focus { - color: #23527c; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -fieldset[disabled] .btn-link:hover, -.btn-link[disabled]:focus, -fieldset[disabled] .btn-link:focus { - color: #777; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -.btn-sm, -.btn-group-sm > .btn { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-xs, -.btn-group-xs > .btn { - padding: 1px 5px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -.btn-block { - display: block; - width: 100%; -} -.btn-block + .btn-block { - margin-top: 5px; -} -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} -.fade { - opacity: 0; - -webkit-transition: opacity .15s linear; - -o-transition: opacity .15s linear; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -tr.collapse.in { - display: table-row; -} -tbody.collapse.in { - display: table-row-group; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition-timing-function: ease; - -o-transition-timing-function: ease; - transition-timing-function: ease; - -webkit-transition-duration: .35s; - -o-transition-duration: .35s; - transition-duration: .35s; - -webkit-transition-property: height, visibility; - -o-transition-property: height, visibility; - transition-property: height, visibility; -} -.caret { - display: inline-block; - width: 0; - height: 0; - margin-left: 2px; - vertical-align: middle; - border-top: 4px dashed; - border-top: 4px solid \9; - border-right: 4px solid transparent; - border-left: 4px solid transparent; -} -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle:focus { - outline: 0; -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - font-size: 14px; - text-align: left; - list-style: none; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .15); - border-radius: 4px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 1.42857143; - color: #333; - white-space: nowrap; -} -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - color: #262626; - text-decoration: none; - background-color: #f5f5f5; -} -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #fff; - text-decoration: none; - background-color: #337ab7; - outline: 0; -} -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #777; -} -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: not-allowed; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.open > .dropdown-menu { - display: block; -} -.open > a { - outline: 0; -} -.dropdown-menu-right { - right: 0; - left: auto; -} -.dropdown-menu-left { - right: auto; - left: 0; -} -.dropdown-header { - display: block; - padding: 3px 20px; - font-size: 12px; - line-height: 1.42857143; - color: #777; - white-space: nowrap; -} -.dropdown-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 990; -} -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - content: ""; - border-top: 0; - border-bottom: 4px dashed; - border-bottom: 4px solid \9; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -@media (min-width: 768px) { - .navbar-right .dropdown-menu { - right: 0; - left: auto; - } - .navbar-right .dropdown-menu-left { - right: auto; - left: 0; - } -} -.btn-group, -.btn-group-vertical { - position: relative; - display: inline-block; - vertical-align: middle; -} -.btn-group > .btn, -.btn-group-vertical > .btn { - position: relative; - float: left; -} -.btn-group > .btn:hover, -.btn-group-vertical > .btn:hover, -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus, -.btn-group > .btn:active, -.btn-group-vertical > .btn:active, -.btn-group > .btn.active, -.btn-group-vertical > .btn.active { - z-index: 2; -} -.btn-group .btn + .btn, -.btn-group .btn + .btn-group, -.btn-group .btn-group + .btn, -.btn-group .btn-group + .btn-group { - margin-left: -1px; -} -.btn-toolbar { - margin-left: -5px; -} -.btn-toolbar .btn, -.btn-toolbar .btn-group, -.btn-toolbar .input-group { - float: left; -} -.btn-toolbar > .btn, -.btn-toolbar > .btn-group, -.btn-toolbar > .input-group { - margin-left: 5px; -} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { - border-radius: 0; -} -.btn-group > .btn:first-child { - margin-left: 0; -} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn:last-child:not(:first-child), -.btn-group > .dropdown-toggle:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group > .btn-group { - float: left; -} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group > .btn + .dropdown-toggle { - padding-right: 8px; - padding-left: 8px; -} -.btn-group > .btn-lg + .dropdown-toggle { - padding-right: 12px; - padding-left: 12px; -} -.btn-group.open .dropdown-toggle { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); -} -.btn-group.open .dropdown-toggle.btn-link { - -webkit-box-shadow: none; - box-shadow: none; -} -.btn .caret { - margin-left: 0; -} -.btn-lg .caret { - border-width: 5px 5px 0; - border-bottom-width: 0; -} -.dropup .btn-lg .caret { - border-width: 0 5px 5px; -} -.btn-group-vertical > .btn, -.btn-group-vertical > .btn-group, -.btn-group-vertical > .btn-group > .btn { - display: block; - float: none; - width: 100%; - max-width: 100%; -} -.btn-group-vertical > .btn-group > .btn { - float: none; -} -.btn-group-vertical > .btn + .btn, -.btn-group-vertical > .btn + .btn-group, -.btn-group-vertical > .btn-group + .btn, -.btn-group-vertical > .btn-group + .btn-group { - margin-top: -1px; - margin-left: 0; -} -.btn-group-vertical > .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical > .btn:first-child:not(:last-child) { - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn:last-child:not(:first-child) { - border-top-left-radius: 0; - border-top-right-radius: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { - border-radius: 0; -} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.btn-group-justified { - display: table; - width: 100%; - table-layout: fixed; - border-collapse: separate; -} -.btn-group-justified > .btn, -.btn-group-justified > .btn-group { - display: table-cell; - float: none; - width: 1%; -} -.btn-group-justified > .btn-group .btn { - width: 100%; -} -.btn-group-justified > .btn-group .dropdown-menu { - left: auto; -} -[data-toggle="buttons"] > .btn input[type="radio"], -[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], -[data-toggle="buttons"] > .btn input[type="checkbox"], -[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none; -} -.input-group { - position: relative; - display: table; - border-collapse: separate; -} -.input-group[class*="col-"] { - float: none; - padding-right: 0; - padding-left: 0; -} -.input-group .form-control { - position: relative; - z-index: 2; - float: left; - width: 100%; - margin-bottom: 0; -} -.input-group .form-control:focus { - z-index: 3; -} -.input-group-lg > .form-control, -.input-group-lg > .input-group-addon, -.input-group-lg > .input-group-btn > .btn { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; - border-radius: 6px; -} -select.input-group-lg > .form-control, -select.input-group-lg > .input-group-addon, -select.input-group-lg > .input-group-btn > .btn { - height: 46px; - line-height: 46px; -} -textarea.input-group-lg > .form-control, -textarea.input-group-lg > .input-group-addon, -textarea.input-group-lg > .input-group-btn > .btn, -select[multiple].input-group-lg > .form-control, -select[multiple].input-group-lg > .input-group-addon, -select[multiple].input-group-lg > .input-group-btn > .btn { - height: auto; -} -.input-group-sm > .form-control, -.input-group-sm > .input-group-addon, -.input-group-sm > .input-group-btn > .btn { - height: 30px; - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; - border-radius: 3px; -} -select.input-group-sm > .form-control, -select.input-group-sm > .input-group-addon, -select.input-group-sm > .input-group-btn > .btn { - height: 30px; - line-height: 30px; -} -textarea.input-group-sm > .form-control, -textarea.input-group-sm > .input-group-addon, -textarea.input-group-sm > .input-group-btn > .btn, -select[multiple].input-group-sm > .form-control, -select[multiple].input-group-sm > .input-group-addon, -select[multiple].input-group-sm > .input-group-btn > .btn { - height: auto; -} -.input-group-addon, -.input-group-btn, -.input-group .form-control { - display: table-cell; -} -.input-group-addon:not(:first-child):not(:last-child), -.input-group-btn:not(:first-child):not(:last-child), -.input-group .form-control:not(:first-child):not(:last-child) { - border-radius: 0; -} -.input-group-addon, -.input-group-btn { - width: 1%; - white-space: nowrap; - vertical-align: middle; -} -.input-group-addon { - padding: 6px 12px; - font-size: 14px; - font-weight: normal; - line-height: 1; - color: #555; - text-align: center; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 4px; -} -.input-group-addon.input-sm { - padding: 5px 10px; - font-size: 12px; - border-radius: 3px; -} -.input-group-addon.input-lg { - padding: 10px 16px; - font-size: 18px; - border-radius: 6px; -} -.input-group-addon input[type="radio"], -.input-group-addon input[type="checkbox"] { - margin-top: 0; -} -.input-group .form-control:first-child, -.input-group-addon:first-child, -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group > .btn, -.input-group-btn:first-child > .dropdown-toggle, -.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), -.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { - border-top-right-radius: 0; - border-bottom-right-radius: 0; -} -.input-group-addon:first-child { - border-right: 0; -} -.input-group .form-control:last-child, -.input-group-addon:last-child, -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group > .btn, -.input-group-btn:last-child > .dropdown-toggle, -.input-group-btn:first-child > .btn:not(:first-child), -.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { - border-top-left-radius: 0; - border-bottom-left-radius: 0; -} -.input-group-addon:last-child { - border-left: 0; -} -.input-group-btn { - position: relative; - font-size: 0; - white-space: nowrap; -} -.input-group-btn > .btn { - position: relative; -} -.input-group-btn > .btn + .btn { - margin-left: -1px; -} -.input-group-btn > .btn:hover, -.input-group-btn > .btn:focus, -.input-group-btn > .btn:active { - z-index: 2; -} -.input-group-btn:first-child > .btn, -.input-group-btn:first-child > .btn-group { - margin-right: -1px; -} -.input-group-btn:last-child > .btn, -.input-group-btn:last-child > .btn-group { - z-index: 2; - margin-left: -1px; -} -.nav { - padding-left: 0; - margin-bottom: 0; - list-style: none; -} -.nav > li { - position: relative; - display: block; -} -.nav > li > a { - position: relative; - display: block; - padding: 10px 15px; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eee; -} -.nav > li.disabled > a { - color: #777; -} -.nav > li.disabled > a:hover, -.nav > li.disabled > a:focus { - color: #777; - text-decoration: none; - cursor: not-allowed; - background-color: transparent; -} -.nav .open > a, -.nav .open > a:hover, -.nav .open > a:focus { - background-color: #eee; - border-color: #337ab7; -} -.nav .nav-divider { - height: 1px; - margin: 9px 0; - overflow: hidden; - background-color: #e5e5e5; -} -.nav > li > a > img { - max-width: none; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - float: left; - margin-bottom: -1px; -} -.nav-tabs > li > a { - margin-right: 2px; - line-height: 1.42857143; - border: 1px solid transparent; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eee #eee #ddd; -} -.nav-tabs > li.active > a, -.nav-tabs > li.active > a:hover, -.nav-tabs > li.active > a:focus { - color: #555; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} -.nav-tabs.nav-justified { - width: 100%; - border-bottom: 0; -} -.nav-tabs.nav-justified > li { - float: none; -} -.nav-tabs.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-tabs.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-tabs.nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs.nav-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs.nav-justified > .active > a, -.nav-tabs.nav-justified > .active > a:hover, -.nav-tabs.nav-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs.nav-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs.nav-justified > .active > a, - .nav-tabs.nav-justified > .active > a:hover, - .nav-tabs.nav-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.nav-pills > li { - float: left; -} -.nav-pills > li > a { - border-radius: 4px; -} -.nav-pills > li + li { - margin-left: 2px; -} -.nav-pills > li.active > a, -.nav-pills > li.active > a:hover, -.nav-pills > li.active > a:focus { - color: #fff; - background-color: #337ab7; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li + li { - margin-top: 2px; - margin-left: 0; -} -.nav-justified { - width: 100%; -} -.nav-justified > li { - float: none; -} -.nav-justified > li > a { - margin-bottom: 5px; - text-align: center; -} -.nav-justified > .dropdown .dropdown-menu { - top: auto; - left: auto; -} -@media (min-width: 768px) { - .nav-justified > li { - display: table-cell; - width: 1%; - } - .nav-justified > li > a { - margin-bottom: 0; - } -} -.nav-tabs-justified { - border-bottom: 0; -} -.nav-tabs-justified > li > a { - margin-right: 0; - border-radius: 4px; -} -.nav-tabs-justified > .active > a, -.nav-tabs-justified > .active > a:hover, -.nav-tabs-justified > .active > a:focus { - border: 1px solid #ddd; -} -@media (min-width: 768px) { - .nav-tabs-justified > li > a { - border-bottom: 1px solid #ddd; - border-radius: 4px 4px 0 0; - } - .nav-tabs-justified > .active > a, - .nav-tabs-justified > .active > a:hover, - .nav-tabs-justified > .active > a:focus { - border-bottom-color: #fff; - } -} -.tab-content > .tab-pane { - display: none; -} -.tab-content > .active { - display: block; -} -.nav-tabs .dropdown-menu { - margin-top: -1px; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar { - position: relative; - min-height: 50px; - margin-bottom: 20px; - border: 1px solid transparent; -} -@media (min-width: 768px) { - .navbar { - border-radius: 4px; - } -} -@media (min-width: 768px) { - .navbar-header { - float: left; - } -} -.navbar-collapse { - padding-right: 15px; - padding-left: 15px; - overflow-x: visible; - -webkit-overflow-scrolling: touch; - border-top: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); -} -.navbar-collapse.in { - overflow-y: auto; -} -@media (min-width: 768px) { - .navbar-collapse { - width: auto; - border-top: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-collapse.collapse { - display: block !important; - height: auto !important; - padding-bottom: 0; - overflow: visible !important; - } - .navbar-collapse.in { - overflow-y: visible; - } - .navbar-fixed-top .navbar-collapse, - .navbar-static-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - padding-right: 0; - padding-left: 0; - } -} -.navbar-fixed-top .navbar-collapse, -.navbar-fixed-bottom .navbar-collapse { - max-height: 340px; -} -@media (max-device-width: 480px) and (orientation: landscape) { - .navbar-fixed-top .navbar-collapse, - .navbar-fixed-bottom .navbar-collapse { - max-height: 200px; - } -} -.container > .navbar-header, -.container-fluid > .navbar-header, -.container > .navbar-collapse, -.container-fluid > .navbar-collapse { - margin-right: -15px; - margin-left: -15px; -} -@media (min-width: 768px) { - .container > .navbar-header, - .container-fluid > .navbar-header, - .container > .navbar-collapse, - .container-fluid > .navbar-collapse { - margin-right: 0; - margin-left: 0; - } -} -.navbar-static-top { - z-index: 1000; - border-width: 0 0 1px; -} -@media (min-width: 768px) { - .navbar-static-top { - border-radius: 0; - } -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; -} -@media (min-width: 768px) { - .navbar-fixed-top, - .navbar-fixed-bottom { - border-radius: 0; - } -} -.navbar-fixed-top { - top: 0; - border-width: 0 0 1px; -} -.navbar-fixed-bottom { - bottom: 0; - margin-bottom: 0; - border-width: 1px 0 0; -} -.navbar-brand { - float: left; - height: 50px; - padding: 15px 15px; - font-size: 18px; - line-height: 20px; -} -.navbar-brand:hover, -.navbar-brand:focus { - text-decoration: none; -} -.navbar-brand > img { - display: block; -} -@media (min-width: 768px) { - .navbar > .container .navbar-brand, - .navbar > .container-fluid .navbar-brand { - margin-left: -15px; - } -} -.navbar-toggle { - position: relative; - float: right; - padding: 9px 10px; - margin-top: 8px; - margin-right: 15px; - margin-bottom: 8px; - background-color: transparent; - background-image: none; - border: 1px solid transparent; - border-radius: 4px; -} -.navbar-toggle:focus { - outline: 0; -} -.navbar-toggle .icon-bar { - display: block; - width: 22px; - height: 2px; - border-radius: 1px; -} -.navbar-toggle .icon-bar + .icon-bar { - margin-top: 4px; -} -@media (min-width: 768px) { - .navbar-toggle { - display: none; - } -} -.navbar-nav { - margin: 7.5px -15px; -} -.navbar-nav > li > a { - padding-top: 10px; - padding-bottom: 10px; - line-height: 20px; -} -@media (max-width: 767px) { - .navbar-nav .open .dropdown-menu { - position: static; - float: none; - width: auto; - margin-top: 0; - background-color: transparent; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } - .navbar-nav .open .dropdown-menu > li > a, - .navbar-nav .open .dropdown-menu .dropdown-header { - padding: 5px 15px 5px 25px; - } - .navbar-nav .open .dropdown-menu > li > a { - line-height: 20px; - } - .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-nav .open .dropdown-menu > li > a:focus { - background-image: none; - } -} -@media (min-width: 768px) { - .navbar-nav { - float: left; - margin: 0; - } - .navbar-nav > li { - float: left; - } - .navbar-nav > li > a { - padding-top: 15px; - padding-bottom: 15px; - } -} -.navbar-form { - padding: 10px 15px; - margin-top: 8px; - margin-right: -15px; - margin-bottom: 8px; - margin-left: -15px; - border-top: 1px solid transparent; - border-bottom: 1px solid transparent; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); -} -@media (min-width: 768px) { - .navbar-form .form-group { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .form-control { - display: inline-block; - width: auto; - vertical-align: middle; - } - .navbar-form .form-control-static { - display: inline-block; - } - .navbar-form .input-group { - display: inline-table; - vertical-align: middle; - } - .navbar-form .input-group .input-group-addon, - .navbar-form .input-group .input-group-btn, - .navbar-form .input-group .form-control { - width: auto; - } - .navbar-form .input-group > .form-control { - width: 100%; - } - .navbar-form .control-label { - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio, - .navbar-form .checkbox { - display: inline-block; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .navbar-form .radio label, - .navbar-form .checkbox label { - padding-left: 0; - } - .navbar-form .radio input[type="radio"], - .navbar-form .checkbox input[type="checkbox"] { - position: relative; - margin-left: 0; - } - .navbar-form .has-feedback .form-control-feedback { - top: 0; - } -} -@media (max-width: 767px) { - .navbar-form .form-group { - margin-bottom: 5px; - } - .navbar-form .form-group:last-child { - margin-bottom: 0; - } -} -@media (min-width: 768px) { - .navbar-form { - width: auto; - padding-top: 0; - padding-bottom: 0; - margin-right: 0; - margin-left: 0; - border: 0; - -webkit-box-shadow: none; - box-shadow: none; - } -} -.navbar-nav > li > .dropdown-menu { - margin-top: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { - margin-bottom: 0; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; -} -.navbar-btn { - margin-top: 8px; - margin-bottom: 8px; -} -.navbar-btn.btn-sm { - margin-top: 10px; - margin-bottom: 10px; -} -.navbar-btn.btn-xs { - margin-top: 14px; - margin-bottom: 14px; -} -.navbar-text { - margin-top: 15px; - margin-bottom: 15px; -} -@media (min-width: 768px) { - .navbar-text { - float: left; - margin-right: 15px; - margin-left: 15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - margin-right: -15px; - } - .navbar-right ~ .navbar-right { - margin-right: 0; - } -} -.navbar-default { - background-color: #f8f8f8; - border-color: #e7e7e7; -} -.navbar-default .navbar-brand { - color: #777; -} -.navbar-default .navbar-brand:hover, -.navbar-default .navbar-brand:focus { - color: #5e5e5e; - background-color: transparent; -} -.navbar-default .navbar-text { - color: #777; -} -.navbar-default .navbar-nav > li > a { - color: #777; -} -.navbar-default .navbar-nav > li > a:hover, -.navbar-default .navbar-nav > li > a:focus { - color: #333; - background-color: transparent; -} -.navbar-default .navbar-nav > .active > a, -.navbar-default .navbar-nav > .active > a:hover, -.navbar-default .navbar-nav > .active > a:focus { - color: #555; - background-color: #e7e7e7; -} -.navbar-default .navbar-nav > .disabled > a, -.navbar-default .navbar-nav > .disabled > a:hover, -.navbar-default .navbar-nav > .disabled > a:focus { - color: #ccc; - background-color: transparent; -} -.navbar-default .navbar-toggle { - border-color: #ddd; -} -.navbar-default .navbar-toggle:hover, -.navbar-default .navbar-toggle:focus { - background-color: #ddd; -} -.navbar-default .navbar-toggle .icon-bar { - background-color: #888; -} -.navbar-default .navbar-collapse, -.navbar-default .navbar-form { - border-color: #e7e7e7; -} -.navbar-default .navbar-nav > .open > a, -.navbar-default .navbar-nav > .open > a:hover, -.navbar-default .navbar-nav > .open > a:focus { - color: #555; - background-color: #e7e7e7; -} -@media (max-width: 767px) { - .navbar-default .navbar-nav .open .dropdown-menu > li > a { - color: #777; - } - .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { - color: #333; - background-color: transparent; - } - .navbar-default .navbar-nav .open .dropdown-menu > .active > a, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #555; - background-color: #e7e7e7; - } - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #ccc; - background-color: transparent; - } -} -.navbar-default .navbar-link { - color: #777; -} -.navbar-default .navbar-link:hover { - color: #333; -} -.navbar-default .btn-link { - color: #777; -} -.navbar-default .btn-link:hover, -.navbar-default .btn-link:focus { - color: #333; -} -.navbar-default .btn-link[disabled]:hover, -fieldset[disabled] .navbar-default .btn-link:hover, -.navbar-default .btn-link[disabled]:focus, -fieldset[disabled] .navbar-default .btn-link:focus { - color: #ccc; -} -.navbar-inverse { - background-color: #222; - border-color: #080808; -} -.navbar-inverse .navbar-brand { - color: #9d9d9d; -} -.navbar-inverse .navbar-brand:hover, -.navbar-inverse .navbar-brand:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-text { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a { - color: #9d9d9d; -} -.navbar-inverse .navbar-nav > li > a:hover, -.navbar-inverse .navbar-nav > li > a:focus { - color: #fff; - background-color: transparent; -} -.navbar-inverse .navbar-nav > .active > a, -.navbar-inverse .navbar-nav > .active > a:hover, -.navbar-inverse .navbar-nav > .active > a:focus { - color: #fff; - background-color: #080808; -} -.navbar-inverse .navbar-nav > .disabled > a, -.navbar-inverse .navbar-nav > .disabled > a:hover, -.navbar-inverse .navbar-nav > .disabled > a:focus { - color: #444; - background-color: transparent; -} -.navbar-inverse .navbar-toggle { - border-color: #333; -} -.navbar-inverse .navbar-toggle:hover, -.navbar-inverse .navbar-toggle:focus { - background-color: #333; -} -.navbar-inverse .navbar-toggle .icon-bar { - background-color: #fff; -} -.navbar-inverse .navbar-collapse, -.navbar-inverse .navbar-form { - border-color: #101010; -} -.navbar-inverse .navbar-nav > .open > a, -.navbar-inverse .navbar-nav > .open > a:hover, -.navbar-inverse .navbar-nav > .open > a:focus { - color: #fff; - background-color: #080808; -} -@media (max-width: 767px) { - .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { - border-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu .divider { - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #9d9d9d; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { - color: #fff; - background-color: transparent; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { - color: #fff; - background-color: #080808; - } - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, - .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { - color: #444; - background-color: transparent; - } -} -.navbar-inverse .navbar-link { - color: #9d9d9d; -} -.navbar-inverse .navbar-link:hover { - color: #fff; -} -.navbar-inverse .btn-link { - color: #9d9d9d; -} -.navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link:focus { - color: #fff; -} -.navbar-inverse .btn-link[disabled]:hover, -fieldset[disabled] .navbar-inverse .btn-link:hover, -.navbar-inverse .btn-link[disabled]:focus, -fieldset[disabled] .navbar-inverse .btn-link:focus { - color: #444; -} -.breadcrumb { - padding: 8px 15px; - margin-bottom: 20px; - list-style: none; - background-color: #f5f5f5; - border-radius: 4px; -} -.breadcrumb > li { - display: inline-block; -} -.breadcrumb > li + li:before { - padding: 0 5px; - color: #ccc; - content: "/\00a0"; -} -.breadcrumb > .active { - color: #777; -} -.pagination { - display: inline-block; - padding-left: 0; - margin: 20px 0; - border-radius: 4px; -} -.pagination > li { - display: inline; -} -.pagination > li > a, -.pagination > li > span { - position: relative; - float: left; - padding: 6px 12px; - margin-left: -1px; - line-height: 1.42857143; - color: #337ab7; - text-decoration: none; - background-color: #fff; - border: 1px solid #ddd; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - margin-left: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} -.pagination > li > a:hover, -.pagination > li > span:hover, -.pagination > li > a:focus, -.pagination > li > span:focus { - z-index: 2; - color: #23527c; - background-color: #eee; - border-color: #ddd; -} -.pagination > .active > a, -.pagination > .active > span, -.pagination > .active > a:hover, -.pagination > .active > span:hover, -.pagination > .active > a:focus, -.pagination > .active > span:focus { - z-index: 3; - color: #fff; - cursor: default; - background-color: #337ab7; - border-color: #337ab7; -} -.pagination > .disabled > span, -.pagination > .disabled > span:hover, -.pagination > .disabled > span:focus, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: #777; - cursor: not-allowed; - background-color: #fff; - border-color: #ddd; -} -.pagination-lg > li > a, -.pagination-lg > li > span { - padding: 10px 16px; - font-size: 18px; - line-height: 1.3333333; -} -.pagination-lg > li:first-child > a, -.pagination-lg > li:first-child > span { - border-top-left-radius: 6px; - border-bottom-left-radius: 6px; -} -.pagination-lg > li:last-child > a, -.pagination-lg > li:last-child > span { - border-top-right-radius: 6px; - border-bottom-right-radius: 6px; -} -.pagination-sm > li > a, -.pagination-sm > li > span { - padding: 5px 10px; - font-size: 12px; - line-height: 1.5; -} -.pagination-sm > li:first-child > a, -.pagination-sm > li:first-child > span { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -.pagination-sm > li:last-child > a, -.pagination-sm > li:last-child > span { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.pager { - padding-left: 0; - margin: 20px 0; - text-align: center; - list-style: none; -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 15px; -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #eee; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #777; - cursor: not-allowed; - background-color: #fff; -} -.label { - display: inline; - padding: .2em .6em .3em; - font-size: 75%; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -a.label:hover, -a.label:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.label:empty { - display: none; -} -.btn .label { - position: relative; - top: -1px; -} -.label-default { - background-color: #777; -} -.label-default[href]:hover, -.label-default[href]:focus { - background-color: #5e5e5e; -} -.label-primary { - background-color: #337ab7; -} -.label-primary[href]:hover, -.label-primary[href]:focus { - background-color: #286090; -} -.label-success { - background-color: #5cb85c; -} -.label-success[href]:hover, -.label-success[href]:focus { - background-color: #449d44; -} -.label-info { - background-color: #5bc0de; -} -.label-info[href]:hover, -.label-info[href]:focus { - background-color: #31b0d5; -} -.label-warning { - background-color: #f0ad4e; -} -.label-warning[href]:hover, -.label-warning[href]:focus { - background-color: #ec971f; -} -.label-danger { - background-color: #d9534f; -} -.label-danger[href]:hover, -.label-danger[href]:focus { - background-color: #c9302c; -} -.badge { - display: inline-block; - min-width: 10px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - line-height: 1; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: middle; - background-color: #777; - border-radius: 10px; -} -.badge:empty { - display: none; -} -.btn .badge { - position: relative; - top: -1px; -} -.btn-xs .badge, -.btn-group-xs > .btn .badge { - top: 0; - padding: 1px 5px; -} -a.badge:hover, -a.badge:focus { - color: #fff; - text-decoration: none; - cursor: pointer; -} -.list-group-item.active > .badge, -.nav-pills > .active > a > .badge { - color: #337ab7; - background-color: #fff; -} -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -.nav-pills > li > a > .badge { - margin-left: 3px; -} -.jumbotron { - padding-top: 30px; - padding-bottom: 30px; - margin-bottom: 30px; - color: inherit; - background-color: #eee; -} -.jumbotron h1, -.jumbotron .h1 { - color: inherit; -} -.jumbotron p { - margin-bottom: 15px; - font-size: 21px; - font-weight: 200; -} -.jumbotron > hr { - border-top-color: #d5d5d5; -} -.container .jumbotron, -.container-fluid .jumbotron { - padding-right: 15px; - padding-left: 15px; - border-radius: 6px; -} -.jumbotron .container { - max-width: 100%; -} -@media screen and (min-width: 768px) { - .jumbotron { - padding-top: 48px; - padding-bottom: 48px; - } - .container .jumbotron, - .container-fluid .jumbotron { - padding-right: 60px; - padding-left: 60px; - } - .jumbotron h1, - .jumbotron .h1 { - font-size: 63px; - } -} -.thumbnail { - display: block; - padding: 4px; - margin-bottom: 20px; - line-height: 1.42857143; - background-color: #fff; - border: 1px solid #ddd; - border-radius: 4px; - -webkit-transition: border .2s ease-in-out; - -o-transition: border .2s ease-in-out; - transition: border .2s ease-in-out; -} -.thumbnail > img, -.thumbnail a > img { - margin-right: auto; - margin-left: auto; -} -a.thumbnail:hover, -a.thumbnail:focus, -a.thumbnail.active { - border-color: #337ab7; -} -.thumbnail .caption { - padding: 9px; - color: #333; -} -.alert { - padding: 15px; - margin-bottom: 20px; - border: 1px solid transparent; - border-radius: 4px; -} -.alert h4 { - margin-top: 0; - color: inherit; -} -.alert .alert-link { - font-weight: bold; -} -.alert > p, -.alert > ul { - margin-bottom: 0; -} -.alert > p + p { - margin-top: 5px; -} -.alert-dismissable, -.alert-dismissible { - padding-right: 35px; -} -.alert-dismissable .close, -.alert-dismissible .close { - position: relative; - top: -2px; - right: -21px; - color: inherit; -} -.alert-success { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success hr { - border-top-color: #c9e2b3; -} -.alert-success .alert-link { - color: #2b542c; -} -.alert-info { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info hr { - border-top-color: #a6e1ec; -} -.alert-info .alert-link { - color: #245269; -} -.alert-warning { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.alert-warning hr { - border-top-color: #f7e1b5; -} -.alert-warning .alert-link { - color: #66512c; -} -.alert-danger { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.alert-danger hr { - border-top-color: #e4b9c0; -} -.alert-danger .alert-link { - color: #843534; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@-o-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f5f5f5; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); -} -.progress-bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - line-height: 20px; - color: #fff; - text-align: center; - background-color: #337ab7; - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); - -webkit-transition: width .6s ease; - -o-transition: width .6s ease; - transition: width .6s ease; -} -.progress-striped .progress-bar, -.progress-bar-striped { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .progress-bar, -.progress-bar.active { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-bar-success { - background-color: #5cb85c; -} -.progress-striped .progress-bar-success { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-info { - background-color: #5bc0de; -} -.progress-striped .progress-bar-info { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-warning { - background-color: #f0ad4e; -} -.progress-striped .progress-bar-warning { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.progress-bar-danger { - background-color: #d9534f; -} -.progress-striped .progress-bar-danger { - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); -} -.media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media-body { - width: 10000px; -} -.media-object { - display: block; -} -.media-object.img-thumbnail { - max-width: none; -} -.media-right, -.media > .pull-right { - padding-left: 10px; -} -.media-left, -.media > .pull-left { - padding-right: 10px; -} -.media-left, -.media-right, -.media-body { - display: table-cell; - vertical-align: top; -} -.media-middle { - vertical-align: middle; -} -.media-bottom { - vertical-align: bottom; -} -.media-heading { - margin-top: 0; - margin-bottom: 5px; -} -.media-list { - padding-left: 0; - list-style: none; -} -.list-group { - padding-left: 0; - margin-bottom: 20px; -} -.list-group-item { - position: relative; - display: block; - padding: 10px 15px; - margin-bottom: -1px; - background-color: #fff; - border: 1px solid #ddd; -} -.list-group-item:first-child { - border-top-left-radius: 4px; - border-top-right-radius: 4px; -} -.list-group-item:last-child { - margin-bottom: 0; - border-bottom-right-radius: 4px; - border-bottom-left-radius: 4px; -} -a.list-group-item, -button.list-group-item { - color: #555; -} -a.list-group-item .list-group-item-heading, -button.list-group-item .list-group-item-heading { - color: #333; -} -a.list-group-item:hover, -button.list-group-item:hover, -a.list-group-item:focus, -button.list-group-item:focus { - color: #555; - text-decoration: none; - background-color: #f5f5f5; -} -button.list-group-item { - width: 100%; - text-align: left; -} -.list-group-item.disabled, -.list-group-item.disabled:hover, -.list-group-item.disabled:focus { - color: #777; - cursor: not-allowed; - background-color: #eee; -} -.list-group-item.disabled .list-group-item-heading, -.list-group-item.disabled:hover .list-group-item-heading, -.list-group-item.disabled:focus .list-group-item-heading { - color: inherit; -} -.list-group-item.disabled .list-group-item-text, -.list-group-item.disabled:hover .list-group-item-text, -.list-group-item.disabled:focus .list-group-item-text { - color: #777; -} -.list-group-item.active, -.list-group-item.active:hover, -.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.list-group-item.active .list-group-item-heading, -.list-group-item.active:hover .list-group-item-heading, -.list-group-item.active:focus .list-group-item-heading, -.list-group-item.active .list-group-item-heading > small, -.list-group-item.active:hover .list-group-item-heading > small, -.list-group-item.active:focus .list-group-item-heading > small, -.list-group-item.active .list-group-item-heading > .small, -.list-group-item.active:hover .list-group-item-heading > .small, -.list-group-item.active:focus .list-group-item-heading > .small { - color: inherit; -} -.list-group-item.active .list-group-item-text, -.list-group-item.active:hover .list-group-item-text, -.list-group-item.active:focus .list-group-item-text { - color: #c7ddef; -} -.list-group-item-success { - color: #3c763d; - background-color: #dff0d8; -} -a.list-group-item-success, -button.list-group-item-success { - color: #3c763d; -} -a.list-group-item-success .list-group-item-heading, -button.list-group-item-success .list-group-item-heading { - color: inherit; -} -a.list-group-item-success:hover, -button.list-group-item-success:hover, -a.list-group-item-success:focus, -button.list-group-item-success:focus { - color: #3c763d; - background-color: #d0e9c6; -} -a.list-group-item-success.active, -button.list-group-item-success.active, -a.list-group-item-success.active:hover, -button.list-group-item-success.active:hover, -a.list-group-item-success.active:focus, -button.list-group-item-success.active:focus { - color: #fff; - background-color: #3c763d; - border-color: #3c763d; -} -.list-group-item-info { - color: #31708f; - background-color: #d9edf7; -} -a.list-group-item-info, -button.list-group-item-info { - color: #31708f; -} -a.list-group-item-info .list-group-item-heading, -button.list-group-item-info .list-group-item-heading { - color: inherit; -} -a.list-group-item-info:hover, -button.list-group-item-info:hover, -a.list-group-item-info:focus, -button.list-group-item-info:focus { - color: #31708f; - background-color: #c4e3f3; -} -a.list-group-item-info.active, -button.list-group-item-info.active, -a.list-group-item-info.active:hover, -button.list-group-item-info.active:hover, -a.list-group-item-info.active:focus, -button.list-group-item-info.active:focus { - color: #fff; - background-color: #31708f; - border-color: #31708f; -} -.list-group-item-warning { - color: #8a6d3b; - background-color: #fcf8e3; -} -a.list-group-item-warning, -button.list-group-item-warning { - color: #8a6d3b; -} -a.list-group-item-warning .list-group-item-heading, -button.list-group-item-warning .list-group-item-heading { - color: inherit; -} -a.list-group-item-warning:hover, -button.list-group-item-warning:hover, -a.list-group-item-warning:focus, -button.list-group-item-warning:focus { - color: #8a6d3b; - background-color: #faf2cc; -} -a.list-group-item-warning.active, -button.list-group-item-warning.active, -a.list-group-item-warning.active:hover, -button.list-group-item-warning.active:hover, -a.list-group-item-warning.active:focus, -button.list-group-item-warning.active:focus { - color: #fff; - background-color: #8a6d3b; - border-color: #8a6d3b; -} -.list-group-item-danger { - color: #a94442; - background-color: #f2dede; -} -a.list-group-item-danger, -button.list-group-item-danger { - color: #a94442; -} -a.list-group-item-danger .list-group-item-heading, -button.list-group-item-danger .list-group-item-heading { - color: inherit; -} -a.list-group-item-danger:hover, -button.list-group-item-danger:hover, -a.list-group-item-danger:focus, -button.list-group-item-danger:focus { - color: #a94442; - background-color: #ebcccc; -} -a.list-group-item-danger.active, -button.list-group-item-danger.active, -a.list-group-item-danger.active:hover, -button.list-group-item-danger.active:hover, -a.list-group-item-danger.active:focus, -button.list-group-item-danger.active:focus { - color: #fff; - background-color: #a94442; - border-color: #a94442; -} -.list-group-item-heading { - margin-top: 0; - margin-bottom: 5px; -} -.list-group-item-text { - margin-bottom: 0; - line-height: 1.3; -} -.panel { - margin-bottom: 20px; - background-color: #fff; - border: 1px solid transparent; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: 0 1px 1px rgba(0, 0, 0, .05); -} -.panel-body { - padding: 15px; -} -.panel-heading { - padding: 10px 15px; - border-bottom: 1px solid transparent; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel-heading > .dropdown .dropdown-toggle { - color: inherit; -} -.panel-title { - margin-top: 0; - margin-bottom: 0; - font-size: 16px; - color: inherit; -} -.panel-title > a, -.panel-title > small, -.panel-title > .small, -.panel-title > small > a, -.panel-title > .small > a { - color: inherit; -} -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .list-group, -.panel > .panel-collapse > .list-group { - margin-bottom: 0; -} -.panel > .list-group .list-group-item, -.panel > .panel-collapse > .list-group .list-group-item { - border-width: 1px 0; - border-radius: 0; -} -.panel > .list-group:first-child .list-group-item:first-child, -.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { - border-top: 0; - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .list-group:last-child .list-group-item:last-child, -.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { - border-bottom: 0; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { - border-top-left-radius: 0; - border-top-right-radius: 0; -} -.panel-heading + .list-group .list-group-item:first-child { - border-top-width: 0; -} -.list-group + .panel-footer { - border-top-width: 0; -} -.panel > .table, -.panel > .table-responsive > .table, -.panel > .panel-collapse > .table { - margin-bottom: 0; -} -.panel > .table caption, -.panel > .table-responsive > .table caption, -.panel > .panel-collapse > .table caption { - padding-right: 15px; - padding-left: 15px; -} -.panel > .table:first-child, -.panel > .table-responsive:first-child > .table:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { - border-top-left-radius: 3px; - border-top-right-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { - border-top-left-radius: 3px; -} -.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, -.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, -.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, -.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { - border-top-right-radius: 3px; -} -.panel > .table:last-child, -.panel > .table-responsive:last-child > .table:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { - border-bottom-left-radius: 3px; -} -.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, -.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, -.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, -.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { - border-bottom-right-radius: 3px; -} -.panel > .panel-body + .table, -.panel > .panel-body + .table-responsive, -.panel > .table + .panel-body, -.panel > .table-responsive + .panel-body { - border-top: 1px solid #ddd; -} -.panel > .table > tbody:first-child > tr:first-child th, -.panel > .table > tbody:first-child > tr:first-child td { - border-top: 0; -} -.panel > .table-bordered, -.panel > .table-responsive > .table-bordered { - border: 0; -} -.panel > .table-bordered > thead > tr > th:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, -.panel > .table-bordered > tbody > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, -.panel > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, -.panel > .table-bordered > thead > tr > td:first-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, -.panel > .table-bordered > tbody > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, -.panel > .table-bordered > tfoot > tr > td:first-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { - border-left: 0; -} -.panel > .table-bordered > thead > tr > th:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, -.panel > .table-bordered > tbody > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, -.panel > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, -.panel > .table-bordered > thead > tr > td:last-child, -.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, -.panel > .table-bordered > tbody > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, -.panel > .table-bordered > tfoot > tr > td:last-child, -.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { - border-right: 0; -} -.panel > .table-bordered > thead > tr:first-child > td, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, -.panel > .table-bordered > tbody > tr:first-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, -.panel > .table-bordered > thead > tr:first-child > th, -.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, -.panel > .table-bordered > tbody > tr:first-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { - border-bottom: 0; -} -.panel > .table-bordered > tbody > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, -.panel > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, -.panel > .table-bordered > tbody > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, -.panel > .table-bordered > tfoot > tr:last-child > th, -.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { - border-bottom: 0; -} -.panel > .table-responsive { - margin-bottom: 0; - border: 0; -} -.panel-group { - margin-bottom: 20px; -} -.panel-group .panel { - margin-bottom: 0; - border-radius: 4px; -} -.panel-group .panel + .panel { - margin-top: 5px; -} -.panel-group .panel-heading { - border-bottom: 0; -} -.panel-group .panel-heading + .panel-collapse > .panel-body, -.panel-group .panel-heading + .panel-collapse > .list-group { - border-top: 1px solid #ddd; -} -.panel-group .panel-footer { - border-top: 0; -} -.panel-group .panel-footer + .panel-collapse .panel-body { - border-bottom: 1px solid #ddd; -} -.panel-default { - border-color: #ddd; -} -.panel-default > .panel-heading { - color: #333; - background-color: #f5f5f5; - border-color: #ddd; -} -.panel-default > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ddd; -} -.panel-default > .panel-heading .badge { - color: #f5f5f5; - background-color: #333; -} -.panel-default > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ddd; -} -.panel-primary { - border-color: #337ab7; -} -.panel-primary > .panel-heading { - color: #fff; - background-color: #337ab7; - border-color: #337ab7; -} -.panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #337ab7; -} -.panel-primary > .panel-heading .badge { - color: #337ab7; - background-color: #fff; -} -.panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #337ab7; -} -.panel-success { - border-color: #d6e9c6; -} -.panel-success > .panel-heading { - color: #3c763d; - background-color: #dff0d8; - border-color: #d6e9c6; -} -.panel-success > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #d6e9c6; -} -.panel-success > .panel-heading .badge { - color: #dff0d8; - background-color: #3c763d; -} -.panel-success > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #d6e9c6; -} -.panel-info { - border-color: #bce8f1; -} -.panel-info > .panel-heading { - color: #31708f; - background-color: #d9edf7; - border-color: #bce8f1; -} -.panel-info > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #bce8f1; -} -.panel-info > .panel-heading .badge { - color: #d9edf7; - background-color: #31708f; -} -.panel-info > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #bce8f1; -} -.panel-warning { - border-color: #faebcc; -} -.panel-warning > .panel-heading { - color: #8a6d3b; - background-color: #fcf8e3; - border-color: #faebcc; -} -.panel-warning > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #faebcc; -} -.panel-warning > .panel-heading .badge { - color: #fcf8e3; - background-color: #8a6d3b; -} -.panel-warning > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #faebcc; -} -.panel-danger { - border-color: #ebccd1; -} -.panel-danger > .panel-heading { - color: #a94442; - background-color: #f2dede; - border-color: #ebccd1; -} -.panel-danger > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #ebccd1; -} -.panel-danger > .panel-heading .badge { - color: #f2dede; - background-color: #a94442; -} -.panel-danger > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #ebccd1; -} -.embed-responsive { - position: relative; - display: block; - height: 0; - padding: 0; - overflow: hidden; -} -.embed-responsive .embed-responsive-item, -.embed-responsive iframe, -.embed-responsive embed, -.embed-responsive object, -.embed-responsive video { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 100%; - height: 100%; - border: 0; -} -.embed-responsive-16by9 { - padding-bottom: 56.25%; -} -.embed-responsive-4by3 { - padding-bottom: 75%; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, .15); -} -.well-lg { - padding: 24px; - border-radius: 6px; -} -.well-sm { - padding: 9px; - border-radius: 3px; -} -.close { - float: right; - font-size: 21px; - font-weight: bold; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - filter: alpha(opacity=20); - opacity: .2; -} -.close:hover, -.close:focus { - color: #000; - text-decoration: none; - cursor: pointer; - filter: alpha(opacity=50); - opacity: .5; -} -button.close { - -webkit-appearance: none; - padding: 0; - cursor: pointer; - background: transparent; - border: 0; -} -.modal-open { - overflow: hidden; -} -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - -webkit-overflow-scrolling: touch; - outline: 0; -} -.modal.fade .modal-dialog { - -webkit-transition: -webkit-transform .3s ease-out; - -o-transition: -o-transform .3s ease-out; - transition: transform .3s ease-out; - -webkit-transform: translate(0, -25%); - -ms-transform: translate(0, -25%); - -o-transform: translate(0, -25%); - transform: translate(0, -25%); -} -.modal.in .modal-dialog { - -webkit-transform: translate(0, 0); - -ms-transform: translate(0, 0); - -o-transform: translate(0, 0); - transform: translate(0, 0); -} -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto; -} -.modal-dialog { - position: relative; - width: auto; - margin: 10px; -} -.modal-content { - position: relative; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - outline: 0; - -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); - box-shadow: 0 3px 9px rgba(0, 0, 0, .5); -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000; -} -.modal-backdrop.fade { - filter: alpha(opacity=0); - opacity: 0; -} -.modal-backdrop.in { - filter: alpha(opacity=50); - opacity: .5; -} -.modal-header { - padding: 15px; - border-bottom: 1px solid #e5e5e5; -} -.modal-header .close { - margin-top: -2px; -} -.modal-title { - margin: 0; - line-height: 1.42857143; -} -.modal-body { - position: relative; - padding: 15px; -} -.modal-footer { - padding: 15px; - text-align: right; - border-top: 1px solid #e5e5e5; -} -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} -.modal-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} -@media (min-width: 768px) { - .modal-dialog { - width: 600px; - margin: 30px auto; - } - .modal-content { - -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - box-shadow: 0 5px 15px rgba(0, 0, 0, .5); - } - .modal-sm { - width: 300px; - } -} -@media (min-width: 992px) { - .modal-lg { - width: 900px; - } -} -.tooltip { - position: absolute; - z-index: 1070; - display: block; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - filter: alpha(opacity=0); - opacity: 0; - - line-break: auto; -} -.tooltip.in { - filter: alpha(opacity=90); - opacity: .9; -} -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #fff; - text-align: center; - background-color: #000; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-left .tooltip-arrow { - right: 5px; - bottom: 0; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.top-right .tooltip-arrow { - bottom: 0; - left: 5px; - margin-bottom: -5px; - border-width: 5px 5px 0; - border-top-color: #000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-width: 5px 5px 5px 0; - border-right-color: #000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-width: 5px 0 5px 5px; - border-left-color: #000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-left .tooltip-arrow { - top: 0; - right: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.tooltip.bottom-right .tooltip-arrow { - top: 0; - left: 5px; - margin-top: -5px; - border-width: 0 5px 5px; - border-bottom-color: #000; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1060; - display: none; - max-width: 276px; - padding: 1px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - font-style: normal; - font-weight: normal; - line-height: 1.42857143; - text-align: left; - text-align: start; - text-decoration: none; - text-shadow: none; - text-transform: none; - letter-spacing: normal; - word-break: normal; - word-spacing: normal; - word-wrap: normal; - white-space: normal; - background-color: #fff; - -webkit-background-clip: padding-box; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - box-shadow: 0 5px 10px rgba(0, 0, 0, .2); - - line-break: auto; -} -.popover.top { - margin-top: -10px; -} -.popover.right { - margin-left: 10px; -} -.popover.bottom { - margin-top: 10px; -} -.popover.left { - margin-left: -10px; -} -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - border-radius: 5px 5px 0 0; -} -.popover-content { - padding: 9px 14px; -} -.popover > .arrow, -.popover > .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover > .arrow { - border-width: 11px; -} -.popover > .arrow:after { - content: ""; - border-width: 10px; -} -.popover.top > .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, .25); - border-bottom-width: 0; -} -.popover.top > .arrow:after { - bottom: 1px; - margin-left: -10px; - content: " "; - border-top-color: #fff; - border-bottom-width: 0; -} -.popover.right > .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, .25); - border-left-width: 0; -} -.popover.right > .arrow:after { - bottom: -10px; - left: 1px; - content: " "; - border-right-color: #fff; - border-left-width: 0; -} -.popover.bottom > .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-top-width: 0; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, .25); -} -.popover.bottom > .arrow:after { - top: 1px; - margin-left: -10px; - content: " "; - border-top-width: 0; - border-bottom-color: #fff; -} -.popover.left > .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-right-width: 0; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, .25); -} -.popover.left > .arrow:after { - right: 1px; - bottom: -10px; - content: " "; - border-right-width: 0; - border-left-color: #fff; -} -.carousel { - position: relative; -} -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: .6s ease-in-out left; - -o-transition: .6s ease-in-out left; - transition: .6s ease-in-out left; -} -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - line-height: 1; -} -@media all and (transform-3d), (-webkit-transform-3d) { - .carousel-inner > .item { - -webkit-transition: -webkit-transform .6s ease-in-out; - -o-transition: -o-transform .6s ease-in-out; - transition: transform .6s ease-in-out; - - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - -webkit-perspective: 1000px; - perspective: 1000px; - } - .carousel-inner > .item.next, - .carousel-inner > .item.active.right { - left: 0; - -webkit-transform: translate3d(100%, 0, 0); - transform: translate3d(100%, 0, 0); - } - .carousel-inner > .item.prev, - .carousel-inner > .item.active.left { - left: 0; - -webkit-transform: translate3d(-100%, 0, 0); - transform: translate3d(-100%, 0, 0); - } - .carousel-inner > .item.next.left, - .carousel-inner > .item.prev.right, - .carousel-inner > .item.active { - left: 0; - -webkit-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - } -} -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} -.carousel-inner > .active { - left: 0; -} -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel-inner > .next { - left: 100%; -} -.carousel-inner > .prev { - left: -100%; -} -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} -.carousel-inner > .active.left { - left: -100%; -} -.carousel-inner > .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 0; - bottom: 0; - left: 0; - width: 15%; - font-size: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); - background-color: rgba(0, 0, 0, 0); - filter: alpha(opacity=50); - opacity: .5; -} -.carousel-control.left { - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control.right { - right: 0; - left: auto; - background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); - background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); - background-repeat: repeat-x; -} -.carousel-control:hover, -.carousel-control:focus { - color: #fff; - text-decoration: none; - filter: alpha(opacity=90); - outline: 0; - opacity: .9; -} -.carousel-control .icon-prev, -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-left, -.carousel-control .glyphicon-chevron-right { - position: absolute; - top: 50%; - z-index: 5; - display: inline-block; - margin-top: -10px; -} -.carousel-control .icon-prev, -.carousel-control .glyphicon-chevron-left { - left: 50%; - margin-left: -10px; -} -.carousel-control .icon-next, -.carousel-control .glyphicon-chevron-right { - right: 50%; - margin-right: -10px; -} -.carousel-control .icon-prev, -.carousel-control .icon-next { - width: 20px; - height: 20px; - font-family: serif; - line-height: 1; -} -.carousel-control .icon-prev:before { - content: '\2039'; -} -.carousel-control .icon-next:before { - content: '\203a'; -} -.carousel-indicators { - position: absolute; - bottom: 10px; - left: 50%; - z-index: 15; - width: 60%; - padding-left: 0; - margin-left: -30%; - text-align: center; - list-style: none; -} -.carousel-indicators li { - display: inline-block; - width: 10px; - height: 10px; - margin: 1px; - text-indent: -999px; - cursor: pointer; - background-color: #000 \9; - background-color: rgba(0, 0, 0, 0); - border: 1px solid #fff; - border-radius: 10px; -} -.carousel-indicators .active { - width: 12px; - height: 12px; - margin: 0; - background-color: #fff; -} -.carousel-caption { - position: absolute; - right: 15%; - bottom: 20px; - left: 15%; - z-index: 10; - padding-top: 20px; - padding-bottom: 20px; - color: #fff; - text-align: center; - text-shadow: 0 1px 2px rgba(0, 0, 0, .6); -} -.carousel-caption .btn { - text-shadow: none; -} -@media screen and (min-width: 768px) { - .carousel-control .glyphicon-chevron-left, - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-prev, - .carousel-control .icon-next { - width: 30px; - height: 30px; - margin-top: -10px; - font-size: 30px; - } - .carousel-control .glyphicon-chevron-left, - .carousel-control .icon-prev { - margin-left: -10px; - } - .carousel-control .glyphicon-chevron-right, - .carousel-control .icon-next { - margin-right: -10px; - } - .carousel-caption { - right: 20%; - left: 20%; - padding-bottom: 30px; - } - .carousel-indicators { - bottom: 20px; - } -} -.clearfix:before, -.clearfix:after, -.dl-horizontal dd:before, -.dl-horizontal dd:after, -.container:before, -.container:after, -.container-fluid:before, -.container-fluid:after, -.row:before, -.row:after, -.form-horizontal .form-group:before, -.form-horizontal .form-group:after, -.btn-toolbar:before, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:before, -.btn-group-vertical > .btn-group:after, -.nav:before, -.nav:after, -.navbar:before, -.navbar:after, -.navbar-header:before, -.navbar-header:after, -.navbar-collapse:before, -.navbar-collapse:after, -.pager:before, -.pager:after, -.panel-body:before, -.panel-body:after, -.modal-header:before, -.modal-header:after, -.modal-footer:before, -.modal-footer:after { - display: table; - content: " "; -} -.clearfix:after, -.dl-horizontal dd:after, -.container:after, -.container-fluid:after, -.row:after, -.form-horizontal .form-group:after, -.btn-toolbar:after, -.btn-group-vertical > .btn-group:after, -.nav:after, -.navbar:after, -.navbar-header:after, -.navbar-collapse:after, -.pager:after, -.panel-body:after, -.modal-header:after, -.modal-footer:after { - clear: both; -} -.center-block { - display: block; - margin-right: auto; - margin-left: auto; -} -.pull-right { - float: right !important; -} -.pull-left { - float: left !important; -} -.hide { - display: none !important; -} -.show { - display: block !important; -} -.invisible { - visibility: hidden; -} -.text-hide { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} -.hidden { - display: none !important; -} -.affix { - position: fixed; -} -@-ms-viewport { - width: device-width; -} -.visible-xs, -.visible-sm, -.visible-md, -.visible-lg { - display: none !important; -} -.visible-xs-block, -.visible-xs-inline, -.visible-xs-inline-block, -.visible-sm-block, -.visible-sm-inline, -.visible-sm-inline-block, -.visible-md-block, -.visible-md-inline, -.visible-md-inline-block, -.visible-lg-block, -.visible-lg-inline, -.visible-lg-inline-block { - display: none !important; -} -@media (max-width: 767px) { - .visible-xs { - display: block !important; - } - table.visible-xs { - display: table !important; - } - tr.visible-xs { - display: table-row !important; - } - th.visible-xs, - td.visible-xs { - display: table-cell !important; - } -} -@media (max-width: 767px) { - .visible-xs-block { - display: block !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline { - display: inline !important; - } -} -@media (max-width: 767px) { - .visible-xs-inline-block { - display: inline-block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm { - display: block !important; - } - table.visible-sm { - display: table !important; - } - tr.visible-sm { - display: table-row !important; - } - th.visible-sm, - td.visible-sm { - display: table-cell !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-block { - display: block !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline { - display: inline !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .visible-sm-inline-block { - display: inline-block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md { - display: block !important; - } - table.visible-md { - display: table !important; - } - tr.visible-md { - display: table-row !important; - } - th.visible-md, - td.visible-md { - display: table-cell !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-block { - display: block !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline { - display: inline !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .visible-md-inline-block { - display: inline-block !important; - } -} -@media (min-width: 1200px) { - .visible-lg { - display: block !important; - } - table.visible-lg { - display: table !important; - } - tr.visible-lg { - display: table-row !important; - } - th.visible-lg, - td.visible-lg { - display: table-cell !important; - } -} -@media (min-width: 1200px) { - .visible-lg-block { - display: block !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline { - display: inline !important; - } -} -@media (min-width: 1200px) { - .visible-lg-inline-block { - display: inline-block !important; - } -} -@media (max-width: 767px) { - .hidden-xs { - display: none !important; - } -} -@media (min-width: 768px) and (max-width: 991px) { - .hidden-sm { - display: none !important; - } -} -@media (min-width: 992px) and (max-width: 1199px) { - .hidden-md { - display: none !important; - } -} -@media (min-width: 1200px) { - .hidden-lg { - display: none !important; - } -} -.visible-print { - display: none !important; -} -@media print { - .visible-print { - display: block !important; - } - table.visible-print { - display: table !important; - } - tr.visible-print { - display: table-row !important; - } - th.visible-print, - td.visible-print { - display: table-cell !important; - } -} -.visible-print-block { - display: none !important; -} -@media print { - .visible-print-block { - display: block !important; - } -} -.visible-print-inline { - display: none !important; -} -@media print { - .visible-print-inline { - display: inline !important; - } -} -.visible-print-inline-block { - display: none !important; -} -@media print { - .visible-print-inline-block { - display: inline-block !important; - } -} -@media print { - .hidden-print { - display: none !important; - } -} -/*# sourceMappingURL=bootstrap.css.map */ diff --git a/3B/archive/www_10.bak/panel/css/bootstrap.min.css b/3B/archive/www_10.bak/panel/css/bootstrap.min.css deleted file mode 100644 index 874bf93..0000000 --- a/3B/archive/www_10.bak/panel/css/bootstrap.min.css +++ /dev/null @@ -1,11 +0,0 @@ -@import url("https://fonts.googleapis.com/css?family=Lato:400,700,400italic");/*! - * bootswatch v3.3.7 - * Homepage: http://bootswatch.com - * Copyright 2012-2017 Thomas Park - * Licensed under MIT - * Based on Bootstrap -*//*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:1.42857143;color:#ffffff;background-color:#222222}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0ce3ac;text-decoration:none}a:hover,a:focus{color:#0ce3ac;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:2px;line-height:1.42857143;background-color:#222222;border:1px solid #464545;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:21px;margin-bottom:21px;border:0;border-top:1px solid #464545}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999999}h1,.h1,h2,.h2,h3,.h3{margin-top:21px;margin-bottom:10.5px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10.5px;margin-bottom:10.5px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:39px}h2,.h2{font-size:32px}h3,.h3{font-size:26px}h4,.h4{font-size:19px}h5,.h5{font-size:15px}h6,.h6{font-size:13px}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:17px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:22.5px}}small,.small{font-size:86%}mark,.mark{background-color:#f39c12;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#999999}.text-primary{color:#375a7f}a.text-primary:hover,a.text-primary:focus{color:#28415b}.text-success{color:#ffffff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-info{color:#ffffff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-warning{color:#ffffff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-danger{color:#ffffff}a.text-danger:hover,a.text-danger:focus{color:#e6e6e6}.bg-primary{color:#fff;background-color:#375a7f}a.bg-primary:hover,a.bg-primary:focus{background-color:#28415b}.bg-success{background-color:#00bc8c}a.bg-success:hover,a.bg-success:focus{background-color:#008966}.bg-info{background-color:#3498db}a.bg-info:hover,a.bg-info:focus{background-color:#217dbb}.bg-warning{background-color:#f39c12}a.bg-warning:hover,a.bg-warning:focus{background-color:#c87f0a}.bg-danger{background-color:#e74c3c}a.bg-danger:hover,a.bg-danger:focus{background-color:#d62c1a}.page-header{padding-bottom:9.5px;margin:42px 0 21px;border-bottom:1px solid transparent}ul,ol{margin-top:0;margin-bottom:10.5px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:21px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10.5px 21px;margin:0 0 21px;font-size:18.75px;border-left:5px solid #464545}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #464545;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:21px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#303030;background-color:#ebebeb;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#999999;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:21px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #464545}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #464545}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #464545}.table .table{background-color:#222222}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #464545}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #464545}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#3d3d3d}.table-hover>tbody>tr:hover{background-color:#464545}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#464545}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#393838}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#00bc8c}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#00a379}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#3498db}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#258cd1}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#f39c12}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#e08e0b}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#e74c3c}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#e43725}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15.75px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #464545}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:inherit;color:#ffffff;border:0;border-bottom:1px solid transparent}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:11px;font-size:15px;line-height:1.42857143;color:#464545}.form-control{display:block;width:100%;height:45px;padding:10px 15px;font-size:15px;line-height:1.42857143;color:#464545;background-color:#ffffff;background-image:none;border:1px solid #f1f1f1;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#ffffff;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(255,255,255,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(255,255,255,0.6)}.form-control::-moz-placeholder{color:#999999;opacity:1}.form-control:-ms-input-placeholder{color:#999999}.form-control::-webkit-input-placeholder{color:#999999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#ebebeb;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:45px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:35px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:66px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:21px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:11px;padding-bottom:11px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:35px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}select.input-sm{height:35px;line-height:35px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:35px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:35px;line-height:35px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:35px;min-height:34px;padding:7px 9px;font-size:13px;line-height:1.5}.input-lg{height:66px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}select.input-lg{height:66px;line-height:66px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:66px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:66px;line-height:66px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:66px;min-height:40px;padding:19px 27px;font-size:19px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:56.25px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:45px;height:45px;line-height:45px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:66px;height:66px;line-height:66px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:35px;height:35px;line-height:35px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#ffffff}.has-success .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-success .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#00bc8c}.has-success .form-control-feedback{color:#ffffff}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffffff}.has-warning .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-warning .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#f39c12}.has-warning .form-control-feedback{color:#ffffff}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#ffffff}.has-error .form-control{border-color:#ffffff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.has-error .input-group-addon{color:#ffffff;border-color:#ffffff;background-color:#e74c3c}.has-error .form-control-feedback{color:#ffffff}.has-feedback label~.form-control-feedback{top:26px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#ffffff}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:11px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:32px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:11px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:19px;font-size:19px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:7px;font-size:13px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:10px 15px;font-size:15px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ffffff;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ffffff;background-color:#464545;border-color:#464545}.btn-default:focus,.btn-default.focus{color:#ffffff;background-color:#2c2c2c;border-color:#060606}.btn-default:hover{color:#ffffff;background-color:#2c2c2c;border-color:#272727}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ffffff;background-color:#2c2c2c;border-color:#272727}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ffffff;background-color:#1a1a1a;border-color:#060606}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#464545;border-color:#464545}.btn-default .badge{color:#464545;background-color:#ffffff}.btn-primary{color:#ffffff;background-color:#375a7f;border-color:#375a7f}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#28415b;border-color:#101b26}.btn-primary:hover{color:#ffffff;background-color:#28415b;border-color:#253c54}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#28415b;border-color:#253c54}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#1d2f43;border-color:#101b26}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#375a7f;border-color:#375a7f}.btn-primary .badge{color:#375a7f;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#00bc8c;border-color:#00bc8c}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#008966;border-color:#003d2d}.btn-success:hover{color:#ffffff;background-color:#008966;border-color:#007f5e}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#008966;border-color:#007f5e}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#00654b;border-color:#003d2d}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#00bc8c;border-color:#00bc8c}.btn-success .badge{color:#00bc8c;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#3498db;border-color:#3498db}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#217dbb;border-color:#16527a}.btn-info:hover{color:#ffffff;background-color:#217dbb;border-color:#2077b2}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#217dbb;border-color:#2077b2}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#1c699d;border-color:#16527a}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#3498db;border-color:#3498db}.btn-info .badge{color:#3498db;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#f39c12;border-color:#f39c12}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#c87f0a;border-color:#7f5006}.btn-warning:hover{color:#ffffff;background-color:#c87f0a;border-color:#be780a}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#c87f0a;border-color:#be780a}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#a66908;border-color:#7f5006}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#f39c12;border-color:#f39c12}.btn-warning .badge{color:#f39c12;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#e74c3c;border-color:#e74c3c}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#d62c1a;border-color:#921e12}.btn-danger:hover{color:#ffffff;background-color:#d62c1a;border-color:#cd2a19}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#d62c1a;border-color:#cd2a19}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#b62516;border-color:#921e12}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#e74c3c;border-color:#e74c3c}.btn-danger .badge{color:#e74c3c;background-color:#ffffff}.btn-link{color:#0ce3ac;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#0ce3ac;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:13px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:0.35s;-o-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:15px;text-align:left;background-color:#303030;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#464545}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#ebebeb;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#ffffff;background-color:#375a7f}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#375a7f}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:13px;line-height:1.42857143;color:#999999;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:66px;padding:18px 27px;font-size:19px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:66px;line-height:66px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:35px;padding:6px 9px;font-size:13px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:35px;line-height:35px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:10px 15px;font-size:15px;font-weight:normal;line-height:1;color:#464545;text-align:center;background-color:#464545;border:1px solid transparent;border-radius:4px}.input-group-addon.input-sm{padding:6px 9px;font-size:13px;border-radius:3px}.input-group-addon.input-lg{padding:18px 27px;font-size:19px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#303030}.nav>li.disabled>a{color:#605e5e}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#605e5e;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#303030;border-color:#0ce3ac}.nav .nav-divider{height:1px;margin:9.5px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #464545}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#464545 #464545 #464545}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#00bc8c;background-color:#222222;border:1px solid #464545;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ebebeb}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#222222}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#375a7f}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ebebeb}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ebebeb;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#222222}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:60px;margin-bottom:21px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:19.5px 15px;font-size:19px;line-height:21px;height:60px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:13px;margin-bottom:13px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:9.75px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:21px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:21px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:19.5px;padding-bottom:19.5px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:7.5px;margin-bottom:7.5px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:7.5px;margin-bottom:7.5px}.navbar-btn.btn-sm{margin-top:12.5px;margin-bottom:12.5px}.navbar-btn.btn-xs{margin-top:19px;margin-bottom:19px}.navbar-text{margin-top:19.5px;margin-bottom:19.5px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#375a7f;border-color:transparent}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#00bc8c;background-color:transparent}.navbar-default .navbar-text{color:#ffffff}.navbar-default .navbar-nav>li>a{color:#ffffff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#00bc8c;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#28415b}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#28415b}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#28415b}.navbar-default .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#28415b;color:#ffffff}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#00bc8c;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#28415b}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-default .navbar-link{color:#ffffff}.navbar-default .navbar-link:hover{color:#00bc8c}.navbar-default .btn-link{color:#ffffff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#00bc8c}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#cccccc}.navbar-inverse{background-color:#00bc8c;border-color:transparent}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#375a7f;background-color:transparent}.navbar-inverse .navbar-text{color:#ffffff}.navbar-inverse .navbar-nav>li>a{color:#ffffff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#375a7f;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#00a379}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#aaaaaa;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#008966}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#008966}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#009871}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#00a379;color:#ffffff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#375a7f;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#00a379}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#aaaaaa;background-color:transparent}}.navbar-inverse .navbar-link{color:#ffffff}.navbar-inverse .navbar-link:hover{color:#375a7f}.navbar-inverse .btn-link{color:#ffffff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#375a7f}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#aaaaaa}.breadcrumb{padding:8px 15px;margin-bottom:21px;list-style:none;background-color:#464545;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ffffff}.breadcrumb>.active{color:#999999}.pagination{display:inline-block;padding-left:0;margin:21px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:10px 15px;line-height:1.42857143;text-decoration:none;color:#ffffff;background-color:#00bc8c;border:1px solid transparent;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#ffffff;background-color:#00dba3;border-color:transparent}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#ffffff;background-color:#00dba3;border-color:transparent;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#ffffff;background-color:#007053;border-color:transparent;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:18px 27px;font-size:19px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:6px 9px;font-size:13px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:21px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#00bc8c;border:1px solid transparent;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#00dba3}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#dddddd;background-color:#00bc8c;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#464545}.label-default[href]:hover,.label-default[href]:focus{background-color:#2c2c2c}.label-primary{background-color:#375a7f}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#28415b}.label-success{background-color:#00bc8c}.label-success[href]:hover,.label-success[href]:focus{background-color:#008966}.label-info{background-color:#3498db}.label-info[href]:hover,.label-info[href]:focus{background-color:#217dbb}.label-warning{background-color:#f39c12}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#c87f0a}.label-danger{background-color:#e74c3c}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#d62c1a}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:13px;font-weight:bold;color:#ffffff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#464545;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#375a7f;background-color:#ffffff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#303030}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:23px;font-weight:200}.jumbotron>hr{border-top-color:#161616}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:68px}}.thumbnail{display:block;padding:2px;margin-bottom:21px;line-height:1.42857143;background-color:#222222;border:1px solid #464545;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#0ce3ac}.thumbnail .caption{padding:9px;color:#ffffff}.alert{padding:15px;margin-bottom:21px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#00bc8c;border-color:#00bc8c;color:#ffffff}.alert-success hr{border-top-color:#00a379}.alert-success .alert-link{color:#e6e6e6}.alert-info{background-color:#3498db;border-color:#3498db;color:#ffffff}.alert-info hr{border-top-color:#258cd1}.alert-info .alert-link{color:#e6e6e6}.alert-warning{background-color:#f39c12;border-color:#f39c12;color:#ffffff}.alert-warning hr{border-top-color:#e08e0b}.alert-warning .alert-link{color:#e6e6e6}.alert-danger{background-color:#e74c3c;border-color:#e74c3c;color:#ffffff}.alert-danger hr{border-top-color:#e43725}.alert-danger .alert-link{color:#e6e6e6}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:21px;margin-bottom:21px;background-color:#ebebeb;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:13px;line-height:21px;color:#ffffff;text-align:center;background-color:#375a7f;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#00bc8c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#3498db}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#e74c3c}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#303030;border:1px solid #464545}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#0ce3ac}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#0bcb9a}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#0ce3ac;background-color:transparent}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#ebebeb;color:#999999;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#999999}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#375a7f;border-color:#375a7f}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#a8c0da}.list-group-item-success{color:#ffffff;background-color:#00bc8c}a.list-group-item-success,button.list-group-item-success{color:#ffffff}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#ffffff;background-color:#00a379}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-info{color:#ffffff;background-color:#3498db}a.list-group-item-info,button.list-group-item-info{color:#ffffff}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#ffffff;background-color:#258cd1}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-warning{color:#ffffff;background-color:#f39c12}a.list-group-item-warning,button.list-group-item-warning{color:#ffffff}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#ffffff;background-color:#e08e0b}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-danger{color:#ffffff;background-color:#e74c3c}a.list-group-item-danger,button.list-group-item-danger{color:#ffffff}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#ffffff;background-color:#e43725}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#ffffff;border-color:#ffffff}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:21px;background-color:#303030;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:17px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#464545;border-top:1px solid #464545;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #464545}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:21px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #464545}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #464545}.panel-default{border-color:#464545}.panel-default>.panel-heading{color:#ffffff;background-color:#303030;border-color:#464545}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#464545}.panel-default>.panel-heading .badge{color:#303030;background-color:#ffffff}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#464545}.panel-primary{border-color:#375a7f}.panel-primary>.panel-heading{color:#ffffff;background-color:#375a7f;border-color:#375a7f}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#375a7f}.panel-primary>.panel-heading .badge{color:#375a7f;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#375a7f}.panel-success{border-color:#00bc8c}.panel-success>.panel-heading{color:#ffffff;background-color:#00bc8c;border-color:#00bc8c}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#00bc8c}.panel-success>.panel-heading .badge{color:#00bc8c;background-color:#ffffff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#00bc8c}.panel-info{border-color:#3498db}.panel-info>.panel-heading{color:#ffffff;background-color:#3498db;border-color:#3498db}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3498db}.panel-info>.panel-heading .badge{color:#3498db;background-color:#ffffff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3498db}.panel-warning{border-color:#f39c12}.panel-warning>.panel-heading{color:#ffffff;background-color:#f39c12;border-color:#f39c12}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#f39c12}.panel-warning>.panel-heading .badge{color:#f39c12;background-color:#ffffff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#f39c12}.panel-danger{border-color:#e74c3c}.panel-danger>.panel-heading{color:#ffffff;background-color:#e74c3c;border-color:#e74c3c}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#e74c3c}.panel-danger>.panel-heading .badge{color:#e74c3c;background-color:#ffffff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#e74c3c}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#303030;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:22.5px;font-weight:bold;line-height:1;color:#ffffff;text-shadow:none;opacity:0.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#ffffff;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#303030;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:0.7;filter:alpha(opacity=70)}.modal-header{padding:15px;border-bottom:1px solid #464545}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #464545}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:13px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:0.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#000000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:15px;background-color:#303030;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:15px;background-color:#282828;border-bottom:1px solid #1c1c1c;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#666666;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#303030}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#666666;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#303030}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#666666;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#303030}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#666666;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#303030;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:0.5;filter:alpha(opacity=50);font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #ffffff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#ffffff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.navbar{border-width:0}.navbar-default .badge{background-color:#fff;color:#375a7f}.navbar-inverse .badge{background-color:#fff;color:#00bc8c}.navbar-brand{line-height:1}.navbar-form .form-control{background-color:white}.navbar-form .form-control:focus{border-color:white}.btn{border-width:2px}.btn:active{-webkit-box-shadow:none;box-shadow:none}.btn-group.open .dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.text-primary,.text-primary:hover{color:#4673a3}.text-success,.text-success:hover{color:#00bc8c}.text-danger,.text-danger:hover{color:#e74c3c}.text-warning,.text-warning:hover{color:#f39c12}.text-info,.text-info:hover{color:#3498db}table a:not(.btn),.table a:not(.btn){text-decoration:underline}table .dropdown-menu a,.table .dropdown-menu a{text-decoration:none}table .success,.table .success,table .warning,.table .warning,table .danger,.table .danger,table .info,.table .info{color:#fff}table .success>th>a,.table .success>th>a,table .warning>th>a,.table .warning>th>a,table .danger>th>a,.table .danger>th>a,table .info>th>a,.table .info>th>a,table .success>td>a,.table .success>td>a,table .warning>td>a,.table .warning>td>a,table .danger>td>a,.table .danger>td>a,table .info>td>a,.table .info>td>a,table .success>a,.table .success>a,table .warning>a,.table .warning>a,table .danger>a,.table .danger>a,table .info>a,.table .info>a{color:#fff}table>thead>tr>th,.table>thead>tr>th,table>tbody>tr>th,.table>tbody>tr>th,table>tfoot>tr>th,.table>tfoot>tr>th,table>thead>tr>td,.table>thead>tr>td,table>tbody>tr>td,.table>tbody>tr>td,table>tfoot>tr>td,.table>tfoot>tr>td{border:none}table-bordered>thead>tr>th,.table-bordered>thead>tr>th,table-bordered>tbody>tr>th,.table-bordered>tbody>tr>th,table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>th,table-bordered>thead>tr>td,.table-bordered>thead>tr>td,table-bordered>tbody>tr>td,.table-bordered>tbody>tr>td,table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #464545}input,textarea{color:#464545}.form-control,input,textarea{border:2px hidden transparent;-webkit-box-shadow:none;box-shadow:none}.form-control:focus,input:focus,textarea:focus{-webkit-box-shadow:none;box-shadow:none}.form-control-feedback{color:#464545}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .form-control-feedback{color:#f39c12}.has-warning .form-control,.has-warning .form-control:focus{-webkit-box-shadow:none;box-shadow:none}.has-warning .input-group-addon{border-color:#f39c12}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label,.has-error .form-control-feedback{color:#e74c3c}.has-error .form-control,.has-error .form-control:focus{-webkit-box-shadow:none;box-shadow:none}.has-error .input-group-addon{border-color:#e74c3c}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .form-control-feedback{color:#00bc8c}.has-success .form-control,.has-success .form-control:focus{-webkit-box-shadow:none;box-shadow:none}.has-success .input-group-addon{border-color:#00bc8c}.input-group-addon{color:#ffffff}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{border-color:#464545}.nav-tabs>li>a,.nav-pills>li>a{color:#fff}.pager a,.pager a:hover{color:#fff}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{background-color:#007053}.breadcrumb a{color:#fff}.close{text-decoration:none;text-shadow:none;opacity:0.4}.close:hover,.close:focus{opacity:1}.alert .alert-link{color:#fff;text-decoration:underline}.progress{height:10px;-webkit-box-shadow:none;box-shadow:none}.progress .progress-bar{font-size:10px;line-height:10px}.well{-webkit-box-shadow:none;box-shadow:none}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{border-color:#464545}a.list-group-item-success.active{background-color:#00bc8c}a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{background-color:#00a379}a.list-group-item-warning.active{background-color:#f39c12}a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{background-color:#e08e0b}a.list-group-item-danger.active{background-color:#e74c3c}a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{background-color:#e43725}.popover{color:#ffffff}.panel-default>.panel-heading{background-color:#464545} \ No newline at end of file diff --git a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot b/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot deleted file mode 100644 index 42ea705..0000000 --- a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.eot +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13634da87d9e23f8c3ed9108ce1724d183a39ad072e73e1b3d8cbf646d2d0407 -size 20127 diff --git a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg b/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg deleted file mode 100644 index 94fb549..0000000 --- a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.svg +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf b/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf deleted file mode 100644 index 233386d..0000000 --- a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.ttf +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e395044093757d82afcb138957d06a1ea9361bdcf0b442d06a18a8051af57456 -size 45404 diff --git a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff b/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff deleted file mode 100644 index 334f2da..0000000 --- a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a26394f7ede100ca118eff2eda08596275a9839b959c226e15439557a5a80742 -size 23424 diff --git a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 b/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 3336ba1..0000000 --- a/3B/archive/www_10.bak/panel/fonts/glyphicons-halflings-regular.woff2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe185d11a49676890d47bb783312a0cda5a44c4039214094e7957b4c040ef11c -size 18028 diff --git a/3B/archive/www_10.bak/panel/index.html b/3B/archive/www_10.bak/panel/index.html deleted file mode 100644 index 5db64f1..0000000 --- a/3B/archive/www_10.bak/panel/index.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - PiHost Panel - - - - - - - - - - - - - - - - - - -
-
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
CarrierOnlineProcessWafer

UKN

UKN

UKN

UKN

UKN

UKN

UKN

UKN

-
-
-
-
-
-
-
Latest MQTT message: no message recieved
-
Status:
-
Info:
-
-
-
- -
- - - diff --git a/3B/archive/www_10.bak/panel/js/bootstrap-toggle.js b/3B/archive/www_10.bak/panel/js/bootstrap-toggle.js deleted file mode 100644 index 533914e..0000000 --- a/3B/archive/www_10.bak/panel/js/bootstrap-toggle.js +++ /dev/null @@ -1,180 +0,0 @@ -/*! ======================================================================== - * Bootstrap Toggle: bootstrap-toggle.js v2.2.0 - * http://www.bootstraptoggle.com - * ======================================================================== - * Copyright 2014 Min Hur, The New York Times Company - * Licensed under MIT - * ======================================================================== */ - - - +function ($) { - 'use strict'; - - // TOGGLE PUBLIC CLASS DEFINITION - // ============================== - - var Toggle = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, this.defaults(), options) - this.render() - } - - Toggle.VERSION = '2.2.0' - - Toggle.DEFAULTS = { - on: 'On', - off: 'Off', - onstyle: 'primary', - offstyle: 'default', - size: 'normal', - style: '', - width: null, - height: null - } - - Toggle.prototype.defaults = function() { - return { - on: this.$element.attr('data-on') || Toggle.DEFAULTS.on, - off: this.$element.attr('data-off') || Toggle.DEFAULTS.off, - onstyle: this.$element.attr('data-onstyle') || Toggle.DEFAULTS.onstyle, - offstyle: this.$element.attr('data-offstyle') || Toggle.DEFAULTS.offstyle, - size: this.$element.attr('data-size') || Toggle.DEFAULTS.size, - style: this.$element.attr('data-style') || Toggle.DEFAULTS.style, - width: this.$element.attr('data-width') || Toggle.DEFAULTS.width, - height: this.$element.attr('data-height') || Toggle.DEFAULTS.height - } - } - - Toggle.prototype.render = function () { - this._onstyle = 'btn-' + this.options.onstyle - this._offstyle = 'btn-' + this.options.offstyle - var size = this.options.size === 'large' ? 'btn-lg' - : this.options.size === 'small' ? 'btn-sm' - : this.options.size === 'mini' ? 'btn-xs' - : '' - var $toggleOn = $('