Skip to content

Instantly share code, notes, and snippets.

@mcauser
Created May 12, 2016 15:50
Show Gist options
  • Select an option

  • Save mcauser/08e0f6395fa91aa05b2b4b057ac63329 to your computer and use it in GitHub Desktop.

Select an option

Save mcauser/08e0f6395fa91aa05b2b4b057ac63329 to your computer and use it in GitHub Desktop.
micropython/micropython - /esp8266/build/frozen.c with .DS_Store in /esp8266/scripts
#include <stdint.h>
const char mp_frozen_str_names[] = {
".DS_St\0"
"_boot\0"
"flashbdev\0"
"hd44780\0"
"i2c_lcd\0"
"i2c_lcd_test\0"
"inisetup\0"
"neopixel\0"
"ntptime\0"
"onewire\0"
"port_diag\0"
"webrepl\0"
"webrepl_setup\0"
"websocket_helper\0"
"\0"};
const uint32_t mp_frozen_str_sizes[] = {
6148,
155,
2010,
3381,
3253,
1073,
1213,
840,
866,
3338,
554,
2005,
2072,
1595,
};
const char mp_frozen_str_content[] = {
"\x00\x00\x00\x01Bud1\x00\x00\x10\x00\x00\x00\x08\x00\x00\x00\x10\x00\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x08\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00 \x00\x00\x00\x01\x00\x00\x00@\x00\x00\x00\x01\x00\x00\x00\x80\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x10\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x01\x00\x00@\x00\x00\x00\x00\x01\x00\x00\x80\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x01\x00\x10\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x01\x00@\x00\x00\x00\x00\x00\x01\x00\x80\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x00\x01\x08\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x01 \x00\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x10\x0b\x00\x00\x00E\x00\x00\x00%\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04DSDB\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x80\x00\x00\x00\x01\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\x02\x00\x00\x00\x00\x01\x00\x00\x04\x00\x00\x00\x00\x02\x00\x00\x08\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00 \x00\x00\x00\x00\x01\x00\x00@\x00\x00\x00\x00\x01\x00\x00\x80\x00\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x01\x00\x02\x00\x00\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x01\x00\x08\x00\x00\x00\x00\x00\x01\x00\x10\x00\x00\x00\x00\x00\x01\x00 \x00\x00\x00\x00\x00\x01\x00@\x00\x00\x00\x00\x00\x01\x00\x80\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x00\x00\x00\x00\x00\x00\x01\x04\x00\x00\x00\x00\x00\x00\x01\x08\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x01 \x00\x00\x00\x00\x00\x00\x01@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\0"
"import uos\nfrom flashbdev import bdev\n\ntry:\n if bdev:\n vfs = uos.VfsFat(bdev, \"\")\nexcept OSError:\n import inisetup\n vfs = inisetup.setup()\n\0"
"import esp\n\nclass FlashBdev:\n\n SEC_SIZE = 4096\n START_SEC = 0x89000 // SEC_SIZE\n NUM_BLK = 0x73\n\n def __init__(self, blocks=NUM_BLK):\n self.blocks = blocks\n\n def readblocks(self, n, buf):\n #print(\"readblocks(%s, %x(%d))\" % (n, id(buf), len(buf)))\n esp.flash_read((n + self.START_SEC) * self.SEC_SIZE, buf)\n\n def writeblocks(self, n, buf):\n #print(\"writeblocks(%s, %x(%d))\" % (n, id(buf), len(buf)))\n #assert len(buf) <= self.SEC_SIZE, len(buf)\n esp.flash_erase(n + self.START_SEC)\n esp.flash_write((n + self.START_SEC) * self.SEC_SIZE, buf)\n\n def ioctl(self, op, arg):\n #print(\"ioctl(%d, %r)\" % (op, arg))\n if op == 4: # BP_IOCTL_SEC_COUNT\n return self.blocks\n if op == 5: # BP_IOCTL_SEC_SIZE\n return self.SEC_SIZE\n\ndef set_bl_flash_size(real_size):\n if real_size == 256*1024:\n code = 1\n elif real_size == 512*1024:\n code = 0\n elif real_size == 1024*1024:\n code = 2\n elif real_size == 2048*1024:\n code = 3\n elif real_size == 4096*1024:\n code = 4\n else:\n code = 2\n buf = bytearray(4096)\n esp.flash_read(0, buf)\n buf[3] = (buf[3] & 0xf) | (code << 4)\n esp.flash_erase(0)\n esp.flash_write(0, buf)\n\n# If bootloader size ID doesn\'t correspond to real Flash size,\n# fix bootloader value and reboot.\nsize = esp.flash_id() >> 16\n# Check that it looks like realistic power of 2 for flash sizes\n# commonly used with esp8266\nif 22 >= size >= 18:\n size = 1 << size\n if size != esp.flash_size():\n import machine\n import time\n print(\"Bootloader Flash size appear to have been set incorrectly, trying to fix\")\n set_bl_flash_size(size)\n machine.reset()\n while 1: time.sleep(1)\n\nsize = esp.flash_size()\nif size < 1024*1024:\n bdev = None\nelse:\n # 16K at the flash end is reserved for SDK params storage\n bdev = FlashBdev((size - 16384) // FlashBdev.SEC_SIZE - FlashBdev.START_SEC)\n\0"
"class LcdApi(object):\n\tLCD_CLR = 0x01 # DB0: clear display\n\tLCD_HOME = 0x02 # DB1: return to home position\n\n\tLCD_ENTRY_MODE = 0x04 # DB2: set entry mode\n\tLCD_ENTRY_INC = 0x02 # --DB1: increment\n\tLCD_ENTRY_SHIFT = 0x01 # --DB0: shift\n\n\tLCD_ON_CTRL = 0x08 # DB3: turn lcd/cursor on\n\tLCD_ON_DISPLAY = 0x04 # --DB2: turn display on\n\tLCD_ON_CURSOR = 0x02 # --DB1: turn cursor on\n\tLCD_ON_BLINK = 0x01 # --DB0: blinking cursor\n\n\tLCD_MOVE = 0x10 # DB4: move cursor/display\n\tLCD_MOVE_DISP = 0x08 # --DB3: move display (0-> move cursor)\n\tLCD_MOVE_RIGHT = 0x04 # --DB2: move right (0-> left)\n\n\tLCD_FUNCTION = 0x20 # DB5: function set\n\tLCD_FUNCTION_8BIT = 0x10 # --DB4: set 8BIT mode (0->4BIT mode)\n\tLCD_FUNCTION_2LINES = 0x08 # --DB3: two lines (0->one line)\n\tLCD_FUNCTION_10DOTS = 0x04 # --DB2: 5x10 font (0->5x7 font)\n\tLCD_FUNCTION_RESET = 0x30 # See \"Initializing by Instruction\" section\n\n\tLCD_CGRAM = 0x40 # DB6: set CG RAM address\n\tLCD_DDRAM = 0x80 # DB7: set DD RAM address\n\n\tLCD_RS_CMD = 0\n\tLCD_RS_DATA = 1\n\n\tLCD_RW_WRITE = 0\n\tLCD_RW_READ = 1\n\n\tdef __init__(self, num_lines, num_columns):\n\t\tself.num_lines = num_lines\n\t\tif self.num_lines > 4:\n\t\t\tself.num_lines = 4\n\t\tself.num_columns = num_columns\n\t\tif self.num_columns > 40:\n\t\t\tself.num_columns = 40\n\t\tself.cursor_x = 0\n\t\tself.cursor_y = 0\n\t\tself.backlight = True\n\t\tself.display_off()\n\t\tself.backlight_on()\n\t\tself.clear()\n\t\tself.hal_write_command(self.LCD_ENTRY_MODE | self.LCD_ENTRY_INC)\n\t\tself.hide_cursor()\n\t\tself.display_on()\n\n\tdef clear(self):\n\t\tself.hal_write_command(self.LCD_CLR)\n\t\tself.hal_write_command(self.LCD_HOME)\n\t\tself.cursor_x = 0\n\t\tself.cursor_y = 0\n\n\tdef show_cursor(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | self.LCD_ON_CURSOR)\n\n\tdef hide_cursor(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY)\n\n\tdef blink_cursor_on(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | self.LCD_ON_CURSOR | self.LCD_ON_BLINK)\n\n\tdef blink_cursor_off(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | self.LCD_ON_CURSOR)\n\n\tdef display_on(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY)\n\n\tdef display_off(self):\n\t\tself.hal_write_command(self.LCD_ON_CTRL)\n\n\tdef backlight_on(self):\n\t\tself.backlight = True\n\t\tself.hal_backlight_on()\n\n\tdef backlight_off(self):\n\t\tself.backlight = False\n\t\tself.hal_backlight_off()\n\n\tdef move_to(self, cursor_x, cursor_y):\n\t\tself.cursor_x = cursor_x\n\t\tself.cursor_y = cursor_y\n\t\taddr = cursor_x & 0x3f\n\t\tif cursor_y & 1:\n\t\t\taddr += 0x40 # Lines 1 & 3 add 0x40\n\t\tif cursor_y & 2:\n\t\t\taddr += 0x14 # Lines 2 & 3 add 0x14\n\t\tself.hal_write_command(self.LCD_DDRAM | addr)\n\n\tdef putchar(self, char):\n\t\tif self.cursor_x >= self.num_columns or char == \'\\n\':\n\t\t\tself.cursor_x = 0\n\t\t\tself.cursor_y += 1\n\t\t\tif self.cursor_y >= self.num_lines:\n\t\t\t\tself.cursor_y = 0\n\t\t\tself.move_to(self.cursor_x, self.cursor_y)\n\t\tif char != \'\\n\':\n\t\t\tself.hal_write_data(ord(char))\n\t\t\tself.cursor_x += 1\n\n\tdef putstr(self, string):\n\t\tfor char in string:\n\t\t\tself.putchar(char)\n\n\tdef hal_backlight_on(self):\n\t\tpass\n\n\tdef hal_backlight_off(self):\n\t\tpass\n\n\tdef hal_write_command(self, cmd):\n\t\traise NotImplementedError\n\n\tdef hal_write_data(self, data):\n\t\traise NotImplementedError\n\0"
"from time import sleep_ms\nfrom machine import I2C\nfrom hd44780 import LcdApi\n\nDEFAULT_I2C_ADDR = 0x27\n\n# Defines shifts or masks for the various LCD line attached to the PCF8574\n\nMASK_RS = 0x01\nMASK_RW = 0x02\nMASK_E = 0x04\nSHIFT_BACKLIGHT = 3\nSHIFT_DATA = 4\n\nclass I2cLcd(LcdApi):\n\t\"\"\"Implements a character based lcd connected via PCF8574 on i2c.\"\"\"\n\n\tdef __init__(self, i2c, i2c_addr, num_lines, num_columns):\n\t\tself.i2c = i2c\n\t\tself.i2c_addr = i2c_addr\n\t\t#self.i2c.send(0, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(0))\n\t\tsleep_ms(20) # Allow LCD time to powerup\n\t\t# Send reset 3 times\n\t\tself.hal_write_init_nibble(self.LCD_FUNCTION_RESET)\n\t\tsleep_ms(5) # need to delay at least 4.1 msec\n\t\tself.hal_write_init_nibble(self.LCD_FUNCTION_RESET)\n\t\tsleep_ms(1)\n\t\tself.hal_write_init_nibble(self.LCD_FUNCTION_RESET)\n\t\tsleep_ms(1)\n\t\t# Put LCD into 4 bit mode\n\t\tself.hal_write_init_nibble(self.LCD_FUNCTION)\n\t\tsleep_ms(1)\n\t\tLcdApi.__init__(self, num_lines, num_columns)\n\t\tcmd = self.LCD_FUNCTION\n\t\tif num_lines > 1:\n\t\t\tcmd |= self.LCD_FUNCTION_2LINES\n\t\tself.hal_write_command(cmd)\n\n\tdef hal_write_init_nibble(self, nibble):\n\t\t\"\"\"Writes an initialization nibble to the LCD.\n\n\n\t\tThis particular function is only used during intiialization.\n\t\t\"\"\"\n\t\tbyte = ((nibble >> 4) & 0x0f) << SHIFT_DATA\n\t\t#self.i2c.send(byte | MASK_E, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte | MASK_E))\n\t\t#self.i2c.send(byte, self.i2c_addr, )\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte))\n\n\tdef hal_backlight_on(self):\n\t\t\"\"\"Allows the hal layer to turn the backlight on.\"\"\"\n\t\t#self.i2c.send(1 << SHIFT_BACKLIGHT, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(1 << SHIFT_BACKLIGHT))\n\n\tdef hal_backlight_off(self):\n\t\t\"\"\"Allows the hal layer to turn the backlight off.\"\"\"\n\t\t#self.i2c.send(0, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(0))\n\n\tdef hal_write_command(self, cmd):\n\t\t\"\"\"Writes a command to the LCD.\n\n\t\tData is latched on the falling edge of E.\n\t\t\"\"\"\n\t\tbyte = ((self.backlight << SHIFT_BACKLIGHT) |\n\t\t\t\t(((cmd >> 4) & 0x0f) << SHIFT_DATA))\n\t\t#self.i2c.send(byte | MASK_E, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte | MASK_E))\n\t\t#self.i2c.send(byte, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte))\n\t\tbyte = ((self.backlight << SHIFT_BACKLIGHT) |\n\t\t\t\t((cmd & 0x0f) << SHIFT_DATA))\n\t\t#self.i2c.send(byte | MASK_E, self.i2c_addr, )\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte | MASK_E))\n\t\t#self.i2c.send(byte, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte))\n\t\tif cmd <= 3:\n\t\t\t# The home and clear commands require a worst\n\t\t\t# case delay of 4.1 msec\n\t\t\tsleep_ms(5)\n\n\tdef hal_write_data(self, data):\n\t\t\"\"\"Write data to the LCD.\"\"\"\n\t\tbyte = (MASK_RS |\n\t\t\t\t(self.backlight << SHIFT_BACKLIGHT) |\n\t\t\t\t(((data >> 4) & 0x0f) << SHIFT_DATA))\n\t\t#self.i2c.send(byte | MASK_E, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte | MASK_E))\n\t\t#self.i2c.send(byte, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte))\n\t\tbyte = (MASK_RS |\n\t\t\t\t(self.backlight << SHIFT_BACKLIGHT) |\n\t\t\t\t((data & 0x0f) << SHIFT_DATA))\n\t\t#self.i2c.send(byte | MASK_E, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte | MASK_E))\n\t\t#self.i2c.send(byte, self.i2c_addr)\n\t\tself.i2c.writeto(self.i2c_addr, hex(byte))\n\0"
"from time import sleep_ms, ticks_ms\nfrom machine import I2C, Pin\nfrom i2c_lcd import I2cLcd\n\nDEFAULT_I2C_ADDR = 0x27\n\ndef test_main():\n\t\"\"\"Test function for verifying basic functionality.\"\"\"\n\tprint(\"Running test_main\")\n\t#i2c = I2C(1, I2C.MASTER)\n\ti2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)\n\tlcd = I2cLcd(i2c, 0x27, 2, 16)\n\tlcd.putstr(\"It Works!\\nSecond Line\")\n\tsleep_ms(3000)\n\tlcd.clear()\n\tcount = 0\n\twhile True:\n\t\tlcd.move_to(0, 0)\n\t\tlcd.putstr(\"%7d\" % (ticks_ms() // 1000))\n\t\tsleep_ms(1000)\n\t\tcount += 1\n\t\tif count % 10 == 3:\n\t\t\tprint(\"Turning backlight off\")\n\t\t\tlcd.backlight_off()\n\t\tif count % 10 == 4:\n\t\t\tprint(\"Turning backlight on\")\n\t\t\tlcd.backlight_on()\n\t\tif count % 10 == 5:\n\t\t\tprint(\"Turning display off\")\n\t\t\tlcd.display_off()\n\t\tif count % 10 == 6:\n\t\t\tprint(\"Turning display on\")\n\t\t\tlcd.display_on()\n\t\tif count % 10 == 7:\n\t\t\tprint(\"Turning display & backlight off\")\n\t\t\tlcd.backlight_off()\n\t\t\tlcd.display_off()\n\t\tif count % 10 == 8:\n\t\t\tprint(\"Turning display & backlight on\")\n\t\t\tlcd.backlight_on()\n\t\t\tlcd.display_on()\n\n#if __name__ == \"__main__\":\ntest_main()\n\n\0"
"import uos\nimport network\nfrom flashbdev import bdev\n\ndef wifi():\n import ubinascii\n ap_if = network.WLAN(network.AP_IF)\n essid = b\"MicroPython-%s\" % ubinascii.hexlify(ap_if.config(\"mac\")[-3:])\n ap_if.config(essid=essid, authmode=network.AUTH_WPA_WPA2_PSK, password=b\"micropythoN\")\n\ndef check_bootsec():\n buf = bytearray(bdev.SEC_SIZE)\n bdev.readblocks(0, buf)\n empty = True\n for b in buf:\n if b != 0xff:\n empty = False\n break\n if empty:\n return True\n fs_corrupted()\n\ndef fs_corrupted():\n import time\n while 1:\n print(\"\"\"\\\nFAT filesystem appears to be corrupted. If you had important data there, you\nmay want to make a flash snapshot to try to recover it. Otherwise, perform\nfactory reprogramming of MicroPython firmware (completely erase flash, followed\nby firmware programming).\n\"\"\")\n time.sleep(3)\n\ndef setup():\n check_bootsec()\n print(\"Performing initial setup\")\n wifi()\n uos.VfsFat.mkfs(bdev)\n vfs = uos.VfsFat(bdev, \"\")\n with open(\"/boot.py\", \"w\") as f:\n f.write(\"\"\"\\\n# This file is executed on every boot (including wake-boot from deepsleep)\n#import webrepl\n#webrepl.start()\n\"\"\")\n return vfs\n\0"
"# NeoPixel driver for MicroPython on ESP8266\n# MIT license; Copyright (c) 2016 Damien P. George\n\nfrom esp import neopixel_write\n\nclass NeoPixel:\n def __init__(self, pin, n):\n self.pin = pin\n self.n = n\n self.buf = bytearray(n * 3)\n self.pin.init(pin.OUT)\n\n def __setitem__(self, index, val):\n r, g, b = val\n self.buf[index * 3] = g\n self.buf[index * 3 + 1] = r\n self.buf[index * 3 + 2] = b\n\n def __getitem__(self, index):\n i = index * 3\n return self.buf[i + 1], self.buf[i], self.buf[i + 2]\n\n def fill(self, color):\n r, g, b = color\n for i in range(len(self.buf) / 3):\n self.buf[i * 3] = g\n self.buf[i * 3 + 1] = r\n self.buf[i * 3 + 2] = b\n\n def write(self):\n neopixel_write(self.pin, self.buf, True)\n\0"
"try:\n import usocket as socket\nexcept:\n import socket\ntry:\n import ustruct as struct\nexcept:\n import struct\n\n# (date(2000, 1, 1) - date(1900, 1, 1)).days * 24*60*60\nNTP_DELTA = 3155673600\n\ndef time():\n NTP_QUERY = bytearray(48)\n NTP_QUERY[0] = 0x1b\n addr = socket.getaddrinfo(\'pool.ntp.org\', 123)[0][-1]\n s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n s.settimeout(1)\n res = s.sendto(NTP_QUERY, addr)\n msg = s.recv(48)\n s.close()\n val = struct.unpack(\"!I\", msg[40:44])[0]\n return val - NTP_DELTA\n\n# There\'s currently no timezone support in MicroPython, so\n# utime.localtime() will return UTC time (as if it was .gmtime())\ndef settime():\n t = time()\n import machine\n import utime\n tm = utime.localtime(t)\n tm = tm[0:3] + (0,) + tm[3:6] + (0,)\n machine.RTC().datetime(tm)\n print(utime.localtime())\n\0"
"# 1-Wire driver for MicroPython on ESP8266\n# MIT license; Copyright (c) 2016 Damien P. George\n\nimport _onewire as _ow\n\nclass OneWireError(Exception):\n pass\n\nclass OneWire:\n SEARCH_ROM = const(0xf0)\n MATCH_ROM = const(0x55)\n SKIP_ROM = const(0xcc)\n\n def __init__(self, pin):\n self.pin = pin\n self.pin.init(pin.OPEN_DRAIN)\n\n def reset(self):\n return _ow.reset(self.pin)\n\n def readbit(self):\n return _ow.readbit(self.pin)\n\n def readbyte(self):\n return _ow.readbyte(self.pin)\n\n def read(self, count):\n buf = bytearray(count)\n for i in range(count):\n buf[i] = _ow.readbyte(self.pin)\n return buf\n\n def writebit(self, value):\n return _ow.writebit(self.pin, value)\n\n def writebyte(self, value):\n return _ow.writebyte(self.pin, value)\n\n def write(self, buf):\n for b in buf:\n _ow.writebyte(self.pin, b)\n\n def select_rom(self, rom):\n self.reset()\n self.writebyte(MATCH_ROM)\n self.write(rom)\n\n def scan(self):\n devices = []\n diff = 65\n rom = False\n for i in range(0xff):\n rom, diff = self._search_rom(rom, diff)\n if rom:\n devices += [rom]\n if diff == 0:\n break\n return devices\n\n def _search_rom(self, l_rom, diff):\n if not self.reset():\n return None, 0\n self.writebyte(SEARCH_ROM)\n if not l_rom:\n l_rom = bytearray(8)\n rom = bytearray(8)\n next_diff = 0\n i = 64\n for byte in range(8):\n r_b = 0\n for bit in range(8):\n b = self.readbit()\n if self.readbit():\n if b: # there are no devices or there is an error on the bus\n return None, 0\n else:\n if not b: # collision, two devices with different bit meaning\n if diff > i or ((l_rom[byte] & (1 << bit)) and diff != i):\n b = 1\n next_diff = i\n self.writebit(b)\n if b:\n r_b |= 1 << bit\n i -= 1\n rom[byte] = r_b\n return rom, next_diff\n\n def crc8(self, data):\n return _ow.crc8(data)\n\nclass DS18B20:\n CONVERT = const(0x44)\n RD_SCRATCH = const(0xbe)\n WR_SCRATCH = const(0x4e)\n\n def __init__(self, onewire):\n self.ow = onewire\n\n def scan(self):\n return [rom for rom in self.ow.scan() if rom[0] == 0x28]\n\n def convert_temp(self):\n if not self.ow.reset():\n raise OneWireError\n self.ow.writebyte(SKIP_ROM)\n self.ow.writebyte(CONVERT)\n\n def read_scratch(self, rom):\n if not self.ow.reset():\n raise OneWireError\n self.ow.select_rom(rom)\n self.ow.writebyte(RD_SCRATCH)\n buf = self.ow.read(9)\n if self.ow.crc8(buf):\n raise OneWireError\n return buf\n\n def write_scratch(self, rom, buf):\n if not self.ow.reset():\n raise OneWireError\n self.ow.select_rom(rom)\n self.ow.writebyte(WR_SCRATCH)\n self.ow.write(buf)\n\n def read_temp(self, rom):\n buf = self.read_scratch(rom)\n return (buf[1] << 8 | buf[0]) / 16\n\0"
"import esp\nimport uctypes\n\n\ndef main():\n\n ROM = uctypes.bytearray_at(0x40200000, 16)\n fid = esp.flash_id()\n\n print(\"Flash ID: %x (Vendor: %x Device: %x)\" % (fid, fid & 0xff, fid & 0xff00 | fid >> 16))\n\n print(\"Flash bootloader data:\")\n SZ_MAP = {0: \"512KB\", 1: \"256KB\", 2: \"1MB\", 3: \"2MB\", 4: \"4MB\"}\n FREQ_MAP = {0: \"40MHZ\", 1: \"26MHZ\", 2: \"20MHz\", 0xf: \"80MHz\"}\n print(\"Byte @2: %02x\" % ROM[2])\n print(\"Byte @3: %02x (Flash size: %s Flash freq: %s)\" % (ROM[3], SZ_MAP.get(ROM[3] >> 4, \"?\"), FREQ_MAP.get(ROM[3] & 0xf)))\n\n\nmain()\n\0"
"# This module should be imported from REPL, not run from command line.\nimport socket\nimport uos\nimport network\nimport websocket\nimport websocket_helper\nimport _webrepl\n\nlisten_s = None\nclient_s = None\n\ndef setup_conn(port, accept_handler):\n global listen_s\n listen_s = socket.socket()\n listen_s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n\n ai = socket.getaddrinfo(\"0.0.0.0\", port)\n addr = ai[0][4]\n\n listen_s.bind(addr)\n listen_s.listen(1)\n if accept_handler:\n listen_s.setsockopt(socket.SOL_SOCKET, 20, accept_handler)\n for i in (network.AP_IF, network.STA_IF):\n iface = network.WLAN(i)\n if iface.active():\n print(\"WebREPL daemon started on ws://%s:%d\" % (iface.ifconfig()[0], port))\n return listen_s\n\n\ndef accept_conn(listen_sock):\n global client_s\n cl, remote_addr = listen_sock.accept()\n print(\"\\nWebREPL connection from:\", remote_addr)\n client_s = cl\n websocket_helper.server_handshake(cl)\n ws = websocket.websocket(cl, True)\n ws = _webrepl._webrepl(ws)\n cl.setblocking(False)\n # notify REPL on socket incoming data\n cl.setsockopt(socket.SOL_SOCKET, 20, uos.dupterm_notify)\n uos.dupterm(ws)\n\n\ndef stop():\n global listen_s, client_s\n uos.dupterm(None)\n if client_s:\n client_s.close()\n if listen_s:\n listen_s.close()\n\n\ndef start(port=8266, password=None):\n stop()\n if password is None:\n try:\n import port_config\n _webrepl.password(port_config.WEBREPL_PASS)\n setup_conn(port, accept_conn)\n print(\"Started webrepl in normal mode\")\n except:\n import webrepl_setup\n setup_conn(port, webrepl_setup.handle_conn)\n print(\"Started webrepl in setup mode\")\n else:\n _webrepl.password(password)\n setup_conn(port, accept_conn)\n print(\"Started webrepl in normal mode\")\n\n\ndef start_foreground(port=8266):\n stop()\n s = setup_conn(port, None)\n accept_conn(s)\n\0"
"import sys\nimport socket\nimport time\n\nfrom websocket import *\nimport websocket_helper\n\n\ndef setup_server():\n s = socket.socket()\n s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n\n ai = socket.getaddrinfo(\"0.0.0.0\", 8266)\n addr = ai[0][4]\n\n s.bind(addr)\n s.listen(1)\n return s\n\ndef getpass(stream, prompt):\n stream.write(prompt)\n passwd = b\"\"\n while 1:\n c = stream.read(1)\n if c in (b\"\\r\", b\"\\n\"):\n stream.write(\"\\r\\n\")\n return passwd\n passwd += c\n# stream.write(\"*\")\n\ndef handle_conn(listen_sock):\n cl, remote_addr = listen_sock.accept()\n\n print(\"\"\"\n\nFirst-time WebREPL connection has been received. WebREPL initial setup\nwill now start over this connection. During setup, UART REPL will be\nnon-responsive. After setup finishes, the board will be rebooted. In\ncase of error during setup, current session will continue.\n\nIf you receive this message unexpectedly, it may mean that your WebREPL\nconnection is being hacked (power off board if unsure).\n\"\"\")\n\n websocket_helper.server_handshake(cl)\n ws = websocket(cl)\n\n ws.write(\"\"\"\\\nWelcome to MicroPython WebREPL!\\r\n\\r\nThis is the first time you connect to WebREPL, so please set a password\\r\nto use for the following WebREPL sessions. Once you enter the password\\r\ntwice, your board will reboot with WebREPL running in active mode. On\\r\nsome boards, you may need to press reset button or reconnect power.\\r\n\\r\n\"\"\")\n\n while 1:\n passwd1 = getpass(ws, \"New password: \")\n if len(passwd1) < 4:\n ws.write(\"Password too short\\r\\n\")\n continue\n passwd2 = getpass(ws, \"Confirm password: \")\n if passwd1 == passwd2:\n break\n ws.write(\"Passwords do not match\\r\\n\")\n\n with open(\"port_config.py\", \"w\") as f:\n f.write(\"WEBREPL_PASS = %r\\n\" % passwd1.decode(\"ascii\"))\n\n ws.write(\"Password successfully set, restarting...\\r\\n\")\n cl.close()\n time.sleep(2)\n import machine\n machine.reset()\n\n\ndef test():\n s = setup_server()\n handle_conn(s)\n\0"
"import sys\ntry:\n import ubinascii as binascii\nexcept:\n import binascii\ntry:\n import uhashlib as hashlib\nexcept:\n import hashlib\n\nDEBUG = 0\n\ndef server_handshake(sock):\n clr = sock.makefile(\"rwb\", 0)\n l = clr.readline()\n #sys.stdout.write(repr(l))\n\n webkey = None\n\n while 1:\n l = clr.readline()\n if not l:\n raise OSError(\"EOF in headers\")\n if l == b\"\\r\\n\":\n break\n # sys.stdout.write(l)\n h, v = [x.strip() for x in l.split(b\":\", 1)]\n if DEBUG:\n print((h, v))\n if h == b\'Sec-WebSocket-Key\':\n webkey = v\n\n if not webkey:\n raise OSError(\"Not a websocket request\")\n\n if DEBUG:\n print(\"Sec-WebSocket-Key:\", webkey, len(webkey))\n\n respkey = webkey + b\"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\"\n respkey = hashlib.sha1(respkey).digest()\n respkey = binascii.b2a_base64(respkey)[:-1]\n\n resp = b\"\"\"\\\nHTTP/1.1 101 Switching Protocols\\r\nUpgrade: websocket\\r\nConnection: Upgrade\\r\nSec-WebSocket-Accept: %s\\r\n\\r\n\"\"\" % respkey\n\n if DEBUG:\n print(resp)\n sock.send(resp)\n\n\n# Very simplified client handshake, works for MicroPython\'s\n# websocket server implementation, but probably not for other\n# servers.\ndef client_handshake(sock):\n cl = sock.makefile(\"rwb\", 0)\n cl.write(b\"\"\"\\\nGET / HTTP/1.1\\r\nHost: echo.websocket.org\\r\nConnection: Upgrade\\r\nUpgrade: websocket\\r\nSec-WebSocket-Key: foo\\r\n\\r\n\"\"\")\n l = cl.readline()\n# print(l)\n while 1:\n l = cl.readline()\n if l == b\"\\r\\n\":\n break\n# sys.stdout.write(l)\n\0"
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment