diff --git a/README.md b/README.md
index c29597b..6055bb7 100644
--- a/README.md
+++ b/README.md
@@ -260,7 +260,7 @@ The development server serves everything at `http://localhost:8774`.
Depending on when your bttn was built, it may have shipped with an older Wi-Fi module firmware. It's recommended to upgrade this firmware, and the process is stable and safe, but as with all things, your mileage may vary.
-As of this writing, version 3.5.3 is available and brings many improvements over older versions.
+As of this writing, version 3.6 is available and brings many improvements over older versions. See `ReleaseNotes.pdf` for each firmware version to see what improvements have been made.
#### Updating the Wi-Fi module
@@ -269,12 +269,12 @@ Download the latest Wi-Fi module firmware from [here](https://my.st.com/content/
Unzip it and locate the module firmware version you wish to use.
For our example, we've chosen:
-> SPWF01S-170111-665d284-RELEASE-main.ota
+> SPWF01S-180621-5f9a5a0-RELEASE-main.ota
Move the firmware into the `ota` folder:
```console
-$ mv ~/Downloads/STSW-WIFI001/Rel.\ 3.5.3/OTA/SPWF01S-170111-665d284-RELEASE-main.ota public/ota/
+$ mv ~/Downloads/STSW-WIFI001/Rel.\ 3.6/OTA/SPWF01S-180621-5f9a5a0-RELEASE-main.ota public/ota/
```
Run the included web server (more on this in [Development server](#development-server)):
diff --git a/cmd/openbttn/main.go b/cmd/openbttn/main.go
index bd492cb..1421b63 100644
--- a/cmd/openbttn/main.go
+++ b/cmd/openbttn/main.go
@@ -141,6 +141,9 @@ func otaHandler(otaPath string) func(w http.ResponseWriter, r *http.Request) {
n, err := f.Read(b)
if err == io.EOF {
keepGoing = false
+ if n == 0 {
+ break
+ }
} else if err != nil {
panic(err)
}
@@ -149,12 +152,20 @@ func otaHandler(otaPath string) func(w http.ResponseWriter, r *http.Request) {
io.CopyN(w, content, int64(n))
numBytes += n
- // Pause 300 ms between chunks to give more
+ log.Printf("Sent %d/%s OTA bytes in %v", numBytes, size, time.Now().Sub(start))
+
+ // Pause a bit between chunks to give some
// time for the module to store each chunk.
- time.Sleep(300 * time.Millisecond)
+ delay := 300 * time.Millisecond
+ select {
+ case <-r.Context().Done():
+ log.Printf("Client disconnected, sent %d/%s OTA bytes in %v", numBytes, size, time.Now().Sub(start))
+ return
+ case <-time.After(delay):
+ }
}
- log.Printf("Sent %d/%s OTA bytes in %v", numBytes, size, time.Now().Sub(start))
+ log.Println("OTA complete!")
}
}
diff --git a/libopencm3 b/libopencm3
index 3922cc7..6b0fd86 160000
--- a/libopencm3
+++ b/libopencm3
@@ -1 +1 @@
-Subproject commit 3922cc7d3ea362b816cc1de6d3287375afbe58aa
+Subproject commit 6b0fd864a1f9ff444c1dcc412d5e25965f6b60c1
diff --git a/public/openbttn/firstset.html b/public/openbttn/firstset.html
index cda0d11..71bc4fd 100644
--- a/public/openbttn/firstset.html
+++ b/public/openbttn/firstset.html
@@ -18,7 +18,7 @@
Firmware Upgrade (SPWF01SA)
URL:
-
+
diff --git a/public/openbttn/firstset.js b/public/openbttn/firstset.js
index b701066..3943f30 100644
--- a/public/openbttn/firstset.js
+++ b/public/openbttn/firstset.js
@@ -61,7 +61,7 @@ function getFirmwareVersion(data) {
function checkFirmwareVersion({ date, commit }) {
if (date < 141106) {
document.getElementById('fw-form').innerHTML = 'Firmware is too old for OTA update.
';
- } else if (date < 170111) {
+ } else if (date < 180621) {
document.getElementById('fw').classList.remove('hidden');
}
document.getElementById('fw-ver').textContent = date + '-' + commit;
diff --git a/public/openbttn/make.sh b/public/openbttn/make.sh
index 3114d8e..863e90c 100755
--- a/public/openbttn/make.sh
+++ b/public/openbttn/make.sh
@@ -32,6 +32,10 @@ path=($SCRIPT/node_modules/.bin $path)
done
print
+
+ data_c=''
+ data_h_size=''
+ data_h_extern=''
for html in *.html; do
gzip -9 $html
xxd -i $html.gz > $html.xxd
@@ -39,22 +43,33 @@ path=($SCRIPT/node_modules/.bin $path)
name=$(head -n1 $html.c)
name=${(j..)${(Cs._.)${${name#unsigned char }%\[*}}}
- name="const uint8_t g_Data${name}[] = {"
- { print $name; tail -n +2 $html.c } >> data.c
+ name="const uint8_t g_Data${name}[]"
+ data_c+="$(print "$name = {"; tail -n +2 $html.c)"$'\n'
+ data_h_extern+="extern ${name};"$'\n'
size=$(grep "^unsigned int" $html.xxd)
sizeNum=${${size#*\= }%;}
size=${(U)${${size#unsigned int }%_len \=*}}
- size="#define DATA_${size}_LENGTH ${sizeNum}"
- print $size >> data.h
+ data_h_size+="#define DATA_${size}_LENGTH ${sizeNum}"$'\n'
done
- {
- cat data.h
- cat data.c
- } | pbcopy
- pbpaste
-)
+ cat < $SCRIPT/../../src/data.c
+#include
+
+#include "data.h"
+${data_c}
+EOF
+ cat < $SCRIPT/../../src/data.h
+#ifndef DATA_H
+#define DATA_H
+
+#include
+
+${data_h_size}
+${data_h_extern}
+#endif /* DATA_H */
+EOF
+)
rm -r $TMP
diff --git a/public/openbttn/package.json b/public/openbttn/package.json
index ad76c50..57b5836 100644
--- a/public/openbttn/package.json
+++ b/public/openbttn/package.json
@@ -1,7 +1,10 @@
{
"devDependencies": {
"html-inline": "^1.2.0",
- "html-minifier": "^3.1.0",
+ "html-minifier": "^3.5.20",
"uglify-js": "github:mishoo/UglifyJS2#harmony"
+ },
+ "dependencies": {
+ "uglify-es": "github:mishoo/UglifyJS2#harmony"
}
}
diff --git a/public/openbttn/yarn.lock b/public/openbttn/yarn.lock
index c704924..ecf6b2f 100644
--- a/public/openbttn/yarn.lock
+++ b/public/openbttn/yarn.lock
@@ -5,68 +5,78 @@
camel-case@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
dependencies:
no-case "^2.2.0"
upper-case "^1.1.1"
-clean-css@4.1.x:
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
+clean-css@4.2.x:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
+ integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
dependencies:
- source-map "0.5.x"
+ source-map "~0.6.0"
-commander@2.12.x:
- version "2.12.2"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+commander@2.17.x, commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-commander@~2.13.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+commander@~2.14.1:
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
+ integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==
core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cssauron@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8"
+ integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=
dependencies:
through X.X.X
duplexer2@~0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
+ integrity sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=
dependencies:
readable-stream "~1.1.9"
he@1.1.x:
version "1.1.1"
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+ integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
html-inline@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/html-inline/-/html-inline-1.2.0.tgz#7854946a6f5c3122b993b81d3d37d6bd0600bec1"
+ integrity sha1-eFSUam9cMSK5k7gdPTfWvQYAvsE=
dependencies:
minimist "~1.1.0"
through2 "~0.6.3"
trumpet "~1.7.0"
-html-minifier@^3.1.0:
- version "3.5.8"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
+html-minifier@^3.5.20:
+ version "3.5.20"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14"
+ integrity sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==
dependencies:
camel-case "3.0.x"
- clean-css "4.1.x"
- commander "2.12.x"
+ clean-css "4.2.x"
+ commander "2.17.x"
he "1.1.x"
- ncname "1.0.x"
param-case "2.1.x"
relateurl "0.2.x"
- uglify-js "3.3.x"
+ uglify-js "3.4.x"
html-select@^2.3.5:
version "2.3.24"
resolved "https://registry.yarnpkg.com/html-select/-/html-select-2.3.24.tgz#46ad6d712e732cf31c6739d5d0110a5fabf17585"
+ integrity sha1-Rq1tcS5zLPMcZznV0BEKX6vxdYU=
dependencies:
cssauron "^1.1.0"
duplexer2 "~0.0.2"
@@ -80,6 +90,7 @@ html-select@^2.3.5:
html-tokenize@^1.1.1:
version "1.2.5"
resolved "https://registry.yarnpkg.com/html-tokenize/-/html-tokenize-1.2.5.tgz#7e5ba99ecb51ef906ec9a7fcdee6ca3267c7897e"
+ integrity sha1-flupnstR75Buyaf83ubKMmfHiX4=
dependencies:
inherits "~2.0.1"
minimist "~0.0.8"
@@ -89,52 +100,56 @@ html-tokenize@^1.1.1:
indexof@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
inherits@^2.0.0, inherits@^2.0.1, inherits@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
isarray@0.0.1, isarray@~0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
lower-case@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+ integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
minimist@~0.0.8:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
minimist@~1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8"
-
-ncname@1.0.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
- dependencies:
- xml-char-classes "^1.0.0"
+ integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=
no-case@^2.2.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
dependencies:
lower-case "^1.1.1"
object-keys@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336"
+ integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=
param-case@2.1.x:
version "2.1.1"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
dependencies:
no-case "^2.2.0"
"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17, readable-stream@~1.0.27-1:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
@@ -144,6 +159,7 @@ param-case@2.1.x:
"readable-stream@>=1.1.13-1 <1.2.0-0", readable-stream@^1.0.27-1, readable-stream@^1.1.13-1, readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
+ integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk=
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
@@ -153,30 +169,31 @@ param-case@2.1.x:
readable-wrap@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/readable-wrap/-/readable-wrap-1.0.0.tgz#3b5a211c631e12303a54991c806c17e7ae206bff"
+ integrity sha1-O1ohHGMeEjA6VJkcgGwX564ga/8=
dependencies:
readable-stream "^1.1.13-1"
relateurl@0.2.x:
version "0.2.7"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
-source-map@0.5.x:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@~0.6.1:
+source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
split@~0.3.0:
version "0.3.3"
resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
+ integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=
dependencies:
through "2"
stream-splicer@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-1.3.2.tgz#3c0441be15b9bf4e226275e6dc83964745546661"
+ integrity sha1-PARBvhW5v04iYnXm3IOWR0VUZmE=
dependencies:
indexof "0.0.1"
inherits "^2.0.1"
@@ -188,10 +205,12 @@ stream-splicer@^1.2.0:
string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
through2@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/through2/-/through2-1.1.1.tgz#0847cbc4449f3405574dbdccd9bb841b83ac3545"
+ integrity sha1-CEfLxESfNAVXTb3M2buEG4OsNUU=
dependencies:
readable-stream ">=1.1.13-1 <1.2.0-0"
xtend ">=4.0.0 <4.1.0-0"
@@ -199,6 +218,7 @@ through2@^1.0.0:
through2@~0.4.1:
version "0.4.2"
resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b"
+ integrity sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=
dependencies:
readable-stream "~1.0.17"
xtend "~2.1.1"
@@ -206,6 +226,7 @@ through2@~0.4.1:
through2@~0.6.3:
version "0.6.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
+ integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=
dependencies:
readable-stream ">=1.0.33-1 <1.1.0-0"
xtend ">=4.0.0 <4.1.0-0"
@@ -213,10 +234,12 @@ through2@~0.6.3:
through@2, through@X.X.X:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
trumpet@~1.7.0:
version "1.7.2"
resolved "https://registry.yarnpkg.com/trumpet/-/trumpet-1.7.2.tgz#b02c69e465d171f55e44924bf9b5bdd20974c830"
+ integrity sha1-sCxp5GXRcfVeRJJL+bW90gl0yDA=
dependencies:
duplexer2 "~0.0.2"
html-select "^2.3.5"
@@ -225,34 +248,34 @@ trumpet@~1.7.0:
readable-stream "^1.0.27-1"
through2 "^1.0.0"
-uglify-js@3.3.x:
- version "3.3.8"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.8.tgz#51e9a5db73afb53ac98603d08224edcd0be45fd8"
+"uglify-es@github:mishoo/UglifyJS2#harmony", "uglify-js@github:mishoo/UglifyJS2#harmony":
+ version "3.3.10"
+ resolved "https://codeload.github.com/mishoo/UglifyJS2/tar.gz/569757d14dbbe04f66af65d7bf0600b3a75efd96"
dependencies:
- commander "~2.13.0"
+ commander "~2.14.1"
source-map "~0.6.1"
-"uglify-js@github:mishoo/UglifyJS2#harmony":
- version "3.3.8"
- resolved "https://codeload.github.com/mishoo/UglifyJS2/tar.gz/e0461dc3c8c5459ff11ec868f6fb8dd2d7be99f0"
+uglify-js@3.4.x:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
dependencies:
- commander "~2.13.0"
+ commander "~2.17.1"
source-map "~0.6.1"
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
-
-xml-char-classes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+ integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
"xtend@>=4.0.0 <4.1.0-0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
xtend@~2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b"
+ integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os=
dependencies:
object-keys "~0.4.0"
diff --git a/resources/SPWF01SA/AT command output.log b/resources/SPWF01SA/AT command output.log
new file mode 100644
index 0000000..84f92c6
--- /dev/null
+++ b/resources/SPWF01SA/AT command output.log
@@ -0,0 +1,233 @@
++WIND:1:Poweron (141106-0950875-SPWF01S)
++WIND:13:ST SPWF01SA1 IWM: Copyright (c) 2012-2014 STMicroelectronics, Inc. All rights Reserved.
++WIND:3:Watchdog Running
++WIND:0:Console active
+
+AT&F
+OK
+
+AT+S.SSIDTXT=MySSID
+OK
+
+AT+S.SCFG=wifi_wpa_psk_text,MyPASSWORD
+OK
+
+AT+S.SCFG=wifi_priv_mode,2
+OK
+
+AT+S.SCFG=wifi_mode,1
+OK
+
+AT+S.SCFG=ip_use_dhcp,1
+OK
+
+AT+S.SCFG=ip_use_decoder,2
+ERROR: Unrecognized key
+
+AT&W
+OK
+
+AT+CFUN=1
++WIND:2:Reset
++WIND:1:Poweron (141106-0950875-SPWF01S)
++WIND:13:ST SPWF01SA1 IWM: Copyright (c) 2012-2014 STMicroelectronics, Inc. All rights Reserved.
++WIND:3:Watchdog Running
++WIND:46:WPA: Crunching PSK...
++WIND:0:Console active
++WIND:32:WiFi Hardware Started
++WIND:21:WiFi Scanning
++WIND:35:WiFi Scan Complete (0x0)
++WIND:19:WiFi Join:00:00:00:00:00:00
++WIND:25:WiFi Association with 'MySSID' successful
++WIND:51:WPA Handshake Complete
++WIND:24:WiFi Up:192.168.0.188
+
+AT&V
+# Dumping All Configuration Keys:
+# nv_manuf = ST
+# nv_model = SPWF01SA1
+# nv_serial = 2914D12541
+# nv_wifi_macaddr = 00:80:E1:B4:00:00
+# blink_led = 0
+# wind_off_low = 0x00000000
+# wind_off_medium = 0x00000000
+# wind_off_high = 0x00000000
+# user_desc = anonymous
+# escape_seq = at+s.
+# localecho1 = 0
+# console1_speed = 115200
+# console1_hwfc = 0
+# console1_enabled = 1
+# sleep_enabled = 0
+# standby_enabled = 0
+# standby_time = 10
+# wifi_tx_msdu_lifetime = 0
+# wifi_rx_msdu_lifetime = 0
+# wifi_operational_mode = 0x00000011
+# wifi_beacon_wakeup = 1
+# wifi_beacon_interval = 100
+# wifi_listen_interval = 0
+# wifi_rts_threshold = 3000
+# wifi_ssid = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_ssid_len = 14
+# wifi_channelnum = 6
+# wifi_opr_rate_mask = 0x00003FCF
+# wifi_bas_rate_mask = 0x0000000F
+# wifi_mode = 1
+# wifi_auth_type = 0
+# wifi_atim_window = 0
+# wifi_powersave = 0
+# wifi_tx_power = 18
+# wifi_rssi_thresh = 0
+# wifi_rssi_hyst = 0
+# wifi_ap_idle_timeout = 120
+# wifi_beacon_loss_thresh = 10
+# wifi_priv_mode = 2
+# wifi_wep_keys[0] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_wep_keys[1] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_wep_keys[2] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_wep_keys[3] = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_wep_key_lens = 00:00:00:00
+# wifi_wep_default_key = 0
+# wifi_wpa_psk_raw = 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+# wifi_wpa_psk_text = MyPASSWORD
+# ip_use_dhcp = 1
+# ip_use_httpd = 1
+# ip_mtu = 1500
+# ip_hostname = iwm-B4-00-00
+# ip_apdomainname = captiveportal.net
+# ip_ipaddr = 192.168.0.50
+# ip_netmask = 255.255.255.0
+# ip_gw = 192.168.0.1
+# ip_dns = 192.168.0.1
+# ip_http_get_recv_timeout = 3000
+# ip_dhcp_timeout = 20
+# ip_sockd_timeout = 250
+OK
+
+AT+S.SSIDTXT
+SSID = 'MySSID'
+OK
+
+AT+S.STS
+# Status & Statistics:
+# version = 141106-0950875-SPWF01S
+# reset_reason = 2
+# conf_flag = 5
+# system_uptime = 13
+# system_sleeptime = 0
+# gpio_enable = 0
+# captiveportal = 0
+# wifi_state = 10