Giter Site home page Giter Site logo

depau / wi-se-sw Goto Github PK

View Code? Open in Web Editor NEW
29.0 4.0 6.0 1.86 MB

Wi-Se - Wi-Fi Remote Serial/UART Terminal for ESP8266

License: GNU General Public License v3.0

JavaScript 0.47% TypeScript 2.23% SCSS 0.16% HTML 0.06% C++ 23.75% C 71.30% CMake 0.25% Python 1.78%
wi-se ttyd esp8266 wi-fi uart ota serial websocket raspberry raspberry-pi orange-pi

wi-se-sw's Introduction

Wi-Se Remote UART Terminal - C++ implementation

Wireless Serial

Demo


This software allows for using an ESP8266 board as a remote UART terminal. It is very fast, reaching (with caveats) up to 1500000bps rates.

It is intended as a firmware for the Wi-Se boards (which you can order and build at your favorite PCB manufacturer), though it will work just fine with a normal ESP8266 breakout board.

With some changes it may work with ESP32 but there's no interest for that at the moment. Pull requests are welcome.

Communication occurs over WebSockets: it is compatible with ttyd. In fact, the web UI is the same. CLI clients compatible with ttyd, such as ttyc should also work with Wi-Se.

Wi-Se uses a superset of ttyd's protocol. Non Wi-Se-aware clients won't be able to use all features.

Wistty can be used to control remote terminal configuration parameters. It is part of ttyc: https://github.com/Depau/ttyc

Features

  • Web-based terminal based on Xterm.js
  • Very low latency (~10ms on average, depending on your Wi-Fi)
  • Relatively high baud rates are supported (up to ~1500000bps, with caveats)
  • Zmodem support on Web UI
  • Native *nix client: ttyc
  • OTA firmware updates
  • Automatic baud detection (ymmv)
  • Remote terminal parameters can be changed on the fly

Building and flashing

Building is only supported and tested on GNU/Linux x86_64.

Building on Windows is not supported. WSL may work but is not tested. Building on macOS may work but it is not tested. Pull requests are welcome.

Requirements:

The build script also has some additional Python dependencies: pyjq, jinja2, pyyaml. You may install them through your distro package manager or use a virtualenv as described here:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

To build and flash the project:

  • Inside configs/, copy config.yml.example to device_name.yml and change configuration parameters as needed.
    • The serial port or IP address for OTA updates must be specified in the config file.
  • Activate Python virtualenv:
    source venv/bin/activate
  • Build and upload:
    ./builder.py upload              # To flash all configured devices
    ./builder.py upload device_name  # To flash only using "device_name.yml"

The builder.py script makes it easy to keep a number of devices up-to-date, without having to swap config files.

The platformio.ini and include/config.h files are automatically generated by the build script based on each single human-readable YAML config.

For development you can change config options in configs/config.yml.example, then run ./builder.py devconf --example to generate the headers in-place.

Configuration

Configuration is located under configs/. An example config config.yml.example is provided, with comments and all options set to their default values.

Runtime configuration changes are not supported and will not be supported. This helps keep the code simple and reduce security and memory corruption issues.

Pushing a OTA firmware update to change the configuration is simple enough.

UART parameters can be changed at runtime, but the original configuration will be restored in case of restart.

Changing UART parameters at runtime

Ideally it should be implemented in the web page, but I don't know ReactJS (pull-requests welcome). wistty (part of ttyc) can be used to set them. ttyc supports setting the UART parameters directly.

If you don't want to use wistty you can change the baud rate and the other parameters by sending an HTTP request:

curl -X POST IP_ADDRESS/stty -H 'Content-Type: application/json' \
-d '{"baudrate":1500000,"bits":8,"parity":null,"stop":1}'

# To fetch current setting:
curl IP_ADDRESS/stty

# For authentication, add:
--digest --user username:password

Bits (data bits) can be 5, 6, 7 or 8, and it must not be 8 if parity is not none.

Parity can be null (none), 0 (even), 1 (odd).

Stop (stop bits) can be 0, 1, 2.

Defaults (8, null, 1) will work for most setups.

You don't have to provide all the parameters, you can provide only the parameters you want to change, for example {"baudrate": 115200}.

Caveats

ESP8266 has incredible capabilities, but fast Wi-Fi isn't one of them.

The UART works fine with baudrates higher than 1.5 mbps (1500000 bps), however average Wi-Fi transfer speed is usually around 900 kbps.

To get best performance:

  • Avoid the UART to USB adapter built into most ESP8266 devkits (but rather use a better external adapter such as those based on FTDI chips)
    • The built-in adapter won't go faster than ~500000bps
  • Enable software flow control and make sure it is supported by and enabled on the connected device
  • Avoid sending constant streams of data at high rates if flow control cannot be enabled

This firmware implements UART software flow control and it is enabled by default.

With software flow control, Wi-Se asks the connected UART device to momentarily suspend the data transfer (IXON/IXOFF) when the Wi-Fi can't keep up.

This will improve reliability at high speeds by orders of magnitude.

See the next section on how to ensure flow control is enabled on Linux-based devices

Software flow control on Linux

Linux supports flow control and it is usually enabled by default. Some shells (such as fish) disable software flow control on start.

fish versions prior to 3.2.0 do not support enabling it. Starting from 3.2.0, fish will still disable flow control on start up, but it will respect your choice if you enable it in your configuration file.

bash and zsh usually don't mess with it. However, some "plug-ins" may disable it.

Add the following at the end of your shell configuration file to ensure it is enabled when you login from a terminal.

~/.bashrc, ~/.zshrc, etc.

tty | grep -qE '/dev/tty[A-Za-z]+[0-9]*' && stty ixon ixoff

~/.config/fish/config.fish

string match -rq '/dev/tty[A-Za-z]+\d*' (tty) && stty ixon ixoff

Troubleshooting

Terminal is stuck

You might have pressed Ctrl+S and triggered flow control by mistake. If you're using ttyc you can press Ctrl+Q to unlock it. If you're using the web client, this will close the browser. Sorry :/ Again, PRs welcome ;)

Another possible reason is that the firmware crashed. When the firmware crashes, the UART goes out of control until execution restart. This may result in sending a "break condition", which causes agetty to switch to the next baud rate.

If you're using ttyc you can attempt to manually send more breaks, until the terminal becomes responsive again, or try to perform an automatic baud detection. Every time you send a break, agetty will try the next baud rate. Note that if the current console is enabled for kernel messages and SysRq is enabled you have to send a break twice in a row.

As a workaround you can change, on connected device, the options passed to agetty and configure it to use a single baudrate. On systemd-based distributions you can run sudo systemctl edit [email protected] (you can retrieve the TTY by running tty), then add

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,57600,38400,9600 %I $TERM

Change the baudrate to whatever you like, then sudo systemctl restart [email protected].

Terminal output is garbled

Software flow control is disabled or not supported/enabled on the connected device. See if running stty ixon ixoff on the remote device makes any difference.

If you can't enable flow control on the connected device, try with low baud rates.

LEDs meaning

Wi-Se boards come with 4 LEDs:

LED Color
Wi-Fi Blue
Status Yellow/Amber
TX Red
RX Red

Wi-Fi LED blinking, status LED on

Connecting to Wi-Fi.

Wi-Fi LED on

Connected and operating normally.

Wi-Fi LED on, status LED blinking fast (or on)

Operating normally, but flow control is currently blocked. If the status LED doesn't turn off within 0.5 sec there might be a bug.

It is normal for flow control to occur regularly when there is a lot of terminal activity. However, if it gets stuck turned on it might be the symptom of another issue.

TX and RX blink very fast

Terminal activity:

  • TX blinks โ‡’ WebSocket to UART
  • RX blinks โ‡’ UART to WebSocket

TX and RX blink one at a time, slowly

Device error:

  • OTA update failed (ensure the OTA host port is enabled in your firewall - OTA requires the devices to be mutually reachable)
  • When in Wi-Fi station (client) mode: disconnected from the wireless network

The device will restart after around 1 second.

OTA LED animations

When performing OTA, the device will switch to "Christmas tree lights mode" and show a series of animations to report the current status.

  • OTA start: LEDs turn on one at a time, twice, in sequence RX, TX, Status, Wi-Fi
  • OTA progress: the LEDs will act as a firmware download progress bar
  • OTA error: RX/TX LEDs blink slowly
  • OTA success: RX, TX and status LEDs will turn off in sequence, Wi-Fi LED will stay on. The device will restart after ~3 sec into the new firmware.

License

This project is licensed under the GNU General Public License v3.0.

All content under /html was originally written for ttyd, and it has been slightly modified. ttyd is licensed under MIT license.

See the git commit history for the /html directory for original authors credits.

See fakeesp/README.md for licensing info for the ESP SDK and libraries mocks.

wi-se-sw's People

Contributors

bencao avatar depau avatar dependabot-preview[bot] avatar dependabot[bot] avatar greenkeeper[bot] avatar ideal avatar mathiasaerts avatar oskar456 avatar shohey1226 avatar tsl0922 avatar wikiwang1991 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

wi-se-sw's Issues

can not compile

docker run -it -v /root:/root -v /home:/home -v/mnt:/mnt -w $PWD  petewall/platformio  login
docker ps
docker exec ID bash

cd /mnt/test/github/wi-se-sw/
/mnt/test/github/wi-se-sw/builder.py prepare --example  #generate follow dir
cd /mnt/test/github/wi-se-sw/.builder/config.yml

### modify C:\test\github\wi-se-sw\configs\config.yml.example

/mnt/test/github/wi-se-sw/builder.py prepare --example;pio run

DOWNLOAD TOOL v3.6.4
C:\test\github\wi-se-sw\.builder\config.yml\.pio\build\wi_se\firmware.bin                0x0
===

Building in release mode
Compiling .pio/build/wi_se/src/ExtendedSerial.cpp.o
Compiling .pio/build/wi_se/src/main.cpp.osrc/ExtendedSerial.cpp:49: warning: ignoring '#pragma clang diagnostic' [-Wunknown-pragmas]
49 | #pragma clang diagnostic push
|
src/ExtendedSerial.cpp:50: warning: ignoring '#pragma clang diagnostic' [-Wunknown-pragmas]
50 | #pragma clang diagnostic ignored "-Wint-to-pointer-cast"
|
src/ExtendedSerial.cpp:58: warning: ignoring '#pragma clang diagnostic' [-Wunknown-pragmas]
58 | #pragma clang diagnostic pop |
In file included from /root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h:40,
from /root/.platformio/packages/framework-arduinoespressif8266/libraries/ArduinoOTA/ArduinoOTA.h:4,
from src/main.cpp:2:
/root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h:68:34: error: expected class-name before '{' token
68 | class WiFiServer : public Server {
| ^
/root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h:97:16: error: type 'Print' is not a base type for type 'WiFiServer'
97 | using Print::write;
| ^~~~~
src/main.cpp: In function 'void setup()':
src/main.cpp:103:58: warning: null argument where non-null required (argument 2) [-Wnonnull]
103 | strncpy(wifiSsid, WIFI_SSID, sizeof(wifiSsid));
| ^
Compiling .pio/build/wi_se/src/server.cpp.o
Compiling .pio/build/wi_se/src/ttyd.cpp.o
*** [.pio/build/wi_se/src/main.cpp.o] Error 1
In file included from include/ttyd.h:8,
from include/Server.h:8,
from /root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h:31,
from /root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h:40,
from .pio/libdeps/wi_se/ESP Async WebServer/src/ESPAsyncWebServer.h:35,
from src/server.cpp:6:

....

  |     ^~~~~~~~~~~~~~                                                                                                                                                        [0/1464]
  |     AsyncServer

include/Server.h:45:29: error: 'AsyncWebServer' has not been declared
45 | WiSeServer(char *token, AsyncWebServer *httpd, AsyncWebSocket *websocket, TTY *ttyd) :
| ^~~~~~~~~~~~~~
include/Server.h:58:36: error: 'AsyncWebServerRequest' has not been declared
58 | static bool checkHttpBasicAuth(AsyncWebServerRequest *request);
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:60:29: error: 'AsyncWebServerRequest' has not been declared
60 | static void handleIndex(AsyncWebServerRequest request);
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:62:29: error: 'AsyncWebServerRequest' has not been declared
62 | void handleStatsRequest(AsyncWebServerRequest request) const;
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:64:28: error: 'AsyncWebServerRequest' has not been declared
64 | void handleSttyRequest(AsyncWebServerRequest request) const;
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:66:25: error: 'AsyncWebServerRequest' has not been declared
66 | void handleSttyBody(AsyncWebServerRequest request, uint8_t data, size_t len, size_t index, size_t total) const;
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:68:27: error: 'AsyncWebServerRequest' has not been declared
68 | void sttySendResponse(AsyncWebServerRequest request) const;
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h:70:22: error: 'AsyncWebServerRequest' has not been declared
70 | void handleToken(AsyncWebServerRequest request) const;
| ^~~~~~~~~~~~~~~~~~~~~
include/Server.h: In constructor 'WiSeServer::WiSeServer(char
, int
, AsyncWebSocket
, TTY
)':
include/Server.h:47:13: error: class 'WiSeServer' does not have any field named 'httpd'
47 | httpd{httpd},
| ^~~~~
In file included from /root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/ESP8266WiFi.h:40,
from .pio/libdeps/wi_se/ESP Async WebServer/src/ESPAsyncWebServer.h:35,
from src/server.cpp:6:
/root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h: At global scope:
/root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h:68:34: error: expected class-name before '{' token
68 | class WiFiServer : public Server {
| ^
/root/.platformio/packages/framework-arduinoespressif8266/libraries/ESP8266WiFi/src/WiFiServer.h:97:16: error: type 'Print' is not a base type for type 'WiFiServer'
97 | using Print::write;
| ^~~~~
^C
[.pio/build/wi_se/src/ttyd.cpp.o] Build interrupted.
*** [.pio/build/wi_se/src/server.cpp.o] Build interrupted.
Error: Aborted by user

running several hours Exception occurred in esp8266

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Exception (3):
epc1=0x4010086f epc2=0x00000000 epc3=0x401014e5 excvaddr=0x4005f341 depc=0x00000000

>>>stack>>>

ctx: sys
sp: 3fffed00 end: 3fffffb0 offset: 0190
3fffee90:  ffffffff 3fffc6fc 00000000 40100620
3fffeea0:  00000000 3fffdad0 3ffef570 40238364
3fffeeb0:  000b0000 4bc6a7f0 00000020 40100cd8
3fffeec0:  4023e015 3fff40ea 00000000 401005fc
3fffeed0:  00006208 7f5e0001 6924faff 4025e4d1
3fffeee0:  00000008 3ffefe84 3ffed660 4023df2c
3fffeef0:  3ffed660 40242698 3ffed660 3ffec400
3fffef00:  3ffec400 00000161 00000000 00000020
3fffef10:  00000002 00000018 40256137 3ffed660
3fffef20:  3ffec3f4 3fffdcc0 3ffe9d00 3ffe9d00
3fffef30:  00000000 3ffed660 00000000 3ffe860c
3fffef40:  402559fb 3fffdab0 00000000 40221976
3fffef50:  3ffe9d00 40000f49 3fffdab0 40000f49
3fffef60:  40000e19 00085334 00000000 00000005
3fffef70:  00000000 aa55aa55 000000b1 401059fd
3fffef80:  40105a03 00000000 00000005 8fc0d875
3fffef90:  4010000d 00000000 00085334 401000ab
3fffefa0:  00000000 3fffef3c 00000000 3fffff68
3fffefb0:  3fffffc0 00000000 00000000 feefeffe
3fffefc0:  feefeffe feefeffe feefeffe feefeffe
3fffefd0:  feefeffe feefeffe feefeffe feefeffe
3fffefe0:  feefeffe feefeffe feefeffe feefeffe
3fffeff0:  feefeffe feefeffe feefeffe feefeffe
3ffff000:  feefeffe feefeffe feefeffe feefeffe
3ffff010:  feefeffe feefeffe feefeffe feefeffe
3ffff020:  feefeffe feefeffe feefeffe feefeffe
3ffff030:  feefeffe feefeffe feefeffe feefeffe
3ffff040:  feefeffe feefeffe feefeffe feefeffe
3ffff050:  feefeffe feefeffe feefeffe feefeffe
3ffff060:  feefeffe feefeffe feefeffe feefeffe
3ffff070:  feefeffe feefeffe feefeffe feefeffe
3ffff080:  feefeffe feefeffe feefeffe feefeffe
3ffff090:  feefeffe feefeffe feefeffe feefeffe
3ffff0a0:  feefeffe feefeffe feefeffe feefeffe
3ffff0b0:  feefeffe feefeffe feefeffe feefeffe
3ffff0c0:  feefeffe feefeffe feefeffe feefeffe
3ffff0d0:  feefeffe feefeffe feefeffe feefeffe
3ffff0e0:  feefeffe feefeffe feefeffe feefeffe
3ffff0f0:  feefeffe feefeffe feefeffe feefeffe
3ffff100:  feefeffe feefeffe feefeffe feefeffe
3ffff110:  feefeffe feefeffe feefeffe feefeffe
3ffff120:  feefeffe feefeffe feefeffe feefeffe
3ffff130:  feefeffe feefeffe feefeffe feefeffe
3ffff140:  feefeffe feefeffe feefeffe feefeffe
3ffff150:  feefeffe feefeffe feefeffe feefeffe
3ffff160:  feefeffe feefeffe feefeffe feefeffe
3ffff170:  feefeffe feefeffe feefeffe feefeffe
3ffff180:  feefeffe feefeffe feefeffe feefeffe
3ffff190:  feefeffe feefeffe feefeffe feefeffe
3ffff1a0:  feefeffe feefeffe feefeffe feefeffe
3ffff1b0:  feefeffe feefeffe feefeffe feefeffe
3ffff1c0:  feefeffe feefeffe feefeffe feefeffe
3ffff1d0:  feefeffe feefeffe feefeffe feefeffe
3ffff1e0:  feefeffe feefeffe feefeffe feefeffe
3ffff1f0:  feefeffe feefeffe feefeffe feefeffe
3ffff200:  feefeffe feefeffe feefeffe feefeffe
3ffff210:  feefeffe feefeffe feefeffe feefeffe
3ffff220:  feefeffe feefeffe feefeffe feefeffe
3ffff230:  feefeffe feefeffe feefeffe feefeffe
3ffff240:  feefeffe feefeffe feefeffe feefeffe
3ffff250:  feefeffe feefeffe feefeffe feefeffe
3ffff260:  feefeffe feefeffe feefeffe feefeffe
3ffff270:  feefeffe feefeffe feefeffe feefeffe
3ffff280:  feefeffe feefeffe feefeffe feefeffe
3ffff290:  feefeffe feefeffe feefeffe feefeffe
3ffff2a0:  feefeffe feefeffe feefeffe feefeffe
3ffff2b0:  feefeffe feefeffe feefeffe feefeffe
3ffff2c0:  feefeffe feefeffe feefeffe feefeffe
3ffff2d0:  feefeffe feefeffe feefeffe feefeffe
3ffff2e0:  feefeffe feefeffe feefeffe feefeffe
3ffff2f0:  feefeffe feefeffe feefeffe feefeffe
3ffff300:  feefeffe feefeffe feefeffe feefeffe
3ffff310:  feefeffe feefeffe feefeffe feefeffe
3ffff320:  feefeffe feefeffe feefeffe feefeffe
3ffff330:  feefeffe feefeffe feefeffe feefeffe
3ffff340:  feefeffe feefeffe feefeffe feefeffe
3ffff350:  feefeffe feefeffe feefeffe feefeffe
3ffff360:  feefeffe feefeffe feefeffe feefeffe
3ffff370:  feefeffe feefeffe feefeffe feefeffe
3ffff380:  feefeffe feefeffe feefeffe feefeffe
3ffff390:  feefeffe feefeffe feefeffe feefeffe
3ffff3a0:  feefeffe feefeffe feefeffe feefeffe
3ffff3b0:  feefeffe feefeffe feefeffe feefeffe
3ffff3c0:  feefeffe feefeffe feefeffe feefeffe
3ffff3d0:  feefeffe feefeffe feefeffe feefeffe
3ffff3e0:  feefeffe feefeffe feefeffe feefeffe
3ffff3f0:  feefeffe feefeffe feefeffe feefeffe
3ffff400:  feefeffe feefeffe feefeffe feefeffe
3ffff410:  feefeffe feefeffe feefeffe feefeffe
3ffff420:  feefeffe feefeffe feefeffe feefeffe
3ffff430:  feefeffe feefeffe feefeffe feefeffe
3ffff440:  feefeffe feefeffe feefeffe feefeffe
3ffff450:  feefeffe feefeffe feefeffe feefeffe
3ffff460:  feefeffe feefeffe feefeffe feefeffe
3ffff470:  feefeffe feefeffe feefeffe feefeffe
3ffff480:  feefeffe feefeffe feefeffe feefeffe
3ffff490:  feefeffe feefeffe feefeffe feefeffe
3ffff4a0:  feefeffe feefeffe feefeffe feefeffe
3ffff4b0:  feefeffe feefeffe feefeffe feefeffe
3ffff4c0:  feefeffe feefeffe feefeffe feefeffe
3ffff4d0:  feefeffe feefeffe feefeffe feefeffe
3ffff4e0:  feefeffe feefeffe feefeffe feefeffe
3ffff4f0:  feefeffe feefeffe feefeffe feefeffe
3ffff500:  feefeffe feefeffe feefeffe feefeffe
3ffff510:  feefeffe feefeffe feefeffe feefeffe
3ffff520:  feefeffe feefeffe feefeffe feefeffe
3ffff530:  feefeffe feefeffe feefeffe feefeffe
3ffff540:  feefeffe feefeffe feefeffe feefeffe
3ffff550:  feefeffe feefeffe feefeffe feefeffe
3ffff560:  feefeffe feefeffe feefeffe feefeffe
3ffff570:  feefeffe feefeffe feefeffe feefeffe
3ffff580:  feefeffe feefeffe feefeffe feefeffe
3ffff590:  feefeffe feefeffe feefeffe feefeffe
3ffff5a0:  feefeffe feefeffe feefeffe feefeffe
3ffff5b0:  feefeffe feefeffe feefeffe feefeffe
3ffff5c0:  feefeffe feefeffe feefeffe feefeffe
3ffff5d0:  feefeffe feefeffe feefeffe feefeffe
3ffff5e0:  feefeffe feefeffe feefeffe feefeffe
3ffff5f0:  feefeffe feefeffe feefeffe feefeffe
3ffff600:  feefeffe feefeffe feefeffe feefeffe
3ffff610:  feefeffe feefeffe feefeffe feefeffe
3ffff620:  feefeffe feefeffe feefeffe feefeffe
3ffff630:  feefeffe feefeffe feefeffe feefeffe
3ffff640:  feefeffe feefeffe feefeffe feefeffe
3ffff650:  feefeffe feefeffe feefeffe feefeffe
3ffff660:  feefeffe feefeffe feefeffe feefeffe
3ffff670:  feefeffe feefeffe feefeffe feefeffe
3ffff680:  feefeffe feefeffe feefeffe feefeffe
3ffff690:  feefeffe feefeffe feefeffe feefeffe
3ffff6a0:  feefeffe feefeffe feefeffe feefeffe
3ffff6b0:  feefeffe feefeffe feefeffe feefeffe
3ffff6c0:  feefeffe feefeffe feefeffe feefeffe
3ffff6d0:  feefeffe feefeffe feefeffe feefeffe
3ffff6e0:  feefeffe feefeffe feefeffe feefeffe
3ffff6f0:  feefeffe feefeffe feefeffe feefeffe
3ffff700:  feefeffe feefeffe feefeffe feefeffe
3ffff710:  feefeffe feefeffe feefeffe feefeffe
3ffff720:  feefeffe feefeffe feefeffe feefeffe
3ffff730:  feefeffe feefeffe feefeffe feefeffe
3ffff740:  feefeffe feefeffe feefeffe feefeffe
3ffff750:  feefeffe feefeffe feefeffe feefeffe
3ffff760:  feefeffe feefeffe feefeffe feefeffe
3ffff770:  feefeffe feefeffe feefeffe feefeffe
3ffff780:  feefeffe feefeffe feefeffe feefeffe
3ffff790:  feefeffe feefeffe feefeffe feefeffe
3ffff7a0:  feefeffe feefeffe feefeffe feefeffe
3ffff7b0:  feefeffe feefeffe feefeffe feefeffe
3ffff7c0:  feefeffe feefeffe feefeffe feefeffe
3ffff7d0:  feefeffe feefeffe feefeffe feefeffe
3ffff7e0:  feefeffe feefeffe feefeffe feefeffe
3ffff7f0:  feefeffe feefeffe feefeffe feefeffe
3ffff800:  feefeffe feefeffe feefeffe feefeffe
3ffff810:  feefeffe feefeffe feefeffe feefeffe
3ffff820:  feefeffe feefeffe feefeffe feefeffe
3ffff830:  feefeffe feefeffe feefeffe feefeffe
3ffff840:  feefeffe feefeffe feefeffe feefeffe
3ffff850:  feefeffe feefeffe feefeffe feefeffe
3ffff860:  feefeffe feefeffe feefeffe feefeffe
3ffff870:  feefeffe feefeffe feefeffe feefeffe
3ffff880:  feefeffe feefeffe feefeffe feefeffe
3ffff890:  feefeffe feefeffe feefeffe feefeffe
3ffff8a0:  feefeffe feefeffe feefeffe feefeffe
3ffff8b0:  feefeffe feefeffe feefeffe feefeffe
3ffff8c0:  feefeffe feefeffe feefeffe feefeffe
3ffff8d0:  feefeffe feefeffe feefeffe feefeffe
3ffff8e0:  feefeffe feefeffe feefeffe feefeffe
3ffff8f0:  feefeffe feefeffe feefeffe feefeffe
3ffff900:  feefeffe feefeffe feefeffe feefeffe
3ffff910:  feefeffe feefeffe feefeffe feefeffe
3ffff920:  feefeffe feefeffe feefeffe feefeffe
3ffff930:  feefeffe feefeffe feefeffe feefeffe
3ffff940:  feefeffe feefeffe feefeffe feefeffe
3ffff950:  feefeffe feefeffe feefeffe feefeffe
3ffff960:  feefeffe feefeffe feefeffe feefeffe
3ffff970:  feefeffe feefeffe feefeffe feefeffe
3ffff980:  feefeffe feefeffe feefeffe feefeffe
3ffff990:  feefeffe feefeffe feefeffe feefeffe
3ffff9a0:  feefeffe feefeffe feefeffe feefeffe
3ffff9b0:  feefeffe feefeffe feefeffe feefeffe
3ffff9c0:  feefeffe feefeffe feefeffe feefeffe
3ffff9d0:  feefeffe feefeffe feefeffe feefeffe
3ffff9e0:  feefeffe feefeffe feefeffe feefeffe
3ffff9f0:  feefeffe feefeffe feefeffe feefeffe
3ffffa00:  feefeffe feefeffe feefeffe feefeffe
3ffffa10:  feefeffe feefeffe feefeffe feefeffe
3ffffa20:  feef0200 0000000c 3fffff10 feefeffe
3ffffa30:  feefeffe feefeffe feefeffe 3fff39a4
3ffffa40:  00000001 0000000c 3fffff10 4021a7f2
3ffffa50:  00000000 00000000 00000000 00000000
3ffffa60:  00000000 00000000 00000000 00000000
3ffffa70:  00000000 00000000 00000000 00000000
3ffffa80:  00000000 00000000 00000000 00000000
3ffffa90:  00000000 00000000 00000000 00000000
3ffffaa0:  00000000 00000000 00000000 00000000
3ffffab0:  00000000 00000000 00000000 00000000
3ffffac0:  00000000 00000000 00000000 00000000
3ffffad0:  00000000 00000000 00000000 00000000
3ffffae0:  00000000 00000000 00000000 00000000
3ffffaf0:  00000000 00000000 00000000 00000000
3ffffb00:  00000005 00000000 00000020 40100400
3ffffb10:  00000000 00000000 00000005 40102668
3ffffb20:  3ffe9bd5 401058fb 3ffed638 00000000
3ffffb30:  401031ef 3ffed638 00000000 00000000
3ffffb40:  0000001c 486ea834 3ffedef4 401033cc
3ffffb50:  3ffea468 00000000 00000000 4021a57a
3ffffb60:  0000001c 486ea834 40103886 00000100
3ffffb70:  3ffea468 7fffffff 00002200 00000001
3ffffb80:  00000001 00000080 3fffc228 40106195
3ffffb90:  3ffea468 3fffff10 3ffef2bc 486ea834
3ffffba0:  3ffea474 2c9f0300 4000050c 3fffc278
3ffffbb0:  401035a8 3fffc200 00000022 40100400
3ffffbc0:  4023ed78 00000030 00000000 ffffffff
3ffffbd0:  4023ed72 3ffed2c8 00000000 00000000
3ffffbe0:  0000ffff bfffffff 00080240 c0052004
3ffffbf0:  3ffeca70 00052000 ff000fff 3ffee6c0
3ffffc00:  3ffefe84 00000001 3fff3ed4 00000030
3ffffc10:  00000000 00000000 0000001f 40100400
3ffffc20:  40000f83 00000030 3fffc228 40106195
3ffffc30:  00000000 00000000 0000001f 40100400
3ffffc40:  00000000 00000000 3fffc228 40106195
3ffffc50:  4000050c 3fff4322 40256b53 00000001
3ffffc60:  ffffffff 00000000 3ffe9d21 00000008
3ffffc70:  40256ba2 3ffed2f0 3ffefe84 00000001
3ffffc80:  00000002 00000000 00000020 40100400
3ffffc90:  00000005 00000005 00000002 40102668
3ffffca0:  00000005 00000000 00000020 40100400
3ffffcb0:  00000000 4023ed7b 00000005 40102668
3ffffcc0:  3ffe9bd5 401058fb 3ffed660 3ffed2f0
3ffffcd0:  0000000c 00000000 00000020 40100400
3ffffce0:  00000005 00000000 00000020 40100400
3ffffcf0:  3ffe9bdc 40101fb2 00000005 40102668
3ffffd00:  00000005 00000000 00000020 40100400
3ffffd10:  401031ef 3ffed660 00000005 40102668
3ffffd20:  3ffe9bd5 401058fb 3ffed660 40100400
3ffffd30:  00000000 00000000 0000001f 40100400
3ffffd40:  00000005 00000000 00000020 40100400
3ffffd50:  4000050c 00000000 00000005 40102668
3ffffd60:  3ffe9bd5 401058fb 3ffed660 ffffffff
3ffffd70:  401031ef 3ffed660 00000020 40100400
3ffffd80:  0000001c 2db595bc 3ffedef4 401033cc
3ffffd90:  3ffea468 00000000 00000000 40100400
3ffffda0:  0000001c 2db595bc 40103886 00000100
3ffffdb0:  3ffea468 7fffffff 00002200 00000001
3ffffdc0:  00000001 00006208 0000001f 40100400
3ffffdd0:  3ffea468 00000000 3fffc228 2db595bc
3ffffde0:  3ffea48c 2c9f0300 4000050c 3fffc278
3ffffdf0:  00000005 00000000 00000020 40100400
3ffffe00:  40000659 00000030 00000005 40102668
3ffffe10:  3ffe9bd5 401058fb 3ffed660 4bc6a7f0
3ffffe20:  401031ef 3ffed660 00000000 fffffffe
3ffffe30:  0000001c 2db5a4f8 3ffedef4 401033cc
3ffffe40:  3ffea48c 00000000 00000000 00000030
3ffffe50:  0000001c 2db5a4f8 40103886 00000100
3ffffe60:  3ffea48c 7fffffff 00002200 00000001
3ffffe70:  00000001 00006208 4000050c 3fffc278
3ffffe80:  3ffea48c 3fffc200 00000022 2db5a4f8
3ffffe90:  3ffea474 2c9f0300 4000050c 3fffc278
3ffffea0:  401035a8 3fffc200 00000022 00000000
3ffffeb0:  40221b0d 00000030 00000010 ffffffff
3ffffec0:  40000e24 00000001 00000000 00000000
3ffffed0:  00000000 00000000 00000000 fffffffe
3ffffee0:  ffffffff 3fffc6fc 00000001 00000020
3ffffef0:  00000000 3fffdad0 3ffef570 00000030
3fffff00:  00000004 00000000 4bc6a7f0 00000000
3fffff10:  000bb3a0 00000000 40100511 00000004
3fffff20:  000bb3a1 00000000 00000000 4010059c
3fffff30:  40222b3d 3fff04cc 3fff02cc 3ffef570
3fffff40:  3fffdad0 00000000 3fff02cc 4020b3f9
3fffff50:  4025bbf2 00000000 3ffef258 4020bad3
3fffff60:  00000000 00000000 3ffe860c 3ffef570
3fffff70:  3fffdad0 00000000 3ffe860c 40221a5e
3fffff80:  3fffdad0 00000000 3ffef258 3ffef570
3fffff90:  3fffdad0 00000000 3ffef558 40221ab8
3fffffa0:  00000000 00000000 00000001 40221b10
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

 ets Jan  8 2013,rst cause:1, boot mode:(3,6)

load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00085340
~ld


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.