diff --git a/.github/ci/final-check.sh b/.github/ci/final-check.sh new file mode 100644 index 0000000..27e90d0 --- /dev/null +++ b/.github/ci/final-check.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Exit immediately if a command exits with a non-zero status. +set -e +# Enable the globstar shell option +shopt -s globstar +# Make sure we are inside the github workspace +cd $GITHUB_WORKSPACE +echo $STEPS_CONTEXT +step=$1 +status=$2 +export BODYMESSAGE="$(git log -1 $GITHUB_SHA --pretty=oneline --abbrev-commit)" +export BACKTICK='`'; +export TIMESTAMP=$(date --utc +%FT%TZ); +export GITHUB_ACTOR_NAME="$(git log -1 $GITHUB_SHA --pretty="%aN")"; +export COMMIT_FORMATTED="[$BACKTICK${GITHUB_SHA:0:7}$BACKTICK](https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA)"; + +if [[ "$status" == "success" ]]; +then + echo "Success build" + if [ -z "$DISCORD_WEBHOOK_URL" ]; + then + echo "no need bot" + else + curl -v -H User-Agent:bot -H Content-Type:application/json -d '{"avatar_url":"https://pngimg.com/uploads/github/github_PNG90.png","username":"github-action","embeds":[{"author":{"name":"Build #'"$step"' Passed - '"$GITHUB_ACTOR_NAME"'","url":"https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"'"},"url":"https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"'","title":"['"$GITHUB_REPOSITORY"':job#'"$GITHUB_RUN_NUMBER"'] ","color":65280,"fields":[{"name":"_ _", "value": "'"$COMMIT_FORMATTED"' - '"$BODYMESSAGE"'"}],"timestamp":"'"$TIMESTAMP"'","footer":{"text":"ESP3D CI"}}]}' $DISCORD_WEBHOOK_URL; + fi +else + echo "Build failed" + if [ -z "$DISCORD_WEBHOOK_URL" ]; + then + echo "no need bot" + else + curl -v -H User-Agent:bot -H Content-Type:application/json -d '{"avatar_url":"https://pngimg.com/uploads/github/github_PNG90.png","username":"github-action","embeds":[{"author":{"name":"Build #'"$step"' Failed - '"$GITHUB_ACTOR_NAME"'","url":"https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"'"},"url":"https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"'","title":"['"$GITHUB_REPOSITORY"':job#'"$GITHUB_RUN_NUMBER"'] ","color":16711680,"fields":[{"name":"_ _", "value": "'"$COMMIT_FORMATTED"' - '"$BODYMESSAGE"'"}],"timestamp":"'"$TIMESTAMP"'","footer":{"text":"ESP3D CI"}}]}' $DISCORD_WEBHOOK_URL; + fi + exit 1 +fi + + diff --git a/.github/ci/install-platformio.sh b/.github/ci/install-platformio.sh new file mode 100644 index 0000000..a54fdc0 --- /dev/null +++ b/.github/ci/install-platformio.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Exit immediately if a command exits with a non-zero status. +set -e +# Enable the globstar shell option +shopt -s globstar + +pip install -U platformio +platformio update + diff --git a/.github/workflows/build-ci.yml b/.github/workflows/build-ci.yml new file mode 100644 index 0000000..03fb044 --- /dev/null +++ b/.github/workflows/build-ci.yml @@ -0,0 +1,34 @@ +name: build-ci + +on: [pull_request, push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.x + uses: actions/setup-python@v2 + with: + python-version: "3.x" + architecture: "x64" + - name: Install platformIO + run: bash ./.github/ci/install-platformio.sh + - name : Git Marlin + id: marlin + run : git clone https://github.com/luc-github/Marlin.git Marlin + - name: Build all files + id: buildall + run: cd Marlin && platformio run -e mks_tinybee + continue-on-error: true + - name: Failure check + env: + STEPS_CONTEXT: ${{ toJson(steps) }} + DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} + if: steps.marlin.outcome == 'failure' || steps.buildall.outcome == 'failure' + run: bash ./.github/ci/final-check.sh "$GITHUB_RUN_ID" "failure" + - name: Success check + env: + DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }} + if: steps.marlin.outcome == 'success' && steps.buildall.outcome == 'success' + run: bash ./.github/ci/final-check.sh "$GITHUB_RUN_ID" "success" diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..9760d97 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "xstring": "cpp", + "xutility": "cpp" + } +} \ No newline at end of file diff --git a/Configuration.md b/Configuration.md new file mode 100644 index 0000000..49640ce --- /dev/null +++ b/Configuration.md @@ -0,0 +1,180 @@ +# Configuration + +Because ESP3DLib is a library you must put the configuration settings in Configuration.h and Configuration_adv.h + +In Marlin configuration files : +[Configuration.h](https://github.com/MarlinFirmware/Marlin) + +* Select an ESP32 based board. + +* Enable the virtual serial port +Uncomment the second serial port to allow esp3d to get all printer feedback +``` +/** + * Select a secondary serial port on the board to use for communication with the host. + * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] + */ +#define SERIAL_PORT_2 -1 +``` + +* Enable ESP3DLib as wifi solution provider +[Configuration_adv.h](https://github.com/MarlinFirmware/Marlin) + +Uncomment `#define ESP3D_WIFISUPPORT // ESP3D Library WiFi management (https://github.com/luc-github/ESP3DLib)` +also enable following settings by uncomment them + +Enable ESP3DLib WebUI (Recommended): +``` +#define WEBSUPPORT // Start a webserver (which may include auto-discovery) +``` +Update by OTA (optional): +``` +#define OTASUPPORT // Support over-the-air firmware updates +``` +Enable ESP3DLib commands (Mandatory): +``` +#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host +``` + +* Configure your WiFi (optional) +Define to which access point your board need to connect to: +``` + #define WIFI_SSID "Wifi SSID" + #define WIFI_PWD "Wifi Password" +``` +if not defined or you left like this the board will act as an Access Point instead. + + +* Enable / Disable ESP3DLib features + + * Authentication (default off) + To enable add: + ``` + //AUTHENTICATION_FEATURE: protect pages by login password. + #define AUTHENTICATION_FEATURE + ``` + + + * mDNS discovery service (default on) + To disable add: + ``` + //MDNS_FEATURE: this feature allow type the name defined + //in web browser by default: http:\\marlinesp.local and connect + #define DISABLE_MDNS_FEATURE + + ``` + + * SSDP discovery service (default on) + To disable add: + ``` + //SSDD_FEATURE: this feature is a discovery protocol, supported on Windows out of the box + //Rely on Configuration_adv.h + #define DISABLE_SSDP_FEATURE + ``` + + * Captive portable for AP mode (default on) + To disable add: + ``` + //CAPTIVE_PORTAL_FEATURE: In SoftAP redirect all unknow call to main page + #define DISABLE_CAPTIVE_PORTAL_FEATURE + ``` + + * Web Update (default on) + To disable add: + ``` + #define DISABLE_WEB_UPDATE_FEATURE + ``` + + * SD Update (default on) + - put on SD `esp3dcnf.ini` to configure settings + - put on SD `esp3dfw.bin` to update FW + - put on SD `esp3dfs.bin` to update filesystem + To disable add: + ``` + #define DISABLE_SD_UPDATE_FEATURE + ``` + + * Notifications (default on) + To disable add: + ``` + #define DISABLE_NOTIFICATION_FEATURE + ``` + * Telnet (default on) + To disable add: + ``` + #define DISABLE_TELNET_FEATURE + ``` + + * WebDav (default on, and use virtual FS with SD and ESP3D FS) + - To disable add: + ``` + #define DISABLE_WEBDAV_FEATURE + ``` + - To change the target Filesystem to ESP3D FS only, add: + ``` + #define WEBDAV_FEATURE 1 + ``` + - To change the target Filesystem to SD only, add: + ``` + #define WEBDAV_FEATURE 2 + ``` + + * Time (default on) + - To enable time on SD files, add: + ``` + #define SD_TIMESTAMP_FEATURE + ``` + - To enable time on local filesytem files, add: + ``` + #define FILESYSTEM_TIMESTAMP_FEATURE + ``` + + * FTP server + - To enable ftp on virtual file sytem with SD and ESP3D FS, add: + ``` + #define FTP_FEATURE 0 + ``` + + - To enable ftp on ESP3D FS only add: + ``` + #define FTP_FEATURE 1 + ``` + + - To enable ftp on ESP3D SD only add: + ``` + #define FTP_FEATURE 2 + ``` + * WebSocket + To enable WebSocket server add: + ``` + #define WS_DATA_FEATURE + ``` + + * SSDP + to customize the SSDP description add and mofify any/all of: + ``` + /* Model name + * Modele name of device + */ + #define ESP_MODEL_NAME "ESP32" + + /* Model number + * Modele number of device + */ + #define ESP_MODEL_NUMBER "Marlin with ESP3DLib" + + /* Model url + * Modele url of device + */ + #define ESP_MODEL_URL "https://www.espressif.com/en/products/devkits" + + /* Manufacturer name + * Manufacturer name of device + */ + #define ESP_MANUFACTURER_NAME "Espressif Systems" + + /* Manufacturer url + * Manufacturer url of device + */ + #define ESP_MANUFACTURER_URL "https://www.espressif.com" + ``` \ No newline at end of file diff --git a/Features.md b/Features.md new file mode 100644 index 0000000..5391ff7 --- /dev/null +++ b/Features.md @@ -0,0 +1,45 @@ +# V3 Features + +* Embedded maintenance page (terminal / local FS update / Firmware update) +* WebUI support +* Marlin 2.X on ESP32 based board support +* Wifi / ethernet support +* Raw TCP / serial bridge support (light telnet) +* Boot delay configuration +* Websocket / serial bridge support +* Bluetooth Serial bridge support +* Serial commands configurations +* Authentication support (admin / user) +* FTP support (limited to 1 connection at once) +* WebDav support +* Local FS support: + * Little FS (prefered) + * Fat (ESP32 only) + * SPIFFS (deprecated) +* SD support + * File format + * Native SPI + * Native SDIO (ESP32 only) + * SDFat 1.x + * SDFat 2.x +* USB support + * planned +* Global FS under FTP / Webdav : SD + Local FS in same directory +* Recovery pin support +* Time synchronization support (manual / internet server) +* Lua interpreter support +* Notifications support + * WebUI + * Email + * Line + * Telegram + * PushOver + * IFTTT +* Sensors support + * DHT 11/22 + * Analog + * BMX280 +* Auto script support at start + + + diff --git a/README.md b/README.md index 8a2a0b4..d5ca438 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,21 @@ -# ESP3DLib 1.0 Marlin version - +# ESP3DLib 3.0 for Marlin +[](https://liberapay.com/ESP3D) Library for ESP32 boards using Marlin 2.x : +[ESP32 Controller](https://github.com/simon-jouet/ESP32Controller), [FYSETC-E4](https://github.com/FYSETC/FYSETC-E4), [MRR_ESPA](https://github.com/maplerainresearch/MRR_ESPA), [MRR_ESPE](https://github.com/maplerainresearch/MRR_ESPE), -[ESP32 Controller](https://github.com/simon-jouet/ESP32Controller) - -The web interface files has it's own repository [ESP3D-WEBUI](https://github.com/luc-github/ESP3D-WEBUI/tree/2.1). +[Panda Zhu](https://github.com/markniu/PandaZHU), +[MKS Tinybee](https://github.com/makerbase-mks/MKS-TinyBee) -[Latest development version ![Development Version](https://img.shields.io/badge/Devt-v1.x-yellow?style=plastic) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/luc-github/ESP3DLib/devt?style=plastic)](https://github.com/luc-github/ESP3DLib/tree/devt) [![Travis (.org) branch](https://img.shields.io/travis/luc-github/ESP3DLib/devt?style=plastic)](https://travis-ci.org/luc-github/ESP3DLib) [![Release Version](https://img.shields.io/github/v/release/luc-github/ESP3D-WEBUI?color=green&include_prereleases&label=WebUI&style=plastic)](https://github.com/luc-github/ESP3D-WEBUI/tree/2.1) [![Marlin](https://img.shields.io/github/release/MarlinFirmware/Marlin.svg?style=plastic&label=Marlin)](https://github.com/MarlinFirmware/Marlin) +The web interface files has it's own repository [ESP3D-WEBUI](https://github.com/luc-github/ESP3D-WEBUI/tree/3.0). -To use development version just add `#devt` at the end of ESP3DLib git address in your platformio.ini +[Latest development version ![Development Version](https://img.shields.io/badge/3.0-yellow?style=plastic) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/luc-github/ESP3DLib/3.0?style=plastic)](https://github.com/luc-github/ESP3DLib/tree/3.0) [![github-ci](https://github.com/luc-github/ESP3DLib/workflows/build-ci/badge.svg)](https://github.com/luc-github/ESP3DLib/actions/workflows/build-ci.yml) + [![Release Version](https://img.shields.io/github/v/release/luc-github/ESP3D-WEBUI?color=green&include_prereleases&label=WebUI&style=plastic)](https://github.com/luc-github/ESP3D-WEBUI/tree/3.0) [![Marlin](https://img.shields.io/github/release/MarlinFirmware/Marlin.svg?style=plastic&label=Marlin)](https://github.com/MarlinFirmware/Marlin) -`ESP3DLib=https://github.com/luc-github/ESP3DLib.git#devt` +To use ESP3Lib V3 you need an updated version of Marlin which is here: https://github.com/luc-github/Marlin, necessary will be pushed when library V3 is considered as stable enough.

:warning: This is not for ESP8266 boards neither standalone ESP3D installation

@@ -23,10 +24,23 @@ for them go [here](https://github.com/luc-github/ESP3D) [All releases](https://github.com/luc-github/ESP3DLib/releases) +## Sponsors +[](https://github.com/makerbase-mks)   + +## Supporters + +## Become a sponsor or a supporter + * A sponsor is a recurent donator +If your tier is `10 US$/month` or more, to thank you for your support, your logo / avatar will be added to the readme page with eventually with a link to your site. + * A supporter is per time donator + If your donation is over `120 US$` per year, to thank you for your support, your logo / avatar will be added to the readme page with eventually with a link to your site. + + Every support is welcome, indeed helping users / developing new features need time and devices, donations contribute a lot to make things happen, thank you. + +* liberapay Donate using Liberapay +* Paypal [PayPal – The safer, easier way to pay online.](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FQL59C749A78L) +* ko-fi [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/G2G0C0QT7) -## Donate -Every support is welcome: [PayPal – The safer, easier way to pay online.](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=Y8FFE7NA4LJWQ) -Especially if need to buy new modules for testing. ## Features * Complete configuration by web browser (Station or Access point) or by Serial commands @@ -39,64 +53,11 @@ Especially if need to buy new modules for testing. * The web ui add even more feature : https://github.com/luc-github/ESP3D-WEBUI/blob/master/README.md#features ## Coming Features -As side project of ESP3D, it follows ESP3D features: https://github.com/luc-github/ESP3D/blob/3.0/ESP3D-features.xls?raw=true +As side project of ESP3D, it follows ESP3D features: https://github.com/luc-github/ESP3DLib/blob/3.0/Features.md ## How to enable ? -In Marlin configuration files : -[Configuration.h](https://github.com/MarlinFirmware/Marlin/blob/bugfix-2.0.x/Marlin/Configuration.h) - -Select an ESP32 based board. - -Uncomment the second serial port to allow esp3d to get all printer feedback -``` -/** - * Select a secondary serial port on the board to use for communication with the host. - * :[-1, 0, 1, 2, 3, 4, 5, 6, 7] - */ -#define SERIAL_PORT_2 -1 -``` - -[Configuration_adv.h](https://github.com/MarlinFirmware/Marlin/blob/bugfix-2.0.x/Marlin/Configuration_adv.h) - -enable `#define ESP3D_WIFISUPPORT // ESP3D Library WiFi management (https://github.com/luc-github/ESP3DLib)` - -Define to which access point your board need to connect to: -``` - #define WIFI_SSID "Wifi SSID" - #define WIFI_PWD "Wifi Password" -``` -if not defined or you left like this the board will act as an Access Point instead. - -and finally -``` -#define WEBSUPPORT // Start a webserver (which may include auto-discovery) -#define OTASUPPORT // Support over-the-air firmware updates -#define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host -``` - - -For advanced configuration add in same section: - -to enable this feature which is disabled by default: -``` -//AUTHENTICATION_FEATURE: protect pages by login password. -#define AUTHENTICATION_FEATURE -``` - -to disable any of these features which are enabled by default: - -``` -//MDNS_FEATURE: this feature allow type the name defined -//in web browser by default: http:\\marlinesp.local and connect -#define DISABLE_MDNS_FEATURE - -//SSDD_FEATURE: this feature is a discovery protocol, supported on Windows out of the box -//Rely on Configuration_adv.h -#define DISABLE_SSDP_FEATURE -//CAPTIVE_PORTAL_FEATURE: In SoftAP redirect all unknow call to main page -#define DISABLE_CAPTIVE_PORTAL_FEATURE -``` +Check the document : https://github.com/luc-github/ESP3DLib/blob/3.0/Configuration.md @@ -105,13 +66,13 @@ Default Settings if not modified in Configuration_adv.h: AP:MARLIN_ESP PW:12345678 Authentification: WPA -Mode: g (n is not supported by AP, just by STA) +Mode: g (n is not supported by AP, but by STA) channel: 1 IP: 192.168.0.1 Mask: 255.255.255.0 GW:192.168.0.1 Web port:80 -the websocket is web port + 1 => 80+1 : 81 +the webUI websocket is web port + 1 => 80+1 : 81 User: admin Password: admin User:user @@ -134,4 +95,5 @@ you can also check [discussions panel](https://github.com/luc-github/ESP3DLib/di ## TODO/On going : ---Import all ESP3D 2.1/3.0 features +- Test test test.... +- Update Marlin to support it officially the V3 using latest ESP32 arduino / platformIO core version diff --git a/docs/Commands.txt b/docs/Commands.txt index 5d6c576..04680be 100644 --- a/docs/Commands.txt +++ b/docs/Commands.txt @@ -1,97 +1,282 @@ Note: 1 - add space to separate parameters +2 - if parameter has space add \\ in front of space to not be seen as separator +3 - json json=YES json=TRUE json=1 are paremeters to switch output to json +By default output is plain text, to get json formated output +add json or json=yes after main parameters +The json format is { + cmd:"", //the id of requested command + status:"" //give if it is success or an failure + data:"" // response corresponding to answer in json format too +} -* Display command list -[ESP] + +*Show commands help +[ESP] json= * Set/Get STA SSID -[ESP100] +[ESP100] json= pwd= * Set STA Password -[ESP101] +[ESP101] json= pwd= * Set/Get STA IP mode (DHCP/STATIC) -[ESP102] +[ESP102] json= pwd= + +* Set/Get STA IP/Mask/GW/DNS +[ESP103]IP= MSK= GW= DNS= json= pwd= -* Set/Get STA IP/Mask/GW -[ESP103]IP= MSK= GW= +* Set/Get sta fallback mode which can be WIFI-AP, BT, OFF +[ESP104] json= pwd= * Set/Get AP SSID -[ESP105] +[ESP105] json= pwd= * Change AP Password -[ESP106] +[ESP106] json= pwd= * Set/Get AP IP -[ESP107] +[ESP107] json= pwd= * Set/Get AP channel -[ESP108] +[ESP108] json= pwd= -* Set/Get radio state which can be STA, AP, OFF -[ESP110] +* Set/Get radio state which can be WIFI-STA, WIFI-AP, BT, ETH-STA, ETH-AP, OFF +[ESP110] json= pwd= * Get current IP -[ESP111] +[ESP111]json= * Get/Set hostname -[ESP112] +[ESP112] json= pwd= + +* Get /Set Boot radio state which can be ON, OFF +[ESP114] json= pwd= + +* Get/Set immediate network(WiFi/BT/Ethernet) state which can be ON, OFF +[ESP115] json= pwd= * Get/Set HTTP state which can be ON, OFF -[ESP120] +[ESP120] json= pwd= * Get/Set HTTP port -[ESP121] +[ESP121] json= pwd= + +* Get/Set Telnet state which can be ON, OFF, CLOSE +[ESP130] json= pwd= + +* Get/Set Telnet port +[ESP131] json= pwd= + +* Sync / Set / Get current time +[ESP140] json= pwd= + +* Get/Set display/set boot delay in ms / Verbose boot +[ESP150][pwd=] + +* Get/Set WebSocket state which can be ON, OFF +[ESP160] json= pwd= + +* Get/Set WebSocket port +[ESP161] json= pwd= + +* Get/Set Camera command value / list all values in JSON/plain +label can be: light/framesize/quality/contrast/brightness/saturation/gainceiling/colorbar/awb/agc/aec/hmirror/vflip/awb_gain/agc_gain/aec_value/aec2/cw/bpc/wpc/raw_gma/lenc/special_effect/wb_mode/ae_level +[ESP170] json= pwd= + +* Get/Set Ftp state which can be ON, OFF, CLOSE +[ESP180] json= pwd= + +* Get/Set Ftp ports +[ESP181]ctrl= active= passive= json= pwd= + +* Get/Set WebDav state which can be ON, OFF, CLOSE +[ESP190] json= pwd= + +* Get/Set WebDav port +[ESP191] json= pwd= + +* Get/Set SD Card Status +[ESP200] json= pwd= +RELEASE will force the release of SD from ESP3D if SD is shared +REFRESH will refresh the SD info is available + +*Get/Set pin value +[ESP201]P= V= [PULLUP=YES RAW=YES ANALOG=NO ANALOG_RANGE=255]pwd= +if no V= get P= value +if V= 0/1 set INPUT_PULLUP value, but for GPIO16(ESP8266) INPUT_PULLDOWN_16 +if PULLUP=YES set input pull up (for GPIO16(ESP8266) INPUT_PULLDOWN_16), if not set input +if RAW=YES do not set pinmode just read value + +Flash pins (6~11) cannot be used + +*Get/Set SD card Speed factor 1 2 4 6 8 16 32 +[ESP202]SPEED= json= pwd= + +*Get Sensor Value / type/Set Sensor type +[ESP210] json= pwd= -* Get SD Card Status -[ESP200] +* Output to esp screen status +[ESP214] json= pwd= + +* Touch Calibration +[ESP215] json= [pwd=] + +* Take screen snapshot +[ESP216] json= [pwd=] + +* Play sound +No parameter just play beep +[ESP250]F= D= json= [pwd=] + +* Delay command +[ESP290] json=[pwd=] * Get full EEPROM settings content but do not give any passwords -[ESP400] +[ESP400] pwd= *Set EEPROM setting position in EEPROM, type: B(byte), I(integer/long), S(string), A(IP address / mask) -[ESP401]P= T= V= -Description: Positions: -HOSTNAME_ENTRY "ESP_HOSTNAME" -STA_SSID_ENTRY "STA_SSID" -STA_PWD_ENTRY "STA_PWD" -STA_IP_ENTRY "STA_IP" -STA_GW_ENTRY "STA_GW" -STA_MK_ENTRY "STA_MK" -ESP_RADIO_MODE "WIFI_MODE" -AP_SSID_ENTRY "AP_SSID" -AP_PWD_ENTRY "AP_PWD" -AP_IP_ENTRY "AP_IP" -AP_CHANNEL_ENTRY "AP_CHANNEL" -HTTP_ENABLE_ENTRY "HTTP_ON" -HTTP_PORT_ENTRY "HTTP_PORT" -TELNET_ENABLE_ENTRY "TELNET_ON" -TELNET_PORT_ENTRY "TELNET_PORT" -STA_IP_MODE_ENTRY "STA_IP_MODE" +[ESP401]P= T= V= json= pwd= +Description: Positions: +ESP_RADIO_MODE 0 //1 byte = flag +ESP_STA_SSID 1 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese +ESP_STA_PASSWORD 34 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese +ESP_STA_IP_MODE 99 //1 byte = flag +ESP_STA_IP_VALUE 100 //4 bytes xxx.xxx.xxx.xxx +ESP_STA_MASK_VALUE 104 //4 bytes xxx.xxx.xxx.xxx +ESP_STA_GATEWAY_VALUE 108 //4 bytes xxx.xxx.xxx.xxx +ESP_BAUD_RATE 112 //4 bytes = int +ESP_NOTIFICATION_TYPE 116 //1 byte = flag +ESP_CALIBRATION 117 //1 byte = flag +ESP_AP_CHANNEL 118 //1 byte = flag +ESP_BUZZER 119 //1 byte = flag +ESP_INTERNET_TIME 120 //1 byte = flag +ESP_HTTP_PORT 121 //4 bytes = int +ESP_TELNET_PORT 125 //4 bytes = int +ESP_SERIAL_FLAG 129 //1 bytes = flag +ESP_HOSTNAME 130 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese +ESP_SENSOR_INTERVAL 164 //4 bytes = int +ESP_SETTINGS_VERSION 168 //8 bytes = 7+1 = string ESP3D + 2 digits +ESP_ADMIN_PWD 176 //21 bytes 20+1 = string ; warning does not support multibyte char like chinese +ESP_USER_PWD 197 //21 bytes 20+1 = string ; warning does not support multibyte char like chinese +ESP_AP_SSID 218 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese +ESP_AP_PASSWORD 251 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese +ESP_AP_IP_VALUE 316 //4 bytes xxx.xxx.xxx.xxx +ESP_BOOT_DELAY 320 //4 bytes = int +ESP_WEBSOCKET_PORT 324 //4 bytes= int +ESP_HTTP_ON 328 //1 byte = flag +ESP_TELNET_ON 329 //1 byte = flag +ESP_WEBSOCKET_ON 330 //1 byte = flag +ESP_SD_SPEED_DIV 331 //1 byte = flag +ESP_NOTIFICATION_TOKEN1 332 //64 bytes 63+1 = string ; warning does not support multibyte char like chinese +ESP_NOTIFICATION_TOKEN2 396 //64 bytes 63+1 = string ; warning does not support multibyte char like chinese +ESP_SENSOR_TYPE 460 //1 bytes = flag +ESP_TARGET_FW 461 //1 bytes = flag +ESP_TIMEZONE 462 //1 bytes = flag +ESP_TIME_IS_DST 463 //1 bytes = flag +ESP_TIME_SERVER1 464 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese +ESP_TIME_SERVER2 593 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese +ESP_TIME_SERVER3 722 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese +ESP_REMOTE_SCREEN 851 //1 bytes = flag +ESP_SD_MOUNT 852 //1 bytes = flag +ESP_SESSION_TIMEOUT 853 //1 bytes = flag +ESP_WEBSOCKET_FLAG 854 //1 bytes = flag +ESP_SD_CHECK_UPDATE_AT_BOOT 855//1 bytes = flag +ESP_NOTIFICATION_SETTINGS 856 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese +ESP_CALIBRATION_1 985 //4 bytes = int +ESP_CALIBRATION_2 989 //4 bytes = int +ESP_CALIBRATION_3 993 //4 bytes = int +ESP_CALIBRATION_4 997 //4 bytes = int +ESP_CALIBRATION_5 1001 //4 bytes = int +ESP_SETUP 1005 //1 byte = flag +ESP_TELNET_FLAG 1006 //1 byte = flag +ESP_BT_FLAG 1007 //1 byte = flag +ESP_SCREEEN_FLAG 1008 //1 byte = flag +ESP_FTP_CTRL_PORT 1009 //4 bytes = int +ESP_FTP_DATA_ACTIVE_PORT 1013 //4 bytes = int +ESP_FTP_DATA_PASSIVE_PORT 1017 //4 bytes = int +ESP_FTP_ON 1021 //1 byte = flag +ESP_AUTO_NOTIFICATION 1022 //1 byte = flag +ESP_VERBOSE_BOOT 1023 //1 byte = flag +ESP_WEBDAV_ON 1024 //1 byte = flag +ESP_WEBDAV_PORT 1025 //4 bytes = int +ESP_STA_DNS_VALUE 1029 //4 bytes= int +ESP_SECURE_SERIAL 1033 //1 byte = flag + +* Get/Set Check update at boot state which can be ON, OFF +[ESP402] json= pwd= *Get available AP list (limited to 30) output is JSON or plain text according parameter -[ESP410] +[ESP410]json= *Get current settings of ESP3D output is plain text -[ESP420] +[ESP420]json= * Set ESP State -cmd is RESTART / RESET -[ESP444] +cmd are RESTART / RESET +[ESP444] json= * Change admin password -[ESP550] +[ESP550] json= pwd= * Change user password -[ESP555] +[ESP555] json= pwd= + +* Send Notification +[ESP600]msg json= pwd= + +* Set/Get Notification settings +[ESP610]type= T1= T2= TS= json= [pwd=] +Get will give type and settings only, not the protected T1/T2 + +* Send Notification using URL +[ESP620]URL= json=[pwd=] + +* Read FS file +[ESP700] json=[pwd=] + +* Query and Control ESP700 stream +[ESP701]action= json=[pwd=] * Format ESP Filesystem -[ESP710]FORMAT +[ESP710]FORMATFS json= pwd= + +* Format SD Filesystem +[ESP715]FORMATSD json= pwd= + +* List ESP Filesystem +[ESP720] json= pwd= + +* Action on ESP Filesystem +rmdir / remove / mkdir / exists / create +[ESP730]= json= pwd= + +* List SD Filesystem +[ESP740] json= pwd= + +* Action on SD Filesystem +rmdir / remove / mkdir / exists / create +[ESP750]= json= pwd= + +* List Global Filesystem +[ESP780] json= pwd= + +* Action on Global Filesystem +rmdir / remove / mkdir / exists /create +[ESP790]= json= pwd= * FW Informations -[ESP800] +[ESP800]json= pwd= + +* Get state / Set Enable / Disable Serial Communication +[ESP900] json= [pwd=] + +* Get state / Set Enable / Disable buzzer +[ESP910] json= [pwd=] +*Get state / Set state of output message clients +[ESP920]= json= [pwd=] diff --git a/docs/ESP3DLib 3.0 API triggers.md b/docs/ESP3DLib 3.0 API triggers.md new file mode 100644 index 0000000..04bef94 --- /dev/null +++ b/docs/ESP3DLib 3.0 API triggers.md @@ -0,0 +1,53 @@ +ESP3DLib 3.0 triggers +in configuration_adv.h +1 - madatory define + #define ESP3D_WIFISUPPORT // ESP3D Library WiFi management (https://github.com/luc-github/ESP3DLib) + + #define WEBSUPPORT // Start a webserver (which may include auto-discovery) + ->#define HTTP_FEATURE + #define OTASUPPORT // Support over-the-air firmware updates + ->#define OTA_FEATURE + #define WIFI_CUSTOM_COMMAND // Accept feature config commands (e.g., WiFi ESP3D) from the host + +2 - Optional define + #define WIFI_SSID "WiFi SSID" + #define WIFI_PWD "WiFi Password" + +Task Core default is 0 + #define ESP3DLIB_RUNNING_CORE 0 +Task Priority default is 1 + #define ESP3DLIB_RUNNING_PRIORITY 1 + +Features on by default + #define DISABLE_MDNS_FEATURE + #define DISABLE_SSDP_FEATURE + #define DISABLE_CAPTIVE_PORTAL_FEATURE + + esp3dlibconfig.h include Marlin configuration define and translate to ESP3DLib define + + +3 - Entry points + +#include "esp3dlib.h" +//Serial2 +Serial2Socket class + +//init + esp3dlib.init(); + + //idle task + esp3dlib.idletask(); + +//Custom command +esp3dlib.parse(command_ptr); + +4 - Screen flags + 1 - ESP_SERIAL_FLAG + to Serial if ESP3D (ESP_SERIAL_CLIENT ) or ESP3DLib (ESP_ECHO_SERIAL_CLIENT) + 2 - ESP_REMOTE_SCREEN_FLAG + a - to Serial using M117 if ESP3D for connected display + b - to Socket2Serial using M117 if ESP3DLib (HAS_DISPLAY) for embedded display + c - to Serial (ESP_ECHO_SERIAL_CLIENT) using M117 if ESP3DLib (HAS_SERIAL_DISPLAY) for serial display + 3 - ESP_SCREEN_FLAG + to screen connected to ESP using ESP3D + diff --git a/docs/Files/favicon.ico b/docs/Files/favicon.ico new file mode 100644 index 0000000..6794fd9 Binary files /dev/null and b/docs/Files/favicon.ico differ diff --git a/docs/esp3dcnf.ini b/docs/esp3dcnf.ini new file mode 100644 index 0000000..ec9f38b --- /dev/null +++ b/docs/esp3dcnf.ini @@ -0,0 +1,159 @@ +[network] +#Hostname string of 32 chars max +hostname = myesp + +#Radio mode BT, WIFI-STA, WIFI-AP, ETH-STA, OFF +radio_mode = WIFI-STA + +#Station fallback mode BT, WIFI-AP, OFF +sta_fallback = WIFI-AP + +#Active when boot device or not Yes / No +Radio_enabled = Yes + +#STA SSID string of 32 chars max +STA_SSID = myssid + +#STA Password string of 64 chars max, minimum 0 or 8 chars +STA_Password = ******* + +#STA IP Mode DHCP / STATIC +STA_IP_mode = DHCP + +#STA static IP +STA_IP = 192.168.0.2 + +#STA static gateway +STA_GW = 192.168.0.1 + +#STA static mask +STA_MSK = 255.255.255.0 + +#STA static dns +STA_DNS = 192.168.0.1 + +#AP SSID string of 32 chars max +AP_SSID = myssid + +#AP Password string of 64 chars max, minimum 0 or 8 chars +AP_Password = 12345678 + +#AP static IP +AP_IP = 192.168.0.1 + +#AP channel 1~14 +AP_channel = 11 + +[services] +#Active or not HTTP Yes / No +HTTP_active = Yes + +#HTTP Port +HTTP_Port = 80 + +#Active or not Telnet Yes / No +TELNET_active = Yes + +#Telnet Port +TELNET_Port = 23 + +#Active or not WebSocket Yes / No +WebSocket_active = Yes + +#WebSocket Port +WebSocket_Port = 8282 + +#Active or not WebDav Yes / No +WebDav_active = Yes + +#WebSocket Port +WebDav_Port = 8282 + +#Active or not FTP Yes / No +FTP_active = Yes + +#FTP control Port +FTP_Control_Port = 21 + +#FTP active Port +FTP_Active_Port = 20 + +#FTP passive Port +FTP_Passive_Port = 55600 + +#Auto notification +AUTONOTIFICATION = Yes + +#Notification type None / PushOver / Line / Email / Telegram /IFTTT +NOTIF_TYPE = None + +#Notification token 1 string of 64 chars max +NOTIF_TOKEN1 = + +#Notification token 2 string of 64 chars max +NOTIF_TOKEN2 = + +#Notification settings string of 127 chars max +NOTIF_TOKEN_Settings= + +#SD card Speed factor 1 2 4 6 8 16 32 +SD_SPEED = 4 + +#Check update from SD Yes / No +CHECK_FOR_UPDATE = Yes + +#Enable Buzzer Yes / No +Active_buzzer = yes + +#Active Internet time Yes / No +Active_Internet_time = yes + +#Time servers string of 127 chars max +Time_server1 = 1.pool.ntp.org +Time_server2 = 2.pool.ntp.org +Time_server3 = 3.pool.ntp.org + +#time zone -12~12 +Time_zone = 2 +#is DST Yes/No +Time_DST = No + +#Authentication passwords string of 20 chars max +ADMIN_PASSWORD = xxxxxxx +USER_PASSWORD = xxxxxxx +#session time out in min +Sesion_timeout = 3 + +#Sensor type if enabled None / DHT11 / DHT22 / ANALOG / BMP280 / BME280 +SENSOR_TYPE = NONE +#sensor poiling interval in ms +SENSOR_INTERVAL = 30000 + + +[system] +#Target Firmware Marlin / Repetier / MarlinKimbra / Smoothieware / GRBL +TargetFW=Marlin + +#Baud Rate +Baud_rate = 115200 + +#Boot delay in ms +Boot_delay = 5000 + +#Boot verbose Yes / No +Boot_verbose = No + +#Outputs +#printer Screen Yes / No +Active_Remote_Screen = Yes +#esp3d Screen Yes / No +Active_ESP3D_Screen = Yes +#ESP3D Serial Yes / No +Active_Serial = Yes +#Websocket Yes / No +Active_WebSocket = Yes +#Telnet Yes / No +Active_Telnet = Yes +#Bluetooth Yes / No +Active_BT = Yes + diff --git a/docs/html/ESP3D_social_mini.png b/docs/html/ESP3D_social_mini.png deleted file mode 100644 index cd48a30..0000000 Binary files a/docs/html/ESP3D_social_mini.png and /dev/null differ diff --git a/docs/html/annotated.html b/docs/html/annotated.html deleted file mode 100644 index b4a3e3e..0000000 --- a/docs/html/annotated.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -ESP3D Lib: Class List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
-
- - - - diff --git a/docs/html/annotated_dup.js b/docs/html/annotated_dup.js deleted file mode 100644 index 7bb3961..0000000 --- a/docs/html/annotated_dup.js +++ /dev/null @@ -1,10 +0,0 @@ -var annotated_dup = -[ - [ "Esp3DLib", "class_esp3_d_lib.html", "class_esp3_d_lib" ], - [ "ESP_SD", "class_e_s_p___s_d.html", "class_e_s_p___s_d" ], - [ "ESPResponseStream", "class_e_s_p_response_stream.html", "class_e_s_p_response_stream" ], - [ "Serial_2_Socket", "class_serial__2___socket.html", "class_serial__2___socket" ], - [ "Web_Server", "class_web___server.html", "class_web___server" ], - [ "WiFiConfig", "class_wi_fi_config.html", "class_wi_fi_config" ], - [ "WiFiServices", "class_wi_fi_services.html", "class_wi_fi_services" ] -]; \ No newline at end of file diff --git a/docs/html/bc_s.png b/docs/html/bc_s.png deleted file mode 100644 index 224b29a..0000000 Binary files a/docs/html/bc_s.png and /dev/null differ diff --git a/docs/html/bdwn.png b/docs/html/bdwn.png deleted file mode 100644 index 940a0b9..0000000 Binary files a/docs/html/bdwn.png and /dev/null differ diff --git a/docs/html/class_e_s_p___s_d-members.html b/docs/html/class_e_s_p___s_d-members.html deleted file mode 100644 index 80b5313..0000000 --- a/docs/html/class_e_s_p___s_d-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ESP_SD Member List
-
-
- -

This is the complete list of members for ESP_SD, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - -
available()ESP_SD
card_status()ESP_SD
card_total_space()ESP_SD
card_used_space()ESP_SD
close()ESP_SD
dir_exists(const char *path)ESP_SD
ESP_SD()ESP_SD
exists(const char *path)ESP_SD
isFileESP_SD
isopen()ESP_SD
makepath83(String longpath)ESP_SD
makeshortname(String longname, uint8_t index=1)ESP_SD
mkdir(const char *path)ESP_SD
open(const char *path, bool readonly=true)ESP_SD
openDir(String path)ESP_SD
read(uint8_t *buf, uint16_t nbyte)ESP_SD
read()ESP_SD
readDir(char name[13], uint32_t *size, bool *isFile)ESP_SD
remove(const char *path)ESP_SD
rmdir(const char *path)ESP_SD
size()ESP_SD
write(const uint8_t *data, uint16_t len)ESP_SD
write(const uint8_t byte)ESP_SD
~ESP_SD()ESP_SD
-
- - - - diff --git a/docs/html/class_e_s_p___s_d.html b/docs/html/class_e_s_p___s_d.html deleted file mode 100644 index 1d80a75..0000000 --- a/docs/html/class_e_s_p___s_d.html +++ /dev/null @@ -1,654 +0,0 @@ - - - - - - - -ESP3D Lib: ESP_SD Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ESP_SD Class Reference
-
-
- -

#include <sd_ESP32.h>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 ESP_SD ()
 
 ~ESP_SD ()
 
int8_t card_status ()
 
uint32_t card_total_space ()
 
uint32_t card_used_space ()
 
bool open (const char *path, bool readonly=true)
 
void close ()
 
int16_t write (const uint8_t *data, uint16_t len)
 
int16_t write (const uint8_t byte)
 
uint16_t read (uint8_t *buf, uint16_t nbyte)
 
int16_t read ()
 
uint32_t size ()
 
uint32_t available ()
 
bool exists (const char *path)
 
bool dir_exists (const char *path)
 
bool remove (const char *path)
 
bool rmdir (const char *path)
 
bool mkdir (const char *path)
 
bool isopen ()
 
String makepath83 (String longpath)
 
String makeshortname (String longname, uint8_t index=1)
 
bool openDir (String path)
 
bool readDir (char name[13], uint32_t *size, bool *isFile)
 
- - - -

-Public Attributes

bool * isFile
 
-

Detailed Description

-

Marlin 3D Printer Firmware Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]

-

Based on Sprinter and grbl. Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm

-

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

-

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

-

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

- -

Definition at line 25 of file sd_ESP32.h.

-

Constructor & Destructor Documentation

- -

◆ ESP_SD()

- -
-
- - - - - - - -
ESP_SD::ESP_SD ()
-
- -
-
- -

◆ ~ESP_SD()

- -
-
- - - - - - - -
ESP_SD::~ESP_SD ()
-
- -
-
-

Member Function Documentation

- -

◆ available()

- -
-
- - - - - - - -
uint32_t ESP_SD::available ()
-
- -
-
- -

◆ card_status()

- -
-
- - - - - - - -
int8_t ESP_SD::card_status ()
-
- -
-
- -

◆ card_total_space()

- -
-
- - - - - - - -
uint32_t ESP_SD::card_total_space ()
-
- -
-
- -

◆ card_used_space()

- -
-
- - - - - - - -
uint32_t ESP_SD::card_used_space ()
-
- -
-
- -

◆ close()

- -
-
- - - - - - - -
void ESP_SD::close ()
-
- -
-
- -

◆ dir_exists()

- -
-
- - - - - - - - -
bool ESP_SD::dir_exists (const char * path)
-
- -
-
- -

◆ exists()

- -
-
- - - - - - - - -
bool ESP_SD::exists (const char * path)
-
- -
-
- -

◆ isopen()

- -
-
- - - - - - - -
bool ESP_SD::isopen ()
-
- -
-
- -

◆ makepath83()

- -
-
- - - - - - - - -
String ESP_SD::makepath83 (String longpath)
-
- -
-
- -

◆ makeshortname()

- -
-
- - - - - - - - - - - - - - - - - - -
String ESP_SD::makeshortname (String longname,
uint8_t index = 1 
)
-
- -
-
- -

◆ mkdir()

- -
-
- - - - - - - - -
bool ESP_SD::mkdir (const char * path)
-
- -
-
- -

◆ open()

- -
-
- - - - - - - - - - - - - - - - - - -
bool ESP_SD::open (const char * path,
bool readonly = true 
)
-
- -
-
- -

◆ openDir()

- -
-
- - - - - - - - -
bool ESP_SD::openDir (String path)
-
- -
-
- -

◆ read() [1/2]

- -
-
- - - - - - - -
int16_t ESP_SD::read ()
-
- -
-
- -

◆ read() [2/2]

- -
-
- - - - - - - - - - - - - - - - - - -
uint16_t ESP_SD::read (uint8_t * buf,
uint16_t nbyte 
)
-
- -
-
- -

◆ readDir()

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
bool ESP_SD::readDir (char name[13],
uint32_t * size,
bool * isFile 
)
-
- -
-
- -

◆ remove()

- -
-
- - - - - - - - -
bool ESP_SD::remove (const char * path)
-
- -
-
- -

◆ rmdir()

- -
-
- - - - - - - - -
bool ESP_SD::rmdir (const char * path)
-
- -
-
- -

◆ size()

- -
-
- - - - - - - -
uint32_t ESP_SD::size ()
-
- -
-
- -

◆ write() [1/2]

- -
-
- - - - - - - - - - - - - - - - - - -
int16_t ESP_SD::write (const uint8_t * data,
uint16_t len 
)
-
- -
-
- -

◆ write() [2/2]

- -
-
- - - - - - - - -
int16_t ESP_SD::write (const uint8_t byte)
-
- -
-
-

Member Data Documentation

- -

◆ isFile

- -
-
- - - - -
bool* ESP_SD::isFile
-
- -

Definition at line 50 of file sd_ESP32.h.

- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_e_s_p___s_d.js b/docs/html/class_e_s_p___s_d.js deleted file mode 100644 index 2edc3ac..0000000 --- a/docs/html/class_e_s_p___s_d.js +++ /dev/null @@ -1,27 +0,0 @@ -var class_e_s_p___s_d = -[ - [ "ESP_SD", "class_e_s_p___s_d.html#a817e53986873586c0c55e078e3d0547d", null ], - [ "~ESP_SD", "class_e_s_p___s_d.html#a852571834c4c862077dab2104d539d9d", null ], - [ "available", "class_e_s_p___s_d.html#a3474b13136a71ab6ea2afbe14025d9f9", null ], - [ "card_status", "class_e_s_p___s_d.html#a6aaf0c538574f5a4f58df66e78cad9e1", null ], - [ "card_total_space", "class_e_s_p___s_d.html#a939244c6b6b6b81f70503044b4274583", null ], - [ "card_used_space", "class_e_s_p___s_d.html#ae91ce4b54e0c79f2cb13c9bdaab2c81d", null ], - [ "close", "class_e_s_p___s_d.html#a8a216a25688ba0a7afdebbb1b98f46b2", null ], - [ "dir_exists", "class_e_s_p___s_d.html#afba93faa60b58ec284a38bac1174a680", null ], - [ "exists", "class_e_s_p___s_d.html#ae497f0993b7d47eadb14077cf112c6da", null ], - [ "isopen", "class_e_s_p___s_d.html#ae088288ee6fb745d499f99cc2f3353c3", null ], - [ "makepath83", "class_e_s_p___s_d.html#a9e64df598230da334409993890f11551", null ], - [ "makeshortname", "class_e_s_p___s_d.html#ab807ae35195d76b24121e455c7a0375b", null ], - [ "mkdir", "class_e_s_p___s_d.html#a0e1854e81305bf626bd54390c2d62321", null ], - [ "open", "class_e_s_p___s_d.html#a711c7a7ac7d491e3c3c1a063f48624ab", null ], - [ "openDir", "class_e_s_p___s_d.html#a5cbfd0f7a7a913204ce3078893ed912e", null ], - [ "read", "class_e_s_p___s_d.html#a08bd2a5faf3ae537ef65cd7d5ba9812b", null ], - [ "read", "class_e_s_p___s_d.html#a7d6c94f0cb6fcf0a0d014644c2300d3f", null ], - [ "readDir", "class_e_s_p___s_d.html#a1d90e39616a040395f2f317fb0d4f3f6", null ], - [ "remove", "class_e_s_p___s_d.html#a977589ee73d8adf70d0f4993fe341103", null ], - [ "rmdir", "class_e_s_p___s_d.html#ac53dd5b6c423e96bb7947203c212b031", null ], - [ "size", "class_e_s_p___s_d.html#abf4072cccbb5a4ef00a32e28998a2dcf", null ], - [ "write", "class_e_s_p___s_d.html#a5eb7e01dfdca42b88916a6185bcd8688", null ], - [ "write", "class_e_s_p___s_d.html#acfacb5636a4bc264b51bc06bc64f651b", null ], - [ "isFile", "class_e_s_p___s_d.html#a181e755c79ffe79d25e8b74385be85f6", null ] -]; \ No newline at end of file diff --git a/docs/html/class_e_s_p_response_stream-members.html b/docs/html/class_e_s_p_response_stream-members.html deleted file mode 100644 index 9df7e89..0000000 --- a/docs/html/class_e_s_p_response_stream-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ESPResponseStream Member List
-
-
- -

This is the complete list of members for ESPResponseStream, including all inherited members.

- - - - - -
ESPResponseStream(WebServer *webserver)ESPResponseStream
flush()ESPResponseStream
print(const char *data)ESPResponseStream
println(const char *data)ESPResponseStream
-
- - - - diff --git a/docs/html/class_e_s_p_response_stream.html b/docs/html/class_e_s_p_response_stream.html deleted file mode 100644 index 62a2de1..0000000 --- a/docs/html/class_e_s_p_response_stream.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - -ESP3D Lib: ESPResponseStream Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ESPResponseStream Class Reference
-
-
- -

#include <web_server.h>

- - - - - - - - - - -

-Public Member Functions

void print (const char *data)
 
void println (const char *data)
 
void flush ()
 
 ESPResponseStream (WebServer *webserver)
 
-

Detailed Description

-
-

Definition at line 52 of file web_server.h.

-

Constructor & Destructor Documentation

- -

◆ ESPResponseStream()

- -
-
- - - - - - - - -
ESPResponseStream::ESPResponseStream (WebServer * webserver)
-
- -
-
-

Member Function Documentation

- -

◆ flush()

- -
-
- - - - - - - -
void ESPResponseStream::flush ()
-
- -
-
- -

◆ print()

- -
-
- - - - - - - - -
void ESPResponseStream::print (const char * data)
-
- -
-
- -

◆ println()

- -
-
- - - - - - - - -
void ESPResponseStream::println (const char * data)
-
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_e_s_p_response_stream.js b/docs/html/class_e_s_p_response_stream.js deleted file mode 100644 index edc0d7b..0000000 --- a/docs/html/class_e_s_p_response_stream.js +++ /dev/null @@ -1,7 +0,0 @@ -var class_e_s_p_response_stream = -[ - [ "ESPResponseStream", "class_e_s_p_response_stream.html#aac3ccc2b5f126f6c57c1a4adc8671a9f", null ], - [ "flush", "class_e_s_p_response_stream.html#ae9b2873d7f30b9c533feeac2edb79296", null ], - [ "print", "class_e_s_p_response_stream.html#adddd77eae9d59e530f97123b5f76ecca", null ], - [ "println", "class_e_s_p_response_stream.html#a6d7a9ad280fabd0e4576ba4fbc779d41", null ] -]; \ No newline at end of file diff --git a/docs/html/class_esp3_d_lib-members.html b/docs/html/class_esp3_d_lib-members.html deleted file mode 100644 index 007f265..0000000 --- a/docs/html/class_esp3_d_lib-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Esp3DLib Member List
-
-
- -

This is the complete list of members for Esp3DLib, including all inherited members.

- - - - -
Esp3DLib()Esp3DLib
init()Esp3DLib
parse(char *cmd)Esp3DLib
-
- - - - diff --git a/docs/html/class_esp3_d_lib.html b/docs/html/class_esp3_d_lib.html deleted file mode 100644 index bd26f0b..0000000 --- a/docs/html/class_esp3_d_lib.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - -ESP3D Lib: Esp3DLib Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Esp3DLib Class Reference
-
-
- -

#include <esp3dlib.h>

- - - - - - - - - -

-Public Member Functions

 Esp3DLib ()
 
void init ()
 Initializes the task used by esp3dlib. More...
 
bool parse (char *cmd)
 
-

Detailed Description

-

Esp3DLib main class

- -

Definition at line 29 of file esp3dlib.h.

-

Constructor & Destructor Documentation

- -

◆ Esp3DLib()

- -
-
- - - - - - - -
Esp3DLib::Esp3DLib ()
-
-

Constructor.

- -
-
-

Member Function Documentation

- -

◆ init()

- -
-
- - - - - - - -
void Esp3DLib::init ()
-
- -

Initializes the task used by esp3dlib.

- -
-
- -

◆ parse()

- -
-
- - - - - - - - -
bool Esp3DLib::parse (char * cmd)
-
-

Parser for commmand.

Parameters
- - -
[in]cmd- the string to parse
-
-
-
Returns
true - if it is seen as ESP command.
-
-false - if not ESP command.
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_esp3_d_lib.js b/docs/html/class_esp3_d_lib.js deleted file mode 100644 index 9d9e2b8..0000000 --- a/docs/html/class_esp3_d_lib.js +++ /dev/null @@ -1,6 +0,0 @@ -var class_esp3_d_lib = -[ - [ "Esp3DLib", "class_esp3_d_lib.html#a5dc83711fcdb32f17cb26177361a5cbb", null ], - [ "init", "class_esp3_d_lib.html#a297a923379840d50682075a9422ae407", null ], - [ "parse", "class_esp3_d_lib.html#a8b59aad396ec458c3f3906bdc350c5bb", null ] -]; \ No newline at end of file diff --git a/docs/html/class_esp3_d_lib__coll__graph.map b/docs/html/class_esp3_d_lib__coll__graph.map deleted file mode 100644 index f3dd81e..0000000 --- a/docs/html/class_esp3_d_lib__coll__graph.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/class_esp3_d_lib__coll__graph.md5 b/docs/html/class_esp3_d_lib__coll__graph.md5 deleted file mode 100644 index c4fbccd..0000000 --- a/docs/html/class_esp3_d_lib__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -a8970488228668f475edb17f45a95d66 \ No newline at end of file diff --git a/docs/html/class_esp3_d_lib__coll__graph.png b/docs/html/class_esp3_d_lib__coll__graph.png deleted file mode 100644 index 78a4918..0000000 Binary files a/docs/html/class_esp3_d_lib__coll__graph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket-members.html b/docs/html/class_serial__2___socket-members.html deleted file mode 100644 index 1313009..0000000 --- a/docs/html/class_serial__2___socket-members.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Serial_2_Socket Member List
-
-
- -

This is the complete list of members for Serial_2_Socket, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - -
attachWS(void *web_socket)Serial_2_Socket
available()Serial_2_Socket
baudRate()Serial_2_Socket
begin(long speed)Serial_2_Socket
detachWS()Serial_2_Socket
end()Serial_2_Socket
flush(void)Serial_2_Socket
handle_flush()Serial_2_Socket
operator bool() constSerial_2_Socket
peek(void)Serial_2_Socket
push(const char *data)Serial_2_Socket
read(void)Serial_2_Socket
Serial_2_Socket()Serial_2_Socket
write(uint8_t c)Serial_2_Socket
write(const uint8_t *buffer, size_t size)Serial_2_Socket
write(const char *s)Serial_2_Socketinline
write(unsigned long n)Serial_2_Socketinline
write(long n)Serial_2_Socketinline
write(unsigned int n)Serial_2_Socketinline
write(int n)Serial_2_Socketinline
~Serial_2_Socket()Serial_2_Socket
-
- - - - diff --git a/docs/html/class_serial__2___socket.html b/docs/html/class_serial__2___socket.html deleted file mode 100644 index 9844728..0000000 --- a/docs/html/class_serial__2___socket.html +++ /dev/null @@ -1,664 +0,0 @@ - - - - - - - -ESP3D Lib: Serial_2_Socket Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Serial_2_Socket Class Reference
-
-
- -

#include <serial2socket.h>

-
-Inheritance diagram for Serial_2_Socket:
-
-
Inheritance graph
- - - - -
-
-Collaboration diagram for Serial_2_Socket:
-
-
Collaboration graph
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Serial_2_Socket ()
 
 ~Serial_2_Socket ()
 
size_t write (uint8_t c)
 
size_t write (const uint8_t *buffer, size_t size)
 
size_t write (const char *s)
 
size_t write (unsigned long n)
 
size_t write (long n)
 
size_t write (unsigned int n)
 
size_t write (int n)
 
long baudRate ()
 
void begin (long speed)
 
void end ()
 
int available ()
 
int peek (void)
 
int read (void)
 
bool push (const char *data)
 
void flush (void)
 
void handle_flush ()
 
 operator bool () const
 
bool attachWS (void *web_socket)
 
bool detachWS ()
 
-

Detailed Description

-
-

Definition at line 29 of file serial2socket.h.

-

Constructor & Destructor Documentation

- -

◆ Serial_2_Socket()

- -
-
- - - - - - - -
Serial_2_Socket::Serial_2_Socket ()
-
- -
-
- -

◆ ~Serial_2_Socket()

- -
-
- - - - - - - -
Serial_2_Socket::~Serial_2_Socket ()
-
- -
-
-

Member Function Documentation

- -

◆ attachWS()

- -
-
- - - - - - - - -
bool Serial_2_Socket::attachWS (void * web_socket)
-
- -
-
- -

◆ available()

- -
-
- - - - - - - -
int Serial_2_Socket::available ()
-
- -
-
- -

◆ baudRate()

- -
-
- - - - - - - -
long Serial_2_Socket::baudRate ()
-
- -
-
- -

◆ begin()

- -
-
- - - - - - - - -
void Serial_2_Socket::begin (long speed)
-
- -
-
- -

◆ detachWS()

- -
-
- - - - - - - -
bool Serial_2_Socket::detachWS ()
-
- -
-
- -

◆ end()

- -
-
- - - - - - - -
void Serial_2_Socket::end ()
-
- -
-
- -

◆ flush()

- -
-
- - - - - - - - -
void Serial_2_Socket::flush (void )
-
- -
-
- -

◆ handle_flush()

- -
-
- - - - - - - -
void Serial_2_Socket::handle_flush ()
-
- -
-
- -

◆ operator bool()

- -
-
- - - - - - - -
Serial_2_Socket::operator bool () const
-
- -
-
- -

◆ peek()

- -
-
- - - - - - - - -
int Serial_2_Socket::peek (void )
-
- -
-
- -

◆ push()

- -
-
- - - - - - - - -
bool Serial_2_Socket::push (const char * data)
-
- -
-
- -

◆ read()

- -
-
- - - - - - - - -
int Serial_2_Socket::read (void )
-
- -
-
- -

◆ write() [1/7]

- -
-
- - - - - -
- - - - - - - - -
size_t Serial_2_Socket::write (const char * s)
-
-inline
-
- -

Definition at line 36 of file serial2socket.h.

-
-Here is the call graph for this function:
-
-
- - - - -
- -
-
- -

◆ write() [2/7]

- -
-
- - - - - - - - - - - - - - - - - - -
size_t Serial_2_Socket::write (const uint8_t * buffer,
size_t size 
)
-
- -
-
- -

◆ write() [3/7]

- -
-
- - - - - -
- - - - - - - - -
size_t Serial_2_Socket::write (int n)
-
-inline
-
- -

Definition at line 52 of file serial2socket.h.

-
-Here is the call graph for this function:
-
-
- - - - -
- -
-
- -

◆ write() [4/7]

- -
-
- - - - - -
- - - - - - - - -
size_t Serial_2_Socket::write (long n)
-
-inline
-
- -

Definition at line 44 of file serial2socket.h.

-
-Here is the call graph for this function:
-
-
- - - - -
- -
-
- -

◆ write() [5/7]

- -
-
- - - - - - - - -
size_t Serial_2_Socket::write (uint8_t c)
-
-
-Here is the caller graph for this function:
-
-
- - - - -
- -
-
- -

◆ write() [6/7]

- -
-
- - - - - -
- - - - - - - - -
size_t Serial_2_Socket::write (unsigned int n)
-
-inline
-
- -

Definition at line 48 of file serial2socket.h.

-
-Here is the call graph for this function:
-
-
- - - - -
- -
-
- -

◆ write() [7/7]

- -
-
- - - - - -
- - - - - - - - -
size_t Serial_2_Socket::write (unsigned long n)
-
-inline
-
- -

Definition at line 40 of file serial2socket.h.

-
-Here is the call graph for this function:
-
-
- - - - -
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_serial__2___socket.js b/docs/html/class_serial__2___socket.js deleted file mode 100644 index da92180..0000000 --- a/docs/html/class_serial__2___socket.js +++ /dev/null @@ -1,24 +0,0 @@ -var class_serial__2___socket = -[ - [ "Serial_2_Socket", "class_serial__2___socket.html#a342b89d67032d2e8ec97afefa4819f32", null ], - [ "~Serial_2_Socket", "class_serial__2___socket.html#ad7352e92a9d7837f4657f077dae701c6", null ], - [ "attachWS", "class_serial__2___socket.html#a2d179a197b7735d79dba9409f1efd9a7", null ], - [ "available", "class_serial__2___socket.html#a2f94f78cf1a565de82d05307e708ff38", null ], - [ "baudRate", "class_serial__2___socket.html#a32d3054e537d54d14a5d8b5573002602", null ], - [ "begin", "class_serial__2___socket.html#a5fd33907b0c6db7390f899eaa2b20848", null ], - [ "detachWS", "class_serial__2___socket.html#a84514dd9015413d35a2cc6718cc96ab4", null ], - [ "end", "class_serial__2___socket.html#a44e8e62162dccce91cbf19bd35398207", null ], - [ "flush", "class_serial__2___socket.html#a1cfbe7618e10abb39376f6d3e1053b29", null ], - [ "handle_flush", "class_serial__2___socket.html#aebccb6a24539c03ad665b62ae0b8cee7", null ], - [ "operator bool", "class_serial__2___socket.html#aa9a7cb15a5b2a9b4efce3195b41a49ba", null ], - [ "peek", "class_serial__2___socket.html#aa60f74ff08f5b8887419da8bf865ab48", null ], - [ "push", "class_serial__2___socket.html#a69f7862d75bc0e945b118fc1d8fba9cf", null ], - [ "read", "class_serial__2___socket.html#a3dc7e480d96e5e70ac0256357749825a", null ], - [ "write", "class_serial__2___socket.html#ac938fbb6ee98767f1ea6e0d5ee32493a", null ], - [ "write", "class_serial__2___socket.html#ab8377b220a1d47a319b90e4d77adc230", null ], - [ "write", "class_serial__2___socket.html#a5e27a8c2524dc371dccbd3103f670cca", null ], - [ "write", "class_serial__2___socket.html#a0a853961a44fd45e5c991ed01e8dc6f3", null ], - [ "write", "class_serial__2___socket.html#ab15b934138a9c888421068acfb67e8e8", null ], - [ "write", "class_serial__2___socket.html#a8f7fae75d831d77ed36fe7578ef903b9", null ], - [ "write", "class_serial__2___socket.html#a725d17a85adfcb8251702f4b57cf4295", null ] -]; \ No newline at end of file diff --git a/docs/html/class_serial__2___socket__coll__graph.map b/docs/html/class_serial__2___socket__coll__graph.map deleted file mode 100644 index 438b4f6..0000000 --- a/docs/html/class_serial__2___socket__coll__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket__coll__graph.md5 b/docs/html/class_serial__2___socket__coll__graph.md5 deleted file mode 100644 index 758f5e8..0000000 --- a/docs/html/class_serial__2___socket__coll__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ed7018734ba92e04125bc80545aae42c \ No newline at end of file diff --git a/docs/html/class_serial__2___socket__coll__graph.png b/docs/html/class_serial__2___socket__coll__graph.png deleted file mode 100644 index 033f606..0000000 Binary files a/docs/html/class_serial__2___socket__coll__graph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket__inherit__graph.map b/docs/html/class_serial__2___socket__inherit__graph.map deleted file mode 100644 index 438b4f6..0000000 --- a/docs/html/class_serial__2___socket__inherit__graph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket__inherit__graph.md5 b/docs/html/class_serial__2___socket__inherit__graph.md5 deleted file mode 100644 index 758f5e8..0000000 --- a/docs/html/class_serial__2___socket__inherit__graph.md5 +++ /dev/null @@ -1 +0,0 @@ -ed7018734ba92e04125bc80545aae42c \ No newline at end of file diff --git a/docs/html/class_serial__2___socket__inherit__graph.png b/docs/html/class_serial__2___socket__inherit__graph.png deleted file mode 100644 index 033f606..0000000 Binary files a/docs/html/class_serial__2___socket__inherit__graph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.map b/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.map deleted file mode 100644 index ec26e18..0000000 --- a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.md5 b/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.md5 deleted file mode 100644 index 89d4538..0000000 --- a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -d812ae375a62632877d8f121a6abceb7 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.png b/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.png deleted file mode 100644 index 1ea982c..0000000 Binary files a/docs/html/class_serial__2___socket_a0a853961a44fd45e5c991ed01e8dc6f3_cgraph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.map b/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.map deleted file mode 100644 index ec26e18..0000000 --- a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.md5 b/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.md5 deleted file mode 100644 index 89d4538..0000000 --- a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -d812ae375a62632877d8f121a6abceb7 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.png b/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.png deleted file mode 100644 index 1ea982c..0000000 Binary files a/docs/html/class_serial__2___socket_a5e27a8c2524dc371dccbd3103f670cca_cgraph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.map b/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.map deleted file mode 100644 index ec26e18..0000000 --- a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.md5 b/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.md5 deleted file mode 100644 index 89d4538..0000000 --- a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -d812ae375a62632877d8f121a6abceb7 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.png b/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.png deleted file mode 100644 index 1ea982c..0000000 Binary files a/docs/html/class_serial__2___socket_a725d17a85adfcb8251702f4b57cf4295_cgraph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.map b/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.map deleted file mode 100644 index ec26e18..0000000 --- a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.md5 b/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.md5 deleted file mode 100644 index 89d4538..0000000 --- a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -d812ae375a62632877d8f121a6abceb7 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.png b/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.png deleted file mode 100644 index 1ea982c..0000000 Binary files a/docs/html/class_serial__2___socket_a8f7fae75d831d77ed36fe7578ef903b9_cgraph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.map b/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.map deleted file mode 100644 index 7b3f649..0000000 --- a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.md5 b/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.md5 deleted file mode 100644 index 4d812d8..0000000 --- a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -70d610ef32254dd56f2ab9aafe08e6a1 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.png b/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.png deleted file mode 100644 index 97dd878..0000000 Binary files a/docs/html/class_serial__2___socket_ab15b934138a9c888421068acfb67e8e8_icgraph.png and /dev/null differ diff --git a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.map b/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.map deleted file mode 100644 index ec26e18..0000000 --- a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.md5 b/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.md5 deleted file mode 100644 index 89d4538..0000000 --- a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.md5 +++ /dev/null @@ -1 +0,0 @@ -d812ae375a62632877d8f121a6abceb7 \ No newline at end of file diff --git a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.png b/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.png deleted file mode 100644 index 1ea982c..0000000 Binary files a/docs/html/class_serial__2___socket_ac938fbb6ee98767f1ea6e0d5ee32493a_cgraph.png and /dev/null differ diff --git a/docs/html/class_web___server-members.html b/docs/html/class_web___server-members.html deleted file mode 100644 index 85b061f..0000000 --- a/docs/html/class_web___server-members.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Web_Server Member List
-
-
- -

This is the complete list of members for Web_Server, including all inherited members.

- - - - - - - -
begin()Web_Server
end()Web_Server
get_client_ID()Web_Serverstatic
handle()Web_Serverstatic
Web_Server()Web_Server
~Web_Server()Web_Server
-
- - - - diff --git a/docs/html/class_web___server.html b/docs/html/class_web___server.html deleted file mode 100644 index d2b2cc6..0000000 --- a/docs/html/class_web___server.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - -ESP3D Lib: Web_Server Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- -

#include <web_server.h>

- - - - - - - - - - -

-Public Member Functions

 Web_Server ()
 
 ~Web_Server ()
 
bool begin ()
 
void end ()
 
- - - - - -

-Static Public Member Functions

static void handle ()
 
static long get_client_ID ()
 
-

Detailed Description

-
-

Definition at line 64 of file web_server.h.

-

Constructor & Destructor Documentation

- -

◆ Web_Server()

- -
-
- - - - - - - -
Web_Server::Web_Server ()
-
- -
-
- -

◆ ~Web_Server()

- -
-
- - - - - - - -
Web_Server::~Web_Server ()
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - - - -
bool Web_Server::begin ()
-
- -
-
- -

◆ end()

- -
-
- - - - - - - -
void Web_Server::end ()
-
- -
-
- -

◆ get_client_ID()

- -
-
- - - - - -
- - - - - - - -
static long Web_Server::get_client_ID ()
-
-static
-
- -
-
- -

◆ handle()

- -
-
- - - - - -
- - - - - - - -
static void Web_Server::handle ()
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_web___server.js b/docs/html/class_web___server.js deleted file mode 100644 index 832e41c..0000000 --- a/docs/html/class_web___server.js +++ /dev/null @@ -1,7 +0,0 @@ -var class_web___server = -[ - [ "Web_Server", "class_web___server.html#ad3aecb228288dd5b2eabfe7a75359025", null ], - [ "~Web_Server", "class_web___server.html#ad70b99561e3553404b33a262963de72b", null ], - [ "begin", "class_web___server.html#a856e18f69bf41ae5cb0c530d63823f39", null ], - [ "end", "class_web___server.html#a22e9125231c60d81c7b32bc9f34205b9", null ] -]; \ No newline at end of file diff --git a/docs/html/class_wi_fi_config-members.html b/docs/html/class_wi_fi_config-members.html deleted file mode 100644 index 2240446..0000000 --- a/docs/html/class_wi_fi_config-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WiFiConfig Member List
-
-
- -

This is the complete list of members for WiFiConfig, including all inherited members.

- - - - - - - - - - - - - - - - - - -
begin()WiFiConfigstatic
end()WiFiConfigstatic
getSignal(int32_t RSSI)WiFiConfigstatic
handle()WiFiConfigstatic
IP_int_from_string(String &s)WiFiConfigstatic
IP_string_from_int(uint32_t ip_int)WiFiConfigstatic
isHostnameValid(const char *hostname)WiFiConfigstatic
isPasswordValid(const char *password)WiFiConfigstatic
isSSIDValid(const char *ssid)WiFiConfigstatic
isValidIP(const char *string)WiFiConfigstatic
restart_ESP()WiFiConfigstatic
StartAP()WiFiConfigstatic
StartSTA()WiFiConfigstatic
StopWiFi()WiFiConfigstatic
wait(uint32_t milliseconds)WiFiConfigstatic
WiFiConfig()WiFiConfig
~WiFiConfig()WiFiConfig
-
- - - - diff --git a/docs/html/class_wi_fi_config.html b/docs/html/class_wi_fi_config.html deleted file mode 100644 index 208f81d..0000000 --- a/docs/html/class_wi_fi_config.html +++ /dev/null @@ -1,575 +0,0 @@ - - - - - - - -ESP3D Lib: WiFiConfig Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- -

#include <wificonfig.h>

- - - - - - -

-Public Member Functions

 WiFiConfig ()
 
 ~WiFiConfig ()
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

static void wait (uint32_t milliseconds)
 
static bool isValidIP (const char *string)
 
static bool isPasswordValid (const char *password)
 
static bool isSSIDValid (const char *ssid)
 
static bool isHostnameValid (const char *hostname)
 
static uint32_t IP_int_from_string (String &s)
 
static String IP_string_from_int (uint32_t ip_int)
 
static bool StartAP ()
 
static bool StartSTA ()
 
static void StopWiFi ()
 
static int32_t getSignal (int32_t RSSI)
 
static void begin ()
 
static void end ()
 
static void handle ()
 
static void restart_ESP ()
 
-

Detailed Description

-
-

Definition at line 105 of file wificonfig.h.

-

Constructor & Destructor Documentation

- -

◆ WiFiConfig()

- -
-
- - - - - - - -
WiFiConfig::WiFiConfig ()
-
- -
-
- -

◆ ~WiFiConfig()

- -
-
- - - - - - - -
WiFiConfig::~WiFiConfig ()
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
static void WiFiConfig::begin ()
-
-static
-
- -
-
- -

◆ end()

- -
-
- - - - - -
- - - - - - - -
static void WiFiConfig::end ()
-
-static
-
- -
-
- -

◆ getSignal()

- -
-
- - - - - -
- - - - - - - - -
static int32_t WiFiConfig::getSignal (int32_t RSSI)
-
-static
-
- -
-
- -

◆ handle()

- -
-
- - - - - -
- - - - - - - -
static void WiFiConfig::handle ()
-
-static
-
- -
-
- -

◆ IP_int_from_string()

- -
-
- - - - - -
- - - - - - - - -
static uint32_t WiFiConfig::IP_int_from_string (String & s)
-
-static
-
- -
-
- -

◆ IP_string_from_int()

- -
-
- - - - - -
- - - - - - - - -
static String WiFiConfig::IP_string_from_int (uint32_t ip_int)
-
-static
-
- -
-
- -

◆ isHostnameValid()

- -
-
- - - - - -
- - - - - - - - -
static bool WiFiConfig::isHostnameValid (const char * hostname)
-
-static
-
- -
-
- -

◆ isPasswordValid()

- -
-
- - - - - -
- - - - - - - - -
static bool WiFiConfig::isPasswordValid (const char * password)
-
-static
-
- -
-
- -

◆ isSSIDValid()

- -
-
- - - - - -
- - - - - - - - -
static bool WiFiConfig::isSSIDValid (const char * ssid)
-
-static
-
- -
-
- -

◆ isValidIP()

- -
-
- - - - - -
- - - - - - - - -
static bool WiFiConfig::isValidIP (const char * string)
-
-static
-
- -
-
- -

◆ restart_ESP()

- -
-
- - - - - -
- - - - - - - -
static void WiFiConfig::restart_ESP ()
-
-static
-
- -
-
- -

◆ StartAP()

- -
-
- - - - - -
- - - - - - - -
static bool WiFiConfig::StartAP ()
-
-static
-
- -
-
- -

◆ StartSTA()

- -
-
- - - - - -
- - - - - - - -
static bool WiFiConfig::StartSTA ()
-
-static
-
- -
-
- -

◆ StopWiFi()

- -
-
- - - - - -
- - - - - - - -
static void WiFiConfig::StopWiFi ()
-
-static
-
- -
-
- -

◆ wait()

- -
-
- - - - - -
- - - - - - - - -
static void WiFiConfig::wait (uint32_t milliseconds)
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_wi_fi_config.js b/docs/html/class_wi_fi_config.js deleted file mode 100644 index 0a634b3..0000000 --- a/docs/html/class_wi_fi_config.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_wi_fi_config = -[ - [ "WiFiConfig", "class_wi_fi_config.html#ab7ecc980e32d91b9e71d96dc1b040092", null ], - [ "~WiFiConfig", "class_wi_fi_config.html#afa73eed5ba10b1b86da8013bca38c0b9", null ] -]; \ No newline at end of file diff --git a/docs/html/class_wi_fi_services-members.html b/docs/html/class_wi_fi_services-members.html deleted file mode 100644 index 4fac905..0000000 --- a/docs/html/class_wi_fi_services-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - -ESP3D Lib: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WiFiServices Member List
-
-
- -

This is the complete list of members for WiFiServices, including all inherited members.

- - - - - - -
begin()WiFiServicesstatic
end()WiFiServicesstatic
handle()WiFiServicesstatic
WiFiServices()WiFiServices
~WiFiServices()WiFiServices
-
- - - - diff --git a/docs/html/class_wi_fi_services.html b/docs/html/class_wi_fi_services.html deleted file mode 100644 index 8dc8246..0000000 --- a/docs/html/class_wi_fi_services.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - -ESP3D Lib: WiFiServices Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- -

#include <wifiservices.h>

- - - - - - -

-Public Member Functions

 WiFiServices ()
 
 ~WiFiServices ()
 
- - - - - - - -

-Static Public Member Functions

static bool begin ()
 
static void end ()
 
static void handle ()
 
-

Detailed Description

-
-

Definition at line 27 of file wifiservices.h.

-

Constructor & Destructor Documentation

- -

◆ WiFiServices()

- -
-
- - - - - - - -
WiFiServices::WiFiServices ()
-
- -
-
- -

◆ ~WiFiServices()

- -
-
- - - - - - - -
WiFiServices::~WiFiServices ()
-
- -
-
-

Member Function Documentation

- -

◆ begin()

- -
-
- - - - - -
- - - - - - - -
static bool WiFiServices::begin ()
-
-static
-
- -
-
- -

◆ end()

- -
-
- - - - - -
- - - - - - - -
static void WiFiServices::end ()
-
-static
-
- -
-
- -

◆ handle()

- -
-
- - - - - -
- - - - - - - -
static void WiFiServices::handle ()
-
-static
-
- -
-
-
The documentation for this class was generated from the following file: -
-
- - - - diff --git a/docs/html/class_wi_fi_services.js b/docs/html/class_wi_fi_services.js deleted file mode 100644 index 63285ef..0000000 --- a/docs/html/class_wi_fi_services.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_wi_fi_services = -[ - [ "WiFiServices", "class_wi_fi_services.html#a5eec4b6f6f1b2356f3382510c7f5153c", null ], - [ "~WiFiServices", "class_wi_fi_services.html#a7f5fe522ff44dab1ec1b270183f89857", null ] -]; \ No newline at end of file diff --git a/docs/html/classes.html b/docs/html/classes.html deleted file mode 100644 index 49e73f5..0000000 --- a/docs/html/classes.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -ESP3D Lib: Class Index - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Index
-
-
-
e | s | w
- - - - - - - - - - - - - - - - - -
  e  
-
ESP_SD   
  w  
-
WiFiConfig   
ESPResponseStream   WiFiServices   
Esp3DLib   
  s  
-
Web_Server   
Serial_2_Socket   
-
e | s | w
-
-
- - - - diff --git a/docs/html/closed.png b/docs/html/closed.png deleted file mode 100644 index 98cc2c9..0000000 Binary files a/docs/html/closed.png and /dev/null differ diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index 8d05dab..0000000 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -ESP3D Lib: src Directory Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
src Directory Reference
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Files

file  esp3dlib.cpp [code]
 
file  esp3dlib.h [code]
 
file  esplibconfig.h [code]
 
file  nofile.h [code]
 
file  sd_ESP32.cpp [code]
 
file  sd_ESP32.h [code]
 
file  serial2socket.cpp [code]
 
file  serial2socket.h [code]
 
file  web_server.cpp [code]
 
file  web_server.h [code]
 
file  wificonfig.cpp [code]
 
file  wificonfig.h [code]
 
file  wifiservices.cpp [code]
 
file  wifiservices.h [code]
 
-
-
- - - - diff --git a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js deleted file mode 100644 index a8bfde2..0000000 --- a/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.js +++ /dev/null @@ -1,19 +0,0 @@ -var dir_68267d1309a1af8e8297ef4c3efbcdba = -[ - [ "esp3dlib.cpp", "esp3dlib_8cpp.html", null ], - [ "esp3dlib.h", "esp3dlib_8h.html", "esp3dlib_8h" ], - [ "esplibconfig.h", "esplibconfig_8h.html", "esplibconfig_8h" ], - [ "nofile.h", "nofile_8h.html", "nofile_8h" ], - [ "sd_ESP32.cpp", "sd___e_s_p32_8cpp.html", null ], - [ "sd_ESP32.h", "sd___e_s_p32_8h.html", [ - [ "ESP_SD", "class_e_s_p___s_d.html", "class_e_s_p___s_d" ] - ] ], - [ "serial2socket.cpp", "serial2socket_8cpp.html", null ], - [ "serial2socket.h", "serial2socket_8h.html", "serial2socket_8h" ], - [ "web_server.cpp", "web__server_8cpp.html", null ], - [ "web_server.h", "web__server_8h.html", "web__server_8h" ], - [ "wificonfig.cpp", "wificonfig_8cpp.html", null ], - [ "wificonfig.h", "wificonfig_8h.html", "wificonfig_8h" ], - [ "wifiservices.cpp", "wifiservices_8cpp.html", null ], - [ "wifiservices.h", "wifiservices_8h.html", "wifiservices_8h" ] -]; \ No newline at end of file diff --git a/docs/html/doc.png b/docs/html/doc.png deleted file mode 100644 index 17edabf..0000000 Binary files a/docs/html/doc.png and /dev/null differ diff --git a/docs/html/doxygen.css b/docs/html/doxygen.css deleted file mode 100644 index 73ecbb2..0000000 --- a/docs/html/doxygen.css +++ /dev/null @@ -1,1771 +0,0 @@ -/* The standard CSS for doxygen 1.8.17 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -th p.starttd, p.intertd, p.endtd { - font-size: 100%; - font-weight: 700; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -p.interli { -} - -p.interdd { -} - -p.intertd { -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #FFFFFF; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #FFFFFF; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl, img.inline { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #9CAFD4; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight, .memTemplItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #E2E8F2; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype, .tparams .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -.arrow { - color: #9CAFD4; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #728DC1; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; -} - -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { - margin-left: 0px; - padding-left: 0px; -} - -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; -} - -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; -} - -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; -} - -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -/* -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTableHead tr { -} - -table.markdownTableBodyLeft td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft { - text-align: left -} - -th.markdownTableHeadRight { - text-align: right -} - -th.markdownTableHeadCenter { - text-align: center -} -*/ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/docs/html/doxygen.png b/docs/html/doxygen.png deleted file mode 100644 index 3ff17d8..0000000 Binary files a/docs/html/doxygen.png and /dev/null differ diff --git a/docs/html/dynsections.js b/docs/html/dynsections.js deleted file mode 100644 index c8e84aa..0000000 --- a/docs/html/dynsections.js +++ /dev/null @@ -1,127 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -ESP3D Lib: src/esp3dlib.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
esp3dlib.cpp File Reference
-
-
-
#include "esplibconfig.h"
-
-Include dependency graph for esp3dlib.cpp:
-
-
- - - - -
-
-

Go to the source code of this file.

-
-
- - - - diff --git a/docs/html/esp3dlib_8cpp__incl.map b/docs/html/esp3dlib_8cpp__incl.map deleted file mode 100644 index 3354bb1..0000000 --- a/docs/html/esp3dlib_8cpp__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/esp3dlib_8cpp__incl.md5 b/docs/html/esp3dlib_8cpp__incl.md5 deleted file mode 100644 index b64a1a0..0000000 --- a/docs/html/esp3dlib_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -378230bb910a2e58cca00a656a732c3c \ No newline at end of file diff --git a/docs/html/esp3dlib_8cpp__incl.png b/docs/html/esp3dlib_8cpp__incl.png deleted file mode 100644 index 00677d6..0000000 Binary files a/docs/html/esp3dlib_8cpp__incl.png and /dev/null differ diff --git a/docs/html/esp3dlib_8cpp_source.html b/docs/html/esp3dlib_8cpp_source.html deleted file mode 100644 index 0ea0019..0000000 --- a/docs/html/esp3dlib_8cpp_source.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -ESP3D Lib: src/esp3dlib.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
esp3dlib.cpp
-
-
-Go to the documentation of this file.
1 /*
-
2  This file is part of ESP3DLib library for 3D printer.
-
3 
-
4  ESP3D Firmware for 3D printer is free software: you can redistribute it and/or modify
-
5  it under the terms of the GNU General Public License as published by
-
6  the Free Software Foundation, either version 3 of the License, or
-
7  (at your option) any later version.
-
8 
-
9  ESP3D Firmware for 3D printer is distributed in the hope that it will be useful,
-
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
-
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-
12  GNU General Public License for more details.
-
13 
-
14  You should have received a copy of the GNU General Public License
-
15  along with this Firmware. If not, see <http://www.gnu.org/licenses/>.
-
16 
-
17  This firmware is using the standard arduino IDE with module to support ESP8266/ESP32:
-
18  https://github.com/esp8266/Arduino
-
19  https://github.com/espressif/arduino-esp32
-
20 
-
21  Latest version of the code and documentation can be found here :
-
22  https://github.com/luc-github/ESP3D
-
23 
-
24  Main author: luc lebosse
-
25 
-
26 */
-
27 #include "esplibconfig.h"
-
28 
-
29 #if ENABLED(ESP3D_WIFISUPPORT)
-
30 #include "esp3dlib.h"
-
31 #include "wificonfig.h"
-
32 #include MARLIN_PATH(core/serial.h)
-
33 
- -
35 
-
36 void WiFiTaskfn( void * parameter )
-
37 {
-
38  wifi_config.wait(100); // Yield to other tasks
- -
40  for(;;) {
- -
42  wifi_config.wait(0); // Yield to other tasks
-
43  }
-
44  vTaskDelete( NULL );
-
45 }
-
46 
-
47 
-
48 //Contructor
- -
50 {
-
51 
-
52 }
-
53 
-
54 //Begin which setup everything
-
55 void Esp3DLib::init()
-
56 {
-
57  xTaskCreatePinnedToCore(
-
58  WiFiTaskfn, /* Task function. */
-
59  "WiFi Task", /* name of task. */
-
60  10000, /* Stack size of task */
-
61  NULL, /* parameter of the task */
-
62  1, /* priority of the task */
-
63  NULL, /* Task handle to keep track of created task */
-
64  0 /* Core to run the task */
-
65  );
-
66 }
-
67 //Parse command
-
68 bool Esp3DLib::parse(char * cmd)
-
69 {
-
70  String scmd = cmd;
-
71  if (scmd.startsWith("[ESP")) {
-
72  SERIAL_ECHO_START();
-
73  SERIAL_ECHOLNPAIR("it is ESP command:", cmd);
-
74  return true;
-
75  } else {
-
76  return false;
-
77  }
-
78 
-
79 }
-
80 #endif //ESP3D_WIFISUPPORT
-
-
-
WiFiConfig wifi_config
-
static void begin()
- -
void init()
Initializes the task used by esp3dlib.
-
static void handle()
-
Esp3DLib esp3dlib
You must call esp3dlib.init() before using this variable.
- - - -
bool parse(char *cmd)
-
static void wait(uint32_t milliseconds)
- - - - - diff --git a/docs/html/esp3dlib_8h.html b/docs/html/esp3dlib_8h.html deleted file mode 100644 index ee32ec4..0000000 --- a/docs/html/esp3dlib_8h.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -ESP3D Lib: src/esp3dlib.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
esp3dlib.h File Reference
-
-
-
#include "serial2socket.h"
-
-Include dependency graph for esp3dlib.h:
-
-
- - - - - -
-
-

Go to the source code of this file.

- - - - -

-Classes

class  Esp3DLib
 
- - - - -

-Variables

Esp3DLib esp3dlib
 You must call esp3dlib.init() before using this variable. More...
 
-

Variable Documentation

- -

◆ esp3dlib

- -
-
- - - - -
Esp3DLib esp3dlib
-
- -

You must call esp3dlib.init() before using this variable.

- -
-
-
-
- - - - diff --git a/docs/html/esp3dlib_8h.js b/docs/html/esp3dlib_8h.js deleted file mode 100644 index 0689152..0000000 --- a/docs/html/esp3dlib_8h.js +++ /dev/null @@ -1,5 +0,0 @@ -var esp3dlib_8h = -[ - [ "Esp3DLib", "class_esp3_d_lib.html", "class_esp3_d_lib" ], - [ "esp3dlib", "esp3dlib_8h.html#aba2ef588824d50eb5139cbc4ceb94afa", null ] -]; \ No newline at end of file diff --git a/docs/html/esp3dlib_8h__incl.map b/docs/html/esp3dlib_8h__incl.map deleted file mode 100644 index 6f65ab4..0000000 --- a/docs/html/esp3dlib_8h__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/esp3dlib_8h__incl.md5 b/docs/html/esp3dlib_8h__incl.md5 deleted file mode 100644 index 184a7fc..0000000 --- a/docs/html/esp3dlib_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -527192aee1271963d236177cd66f9b28 \ No newline at end of file diff --git a/docs/html/esp3dlib_8h__incl.png b/docs/html/esp3dlib_8h__incl.png deleted file mode 100644 index 7af2cb0..0000000 Binary files a/docs/html/esp3dlib_8h__incl.png and /dev/null differ diff --git a/docs/html/esp3dlib_8h_source.html b/docs/html/esp3dlib_8h_source.html deleted file mode 100644 index aaa5643..0000000 --- a/docs/html/esp3dlib_8h_source.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -ESP3D Lib: src/esp3dlib.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
esp3dlib.h
-
-
-Go to the documentation of this file.
1 /*
-
2  esp3dlib.h - esp3dlib class
-
3 
-
4  Copyright (c) 2019 Luc Lebosse. All rights reserved.
-
5 
-
6  This library is free software; you can redistribute it and/or
-
7  modify it under the terms of the GNU Lesser General Public
-
8  License as published by the Free Software Foundation; either
-
9  version 2.1 of the License, or (at your option) any later version.
-
10 
-
11  This library is distributed in the hope that it will be useful,
-
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
-
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-
14  Lesser General Public License for more details.
-
15 
-
16  You should have received a copy of the GNU Lesser General Public
-
17  License along with this library; if not, write to the Free Software
-
18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
19 */
-
20 
-
21 #ifndef ESP3DLIB_H
-
22 #define ESP3DLIB_H
-
23 //be sure correct IDE and settings are used for ESP8266 or ESP32
-
24 #if !defined(ARDUINO_ARCH_ESP32)
-
25 #error Oops! Make sure you have 'ESP32' compatible board selected
-
26 #endif
-
27 #include "serial2socket.h"
-
29 class Esp3DLib
-
30 {
-
31 public:
-
35  Esp3DLib();
-
39  void init();
-
47  bool parse(char * cmd);
-
48 };
-
49 
-
53 extern Esp3DLib esp3dlib;
-
54 
-
55 #endif
-
-
- -
void init()
Initializes the task used by esp3dlib.
-
Esp3DLib esp3dlib
You must call esp3dlib.init() before using this variable.
- -
bool parse(char *cmd)
- - - - - diff --git a/docs/html/esplibconfig_8h.html b/docs/html/esplibconfig_8h.html deleted file mode 100644 index a068679..0000000 --- a/docs/html/esplibconfig_8h.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - -ESP3D Lib: src/esplibconfig.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
esplibconfig.h File Reference
-
-
-
-This graph shows which files directly or indirectly include this file:
-
-
- - - - - - -
-
-

Go to the source code of this file.

- - - - - - - - - - -

-Macros

#define XSTR_(M)   #M
 
#define XSTR(M)   XSTR_(M)
 
#define MARLIN_PATH(PATH)   XSTR(../../../../../Marlin/src/PATH)
 
#define MYSERIAL0   flushableSerial
 
-

Macro Definition Documentation

- -

◆ MARLIN_PATH

- -
-
- - - - - - - - -
#define MARLIN_PATH( PATH)   XSTR(../../../../../Marlin/src/PATH)
-
- -

Definition at line 24 of file esplibconfig.h.

- -
-
- -

◆ MYSERIAL0

- -
-
- - - - -
#define MYSERIAL0   flushableSerial
-
- -

Definition at line 29 of file esplibconfig.h.

- -
-
- -

◆ XSTR

- -
-
- - - - - - - - -
#define XSTR( M)   XSTR_(M)
-
- -

Definition at line 23 of file esplibconfig.h.

- -
-
- -

◆ XSTR_

- -
-
- - - - - - - - -
#define XSTR_( M)   #M
-
- -

Definition at line 22 of file esplibconfig.h.

- -
-
-
-
- - - - diff --git a/docs/html/esplibconfig_8h.js b/docs/html/esplibconfig_8h.js deleted file mode 100644 index 26df8bf..0000000 --- a/docs/html/esplibconfig_8h.js +++ /dev/null @@ -1,7 +0,0 @@ -var esplibconfig_8h = -[ - [ "MARLIN_PATH", "esplibconfig_8h.html#a1ede17eaf525776d01a001a18befafdc", null ], - [ "MYSERIAL0", "esplibconfig_8h.html#a9de3b96e5997b932cf0e423f5043629c", null ], - [ "XSTR", "esplibconfig_8h.html#a8c298db9f79be08b2f370cef995d799b", null ], - [ "XSTR_", "esplibconfig_8h.html#a995e2a1a0a46b8e40332b4c4290bcd05", null ] -]; \ No newline at end of file diff --git a/docs/html/esplibconfig_8h__dep__incl.map b/docs/html/esplibconfig_8h__dep__incl.map deleted file mode 100644 index a2b5c6b..0000000 --- a/docs/html/esplibconfig_8h__dep__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/html/esplibconfig_8h__dep__incl.md5 b/docs/html/esplibconfig_8h__dep__incl.md5 deleted file mode 100644 index 1bdfb5f..0000000 --- a/docs/html/esplibconfig_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -b1e4fcf8189742707648529a17e24bb1 \ No newline at end of file diff --git a/docs/html/esplibconfig_8h__dep__incl.png b/docs/html/esplibconfig_8h__dep__incl.png deleted file mode 100644 index 82c4c0c..0000000 Binary files a/docs/html/esplibconfig_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/esplibconfig_8h_source.html b/docs/html/esplibconfig_8h_source.html deleted file mode 100644 index 4cb79e1..0000000 --- a/docs/html/esplibconfig_8h_source.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - -ESP3D Lib: src/esplibconfig.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
esplibconfig.h
-
-
-Go to the documentation of this file.
1 /*
-
2  esp3dlibconfig.h - esp3dlib functions class
-
3 
-
4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
-
5 
-
6  This library is free software; you can redistribute it and/or
-
7  modify it under the terms of the GNU Lesser General Public
-
8  License as published by the Free Software Foundation; either
-
9  version 2.1 of the License, or (at your option) any later version.
-
10 
-
11  This library is distributed in the hope that it will be useful,
-
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
-
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-
14  Lesser General Public License for more details.
-
15 
-
16  You should have received a copy of the GNU Lesser General Public
-
17  License along with this library; if not, write to the Free Software
-
18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
19 */
-
20 
-
21 //config reference
-
22 #define XSTR_(M) #M
-
23 #define XSTR(M) XSTR_(M)
-
24 #define MARLIN_PATH(PATH) XSTR(../../../../../Marlin/src/PATH)
-
25 #include MARLIN_PATH(inc/MarlinConfigPre.h)
-
26 #undef DISABLED
-
27 #undef _BV
-
28 #include MARLIN_PATH(HAL/HAL_ESP32/FlushableHardwareSerial.h)
-
29 #define MYSERIAL0 flushableSerial
-
30 
-
-
- - - - diff --git a/docs/html/files.html b/docs/html/files.html deleted file mode 100644 index cafb417..0000000 --- a/docs/html/files.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -ESP3D Lib: File List - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all files with brief descriptions:
-
-
- - - - diff --git a/docs/html/files_dup.js b/docs/html/files_dup.js deleted file mode 100644 index c3b39c4..0000000 --- a/docs/html/files_dup.js +++ /dev/null @@ -1,4 +0,0 @@ -var files_dup = -[ - [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] -]; \ No newline at end of file diff --git a/docs/html/folderclosed.png b/docs/html/folderclosed.png deleted file mode 100644 index bb8ab35..0000000 Binary files a/docs/html/folderclosed.png and /dev/null differ diff --git a/docs/html/folderopen.png b/docs/html/folderopen.png deleted file mode 100644 index d6c7f67..0000000 Binary files a/docs/html/folderopen.png and /dev/null differ diff --git a/docs/html/functions.html b/docs/html/functions.html deleted file mode 100644 index ea5a075..0000000 --- a/docs/html/functions.html +++ /dev/null @@ -1,354 +0,0 @@ - - - - - - - -ESP3D Lib: Class Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- m -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- w -

- - -

- ~ -

-
-
- - - - diff --git a/docs/html/functions_func.html b/docs/html/functions_func.html deleted file mode 100644 index 996c476..0000000 --- a/docs/html/functions_func.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - -ESP3D Lib: Class Members - Functions - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- h -

- - -

- i -

- - -

- m -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- w -

- - -

- ~ -

-
-
- - - - diff --git a/docs/html/functions_vars.html b/docs/html/functions_vars.html deleted file mode 100644 index 1500b6f..0000000 --- a/docs/html/functions_vars.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -ESP3D Lib: Class Members - Variables - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/docs/html/globals.html b/docs/html/globals.html deleted file mode 100644 index 467fb96..0000000 --- a/docs/html/globals.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - -ESP3D Lib: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- _ -

- - -

- a -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- w -

- - -

- x -

-
-
- - - - diff --git a/docs/html/globals_defs.html b/docs/html/globals_defs.html deleted file mode 100644 index 6a713c7..0000000 --- a/docs/html/globals_defs.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - -ESP3D Lib: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- _ -

- - -

- a -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- m -

- - -

- n -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- x -

-
-
- - - - diff --git a/docs/html/globals_enum.html b/docs/html/globals_enum.html deleted file mode 100644 index fe79d97..0000000 --- a/docs/html/globals_enum.html +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - -ESP3D Lib: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/docs/html/globals_eval.html b/docs/html/globals_eval.html deleted file mode 100644 index ad134a1..0000000 --- a/docs/html/globals_eval.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -ESP3D Lib: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/docs/html/globals_vars.html b/docs/html/globals_vars.html deleted file mode 100644 index f590eed..0000000 --- a/docs/html/globals_vars.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -ESP3D Lib: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - - diff --git a/docs/html/graph_legend.html b/docs/html/graph_legend.html deleted file mode 100644 index 12309ea..0000000 --- a/docs/html/graph_legend.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -ESP3D Lib: Graph Legend - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Graph Legend
-
-
-

This page explains how to interpret the graphs that are generated by doxygen.

-

Consider the following example:

/*! Invisible class because of truncation */
-
class Invisible { };
-
-
/*! Truncated class, inheritance relation is hidden */
-
class Truncated : public Invisible { };
-
-
/* Class not documented with doxygen comments */
-
class Undocumented { };
-
-
/*! Class that is inherited using public inheritance */
-
class PublicBase : public Truncated { };
-
-
/*! A template class */
-
template<class T> class Templ { };
-
-
/*! Class that is inherited using protected inheritance */
-
class ProtectedBase { };
-
-
/*! Class that is inherited using private inheritance */
-
class PrivateBase { };
-
-
/*! Class that is used by the Inherited class */
-
class Used { };
-
-
/*! Super class that inherits a number of other classes */
-
class Inherited : public PublicBase,
-
protected ProtectedBase,
-
private PrivateBase,
-
public Undocumented,
-
public Templ<int>
-
{
-
private:
-
Used *m_usedClass;
-
};
-

This will result in the following graph:

-

The boxes in the above graph have the following meaning:

-
    -
  • -A filled gray box represents the struct or class for which the graph is generated.
  • -
  • -A box with a black border denotes a documented struct or class.
  • -
  • -A box with a gray border denotes an undocumented struct or class.
  • -
  • -A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • -
-

The arrows have the following meaning:

-
    -
  • -A dark blue arrow is used to visualize a public inheritance relation between two classes.
  • -
  • -A dark green arrow is used for protected inheritance.
  • -
  • -A dark red arrow is used for private inheritance.
  • -
  • -A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • -
  • -A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • -
-
-
- - - - diff --git a/docs/html/graph_legend.md5 b/docs/html/graph_legend.md5 deleted file mode 100644 index 8fcdccd..0000000 --- a/docs/html/graph_legend.md5 +++ /dev/null @@ -1 +0,0 @@ -f51bf6e9a10430aafef59831b08dcbfe \ No newline at end of file diff --git a/docs/html/graph_legend.png b/docs/html/graph_legend.png deleted file mode 100644 index e303709..0000000 Binary files a/docs/html/graph_legend.png and /dev/null differ diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html deleted file mode 100644 index ba4fc3a..0000000 --- a/docs/html/hierarchy.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -ESP3D Lib: Class Hierarchy - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
-
-

Go to the graphical class hierarchy

-This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 12]
- - - - - - - - -
 CEsp3DLib
 CESP_SD
 CESPResponseStream
 CPrint
 CSerial_2_Socket
 CWeb_Server
 CWiFiConfig
 CWiFiServices
-
-
-
- - - - diff --git a/docs/html/hierarchy.js b/docs/html/hierarchy.js deleted file mode 100644 index 5cb3403..0000000 --- a/docs/html/hierarchy.js +++ /dev/null @@ -1,12 +0,0 @@ -var hierarchy = -[ - [ "Esp3DLib", "class_esp3_d_lib.html", null ], - [ "ESP_SD", "class_e_s_p___s_d.html", null ], - [ "ESPResponseStream", "class_e_s_p_response_stream.html", null ], - [ "Print", null, [ - [ "Serial_2_Socket", "class_serial__2___socket.html", null ] - ] ], - [ "Web_Server", "class_web___server.html", null ], - [ "WiFiConfig", "class_wi_fi_config.html", null ], - [ "WiFiServices", "class_wi_fi_services.html", null ] -]; \ No newline at end of file diff --git a/docs/html/index.html b/docs/html/index.html deleted file mode 100644 index 9b5fd04..0000000 --- a/docs/html/index.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - -ESP3D Lib: Main Page - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ESP3D Lib Documentation
-
-
-
-
- - - - diff --git a/docs/html/inherit_graph_0.map b/docs/html/inherit_graph_0.map deleted file mode 100644 index 9fd0a66..0000000 --- a/docs/html/inherit_graph_0.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_0.md5 b/docs/html/inherit_graph_0.md5 deleted file mode 100644 index 8d9626a..0000000 --- a/docs/html/inherit_graph_0.md5 +++ /dev/null @@ -1 +0,0 @@ -a0a00b7a4ef44e5a1dd20daf8a93395d \ No newline at end of file diff --git a/docs/html/inherit_graph_0.png b/docs/html/inherit_graph_0.png deleted file mode 100644 index 53be474..0000000 Binary files a/docs/html/inherit_graph_0.png and /dev/null differ diff --git a/docs/html/inherit_graph_1.map b/docs/html/inherit_graph_1.map deleted file mode 100644 index cac772c..0000000 --- a/docs/html/inherit_graph_1.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_1.md5 b/docs/html/inherit_graph_1.md5 deleted file mode 100644 index ba0a65d..0000000 --- a/docs/html/inherit_graph_1.md5 +++ /dev/null @@ -1 +0,0 @@ -ec81b34605ea357ca4d65a0830af96c3 \ No newline at end of file diff --git a/docs/html/inherit_graph_1.png b/docs/html/inherit_graph_1.png deleted file mode 100644 index 11a757c..0000000 Binary files a/docs/html/inherit_graph_1.png and /dev/null differ diff --git a/docs/html/inherit_graph_2.map b/docs/html/inherit_graph_2.map deleted file mode 100644 index 1de0b55..0000000 --- a/docs/html/inherit_graph_2.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_2.md5 b/docs/html/inherit_graph_2.md5 deleted file mode 100644 index 9db6f9f..0000000 --- a/docs/html/inherit_graph_2.md5 +++ /dev/null @@ -1 +0,0 @@ -33402bc38bcd920d6bdb48804407684b \ No newline at end of file diff --git a/docs/html/inherit_graph_2.png b/docs/html/inherit_graph_2.png deleted file mode 100644 index f097ecb..0000000 Binary files a/docs/html/inherit_graph_2.png and /dev/null differ diff --git a/docs/html/inherit_graph_3.map b/docs/html/inherit_graph_3.map deleted file mode 100644 index 6450498..0000000 --- a/docs/html/inherit_graph_3.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/inherit_graph_3.md5 b/docs/html/inherit_graph_3.md5 deleted file mode 100644 index fd3d5d2..0000000 --- a/docs/html/inherit_graph_3.md5 +++ /dev/null @@ -1 +0,0 @@ -2975aac49458dcd7cb8f13b90d901f70 \ No newline at end of file diff --git a/docs/html/inherit_graph_3.png b/docs/html/inherit_graph_3.png deleted file mode 100644 index 45231c8..0000000 Binary files a/docs/html/inherit_graph_3.png and /dev/null differ diff --git a/docs/html/inherit_graph_4.map b/docs/html/inherit_graph_4.map deleted file mode 100644 index 13e2f65..0000000 --- a/docs/html/inherit_graph_4.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_4.md5 b/docs/html/inherit_graph_4.md5 deleted file mode 100644 index 473fe95..0000000 --- a/docs/html/inherit_graph_4.md5 +++ /dev/null @@ -1 +0,0 @@ -c5bbfe404edcb5285dbf116e63e028f7 \ No newline at end of file diff --git a/docs/html/inherit_graph_4.png b/docs/html/inherit_graph_4.png deleted file mode 100644 index 78c1a11..0000000 Binary files a/docs/html/inherit_graph_4.png and /dev/null differ diff --git a/docs/html/inherit_graph_5.map b/docs/html/inherit_graph_5.map deleted file mode 100644 index 0dc6e4a..0000000 --- a/docs/html/inherit_graph_5.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_5.md5 b/docs/html/inherit_graph_5.md5 deleted file mode 100644 index deb7435..0000000 --- a/docs/html/inherit_graph_5.md5 +++ /dev/null @@ -1 +0,0 @@ -7cd85be39ca4dfeed495d27a4358f5a9 \ No newline at end of file diff --git a/docs/html/inherit_graph_5.png b/docs/html/inherit_graph_5.png deleted file mode 100644 index f6e5588..0000000 Binary files a/docs/html/inherit_graph_5.png and /dev/null differ diff --git a/docs/html/inherit_graph_6.map b/docs/html/inherit_graph_6.map deleted file mode 100644 index 1795fd2..0000000 --- a/docs/html/inherit_graph_6.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/docs/html/inherit_graph_6.md5 b/docs/html/inherit_graph_6.md5 deleted file mode 100644 index f81def2..0000000 --- a/docs/html/inherit_graph_6.md5 +++ /dev/null @@ -1 +0,0 @@ -814a9579fc9f57223e549e38eed27deb \ No newline at end of file diff --git a/docs/html/inherit_graph_6.png b/docs/html/inherit_graph_6.png deleted file mode 100644 index 622c3f5..0000000 Binary files a/docs/html/inherit_graph_6.png and /dev/null differ diff --git a/docs/html/inherits.html b/docs/html/inherits.html deleted file mode 100644 index dbbb897..0000000 --- a/docs/html/inherits.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -ESP3D Lib: Class Hierarchy - - - - - - - - - - - - - -
-
- - - - - - - -
-
ESP3D Lib -  1.0 -
-
3D Printer WiFi Library
-
-
- - - - - - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
- - - - - - - - -
- - - -
- - - -
- - - -
- - - - -
- - - -
- - - -
- - - -
-
-
- - - - diff --git a/docs/html/jquery.js b/docs/html/jquery.js deleted file mode 100644 index 103c32d..0000000 --- a/docs/html/jquery.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/docs/html/menu.js b/docs/html/menu.js deleted file mode 100644 index 433c15b..0000000 --- a/docs/html/menu.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { - function makeTree(data,relPath) { - var result=''; - if ('children' in data) { - result+=''; - } - return result; - } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); - if (searchEnabled) { - if (serverSide) { - $('#main-menu').append('
  • '); - } else { - $('#main-menu').append('
  • '); - } - } - $('#main-menu').smartmenus(); -} -/* @license-end */ diff --git a/docs/html/menudata.js b/docs/html/menudata.js deleted file mode 100644 index 22c7a3c..0000000 --- a/docs/html/menudata.js +++ /dev/null @@ -1,100 +0,0 @@ -/* -@licstart The following is the entire license notice for the -JavaScript code in this file. - -Copyright (C) 1997-2019 by Dimitri van Heesch - -This program is free software; you can redistribute it and/or modify -it under the terms of version 2 of the GNU General Public License as published by -the Free Software Foundation - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -@licend The above is the entire license notice -for the JavaScript code in this file -*/ -var menudata={children:[ -{text:"Main Page",url:"index.html"}, -{text:"Classes",url:"annotated.html",children:[ -{text:"Class List",url:"annotated.html"}, -{text:"Class Index",url:"classes.html"}, -{text:"Class Hierarchy",url:"inherits.html"}, -{text:"Class Members",url:"functions.html",children:[ -{text:"All",url:"functions.html",children:[ -{text:"a",url:"functions.html#index_a"}, -{text:"b",url:"functions.html#index_b"}, -{text:"c",url:"functions.html#index_c"}, -{text:"d",url:"functions.html#index_d"}, -{text:"e",url:"functions.html#index_e"}, -{text:"f",url:"functions.html#index_f"}, -{text:"g",url:"functions.html#index_g"}, -{text:"h",url:"functions.html#index_h"}, -{text:"i",url:"functions.html#index_i"}, -{text:"m",url:"functions.html#index_m"}, -{text:"o",url:"functions.html#index_o"}, -{text:"p",url:"functions.html#index_p"}, -{text:"r",url:"functions.html#index_r"}, -{text:"s",url:"functions.html#index_s"}, -{text:"w",url:"functions.html#index_w"}, -{text:"~",url:"functions.html#index__7E"}]}, -{text:"Functions",url:"functions_func.html",children:[ -{text:"a",url:"functions_func.html#index_a"}, -{text:"b",url:"functions_func.html#index_b"}, -{text:"c",url:"functions_func.html#index_c"}, -{text:"d",url:"functions_func.html#index_d"}, -{text:"e",url:"functions_func.html#index_e"}, -{text:"f",url:"functions_func.html#index_f"}, -{text:"g",url:"functions_func.html#index_g"}, -{text:"h",url:"functions_func.html#index_h"}, -{text:"i",url:"functions_func.html#index_i"}, -{text:"m",url:"functions_func.html#index_m"}, -{text:"o",url:"functions_func.html#index_o"}, -{text:"p",url:"functions_func.html#index_p"}, -{text:"r",url:"functions_func.html#index_r"}, -{text:"s",url:"functions_func.html#index_s"}, -{text:"w",url:"functions_func.html#index_w"}, -{text:"~",url:"functions_func.html#index__7E"}]}, -{text:"Variables",url:"functions_vars.html"}]}]}, -{text:"Files",url:"files.html",children:[ -{text:"File List",url:"files.html"}, -{text:"File Members",url:"globals.html",children:[ -{text:"All",url:"globals.html",children:[ -{text:"_",url:"globals.html#index__5F"}, -{text:"a",url:"globals.html#index_a"}, -{text:"d",url:"globals.html#index_d"}, -{text:"e",url:"globals.html#index_e"}, -{text:"f",url:"globals.html#index_f"}, -{text:"h",url:"globals.html#index_h"}, -{text:"l",url:"globals.html#index_l"}, -{text:"m",url:"globals.html#index_m"}, -{text:"n",url:"globals.html#index_n"}, -{text:"p",url:"globals.html#index_p"}, -{text:"r",url:"globals.html#index_r"}, -{text:"s",url:"globals.html#index_s"}, -{text:"t",url:"globals.html#index_t"}, -{text:"w",url:"globals.html#index_w"}, -{text:"x",url:"globals.html#index_x"}]}, -{text:"Variables",url:"globals_vars.html"}, -{text:"Enumerations",url:"globals_enum.html"}, -{text:"Enumerator",url:"globals_eval.html"}, -{text:"Macros",url:"globals_defs.html",children:[ -{text:"_",url:"globals_defs.html#index__5F"}, -{text:"a",url:"globals_defs.html#index_a"}, -{text:"d",url:"globals_defs.html#index_d"}, -{text:"e",url:"globals_defs.html#index_e"}, -{text:"f",url:"globals_defs.html#index_f"}, -{text:"h",url:"globals_defs.html#index_h"}, -{text:"m",url:"globals_defs.html#index_m"}, -{text:"n",url:"globals_defs.html#index_n"}, -{text:"p",url:"globals_defs.html#index_p"}, -{text:"r",url:"globals_defs.html#index_r"}, -{text:"s",url:"globals_defs.html#index_s"}, -{text:"t",url:"globals_defs.html#index_t"}, -{text:"x",url:"globals_defs.html#index_x"}]}]}]}]} diff --git a/docs/html/nav_f.png b/docs/html/nav_f.png deleted file mode 100644 index 72a58a5..0000000 Binary files a/docs/html/nav_f.png and /dev/null differ diff --git a/docs/html/nav_g.png b/docs/html/nav_g.png deleted file mode 100644 index 2093a23..0000000 Binary files a/docs/html/nav_g.png and /dev/null differ diff --git a/docs/html/nav_h.png b/docs/html/nav_h.png deleted file mode 100644 index 33389b1..0000000 Binary files a/docs/html/nav_h.png and /dev/null differ diff --git a/docs/html/navtree.css b/docs/html/navtree.css deleted file mode 100644 index 33341a6..0000000 --- a/docs/html/navtree.css +++ /dev/null @@ -1,146 +0,0 @@ -#nav-tree .children_ul { - margin:0; - padding:4px; -} - -#nav-tree ul { - list-style:none outside none; - margin:0px; - padding:0px; -} - -#nav-tree li { - white-space:nowrap; - margin:0px; - padding:0px; -} - -#nav-tree .plus { - margin:0px; -} - -#nav-tree .selected { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -#nav-tree img { - margin:0px; - padding:0px; - border:0px; - vertical-align: middle; -} - -#nav-tree a { - text-decoration:none; - padding:0px; - margin:0px; - outline:none; -} - -#nav-tree .label { - margin:0px; - padding:0px; - font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -#nav-tree .label a { - padding:2px; -} - -#nav-tree .selected a { - text-decoration:none; - color:#fff; -} - -#nav-tree .children_ul { - margin:0px; - padding:0px; -} - -#nav-tree .item { - margin:0px; - padding:0px; -} - -#nav-tree { - padding: 0px 0px; - background-color: #FAFAFF; - font-size:14px; - overflow:auto; -} - -#doc-content { - overflow:auto; - display:block; - padding:0px; - margin:0px; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#side-nav { - padding:0 6px 0 0; - margin: 0px; - display:block; - position: absolute; - left: 0px; - width: 250px; -} - -.ui-resizable .ui-resizable-handle { - display:block; -} - -.ui-resizable-e { - background-image:url("splitbar.png"); - background-size:100%; - background-repeat:repeat-y; - background-attachment: scroll; - cursor:ew-resize; - height:100%; - right:0; - top:0; - width:6px; -} - -.ui-resizable-handle { - display:none; - font-size:0.1px; - position:absolute; - z-index:1; -} - -#nav-tree-contents { - margin: 6px 0px 0px 0px; -} - -#nav-tree { - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#nav-sync { - position:absolute; - top:5px; - right:24px; - z-index:0; -} - -#nav-sync img { - opacity:0.3; -} - -#nav-sync img:hover { - opacity:0.9; -} - -@media print -{ - #nav-tree { display: none; } - div.ui-resizable-handle { display: none; position: relative; } -} - diff --git a/docs/html/navtree.js b/docs/html/navtree.js deleted file mode 100644 index edc31ef..0000000 --- a/docs/html/navtree.js +++ /dev/null @@ -1,544 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2019 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License as - published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -var navTreeSubIndices = new Array(); -var arrowDown = '▼'; -var arrowRight = '►'; - -function getData(varName) -{ - var i = varName.lastIndexOf('/'); - var n = i>=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/\-/g,'_')); -} - -function stripPath(uri) -{ - return uri.substring(uri.lastIndexOf('/')+1); -} - -function stripPath2(uri) -{ - var i = uri.lastIndexOf('/'); - var s = uri.substring(i+1); - var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; -} - -function hashValue() -{ - return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); -} - -function hashUrl() -{ - return '#'+hashValue(); -} - -function pathName() -{ - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); -} - -function localStorageSupported() -{ - try { - return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; - } - catch(e) { - return false; - } -} - -function storeLink(link) -{ - if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { - window.localStorage.setItem('navpath',link); - } -} - -function deleteLink() -{ - if (localStorageSupported()) { - window.localStorage.setItem('navpath',''); - } -} - -function cachedLink() -{ - if (localStorageSupported()) { - return window.localStorage.getItem('navpath'); - } else { - return ''; - } -} - -function getScript(scriptName,func,show) -{ - var head = document.getElementsByTagName("head")[0]; - var script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - head.appendChild(script); -} - -function createIndent(o,domNode,node,level) -{ - var level=-1; - var n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - var imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=arrowRight; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=arrowRight; - node.expanded = false; - } else { - expandNode(o, node, false, false); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - var span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } -} - -var animationInProgress = false; - -function gotoAnchor(anchor,aname,updateLocation) -{ - var pos, docContent = $('#doc-content'); - var ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || - ancParent.hasClass('memtitle') || - ancParent.hasClass('fieldname') || - ancParent.hasClass('fieldtype') || - ancParent.is(':header')) - { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; - } - if (pos) { - var dist = Math.abs(Math.min( - pos-docContent.offset().top, - docContent[0].scrollHeight- - docContent.height()-docContent.scrollTop())); - animationInProgress=true; - docContent.animate({ - scrollTop: pos + docContent.scrollTop() - docContent.offset().top - },Math.max(50,Math.min(500,dist)),function(){ - if (updateLocation) window.location.href=aname; - animationInProgress=false; - }); - } -} - -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - node.expanded = false; - a.appendChild(node.label); - if (link) { - var url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; - } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - var aname = '#'+link.split('#')[1]; - var srcPage = stripPath(pathName()); - var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; - a.onclick = function(){ - storeLink(link); - if (!$(a).parent().parent().hasClass('selected')) - { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - $(a).parent().parent().addClass('selected'); - $(a).parent().parent().attr('id','selected'); - } - var anchor = $(aname); - gotoAnchor(anchor,aname,true); - }; - } else { - a.href = url; - a.onclick = function() { storeLink(link); } - } - } else { - if (childrenData != null) - { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - } - } - - node.childrenUL = null; - node.getChildrenUL = function() { - if (!node.childrenUL) { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - (function (){ // retry until we can scroll to the selected item - try { - var navtree=$('#nav-tree'); - navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); -} - -function expandNode(o, node, imm, showRoot) -{ - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - expandNode(o, node, imm, showRoot); - }, showRoot); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).slideDown("fast"); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - } - } -} - -function glowEffect(n,duration) -{ - n.addClass('glow').delay(duration).queue(function(next){ - $(this).removeClass('glow');next(); - }); -} - -function highlightAnchor() -{ - var aname = hashUrl(); - var anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft'){ - var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname'){ - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype'){ - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member - } -} - -function selectAndHighlight(hash,n) -{ - var a; - if (hash) { - var link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); - } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - $('#nav-sync').css('top','30px'); - } else { - $('#nav-sync').css('top','5px'); - } - showRoot(); -} - -function showNode(o, node, index, hash) -{ - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - showNode(o,node,index,hash); - },true); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - var n = node.children[o.breadcrumbs[index]]; - if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); - else hash=''; - } - if (hash.match(/^#l\d+$/)) { - var anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors - } - var url=root+hash; - var i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function(){ - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - },true); - } -} - -function showSyncOff(n,relpath) -{ - n.html(''); -} - -function showSyncOn(n,relpath) -{ - n.html(''); -} - -function toggleSyncButton(relpath) -{ - var navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); - showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); - } else { - navSync.addClass('sync'); - showSyncOn(navSync,relpath); - deleteLink(); - } -} - -var loadTriggered = false; -var readyTriggered = false; -var loadObject,loadToRoot,loadUrl,loadRelPath; - -$(window).on('load',function(){ - if (readyTriggered) { // ready first - navTo(loadObject,loadToRoot,loadUrl,loadRelPath); - showRoot(); - } - loadTriggered=true; -}); - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - o.node.expanded = false; - o.node.isLast = true; - o.node.plus_img = document.createElement("span"); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = arrowRight; - - if (localStorageSupported()) { - var navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); - navSync.removeClass('sync'); - } else { - showSyncOn(navSync,relpath); - } - navSync.click(function(){ toggleSyncButton(relpath); }); - } - - if (loadTriggered) { // load before ready - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - } else { // ready before load - loadObject = o; - loadToRoot = toroot; - loadUrl = hashUrl(); - loadRelPath = relpath; - readyTriggered=true; - } - - $(window).bind('hashchange', function(){ - if (window.location.hash && window.location.hash.length>1){ - var a; - if ($(location).attr('hash')){ - var clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/ - - - - - - -ESP3D Lib: src/nofile.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    nofile.h File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Macros

    #define PAGE_NOFILES_SIZE   4862
     
    - - - -

    -Variables

    const char PAGE_NOFILES[] PROGMEM
     
    -

    Macro Definition Documentation

    - -

    ◆ PAGE_NOFILES_SIZE

    - -
    -
    - - - - -
    #define PAGE_NOFILES_SIZE   4862
    -
    - -

    Definition at line 23 of file nofile.h.

    - -
    -
    -

    Variable Documentation

    - -

    ◆ PROGMEM

    - -
    -
    - - - - -
    const char PAGE_NOFILES [] PROGMEM
    -
    - -

    Definition at line 24 of file nofile.h.

    - -
    -
    -
    -
    - - - - diff --git a/docs/html/nofile_8h.js b/docs/html/nofile_8h.js deleted file mode 100644 index 100d584..0000000 --- a/docs/html/nofile_8h.js +++ /dev/null @@ -1,5 +0,0 @@ -var nofile_8h = -[ - [ "PAGE_NOFILES_SIZE", "nofile_8h.html#af1ab057626205fe1d5dae5474f4774aa", null ], - [ "PROGMEM", "nofile_8h.html#a4bb34006af954f26383a423ffe5b887f", null ] -]; \ No newline at end of file diff --git a/docs/html/nofile_8h_source.html b/docs/html/nofile_8h_source.html deleted file mode 100644 index d857887..0000000 --- a/docs/html/nofile_8h_source.html +++ /dev/null @@ -1,433 +0,0 @@ - - - - - - - -ESP3D Lib: src/nofile.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    nofile.h
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  nofile.h - ESP3D data file
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 //data generated by https://github.com/AraHaan/bin2c
    -
    22 //bin2c Conversion Tool v0.14.0 - Windows - [FINAL].
    -
    23 #define PAGE_NOFILES_SIZE 4862
    -
    24 const char PAGE_NOFILES [] PROGMEM = {
    -
    25  0x1F, 0x8B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xED, 0x5C, 0x7D, 0x93, 0xDA, 0x46,
    -
    26  0x93, 0xFF, 0x2A, 0xB2, 0x52, 0x36, 0x70, 0x2B, 0x40, 0x12, 0xAF, 0x8B, 0x16, 0xF2, 0x24, 0xB1,
    -
    27  0x7D, 0xF1, 0x95, 0x13, 0xBB, 0xBC, 0xEB, 0x7B, 0xAE, 0x2A, 0x4E, 0xB9, 0x84, 0x34, 0x80, 0xCE,
    -
    28  0x42, 0xD2, 0x49, 0xC3, 0xEE, 0x62, 0xC2, 0x77, 0xBF, 0xEE, 0x79, 0x91, 0x46, 0x42, 0xB0, 0xEC,
    -
    29  0x26, 0x79, 0xF2, 0xFC, 0x91, 0x60, 0x23, 0x98, 0x99, 0xEE, 0xE9, 0xE9, 0xE9, 0xFE, 0x75, 0x4F,
    -
    30  0x0F, 0xCE, 0xD5, 0x8A, 0xAE, 0xC3, 0xD9, 0xD5, 0x8A, 0xB8, 0xFE, 0xEC, 0x2A, 0xA3, 0xDB, 0x90,
    -
    31  0xCC, 0xB0, 0x65, 0xB7, 0x88, 0x23, 0xDA, 0x5E, 0xB8, 0xEB, 0x20, 0xDC, 0x4E, 0x32, 0x37, 0xCA,
    -
    32  0xDA, 0x19, 0x49, 0x83, 0x85, 0xD3, 0x5E, 0x67, 0x6D, 0x4A, 0xEE, 0x69, 0x3B, 0x0B, 0xBE, 0x92,
    -
    33  0xB6, 0xEB, 0xFF, 0xEF, 0x26, 0xA3, 0x13, 0xCB, 0x34, 0x9F, 0x3B, 0xED, 0x3B, 0x32, 0xFF, 0x12,
    -
    34  0xD0, 0x23, 0xBD, 0x8C, 0x1D, 0xB6, 0xC2, 0xD7, 0xE4, 0x7E, 0x3F, 0x8F, 0xFD, 0x6D, 0x69, 0x0A,
    -
    35  0xFD, 0x47, 0x12, 0xDE, 0x12, 0x1A, 0x78, 0xAE, 0xF6, 0x33, 0xD9, 0x10, 0xDD, 0xC8, 0xBF, 0x1B,
    -
    36  0xDF, 0xA5, 0x81, 0x1B, 0x1A, 0x8A, 0x0C, 0x0A, 0xAF, 0x7E, 0x72, 0xEF, 0x84, 0x41, 0x44, 0xDA,
    -
    37  0x2B, 0x12, 0x2C, 0x57, 0x30, 0x57, 0xA7, 0x6F, 0x8F, 0x07, 0x23, 0xAB, 0xDF, 0x73, 0xBC, 0x38,
    -
    38  0x8C, 0xD3, 0xC9, 0x37, 0xBD, 0x5E, 0xCF, 0x99, 0xBB, 0xDE, 0x97, 0x65, 0x1A, 0x6F, 0x22, 0xBF,
    -
    39  0x2D, 0x5A, 0x17, 0x8B, 0xC5, 0xBE, 0xE3, 0x01, 0x1F, 0x17, 0x88, 0xD3, 0xDD, 0xDA, 0x4D, 0x97,
    -
    40  0x41, 0xD4, 0x4E, 0x19, 0x0F, 0x77, 0x43, 0x63, 0x47, 0xB4, 0x84, 0x64, 0x21, 0x1A, 0x12, 0xD7,
    -
    41  0xF7, 0x83, 0x68, 0xC9, 0x5B, 0xAC, 0x01, 0xCC, 0x2B, 0x5B, 0x38, 0x15, 0x36, 0xED, 0xA9, 0x3B,
    -
    42  0x0F, 0xC9, 0x6E, 0x1E, 0xA7, 0x3E, 0x49, 0x27, 0xA6, 0xC3, 0x3F, 0xB4, 0xB3, 0xC4, 0xF5, 0x60,
    -
    43  0x20, 0x34, 0xAC, 0xDD, 0xFB, 0xF6, 0x5D, 0xE0, 0xD3, 0x15, 0x53, 0xCA, 0xBE, 0xC3, 0xC6, 0xB7,
    -
    44  0xF9, 0x30, 0xE2, 0xEF, 0x8A, 0x2E, 0x41, 0x3A, 0xB1, 0x92, 0x7B, 0x2D, 0x8B, 0xC3, 0xC0, 0xD7,
    -
    45  0xBE, 0xF1, 0x7D, 0x5F, 0x4A, 0x35, 0x8F, 0x29, 0x8D, 0xD7, 0x13, 0x1B, 0x35, 0x49, 0x81, 0x6C,
    -
    46  0x15, 0x50, 0xC2, 0x66, 0x21, 0x93, 0x28, 0xBE, 0x4B, 0xDD, 0x44, 0xCA, 0x36, 0xB1, 0xD7, 0xEB,
    -
    47  0x3D, 0x5D, 0xED, 0xD8, 0x9E, 0xB8, 0x61, 0xB0, 0x8C, 0x26, 0x28, 0xBF, 0x98, 0x78, 0x46, 0x71,
    -
    48  0x1B, 0x66, 0x34, 0x9D, 0x51, 0xDF, 0x38, 0x68, 0x5A, 0xE5, 0x4D, 0xCC, 0x36, 0xCA, 0xA3, 0xF2,
    -
    49  0xA6, 0xD5, 0x4E, 0x4E, 0x35, 0x3E, 0xBE, 0x15, 0xB7, 0x24, 0xC5, 0x9D, 0x0C, 0x85, 0x08, 0x34,
    -
    50  0x4E, 0xA4, 0x6A, 0xE0, 0x63, 0x65, 0x8D, 0x55, 0xA5, 0xD4, 0x08, 0x59, 0xD7, 0xB7, 0x3A, 0xEC,
    -
    51  0x3B, 0x10, 0xBB, 0xAE, 0x6F, 0xB5, 0xAB, 0xD5, 0xF4, 0xA1, 0x14, 0x8F, 0xE2, 0x26, 0x76, 0x48,
    -
    52  0xEC, 0xB5, 0x0D, 0xDB, 0x24, 0x68, 0x32, 0x9A, 0x06, 0x89, 0x22, 0xF8, 0x24, 0xA2, 0xAB, 0x76,
    -
    53  0xBC, 0x68, 0xD3, 0x6D, 0x42, 0x9A, 0xB1, 0xEF, 0xB7, 0x76, 0x35, 0xB6, 0x7A, 0x89, 0xAF, 0xFD,
    -
    54  0x3F, 0xD6, 0xC4, 0x0F, 0x5C, 0xAD, 0xB9, 0x06, 0x03, 0xE0, 0x7C, 0x47, 0x43, 0xD0, 0x79, 0x6B,
    -
    55  0xA7, 0xD8, 0xB1, 0x68, 0x1F, 0xA0, 0x61, 0xD4, 0x10, 0x5C, 0x5E, 0xDA, 0xB5, 0x04, 0x97, 0xA3,
    -
    56  0x23, 0x04, 0x96, 0x6D, 0x9A, 0xB5, 0x14, 0x96, 0xC5, 0x49, 0x3A, 0x91, 0x7B, 0xAB, 0x9A, 0xAD,
    -
    57  0x10, 0xD9, 0xF3, 0xBC, 0x8A, 0xC3, 0x98, 0x55, 0x77, 0x31, 0xC1, 0x58, 0x32, 0x70, 0x63, 0x44,
    -
    58  0x1C, 0xB0, 0xDA, 0x88, 0xD4, 0x78, 0x29, 0xF3, 0x5D, 0xAE, 0xD0, 0xD4, 0xF5, 0x83, 0x4D, 0x36,
    -
    59  0x19, 0x82, 0x91, 0xD5, 0x38, 0x81, 0xBB, 0x4B, 0xE2, 0x2C, 0xA0, 0x41, 0x1C, 0x4D, 0x52, 0x12,
    -
    60  0xBA, 0x34, 0xB8, 0x25, 0x8E, 0x1F, 0x64, 0x49, 0xE8, 0x6E, 0x27, 0xF3, 0x30, 0xF6, 0xBE, 0xE4,
    -
    61  0x0E, 0x81, 0xE8, 0xA3, 0x31, 0xF7, 0x65, 0x3E, 0xE1, 0x13, 0x2F, 0x4E, 0x5D, 0x46, 0xC8, 0x64,
    -
    62  0x28, 0xE4, 0xDF, 0x77, 0x5C, 0x0F, 0xF9, 0xEC, 0x0A, 0xC4, 0xA8, 0x91, 0xD0, 0x34, 0x4D, 0x39,
    -
    63  0x50, 0x73, 0x0D, 0x77, 0xB2, 0x88, 0xBD, 0x4D, 0x06, 0xCF, 0x55, 0x0C, 0x36, 0xBF, 0x53, 0xC1,
    -
    64  0x26, 0x71, 0x23, 0x12, 0xEE, 0x0E, 0x65, 0xAF, 0x07, 0xA7, 0x23, 0xFE, 0x5F, 0x56, 0x06, 0x82,
    -
    65  0x9F, 0x44, 0xDD, 0x79, 0x7C, 0xDF, 0xCE, 0x56, 0xAE, 0x1F, 0xDF, 0x4D, 0x4C, 0x0D, 0xA9, 0xF0,
    -
    66  0x6F, 0xBA, 0x9C, 0xBB, 0x4D, 0xD3, 0xC0, 0x57, 0xC7, 0x1C, 0xB4, 0x9C, 0x73, 0x06, 0x09, 0x49,
    -
    67  0xDB, 0x0C, 0xA1, 0x73, 0xAD, 0x21, 0xB8, 0x89, 0x0E, 0x34, 0x76, 0x68, 0xDB, 0x1D, 0x6A, 0xF4,
    -
    68  0x34, 0xE2, 0x0E, 0xF0, 0x25, 0x57, 0x20, 0x1A, 0x95, 0x35, 0x01, 0x12, 0x70, 0xD3, 0x90, 0xAB,
    -
    69  0xEB, 0xA1, 0x6E, 0x8A, 0x3E, 0x34, 0xA3, 0x9A, 0x2E, 0xA1, 0xC9, 0x8A, 0xF7, 0x86, 0xEE, 0x1C,
    -
    70  0x94, 0x2D, 0x2D, 0x20, 0x88, 0x18, 0x2E, 0x71, 0x43, 0x28, 0x43, 0x70, 0xC5, 0x98, 0x70, 0x15,
    -
    71  0x2C, 0xBA, 0xDC, 0x71, 0x0C, 0x1B, 0xE1, 0xF6, 0x32, 0x43, 0x09, 0xA2, 0x45, 0x2C, 0xF7, 0xB3,
    -
    72  0x07, 0xC6, 0x3F, 0x86, 0x2D, 0x5D, 0xC4, 0xE9, 0xBA, 0x8D, 0x9E, 0x91, 0xC6, 0xC5, 0x64, 0x7C,
    -
    73  0x16, 0x3E, 0x03, 0x0B, 0x1C, 0x02, 0x0E, 0x7B, 0xFD, 0x22, 0x64, 0xA0, 0x19, 0x6B, 0x96, 0x2D,
    -
    74  0x27, 0x3B, 0x37, 0x94, 0x0D, 0x06, 0x83, 0x63, 0xD6, 0x52, 0xB4, 0x06, 0x6B, 0x77, 0x29, 0x1D,
    -
    75  0xEA, 0xC0, 0x86, 0xD0, 0x2F, 0xCF, 0xB2, 0xA1, 0x20, 0xCA, 0x08, 0xD5, 0x8E, 0x18, 0xC9, 0xA8,
    -
    76  0x6C, 0x4A, 0x0F, 0x8E, 0x6D, 0xC7, 0x6D, 0x9A, 0x42, 0xF8, 0xE6, 0x0E, 0xAA, 0x5A, 0x80, 0x46,
    -
    77  0xDC, 0x8C, 0x80, 0x6E, 0xDB, 0xF1, 0x86, 0x6A, 0x1D, 0x6B, 0x90, 0x19, 0x05, 0xDF, 0x83, 0xBE,
    -
    78  0xB2, 0xC2, 0xB9, 0xAB, 0xED, 0xCA, 0xF6, 0x34, 0x1C, 0xBA, 0x0B, 0x72, 0xE9, 0x00, 0x05, 0x6A,
    -
    79  0x12, 0x02, 0xEE, 0x13, 0x96, 0x66, 0x98, 0xD0, 0x39, 0x96, 0x1D, 0x96, 0x69, 0x1B, 0xD6, 0x68,
    -
    80  0x60, 0xD8, 0xBD, 0x9E, 0xD1, 0x19, 0xB6, 0x84, 0x0C, 0xA8, 0xEB, 0xA4, 0xE2, 0xCC, 0xDC, 0x47,
    -
    81  0xE6, 0x34, 0x3A, 0x66, 0x77, 0xEA, 0x60, 0xB3, 0x64, 0x66, 0x7D, 0xD3, 0x74, 0x94, 0x10, 0xED,
    -
    82  0x91, 0x88, 0x92, 0xB4, 0x1A, 0x35, 0xD7, 0x81, 0xEF, 0x87, 0x84, 0x27, 0x60, 0xF1, 0xC6, 0x5B,
    -
    83  0xB5, 0x11, 0x76, 0x40, 0x9F, 0x6B, 0x37, 0x0A, 0x92, 0x4D, 0xC8, 0x40, 0xCC, 0x39, 0xDE, 0xE3,
    -
    84  0x6D, 0xD2, 0x0C, 0x54, 0x94, 0xC4, 0x01, 0x63, 0x7E, 0xA6, 0xC5, 0xB0, 0x7D, 0x4B, 0xDC, 0x14,
    -
    85  0x24, 0x72, 0x4E, 0xA4, 0x19, 0x8F, 0xB4, 0xE7, 0x1A, 0x13, 0x5C, 0xC7, 0x5F, 0xDB, 0x9B, 0x0C,
    -
    86  0x93, 0x25, 0x12, 0x12, 0x8F, 0x72, 0x71, 0x70, 0xAD, 0x07, 0x8D, 0xD5, 0x06, 0xA6, 0xF3, 0x76,
    -
    87  0x92, 0xC2, 0x32, 0xD2, 0xED, 0x69, 0xB4, 0xEE, 0xF5, 0x46, 0xEE, 0x7C, 0x54, 0xC1, 0x20, 0x9B,
    -
    88  0x0C, 0x7D, 0xB7, 0x5F, 0xE2, 0x22, 0x10, 0xDD, 0x28, 0xB5, 0x71, 0x68, 0x2F, 0x35, 0x31, 0x94,
    -
    89  0x2F, 0x35, 0x4D, 0x6A, 0x28, 0x27, 0x87, 0x94, 0x07, 0xF1, 0xA1, 0x46, 0x58, 0x7B, 0x3C, 0x34,
    -
    90  0x2F, 0xCD, 0x8A, 0xB0, 0x96, 0x6D, 0xCF, 0xFB, 0xE6, 0xDE, 0x73, 0x13, 0xDC, 0x54, 0x89, 0xC1,
    -
    91  0x2C, 0x8D, 0x1A, 0x2B, 0x29, 0xA9, 0xB0, 0xB2, 0x71, 0x01, 0xCA, 0xA3, 0xD1, 0xC8, 0x39, 0xC8,
    -
    92  0x02, 0xDD, 0x10, 0x4C, 0xAC, 0x04, 0xF2, 0x35, 0xC1, 0xF5, 0xB4, 0x51, 0x1C, 0x6C, 0xA5, 0xE0,
    -
    93  0xDA, 0xCE, 0x36, 0x9E, 0x47, 0xB2, 0xAC, 0x26, 0x9F, 0xF1, 0x17, 0x0B, 0xD3, 0x1F, 0x57, 0x23,
    -
    94  0xC1, 0x90, 0x5C, 0x7A, 0xC3, 0x3C, 0x84, 0x78, 0xA3, 0x61, 0xCF, 0x97, 0xAC, 0x7C, 0x37, 0x5A,
    -
    95  0x82, 0xB6, 0x6A, 0xA0, 0xCF, 0xF6, 0x89, 0x4F, 0x2A, 0x9C, 0xC8, 0xDC, 0xF3, 0x7C, 0x4B, 0x72,
    -
    96  0x72, 0x2F, 0xFB, 0xFD, 0xBE, 0xBD, 0xEF, 0xAC, 0xDC, 0xAC, 0x4D, 0xD2, 0x14, 0x20, 0xA7, 0x0C,
    -
    97  0xDB, 0x65, 0x5A, 0x3E, 0xFA, 0xCF, 0x06, 0xC4, 0xA3, 0xD2, 0xD4, 0x62, 0xDA, 0xB8, 0xDF, 0x1B,
    -
    98  0xF4, 0xFA, 0x4F, 0x46, 0x32, 0x74, 0xCD, 0x6F, 0x3C, 0x32, 0xEE, 0x8F, 0x7B, 0x8F, 0x91, 0xB1,
    -
    99  0x4A, 0x5B, 0x92, 0x59, 0x88, 0xDB, 0xE6, 0x61, 0xB6, 0x46, 0xD3, 0x62, 0xF3, 0x4F, 0xEA, 0x9A,
    -
    100  0xEF, 0xF1, 0xBF, 0x46, 0xD7, 0xB5, 0xF2, 0xD4, 0x6A, 0xDB, 0x9E, 0x0F, 0xFA, 0xB6, 0xF7, 0xFB,
    -
    101  0xB4, 0x3D, 0x1C, 0xCD, 0xAD, 0xE1, 0xF8, 0x69, 0xDA, 0xE6, 0xB4, 0x15, 0xA9, 0x6B, 0xF5, 0x2D,
    -
    102  0x7D, 0x04, 0x61, 0x45, 0x78, 0xC8, 0x49, 0x3C, 0xF1, 0x2F, 0xC1, 0x8C, 0x16, 0x55, 0xB7, 0xEB,
    -
    103  0xF7, 0x16, 0x3D, 0x57, 0x65, 0x52, 0xC2, 0x3E, 0xD1, 0xA4, 0x00, 0x98, 0x68, 0x51, 0x90, 0x8F,
    -
    104  0xB7, 0x4C, 0x0E, 0xC9, 0x26, 0x07, 0x64, 0xE7, 0xC0, 0x9E, 0x77, 0xD9, 0x33, 0x6D, 0xAF, 0x22,
    -
    105  0xE6, 0x68, 0x68, 0x79, 0xD6, 0x25, 0x13, 0x33, 0x58, 0x2F, 0x77, 0x22, 0x96, 0xAD, 0xDC, 0xA8,
    -
    106  0x9A, 0x12, 0x0F, 0xEB, 0xF0, 0x8A, 0x27, 0xE0, 0x9C, 0x56, 0x88, 0x50, 0x83, 0x25, 0x26, 0xBE,
    -
    107  0x2A, 0xF3, 0x9A, 0x20, 0xE2, 0x5F, 0xEE, 0x78, 0x20, 0x38, 0x93, 0xF4, 0xF4, 0xCA, 0x7B, 0xA6,
    -
    108  0x48, 0x3F, 0xE4, 0xD8, 0x87, 0x56, 0xFA, 0xD7, 0xAF, 0x2B, 0x04, 0xD1, 0x20, 0x43, 0xF8, 0x22,
    -
    109  0x0D, 0x82, 0x1D, 0xA6, 0xF2, 0xD6, 0x89, 0xB0, 0xB1, 0x45, 0x10, 0x12, 0xF6, 0x9D, 0xBB, 0x6B,
    -
    110  0x3E, 0xF6, 0xB2, 0x0F, 0xBB, 0x1A, 0x44, 0xC9, 0x86, 0xFE, 0x82, 0xA7, 0xE7, 0x29, 0x8E, 0xFB,
    -
    111  0x75, 0x32, 0x91, 0xCB, 0xC2, 0xAF, 0xED, 0x4D, 0x12, 0xC6, 0xAE, 0xDF, 0x9E, 0x6F, 0x20, 0x9A,
    -
    112  0xFD, 0x9D, 0x97, 0xFD, 0x6B, 0xF3, 0x32, 0xE7, 0xA4, 0x9B, 0x0F, 0xE6, 0x9E, 0x79, 0x10, 0xBA,
    -
    113  0xFB, 0xC3, 0xF9, 0xD8, 0x77, 0x1F, 0xB5, 0xA9, 0xC2, 0x2A, 0xFE, 0xDE, 0xDA, 0x7F, 0x9F, 0xAD,
    -
    114  0xED, 0x59, 0x73, 0xD3, 0xAF, 0x9E, 0xF4, 0xAD, 0xF9, 0xD0, 0x1F, 0x0F, 0x1E, 0xB7, 0xB5, 0x1C,
    -
    115  0xC0, 0xFE, 0xDE, 0xDA, 0x7F, 0xF3, 0xAD, 0xB5, 0x87, 0x97, 0xEE, 0xDC, 0xDB, 0xE7, 0x40, 0x5D,
    -
    116  0x82, 0xF3, 0x32, 0x7A, 0x2B, 0x68, 0x5E, 0x4A, 0x05, 0x04, 0x9A, 0x8B, 0x0A, 0xD3, 0x22, 0x8E,
    -
    117  0x41, 0xA9, 0x27, 0x0A, 0x4C, 0xAC, 0xFE, 0xF2, 0xB4, 0x1A, 0xD3, 0x41, 0x9D, 0x17, 0x0D, 0x0E,
    -
    118  0xC3, 0x24, 0xDF, 0xAB, 0xBE, 0x92, 0x34, 0xF4, 0xF0, 0xA5, 0x92, 0x2A, 0x9D, 0xBD, 0xFE, 0xE5,
    -
    119  0xD8, 0x9F, 0x57, 0x54, 0x3F, 0x30, 0x9F, 0x3B, 0xB2, 0x6E, 0x0A, 0xD2, 0xCA, 0x9D, 0xC2, 0xCF,
    -
    120  0x60, 0x3B, 0x6B, 0x5E, 0x66, 0xCC, 0x92, 0x20, 0xD2, 0xEC, 0x4C, 0xC3, 0xCD, 0x74, 0x53, 0x2D,
    -
    121  0x88, 0x16, 0x41, 0x04, 0x96, 0xB0, 0xFF, 0xC7, 0x17, 0xB2, 0x5D, 0xA4, 0xEE, 0x9A, 0x64, 0x1A,
    -
    122  0x0E, 0xD9, 0x99, 0xCF, 0x77, 0xCC, 0x5C, 0x30, 0x63, 0x9D, 0xA4, 0x31, 0x75, 0x29, 0x69, 0x9A,
    -
    123  0xAD, 0x3D, 0x16, 0xAD, 0x0E, 0x3B, 0x7A, 0x43, 0x00, 0xD3, 0x65, 0x6B, 0xFF, 0x97, 0x68, 0x70,
    -
    124  0x1D, 0xFB, 0x6E, 0x51, 0xFF, 0x62, 0x46, 0x94, 0x57, 0x63, 0x17, 0xC1, 0x3D, 0xF1, 0x9D, 0xAF,
    -
    125  0xED, 0x20, 0xF2, 0xC9, 0x3D, 0x56, 0xDC, 0xCC, 0xA2, 0x10, 0xCC, 0x78, 0x61, 0x7D, 0xD9, 0x61,
    -
    126  0x25, 0x62, 0x70, 0x5A, 0x68, 0x30, 0x1D, 0xA5, 0x38, 0x27, 0x35, 0x88, 0x9F, 0xD1, 0x5C, 0x16,
    -
    127  0x21, 0x24, 0x1A, 0xAC, 0xA8, 0x56, 0x5B, 0x89, 0x3D, 0x6C, 0x55, 0x93, 0x90, 0x7E, 0x4B, 0x88,
    -
    128  0xCA, 0xF2, 0x7F, 0x70, 0xC1, 0x5D, 0xB1, 0xA6, 0x52, 0x75, 0xD1, 0x32, 0xCB, 0x95, 0xC7, 0x52,
    -
    129  0x55, 0x52, 0xED, 0x14, 0x45, 0xFE, 0x63, 0xB4, 0xA2, 0xFB, 0x18, 0x39, 0x5E, 0x0B, 0xE4, 0xE6,
    -
    130  0x24, 0x0B, 0x13, 0x4A, 0x7D, 0x16, 0x4B, 0x50, 0x16, 0x42, 0x81, 0x59, 0xCA, 0xA5, 0xEC, 0x96,
    -
    131  0x73, 0x58, 0xEB, 0xE6, 0x70, 0x58, 0xBA, 0xA8, 0x9A, 0xD4, 0xA8, 0xE3, 0x9B, 0x05, 0xC1, 0x97,
    -
    132  0xD4, 0x03, 0x56, 0x72, 0x15, 0x2B, 0xB1, 0xC5, 0x84, 0x4E, 0x9E, 0xFC, 0xE2, 0xAB, 0x8E, 0x8B,
    -
    133  0x8D, 0xAF, 0x63, 0xC5, 0xD9, 0x47, 0xAA, 0xAF, 0x54, 0x9E, 0x5C, 0xE0, 0x4B, 0x8A, 0x57, 0xAE,
    -
    134  0x40, 0x9B, 0x42, 0x3A, 0xD9, 0x5B, 0x35, 0xF1, 0xA1, 0x94, 0x5E, 0x18, 0x4D, 0xBF, 0x33, 0x20,
    -
    135  0xEB, 0xC7, 0x2F, 0xE5, 0x50, 0x9C, 0xDF, 0xB9, 0xDB, 0x27, 0xEE, 0x6D, 0xCA, 0xD6, 0xC8, 0xFB,
    -
    136  0x06, 0x63, 0xF5, 0x2A, 0x26, 0xF3, 0x52, 0x42, 0x22, 0x0D, 0xB2, 0x7D, 0xA0, 0xCF, 0x0B, 0xD7,
    -
    137  0xA3, 0xE1, 0xE8, 0x28, 0x3D, 0xBB, 0x57, 0xDC, 0x5F, 0x75, 0xF9, 0x4D, 0xEE, 0x55, 0x97, 0xDF,
    -
    138  0xEB, 0xB2, 0xDB, 0xA6, 0x2B, 0x3F, 0xB8, 0xD5, 0x58, 0xFB, 0x54, 0xCF, 0x4D, 0xC8, 0x9D, 0xC3,
    -
    139  0x62, 0x37, 0x94, 0x08, 0xE7, 0xE3, 0x97, 0x33, 0xA6, 0x3E, 0xFB, 0x6F, 0xAB, 0x63, 0x6B, 0x2F,
    -
    140  0xA2, 0x79, 0x96, 0x38, 0xFC, 0xFD, 0xAA, 0x0B, 0xE4, 0xB3, 0x2B, 0x1E, 0x4D, 0x67, 0x57, 0x2B,
    -
    141  0x7B, 0xF6, 0x86, 0x6A, 0x19, 0x21, 0xEB, 0x4C, 0xDB, 0xC6, 0x1B, 0xCD, 0x8F, 0xB5, 0x28, 0xA6,
    -
    142  0xDA, 0xCA, 0xC5, 0x8B, 0x90, 0x68, 0xAB, 0x31, 0x87, 0xEF, 0xE0, 0x4D, 0xB2, 0x16, 0x91, 0x80,
    -
    143  0xAE, 0x48, 0xAA, 0x34, 0x75, 0x96, 0x5F, 0x0D, 0x2D, 0x09, 0xB1, 0xC0, 0xAB, 0xF1, 0x90, 0xAF,
    -
    144  0x05, 0x54, 0x8B, 0x53, 0xF8, 0xE2, 0x03, 0x9C, 0x21, 0xC3, 0x54, 0x5B, 0x04, 0xE9, 0xFA, 0x0E,
    -
    145  0x62, 0xA5, 0x16, 0x2C, 0x80, 0x05, 0x1E, 0x84, 0xB1, 0xE4, 0x06, 0x2B, 0xB2, 0x67, 0x38, 0xA1,
    -
    146  0xE7, 0x46, 0x30, 0x04, 0x14, 0x03, 0x78, 0xA3, 0x01, 0x7B, 0xA2, 0x4D, 0xB4, 0x2B, 0x57, 0xF3,
    -
    147  0x42, 0x37, 0xCB, 0xA6, 0x7A, 0x7E, 0x8A, 0xD0, 0xB5, 0x55, 0x4A, 0x16, 0x53, 0x7D, 0x45, 0x69,
    -
    148  0x92, 0x4D, 0xBA, 0xDD, 0x25, 0xC8, 0xB2, 0x99, 0xC3, 0x89, 0x7A, 0xDD, 0x0D, 0x37, 0x5E, 0x9B,
    -
    149  0x7F, 0xED, 0xBE, 0xBA, 0x7E, 0xDF, 0x7B, 0xD9, 0xFE, 0xE7, 0xAB, 0xEF, 0x3F, 0xBE, 0xD1, 0x67,
    -
    150  0x67, 0x0F, 0xBD, 0xEA, 0xBA, 0xA0, 0x61, 0xA9, 0x11, 0xD4, 0xAE, 0x98, 0x9D, 0x81, 0xB0, 0xAE,
    -
    151  0x05, 0xFE, 0x54, 0xBF, 0x7E, 0xFF, 0xE6, 0xF5, 0xEB, 0x6B, 0xFD, 0xB0, 0x5B, 0xDE, 0xA3, 0xE8,
    -
    152  0xB3, 0xD7, 0xD0, 0xBA, 0xD2, 0x5E, 0x43, 0x60, 0xCC, 0xB6, 0x19, 0x25, 0x6B, 0xA1, 0xE9, 0x03,
    -
    153  0x02, 0xDC, 0x44, 0x60, 0xC4, 0x52, 0x28, 0x8D, 0xA5, 0x50, 0x3A, 0x46, 0x53, 0x3E, 0x0F, 0x4B,
    -
    154  0x9F, 0x78, 0x1C, 0xD7, 0xB5, 0x08, 0xC2, 0xC8, 0x54, 0x5F, 0x6F, 0xB1, 0x31, 0xFB, 0xE5, 0x57,
    -
    155  0x5D, 0x5B, 0x6F, 0x42, 0x1A, 0x24, 0xB8, 0xF1, 0xF2, 0x93, 0x3E, 0xD3, 0x04, 0x27, 0xA9, 0x31,
    -
    156  0x1A, 0x69, 0x4A, 0x85, 0x52, 0x17, 0x33, 0xF0, 0x54, 0x8C, 0xCF, 0x51, 0xCA, 0xCE, 0x74, 0x50,
    -
    157  0xBC, 0x17, 0x06, 0xDE, 0x17, 0x58, 0x23, 0x89, 0x7C, 0x9C, 0xAA, 0xD9, 0x72, 0x74, 0xED, 0xD6,
    -
    158  0x0D, 0x37, 0x40, 0xF7, 0x91, 0x8D, 0xD5, 0x67, 0x25, 0x13, 0x4A, 0xD2, 0x78, 0x99, 0x62, 0x45,
    -
    159  0x43, 0x58, 0xE1, 0x6D, 0x90, 0x05, 0xF3, 0x20, 0x0C, 0xE8, 0x76, 0xB2, 0x82, 0x7C, 0x8C, 0x44,
    -
    160  0x52, 0xF4, 0x24, 0x5D, 0xF2, 0x29, 0xD9, 0x07, 0xB0, 0xFC, 0xA9, 0x0E, 0x86, 0x0D, 0x8B, 0xEF,
    -
    161  0x4A, 0x16, 0x60, 0xD3, 0x29, 0xFF, 0x7B, 0xA0, 0xF7, 0xE3, 0xAA, 0xE3, 0x97, 0xD7, 0x57, 0x14,
    -
    162  0xA8, 0xA8, 0xAF, 0x31, 0x87, 0x99, 0xEA, 0xE6, 0xF3, 0x5C, 0xA9, 0xE7, 0xA9, 0xA2, 0xB4, 0xEE,
    -
    163  0x1F, 0xE2, 0x35, 0x24, 0x86, 0x7E, 0xB3, 0x81, 0xB7, 0x99, 0x0D, 0xA3, 0xE1, 0x86, 0x61, 0x43,
    -
    164  0x51, 0xC3, 0x07, 0xB2, 0x00, 0x69, 0x57, 0x28, 0x39, 0xF5, 0x0F, 0x66, 0x45, 0x39, 0x73, 0x6E,
    -
    165  0x3F, 0xA4, 0x04, 0x6C, 0xDF, 0x0F, 0xD2, 0x66, 0x4B, 0x57, 0x24, 0x81, 0x93, 0x3C, 0x8C, 0xCC,
    -
    166  0x6E, 0x97, 0x92, 0xB2, 0x6F, 0x82, 0x4D, 0x33, 0x8C, 0xE3, 0x9F, 0x6F, 0x03, 0x72, 0xF7, 0x7D,
    -
    167  0x0C, 0x1A, 0xC2, 0x03, 0x76, 0x1F, 0xFF, 0xC0, 0xF8, 0x14, 0xEC, 0x40, 0x83, 0xB6, 0x81, 0xAE,
    -
    168  0x6D, 0x51, 0x77, 0xBA, 0xA4, 0xEE, 0x29, 0xD4, 0x36, 0x7C, 0x4E, 0x61, 0x90, 0x0D, 0x8F, 0x2D,
    -
    169  0x7B, 0xC0, 0x2E, 0x86, 0x53, 0x5D, 0xA4, 0x79, 0x7A, 0xB7, 0xE0, 0x83, 0x43, 0xB7, 0x8C, 0x9D,
    -
    170  0xE0, 0x63, 0x0D, 0x0A, 0x3E, 0xF8, 0xF9, 0x01, 0x3E, 0x98, 0x8F, 0x23, 0x1F, 0x8B, 0x0B, 0x64,
    -
    171  0xC3, 0x23, 0x4F, 0x6E, 0xA1, 0x75, 0x2C, 0xBE, 0xDE, 0x09, 0x8E, 0x63, 0xD8, 0x6C, 0xC1, 0x84,
    -
    172  0xE5, 0xC9, 0xFA, 0xEC, 0x02, 0x14, 0x08, 0x3C, 0x40, 0x8F, 0xA0, 0x8A, 0x99, 0x70, 0x11, 0xA1,
    -
    173  0x53, 0xAE, 0x48, 0x34, 0x17, 0x9E, 0xCC, 0xE5, 0xEA, 0x13, 0x5F, 0x2B, 0xC3, 0xF3, 0x25, 0x98,
    -
    174  0xF9, 0x26, 0x30, 0x53, 0x73, 0xE9, 0x2A, 0xA7, 0xC4, 0xEB, 0x3E, 0x69, 0xBC, 0x2A, 0x75, 0x17,
    -
    175  0x6D, 0xA7, 0x2B, 0xED, 0x08, 0x1F, 0x92, 0x82, 0x7F, 0x29, 0xDD, 0xF2, 0xEB, 0xD2, 0xCE, 0x8B,
    -
    176  0x83, 0x00, 0x1A, 0x21, 0x87, 0x64, 0x66, 0x84, 0x2B, 0xD5, 0x1C, 0x6E, 0xC0, 0xCA, 0x80, 0xF7,
    -
    177  0x0A, 0xDB, 0x67, 0x3F, 0x83, 0x1F, 0xE4, 0x5F, 0xAE, 0x41, 0x4B, 0xF2, 0x4B, 0xC9, 0x80, 0x2A,
    -
    178  0x6D, 0x62, 0x45, 0xAC, 0x55, 0x48, 0x2A, 0x26, 0x43, 0x07, 0xC8, 0x71, 0xE2, 0x33, 0xDA, 0x2A,
    -
    179  0x1B, 0xC7, 0xE3, 0x82, 0x5C, 0xCF, 0x11, 0xDC, 0xE1, 0x91, 0x96, 0xFB, 0x63, 0x06, 0xE9, 0xE6,
    -
    180  0x26, 0x2B, 0x34, 0x7A, 0xF0, 0x7E, 0x8E, 0x37, 0x16, 0xC8, 0x27, 0x21, 0xFE, 0x23, 0xC3, 0xFD,
    -
    181  0x07, 0x80, 0xAF, 0xE4, 0xBD, 0x47, 0x71, 0xF0, 0xEE, 0x28, 0x0A, 0x2A, 0xF6, 0xF2, 0x34, 0xE4,
    -
    182  0x03, 0xDE, 0x07, 0x18, 0xC0, 0x71, 0xEE, 0x10, 0xFD, 0x70, 0x3D, 0xEA, 0x8C, 0x8F, 0x81, 0xBE,
    -
    183  0xC5, 0x5D, 0x0E, 0x7E, 0xF8, 0xB1, 0x1E, 0xFE, 0x72, 0xCE, 0x70, 0x84, 0x8C, 0xD8, 0xF0, 0x75,
    -
    184  0xB6, 0xD4, 0x8F, 0xB3, 0x9F, 0x7D, 0x20, 0xB0, 0x79, 0x70, 0x06, 0x8E, 0x96, 0x79, 0xEC, 0xBD,
    -
    185  0x73, 0x03, 0xDA, 0x81, 0xFF, 0xC0, 0xA9, 0x80, 0x89, 0xC2, 0xCA, 0x83, 0x1C, 0x89, 0x72, 0xCF,
    -
    186  0xE1, 0x3D, 0x87, 0xC6, 0x5F, 0xDD, 0x74, 0xEE, 0x7E, 0x90, 0x85, 0x26, 0x70, 0xFE, 0xCD, 0xFD,
    -
    187  0x88, 0xA5, 0x28, 0x65, 0x1B, 0x28, 0x65, 0x2D, 0x75, 0x5D, 0x3C, 0x2D, 0x85, 0x9E, 0x55, 0x6F,
    -
    188  0xF6, 0x06, 0x44, 0xA7, 0xC1, 0x02, 0x0E, 0xEE, 0x98, 0xAD, 0x40, 0xF0, 0xEF, 0xD5, 0x18, 0x5A,
    -
    189  0x91, 0x2E, 0xEA, 0x7C, 0x0D, 0x62, 0x25, 0xA5, 0x6E, 0x44, 0x0F, 0x9D, 0x9F, 0xC0, 0x21, 0x69,
    -
    190  0x26, 0xB3, 0x8F, 0x70, 0xF0, 0x9D, 0x88, 0xE5, 0x55, 0x42, 0xA1, 0x7A, 0x49, 0x20, 0xAD, 0x81,
    -
    191  0x93, 0xE7, 0x8B, 0xFC, 0x8C, 0xE7, 0xE6, 0xCF, 0xBC, 0x51, 0xA8, 0xBC, 0xB8, 0xF2, 0x2F, 0xD4,
    -
    192  0xB6, 0x4A, 0xCF, 0x17, 0xE8, 0x3D, 0xF4, 0xDD, 0x01, 0x50, 0x3C, 0x42, 0xA8, 0x44, 0x90, 0xA8,
    -
    193  0x82, 0xC9, 0xB6, 0x87, 0x85, 0xC3, 0xE0, 0x79, 0x44, 0x97, 0xC2, 0xE5, 0xCB, 0x4E, 0x26, 0x6D,
    -
    194  0xFF, 0x98, 0xDB, 0x14, 0x71, 0x71, 0x33, 0x5F, 0x07, 0xF4, 0x03, 0xF9, 0xBF, 0x0D, 0x98, 0x1C,
    -
    195  0x46, 0x33, 0xE1, 0x15, 0xBC, 0xBD, 0x16, 0x3C, 0x20, 0xD1, 0x0D, 0x12, 0x3A, 0x5B, 0x6C, 0x22,
    -
    196  0x56, 0x6C, 0x01, 0x5F, 0xB8, 0x9D, 0xBB, 0x10, 0x09, 0x77, 0xB7, 0x70, 0x46, 0x06, 0x52, 0xC5,
    -
    197  0xF9, 0x75, 0x83, 0x4E, 0xBD, 0x4D, 0x8A, 0x45, 0x14, 0x84, 0xEC, 0x0E, 0x1C, 0x3B, 0x03, 0xDA,
    -
    198  0xD4, 0xBB, 0x7A, 0xCB, 0x88, 0xA6, 0xF0, 0x30, 0x82, 0xA9, 0xE5, 0x80, 0xB6, 0x9A, 0xE4, 0x02,
    -
    199  0xE9, 0x7C, 0x21, 0x6F, 0x83, 0xC7, 0xD2, 0x86, 0x96, 0xCB, 0xF9, 0x49, 0x57, 0xD8, 0x4C, 0x1B,
    -
    200  0xDD, 0x86, 0xA3, 0x1D, 0x8F, 0xE8, 0x9F, 0xF4, 0x59, 0x97, 0x79, 0x81, 0xEE, 0x04, 0x57, 0xB4,
    -
    201  0x13, 0x92, 0x68, 0x49, 0x57, 0x6D, 0xCB, 0x69, 0x45, 0x17, 0x53, 0xFA, 0x4B, 0xF0, 0xEB, 0x05,
    -
    202  0xCE, 0x7C, 0x64, 0xC6, 0x23, 0x13, 0xEA, 0x17, 0xD1, 0x85, 0xFE, 0xD0, 0xA4, 0xFA, 0x05, 0xE7,
    -
    203  0x9E, 0xFB, 0xBB, 0x90, 0xC2, 0x08, 0x2E, 0x2E, 0x9C, 0x94, 0xD0, 0x4D, 0x1A, 0x69, 0x6C, 0x5A,
    -
    204  0xD5, 0x39, 0xF5, 0x7D, 0xAE, 0x48, 0xB0, 0xAF, 0x6C, 0xF5, 0x39, 0x00, 0xC3, 0x51, 0x94, 0x59,
    -
    205  0x64, 0x13, 0x0D, 0xBB, 0xDF, 0x90, 0x71, 0x9C, 0x7D, 0x96, 0xD9, 0x44, 0x03, 0xB3, 0x09, 0xCB,
    -
    206  0x1E, 0xE3, 0xDF, 0x06, 0x2C, 0x5A, 0x9D, 0x4A, 0x24, 0x05, 0x8D, 0x81, 0xDD, 0x80, 0x60, 0xDE,
    -
    207  0xB0, 0xE0, 0x01, 0xE1, 0xBF, 0x31, 0x6C, 0x60, 0xF8, 0xC7, 0x87, 0xE4, 0x3D, 0x28, 0x78, 0x8F,
    -
    208  0x1A, 0xC2, 0x14, 0x1B, 0x18, 0xD6, 0xE1, 0xE4, 0xEA, 0x3B, 0x0D, 0xAD, 0x3B, 0x13, 0x3A, 0xAB,
    -
    209  0x72, 0xAC, 0xE7, 0x61, 0x97, 0x79, 0xB0, 0xCC, 0xA0, 0x8E, 0x4B, 0xCF, 0xE4, 0x5C, 0xC6, 0x47,
    -
    210  0xE4, 0x1A, 0x8E, 0x0A, 0x9E, 0x80, 0xAB, 0x67, 0x49, 0x66, 0x97, 0x79, 0x5A, 0x26, 0x67, 0x8A,
    -
    211  0x4F, 0xC1, 0x75, 0xAC, 0x72, 0xED, 0x3F, 0x86, 0xA9, 0x7D, 0x59, 0xCB, 0xA4, 0x77, 0xE6, 0x72,
    -
    212  0xFB, 0x9C, 0x4B, 0xBF, 0xC7, 0x45, 0x1B, 0x71, 0xC9, 0x46, 0x39, 0x4F, 0x85, 0xE5, 0xF0, 0x5C,
    -
    213  0x9E, 0xC3, 0x3F, 0x81, 0xE7, 0xF8, 0x8F, 0xE0, 0xC9, 0xF3, 0x3F, 0xC5, 0xC0, 0xF1, 0x4C, 0x2F,
    -
    214  0xED, 0x9B, 0x1B, 0xE9, 0xF9, 0xF6, 0x6D, 0xF7, 0xE1, 0x4F, 0x03, 0x82, 0x33, 0xF8, 0xA3, 0xE6,
    -
    215  0x4F, 0x1B, 0x3F, 0x8D, 0x8C, 0x9E, 0xF6, 0xD6, 0x36, 0xC6, 0xDA, 0xDB, 0x91, 0x61, 0xF5, 0xD8,
    -
    216  0xBB, 0xA9, 0xBD, 0xB5, 0xC4, 0x63, 0x6C, 0x58, 0x16, 0x7F, 0x0C, 0x78, 0xE3, 0x10, 0x1E, 0x26,
    -
    217  0x7B, 0x5C, 0x1A, 0xD6, 0x88, 0xBD, 0x5F, 0xB2, 0x26, 0x1B, 0x86, 0xDB, 0xE2, 0x61, 0x1B, 0xD6,
    -
    218  0x98, 0x3D, 0xC6, 0xAC, 0x6D, 0x88, 0x5C, 0x87, 0xDA, 0x57, 0x5C, 0x60, 0x1A, 0x7F, 0x81, 0x15,
    -
    219  0xB2, 0xB3, 0x6A, 0x83, 0xA7, 0xBB, 0x0D, 0xB6, 0xD2, 0xDA, 0x85, 0xF2, 0xB4, 0xE6, 0x33, 0x1E,
    -
    220  0x10, 0x48, 0x6B, 0xA7, 0x20, 0xC9, 0xC5, 0x94, 0x30, 0xF4, 0x51, 0x71, 0x44, 0x67, 0x29, 0x9E,
    -
    221  0xA1, 0x03, 0x8E, 0xE8, 0xAD, 0x82, 0x07, 0x9C, 0x65, 0xB1, 0xFC, 0x7C, 0x0D, 0xF9, 0x69, 0xB4,
    -
    222  0xCC, 0x9A, 0xC4, 0xA0, 0x52, 0x69, 0x80, 0x0B, 0xA4, 0x43, 0xE3, 0xB7, 0xF1, 0x1D, 0x49, 0x7F,
    -
    223  0x80, 0xDC, 0xA0, 0xD9, 0x02, 0x98, 0xA5, 0x95, 0x16, 0x72, 0x45, 0xBF, 0x6D, 0x5B, 0x13, 0x32,
    -
    224  0xA3, 0xDF, 0x5A, 0x13, 0xB3, 0x60, 0x8B, 0xB5, 0x3F, 0x97, 0x7A, 0x2B, 0x96, 0x69, 0xB1, 0x0C,
    -
    225  0x11, 0x45, 0x44, 0xB4, 0x81, 0x5C, 0x1E, 0x00, 0x73, 0xD1, 0x84, 0xA7, 0x7A, 0x12, 0xBC, 0x66,
    -
    226  0x83, 0x26, 0x9A, 0x7E, 0x41, 0x3A, 0x9C, 0xC0, 0xA0, 0x17, 0xE5, 0x21, 0xBF, 0xA9, 0x5F, 0x6E,
    -
    227  0x62, 0xEA, 0x86, 0x1A, 0x2F, 0x96, 0x33, 0x22, 0x8A, 0x0D, 0xA7, 0x69, 0x20, 0xC0, 0xFB, 0x2A,
    -
    228  0x09, 0x44, 0x6C, 0xFF, 0x34, 0xC5, 0x3B, 0xCF, 0xDB, 0x24, 0xBC, 0x4A, 0xAB, 0xE9, 0x6C, 0xE8,
    -
    229  0xD5, 0x9A, 0x40, 0x1C, 0xD4, 0xD6, 0x41, 0x04, 0x06, 0xD3, 0x60, 0x99, 0x18, 0x47, 0x8C, 0x15,
    -
    230  0x58, 0xD4, 0xB4, 0x71, 0x09, 0x9F, 0x78, 0x6C, 0x6B, 0xE0, 0x0C, 0x71, 0x4E, 0x0F, 0xB8, 0x0E,
    -
    231  0x1B, 0xC8, 0x88, 0xC5, 0x21, 0xA2, 0xDA, 0xFF, 0x5C, 0x37, 0xFC, 0xD8, 0xDB, 0xAC, 0x61, 0x0F,
    -
    232  0x3B, 0x4B, 0x42, 0x5F, 0x85, 0x04, 0x3F, 0x7E, 0xBF, 0x7D, 0x03, 0x7B, 0x27, 0x92, 0xEC, 0x56,
    -
    233  0x27, 0x88, 0x22, 0x92, 0xFE, 0x78, 0xF3, 0xD3, 0xDB, 0x29, 0x35, 0x50, 0x93, 0x06, 0x6C, 0xF3,
    -
    234  0x33, 0x35, 0xF8, 0x71, 0x25, 0x47, 0xA5, 0x78, 0x08, 0xB1, 0x87, 0xBE, 0xC1, 0x52, 0xCB, 0xBB,
    -
    235  0x05, 0x46, 0x45, 0xA3, 0xD4, 0xC7, 0xC3, 0x96, 0xDD, 0x72, 0xD8, 0xEA, 0x68, 0x2A, 0xBD, 0x4C,
    -
    236  0xBD, 0x57, 0x3E, 0x11, 0xB0, 0x4A, 0x71, 0x17, 0x86, 0x90, 0xA6, 0x69, 0x44, 0x17, 0x56, 0xEB,
    -
    237  0xE1, 0x38, 0x86, 0x61, 0x11, 0x82, 0x99, 0xE2, 0xAD, 0x45, 0x4C, 0x03, 0xB3, 0x0C, 0x31, 0x25,
    -
    238  0x01, 0x6C, 0x68, 0xCC, 0xE0, 0x2C, 0x80, 0x09, 0xA9, 0xCC, 0x37, 0xF5, 0x3D, 0x61, 0x77, 0x06,
    -
    239  0x59, 0x07, 0xE4, 0xA3, 0x4D, 0x69, 0x72, 0x25, 0xD3, 0xAD, 0x5A, 0x75, 0x07, 0x33, 0x69, 0x83,
    -
    240  0xB2, 0x47, 0x6B, 0xDF, 0x62, 0xC9, 0x00, 0xEA, 0x29, 0x98, 0x9A, 0x10, 0xBC, 0x25, 0x3F, 0xAE,
    -
    241  0x0B, 0x07, 0xE2, 0x68, 0x4B, 0x6F, 0x5B, 0xA0, 0x57, 0x4E, 0xDF, 0x14, 0xFD, 0x10, 0x75, 0x3B,
    -
    242  0x78, 0x3A, 0x6D, 0xBD, 0x78, 0xD1, 0x64, 0xCA, 0xBA, 0xF9, 0x30, 0x13, 0x46, 0xC1, 0xB2, 0x6E,
    -
    243  0x80, 0x18, 0x15, 0x57, 0x14, 0xB8, 0xA9, 0x81, 0x18, 0x6D, 0xF6, 0x89, 0x16, 0x28, 0x63, 0x19,
    -
    244  0x36, 0xA0, 0x84, 0x61, 0x5B, 0x88, 0x35, 0x36, 0x7E, 0x1E, 0xF2, 0xC7, 0x88, 0xB5, 0x59, 0x88,
    -
    245  0x0F, 0x6F, 0x2D, 0x5B, 0xBC, 0x5B, 0x1A, 0x0E, 0xB3, 0xCE, 0x40, 0x0C, 0xBC, 0x52, 0xD0, 0xEE,
    -
    246  0x2D, 0x1E, 0x91, 0xB7, 0xF8, 0x6C, 0x68, 0xF7, 0x36, 0x3C, 0x00, 0x59, 0xB7, 0x36, 0x8B, 0x80,
    -
    247  0x15, 0x0E, 0xFC, 0x6B, 0x5B, 0x08, 0x6F, 0x35, 0xBA, 0x72, 0x89, 0x39, 0xAB, 0x81, 0xE0, 0x64,
    -
    248  0x0A, 0x56, 0x3D, 0xCE, 0xCA, 0x32, 0xCF, 0xE0, 0x05, 0x6B, 0x3E, 0xE0, 0xD3, 0xAF, 0xF0, 0xE9,
    -
    249  0x3F, 0x91, 0xCF, 0xB8, 0xC2, 0x67, 0x7C, 0x06, 0x1F, 0x59, 0x3B, 0x60, 0xF9, 0x13, 0x2C, 0xB3,
    -
    250  0x71, 0x75, 0xF3, 0x52, 0xE4, 0x6A, 0x9F, 0x44, 0xB2, 0xF6, 0xA9, 0x91, 0x57, 0x48, 0x65, 0x19,
    -
    251  0x3D, 0xB9, 0x77, 0xC0, 0x7C, 0x5D, 0x51, 0x47, 0x6C, 0x80, 0x1F, 0x33, 0xD0, 0x55, 0xCC, 0x04,
    -
    252  0xED, 0xEC, 0xA2, 0x01, 0x49, 0xB9, 0x9B, 0x82, 0x2B, 0x4F, 0x3F, 0x83, 0x00, 0xD1, 0x97, 0x52,
    -
    253  0x56, 0x5D, 0x94, 0x23, 0x67, 0x0D, 0x9C, 0xB9, 0x42, 0xCC, 0x75, 0x2E, 0xF2, 0x61, 0xAC, 0x29,
    -
    254  0xDE, 0xBC, 0x9C, 0x81, 0x6C, 0x5C, 0xCA, 0x8A, 0x3D, 0x8A, 0xB1, 0x7C, 0x84, 0x34, 0x3B, 0xF3,
    -
    255  0x79, 0x43, 0x9D, 0xEF, 0x93, 0x28, 0x1C, 0x7D, 0xD2, 0x15, 0x57, 0x7E, 0x09, 0xF1, 0x83, 0x92,
    -
    256  0x26, 0x43, 0xAA, 0xB2, 0xE8, 0x7A, 0xA3, 0x85, 0x99, 0x26, 0x72, 0x56, 0xD3, 0xC5, 0x92, 0x54,
    -
    257  0x38, 0x1F, 0xF7, 0x49, 0x7C, 0x43, 0x5F, 0x28, 0xFC, 0x2A, 0x04, 0xBF, 0x0A, 0xAB, 0x7E, 0x15,
    -
    258  0x0A, 0xBF, 0x9A, 0x56, 0xFD, 0x2A, 0xFC, 0x43, 0xFD, 0x4A, 0xF1, 0xAA, 0x4B, 0x1E, 0x9E, 0x2F,
    -
    259  0x31, 0xD0, 0x42, 0x90, 0x86, 0x78, 0x2C, 0xDE, 0x06, 0x18, 0x72, 0xFB, 0xE8, 0x45, 0x7D, 0xF4,
    -
    260  0xBB, 0x01, 0x73, 0x3E, 0x9B, 0x0D, 0xC5, 0x07, 0x06, 0x6A, 0x74, 0xC5, 0x1E, 0xA3, 0x1F, 0xB0,
    -
    261  0x77, 0x9B, 0x7B, 0x22, 0xF4, 0x9F, 0x17, 0xA7, 0x0B, 0xA3, 0xD2, 0x71, 0x5B, 0xCA, 0x27, 0x00,
    -
    262  0x2D, 0xDF, 0xFE, 0x3C, 0xAB, 0x39, 0xBC, 0x99, 0x53, 0x51, 0x57, 0x09, 0xF5, 0xCA, 0x76, 0x85,
    -
    263  0xC5, 0x76, 0x39, 0x72, 0xBF, 0x2A, 0x7D, 0x25, 0xE3, 0x90, 0xF2, 0x3C, 0xD9, 0x56, 0x8E, 0xCF,
    -
    264  0xFF, 0x24, 0x73, 0x39, 0x1A, 0xEF, 0x8A, 0x9A, 0x54, 0x39, 0xE4, 0x1D, 0x25, 0x60, 0xA5, 0x3A,
    -
    265  0x75, 0xAC, 0x3C, 0x2E, 0x16, 0x29, 0x89, 0xB0, 0x76, 0xCC, 0x94, 0xE2, 0x08, 0xAF, 0x12, 0x9A,
    -
    266  0xFA, 0x0F, 0xFC, 0x83, 0xE6, 0x63, 0x17, 0x8E, 0x89, 0x17, 0xB8, 0x99, 0x3C, 0x3D, 0x00, 0x73,
    -
    267  0x2C, 0xE5, 0x4F, 0x6C, 0x10, 0x81, 0x0C, 0xF6, 0x80, 0xA7, 0x4C, 0xC0, 0x4E, 0xB1, 0x85, 0x31,
    -
    268  0xB0, 0x81, 0x71, 0xBA, 0x3D, 0xC1, 0x1B, 0xC6, 0x94, 0xD9, 0x2B, 0x05, 0x60, 0x71, 0x52, 0x4B,
    -
    269  0x52, 0x88, 0x6C, 0x70, 0xB6, 0x7D, 0xCF, 0xCB, 0x35, 0xEC, 0xA2, 0xA1, 0xE0, 0xCD, 0x0A, 0x46,
    -
    270  0x90, 0x13, 0x80, 0x6A, 0xA3, 0x4D, 0x18, 0x3E, 0x9B, 0x92, 0xCA, 0x3C, 0x9E, 0x64, 0x08, 0xF3,
    -
    271  0x74, 0xC0, 0x09, 0xD7, 0xCD, 0x96, 0x32, 0x9D, 0x3A, 0x94, 0x45, 0x53, 0x9E, 0x4A, 0x44, 0xE4,
    -
    272  0x4E, 0xFB, 0x9F, 0x9F, 0xDE, 0xFE, 0x48, 0x69, 0x22, 0x4E, 0xF0, 0x70, 0xA0, 0xD6, 0xBB, 0xCC,
    -
    273  0x04, 0xBE, 0xE5, 0x3F, 0x85, 0x98, 0xC2, 0x9A, 0x20, 0x6E, 0x42, 0x26, 0x85, 0xAD, 0xBC, 0x6C,
    -
    274  0x75, 0x41, 0x22, 0x2F, 0xF6, 0xC9, 0xC7, 0x0F, 0x6F, 0x9A, 0xB4, 0x65, 0xB0, 0x4E, 0x96, 0x34,
    -
    275  0xA8, 0x1D, 0x6A, 0xE2, 0x72, 0x7C, 0x73, 0x45, 0xD1, 0xB6, 0xD5, 0x61, 0xAE, 0xD2, 0x29, 0x2A,
    -
    276  0x59, 0xA2, 0xAA, 0x15, 0xC2, 0x9A, 0xA3, 0x4E, 0x1C, 0xC1, 0xE2, 0xFC, 0x2D, 0xA6, 0x4A, 0xC4,
    -
    277  0x5B, 0xE1, 0xAF, 0x0B, 0xA7, 0x79, 0x6E, 0xD0, 0xDA, 0x41, 0xC6, 0xD9, 0x9F, 0x4E, 0xA3, 0x0E,
    -
    278  0x1B, 0x83, 0xC9, 0x26, 0x69, 0x41, 0x93, 0x6D, 0x9A, 0xD8, 0xC8, 0xD3, 0x2B, 0xA9, 0xE3, 0xFF,
    -
    279  0xBA, 0x7E, 0xF7, 0x33, 0x20, 0x7A, 0x0A, 0x09, 0x2E, 0x8E, 0xCF, 0x92, 0x38, 0xCA, 0xC8, 0x0D,
    -
    280  0xB9, 0xA7, 0x27, 0x0C, 0xF6, 0x84, 0x88, 0xA2, 0xDA, 0x66, 0xD4, 0xA6, 0xC4, 0x7B, 0x12, 0xC2,
    -
    281  0x36, 0x56, 0xCA, 0x23, 0x7B, 0x5C, 0x4D, 0x42, 0xA2, 0xA6, 0xFE, 0x9F, 0xAF, 0x6E, 0xE0, 0x5C,
    -
    282  0x6F, 0x3C, 0x33, 0x5B, 0xD0, 0x94, 0xC1, 0xF6, 0x34, 0x2B, 0xDB, 0xC5, 0xCB, 0x8C, 0xBB, 0xBC,
    -
    283  0x8D, 0xD9, 0x37, 0x2C, 0x8C, 0x08, 0xD0, 0x85, 0xED, 0x4C, 0x36, 0xAC, 0x04, 0x20, 0xB3, 0x6F,
    -
    284  0xC2, 0x7F, 0xDF, 0xE0, 0x77, 0x45, 0xCA, 0xFC, 0x1F, 0x90, 0xBD, 0x1E, 0x5F, 0x17, 0xDE, 0xB6,
    -
    285  0xB4, 0x3A, 0x3C, 0xA3, 0x3D, 0xE1, 0x7E, 0xE5, 0x7B, 0x20, 0x49, 0x20, 0x4A, 0xA1, 0x80, 0x6A,
    -
    286  0x5A, 0xA7, 0xD3, 0xD1, 0x2F, 0xF0, 0xF0, 0xF0, 0x1A, 0xAF, 0xFF, 0x9B, 0x66, 0x0B, 0xF3, 0xDD,
    -
    287  0xFD, 0x9E, 0x8B, 0x74, 0x12, 0x06, 0x64, 0xF1, 0xB6, 0xC5, 0x31, 0x07, 0x8F, 0x0E, 0xE6, 0xB3,
    -
    288  0xA9, 0xAC, 0xB7, 0xB4, 0x76, 0x4F, 0x96, 0x09, 0x45, 0x3A, 0x01, 0x28, 0x6C, 0xE1, 0xC7, 0x0D,
    -
    289  0xCE, 0x29, 0x7C, 0xE3, 0x75, 0x9C, 0xAE, 0x5F, 0xBA, 0xD4, 0x75, 0xA2, 0x8E, 0x9B, 0x24, 0xB8,
    -
    290  0x49, 0x1C, 0x8E, 0xD4, 0x3C, 0xBB, 0x9A, 0x72, 0x52, 0x35, 0xD9, 0xDC, 0xF1, 0x90, 0x89, 0x65,
    -
    291  0x1D, 0xC3, 0x57, 0x33, 0xF7, 0x8B, 0x50, 0xE0, 0xEB, 0xB5, 0x5E, 0x30, 0xF7, 0x8D, 0x90, 0x87,
    -
    292  0x4B, 0xA3, 0x98, 0xAF, 0x28, 0x69, 0x1B, 0xA1, 0x71, 0xC8, 0xA0, 0xC5, 0x14, 0xED, 0xD6, 0x78,
    -
    293  0xB2, 0xE3, 0x0A, 0x4B, 0x7B, 0xFF, 0xEE, 0xFA, 0x06, 0x4F, 0x13, 0x8C, 0x8F, 0xCE, 0x2C, 0xCE,
    -
    294  0xED, 0x70, 0x15, 0x76, 0x20, 0x32, 0xBD, 0xBA, 0x05, 0x8E, 0x6F, 0x01, 0x90, 0x09, 0x00, 0x2C,
    -
    295  0x6A, 0x87, 0x17, 0x9D, 0x01, 0x46, 0x8C, 0x67, 0x16, 0x0E, 0x8D, 0x23, 0x1C, 0x5A, 0xF1, 0x38,
    -
    296  0xE6, 0x5E, 0x53, 0x37, 0xF7, 0xAF, 0xA7, 0xED, 0xD5, 0x13, 0x76, 0x29, 0xF7, 0xB9, 0xF3, 0x2C,
    -
    297  0x4B, 0x4C, 0xA7, 0x3B, 0x35, 0x3E, 0xAA, 0xA0, 0x81, 0x5B, 0x46, 0x03, 0xE1, 0xBC, 0xEC, 0x5F,
    -
    298  0x24, 0x34, 0xF5, 0xEF, 0xC0, 0xF9, 0xD8, 0x6F, 0xE1, 0xF1, 0x4C, 0x07, 0x1B, 0xE0, 0x3F, 0x83,
    -
    299  0x63, 0x36, 0x28, 0x86, 0x79, 0x6D, 0xD4, 0xDA, 0x17, 0x7E, 0xAB, 0x5E, 0x10, 0xFC, 0xA9, 0x9E,
    -
    300  0xBB, 0xB8, 0x3B, 0xC7, 0x77, 0xF1, 0x92, 0x40, 0x8D, 0x9C, 0x0F, 0x7B, 0x2D, 0x48, 0x79, 0x10,
    -
    301  0xEB, 0x2A, 0x17, 0x37, 0xDA, 0xB7, 0x7A, 0x4B, 0xCA, 0x7D, 0x7C, 0x13, 0xEE, 0x7E, 0xA7, 0x73,
    -
    302  0x17, 0xD7, 0x2F, 0x4F, 0x33, 0x02, 0x65, 0xFE, 0x27, 0x90, 0x73, 0xC5, 0x9D, 0x88, 0x49, 0xE7,
    -
    303  0xAB, 0xFC, 0xC4, 0x58, 0xF1, 0x73, 0x01, 0x39, 0x91, 0xF8, 0x51, 0xD5, 0x54, 0xC7, 0x5F, 0x55,
    -
    304  0x9D, 0xF6, 0x0C, 0xB6, 0xFD, 0x27, 0x10, 0x4C, 0x22, 0x52, 0x19, 0xC5, 0x8C, 0x07, 0x01, 0x4A,
    -
    305  0xEF, 0xEA, 0x8F, 0x04, 0x26, 0x8E, 0x4B, 0x05, 0xDD, 0x23, 0xF0, 0x88, 0xFF, 0xFE, 0x03, 0x96,
    -
    306  0xF2, 0xD7, 0x40, 0x92, 0x6A, 0x61, 0xE7, 0x82, 0xD2, 0xC1, 0xEE, 0x9E, 0xB8, 0x67, 0x3B, 0xC1,
    -
    307  0x46, 0xDE, 0xB8, 0x3D, 0xCD, 0xC4, 0xFE, 0x10, 0x07, 0x39, 0xC6, 0x44, 0x5E, 0x38, 0x27, 0xF7,
    -
    308  0x67, 0x7A, 0x97, 0x04, 0xD8, 0x3F, 0xCD, 0x17, 0x0F, 0xC9, 0x15, 0x19, 0x9D, 0x83, 0xBC, 0xAE,
    -
    309  0x82, 0xE4, 0x88, 0x3B, 0x3A, 0x16, 0x7C, 0x64, 0xED, 0xF1, 0xC5, 0x0B, 0xBD, 0x5F, 0xFE, 0xAA,
    -
    310  0xF6, 0xFE, 0xF6, 0x9B, 0xC0, 0x7C, 0x81, 0x75, 0x0B, 0x17, 0x6C, 0xDC, 0xD7, 0x5B, 0x86, 0x6E,
    -
    311  0xC3, 0xE1, 0x56, 0x8E, 0x6A, 0x95, 0x07, 0x79, 0x6E, 0xE4, 0x81, 0x84, 0x18, 0x16, 0x1C, 0x16,
    -
    312  0x37, 0x70, 0xCE, 0x9E, 0x3A, 0x9E, 0xC3, 0xA5, 0x11, 0x4D, 0x4D, 0xF0, 0xC1, 0x87, 0x1C, 0xDB,
    -
    313  0x09, 0x3A, 0x58, 0x7B, 0xEC, 0x9B, 0x06, 0x9D, 0x66, 0x84, 0xBE, 0x41, 0x53, 0x01, 0x2D, 0x37,
    -
    314  0x15, 0x6B, 0x8F, 0x2E, 0xA6, 0xD6, 0xC3, 0x00, 0xC1, 0xB7, 0x26, 0x3A, 0xC7, 0x0E, 0x0B, 0x93,
    -
    315  0xEE, 0x5B, 0xED, 0xC8, 0x88, 0x66, 0x7D, 0x13, 0x8E, 0xEC, 0x1E, 0x58, 0x74, 0x9A, 0xCF, 0x0F,
    -
    316  0xA9, 0x7E, 0x18, 0xF3, 0xBB, 0x59, 0xD0, 0x31, 0x9A, 0x0F, 0x1E, 0x31, 0x0C, 0x8B, 0xF4, 0xCA,
    -
    317  0xE1, 0xB2, 0xA4, 0x3A, 0x0C, 0x95, 0x8F, 0x8A, 0xA5, 0x45, 0x30, 0x15, 0xB8, 0xF1, 0x16, 0x6F,
    -
    318  0x3A, 0x9B, 0x27, 0xDC, 0xF9, 0x9C, 0x04, 0xFD, 0x38, 0xAD, 0xBC, 0xC4, 0x3E, 0x40, 0x61, 0xF6,
    -
    319  0xDB, 0x73, 0xA5, 0x24, 0x5F, 0xC9, 0xE4, 0x4F, 0xC9, 0x73, 0x94, 0x27, 0x43, 0x76, 0x61, 0xB3,
    -
    320  0xA7, 0xE9, 0x95, 0x3B, 0x67, 0xB1, 0x91, 0xE2, 0x50, 0x67, 0x9C, 0x88, 0xBA, 0x75, 0x97, 0xC2,
    -
    321  0x15, 0x6A, 0xBC, 0x35, 0x65, 0xC3, 0xBE, 0xFD, 0x78, 0xFD, 0xEA, 0x83, 0x7A, 0x62, 0xC3, 0xAC,
    -
    322  0x04, 0xC4, 0x8B, 0x28, 0x64, 0x2B, 0x17, 0xFA, 0x8B, 0xF7, 0xDF, 0x5D, 0x5F, 0xFF, 0xF3, 0xDD,
    -
    323  0x87, 0x97, 0xF5, 0x43, 0x28, 0x0E, 0xB9, 0xFE, 0xF8, 0xFD, 0x4F, 0x6F, 0x6E, 0xA6, 0x5B, 0xCC,
    -
    324  0x2A, 0x83, 0x3A, 0xC4, 0x0F, 0x1E, 0x38, 0xB9, 0xC1, 0xB1, 0x2D, 0x50, 0x8E, 0x6D, 0x2F, 0x5E,
    -
    325  0x00, 0x84, 0x3F, 0x83, 0x26, 0xE9, 0x9A, 0x65, 0x0B, 0xD8, 0x1B, 0x81, 0x7A, 0x76, 0x8A, 0x58,
    -
    326  0xD8, 0x08, 0xE4, 0xD9, 0x09, 0x95, 0xAA, 0x16, 0xB0, 0x21, 0x24, 0x39, 0x77, 0x41, 0xE4, 0xC7,
    -
    327  0x77, 0x35, 0xD1, 0xE2, 0xF8, 0xED, 0x89, 0x73, 0xD5, 0x15, 0xD7, 0xD3, 0x57, 0x5D, 0xF1, 0x83,
    -
    328  0x19, 0xF6, 0xFF, 0xCC, 0xF9, 0x7F, 0xE5, 0xCC, 0x32, 0xCA, 0x3A, 0x47, 0x00, 0x00
    -
    329 };
    -
    -
    -
    const char PAGE_NOFILES[] PROGMEM
    Definition: nofile.h:24
    - - - - diff --git a/docs/html/open.png b/docs/html/open.png deleted file mode 100644 index 30f75c7..0000000 Binary files a/docs/html/open.png and /dev/null differ diff --git a/docs/html/resize.js b/docs/html/resize.js deleted file mode 100644 index a0bb5f4..0000000 --- a/docs/html/resize.js +++ /dev/null @@ -1,137 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function initResizable() -{ - var cookie_namespace = 'doxygen'; - var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; - - function readCookie(cookie) - { - var myCookie = cookie_namespace+"_"+cookie+"="; - if (document.cookie) { - var index = document.cookie.indexOf(myCookie); - if (index != -1) { - var valStart = index + myCookie.length; - var valEnd = document.cookie.indexOf(";", valStart); - if (valEnd == -1) { - valEnd = document.cookie.length; - } - var val = document.cookie.substring(valStart, valEnd); - return val; - } - } - return 0; - } - - function writeCookie(cookie, val, expiration) - { - if (val==undefined) return; - if (expiration == null) { - var date = new Date(); - date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week - expiration = date.toGMTString(); - } - document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; - } - - function resizeWidth() - { - var windowWidth = $(window).width() + "px"; - var sidenavWidth = $(sidenav).outerWidth(); - content.css({marginLeft:parseInt(sidenavWidth)+"px"}); - writeCookie('width',sidenavWidth-barWidth, null); - } - - function restoreWidth(navWidth) - { - var windowWidth = $(window).width() + "px"; - content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - sidenav.css({width:navWidth + "px"}); - } - - function resizeHeight() - { - var headerHeight = header.outerHeight(); - var footerHeight = footer.outerHeight(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - content.css({height:windowHeight + "px"}); - navtree.css({height:windowHeight + "px"}); - sidenav.css({height:windowHeight + "px"}); - var width=$(window).width(); - if (width!=collapsedWidth) { - if (width=desktop_vp) { - if (!collapsed) { - collapseExpand(); - } - } else if (width>desktop_vp && collapsedWidth0) { - restoreWidth(0); - collapsed=true; - } - else { - var width = readCookie('width'); - if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } - collapsed=false; - } - } - - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(function() { resizeHeight(); }); - var device = navigator.userAgent.toLowerCase(); - var touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; - } - var width = readCookie('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(".ui-resizable-handle").dblclick(collapseExpand); - $(window).on('load',resizeHeight); -} -/* @license-end */ diff --git a/docs/html/sd___e_s_p32_8cpp.html b/docs/html/sd___e_s_p32_8cpp.html deleted file mode 100644 index f6a7aa1..0000000 --- a/docs/html/sd___e_s_p32_8cpp.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -ESP3D Lib: src/sd_ESP32.cpp File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    sd_ESP32.cpp File Reference
    -
    - -
    - - - - diff --git a/docs/html/sd___e_s_p32_8cpp_source.html b/docs/html/sd___e_s_p32_8cpp_source.html deleted file mode 100644 index 04a5983..0000000 --- a/docs/html/sd___e_s_p32_8cpp_source.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - -ESP3D Lib: src/sd_ESP32.cpp Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    sd_ESP32.cpp
    -
    -
    -Go to the documentation of this file.
    1 
    -
    23 #ifdef ARDUINO_ARCH_ESP32
    -
    24 #include "esplibconfig.h"
    -
    25 #if ENABLED(SDSUPPORT) && ENABLED(ESP3D_WIFISUPPORT)
    -
    26 #include MARLIN_PATH(sd/cardreader.h)
    -
    27 #include MARLIN_PATH(sd/SdVolume.h)
    -
    28 #include MARLIN_PATH(sd/SdFatStructs.h)
    -
    29 #include MARLIN_PATH(sd/SdFile.h)
    -
    30 #include "sd_ESP32.h"
    -
    31 
    -
    32 
    -
    33 //Cannot move to static variable due to conflict with ESP32 SD library
    -
    34 SdFile workDir;
    -
    35 dir_t dir_info;
    -
    36 SdVolume sd_volume;
    -
    37 
    -
    38 
    - -
    40  _size = 0;
    -
    41  _pos = 0;
    -
    42  _readonly=true;
    -
    43  //ugly Workaround to not expose SdFile class which conflict with Native ESP32 SD class
    -
    44  _sdfile = new SdFile;
    -
    45 }
    - -
    47 if (((SdFile *)_sdfile)->isOpen())close();
    -
    48 if (_sdfile) delete (SdFile *) _sdfile;
    -
    49 }
    -
    50 
    -
    51 bool ESP_SD::isopen(){
    -
    52  return (((SdFile *)_sdfile)->isOpen());
    -
    53 }
    -
    54 
    -
    55 int8_t ESP_SD::card_status(){
    -
    56 if (!IS_SD_INSERTED() || !card.isMounted()) return 0; //No sd
    -
    57 if ( card.isPrinting() || card.isFileOpen() ) return -1; // busy
    -
    58 return 1; //ok
    -
    59 }
    -
    60 
    -
    61 bool ESP_SD::open(const char * path, bool readonly ){
    -
    62  if (path == NULL) return false;
    -
    63  String fullpath=path;
    -
    64  String pathname = fullpath.substring(0,fullpath.lastIndexOf("/"));
    -
    65  String filename = makeshortname(fullpath.substring(fullpath.lastIndexOf("/")+1));
    -
    66  if (pathname.length() == 0)pathname="/";
    -
    67  if (!openDir(pathname))return false;
    -
    68  _pos = 0;
    -
    69  _readonly = readonly;
    -
    70  return ((SdFile *)_sdfile)->open(&workDir, filename.c_str(), readonly?O_READ:(O_CREAT | O_APPEND | O_WRITE | O_TRUNC));
    -
    71 }
    -
    72 
    -
    73 uint32_t ESP_SD::size(){
    -
    74  if(((SdFile *)_sdfile)->isOpen()) {
    -
    75  _size = ((SdFile *)_sdfile)->fileSize();
    -
    76  }
    -
    77  return _size ;
    -
    78 }
    -
    79 
    -
    80 uint32_t ESP_SD::available(){
    -
    81  if(!((SdFile *)_sdfile)->isOpen() || !_readonly) return 0;
    -
    82  _size = ((SdFile *)_sdfile)->fileSize();
    -
    83  if (_size == 0) return 0;
    -
    84 
    -
    85  return _size - _pos ;
    -
    86 }
    -
    87 
    -
    88 void ESP_SD::close(){
    -
    89  if(((SdFile *)_sdfile)->isOpen()) {
    -
    90  ((SdFile *)_sdfile)->sync();
    -
    91  _size = ((SdFile *)_sdfile)->fileSize();
    -
    92  ((SdFile *)_sdfile)->close();
    -
    93  }
    -
    94 }
    -
    95 
    -
    96 int16_t ESP_SD::write(const uint8_t * data, uint16_t len){
    -
    97  return ((SdFile *)_sdfile)->write(data, len);
    -
    98 }
    -
    99 
    -
    100 int16_t ESP_SD::write(const uint8_t byte){
    -
    101  return ((SdFile *)_sdfile)->write(&byte, 1);
    -
    102 }
    -
    103 
    -
    104 
    -
    105 bool ESP_SD::exists(const char * path){
    -
    106  bool response = open(path);
    -
    107  if (response) close();
    -
    108  return response;
    -
    109 }
    -
    110 
    -
    111 bool ESP_SD::remove(const char * path){
    -
    112  if (path == NULL) return false;
    -
    113  String fullpath=path;
    -
    114  String pathname = fullpath.substring(0,fullpath.lastIndexOf("/"));
    -
    115  String filename = makeshortname(fullpath.substring(fullpath.lastIndexOf("/")+1));
    -
    116  if (pathname.length() == 0)pathname="/";
    -
    117  if (!openDir(pathname))return false;
    -
    118  SdFile file;
    -
    119  return file.remove(&workDir, filename.c_str());
    -
    120 }
    -
    121 
    -
    122 bool ESP_SD::dir_exists(const char * path){
    -
    123  return openDir(path);
    -
    124 }
    -
    125 
    -
    126 bool ESP_SD::rmdir(const char * path){
    -
    127  if (path == NULL) return false;
    -
    128  String fullpath=path;
    -
    129  if (fullpath=="/") return false;
    -
    130  if (!openDir(fullpath))return false;
    -
    131  return workDir.rmRfStar();
    -
    132 }
    -
    133 
    -
    134 bool ESP_SD::mkdir(const char * path){
    -
    135  if (path == NULL) return false;
    -
    136  String fullpath=path;
    -
    137  String pathname = fullpath.substring(0,fullpath.lastIndexOf("/"));
    -
    138  String filename = makeshortname(fullpath.substring(fullpath.lastIndexOf("/")+1));
    -
    139  if (pathname.length() == 0)pathname="/";
    -
    140  if (!openDir(pathname))return false;
    -
    141  SdFile file;
    -
    142  return file.mkdir(&workDir, filename.c_str());
    -
    143 }
    -
    144 
    -
    145 int16_t ESP_SD::read(){
    -
    146  if (!_readonly) return 0;
    -
    147  int16_t v = ((SdFile *)_sdfile)->read();
    -
    148  if (v!=-1)_pos++;
    -
    149  return v;
    -
    150 
    -
    151 }
    -
    152 
    -
    153 uint16_t ESP_SD::read(uint8_t * buf, uint16_t nbyte){
    -
    154  if (!_readonly) return 0;
    -
    155  int16_t v = ((SdFile *)_sdfile)->read(buf, nbyte);
    -
    156  if (v!=-1)_pos+=v;
    -
    157  return v;
    -
    158 }
    -
    159 
    -
    160 String ESP_SD::get_path_part(String data, int index){
    -
    161  int found = 0;
    -
    162  int strIndex[] = {0, -1};
    -
    163  int maxIndex;
    -
    164  String no_res;
    -
    165  String s = data;
    -
    166  s.trim();
    -
    167  if (s.length() == 0) return no_res;
    -
    168  maxIndex = s.length()-1;
    -
    169  if ((s[0] == '/') && (s.length() > 1)){
    -
    170  String s2 = &s[1];
    -
    171  s = s2;
    -
    172  }
    -
    173  for(int i=0; i<=maxIndex && found<=index; i++){
    -
    174  if(s.charAt(i)=='/' || i==maxIndex){
    -
    175  found++;
    -
    176  strIndex[0] = strIndex[1]+1;
    -
    177  strIndex[1] = (i == maxIndex) ? i+1 : i;
    -
    178  }
    -
    179  }
    -
    180 
    -
    181  return found>index ? s.substring(strIndex[0], strIndex[1]) : no_res;
    -
    182 }
    -
    183 
    -
    184 String ESP_SD::makeshortname(String longname, uint8_t index){
    -
    185  String s = longname;
    -
    186  String part_name;
    -
    187  String part_ext;
    -
    188  //Sanity check name is uppercase and no space
    -
    189  s.replace(" ","");
    -
    190  s.toUpperCase();
    -
    191  int pos = s.lastIndexOf(".");
    -
    192  //do we have extension ?
    -
    193  if (pos != -1) {
    -
    194  part_name = s.substring(0,pos);
    -
    195  if (part_name.lastIndexOf(".") !=-1) {
    -
    196  part_name.replace(".","");
    -
    197  //trick for short name but force ~1 at the end
    -
    198  part_name+=" ";
    -
    199  }
    -
    200  part_ext = s.substring(pos+1,pos+4);
    -
    201  } else {
    -
    202  part_name = s;
    -
    203  }
    -
    204  //check is under 8 char
    -
    205  if (part_name.length() > 8) {
    -
    206  //if not cut and use index
    -
    207  //check file exists is not part of this function
    -
    208  part_name = part_name.substring(0,6);
    -
    209  part_name += "~" + String(index);
    -
    210  }
    -
    211  //remove the possible " " for the trick
    -
    212  part_name.replace(" ","");
    -
    213  //create full short name
    -
    214  if (part_ext.length() > 0) part_name+="." + part_ext;
    -
    215  return part_name;
    -
    216 }
    -
    217 
    -
    218 String ESP_SD::makepath83(String longpath){
    -
    219  String path;
    -
    220  String tmp;
    -
    221  int index = 0;
    -
    222  tmp = get_path_part(longpath,index);
    -
    223  while (tmp.length() > 0) {
    -
    224  path += "/";
    -
    225  //TODO need to check short name index (~1) match actually the long name...
    -
    226  path += makeshortname (tmp);
    -
    227  index++;
    -
    228  tmp = get_path_part(longpath,index);
    -
    229  }
    -
    230  return path;
    -
    231 }
    -
    232 
    -
    233 
    -
    234 uint32_t ESP_SD::card_total_space(){
    -
    235 
    -
    236  return (512.00) * (sd_volume.clusterCount()) * (sd_volume.blocksPerCluster());
    -
    237 }
    -
    238 uint32_t ESP_SD::card_used_space(){
    -
    239  return (512.00) * (sd_volume.clusterCount() - sd_volume.freeClusterCount() ) * (sd_volume.blocksPerCluster());
    -
    240 }
    -
    241 
    -
    242 bool ESP_SD::openDir(String path){
    -
    243  static SdFile root;
    -
    244  static String name;
    -
    245  int index = 0;
    -
    246  //SdFile *parent;
    -
    247  if(root.isOpen())root.close();
    -
    248  if (!sd_volume.init(&(card.getSd2Card()))) {
    -
    249  return false;
    -
    250  }
    -
    251  if (!root.openRoot(&sd_volume)){
    -
    252  return false;
    -
    253  }
    -
    254  root.rewind();
    -
    255  workDir = root;
    -
    256  //parent = &workDir;
    -
    257  name = get_path_part(path,index);
    -
    258  while ((name.length() > 0) && (name!="/")) {
    -
    259  SdFile newDir;
    -
    260  if (!newDir.open(&root, name.c_str(), O_READ)) {
    -
    261  return false;
    -
    262  }
    -
    263  workDir=newDir;
    -
    264  //parent = &workDir;
    -
    265  index++;
    -
    266  if (index > MAX_DIR_DEPTH) {
    -
    267  return false;
    -
    268  }
    -
    269  name = get_path_part(path,index);
    -
    270  }
    -
    271  return true;
    -
    272 }
    -
    273 //TODO may be add date and use a struct for all info
    -
    274 bool ESP_SD::readDir(char name[13], uint32_t * size, bool * isFile){
    -
    275  if ((name == NULL) || (size==NULL)) {
    -
    276  return false;
    -
    277  }
    -
    278  * size = 0;
    -
    279  name[0]= 0;
    -
    280  * isFile = false;
    -
    281 
    -
    282  if ((workDir.readDir(&dir_info, NULL)) > 0){
    -
    283  workDir.dirName(dir_info,name);
    -
    284  * size = dir_info.fileSize;
    -
    285  if (DIR_IS_FILE(&dir_info))* isFile = true;
    -
    286  return true;
    -
    287  }
    -
    288  return false;
    -
    289 }
    -
    290 
    -
    291 
    -
    292 //TODO
    -
    293 /*
    -
    294 bool SD_file_timestamp(const char * path, uint8_t flag, uint16_t year, uint8_t month, uint8_t day,
    -
    295  uint8_t hour, uint8_t minute, uint8_t second){
    -
    296 }**/
    -
    297 
    -
    298 #endif
    -
    299 
    -
    300 #endif
    -
    -
    -
    int16_t read()
    - -
    uint32_t card_used_space()
    -
    String makepath83(String longpath)
    -
    uint32_t available()
    - -
    String makeshortname(String longname, uint8_t index=1)
    -
    bool mkdir(const char *path)
    -
    bool exists(const char *path)
    -
    int8_t card_status()
    -
    bool isopen()
    -
    bool remove(const char *path)
    -
    int16_t write(const uint8_t *data, uint16_t len)
    - -
    void close()
    -
    bool dir_exists(const char *path)
    -
    bool openDir(String path)
    -
    uint32_t size()
    -
    bool rmdir(const char *path)
    -
    bool * isFile
    Definition: sd_ESP32.h:50
    -
    uint32_t card_total_space()
    - -
    bool readDir(char name[13], uint32_t *size, bool *isFile)
    -
    bool open(const char *path, bool readonly=true)
    - - - - diff --git a/docs/html/sd___e_s_p32_8h.html b/docs/html/sd___e_s_p32_8h.html deleted file mode 100644 index 5af1ac3..0000000 --- a/docs/html/sd___e_s_p32_8h.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -ESP3D Lib: src/sd_ESP32.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    sd_ESP32.h File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Classes

    class  ESP_SD
     
    -
    -
    - - - - diff --git a/docs/html/sd___e_s_p32_8h_source.html b/docs/html/sd___e_s_p32_8h_source.html deleted file mode 100644 index 77e173a..0000000 --- a/docs/html/sd___e_s_p32_8h_source.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -ESP3D Lib: src/sd_ESP32.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    sd_ESP32.h
    -
    -
    -Go to the documentation of this file.
    1 
    -
    23 #ifndef _ESP_SD_H_
    -
    24 #define _ESP_SD_H_
    -
    25 class ESP_SD{
    -
    26  public:
    -
    27  ESP_SD();
    -
    28  ~ESP_SD();
    -
    29  int8_t card_status();
    -
    30  uint32_t card_total_space();
    -
    31  uint32_t card_used_space();
    -
    32  bool open(const char * path, bool readonly = true );
    -
    33  void close();
    -
    34  int16_t write(const uint8_t * data, uint16_t len);
    -
    35  int16_t write(const uint8_t byte);
    -
    36  uint16_t read(uint8_t * buf, uint16_t nbyte);
    -
    37  int16_t read();
    -
    38  uint32_t size();
    -
    39  uint32_t available();
    -
    40  bool exists(const char * path);
    -
    41  bool dir_exists(const char * path);
    -
    42  bool remove(const char * path);
    -
    43  bool rmdir(const char * path);
    -
    44  bool mkdir(const char * path);
    -
    45  bool isopen();
    -
    46  String makepath83(String longpath);
    -
    47  String makeshortname(String longname, uint8_t index = 1);
    -
    48  bool openDir(String path);
    -
    49  bool readDir(char name[13], uint32_t * size, bool * isFile);
    -
    50  bool * isFile;
    -
    51  private:
    -
    52  void * _sdfile;
    -
    53  uint32_t _size;
    -
    54  uint32_t _pos;
    -
    55  bool _readonly;
    -
    56  String get_path_part(String data, int index);
    -
    57 
    -
    58 };
    -
    59 #endif
    -
    -
    -
    int16_t read()
    -
    uint32_t card_used_space()
    -
    String makepath83(String longpath)
    -
    uint32_t available()
    - -
    String makeshortname(String longname, uint8_t index=1)
    - -
    bool mkdir(const char *path)
    -
    bool exists(const char *path)
    -
    int8_t card_status()
    -
    bool isopen()
    -
    bool remove(const char *path)
    -
    int16_t write(const uint8_t *data, uint16_t len)
    -
    void close()
    -
    bool dir_exists(const char *path)
    -
    bool openDir(String path)
    -
    uint32_t size()
    -
    bool rmdir(const char *path)
    -
    bool * isFile
    Definition: sd_ESP32.h:50
    -
    uint32_t card_total_space()
    - -
    bool readDir(char name[13], uint32_t *size, bool *isFile)
    -
    bool open(const char *path, bool readonly=true)
    - - - - diff --git a/docs/html/search/all_0.html b/docs/html/search/all_0.html deleted file mode 100644 index 26dd244..0000000 --- a/docs/html/search/all_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_0.js b/docs/html/search/all_0.js deleted file mode 100644 index 2ff6a5f..0000000 --- a/docs/html/search/all_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5fwifi_5fconfig_5fh_0',['_WIFI_CONFIG_H',['../wificonfig_8h.html#ab8b348667ac28cf627ba1f017ab8ce37',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/all_1.html b/docs/html/search/all_1.html deleted file mode 100644 index 8eb215b..0000000 --- a/docs/html/search/all_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_1.js b/docs/html/search/all_1.js deleted file mode 100644 index 157463a..0000000 --- a/docs/html/search/all_1.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['ap_5fchannel_5fentry_1',['AP_CHANNEL_ENTRY',['../wificonfig_8h.html#a0333044a6d9118e5b5a39d1b354788d7',1,'wificonfig.h']]], - ['ap_5fip_5fentry_2',['AP_IP_ENTRY',['../wificonfig_8h.html#ad82b92046f9a56e21ad90268859267b4',1,'wificonfig.h']]], - ['ap_5fpwd_5fentry_3',['AP_PWD_ENTRY',['../wificonfig_8h.html#ae2f332a9b16c4c790c8c6cf2adb9e0ff',1,'wificonfig.h']]], - ['ap_5fssid_5fentry_4',['AP_SSID_ENTRY',['../wificonfig_8h.html#a328808fc35a09a2fb313deac34b9d82c',1,'wificonfig.h']]], - ['attachws_5',['attachWS',['../class_serial__2___socket.html#a2d179a197b7735d79dba9409f1efd9a7',1,'Serial_2_Socket']]], - ['available_6',['available',['../class_e_s_p___s_d.html#a3474b13136a71ab6ea2afbe14025d9f9',1,'ESP_SD::available()'],['../class_serial__2___socket.html#a2f94f78cf1a565de82d05307e708ff38',1,'Serial_2_Socket::available()']]] -]; diff --git a/docs/html/search/all_10.html b/docs/html/search/all_10.html deleted file mode 100644 index 6fd3a4a..0000000 --- a/docs/html/search/all_10.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_10.js b/docs/html/search/all_10.js deleted file mode 100644 index 597bf69..0000000 --- a/docs/html/search/all_10.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['sd_5fesp32_2ecpp_109',['sd_ESP32.cpp',['../sd___e_s_p32_8cpp.html',1,'']]], - ['sd_5fesp32_2eh_110',['sd_ESP32.h',['../sd___e_s_p32_8h.html',1,'']]], - ['serial2socket_111',['Serial2Socket',['../serial2socket_8h.html#aa7804a9d5cfd98917275be16a5d6556a',1,'serial2socket.h']]], - ['serial2socket_2ecpp_112',['serial2socket.cpp',['../serial2socket_8cpp.html',1,'']]], - ['serial2socket_2eh_113',['serial2socket.h',['../serial2socket_8h.html',1,'']]], - ['serial_5f2_5fsocket_114',['Serial_2_Socket',['../class_serial__2___socket.html',1,'Serial_2_Socket'],['../class_serial__2___socket.html#a342b89d67032d2e8ec97afefa4819f32',1,'Serial_2_Socket::Serial_2_Socket()']]], - ['size_115',['size',['../class_e_s_p___s_d.html#abf4072cccbb5a4ef00a32e28998a2dcf',1,'ESP_SD']]], - ['sta_5fgw_5fentry_116',['STA_GW_ENTRY',['../wificonfig_8h.html#a6c7d5dfc16c16ac5a4859a7936865b94',1,'wificonfig.h']]], - ['sta_5fip_5fentry_117',['STA_IP_ENTRY',['../wificonfig_8h.html#addbe6db6729643c92834d206336a5158',1,'wificonfig.h']]], - ['sta_5fip_5fmode_5fentry_118',['STA_IP_MODE_ENTRY',['../wificonfig_8h.html#ae5a8d9779d8565f582d7ae71c025af85',1,'wificonfig.h']]], - ['sta_5fmk_5fentry_119',['STA_MK_ENTRY',['../wificonfig_8h.html#a3b37d58c5eac7eb13a5caad6a5d215e4',1,'wificonfig.h']]], - ['sta_5fpwd_5fentry_120',['STA_PWD_ENTRY',['../wificonfig_8h.html#a7827bce4c2ae2abd7d226c5b6b65455a',1,'wificonfig.h']]], - ['sta_5fssid_5fentry_121',['STA_SSID_ENTRY',['../wificonfig_8h.html#a2edda7833f2fd41413444a8464bcc6d0',1,'wificonfig.h']]], - ['startap_122',['StartAP',['../class_wi_fi_config.html#a0983d19d571709a1ae0e8ef792a3babe',1,'WiFiConfig']]], - ['startsta_123',['StartSTA',['../class_wi_fi_config.html#a1860d6ab8d817ed15fc32b91cb02ef6f',1,'WiFiConfig']]], - ['static_5fmode_124',['STATIC_MODE',['../wificonfig_8h.html#a0c7b7c02a0a08deeca4534279ffe43b5',1,'wificonfig.h']]], - ['stopwifi_125',['StopWiFi',['../class_wi_fi_config.html#a27890e9bff0d16bacce8c77fbb2404bb',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/all_11.html b/docs/html/search/all_11.html deleted file mode 100644 index f78343b..0000000 --- a/docs/html/search/all_11.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_11.js b/docs/html/search/all_11.js deleted file mode 100644 index 5efc47e..0000000 --- a/docs/html/search/all_11.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['telnet_5fenable_5fentry_126',['TELNET_ENABLE_ENTRY',['../wificonfig_8h.html#ab941d43500accae48d4317c960fde3a0',1,'wificonfig.h']]], - ['telnet_5fport_5fentry_127',['TELNET_PORT_ENTRY',['../wificonfig_8h.html#a701fb00a86117a4d6d2c34d060fe1676',1,'wificonfig.h']]], - ['txbuffersize_128',['TXBUFFERSIZE',['../serial2socket_8h.html#a8c651ff98c42106f3a14ee4225677cc8',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/all_12.html b/docs/html/search/all_12.html deleted file mode 100644 index dd9ff1d..0000000 --- a/docs/html/search/all_12.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_12.js b/docs/html/search/all_12.js deleted file mode 100644 index 5017916..0000000 --- a/docs/html/search/all_12.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['wait_129',['wait',['../class_wi_fi_config.html#aed378c1c4931f96a204bf90248db7cdb',1,'WiFiConfig']]], - ['web_5fserver_130',['Web_Server',['../class_web___server.html',1,'Web_Server'],['../class_web___server.html#ad3aecb228288dd5b2eabfe7a75359025',1,'Web_Server::Web_Server()'],['../web__server_8h.html#a4868e08e80c4b2c1456bf0f8d5c78dd8',1,'web_server(): web_server.h']]], - ['web_5fserver_2ecpp_131',['web_server.cpp',['../web__server_8cpp.html',1,'']]], - ['web_5fserver_2eh_132',['web_server.h',['../web__server_8h.html',1,'']]], - ['wifi_5fconfig_133',['wifi_config',['../wificonfig_8h.html#a17f30097832457731475d17a590b4654',1,'wificonfig.h']]], - ['wifi_5fservices_134',['wifi_services',['../wifiservices_8h.html#a5676e160d5e6622a97db6b98a98a3807',1,'wifiservices.h']]], - ['wificonfig_135',['WiFiConfig',['../class_wi_fi_config.html',1,'WiFiConfig'],['../class_wi_fi_config.html#ab7ecc980e32d91b9e71d96dc1b040092',1,'WiFiConfig::WiFiConfig()']]], - ['wificonfig_2ecpp_136',['wificonfig.cpp',['../wificonfig_8cpp.html',1,'']]], - ['wificonfig_2eh_137',['wificonfig.h',['../wificonfig_8h.html',1,'']]], - ['wifiservices_138',['WiFiServices',['../class_wi_fi_services.html',1,'WiFiServices'],['../class_wi_fi_services.html#a5eec4b6f6f1b2356f3382510c7f5153c',1,'WiFiServices::WiFiServices()']]], - ['wifiservices_2ecpp_139',['wifiservices.cpp',['../wifiservices_8cpp.html',1,'']]], - ['wifiservices_2eh_140',['wifiservices.h',['../wifiservices_8h.html',1,'']]], - ['write_141',['write',['../class_e_s_p___s_d.html#a5eb7e01dfdca42b88916a6185bcd8688',1,'ESP_SD::write(const uint8_t *data, uint16_t len)'],['../class_e_s_p___s_d.html#acfacb5636a4bc264b51bc06bc64f651b',1,'ESP_SD::write(const uint8_t byte)'],['../class_serial__2___socket.html#ab15b934138a9c888421068acfb67e8e8',1,'Serial_2_Socket::write(uint8_t c)'],['../class_serial__2___socket.html#ab8377b220a1d47a319b90e4d77adc230',1,'Serial_2_Socket::write(const uint8_t *buffer, size_t size)'],['../class_serial__2___socket.html#ac938fbb6ee98767f1ea6e0d5ee32493a',1,'Serial_2_Socket::write(const char *s)'],['../class_serial__2___socket.html#a725d17a85adfcb8251702f4b57cf4295',1,'Serial_2_Socket::write(unsigned long n)'],['../class_serial__2___socket.html#a0a853961a44fd45e5c991ed01e8dc6f3',1,'Serial_2_Socket::write(long n)'],['../class_serial__2___socket.html#a8f7fae75d831d77ed36fe7578ef903b9',1,'Serial_2_Socket::write(unsigned int n)'],['../class_serial__2___socket.html#a5e27a8c2524dc371dccbd3103f670cca',1,'Serial_2_Socket::write(int n)']]] -]; diff --git a/docs/html/search/all_13.html b/docs/html/search/all_13.html deleted file mode 100644 index 2611a10..0000000 --- a/docs/html/search/all_13.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_13.js b/docs/html/search/all_13.js deleted file mode 100644 index 8e856b8..0000000 --- a/docs/html/search/all_13.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['xstr_142',['XSTR',['../esplibconfig_8h.html#a8c298db9f79be08b2f370cef995d799b',1,'esplibconfig.h']]], - ['xstr_5f_143',['XSTR_',['../esplibconfig_8h.html#a995e2a1a0a46b8e40332b4c4290bcd05',1,'esplibconfig.h']]] -]; diff --git a/docs/html/search/all_14.html b/docs/html/search/all_14.html deleted file mode 100644 index 72d12e9..0000000 --- a/docs/html/search/all_14.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_14.js b/docs/html/search/all_14.js deleted file mode 100644 index f197c8c..0000000 --- a/docs/html/search/all_14.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['_7eesp_5fsd_144',['~ESP_SD',['../class_e_s_p___s_d.html#a852571834c4c862077dab2104d539d9d',1,'ESP_SD']]], - ['_7eserial_5f2_5fsocket_145',['~Serial_2_Socket',['../class_serial__2___socket.html#ad7352e92a9d7837f4657f077dae701c6',1,'Serial_2_Socket']]], - ['_7eweb_5fserver_146',['~Web_Server',['../class_web___server.html#ad70b99561e3553404b33a262963de72b',1,'Web_Server']]], - ['_7ewificonfig_147',['~WiFiConfig',['../class_wi_fi_config.html#afa73eed5ba10b1b86da8013bca38c0b9',1,'WiFiConfig']]], - ['_7ewifiservices_148',['~WiFiServices',['../class_wi_fi_services.html#a7f5fe522ff44dab1ec1b270183f89857',1,'WiFiServices']]] -]; diff --git a/docs/html/search/all_2.html b/docs/html/search/all_2.html deleted file mode 100644 index b26d916..0000000 --- a/docs/html/search/all_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_2.js b/docs/html/search/all_2.js deleted file mode 100644 index 64821b7..0000000 --- a/docs/html/search/all_2.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['baudrate_7',['baudRate',['../class_serial__2___socket.html#a32d3054e537d54d14a5d8b5573002602',1,'Serial_2_Socket']]], - ['begin_8',['begin',['../class_serial__2___socket.html#a5fd33907b0c6db7390f899eaa2b20848',1,'Serial_2_Socket::begin()'],['../class_web___server.html#a856e18f69bf41ae5cb0c530d63823f39',1,'Web_Server::begin()'],['../class_wi_fi_config.html#a6f2a31ecc4a60bee3835d23b374e7ab7',1,'WiFiConfig::begin()'],['../class_wi_fi_services.html#a33ed941b1c764817764807acf6c82557',1,'WiFiServices::begin()']]] -]; diff --git a/docs/html/search/all_3.html b/docs/html/search/all_3.html deleted file mode 100644 index b61b96f..0000000 --- a/docs/html/search/all_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_3.js b/docs/html/search/all_3.js deleted file mode 100644 index 1d0d1d9..0000000 --- a/docs/html/search/all_3.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['card_5fstatus_9',['card_status',['../class_e_s_p___s_d.html#a6aaf0c538574f5a4f58df66e78cad9e1',1,'ESP_SD']]], - ['card_5ftotal_5fspace_10',['card_total_space',['../class_e_s_p___s_d.html#a939244c6b6b6b81f70503044b4274583',1,'ESP_SD']]], - ['card_5fused_5fspace_11',['card_used_space',['../class_e_s_p___s_d.html#ae91ce4b54e0c79f2cb13c9bdaab2c81d',1,'ESP_SD']]], - ['close_12',['close',['../class_e_s_p___s_d.html#a8a216a25688ba0a7afdebbb1b98f46b2',1,'ESP_SD']]] -]; diff --git a/docs/html/search/all_4.html b/docs/html/search/all_4.html deleted file mode 100644 index 06de155..0000000 --- a/docs/html/search/all_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_4.js b/docs/html/search/all_4.js deleted file mode 100644 index 716b25e..0000000 --- a/docs/html/search/all_4.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['default_5fap_5fchannel_13',['DEFAULT_AP_CHANNEL',['../wificonfig_8h.html#aace78dce19c66ced8bd85f78f00437e9',1,'wificonfig.h']]], - ['default_5fap_5fip_14',['DEFAULT_AP_IP',['../wificonfig_8h.html#ad431da9b257e7776871842b4fff1d185',1,'wificonfig.h']]], - ['default_5fap_5fmk_15',['DEFAULT_AP_MK',['../wificonfig_8h.html#a888f906683687b2123bb8ff06bace748',1,'wificonfig.h']]], - ['default_5fap_5fpwd_16',['DEFAULT_AP_PWD',['../wificonfig_8h.html#a3190230a1d294a04d89da9120b7fe41a',1,'wificonfig.h']]], - ['default_5fap_5fssid_17',['DEFAULT_AP_SSID',['../wificonfig_8h.html#a6ec134dde0c23e4f187982ad0200bf23',1,'wificonfig.h']]], - ['default_5fhostname_18',['DEFAULT_HOSTNAME',['../wificonfig_8h.html#acbd0b3def6b58577376d5c5edbc1f8d1',1,'wificonfig.h']]], - ['default_5fhttp_5fstate_19',['DEFAULT_HTTP_STATE',['../wificonfig_8h.html#aa10f0f25989a209626afbb29fc5de2c3',1,'wificonfig.h']]], - ['default_5fsta_5fgw_20',['DEFAULT_STA_GW',['../wificonfig_8h.html#a387af2bdc881b471a583e6c4aaae6289',1,'wificonfig.h']]], - ['default_5fsta_5fip_21',['DEFAULT_STA_IP',['../wificonfig_8h.html#aed5bca15e135aa994162121f211f0dd2',1,'wificonfig.h']]], - ['default_5fsta_5fmk_22',['DEFAULT_STA_MK',['../wificonfig_8h.html#ad1a4fe20941a0a89b6adb7c69074a563',1,'wificonfig.h']]], - ['default_5fsta_5fpwd_23',['DEFAULT_STA_PWD',['../wificonfig_8h.html#ae8425a4cc2a76d12c86cd4158dab3f9f',1,'wificonfig.h']]], - ['default_5fsta_5fssid_24',['DEFAULT_STA_SSID',['../wificonfig_8h.html#aeded7ff5e2b188ad18834aabee0a9b62',1,'wificonfig.h']]], - ['default_5fwebserver_5fport_25',['DEFAULT_WEBSERVER_PORT',['../wificonfig_8h.html#a4a81954ed709f28696d5f8f8d469da18',1,'wificonfig.h']]], - ['default_5fwifi_5fmode_26',['DEFAULT_WIFI_MODE',['../wificonfig_8h.html#a8a1cc8339f64fc2d7d12cb6cdf77ea67',1,'wificonfig.h']]], - ['detachws_27',['detachWS',['../class_serial__2___socket.html#a84514dd9015413d35a2cc6718cc96ab4',1,'Serial_2_Socket']]], - ['dhcp_5fmode_28',['DHCP_MODE',['../wificonfig_8h.html#aff327f17465177da582d6244e74e8528',1,'wificonfig.h']]], - ['dir_5fexists_29',['dir_exists',['../class_e_s_p___s_d.html#afba93faa60b58ec284a38bac1174a680',1,'ESP_SD']]] -]; diff --git a/docs/html/search/all_5.html b/docs/html/search/all_5.html deleted file mode 100644 index 2544c4e..0000000 --- a/docs/html/search/all_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_5.js b/docs/html/search/all_5.js deleted file mode 100644 index 52e40a5..0000000 --- a/docs/html/search/all_5.js +++ /dev/null @@ -1,24 +0,0 @@ -var searchData= -[ - ['enable_5fcaptive_5fportal_30',['ENABLE_CAPTIVE_PORTAL',['../wificonfig_8h.html#aa926938be2f167d492c5d6db9a278a76',1,'wificonfig.h']]], - ['enable_5fhttp_31',['ENABLE_HTTP',['../wificonfig_8h.html#a9352afc0fc80fea23a30ccd4fda2d98e',1,'wificonfig.h']]], - ['enable_5fmdns_32',['ENABLE_MDNS',['../wificonfig_8h.html#a463ce90dbb1a03304941593d0bfb83d4',1,'wificonfig.h']]], - ['enable_5fota_33',['ENABLE_OTA',['../wificonfig_8h.html#a069cace8124fbff2bca1b7f7986d173e',1,'wificonfig.h']]], - ['enable_5fserial2socket_5fin_34',['ENABLE_SERIAL2SOCKET_IN',['../wificonfig_8h.html#a2025c618377493b70e059f66dfe24f53',1,'wificonfig.h']]], - ['enable_5fserial2socket_5fout_35',['ENABLE_SERIAL2SOCKET_OUT',['../wificonfig_8h.html#a8bed93294be273410481362296a4a69d',1,'wificonfig.h']]], - ['enable_5fssdp_36',['ENABLE_SSDP',['../wificonfig_8h.html#a1855f51f6333f7731bfe585adbbf8cdf',1,'wificonfig.h']]], - ['end_37',['end',['../class_serial__2___socket.html#a44e8e62162dccce91cbf19bd35398207',1,'Serial_2_Socket::end()'],['../class_web___server.html#a22e9125231c60d81c7b32bc9f34205b9',1,'Web_Server::end()'],['../class_wi_fi_config.html#a842487818fddb26a547ac162467383bb',1,'WiFiConfig::end()'],['../class_wi_fi_services.html#a606dfb65e73d2a98051f7dd9c42cbe26',1,'WiFiServices::end()']]], - ['esp3dlib_38',['Esp3DLib',['../class_esp3_d_lib.html',1,'Esp3DLib'],['../class_esp3_d_lib.html#a5dc83711fcdb32f17cb26177361a5cbb',1,'Esp3DLib::Esp3DLib()'],['../esp3dlib_8h.html#aba2ef588824d50eb5139cbc4ceb94afa',1,'esp3dlib(): esp3dlib.h']]], - ['esp3dlib_2ecpp_39',['esp3dlib.cpp',['../esp3dlib_8cpp.html',1,'']]], - ['esp3dlib_2eh_40',['esp3dlib.h',['../esp3dlib_8h.html',1,'']]], - ['esp_5fapply_5fnow_41',['ESP_APPLY_NOW',['../wificonfig_8h.html#a4ab0bcad4a107c4701c29f800d2c3bb8',1,'wificonfig.h']]], - ['esp_5fsave_5fonly_42',['ESP_SAVE_ONLY',['../wificonfig_8h.html#a1f70d78cdf58380922d6cc4453d9eea9',1,'wificonfig.h']]], - ['esp_5fsd_43',['ESP_SD',['../class_e_s_p___s_d.html',1,'ESP_SD'],['../class_e_s_p___s_d.html#a817e53986873586c0c55e078e3d0547d',1,'ESP_SD::ESP_SD()']]], - ['esp_5fwifi_5fap_44',['ESP_WIFI_AP',['../wificonfig_8h.html#a837bee3cd90959fa9c928100ef246389',1,'wificonfig.h']]], - ['esp_5fwifi_5fmode_45',['ESP_WIFI_MODE',['../wificonfig_8h.html#ac21ce1aaba6806cfc837f07c3850cd47',1,'wificonfig.h']]], - ['esp_5fwifi_5foff_46',['ESP_WIFI_OFF',['../wificonfig_8h.html#a39fc4abada827a1f52b42a95f47b4e2c',1,'wificonfig.h']]], - ['esp_5fwifi_5fsta_47',['ESP_WIFI_STA',['../wificonfig_8h.html#ade524ef86e44ae63840a77397e987132',1,'wificonfig.h']]], - ['esplibconfig_2eh_48',['esplibconfig.h',['../esplibconfig_8h.html',1,'']]], - ['espresponsestream_49',['ESPResponseStream',['../class_e_s_p_response_stream.html',1,'ESPResponseStream'],['../class_e_s_p_response_stream.html#aac3ccc2b5f126f6c57c1a4adc8671a9f',1,'ESPResponseStream::ESPResponseStream()']]], - ['exists_50',['exists',['../class_e_s_p___s_d.html#ae497f0993b7d47eadb14077cf112c6da',1,'ESP_SD']]] -]; diff --git a/docs/html/search/all_6.html b/docs/html/search/all_6.html deleted file mode 100644 index 43f14ea..0000000 --- a/docs/html/search/all_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_6.js b/docs/html/search/all_6.js deleted file mode 100644 index bdce001..0000000 --- a/docs/html/search/all_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['flush_51',['flush',['../class_serial__2___socket.html#a1cfbe7618e10abb39376f6d3e1053b29',1,'Serial_2_Socket::flush()'],['../class_e_s_p_response_stream.html#ae9b2873d7f30b9c533feeac2edb79296',1,'ESPResponseStream::flush()']]], - ['flushtimeout_52',['FLUSHTIMEOUT',['../serial2socket_8h.html#a4731ef512b433abe9b4c9e709c214ace',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/all_7.html b/docs/html/search/all_7.html deleted file mode 100644 index af52f82..0000000 --- a/docs/html/search/all_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_7.js b/docs/html/search/all_7.js deleted file mode 100644 index 95af44d..0000000 --- a/docs/html/search/all_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['get_5fclient_5fid_53',['get_client_ID',['../class_web___server.html#a25715096be77cb11a7a4899c9c83e25d',1,'Web_Server']]], - ['getsignal_54',['getSignal',['../class_wi_fi_config.html#a9d4cb0e58c352001800e6c5f1c1a9c0b',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/all_8.html b/docs/html/search/all_8.html deleted file mode 100644 index cf2b5df..0000000 --- a/docs/html/search/all_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_8.js b/docs/html/search/all_8.js deleted file mode 100644 index 3b407c2..0000000 --- a/docs/html/search/all_8.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['handle_55',['handle',['../class_web___server.html#a783f954fbfd328f401d32a5902d707fd',1,'Web_Server::handle()'],['../class_wi_fi_config.html#a9db03f74a9446e8b8319eb0165df8e0a',1,'WiFiConfig::handle()'],['../class_wi_fi_services.html#a52ec8590a15440907e5c6200849f3a4a',1,'WiFiServices::handle()']]], - ['handle_5fflush_56',['handle_flush',['../class_serial__2___socket.html#aebccb6a24539c03ad665b62ae0b8cee7',1,'Serial_2_Socket']]], - ['hidden_5fpassword_57',['HIDDEN_PASSWORD',['../wificonfig_8h.html#af5ca3daab5ff5c1b7a01e0b5ca75d745',1,'wificonfig.h']]], - ['hostname_5fentry_58',['HOSTNAME_ENTRY',['../wificonfig_8h.html#a431d9f136ad2d23ec637102eae795a34',1,'wificonfig.h']]], - ['http_5fenable_5fentry_59',['HTTP_ENABLE_ENTRY',['../wificonfig_8h.html#a6cbf45cc1958b46f7583ba446e910c05',1,'wificonfig.h']]], - ['http_5fport_5fentry_60',['HTTP_PORT_ENTRY',['../wificonfig_8h.html#a0e25ab4d77c42e5b94e113ac70fa0b7b',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/all_9.html b/docs/html/search/all_9.html deleted file mode 100644 index 690785a..0000000 --- a/docs/html/search/all_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_9.js b/docs/html/search/all_9.js deleted file mode 100644 index 14e7ed6..0000000 --- a/docs/html/search/all_9.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['init_61',['init',['../class_esp3_d_lib.html#a297a923379840d50682075a9422ae407',1,'Esp3DLib']]], - ['ip_5fint_5ffrom_5fstring_62',['IP_int_from_string',['../class_wi_fi_config.html#a3395d3ca53ab104003a983ed46c502eb',1,'WiFiConfig']]], - ['ip_5fstring_5ffrom_5fint_63',['IP_string_from_int',['../class_wi_fi_config.html#a966423815423191a61e46eae16aac2e8',1,'WiFiConfig']]], - ['isfile_64',['isFile',['../class_e_s_p___s_d.html#a181e755c79ffe79d25e8b74385be85f6',1,'ESP_SD']]], - ['ishostnamevalid_65',['isHostnameValid',['../class_wi_fi_config.html#a0fb22a5b2e6148a1419027bfd98cca29',1,'WiFiConfig']]], - ['isopen_66',['isopen',['../class_e_s_p___s_d.html#ae088288ee6fb745d499f99cc2f3353c3',1,'ESP_SD']]], - ['ispasswordvalid_67',['isPasswordValid',['../class_wi_fi_config.html#ae06cd3ccefd32cff9634a48db00db63e',1,'WiFiConfig']]], - ['isssidvalid_68',['isSSIDValid',['../class_wi_fi_config.html#a872ad338671f9f48b9834ef45bd7c85a',1,'WiFiConfig']]], - ['isvalidip_69',['isValidIP',['../class_wi_fi_config.html#adcd8ae215a5a47ee68aaacd02ac3b5ce',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/all_a.html b/docs/html/search/all_a.html deleted file mode 100644 index f2f3d3a..0000000 --- a/docs/html/search/all_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_a.js b/docs/html/search/all_a.js deleted file mode 100644 index f93743e..0000000 --- a/docs/html/search/all_a.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['level_5fadmin_70',['LEVEL_ADMIN',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a4ddf9e0f200403030b62492db571d9bb',1,'web_server.h']]], - ['level_5fauthenticate_5ftype_71',['level_authenticate_type',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6',1,'web_server.h']]], - ['level_5fguest_72',['LEVEL_GUEST',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a162efbbc3db6c397f7d1b04b35720ff0',1,'web_server.h']]], - ['level_5fuser_73',['LEVEL_USER',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a06598e45d399ba6c77371ff2b42dd41c',1,'web_server.h']]] -]; diff --git a/docs/html/search/all_b.html b/docs/html/search/all_b.html deleted file mode 100644 index 14f3403..0000000 --- a/docs/html/search/all_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_b.js b/docs/html/search/all_b.js deleted file mode 100644 index 0a09584..0000000 --- a/docs/html/search/all_b.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['makepath83_74',['makepath83',['../class_e_s_p___s_d.html#a9e64df598230da334409993890f11551',1,'ESP_SD']]], - ['makeshortname_75',['makeshortname',['../class_e_s_p___s_d.html#ab807ae35195d76b24121e455c7a0375b',1,'ESP_SD']]], - ['marlin_5fpath_76',['MARLIN_PATH',['../esplibconfig_8h.html#a1ede17eaf525776d01a001a18befafdc',1,'esplibconfig.h']]], - ['max_5fchannel_77',['MAX_CHANNEL',['../wificonfig_8h.html#a53550b02192e90e64ea2ecce606fc361',1,'wificonfig.h']]], - ['max_5fhostname_5flength_78',['MAX_HOSTNAME_LENGTH',['../wificonfig_8h.html#ad5570a4ab8c9d790b0e8f7c15378d582',1,'wificonfig.h']]], - ['max_5fhttp_5fport_79',['MAX_HTTP_PORT',['../wificonfig_8h.html#a43437215bdccd0e374c982e18ea542bc',1,'wificonfig.h']]], - ['max_5fpassword_5flength_80',['MAX_PASSWORD_LENGTH',['../wificonfig_8h.html#a7f264fafe78080f8ea68715854b9bc24',1,'wificonfig.h']]], - ['max_5fssid_5flength_81',['MAX_SSID_LENGTH',['../wificonfig_8h.html#a1a3e371dfda6b729e6c7a890cf94f6ca',1,'wificonfig.h']]], - ['max_5ftelnet_5fport_82',['MAX_TELNET_PORT',['../wificonfig_8h.html#aa85ed0fa1387a2da58dc1837a21ab1d4',1,'wificonfig.h']]], - ['min_5fchannel_83',['MIN_CHANNEL',['../wificonfig_8h.html#aa113b8d2f73b3bfbeeda47091a1bf203',1,'wificonfig.h']]], - ['min_5fhostname_5flength_84',['MIN_HOSTNAME_LENGTH',['../wificonfig_8h.html#adb05470ece4dd649965e1a2255a5df1b',1,'wificonfig.h']]], - ['min_5fhttp_5fport_85',['MIN_HTTP_PORT',['../wificonfig_8h.html#af9616ef1305aff821ce7443db3e22f2d',1,'wificonfig.h']]], - ['min_5fpassword_5flength_86',['MIN_PASSWORD_LENGTH',['../wificonfig_8h.html#a696683541069982ec245fb7bf21720e8',1,'wificonfig.h']]], - ['min_5fssid_5flength_87',['MIN_SSID_LENGTH',['../wificonfig_8h.html#ada2533c8a1dcfad1d53e138a3eb163be',1,'wificonfig.h']]], - ['min_5ftelnet_5fport_88',['MIN_TELNET_PORT',['../wificonfig_8h.html#a35d5c2914ffd37d9d7d291e6385bc0cc',1,'wificonfig.h']]], - ['mkdir_89',['mkdir',['../class_e_s_p___s_d.html#a0e1854e81305bf626bd54390c2d62321',1,'ESP_SD']]], - ['myserial0_90',['MYSERIAL0',['../esplibconfig_8h.html#a9de3b96e5997b932cf0e423f5043629c',1,'esplibconfig.h']]] -]; diff --git a/docs/html/search/all_c.html b/docs/html/search/all_c.html deleted file mode 100644 index da60ab8..0000000 --- a/docs/html/search/all_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_c.js b/docs/html/search/all_c.js deleted file mode 100644 index be86e9b..0000000 --- a/docs/html/search/all_c.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['namespace_91',['NAMESPACE',['../wificonfig_8h.html#afa7779fe56b160955b535cd6a8aaf8f4',1,'wificonfig.h']]], - ['nofile_2eh_92',['nofile.h',['../nofile_8h.html',1,'']]] -]; diff --git a/docs/html/search/all_d.html b/docs/html/search/all_d.html deleted file mode 100644 index bc376fe..0000000 --- a/docs/html/search/all_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_d.js b/docs/html/search/all_d.js deleted file mode 100644 index bfd3948..0000000 --- a/docs/html/search/all_d.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['open_93',['open',['../class_e_s_p___s_d.html#a711c7a7ac7d491e3c3c1a063f48624ab',1,'ESP_SD']]], - ['opendir_94',['openDir',['../class_e_s_p___s_d.html#a5cbfd0f7a7a913204ce3078893ed912e',1,'ESP_SD']]], - ['operator_20bool_95',['operator bool',['../class_serial__2___socket.html#aa9a7cb15a5b2a9b4efce3195b41a49ba',1,'Serial_2_Socket']]] -]; diff --git a/docs/html/search/all_e.html b/docs/html/search/all_e.html deleted file mode 100644 index 2e3c74d..0000000 --- a/docs/html/search/all_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_e.js b/docs/html/search/all_e.js deleted file mode 100644 index 1bdfc49..0000000 --- a/docs/html/search/all_e.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['page_5fnofiles_5fsize_96',['PAGE_NOFILES_SIZE',['../nofile_8h.html#af1ab057626205fe1d5dae5474f4774aa',1,'nofile.h']]], - ['parse_97',['parse',['../class_esp3_d_lib.html#a8b59aad396ec458c3f3906bdc350c5bb',1,'Esp3DLib']]], - ['peek_98',['peek',['../class_serial__2___socket.html#aa60f74ff08f5b8887419da8bf865ab48',1,'Serial_2_Socket']]], - ['print_99',['print',['../class_e_s_p_response_stream.html#adddd77eae9d59e530f97123b5f76ecca',1,'ESPResponseStream']]], - ['println_100',['println',['../class_e_s_p_response_stream.html#a6d7a9ad280fabd0e4576ba4fbc779d41',1,'ESPResponseStream']]], - ['progmem_101',['PROGMEM',['../nofile_8h.html#a4bb34006af954f26383a423ffe5b887f',1,'nofile.h']]], - ['push_102',['push',['../class_serial__2___socket.html#a69f7862d75bc0e945b118fc1d8fba9cf',1,'Serial_2_Socket']]] -]; diff --git a/docs/html/search/all_f.html b/docs/html/search/all_f.html deleted file mode 100644 index 246f8ab..0000000 --- a/docs/html/search/all_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/all_f.js b/docs/html/search/all_f.js deleted file mode 100644 index 8e14e91..0000000 --- a/docs/html/search/all_f.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['read_103',['read',['../class_e_s_p___s_d.html#a7d6c94f0cb6fcf0a0d014644c2300d3f',1,'ESP_SD::read(uint8_t *buf, uint16_t nbyte)'],['../class_e_s_p___s_d.html#a08bd2a5faf3ae537ef65cd7d5ba9812b',1,'ESP_SD::read()'],['../class_serial__2___socket.html#a3dc7e480d96e5e70ac0256357749825a',1,'Serial_2_Socket::read()']]], - ['readdir_104',['readDir',['../class_e_s_p___s_d.html#a1d90e39616a040395f2f317fb0d4f3f6',1,'ESP_SD']]], - ['remove_105',['remove',['../class_e_s_p___s_d.html#a977589ee73d8adf70d0f4993fe341103',1,'ESP_SD']]], - ['restart_5fesp_106',['restart_ESP',['../class_wi_fi_config.html#a75a10d14172d0f0de09dbce8058cd73b',1,'WiFiConfig']]], - ['rmdir_107',['rmdir',['../class_e_s_p___s_d.html#ac53dd5b6c423e96bb7947203c212b031',1,'ESP_SD']]], - ['rxbuffersize_108',['RXBUFFERSIZE',['../serial2socket_8h.html#a29d12c67e4b6e0ff96d7aa793757b094',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/classes_0.html b/docs/html/search/classes_0.html deleted file mode 100644 index f7e4c14..0000000 --- a/docs/html/search/classes_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_0.js b/docs/html/search/classes_0.js deleted file mode 100644 index b5a6a00..0000000 --- a/docs/html/search/classes_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['esp3dlib_149',['Esp3DLib',['../class_esp3_d_lib.html',1,'']]], - ['esp_5fsd_150',['ESP_SD',['../class_e_s_p___s_d.html',1,'']]], - ['espresponsestream_151',['ESPResponseStream',['../class_e_s_p_response_stream.html',1,'']]] -]; diff --git a/docs/html/search/classes_1.html b/docs/html/search/classes_1.html deleted file mode 100644 index c7ff4b3..0000000 --- a/docs/html/search/classes_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_1.js b/docs/html/search/classes_1.js deleted file mode 100644 index 9def5ae..0000000 --- a/docs/html/search/classes_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['serial_5f2_5fsocket_152',['Serial_2_Socket',['../class_serial__2___socket.html',1,'']]] -]; diff --git a/docs/html/search/classes_2.html b/docs/html/search/classes_2.html deleted file mode 100644 index 0d1e8a0..0000000 --- a/docs/html/search/classes_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/classes_2.js b/docs/html/search/classes_2.js deleted file mode 100644 index ff27063..0000000 --- a/docs/html/search/classes_2.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['web_5fserver_153',['Web_Server',['../class_web___server.html',1,'']]], - ['wificonfig_154',['WiFiConfig',['../class_wi_fi_config.html',1,'']]], - ['wifiservices_155',['WiFiServices',['../class_wi_fi_services.html',1,'']]] -]; diff --git a/docs/html/search/close.png b/docs/html/search/close.png deleted file mode 100644 index 9342d3d..0000000 Binary files a/docs/html/search/close.png and /dev/null differ diff --git a/docs/html/search/defines_0.html b/docs/html/search/defines_0.html deleted file mode 100644 index 2deb369..0000000 --- a/docs/html/search/defines_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_0.js b/docs/html/search/defines_0.js deleted file mode 100644 index fc9c18b..0000000 --- a/docs/html/search/defines_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5fwifi_5fconfig_5fh_240',['_WIFI_CONFIG_H',['../wificonfig_8h.html#ab8b348667ac28cf627ba1f017ab8ce37',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_1.html b/docs/html/search/defines_1.html deleted file mode 100644 index e0d0b6d..0000000 --- a/docs/html/search/defines_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_1.js b/docs/html/search/defines_1.js deleted file mode 100644 index bec08cb..0000000 --- a/docs/html/search/defines_1.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['ap_5fchannel_5fentry_241',['AP_CHANNEL_ENTRY',['../wificonfig_8h.html#a0333044a6d9118e5b5a39d1b354788d7',1,'wificonfig.h']]], - ['ap_5fip_5fentry_242',['AP_IP_ENTRY',['../wificonfig_8h.html#ad82b92046f9a56e21ad90268859267b4',1,'wificonfig.h']]], - ['ap_5fpwd_5fentry_243',['AP_PWD_ENTRY',['../wificonfig_8h.html#ae2f332a9b16c4c790c8c6cf2adb9e0ff',1,'wificonfig.h']]], - ['ap_5fssid_5fentry_244',['AP_SSID_ENTRY',['../wificonfig_8h.html#a328808fc35a09a2fb313deac34b9d82c',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_2.html b/docs/html/search/defines_2.html deleted file mode 100644 index 707f942..0000000 --- a/docs/html/search/defines_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_2.js b/docs/html/search/defines_2.js deleted file mode 100644 index bad8a0c..0000000 --- a/docs/html/search/defines_2.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['default_5fap_5fchannel_245',['DEFAULT_AP_CHANNEL',['../wificonfig_8h.html#aace78dce19c66ced8bd85f78f00437e9',1,'wificonfig.h']]], - ['default_5fap_5fip_246',['DEFAULT_AP_IP',['../wificonfig_8h.html#ad431da9b257e7776871842b4fff1d185',1,'wificonfig.h']]], - ['default_5fap_5fmk_247',['DEFAULT_AP_MK',['../wificonfig_8h.html#a888f906683687b2123bb8ff06bace748',1,'wificonfig.h']]], - ['default_5fap_5fpwd_248',['DEFAULT_AP_PWD',['../wificonfig_8h.html#a3190230a1d294a04d89da9120b7fe41a',1,'wificonfig.h']]], - ['default_5fap_5fssid_249',['DEFAULT_AP_SSID',['../wificonfig_8h.html#a6ec134dde0c23e4f187982ad0200bf23',1,'wificonfig.h']]], - ['default_5fhostname_250',['DEFAULT_HOSTNAME',['../wificonfig_8h.html#acbd0b3def6b58577376d5c5edbc1f8d1',1,'wificonfig.h']]], - ['default_5fhttp_5fstate_251',['DEFAULT_HTTP_STATE',['../wificonfig_8h.html#aa10f0f25989a209626afbb29fc5de2c3',1,'wificonfig.h']]], - ['default_5fsta_5fgw_252',['DEFAULT_STA_GW',['../wificonfig_8h.html#a387af2bdc881b471a583e6c4aaae6289',1,'wificonfig.h']]], - ['default_5fsta_5fip_253',['DEFAULT_STA_IP',['../wificonfig_8h.html#aed5bca15e135aa994162121f211f0dd2',1,'wificonfig.h']]], - ['default_5fsta_5fmk_254',['DEFAULT_STA_MK',['../wificonfig_8h.html#ad1a4fe20941a0a89b6adb7c69074a563',1,'wificonfig.h']]], - ['default_5fsta_5fpwd_255',['DEFAULT_STA_PWD',['../wificonfig_8h.html#ae8425a4cc2a76d12c86cd4158dab3f9f',1,'wificonfig.h']]], - ['default_5fsta_5fssid_256',['DEFAULT_STA_SSID',['../wificonfig_8h.html#aeded7ff5e2b188ad18834aabee0a9b62',1,'wificonfig.h']]], - ['default_5fwebserver_5fport_257',['DEFAULT_WEBSERVER_PORT',['../wificonfig_8h.html#a4a81954ed709f28696d5f8f8d469da18',1,'wificonfig.h']]], - ['default_5fwifi_5fmode_258',['DEFAULT_WIFI_MODE',['../wificonfig_8h.html#a8a1cc8339f64fc2d7d12cb6cdf77ea67',1,'wificonfig.h']]], - ['dhcp_5fmode_259',['DHCP_MODE',['../wificonfig_8h.html#aff327f17465177da582d6244e74e8528',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_3.html b/docs/html/search/defines_3.html deleted file mode 100644 index f30be10..0000000 --- a/docs/html/search/defines_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_3.js b/docs/html/search/defines_3.js deleted file mode 100644 index 3c1025d..0000000 --- a/docs/html/search/defines_3.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['enable_5fcaptive_5fportal_260',['ENABLE_CAPTIVE_PORTAL',['../wificonfig_8h.html#aa926938be2f167d492c5d6db9a278a76',1,'wificonfig.h']]], - ['enable_5fhttp_261',['ENABLE_HTTP',['../wificonfig_8h.html#a9352afc0fc80fea23a30ccd4fda2d98e',1,'wificonfig.h']]], - ['enable_5fmdns_262',['ENABLE_MDNS',['../wificonfig_8h.html#a463ce90dbb1a03304941593d0bfb83d4',1,'wificonfig.h']]], - ['enable_5fota_263',['ENABLE_OTA',['../wificonfig_8h.html#a069cace8124fbff2bca1b7f7986d173e',1,'wificonfig.h']]], - ['enable_5fserial2socket_5fin_264',['ENABLE_SERIAL2SOCKET_IN',['../wificonfig_8h.html#a2025c618377493b70e059f66dfe24f53',1,'wificonfig.h']]], - ['enable_5fserial2socket_5fout_265',['ENABLE_SERIAL2SOCKET_OUT',['../wificonfig_8h.html#a8bed93294be273410481362296a4a69d',1,'wificonfig.h']]], - ['enable_5fssdp_266',['ENABLE_SSDP',['../wificonfig_8h.html#a1855f51f6333f7731bfe585adbbf8cdf',1,'wificonfig.h']]], - ['esp_5fapply_5fnow_267',['ESP_APPLY_NOW',['../wificonfig_8h.html#a4ab0bcad4a107c4701c29f800d2c3bb8',1,'wificonfig.h']]], - ['esp_5fsave_5fonly_268',['ESP_SAVE_ONLY',['../wificonfig_8h.html#a1f70d78cdf58380922d6cc4453d9eea9',1,'wificonfig.h']]], - ['esp_5fwifi_5fap_269',['ESP_WIFI_AP',['../wificonfig_8h.html#a837bee3cd90959fa9c928100ef246389',1,'wificonfig.h']]], - ['esp_5fwifi_5fmode_270',['ESP_WIFI_MODE',['../wificonfig_8h.html#ac21ce1aaba6806cfc837f07c3850cd47',1,'wificonfig.h']]], - ['esp_5fwifi_5foff_271',['ESP_WIFI_OFF',['../wificonfig_8h.html#a39fc4abada827a1f52b42a95f47b4e2c',1,'wificonfig.h']]], - ['esp_5fwifi_5fsta_272',['ESP_WIFI_STA',['../wificonfig_8h.html#ade524ef86e44ae63840a77397e987132',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_4.html b/docs/html/search/defines_4.html deleted file mode 100644 index 046ad4a..0000000 --- a/docs/html/search/defines_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_4.js b/docs/html/search/defines_4.js deleted file mode 100644 index 649ce25..0000000 --- a/docs/html/search/defines_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['flushtimeout_273',['FLUSHTIMEOUT',['../serial2socket_8h.html#a4731ef512b433abe9b4c9e709c214ace',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/defines_5.html b/docs/html/search/defines_5.html deleted file mode 100644 index 61ce555..0000000 --- a/docs/html/search/defines_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_5.js b/docs/html/search/defines_5.js deleted file mode 100644 index e18f12c..0000000 --- a/docs/html/search/defines_5.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['hidden_5fpassword_274',['HIDDEN_PASSWORD',['../wificonfig_8h.html#af5ca3daab5ff5c1b7a01e0b5ca75d745',1,'wificonfig.h']]], - ['hostname_5fentry_275',['HOSTNAME_ENTRY',['../wificonfig_8h.html#a431d9f136ad2d23ec637102eae795a34',1,'wificonfig.h']]], - ['http_5fenable_5fentry_276',['HTTP_ENABLE_ENTRY',['../wificonfig_8h.html#a6cbf45cc1958b46f7583ba446e910c05',1,'wificonfig.h']]], - ['http_5fport_5fentry_277',['HTTP_PORT_ENTRY',['../wificonfig_8h.html#a0e25ab4d77c42e5b94e113ac70fa0b7b',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_6.html b/docs/html/search/defines_6.html deleted file mode 100644 index 7496307..0000000 --- a/docs/html/search/defines_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_6.js b/docs/html/search/defines_6.js deleted file mode 100644 index eb6cf33..0000000 --- a/docs/html/search/defines_6.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['marlin_5fpath_278',['MARLIN_PATH',['../esplibconfig_8h.html#a1ede17eaf525776d01a001a18befafdc',1,'esplibconfig.h']]], - ['max_5fchannel_279',['MAX_CHANNEL',['../wificonfig_8h.html#a53550b02192e90e64ea2ecce606fc361',1,'wificonfig.h']]], - ['max_5fhostname_5flength_280',['MAX_HOSTNAME_LENGTH',['../wificonfig_8h.html#ad5570a4ab8c9d790b0e8f7c15378d582',1,'wificonfig.h']]], - ['max_5fhttp_5fport_281',['MAX_HTTP_PORT',['../wificonfig_8h.html#a43437215bdccd0e374c982e18ea542bc',1,'wificonfig.h']]], - ['max_5fpassword_5flength_282',['MAX_PASSWORD_LENGTH',['../wificonfig_8h.html#a7f264fafe78080f8ea68715854b9bc24',1,'wificonfig.h']]], - ['max_5fssid_5flength_283',['MAX_SSID_LENGTH',['../wificonfig_8h.html#a1a3e371dfda6b729e6c7a890cf94f6ca',1,'wificonfig.h']]], - ['max_5ftelnet_5fport_284',['MAX_TELNET_PORT',['../wificonfig_8h.html#aa85ed0fa1387a2da58dc1837a21ab1d4',1,'wificonfig.h']]], - ['min_5fchannel_285',['MIN_CHANNEL',['../wificonfig_8h.html#aa113b8d2f73b3bfbeeda47091a1bf203',1,'wificonfig.h']]], - ['min_5fhostname_5flength_286',['MIN_HOSTNAME_LENGTH',['../wificonfig_8h.html#adb05470ece4dd649965e1a2255a5df1b',1,'wificonfig.h']]], - ['min_5fhttp_5fport_287',['MIN_HTTP_PORT',['../wificonfig_8h.html#af9616ef1305aff821ce7443db3e22f2d',1,'wificonfig.h']]], - ['min_5fpassword_5flength_288',['MIN_PASSWORD_LENGTH',['../wificonfig_8h.html#a696683541069982ec245fb7bf21720e8',1,'wificonfig.h']]], - ['min_5fssid_5flength_289',['MIN_SSID_LENGTH',['../wificonfig_8h.html#ada2533c8a1dcfad1d53e138a3eb163be',1,'wificonfig.h']]], - ['min_5ftelnet_5fport_290',['MIN_TELNET_PORT',['../wificonfig_8h.html#a35d5c2914ffd37d9d7d291e6385bc0cc',1,'wificonfig.h']]], - ['myserial0_291',['MYSERIAL0',['../esplibconfig_8h.html#a9de3b96e5997b932cf0e423f5043629c',1,'esplibconfig.h']]] -]; diff --git a/docs/html/search/defines_7.html b/docs/html/search/defines_7.html deleted file mode 100644 index 049c0cf..0000000 --- a/docs/html/search/defines_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_7.js b/docs/html/search/defines_7.js deleted file mode 100644 index 0b3c699..0000000 --- a/docs/html/search/defines_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['namespace_292',['NAMESPACE',['../wificonfig_8h.html#afa7779fe56b160955b535cd6a8aaf8f4',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_8.html b/docs/html/search/defines_8.html deleted file mode 100644 index a952d6c..0000000 --- a/docs/html/search/defines_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_8.js b/docs/html/search/defines_8.js deleted file mode 100644 index e7afe8f..0000000 --- a/docs/html/search/defines_8.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['page_5fnofiles_5fsize_293',['PAGE_NOFILES_SIZE',['../nofile_8h.html#af1ab057626205fe1d5dae5474f4774aa',1,'nofile.h']]] -]; diff --git a/docs/html/search/defines_9.html b/docs/html/search/defines_9.html deleted file mode 100644 index 6dd7f69..0000000 --- a/docs/html/search/defines_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_9.js b/docs/html/search/defines_9.js deleted file mode 100644 index 6d883eb..0000000 --- a/docs/html/search/defines_9.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['rxbuffersize_294',['RXBUFFERSIZE',['../serial2socket_8h.html#a29d12c67e4b6e0ff96d7aa793757b094',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/defines_a.html b/docs/html/search/defines_a.html deleted file mode 100644 index 415e4ff..0000000 --- a/docs/html/search/defines_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_a.js b/docs/html/search/defines_a.js deleted file mode 100644 index 5287a1a..0000000 --- a/docs/html/search/defines_a.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['sta_5fgw_5fentry_295',['STA_GW_ENTRY',['../wificonfig_8h.html#a6c7d5dfc16c16ac5a4859a7936865b94',1,'wificonfig.h']]], - ['sta_5fip_5fentry_296',['STA_IP_ENTRY',['../wificonfig_8h.html#addbe6db6729643c92834d206336a5158',1,'wificonfig.h']]], - ['sta_5fip_5fmode_5fentry_297',['STA_IP_MODE_ENTRY',['../wificonfig_8h.html#ae5a8d9779d8565f582d7ae71c025af85',1,'wificonfig.h']]], - ['sta_5fmk_5fentry_298',['STA_MK_ENTRY',['../wificonfig_8h.html#a3b37d58c5eac7eb13a5caad6a5d215e4',1,'wificonfig.h']]], - ['sta_5fpwd_5fentry_299',['STA_PWD_ENTRY',['../wificonfig_8h.html#a7827bce4c2ae2abd7d226c5b6b65455a',1,'wificonfig.h']]], - ['sta_5fssid_5fentry_300',['STA_SSID_ENTRY',['../wificonfig_8h.html#a2edda7833f2fd41413444a8464bcc6d0',1,'wificonfig.h']]], - ['static_5fmode_301',['STATIC_MODE',['../wificonfig_8h.html#a0c7b7c02a0a08deeca4534279ffe43b5',1,'wificonfig.h']]] -]; diff --git a/docs/html/search/defines_b.html b/docs/html/search/defines_b.html deleted file mode 100644 index b8ee698..0000000 --- a/docs/html/search/defines_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_b.js b/docs/html/search/defines_b.js deleted file mode 100644 index 314f0a5..0000000 --- a/docs/html/search/defines_b.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['telnet_5fenable_5fentry_302',['TELNET_ENABLE_ENTRY',['../wificonfig_8h.html#ab941d43500accae48d4317c960fde3a0',1,'wificonfig.h']]], - ['telnet_5fport_5fentry_303',['TELNET_PORT_ENTRY',['../wificonfig_8h.html#a701fb00a86117a4d6d2c34d060fe1676',1,'wificonfig.h']]], - ['txbuffersize_304',['TXBUFFERSIZE',['../serial2socket_8h.html#a8c651ff98c42106f3a14ee4225677cc8',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/defines_c.html b/docs/html/search/defines_c.html deleted file mode 100644 index 936541d..0000000 --- a/docs/html/search/defines_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/defines_c.js b/docs/html/search/defines_c.js deleted file mode 100644 index 61e6dc4..0000000 --- a/docs/html/search/defines_c.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['xstr_305',['XSTR',['../esplibconfig_8h.html#a8c298db9f79be08b2f370cef995d799b',1,'esplibconfig.h']]], - ['xstr_5f_306',['XSTR_',['../esplibconfig_8h.html#a995e2a1a0a46b8e40332b4c4290bcd05',1,'esplibconfig.h']]] -]; diff --git a/docs/html/search/enums_0.html b/docs/html/search/enums_0.html deleted file mode 100644 index 9669700..0000000 --- a/docs/html/search/enums_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/enums_0.js b/docs/html/search/enums_0.js deleted file mode 100644 index d039304..0000000 --- a/docs/html/search/enums_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['level_5fauthenticate_5ftype_236',['level_authenticate_type',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6',1,'web_server.h']]] -]; diff --git a/docs/html/search/enumvalues_0.html b/docs/html/search/enumvalues_0.html deleted file mode 100644 index 9286248..0000000 --- a/docs/html/search/enumvalues_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/enumvalues_0.js b/docs/html/search/enumvalues_0.js deleted file mode 100644 index 2b8fb6e..0000000 --- a/docs/html/search/enumvalues_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['level_5fadmin_237',['LEVEL_ADMIN',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a4ddf9e0f200403030b62492db571d9bb',1,'web_server.h']]], - ['level_5fguest_238',['LEVEL_GUEST',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a162efbbc3db6c397f7d1b04b35720ff0',1,'web_server.h']]], - ['level_5fuser_239',['LEVEL_USER',['../web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a06598e45d399ba6c77371ff2b42dd41c',1,'web_server.h']]] -]; diff --git a/docs/html/search/files_0.html b/docs/html/search/files_0.html deleted file mode 100644 index 737608e..0000000 --- a/docs/html/search/files_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_0.js b/docs/html/search/files_0.js deleted file mode 100644 index 672d18d..0000000 --- a/docs/html/search/files_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['esp3dlib_2ecpp_156',['esp3dlib.cpp',['../esp3dlib_8cpp.html',1,'']]], - ['esp3dlib_2eh_157',['esp3dlib.h',['../esp3dlib_8h.html',1,'']]], - ['esplibconfig_2eh_158',['esplibconfig.h',['../esplibconfig_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_1.html b/docs/html/search/files_1.html deleted file mode 100644 index f27a62d..0000000 --- a/docs/html/search/files_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_1.js b/docs/html/search/files_1.js deleted file mode 100644 index 7fe19ea..0000000 --- a/docs/html/search/files_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['nofile_2eh_159',['nofile.h',['../nofile_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_2.html b/docs/html/search/files_2.html deleted file mode 100644 index a45066e..0000000 --- a/docs/html/search/files_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_2.js b/docs/html/search/files_2.js deleted file mode 100644 index df9cc38..0000000 --- a/docs/html/search/files_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['sd_5fesp32_2ecpp_160',['sd_ESP32.cpp',['../sd___e_s_p32_8cpp.html',1,'']]], - ['sd_5fesp32_2eh_161',['sd_ESP32.h',['../sd___e_s_p32_8h.html',1,'']]], - ['serial2socket_2ecpp_162',['serial2socket.cpp',['../serial2socket_8cpp.html',1,'']]], - ['serial2socket_2eh_163',['serial2socket.h',['../serial2socket_8h.html',1,'']]] -]; diff --git a/docs/html/search/files_3.html b/docs/html/search/files_3.html deleted file mode 100644 index 1076bc5..0000000 --- a/docs/html/search/files_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/files_3.js b/docs/html/search/files_3.js deleted file mode 100644 index 548137a..0000000 --- a/docs/html/search/files_3.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['web_5fserver_2ecpp_164',['web_server.cpp',['../web__server_8cpp.html',1,'']]], - ['web_5fserver_2eh_165',['web_server.h',['../web__server_8h.html',1,'']]], - ['wificonfig_2ecpp_166',['wificonfig.cpp',['../wificonfig_8cpp.html',1,'']]], - ['wificonfig_2eh_167',['wificonfig.h',['../wificonfig_8h.html',1,'']]], - ['wifiservices_2ecpp_168',['wifiservices.cpp',['../wifiservices_8cpp.html',1,'']]], - ['wifiservices_2eh_169',['wifiservices.h',['../wifiservices_8h.html',1,'']]] -]; diff --git a/docs/html/search/functions_0.html b/docs/html/search/functions_0.html deleted file mode 100644 index e17c711..0000000 --- a/docs/html/search/functions_0.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_0.js b/docs/html/search/functions_0.js deleted file mode 100644 index 7131c0a..0000000 --- a/docs/html/search/functions_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['attachws_170',['attachWS',['../class_serial__2___socket.html#a2d179a197b7735d79dba9409f1efd9a7',1,'Serial_2_Socket']]], - ['available_171',['available',['../class_e_s_p___s_d.html#a3474b13136a71ab6ea2afbe14025d9f9',1,'ESP_SD::available()'],['../class_serial__2___socket.html#a2f94f78cf1a565de82d05307e708ff38',1,'Serial_2_Socket::available()']]] -]; diff --git a/docs/html/search/functions_1.html b/docs/html/search/functions_1.html deleted file mode 100644 index 0ddac0a..0000000 --- a/docs/html/search/functions_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_1.js b/docs/html/search/functions_1.js deleted file mode 100644 index f788d64..0000000 --- a/docs/html/search/functions_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['baudrate_172',['baudRate',['../class_serial__2___socket.html#a32d3054e537d54d14a5d8b5573002602',1,'Serial_2_Socket']]], - ['begin_173',['begin',['../class_serial__2___socket.html#a5fd33907b0c6db7390f899eaa2b20848',1,'Serial_2_Socket::begin()'],['../class_web___server.html#a856e18f69bf41ae5cb0c530d63823f39',1,'Web_Server::begin()'],['../class_wi_fi_config.html#a6f2a31ecc4a60bee3835d23b374e7ab7',1,'WiFiConfig::begin()'],['../class_wi_fi_services.html#a33ed941b1c764817764807acf6c82557',1,'WiFiServices::begin()']]] -]; diff --git a/docs/html/search/functions_2.html b/docs/html/search/functions_2.html deleted file mode 100644 index 2737c5a..0000000 --- a/docs/html/search/functions_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_2.js b/docs/html/search/functions_2.js deleted file mode 100644 index dd75c89..0000000 --- a/docs/html/search/functions_2.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['card_5fstatus_174',['card_status',['../class_e_s_p___s_d.html#a6aaf0c538574f5a4f58df66e78cad9e1',1,'ESP_SD']]], - ['card_5ftotal_5fspace_175',['card_total_space',['../class_e_s_p___s_d.html#a939244c6b6b6b81f70503044b4274583',1,'ESP_SD']]], - ['card_5fused_5fspace_176',['card_used_space',['../class_e_s_p___s_d.html#ae91ce4b54e0c79f2cb13c9bdaab2c81d',1,'ESP_SD']]], - ['close_177',['close',['../class_e_s_p___s_d.html#a8a216a25688ba0a7afdebbb1b98f46b2',1,'ESP_SD']]] -]; diff --git a/docs/html/search/functions_3.html b/docs/html/search/functions_3.html deleted file mode 100644 index 6da86e7..0000000 --- a/docs/html/search/functions_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_3.js b/docs/html/search/functions_3.js deleted file mode 100644 index 1ffcda3..0000000 --- a/docs/html/search/functions_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['detachws_178',['detachWS',['../class_serial__2___socket.html#a84514dd9015413d35a2cc6718cc96ab4',1,'Serial_2_Socket']]], - ['dir_5fexists_179',['dir_exists',['../class_e_s_p___s_d.html#afba93faa60b58ec284a38bac1174a680',1,'ESP_SD']]] -]; diff --git a/docs/html/search/functions_4.html b/docs/html/search/functions_4.html deleted file mode 100644 index 911304e..0000000 --- a/docs/html/search/functions_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_4.js b/docs/html/search/functions_4.js deleted file mode 100644 index 19aabe9..0000000 --- a/docs/html/search/functions_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['end_180',['end',['../class_serial__2___socket.html#a44e8e62162dccce91cbf19bd35398207',1,'Serial_2_Socket::end()'],['../class_web___server.html#a22e9125231c60d81c7b32bc9f34205b9',1,'Web_Server::end()'],['../class_wi_fi_config.html#a842487818fddb26a547ac162467383bb',1,'WiFiConfig::end()'],['../class_wi_fi_services.html#a606dfb65e73d2a98051f7dd9c42cbe26',1,'WiFiServices::end()']]], - ['esp3dlib_181',['Esp3DLib',['../class_esp3_d_lib.html#a5dc83711fcdb32f17cb26177361a5cbb',1,'Esp3DLib']]], - ['esp_5fsd_182',['ESP_SD',['../class_e_s_p___s_d.html#a817e53986873586c0c55e078e3d0547d',1,'ESP_SD']]], - ['espresponsestream_183',['ESPResponseStream',['../class_e_s_p_response_stream.html#aac3ccc2b5f126f6c57c1a4adc8671a9f',1,'ESPResponseStream']]], - ['exists_184',['exists',['../class_e_s_p___s_d.html#ae497f0993b7d47eadb14077cf112c6da',1,'ESP_SD']]] -]; diff --git a/docs/html/search/functions_5.html b/docs/html/search/functions_5.html deleted file mode 100644 index 61b920d..0000000 --- a/docs/html/search/functions_5.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_5.js b/docs/html/search/functions_5.js deleted file mode 100644 index d845c70..0000000 --- a/docs/html/search/functions_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['flush_185',['flush',['../class_serial__2___socket.html#a1cfbe7618e10abb39376f6d3e1053b29',1,'Serial_2_Socket::flush()'],['../class_e_s_p_response_stream.html#ae9b2873d7f30b9c533feeac2edb79296',1,'ESPResponseStream::flush()']]] -]; diff --git a/docs/html/search/functions_6.html b/docs/html/search/functions_6.html deleted file mode 100644 index dc70a4a..0000000 --- a/docs/html/search/functions_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_6.js b/docs/html/search/functions_6.js deleted file mode 100644 index f185a87..0000000 --- a/docs/html/search/functions_6.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['get_5fclient_5fid_186',['get_client_ID',['../class_web___server.html#a25715096be77cb11a7a4899c9c83e25d',1,'Web_Server']]], - ['getsignal_187',['getSignal',['../class_wi_fi_config.html#a9d4cb0e58c352001800e6c5f1c1a9c0b',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/functions_7.html b/docs/html/search/functions_7.html deleted file mode 100644 index 7de3106..0000000 --- a/docs/html/search/functions_7.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_7.js b/docs/html/search/functions_7.js deleted file mode 100644 index 42f2e73..0000000 --- a/docs/html/search/functions_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['handle_188',['handle',['../class_web___server.html#a783f954fbfd328f401d32a5902d707fd',1,'Web_Server::handle()'],['../class_wi_fi_config.html#a9db03f74a9446e8b8319eb0165df8e0a',1,'WiFiConfig::handle()'],['../class_wi_fi_services.html#a52ec8590a15440907e5c6200849f3a4a',1,'WiFiServices::handle()']]], - ['handle_5fflush_189',['handle_flush',['../class_serial__2___socket.html#aebccb6a24539c03ad665b62ae0b8cee7',1,'Serial_2_Socket']]] -]; diff --git a/docs/html/search/functions_8.html b/docs/html/search/functions_8.html deleted file mode 100644 index 7422be2..0000000 --- a/docs/html/search/functions_8.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_8.js b/docs/html/search/functions_8.js deleted file mode 100644 index 234e423..0000000 --- a/docs/html/search/functions_8.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['init_190',['init',['../class_esp3_d_lib.html#a297a923379840d50682075a9422ae407',1,'Esp3DLib']]], - ['ip_5fint_5ffrom_5fstring_191',['IP_int_from_string',['../class_wi_fi_config.html#a3395d3ca53ab104003a983ed46c502eb',1,'WiFiConfig']]], - ['ip_5fstring_5ffrom_5fint_192',['IP_string_from_int',['../class_wi_fi_config.html#a966423815423191a61e46eae16aac2e8',1,'WiFiConfig']]], - ['ishostnamevalid_193',['isHostnameValid',['../class_wi_fi_config.html#a0fb22a5b2e6148a1419027bfd98cca29',1,'WiFiConfig']]], - ['isopen_194',['isopen',['../class_e_s_p___s_d.html#ae088288ee6fb745d499f99cc2f3353c3',1,'ESP_SD']]], - ['ispasswordvalid_195',['isPasswordValid',['../class_wi_fi_config.html#ae06cd3ccefd32cff9634a48db00db63e',1,'WiFiConfig']]], - ['isssidvalid_196',['isSSIDValid',['../class_wi_fi_config.html#a872ad338671f9f48b9834ef45bd7c85a',1,'WiFiConfig']]], - ['isvalidip_197',['isValidIP',['../class_wi_fi_config.html#adcd8ae215a5a47ee68aaacd02ac3b5ce',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/functions_9.html b/docs/html/search/functions_9.html deleted file mode 100644 index befd4fa..0000000 --- a/docs/html/search/functions_9.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_9.js b/docs/html/search/functions_9.js deleted file mode 100644 index ed5ac68..0000000 --- a/docs/html/search/functions_9.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['makepath83_198',['makepath83',['../class_e_s_p___s_d.html#a9e64df598230da334409993890f11551',1,'ESP_SD']]], - ['makeshortname_199',['makeshortname',['../class_e_s_p___s_d.html#ab807ae35195d76b24121e455c7a0375b',1,'ESP_SD']]], - ['mkdir_200',['mkdir',['../class_e_s_p___s_d.html#a0e1854e81305bf626bd54390c2d62321',1,'ESP_SD']]] -]; diff --git a/docs/html/search/functions_a.html b/docs/html/search/functions_a.html deleted file mode 100644 index a81e963..0000000 --- a/docs/html/search/functions_a.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_a.js b/docs/html/search/functions_a.js deleted file mode 100644 index e5a418c..0000000 --- a/docs/html/search/functions_a.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['open_201',['open',['../class_e_s_p___s_d.html#a711c7a7ac7d491e3c3c1a063f48624ab',1,'ESP_SD']]], - ['opendir_202',['openDir',['../class_e_s_p___s_d.html#a5cbfd0f7a7a913204ce3078893ed912e',1,'ESP_SD']]], - ['operator_20bool_203',['operator bool',['../class_serial__2___socket.html#aa9a7cb15a5b2a9b4efce3195b41a49ba',1,'Serial_2_Socket']]] -]; diff --git a/docs/html/search/functions_b.html b/docs/html/search/functions_b.html deleted file mode 100644 index 345265d..0000000 --- a/docs/html/search/functions_b.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_b.js b/docs/html/search/functions_b.js deleted file mode 100644 index 80d9bdd..0000000 --- a/docs/html/search/functions_b.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['parse_204',['parse',['../class_esp3_d_lib.html#a8b59aad396ec458c3f3906bdc350c5bb',1,'Esp3DLib']]], - ['peek_205',['peek',['../class_serial__2___socket.html#aa60f74ff08f5b8887419da8bf865ab48',1,'Serial_2_Socket']]], - ['print_206',['print',['../class_e_s_p_response_stream.html#adddd77eae9d59e530f97123b5f76ecca',1,'ESPResponseStream']]], - ['println_207',['println',['../class_e_s_p_response_stream.html#a6d7a9ad280fabd0e4576ba4fbc779d41',1,'ESPResponseStream']]], - ['push_208',['push',['../class_serial__2___socket.html#a69f7862d75bc0e945b118fc1d8fba9cf',1,'Serial_2_Socket']]] -]; diff --git a/docs/html/search/functions_c.html b/docs/html/search/functions_c.html deleted file mode 100644 index 858bfd6..0000000 --- a/docs/html/search/functions_c.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_c.js b/docs/html/search/functions_c.js deleted file mode 100644 index 27b3873..0000000 --- a/docs/html/search/functions_c.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['read_209',['read',['../class_e_s_p___s_d.html#a7d6c94f0cb6fcf0a0d014644c2300d3f',1,'ESP_SD::read(uint8_t *buf, uint16_t nbyte)'],['../class_e_s_p___s_d.html#a08bd2a5faf3ae537ef65cd7d5ba9812b',1,'ESP_SD::read()'],['../class_serial__2___socket.html#a3dc7e480d96e5e70ac0256357749825a',1,'Serial_2_Socket::read()']]], - ['readdir_210',['readDir',['../class_e_s_p___s_d.html#a1d90e39616a040395f2f317fb0d4f3f6',1,'ESP_SD']]], - ['remove_211',['remove',['../class_e_s_p___s_d.html#a977589ee73d8adf70d0f4993fe341103',1,'ESP_SD']]], - ['restart_5fesp_212',['restart_ESP',['../class_wi_fi_config.html#a75a10d14172d0f0de09dbce8058cd73b',1,'WiFiConfig']]], - ['rmdir_213',['rmdir',['../class_e_s_p___s_d.html#ac53dd5b6c423e96bb7947203c212b031',1,'ESP_SD']]] -]; diff --git a/docs/html/search/functions_d.html b/docs/html/search/functions_d.html deleted file mode 100644 index 2f09f51..0000000 --- a/docs/html/search/functions_d.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_d.js b/docs/html/search/functions_d.js deleted file mode 100644 index a9ecf88..0000000 --- a/docs/html/search/functions_d.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['serial_5f2_5fsocket_214',['Serial_2_Socket',['../class_serial__2___socket.html#a342b89d67032d2e8ec97afefa4819f32',1,'Serial_2_Socket']]], - ['size_215',['size',['../class_e_s_p___s_d.html#abf4072cccbb5a4ef00a32e28998a2dcf',1,'ESP_SD']]], - ['startap_216',['StartAP',['../class_wi_fi_config.html#a0983d19d571709a1ae0e8ef792a3babe',1,'WiFiConfig']]], - ['startsta_217',['StartSTA',['../class_wi_fi_config.html#a1860d6ab8d817ed15fc32b91cb02ef6f',1,'WiFiConfig']]], - ['stopwifi_218',['StopWiFi',['../class_wi_fi_config.html#a27890e9bff0d16bacce8c77fbb2404bb',1,'WiFiConfig']]] -]; diff --git a/docs/html/search/functions_e.html b/docs/html/search/functions_e.html deleted file mode 100644 index ee5afa6..0000000 --- a/docs/html/search/functions_e.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_e.js b/docs/html/search/functions_e.js deleted file mode 100644 index 7599ea0..0000000 --- a/docs/html/search/functions_e.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['wait_219',['wait',['../class_wi_fi_config.html#aed378c1c4931f96a204bf90248db7cdb',1,'WiFiConfig']]], - ['web_5fserver_220',['Web_Server',['../class_web___server.html#ad3aecb228288dd5b2eabfe7a75359025',1,'Web_Server']]], - ['wificonfig_221',['WiFiConfig',['../class_wi_fi_config.html#ab7ecc980e32d91b9e71d96dc1b040092',1,'WiFiConfig']]], - ['wifiservices_222',['WiFiServices',['../class_wi_fi_services.html#a5eec4b6f6f1b2356f3382510c7f5153c',1,'WiFiServices']]], - ['write_223',['write',['../class_e_s_p___s_d.html#a5eb7e01dfdca42b88916a6185bcd8688',1,'ESP_SD::write(const uint8_t *data, uint16_t len)'],['../class_e_s_p___s_d.html#acfacb5636a4bc264b51bc06bc64f651b',1,'ESP_SD::write(const uint8_t byte)'],['../class_serial__2___socket.html#ab15b934138a9c888421068acfb67e8e8',1,'Serial_2_Socket::write(uint8_t c)'],['../class_serial__2___socket.html#ab8377b220a1d47a319b90e4d77adc230',1,'Serial_2_Socket::write(const uint8_t *buffer, size_t size)'],['../class_serial__2___socket.html#ac938fbb6ee98767f1ea6e0d5ee32493a',1,'Serial_2_Socket::write(const char *s)'],['../class_serial__2___socket.html#a725d17a85adfcb8251702f4b57cf4295',1,'Serial_2_Socket::write(unsigned long n)'],['../class_serial__2___socket.html#a0a853961a44fd45e5c991ed01e8dc6f3',1,'Serial_2_Socket::write(long n)'],['../class_serial__2___socket.html#a8f7fae75d831d77ed36fe7578ef903b9',1,'Serial_2_Socket::write(unsigned int n)'],['../class_serial__2___socket.html#a5e27a8c2524dc371dccbd3103f670cca',1,'Serial_2_Socket::write(int n)']]] -]; diff --git a/docs/html/search/functions_f.html b/docs/html/search/functions_f.html deleted file mode 100644 index f17c412..0000000 --- a/docs/html/search/functions_f.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/functions_f.js b/docs/html/search/functions_f.js deleted file mode 100644 index 9b06ae2..0000000 --- a/docs/html/search/functions_f.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['_7eesp_5fsd_224',['~ESP_SD',['../class_e_s_p___s_d.html#a852571834c4c862077dab2104d539d9d',1,'ESP_SD']]], - ['_7eserial_5f2_5fsocket_225',['~Serial_2_Socket',['../class_serial__2___socket.html#ad7352e92a9d7837f4657f077dae701c6',1,'Serial_2_Socket']]], - ['_7eweb_5fserver_226',['~Web_Server',['../class_web___server.html#ad70b99561e3553404b33a262963de72b',1,'Web_Server']]], - ['_7ewificonfig_227',['~WiFiConfig',['../class_wi_fi_config.html#afa73eed5ba10b1b86da8013bca38c0b9',1,'WiFiConfig']]], - ['_7ewifiservices_228',['~WiFiServices',['../class_wi_fi_services.html#a7f5fe522ff44dab1ec1b270183f89857',1,'WiFiServices']]] -]; diff --git a/docs/html/search/mag_sel.png b/docs/html/search/mag_sel.png deleted file mode 100644 index 39c0ed5..0000000 Binary files a/docs/html/search/mag_sel.png and /dev/null differ diff --git a/docs/html/search/nomatches.html b/docs/html/search/nomatches.html deleted file mode 100644 index 4377320..0000000 --- a/docs/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
    -
    No Matches
    -
    - - diff --git a/docs/html/search/search.css b/docs/html/search/search.css deleted file mode 100644 index 3cf9df9..0000000 --- a/docs/html/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 8px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:115px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:8px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/docs/html/search/search.js b/docs/html/search/search.js deleted file mode 100644 index a554ab9..0000000 --- a/docs/html/search/search.js +++ /dev/null @@ -1,814 +0,0 @@ -/* - @licstart The following is the entire license notice for the - JavaScript code in this file. - - Copyright (C) 1997-2017 by Dimitri van Heesch - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - @licend The above is the entire license notice - for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_0.js b/docs/html/search/variables_0.js deleted file mode 100644 index f7f00b7..0000000 --- a/docs/html/search/variables_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['esp3dlib_229',['esp3dlib',['../esp3dlib_8h.html#aba2ef588824d50eb5139cbc4ceb94afa',1,'esp3dlib.h']]] -]; diff --git a/docs/html/search/variables_1.html b/docs/html/search/variables_1.html deleted file mode 100644 index 49fe59a..0000000 --- a/docs/html/search/variables_1.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_1.js b/docs/html/search/variables_1.js deleted file mode 100644 index b9e8622..0000000 --- a/docs/html/search/variables_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['isfile_230',['isFile',['../class_e_s_p___s_d.html#a181e755c79ffe79d25e8b74385be85f6',1,'ESP_SD']]] -]; diff --git a/docs/html/search/variables_2.html b/docs/html/search/variables_2.html deleted file mode 100644 index 0c8a18c..0000000 --- a/docs/html/search/variables_2.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_2.js b/docs/html/search/variables_2.js deleted file mode 100644 index 51ce27b..0000000 --- a/docs/html/search/variables_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['progmem_231',['PROGMEM',['../nofile_8h.html#a4bb34006af954f26383a423ffe5b887f',1,'nofile.h']]] -]; diff --git a/docs/html/search/variables_3.html b/docs/html/search/variables_3.html deleted file mode 100644 index 19a31fc..0000000 --- a/docs/html/search/variables_3.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_3.js b/docs/html/search/variables_3.js deleted file mode 100644 index 7442528..0000000 --- a/docs/html/search/variables_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['serial2socket_232',['Serial2Socket',['../serial2socket_8h.html#aa7804a9d5cfd98917275be16a5d6556a',1,'serial2socket.h']]] -]; diff --git a/docs/html/search/variables_4.html b/docs/html/search/variables_4.html deleted file mode 100644 index bdc37be..0000000 --- a/docs/html/search/variables_4.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
    -
    Loading...
    -
    - -
    Searching...
    -
    No Matches
    - -
    - - diff --git a/docs/html/search/variables_4.js b/docs/html/search/variables_4.js deleted file mode 100644 index 4089853..0000000 --- a/docs/html/search/variables_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['web_5fserver_233',['web_server',['../web__server_8h.html#a4868e08e80c4b2c1456bf0f8d5c78dd8',1,'web_server.h']]], - ['wifi_5fconfig_234',['wifi_config',['../wificonfig_8h.html#a17f30097832457731475d17a590b4654',1,'wificonfig.h']]], - ['wifi_5fservices_235',['wifi_services',['../wifiservices_8h.html#a5676e160d5e6622a97db6b98a98a3807',1,'wifiservices.h']]] -]; diff --git a/docs/html/serial2socket_8cpp.html b/docs/html/serial2socket_8cpp.html deleted file mode 100644 index 2ed507a..0000000 --- a/docs/html/serial2socket_8cpp.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -ESP3D Lib: src/serial2socket.cpp File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    serial2socket.cpp File Reference
    -
    - -
    - - - - diff --git a/docs/html/serial2socket_8cpp_source.html b/docs/html/serial2socket_8cpp_source.html deleted file mode 100644 index a332c68..0000000 --- a/docs/html/serial2socket_8cpp_source.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - - -ESP3D Lib: src/serial2socket.cpp Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    serial2socket.cpp
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  serial2socket.cpp - serial 2 socket functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 
    -
    22 #ifdef ARDUINO_ARCH_ESP32
    -
    23 
    -
    24 #include "esplibconfig.h"
    -
    25 
    -
    26 #if ENABLED(ESP3D_WIFISUPPORT)
    -
    27 #include "serial2socket.h"
    -
    28 #include "wificonfig.h"
    -
    29 #include <WebSocketsServer.h>
    -
    30 #include <WiFi.h>
    - -
    32 
    -
    33 
    - -
    35  _web_socket = NULL;
    -
    36  _TXbufferSize = 0;
    -
    37  _RXbufferSize = 0;
    -
    38  _RXbufferpos = 0;
    -
    39 }
    - -
    41  if (_web_socket) detachWS();
    -
    42  _TXbufferSize = 0;
    -
    43  _RXbufferSize = 0;
    -
    44  _RXbufferpos = 0;
    -
    45 }
    -
    46 void Serial_2_Socket::begin(long speed){
    -
    47  _TXbufferSize = 0;
    -
    48  _RXbufferSize = 0;
    -
    49  _RXbufferpos = 0;
    -
    50 }
    -
    51 
    - -
    53  _TXbufferSize = 0;
    -
    54  _RXbufferSize = 0;
    -
    55  _RXbufferpos = 0;
    -
    56 }
    -
    57 
    - -
    59  return 0;
    -
    60 }
    -
    61 
    -
    62 bool Serial_2_Socket::attachWS(void * web_socket){
    -
    63  if (web_socket) {
    -
    64  _web_socket = web_socket;
    -
    65  _TXbufferSize=0;
    -
    66  return true;
    -
    67  }
    -
    68  return false;
    -
    69 }
    -
    70 
    - -
    72  _web_socket = NULL;
    -
    73  return true;
    -
    74 }
    -
    75 
    -
    76 Serial_2_Socket::operator bool() const
    -
    77 {
    -
    78  return true;
    -
    79 }
    - -
    81  return _RXbufferSize;
    -
    82 }
    -
    83 
    -
    84 
    -
    85 size_t Serial_2_Socket::write(uint8_t c)
    -
    86 {
    -
    87  if(!_web_socket) return 0;
    -
    88  write(&c,1);
    -
    89  return 1;
    -
    90 }
    -
    91 
    -
    92 size_t Serial_2_Socket::write(const uint8_t *buffer, size_t size)
    -
    93 {
    -
    94  if((buffer == NULL) ||(!_web_socket)) {
    -
    95  if(buffer == NULL)log_i("[SOCKET]No buffer");
    -
    96  if(!_web_socket)log_i("[SOCKET]No socket");
    -
    97  return 0;
    -
    98  }
    -
    99 #if defined(ENABLE_SERIAL2SOCKET_OUT)
    -
    100  if (_TXbufferSize==0)_lastflush = millis();
    -
    101  //send full line
    -
    102  if (_TXbufferSize + size > TXBUFFERSIZE) flush();
    -
    103  //need periodic check to force to flush in case of no end
    -
    104  for (int i = 0; i < size;i++){
    -
    105  _TXbuffer[_TXbufferSize] = buffer[i];
    -
    106  _TXbufferSize++;
    -
    107  }
    -
    108  log_i("[SOCKET]buffer size %d",_TXbufferSize);
    -
    109  handle_flush();
    -
    110 #endif
    -
    111  return size;
    -
    112 }
    -
    113 
    -
    114 int Serial_2_Socket::peek(void){
    -
    115  if (_RXbufferSize > 0)return _RXbuffer[_RXbufferpos];
    -
    116  else return -1;
    -
    117 }
    -
    118 
    -
    119 bool Serial_2_Socket::push (const char * data){
    -
    120 #if defined(ENABLE_SERIAL2SOCKET_IN)
    -
    121  int data_size = strlen(data);
    -
    122  if ((data_size + _RXbufferSize) <= RXBUFFERSIZE){
    -
    123  int current = _RXbufferpos + _RXbufferSize;
    -
    124  if (current > RXBUFFERSIZE) current = current - RXBUFFERSIZE;
    -
    125  for (int i = 0; i < data_size; i++){
    -
    126  if (current > (RXBUFFERSIZE-1)) current = 0;
    -
    127  _RXbuffer[current] = data[i];
    -
    128  current ++;
    -
    129  }
    -
    130  _RXbufferSize+=strlen(data);
    -
    131  return true;
    -
    132  }
    -
    133  return false;
    -
    134 #else
    -
    135  return true;
    -
    136 #endif
    -
    137 }
    -
    138 
    -
    139 int Serial_2_Socket::read(void){
    -
    140  if (_RXbufferSize > 0) {
    -
    141  int v = _RXbuffer[_RXbufferpos];
    -
    142  _RXbufferpos++;
    -
    143  if (_RXbufferpos > (RXBUFFERSIZE-1))_RXbufferpos = 0;
    -
    144  _RXbufferSize--;
    -
    145  return v;
    -
    146  } else return -1;
    -
    147 }
    -
    148 
    - -
    150  if (_TXbufferSize > 0) {
    -
    151  if ((_TXbufferSize>=TXBUFFERSIZE) || ((millis()- _lastflush) > FLUSHTIMEOUT)) {
    -
    152  log_i("[SOCKET]need flush, buffer size %d",_TXbufferSize);
    -
    153  flush();
    -
    154  }
    -
    155  }
    -
    156 }
    -
    157 void Serial_2_Socket::flush(void){
    -
    158  if (_TXbufferSize > 0){
    -
    159  log_i("[SOCKET]flush data, buffer size %d",_TXbufferSize);
    -
    160  ((WebSocketsServer *)_web_socket)->broadcastBIN(_TXbuffer,_TXbufferSize);
    -
    161  //refresh timout
    -
    162  _lastflush = millis();
    -
    163  //reset buffer
    -
    164  _TXbufferSize = 0;
    -
    165  }
    -
    166 }
    -
    167 
    -
    168 #endif // ENABLE_WIFI
    -
    169 
    -
    170 #endif // ARDUINO_ARCH_ESP32
    -
    -
    -
    void begin(long speed)
    -
    bool attachWS(void *web_socket)
    -
    int read(void)
    - - - - -
    bool push(const char *data)
    - - -
    #define RXBUFFERSIZE
    Definition: serial2socket.h:27
    -
    void flush(void)
    - - - -
    Serial_2_Socket Serial2Socket
    -
    #define TXBUFFERSIZE
    Definition: serial2socket.h:26
    - -
    size_t write(uint8_t c)
    -
    int peek(void)
    - -
    #define FLUSHTIMEOUT
    Definition: serial2socket.h:28
    - - - - diff --git a/docs/html/serial2socket_8h.html b/docs/html/serial2socket_8h.html deleted file mode 100644 index f83c298..0000000 --- a/docs/html/serial2socket_8h.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -ESP3D Lib: src/serial2socket.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    serial2socket.h File Reference
    -
    -
    -
    #include "Print.h"
    -
    -Include dependency graph for serial2socket.h:
    -
    -
    - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    class  Serial_2_Socket
     
    - - - - - - - -

    -Macros

    #define TXBUFFERSIZE   1200
     
    #define RXBUFFERSIZE   128
     
    #define FLUSHTIMEOUT   500
     
    - - - -

    -Variables

    Serial_2_Socket Serial2Socket
     
    -

    Macro Definition Documentation

    - -

    ◆ FLUSHTIMEOUT

    - -
    -
    - - - - -
    #define FLUSHTIMEOUT   500
    -
    - -

    Definition at line 28 of file serial2socket.h.

    - -
    -
    - -

    ◆ RXBUFFERSIZE

    - -
    -
    - - - - -
    #define RXBUFFERSIZE   128
    -
    - -

    Definition at line 27 of file serial2socket.h.

    - -
    -
    - -

    ◆ TXBUFFERSIZE

    - -
    -
    - - - - -
    #define TXBUFFERSIZE   1200
    -
    - -

    Definition at line 26 of file serial2socket.h.

    - -
    -
    -

    Variable Documentation

    - -

    ◆ Serial2Socket

    - -
    -
    - - - - -
    Serial_2_Socket Serial2Socket
    -
    - -
    -
    -
    -
    - - - - diff --git a/docs/html/serial2socket_8h.js b/docs/html/serial2socket_8h.js deleted file mode 100644 index 5c96e06..0000000 --- a/docs/html/serial2socket_8h.js +++ /dev/null @@ -1,8 +0,0 @@ -var serial2socket_8h = -[ - [ "Serial_2_Socket", "class_serial__2___socket.html", "class_serial__2___socket" ], - [ "FLUSHTIMEOUT", "serial2socket_8h.html#a4731ef512b433abe9b4c9e709c214ace", null ], - [ "RXBUFFERSIZE", "serial2socket_8h.html#a29d12c67e4b6e0ff96d7aa793757b094", null ], - [ "TXBUFFERSIZE", "serial2socket_8h.html#a8c651ff98c42106f3a14ee4225677cc8", null ], - [ "Serial2Socket", "serial2socket_8h.html#aa7804a9d5cfd98917275be16a5d6556a", null ] -]; \ No newline at end of file diff --git a/docs/html/serial2socket_8h__dep__incl.map b/docs/html/serial2socket_8h__dep__incl.map deleted file mode 100644 index b501b2b..0000000 --- a/docs/html/serial2socket_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/serial2socket_8h__dep__incl.md5 b/docs/html/serial2socket_8h__dep__incl.md5 deleted file mode 100644 index c72cab4..0000000 --- a/docs/html/serial2socket_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a538f5965dfcb7cb91253471fc2affd0 \ No newline at end of file diff --git a/docs/html/serial2socket_8h__dep__incl.png b/docs/html/serial2socket_8h__dep__incl.png deleted file mode 100644 index ac5ccb1..0000000 Binary files a/docs/html/serial2socket_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/serial2socket_8h__incl.map b/docs/html/serial2socket_8h__incl.map deleted file mode 100644 index d0e4313..0000000 --- a/docs/html/serial2socket_8h__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/serial2socket_8h__incl.md5 b/docs/html/serial2socket_8h__incl.md5 deleted file mode 100644 index d2c7cdc..0000000 --- a/docs/html/serial2socket_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -a85624d8963ee89b7ec2ef265434eefc \ No newline at end of file diff --git a/docs/html/serial2socket_8h__incl.png b/docs/html/serial2socket_8h__incl.png deleted file mode 100644 index 6afc65f..0000000 Binary files a/docs/html/serial2socket_8h__incl.png and /dev/null differ diff --git a/docs/html/serial2socket_8h_source.html b/docs/html/serial2socket_8h_source.html deleted file mode 100644 index 7057562..0000000 --- a/docs/html/serial2socket_8h_source.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - -ESP3D Lib: src/serial2socket.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    serial2socket.h
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  serial2socket.h - serial 2 socket functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 
    -
    22 #ifndef _SERIAL_2_SOCKET_H_
    -
    23 #define _SERIAL_2_SOCKET_H_
    -
    24 
    -
    25 #include "Print.h"
    -
    26 #define TXBUFFERSIZE 1200
    -
    27 #define RXBUFFERSIZE 128
    -
    28 #define FLUSHTIMEOUT 500
    -
    29 class Serial_2_Socket: public Print{
    -
    30  public:
    - - -
    33  size_t write(uint8_t c);
    -
    34  size_t write(const uint8_t *buffer, size_t size);
    -
    35 
    -
    36  inline size_t write(const char * s)
    -
    37  {
    -
    38  return write((uint8_t*) s, strlen(s));
    -
    39  }
    -
    40  inline size_t write(unsigned long n)
    -
    41  {
    -
    42  return write((uint8_t) n);
    -
    43  }
    -
    44  inline size_t write(long n)
    -
    45  {
    -
    46  return write((uint8_t) n);
    -
    47  }
    -
    48  inline size_t write(unsigned int n)
    -
    49  {
    -
    50  return write((uint8_t) n);
    -
    51  }
    -
    52  inline size_t write(int n)
    -
    53  {
    -
    54  return write((uint8_t) n);
    -
    55  }
    -
    56  long baudRate();
    -
    57  void begin(long speed);
    -
    58  void end();
    -
    59  int available();
    -
    60  int peek(void);
    -
    61  int read(void);
    -
    62  bool push (const char * data);
    -
    63  void flush(void);
    -
    64  void handle_flush();
    -
    65  operator bool() const;
    -
    66  bool attachWS(void * web_socket);
    -
    67  bool detachWS();
    -
    68  private:
    -
    69  uint32_t _lastflush;
    -
    70  void * _web_socket;
    -
    71  uint8_t _TXbuffer[TXBUFFERSIZE];
    -
    72  uint16_t _TXbufferSize;
    -
    73  uint8_t _RXbuffer[RXBUFFERSIZE];
    -
    74  uint16_t _RXbufferSize;
    -
    75  uint16_t _RXbufferpos;
    -
    76 };
    -
    77 
    -
    78 
    - -
    80 
    -
    81 #endif
    -
    -
    -
    void begin(long speed)
    -
    size_t write(const char *s)
    Definition: serial2socket.h:36
    -
    bool attachWS(void *web_socket)
    -
    int read(void)
    - - -
    size_t write(unsigned long n)
    Definition: serial2socket.h:40
    - - -
    bool push(const char *data)
    - -
    size_t write(unsigned int n)
    Definition: serial2socket.h:48
    -
    #define RXBUFFERSIZE
    Definition: serial2socket.h:27
    -
    size_t write(long n)
    Definition: serial2socket.h:44
    -
    void flush(void)
    - -
    size_t write(int n)
    Definition: serial2socket.h:52
    -
    Serial_2_Socket Serial2Socket
    -
    #define TXBUFFERSIZE
    Definition: serial2socket.h:26
    - -
    size_t write(uint8_t c)
    -
    int peek(void)
    - - - - - diff --git a/docs/html/splitbar.png b/docs/html/splitbar.png deleted file mode 100644 index fe895f2..0000000 Binary files a/docs/html/splitbar.png and /dev/null differ diff --git a/docs/html/sync_off.png b/docs/html/sync_off.png deleted file mode 100644 index 3b443fc..0000000 Binary files a/docs/html/sync_off.png and /dev/null differ diff --git a/docs/html/sync_on.png b/docs/html/sync_on.png deleted file mode 100644 index e08320f..0000000 Binary files a/docs/html/sync_on.png and /dev/null differ diff --git a/docs/html/tab_a.png b/docs/html/tab_a.png deleted file mode 100644 index 3b725c4..0000000 Binary files a/docs/html/tab_a.png and /dev/null differ diff --git a/docs/html/tab_b.png b/docs/html/tab_b.png deleted file mode 100644 index e2b4a86..0000000 Binary files a/docs/html/tab_b.png and /dev/null differ diff --git a/docs/html/tab_h.png b/docs/html/tab_h.png deleted file mode 100644 index fd5cb70..0000000 Binary files a/docs/html/tab_h.png and /dev/null differ diff --git a/docs/html/tab_s.png b/docs/html/tab_s.png deleted file mode 100644 index ab478c9..0000000 Binary files a/docs/html/tab_s.png and /dev/null differ diff --git a/docs/html/tabs.css b/docs/html/tabs.css deleted file mode 100644 index 85a0cd5..0000000 --- a/docs/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/docs/html/web__server_8cpp.html b/docs/html/web__server_8cpp.html deleted file mode 100644 index f1a4530..0000000 --- a/docs/html/web__server_8cpp.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -ESP3D Lib: src/web_server.cpp File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    web_server.cpp File Reference
    -
    - -
    - - - - diff --git a/docs/html/web__server_8cpp_source.html b/docs/html/web__server_8cpp_source.html deleted file mode 100644 index ce8c4fc..0000000 --- a/docs/html/web__server_8cpp_source.html +++ /dev/null @@ -1,2761 +0,0 @@ - - - - - - - -ESP3D Lib: src/web_server.cpp Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    web_server.cpp
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  web_server.cpp - web server functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 #ifdef ARDUINO_ARCH_ESP32
    -
    22 
    -
    23 #include "esplibconfig.h"
    -
    24 
    -
    25 
    -
    26 #if ENABLED(ESP3D_WIFISUPPORT)
    -
    27 
    -
    28 #include "wificonfig.h"
    -
    29 
    -
    30 #if defined (ENABLE_HTTP)
    -
    31 #include MARLIN_PATH(gcode/queue.h)
    -
    32 #include MARLIN_PATH(inc/Version.h)
    -
    33 #undef DISABLED
    -
    34 #undef _BV
    -
    35 #include "wifiservices.h"
    -
    36 #include "serial2socket.h"
    -
    37 #include "web_server.h"
    -
    38 #include <WebSocketsServer.h>
    -
    39 #include <WiFi.h>
    -
    40 #include <FS.h>
    -
    41 #include <SPIFFS.h>
    -
    42 #if ENABLED(SDSUPPORT)
    -
    43 #include "sd_ESP32.h"
    -
    44 #endif
    -
    45 #include <Preferences.h>
    -
    46 #include <WebServer.h>
    -
    47 #include <ESP32SSDP.h>
    -
    48 #include <StreamString.h>
    -
    49 #include <Update.h>
    -
    50 #include <esp_wifi.h>
    -
    51 #include <esp_wifi_types.h>
    -
    52 #ifdef ENABLE_MDNS
    -
    53 #include <ESPmDNS.h>
    -
    54 #endif
    -
    55 #ifdef ENABLE_SSDP
    -
    56 #include <ESP32SSDP.h>
    -
    57 #endif
    -
    58 #ifdef ENABLE_CAPTIVE_PORTAL
    -
    59 #include <DNSServer.h>
    -
    60 const byte DNS_PORT = 53;
    -
    61 DNSServer dnsServer;
    -
    62 #endif
    -
    63 
    -
    64 //embedded response file if no files on SPIFFS
    -
    65 #include "nofile.h"
    -
    66 
    -
    67 //Upload status
    -
    68 typedef enum {
    -
    69  UPLOAD_STATUS_NONE = 0,
    -
    70  UPLOAD_STATUS_FAILED = 1,
    -
    71  UPLOAD_STATUS_CANCELLED = 2,
    -
    72  UPLOAD_STATUS_SUCCESSFUL = 3,
    -
    73  UPLOAD_STATUS_ONGOING = 4
    -
    74 } upload_status_type;
    -
    75 
    -
    76 #ifdef ENABLE_AUTHENTICATION
    -
    77 #define DEFAULT_ADMIN_PWD "admin"
    -
    78 #define DEFAULT_USER_PWD "user";
    -
    79 #define DEFAULT_ADMIN_LOGIN "admin"
    -
    80 #define DEFAULT_USER_LOGIN "user"
    -
    81 #define ADMIN_PWD_ENTRY "ADMIN_PWD"
    -
    82 #define USER_PWD_ENTRY "USER_PWD"
    -
    83 #define AUTH_ENTRY_NB 20
    -
    84 #define MAX_LOCAL_PASSWORD_LENGTH 16
    -
    85 #define MIN_LOCAL_PASSWORD_LENGTH 1
    -
    86 #endif
    -
    87 
    -
    88 //Default 404
    -
    89 const char PAGE_404 [] = "<HTML>\n<HEAD>\n<title>Redirecting...</title> \n</HEAD>\n<BODY>\n<CENTER>Unknown page : $QUERY$- you will be redirected...\n<BR><BR>\nif not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>\n<BR><BR>\n<PROGRESS name='prg' id='prg'></PROGRESS>\n\n<script>\nvar i = 0; \nvar x = document.getElementById(\"prg\"); \nx.max=5; \nvar interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</CENTER>\n</BODY>\n</HTML>\n\n";
    -
    90 const char PAGE_CAPTIVE [] = "<HTML>\n<HEAD>\n<title>Captive Portal</title> \n</HEAD>\n<BODY>\n<CENTER>Captive Portal page : $QUERY$- you will be redirected...\n<BR><BR>\nif not redirected, <a href='http://$WEB_ADDRESS$'>click here</a>\n<BR><BR>\n<PROGRESS name='prg' id='prg'></PROGRESS>\n\n<script>\nvar i = 0; \nvar x = document.getElementById(\"prg\"); \nx.max=5; \nvar interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) \n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n</script>\n</CENTER>\n</BODY>\n</HTML>\n\n";
    -
    91 
    -
    92 
    - -
    94 bool Web_Server::_setupdone = false;
    -
    95 uint16_t Web_Server::_port = 0;
    -
    96 String Web_Server::_hostname = "";
    -
    97 uint16_t Web_Server::_data_port = 0;
    -
    98 long Web_Server::_id_connection = 0;
    -
    99 uint8_t Web_Server::_upload_status = UPLOAD_STATUS_NONE;
    -
    100 WebServer * Web_Server::_webserver = NULL;
    -
    101 WebSocketsServer * Web_Server::_socket_server = NULL;
    -
    102 #ifdef ENABLE_AUTHENTICATION
    -
    103 auth_ip * Web_Server::_head = NULL;
    -
    104 uint8_t Web_Server::_nb_ip = 0;
    -
    105 #define MAX_AUTH_IP 10
    -
    106 #endif
    - -
    108 
    -
    109 }
    - -
    111  end();
    -
    112 }
    -
    113 
    - -
    115  return _id_connection;
    -
    116 }
    -
    117 
    -
    118 bool Web_Server::begin(){
    -
    119 
    -
    120  bool no_error = true;
    -
    121  _setupdone = false;
    -
    122  Preferences prefs;
    -
    123  prefs.begin(NAMESPACE, true);
    -
    124  int8_t penabled = prefs.getChar(HTTP_ENABLE_ENTRY, DEFAULT_HTTP_STATE);
    -
    125  //Get http port
    -
    126  _port = prefs.getUShort(HTTP_PORT_ENTRY, DEFAULT_WEBSERVER_PORT);
    -
    127  //Get hostname
    -
    128  String defV = DEFAULT_HOSTNAME;
    -
    129  _hostname = prefs.getString(HOSTNAME_ENTRY, defV);
    -
    130  prefs.end();
    -
    131  if (penabled == 0) return false;
    -
    132  //create instance
    -
    133  _webserver= new WebServer(_port);
    -
    134 #ifdef ENABLE_AUTHENTICATION
    -
    135  //here the list of headers to be recorded
    -
    136  const char * headerkeys[] = {"Cookie"} ;
    -
    137  size_t headerkeyssize = sizeof (headerkeys) / sizeof (char*);
    -
    138  //ask server to track these headers
    -
    139  _webserver->collectHeaders (headerkeys, headerkeyssize );
    -
    140 #endif
    -
    141  _socket_server = new WebSocketsServer(_port + 1);
    -
    142  _socket_server->begin();
    -
    143  _socket_server->onEvent(handle_Websocket_Event);
    -
    144 
    -
    145 
    -
    146  //Websocket output
    -
    147  Serial2Socket.attachWS(_socket_server);
    -
    148 
    -
    149  //Web server handlers
    -
    150  //trick to catch command line on "/" before file being processed
    -
    151  _webserver->on("/",HTTP_ANY, handle_root);
    -
    152 
    -
    153  //Page not found handler
    -
    154  _webserver->onNotFound (handle_not_found);
    -
    155 
    -
    156  //need to be there even no authentication to say to UI no authentication
    -
    157  _webserver->on("/login", HTTP_ANY, handle_login);
    -
    158 
    -
    159  //web commands
    -
    160  _webserver->on ("/command", HTTP_ANY, handle_web_command);
    -
    161  _webserver->on ("/command_silent", HTTP_ANY, handle_web_command_silent);
    -
    162 
    -
    163  //SPIFFS
    -
    164  _webserver->on ("/files", HTTP_ANY, handleFileList, SPIFFSFileupload);
    -
    165 
    -
    166  //web update
    -
    167  _webserver->on ("/updatefw", HTTP_ANY, handleUpdate, WebUpdateUpload);
    -
    168 
    -
    169 #if ENABLED(SDSUPPORT)
    -
    170  //Direct SD management
    -
    171  _webserver->on("/upload", HTTP_ANY, handle_direct_SDFileList,SDFile_direct_upload);
    -
    172 #endif
    -
    173 
    -
    174 #ifdef ENABLE_CAPTIVE_PORTAL
    -
    175  if(WiFi.getMode() == WIFI_AP){
    -
    176  // if DNSServer is started with "*" for domain name, it will reply with
    -
    177  // provided IP to all DNS request
    -
    178  dnsServer.start(DNS_PORT, "*", WiFi.softAPIP());
    -
    179  _webserver->on ("/generate_204", HTTP_ANY, handle_root);
    -
    180  _webserver->on ("/gconnectivitycheck.gstatic.com", HTTP_ANY, handle_root);
    -
    181  //do not forget the / at the end
    -
    182  _webserver->on ("/fwlink/", HTTP_ANY, handle_root);
    -
    183  }
    -
    184 #endif
    -
    185 
    -
    186 #ifdef ENABLE_SSDP
    -
    187  //SSDP service presentation
    -
    188  if(WiFi.getMode() == WIFI_STA){
    -
    189  _webserver->on ("/description.xml", HTTP_GET, handle_SSDP);
    -
    190  //Add specific for SSDP
    -
    191  SSDP.setSchemaURL ("description.xml");
    -
    192  SSDP.setHTTPPort (_port);
    -
    193  SSDP.setName (_hostname);
    -
    194  SSDP.setURL ("/");
    -
    195  SSDP.setDeviceType ("upnp:rootdevice");
    -
    196  /*Any customization could be here
    -
    197  SSDP.setModelName (ESP32_MODEL_NAME);
    -
    198  SSDP.setModelURL (ESP32_MODEL_URL);
    -
    199  SSDP.setModelNumber (ESP_MODEL_NUMBER);
    -
    200  SSDP.setManufacturer (ESP_MANUFACTURER_NAME);
    -
    201  SSDP.setManufacturerURL (ESP_MANUFACTURER_URL);
    -
    202  */
    -
    203 
    -
    204  //Start SSDP
    -
    205  MYSERIAL0.println("SSDP Started");
    -
    206  SSDP.begin();
    -
    207  }
    -
    208 #endif
    -
    209  MYSERIAL0.println("HTTP Started");
    -
    210  //start webserver
    -
    211  _webserver->begin();
    -
    212 #ifdef ENABLE_MDNS
    -
    213  //add mDNS
    -
    214  if(WiFi.getMode() == WIFI_STA){
    -
    215  MDNS.addService("http","tcp",_port);
    -
    216  }
    -
    217 #endif
    -
    218  _setupdone = true;
    -
    219  return no_error;
    -
    220 }
    -
    221 
    -
    222 void Web_Server::end(){
    -
    223  _setupdone = false;
    -
    224 #ifdef ENABLE_SSDP
    -
    225  SSDP.end();
    -
    226 #endif
    -
    227 #ifdef ENABLE_MDNS
    -
    228  //remove mDNS
    -
    229  mdns_service_remove("_http", "_tcp");
    -
    230 #endif
    -
    231  if (_socket_server) {
    -
    232  delete _socket_server;
    -
    233  _socket_server = NULL;
    -
    234  }
    -
    235  if (_webserver) {
    -
    236  delete _webserver;
    -
    237  _webserver = NULL;
    -
    238  }
    -
    239 #ifdef ENABLE_AUTHENTICATION
    -
    240  while (_head) {
    -
    241  auth_ip * current = _head;
    -
    242  _head = _head->_next;
    -
    243  delete current;
    -
    244  }
    -
    245  _nb_ip = 0;
    -
    246 #endif
    -
    247 }
    -
    248 
    -
    249 //Root of Webserver/////////////////////////////////////////////////////
    -
    250 
    -
    251 void Web_Server::handle_root()
    -
    252 {
    -
    253  String path = "/index.html";
    -
    254  String contentType = getContentType(path);
    -
    255  String pathWithGz = path + ".gz";
    -
    256  //if have a index.html or gzip version this is default root page
    -
    257  if((SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) && !_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback")!="yes") {
    -
    258  if(SPIFFS.exists(pathWithGz)) {
    -
    259  path = pathWithGz;
    -
    260  }
    -
    261  File file = SPIFFS.open(path, FILE_READ);
    -
    262  _webserver->streamFile(file, contentType);
    -
    263  file.close();
    -
    264  return;
    -
    265  }
    -
    266  //if no lets launch the default content
    -
    267  _webserver->sendHeader("Content-Encoding", "gzip");
    -
    268  _webserver->send_P(200,"text/html",PAGE_NOFILES,PAGE_NOFILES_SIZE);
    -
    269 }
    -
    270 
    -
    271 //Handle not registred path on SPIFFS neither SD ///////////////////////
    -
    272 void Web_Server:: handle_not_found()
    -
    273 {
    -
    274  if (is_authenticated() == LEVEL_GUEST) {
    -
    275  _webserver->sendContent_P("HTTP/1.1 301 OK\r\nLocation: /\r\nCache-Control: no-cache\r\n\r\n");
    -
    276  //_webserver->client().stop();
    -
    277  return;
    -
    278  }
    -
    279  bool page_not_found = false;
    -
    280  String path = _webserver->urlDecode(_webserver->uri());
    -
    281  String contentType = getContentType(path);
    -
    282  String pathWithGz = path + ".gz";
    -
    283 
    -
    284 #if ENABLED(SDSUPPORT)
    -
    285  if ((path.substring(0,4) == "/SD/")) {
    -
    286  //remove /SD
    -
    287  path = path.substring(3);
    -
    288  ESP_SD SD_card;
    -
    289  if (SD_card.card_status() == 1) {
    -
    290  if (SD_card.exists(pathWithGz.c_str()) || SD_card.exists(path.c_str())) {
    -
    291  if (!SD_card.exists(path.c_str())) path = pathWithGz;
    -
    292  if(SD_card.open(path.c_str())) {
    -
    293  uint8_t buf[1200];
    -
    294  _webserver->setContentLength(SD_card.size());
    -
    295  _webserver->sendHeader("Cache-Control","no-cache");
    -
    296  _webserver->send(200, "application/octet-stream", "");
    -
    297 
    -
    298  WiFiClient c = _webserver->client();
    -
    299  int16_t len = SD_card.read( buf, 1200);
    -
    300  while(len > 0) {
    -
    301  c.write(buf, len);
    -
    302  len = SD_card.read( buf, 1200);
    -
    303  wifi_config.wait(0);
    -
    304  handle();
    -
    305  }
    -
    306  SD_card.close();
    -
    307  return;
    -
    308  }
    -
    309  }
    -
    310  }
    -
    311 
    -
    312  String content = "cannot find ";
    -
    313  content+=path;
    -
    314  _webserver->send(404,"text/plain",content.c_str());
    -
    315  return;
    -
    316  } else
    -
    317 #endif
    -
    318  if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) {
    -
    319  if(SPIFFS.exists(pathWithGz)) {
    -
    320  path = pathWithGz;
    -
    321  }
    -
    322  File file = SPIFFS.open(path, FILE_READ);
    -
    323  _webserver->streamFile(file, contentType);
    -
    324  file.close();
    -
    325  return;
    -
    326  } else {
    -
    327  page_not_found = true;
    -
    328  }
    -
    329 
    -
    330  if (page_not_found ) {
    -
    331 #ifdef ENABLE_CAPTIVE_PORTAL
    -
    332  if (WiFi.getMode()!=WIFI_STA ) {
    -
    333  String content=PAGE_CAPTIVE;
    -
    334  String stmp = WiFi.softAPIP().toString();
    -
    335  //Web address = ip + port
    -
    336  String KEY_IP = "$WEB_ADDRESS$";
    -
    337  String KEY_QUERY = "$QUERY$";
    -
    338  if (_port != 80) {
    -
    339  stmp+=":";
    -
    340  stmp+=String(_port);
    -
    341  }
    -
    342  content.replace(KEY_IP,stmp);
    -
    343  content.replace(KEY_IP,stmp);
    -
    344  content.replace(KEY_QUERY,_webserver->uri());
    -
    345  _webserver->send(200,"text/html",content);
    -
    346  return;
    -
    347  }
    -
    348 #endif
    -
    349  path = "/404.htm";
    -
    350  contentType = getContentType(path);
    -
    351  pathWithGz = path + ".gz";
    -
    352  if(SPIFFS.exists(pathWithGz) || SPIFFS.exists(path)) {
    -
    353  if(SPIFFS.exists(pathWithGz)) {
    -
    354  path = pathWithGz;
    -
    355  }
    -
    356  File file = SPIFFS.open(path, FILE_READ);
    -
    357  _webserver->streamFile(file, contentType);
    -
    358  file.close();
    -
    359 
    -
    360  } else {
    -
    361  //if not template use default page
    -
    362  contentType = PAGE_404;
    -
    363  String stmp;
    -
    364  if (WiFi.getMode()==WIFI_STA ) {
    -
    365  stmp=WiFi.localIP().toString();
    -
    366  } else {
    -
    367  stmp=WiFi.softAPIP().toString();
    -
    368  }
    -
    369  //Web address = ip + port
    -
    370  String KEY_IP = "$WEB_ADDRESS$";
    -
    371  String KEY_QUERY = "$QUERY$";
    -
    372  if ( _port != 80) {
    -
    373  stmp+=":";
    -
    374  stmp+=String(_port);
    -
    375  }
    -
    376  contentType.replace(KEY_IP,stmp);
    -
    377  contentType.replace(KEY_QUERY,_webserver->uri());
    -
    378  _webserver->send(200,"text/html",contentType);
    -
    379  }
    -
    380  }
    -
    381 }
    -
    382 #ifdef ENABLE_SSDP
    -
    383 //http SSDP xml presentation
    -
    384 void Web_Server::handle_SSDP ()
    -
    385 {
    -
    386  StreamString sschema ;
    -
    387  if (sschema.reserve (1024) ) {
    -
    388  String templ = "<?xml version=\"1.0\"?>"
    -
    389  "<root xmlns=\"urn:schemas-upnp-org:device-1-0\">"
    -
    390  "<specVersion>"
    -
    391  "<major>1</major>"
    -
    392  "<minor>0</minor>"
    -
    393  "</specVersion>"
    -
    394  "<URLBase>http://%s:%u/</URLBase>"
    -
    395  "<device>"
    -
    396  "<deviceType>upnp:rootdevice</deviceType>"
    -
    397  "<friendlyName>%s</friendlyName>"
    -
    398  "<presentationURL>/</presentationURL>"
    -
    399  "<serialNumber>%s</serialNumber>"
    -
    400  "<modelName>ESP32</modelName>"
    -
    401  "<modelNumber>Marlin</modelNumber>"
    -
    402  "<modelURL>http://espressif.com/en/products/hardware/esp-wroom-32/overview</modelURL>"
    -
    403  "<manufacturer>Espressif Systems</manufacturer>"
    -
    404  "<manufacturerURL>http://espressif.com</manufacturerURL>"
    -
    405  "<UDN>uuid:%s</UDN>"
    -
    406  "</device>"
    -
    407  "</root>\r\n"
    -
    408  "\r\n";
    -
    409  char uuid[37];
    -
    410  String sip = WiFi.localIP().toString();
    -
    411  uint32_t chipId = (uint16_t) (ESP.getEfuseMac() >> 32);
    -
    412  sprintf (uuid, "38323636-4558-4dda-9188-cda0e6%02x%02x%02x",
    -
    413  (uint16_t) ( (chipId >> 16) & 0xff),
    -
    414  (uint16_t) ( (chipId >> 8) & 0xff),
    -
    415  (uint16_t) chipId & 0xff );
    -
    416  String serialNumber = String (chipId);
    -
    417  sschema.printf (templ.c_str(),
    -
    418  sip.c_str(),
    -
    419  _port,
    -
    420  _hostname.c_str(),
    -
    421  serialNumber.c_str(),
    -
    422  uuid);
    -
    423  _webserver->send (200, "text/xml", (String) sschema);
    -
    424  } else {
    -
    425  _webserver->send (500);
    -
    426  }
    -
    427 }
    -
    428 
    -
    429 #endif
    -
    430 
    -
    431 //Handle web command query and send answer//////////////////////////////
    -
    432 void Web_Server::handle_web_command ()
    -
    433 {
    -
    434  //to save time if already disconnected
    -
    435  //if (_webserver->hasArg ("PAGEID") ) {
    -
    436  // if (_webserver->arg ("PAGEID").length() > 0 ) {
    -
    437  // if (_webserver->arg ("PAGEID").toInt() != _id_connection) {
    -
    438  // _webserver->send (200, "text/plain", "Invalid command");
    -
    439  // return;
    -
    440  // }
    -
    441  // }
    -
    442  //}
    -
    443  level_authenticate_type auth_level = is_authenticated();
    -
    444  String cmd = "";
    -
    445  if (_webserver->hasArg ("plain") || _webserver->hasArg ("commandText") ) {
    -
    446  if (_webserver->hasArg ("plain") ) {
    -
    447  cmd = _webserver->arg ("plain");
    -
    448  } else {
    -
    449  cmd = _webserver->arg ("commandText");
    -
    450  }
    -
    451  } else {
    -
    452  _webserver->send (200, "text/plain", "Invalid command");
    -
    453  return;
    -
    454  }
    -
    455  //if it is internal command [ESPXXX]<parameter>
    -
    456  cmd.trim();
    -
    457  int ESPpos = cmd.indexOf ("[ESP");
    -
    458  if (ESPpos > -1) {
    -
    459  //is there the second part?
    -
    460  int ESPpos2 = cmd.indexOf ("]", ESPpos);
    -
    461  if (ESPpos2 > -1) {
    -
    462  //Split in command and parameters
    -
    463  String cmd_part1 = cmd.substring (ESPpos + 4, ESPpos2);
    -
    464  String cmd_part2 = "";
    -
    465  //only [ESP800] is allowed login free if authentication is enabled
    -
    466  if ( (auth_level == LEVEL_GUEST) && (cmd_part1.toInt() != 800) ) {
    -
    467  _webserver->send (401, "text/plain", "Authentication failed!\n");
    -
    468  return;
    -
    469  }
    -
    470  //is there space for parameters?
    -
    471  if (ESPpos2 < cmd.length() ) {
    -
    472  cmd_part2 = cmd.substring (ESPpos2 + 1);
    -
    473  }
    -
    474  //if command is a valid number then execute command
    -
    475  if (cmd_part1.toInt() != 0) {
    -
    476  ESPResponseStream espresponse(_webserver);
    -
    477  //commmand is web only
    -
    478  execute_internal_command (cmd_part1.toInt(), cmd_part2, auth_level, &espresponse);
    -
    479  //flush
    -
    480  espresponse.flush();
    -
    481  }
    -
    482  //if not is not a valid [ESPXXX] command
    -
    483  }
    -
    484  } else { //execute GCODE
    -
    485  if (auth_level == LEVEL_GUEST) {
    -
    486  _webserver->send (401, "text/plain", "Authentication failed!\n");
    -
    487  return;
    -
    488  }
    -
    489  //Instead of send several commands one by one by web / send full set and split here
    -
    490  String scmd;
    -
    491  String res = "Ok";
    -
    492  uint8_t sindex = 0;
    -
    493  scmd = get_Splited_Value(cmd,'\n', sindex);
    -
    494  while ( scmd != "" ){
    -
    495  scmd+="\n";
    -
    496  Serial2Socket.push(scmd.c_str());
    -
    497  //GCodeQueue::enqueue_one_now(scmd.c_str());
    -
    498  sindex++;
    -
    499  scmd = get_Splited_Value(cmd,'\n', sindex);
    -
    500  }
    -
    501  _webserver->send (200, "text/plain", res.c_str());
    -
    502  }
    -
    503 }
    -
    504 //Handle web command query and send answer//////////////////////////////
    -
    505 void Web_Server::handle_web_command_silent ()
    -
    506 {
    -
    507  //to save time if already disconnected
    -
    508  //if (_webserver->hasArg ("PAGEID") ) {
    -
    509  // if (_webserver->arg ("PAGEID").length() > 0 ) {
    -
    510  // if (_webserver->arg ("PAGEID").toInt() != _id_connection) {
    -
    511  // _webserver->send (200, "text/plain", "Invalid command");
    -
    512  // return;
    -
    513  // }
    -
    514  // }
    -
    515  //}
    -
    516  level_authenticate_type auth_level = is_authenticated();
    -
    517  String cmd = "";
    -
    518  if (_webserver->hasArg ("plain") || _webserver->hasArg ("commandText") ) {
    -
    519  if (_webserver->hasArg ("plain") ) {
    -
    520  cmd = _webserver->arg ("plain");
    -
    521  } else {
    -
    522  cmd = _webserver->arg ("commandText");
    -
    523  }
    -
    524  } else {
    -
    525  _webserver->send (200, "text/plain", "Invalid command");
    -
    526  return;
    -
    527  }
    -
    528  //if it is internal command [ESPXXX]<parameter>
    -
    529  cmd.trim();
    -
    530  int ESPpos = cmd.indexOf ("[ESP");
    -
    531  if (ESPpos > -1) {
    -
    532  //is there the second part?
    -
    533  int ESPpos2 = cmd.indexOf ("]", ESPpos);
    -
    534  if (ESPpos2 > -1) {
    -
    535  //Split in command and parameters
    -
    536  String cmd_part1 = cmd.substring (ESPpos + 4, ESPpos2);
    -
    537  String cmd_part2 = "";
    -
    538  //only [ESP800] is allowed login free if authentication is enabled
    -
    539  if ( (auth_level == LEVEL_GUEST) && (cmd_part1.toInt() != 800) ) {
    -
    540  _webserver->send (401, "text/plain", "Authentication failed!\n");
    -
    541  return;
    -
    542  }
    -
    543  //is there space for parameters?
    -
    544  if (ESPpos2 < cmd.length() ) {
    -
    545  cmd_part2 = cmd.substring (ESPpos2 + 1);
    -
    546  }
    -
    547  //if command is a valid number then execute command
    -
    548  if (cmd_part1.toInt() != 0) {
    -
    549  //commmand is web only
    -
    550  if(execute_internal_command (cmd_part1.toInt(), cmd_part2, auth_level, NULL)) _webserver->send (200, "text/plain", "ok");
    -
    551  else _webserver->send (200, "text/plain", "error");
    -
    552  }
    -
    553  //if not is not a valid [ESPXXX] command
    -
    554  }
    -
    555  } else { //execute GCODE
    -
    556  if (auth_level == LEVEL_GUEST) {
    -
    557  _webserver->send (401, "text/plain", "Authentication failed!\n");
    -
    558  return;
    -
    559  }
    -
    560  //Instead of send several commands one by one by web / send full set and split here
    -
    561  String scmd;
    -
    562  uint8_t sindex = 0;
    -
    563  scmd = get_Splited_Value(cmd,'\n', sindex);
    -
    564  String res = "Ok";
    -
    565  while (scmd != "" ){
    -
    566  scmd+="\n";
    -
    567  Serial2Socket.push(scmd.c_str());
    -
    568  //GCodeQueue::enqueue_one_now(scmd.c_str());
    -
    569  sindex++;
    -
    570  scmd = get_Splited_Value(cmd,'\n', sindex);
    -
    571  }
    -
    572  _webserver->send (200, "text/plain", res.c_str());
    -
    573  }
    -
    574 }
    -
    575 
    -
    576 
    -
    577 bool Web_Server::execute_internal_command (int cmd, String cmd_params, level_authenticate_type auth_level, ESPResponseStream *espresponse)
    -
    578 {
    -
    579  bool response = true;
    -
    580  level_authenticate_type auth_type = auth_level;
    -
    581 
    -
    582  //manage parameters
    -
    583  String parameter;
    -
    584  switch (cmd) {
    -
    585  //Get SD Card Status
    -
    586  //[ESP200]
    -
    587  case 200:
    -
    588  {
    -
    589  if (!espresponse) return false;
    -
    590  String resp = "No SD card";
    -
    591 #if ENABLED(SDSUPPORT)
    -
    592  ESP_SD card;
    -
    593  int8_t state = card.card_status();
    -
    594  if (state == -1)resp="Busy";
    -
    595  else if (state == 1)resp="SD card detected";
    -
    596  else resp="No SD card";
    -
    597 #endif
    -
    598  espresponse->println (resp.c_str());
    -
    599  }
    -
    600  break;
    -
    601  //Get full ESP32 wifi settings content
    -
    602  //[ESP400]
    -
    603  case 400:
    -
    604  {
    -
    605  String v;
    -
    606  String defV;
    -
    607  Preferences prefs;
    -
    608  if (!espresponse) return false;
    -
    609 #ifdef ENABLE_AUTHENTICATION
    -
    610  if (auth_type == LEVEL_GUEST) return false;
    -
    611 #endif
    -
    612  int8_t vi;
    -
    613  espresponse->print("{\"EEPROM\":[");
    -
    614  prefs.begin(NAMESPACE, true);
    -
    615  //1 - Hostname
    -
    616  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    617  espresponse->print (HOSTNAME_ENTRY);
    -
    618  espresponse->print ("\",\"T\":\"S\",\"V\":\"");
    -
    619  espresponse->print (_hostname.c_str());
    -
    620  espresponse->print ("\",\"H\":\"Hostname\" ,\"S\":\"");
    -
    621  espresponse->print (String(MAX_HOSTNAME_LENGTH).c_str());
    -
    622  espresponse->print ("\", \"M\":\"");
    -
    623  espresponse->print (String(MIN_HOSTNAME_LENGTH).c_str());
    -
    624  espresponse->print ("\"}");
    -
    625  espresponse->print (",");
    -
    626 
    -
    627  //2 - http protocol mode
    -
    628  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    629  espresponse->print (HTTP_ENABLE_ENTRY);
    -
    630  espresponse->print ("\",\"T\":\"B\",\"V\":\"");
    -
    631  vi = prefs.getChar(HTTP_ENABLE_ENTRY, 1);
    -
    632  espresponse->print (String(vi).c_str());
    -
    633  espresponse->print ("\",\"H\":\"HTTP protocol\",\"O\":[{\"Enabled\":\"1\"},{\"Disabled\":\"0\"}]}");
    -
    634  espresponse->print (",");
    -
    635 
    -
    636  //3 - http port
    -
    637  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    638  espresponse->print (HTTP_PORT_ENTRY);
    -
    639  espresponse->print ("\",\"T\":\"I\",\"V\":\"");
    -
    640  espresponse->print (String(_port).c_str());
    -
    641  espresponse->print ("\",\"H\":\"HTTP Port\",\"S\":\"");
    -
    642  espresponse->print (String(MAX_HTTP_PORT).c_str());
    -
    643  espresponse->print ("\",\"M\":\"");
    -
    644  espresponse->print (String(MIN_HTTP_PORT).c_str());
    -
    645  espresponse->print ("\"}");
    -
    646  espresponse->print (",");
    -
    647 
    -
    648  //TODO
    -
    649  //4 - telnet protocol mode
    -
    650  /* espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    651  espresponse->print (TELNET_ENABLE_ENTRY);
    -
    652  espresponse->print ("\",\"T\":\"B\",\"V\":\"");
    -
    653  vi = prefs.getChar(TELNET_ENABLE_ENTRY, 0);
    -
    654  espresponse->print (String(vi).c_str());
    -
    655  espresponse->print ("\",\"H\":\"Telnet protocol\",\"O\":[{\"Enabled\":\"1\"},{\"Disabled\":\"0\"}]}");
    -
    656  espresponse->print (",");*/
    -
    657 
    -
    658  //5 - telnet Port
    -
    659  /* espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    660  espresponse->print (TELNET_PORT_ENTRY);
    -
    661  espresponse->print ("\",\"T\":\"I\",\"V\":\"");
    -
    662  espresponse->print (String(_data_port).c_str());
    -
    663  espresponse->print ("\",\"H\":\"Telnet Port\",\"S\":\"");
    -
    664  espresponse->print (String(MAX_TELNET_PORT).c_str());
    -
    665  espresponse->print ("\",\"M\":\"");
    -
    666  espresponse->print (String(MIN_TELNET_PORT).c_str());
    -
    667  espresponse->print ("\"}");
    -
    668  espresponse->print (",");*/
    -
    669 
    -
    670  //6 - wifi mode
    -
    671  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    672  espresponse->print (ESP_WIFI_MODE);
    -
    673  espresponse->print ("\",\"T\":\"B\",\"V\":\"");
    -
    674  vi = prefs.getChar(ESP_WIFI_MODE, ESP_WIFI_OFF);
    -
    675  espresponse->print (String(vi).c_str());
    -
    676  espresponse->print ("\",\"H\":\"Wifi mode\",\"O\":[{\"STA\":\"1\"},{\"AP\":\"2\"},{\"None\":\"0\"}]}");
    -
    677  espresponse->print (",");
    -
    678 
    -
    679  //7 - STA SSID
    -
    680  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    681  espresponse->print (STA_SSID_ENTRY);
    -
    682  espresponse->print ("\",\"T\":\"S\",\"V\":\"");
    -
    683  defV = DEFAULT_STA_SSID;
    -
    684  espresponse->print (prefs.getString(STA_SSID_ENTRY, defV).c_str());
    -
    685  espresponse->print ("\",\"S\":\"");
    -
    686  espresponse->print (String(MAX_SSID_LENGTH).c_str());
    -
    687  espresponse->print ("\",\"H\":\"Station SSID\",\"M\":\"");
    -
    688  espresponse->print (String(MIN_SSID_LENGTH).c_str());
    -
    689  espresponse->print ("\"}");
    -
    690  espresponse->print (",");
    -
    691 
    -
    692  //8 - STA password
    -
    693  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    694  espresponse->print (STA_PWD_ENTRY);
    -
    695  espresponse->print ("\",\"T\":\"S\",\"V\":\"");
    -
    696  espresponse->print (HIDDEN_PASSWORD);
    -
    697  espresponse->print ("\",\"S\":\"");
    -
    698  espresponse->print (String(MAX_PASSWORD_LENGTH).c_str());
    -
    699  espresponse->print ("\",\"H\":\"Station Password\",\"M\":\"");
    -
    700  espresponse->print (String(MIN_PASSWORD_LENGTH).c_str());
    -
    701  espresponse->print ("\"}");
    -
    702  espresponse->print (",");
    -
    703 
    -
    704  // 9 - STA IP mode
    -
    705  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    706  espresponse->print (STA_IP_MODE_ENTRY);
    -
    707  espresponse->print ("\",\"T\":\"B\",\"V\":\"");
    -
    708  espresponse->print (String(prefs.getChar(STA_IP_MODE_ENTRY, DHCP_MODE)).c_str());
    -
    709  espresponse->print ("\",\"H\":\"Station IP Mode\",\"O\":[{\"DHCP\":\"0\"},{\"Static\":\"1\"}]}");
    -
    710  espresponse->print (",");
    -
    711 
    -
    712  //10-STA static IP
    -
    713  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    714  espresponse->print (STA_IP_ENTRY);
    -
    715  espresponse->print ("\",\"T\":\"A\",\"V\":\"");
    -
    716  espresponse->print (wifi_config.IP_string_from_int(prefs.getInt(STA_IP_ENTRY, 0)).c_str());
    -
    717  espresponse->print ("\",\"H\":\"Station Static IP\"}");
    -
    718  espresponse->print (",");
    -
    719 
    -
    720  //11-STA static Gateway
    -
    721  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    722  espresponse->print (STA_GW_ENTRY);
    -
    723  espresponse->print ("\",\"T\":\"A\",\"V\":\"");
    -
    724  espresponse->print (wifi_config.IP_string_from_int(prefs.getInt(STA_GW_ENTRY, 0)).c_str());
    -
    725  espresponse->print ("\",\"H\":\"Station Static Gateway\"}");
    -
    726  espresponse->print (",");
    -
    727 
    -
    728  //12-STA static Mask
    -
    729  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    730  espresponse->print (STA_MK_ENTRY);
    -
    731  espresponse->print ("\",\"T\":\"A\",\"V\":\"");
    -
    732  espresponse->print (wifi_config.IP_string_from_int(prefs.getInt(STA_MK_ENTRY, 0)).c_str());
    -
    733  espresponse->print ("\",\"H\":\"Station Static Mask\"}");
    -
    734  espresponse->print (",");
    -
    735 
    -
    736  //13 - AP SSID
    -
    737  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    738  espresponse->print (AP_SSID_ENTRY);
    -
    739  espresponse->print ("\",\"T\":\"S\",\"V\":\"");
    -
    740  defV = DEFAULT_AP_SSID;
    -
    741  espresponse->print (prefs.getString(AP_SSID_ENTRY, defV).c_str());
    -
    742  espresponse->print ("\",\"S\":\"");
    -
    743  espresponse->print (String(MAX_SSID_LENGTH).c_str());
    -
    744  espresponse->print ("\",\"H\":\"AP SSID\",\"M\":\"");
    -
    745  espresponse->print (String(MIN_SSID_LENGTH).c_str());
    -
    746  espresponse->print ("\"}");
    -
    747  espresponse->print (",");
    -
    748 
    -
    749  //14 - AP password
    -
    750  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    751  espresponse->print (AP_PWD_ENTRY);
    -
    752  espresponse->print ("\",\"T\":\"S\",\"V\":\"");
    -
    753  espresponse->print (HIDDEN_PASSWORD);
    -
    754  espresponse->print ("\",\"S\":\"");
    -
    755  espresponse->print (String(MAX_PASSWORD_LENGTH).c_str());
    -
    756  espresponse->print ("\",\"H\":\"AP Password\",\"M\":\"");
    -
    757  espresponse->print (String(MIN_PASSWORD_LENGTH).c_str());
    -
    758  espresponse->print ("\"}");
    -
    759  espresponse->print (",");
    -
    760 
    -
    761  //15 - AP static IP
    -
    762  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    763  espresponse->print (AP_IP_ENTRY);
    -
    764  espresponse->print ("\",\"T\":\"A\",\"V\":\"");
    -
    765  defV = DEFAULT_AP_IP;
    -
    766  espresponse->print (wifi_config.IP_string_from_int(prefs.getInt(AP_IP_ENTRY, wifi_config.IP_int_from_string(defV))).c_str());
    -
    767  espresponse->print ("\",\"H\":\"AP Static IP\"}");
    -
    768  espresponse->print (",");
    -
    769 
    -
    770  //16 - AP Channel
    -
    771  espresponse->print ("{\"F\":\"network\",\"P\":\"");
    -
    772  espresponse->print (AP_CHANNEL_ENTRY);
    -
    773  espresponse->print ("\",\"T\":\"B\",\"V\":\"");
    -
    774  espresponse->print (String(prefs.getChar(AP_CHANNEL_ENTRY, DEFAULT_AP_CHANNEL)).c_str());
    -
    775  espresponse->print ("\",\"H\":\"AP Channel\",\"O\":[");
    -
    776  for (int i = MIN_CHANNEL; i <= MAX_CHANNEL ; i++) {
    -
    777  espresponse->print ("{\"");
    -
    778  espresponse->print (String(i).c_str());
    -
    779  espresponse->print ("\":\"");
    -
    780  espresponse->print (String(i).c_str());
    -
    781  espresponse->print ("\"}");
    -
    782  if (i < MAX_CHANNEL) {
    -
    783  espresponse->print (",");
    -
    784  }
    -
    785  }
    -
    786  espresponse->print ("]}");
    -
    787 
    -
    788  espresponse->print ("]}");
    -
    789  prefs.end();
    -
    790  }
    -
    791  break;
    -
    792  //Set EEPROM setting
    -
    793  //[ESP401]P=<position> T=<type> V=<value> pwd=<user/admin password>
    -
    794  case 401:
    -
    795  {
    -
    796 #ifdef ENABLE_AUTHENTICATION
    -
    797  if (auth_type != LEVEL_ADMIN) return false;
    -
    798 #endif
    -
    799  //check validity of parameters
    -
    800  String spos = get_param (cmd_params, "P=", false);
    -
    801  String styp = get_param (cmd_params, "T=", false);
    -
    802  String sval = get_param (cmd_params, "V=", true);
    -
    803  spos.trim();
    -
    804  sval.trim();
    -
    805  if (spos.length() == 0) {
    -
    806  response = false;
    -
    807  }
    -
    808  if (! (styp == "B" || styp == "S" || styp == "A" || styp == "I" || styp == "F") ) {
    -
    809  response = false;
    -
    810  }
    -
    811  if ((sval.length() == 0) && !((spos==AP_PWD_ENTRY) || (spos==STA_PWD_ENTRY))){
    -
    812  response = false;
    -
    813  }
    -
    814 
    -
    815  if (response) {
    -
    816  Preferences prefs;
    -
    817  prefs.begin(NAMESPACE, false);
    -
    818  //Byte value
    -
    819  if ((styp == "B") || (styp == "F")){
    -
    820  int8_t bbuf = sval.toInt();
    -
    821  if (prefs.putChar(spos.c_str(), bbuf) ==0 ) {
    -
    822  response = false;
    -
    823  } else {
    -
    824  //dynamique refresh is better than restart the board
    -
    825  if (spos == ESP_WIFI_MODE){
    -
    826  //TODO
    -
    827  }
    -
    828  if (spos == AP_CHANNEL_ENTRY) {
    -
    829  //TODO
    -
    830  }
    -
    831  if (spos == HTTP_ENABLE_ENTRY) {
    -
    832  //TODO
    -
    833  }
    -
    834  if (spos == TELNET_ENABLE_ENTRY) {
    -
    835  //TODO
    -
    836  }
    -
    837  }
    -
    838  }
    -
    839  //Integer value
    -
    840  if (styp == "I") {
    -
    841  int16_t ibuf = sval.toInt();
    -
    842  if (prefs.putUShort(spos.c_str(), ibuf) == 0) {
    -
    843  response = false;
    -
    844  } else {
    -
    845  if (spos == HTTP_PORT_ENTRY){
    -
    846  //TODO
    -
    847  }
    -
    848  if (spos == TELNET_PORT_ENTRY){
    -
    849  //TODO
    -
    850  //Serial.println(ibuf);
    -
    851  }
    -
    852  }
    -
    853 
    -
    854  }
    -
    855  //String value
    -
    856  if (styp == "S") {
    -
    857  if (prefs.putString(spos.c_str(), sval) == 0) {
    -
    858  response = false;
    -
    859  } else {
    -
    860  if (spos == HOSTNAME_ENTRY){
    -
    861  //TODO
    -
    862  }
    -
    863  if (spos == STA_SSID_ENTRY){
    -
    864  //TODO
    -
    865  }
    -
    866  if (spos == STA_PWD_ENTRY){
    -
    867  //TODO
    -
    868  }
    -
    869  if (spos == AP_SSID_ENTRY){
    -
    870  //TODO
    -
    871  }
    -
    872  if (spos == AP_PWD_ENTRY){
    -
    873  //TODO
    -
    874  }
    -
    875  }
    -
    876 
    -
    877  }
    -
    878  //IP address
    -
    879  if (styp == "A") {
    -
    880  if (prefs.putInt(spos.c_str(), wifi_config.IP_int_from_string(sval)) == 0) {
    -
    881  response = false;
    -
    882  } else {
    -
    883  if (spos == STA_IP_ENTRY){
    -
    884  //TODO
    -
    885  }
    -
    886  if (spos == STA_GW_ENTRY){
    -
    887  //TODO
    -
    888  }
    -
    889  if (spos == STA_MK_ENTRY){
    -
    890  //TODO
    -
    891  }
    -
    892  if (spos == AP_IP_ENTRY){
    -
    893  //TODO
    -
    894  }
    -
    895  }
    -
    896  }
    -
    897  prefs.end();
    -
    898  }
    -
    899  if (!response) {
    -
    900  if (espresponse) espresponse->println ("Error: Incorrect Command");
    -
    901  } else {
    -
    902  if (espresponse) espresponse->println ("ok");
    -
    903  }
    -
    904 
    -
    905  }
    -
    906  break;
    -
    907  //Get available AP list (limited to 30)
    -
    908  //output is JSON
    -
    909  //[ESP410]
    -
    910  case 410: {
    -
    911  if (!espresponse)return false;
    -
    912 #ifdef ENABLE_AUTHENTICATION
    -
    913  if (auth_type == LEVEL_GUEST) return false;
    -
    914 #endif
    -
    915  espresponse->print("{\"AP_LIST\":[");
    -
    916  int n = WiFi.scanNetworks();
    -
    917  if (n > 0) {
    -
    918  for (int i = 0; i < n; ++i) {
    -
    919  if (i > 0) {
    -
    920  espresponse->print (",");
    -
    921  }
    -
    922  espresponse->print ("{\"SSID\":\"");
    -
    923  espresponse->print (WiFi.SSID (i).c_str());
    -
    924  espresponse->print ("\",\"SIGNAL\":\"");
    -
    925  espresponse->print (String(wifi_config.getSignal (WiFi.RSSI (i) )).c_str());
    -
    926  espresponse->print ("\",\"IS_PROTECTED\":\"");
    -
    927 
    -
    928  if (WiFi.encryptionType (i) == WIFI_AUTH_OPEN) {
    -
    929  espresponse->print ("0");
    -
    930  } else {
    -
    931  espresponse->print ("1");
    -
    932  }
    -
    933  espresponse->print ("\"}");
    -
    934  wifi_config.wait(0);
    -
    935  }
    -
    936  WiFi.scanDelete();
    -
    937  }
    -
    938  espresponse->print ("]}");
    -
    939  //Ugly fix for the AP mode
    -
    940  if (WiFi.getMode() == WIFI_AP_STA) {
    -
    941  WiFi.enableSTA (false);
    -
    942  }
    -
    943  }
    -
    944  break;
    -
    945  //Get ESP current status
    -
    946  case 420:
    -
    947  {
    -
    948 #ifdef ENABLE_AUTHENTICATION
    -
    949  if (auth_type == LEVEL_GUEST) return false;
    -
    950 #endif
    -
    951  if (!espresponse)return false;
    -
    952  espresponse->print ("Chip ID: ");
    -
    953  espresponse->print (String ( (uint16_t) (ESP.getEfuseMac() >> 32) ).c_str());
    -
    954  espresponse->print ("\n");
    -
    955  espresponse->print ("CPU Frequency: ");
    -
    956  espresponse->print (String (ESP.getCpuFreqMHz() ).c_str());
    -
    957  espresponse->print ("Mhz");
    -
    958  espresponse->print ("\n");
    -
    959  espresponse->print ("CPU Temperature: ");
    -
    960  espresponse->print (String (temperatureRead(), 1).c_str());
    -
    961  espresponse->print ("&deg;C");
    -
    962  espresponse->print ("\n");
    -
    963  espresponse->print ("Free memory: ");
    -
    964  espresponse->print (formatBytes (ESP.getFreeHeap()).c_str());
    -
    965  espresponse->print ("\n");
    -
    966  espresponse->print ("SDK: ");
    -
    967  espresponse->print (ESP.getSdkVersion());
    -
    968  espresponse->print ("\n");
    -
    969  espresponse->print ("Flash Size: ");
    -
    970  espresponse->print (formatBytes (ESP.getFlashChipSize()).c_str());
    -
    971  espresponse->print ("\n");
    -
    972  espresponse->print ("Available Size for update: ");
    -
    973  //Not OTA on 2Mb board per spec
    -
    974  if (ESP.getFlashChipSize() > 0x20000) {
    -
    975  espresponse->print (formatBytes (0x140000).c_str());
    -
    976  } else {
    -
    977  espresponse->print (formatBytes (0x0).c_str());
    -
    978  }
    -
    979  espresponse->print ("\n");
    -
    980  espresponse->print ("Available Size for SPIFFS: ");
    -
    981  espresponse->print (formatBytes (SPIFFS.totalBytes()).c_str());
    -
    982  espresponse->print ("\n");
    -
    983  espresponse->print ("Baud rate: ");
    -
    984  long br = Serial.baudRate();
    -
    985  //workaround for ESP32
    -
    986  if (br == 115201) {
    -
    987  br = 115200;
    -
    988  }
    -
    989  if (br == 230423) {
    -
    990  br = 230400;
    -
    991  }
    -
    992  espresponse->print (String(br).c_str());
    -
    993  espresponse->print ("\n");
    -
    994  espresponse->print ("Sleep mode: ");
    -
    995  if (WiFi.getSleep())espresponse->print ("Modem");
    -
    996  else espresponse->print ("None");
    -
    997  espresponse->print ("\n");
    -
    998  espresponse->print ("Web port: ");
    -
    999  espresponse->print (String(_port).c_str());
    -
    1000  espresponse->print ("\n");
    -
    1001  espresponse->print ("Data port: ");
    -
    1002  if (_data_port!=0)espresponse->print (String(_data_port).c_str());
    -
    1003  else espresponse->print ("Disabled");
    -
    1004  espresponse->print ("\n");
    -
    1005  espresponse->print ("Hostname: ");
    -
    1006  espresponse->print ( _hostname.c_str());
    -
    1007  espresponse->print ("\n");
    -
    1008  espresponse->print ("Active Mode: ");
    -
    1009  if (WiFi.getMode() == WIFI_STA) {
    -
    1010  espresponse->print ("STA (");
    -
    1011  espresponse->print ( WiFi.macAddress().c_str());
    -
    1012  espresponse->print (")");
    -
    1013  espresponse->print ("\n");
    -
    1014  espresponse->print ("Connected to: ");
    -
    1015  if (WiFi.isConnected()){ //in theory no need but ...
    -
    1016  espresponse->print (WiFi.SSID().c_str());
    -
    1017  espresponse->print ("\n");
    -
    1018  espresponse->print ("Signal: ");
    -
    1019  espresponse->print ( String(wifi_config.getSignal (WiFi.RSSI())).c_str());
    -
    1020  espresponse->print ("%");
    -
    1021  espresponse->print ("\n");
    -
    1022  uint8_t PhyMode;
    -
    1023  esp_wifi_get_protocol (ESP_IF_WIFI_STA, &PhyMode);
    -
    1024  espresponse->print ("Phy Mode: ");
    -
    1025  if (PhyMode == (WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G | WIFI_PROTOCOL_11N)) espresponse->print ("11n");
    -
    1026  else if (PhyMode == (WIFI_PROTOCOL_11B | WIFI_PROTOCOL_11G)) espresponse->print ("11g");
    -
    1027  else if (PhyMode == (WIFI_PROTOCOL_11B )) espresponse->print ("11b");
    -
    1028  else espresponse->print ("???");
    -
    1029  espresponse->print ("\n");
    -
    1030  espresponse->print ("Channel: ");
    -
    1031  espresponse->print (String (WiFi.channel()).c_str());
    -
    1032  espresponse->print ("\n");
    -
    1033  espresponse->print ("IP Mode: ");
    -
    1034  tcpip_adapter_dhcp_status_t dhcp_status;
    -
    1035  tcpip_adapter_dhcpc_get_status (TCPIP_ADAPTER_IF_STA, &dhcp_status);
    -
    1036  if (dhcp_status == TCPIP_ADAPTER_DHCP_STARTED)espresponse->print ("DHCP");
    -
    1037  else espresponse->print ("Static");
    -
    1038  espresponse->print ("\n");
    -
    1039  espresponse->print ("IP: ");
    -
    1040  espresponse->print (WiFi.localIP().toString().c_str());
    -
    1041  espresponse->print ("\n");
    -
    1042  espresponse->print ("Gateway: ");
    -
    1043  espresponse->print (WiFi.gatewayIP().toString().c_str());
    -
    1044  espresponse->print ("\n");
    -
    1045  espresponse->print ("Mask: ");
    -
    1046  espresponse->print (WiFi.subnetMask().toString().c_str());
    -
    1047  espresponse->print ("\n");
    -
    1048  espresponse->print ("DNS: ");
    -
    1049  espresponse->print (WiFi.dnsIP().toString().c_str());
    -
    1050  espresponse->print ("\n");
    -
    1051  } //this is web command so connection => no command
    -
    1052  espresponse->print ("Disabled Mode: ");
    -
    1053  espresponse->print ("AP (");
    -
    1054  espresponse->print (WiFi.softAPmacAddress().c_str());
    -
    1055  espresponse->print (")");
    -
    1056  espresponse->print ("\n");
    -
    1057  } else if (WiFi.getMode() == WIFI_AP) {
    -
    1058  espresponse->print ("AP (");
    -
    1059  espresponse->print (WiFi.softAPmacAddress().c_str());
    -
    1060  espresponse->print (")");
    -
    1061  espresponse->print ("\n");
    -
    1062  wifi_config_t conf;
    -
    1063  esp_wifi_get_config (ESP_IF_WIFI_AP, &conf);
    -
    1064  espresponse->print ("SSID: ");
    -
    1065  espresponse->print ((const char*) conf.ap.ssid);
    -
    1066  espresponse->print ("\n");
    -
    1067  espresponse->print ("Visible: ");
    -
    1068  espresponse->print ( (conf.ap.ssid_hidden == 0) ? "Yes" : "No");
    -
    1069  espresponse->print ("\n");
    -
    1070  espresponse->print ("Authentication: ");
    -
    1071  if (conf.ap.authmode == WIFI_AUTH_OPEN) {
    -
    1072  espresponse->print ("None");
    -
    1073  } else if (conf.ap.authmode == WIFI_AUTH_WEP) {
    -
    1074  espresponse->print ("WEP");
    -
    1075  } else if (conf.ap.authmode == WIFI_AUTH_WPA_PSK) {
    -
    1076  espresponse->print ("WPA");
    -
    1077  } else if (conf.ap.authmode == WIFI_AUTH_WPA2_PSK) {
    -
    1078  espresponse->print ("WPA2");
    -
    1079  } else {
    -
    1080  espresponse->print ("WPA/WPA2");
    -
    1081  }
    -
    1082  espresponse->print ("\n");
    -
    1083  espresponse->print ("Max Connections: ");
    -
    1084  espresponse->print (String(conf.ap.max_connection).c_str());
    -
    1085  espresponse->print ("\n");
    -
    1086  espresponse->print ("DHCP Server: ");
    -
    1087  tcpip_adapter_dhcp_status_t dhcp_status;
    -
    1088  tcpip_adapter_dhcps_get_status (TCPIP_ADAPTER_IF_AP, &dhcp_status);
    -
    1089  if (dhcp_status == TCPIP_ADAPTER_DHCP_STARTED)espresponse->print ("Started");
    -
    1090  else espresponse->print ("Stopped");
    -
    1091  espresponse->print ("\n");
    -
    1092  espresponse->print ("IP: ");
    -
    1093  espresponse->print (WiFi.softAPIP().toString().c_str());
    -
    1094  espresponse->print ("\n");
    -
    1095  tcpip_adapter_ip_info_t ip_AP;
    -
    1096  tcpip_adapter_get_ip_info (TCPIP_ADAPTER_IF_AP, &ip_AP);
    -
    1097  espresponse->print ("Gateway: ");
    -
    1098  espresponse->print (IPAddress (ip_AP.gw.addr).toString().c_str());
    -
    1099  espresponse->print ("\n");
    -
    1100  espresponse->print ("Mask: ");
    -
    1101  espresponse->print (IPAddress (ip_AP.netmask.addr).toString().c_str());
    -
    1102  espresponse->print ("\n");
    -
    1103  espresponse->print ("Connected clients: ");
    -
    1104  wifi_sta_list_t station;
    -
    1105  tcpip_adapter_sta_list_t tcpip_sta_list;
    -
    1106  esp_wifi_ap_get_sta_list (&station);
    -
    1107  tcpip_adapter_get_sta_list (&station, &tcpip_sta_list);
    -
    1108  espresponse->print (String(station.num).c_str());
    -
    1109  espresponse->print ("\n");
    -
    1110  for (int i = 0; i < station.num; i++) {
    -
    1111  espresponse->print (mac2str(tcpip_sta_list.sta[i].mac));
    -
    1112  espresponse->print (" ");
    -
    1113  espresponse->print ( IPAddress (tcpip_sta_list.sta[i].ip.addr).toString().c_str());
    -
    1114  espresponse->print ("\n");
    -
    1115  }
    -
    1116  espresponse->print ("Disabled Mode: ");
    -
    1117  espresponse->print ("STA (");
    -
    1118  espresponse->print (WiFi.macAddress().c_str());
    -
    1119  espresponse->print (")");
    -
    1120  espresponse->print ("\n");
    -
    1121  } else if (WiFi.getMode() == WIFI_AP_STA) //we should not be in this state but just in case ....
    -
    1122  {
    -
    1123  espresponse->print ("Mixed");
    -
    1124  espresponse->print ("\n");
    -
    1125  espresponse->print ("STA (");
    -
    1126  espresponse->print (WiFi.macAddress().c_str());
    -
    1127  espresponse->print (")");
    -
    1128  espresponse->print ("\n");
    -
    1129  espresponse->print ("AP (");
    -
    1130  espresponse->print (WiFi.softAPmacAddress().c_str());
    -
    1131  espresponse->print (")");
    -
    1132  espresponse->print ("\n");
    -
    1133 
    -
    1134  } else { //we should not be there if no wifi ....
    -
    1135  espresponse->print ("Wifi Off");
    -
    1136  espresponse->print ("\n");
    -
    1137  }
    -
    1138  //TODO to complete
    -
    1139  espresponse->print ("FW version: Marlin ");
    -
    1140  espresponse->print (SHORT_BUILD_VERSION);
    -
    1141  espresponse->print (" (ESP32)");
    -
    1142  }
    -
    1143  break;
    -
    1144  //Set ESP mode
    -
    1145  //cmd is RESTART
    -
    1146  //[ESP444]<cmd>
    -
    1147  case 444:
    -
    1148  parameter = get_param(cmd_params,"", true);
    -
    1149 #ifdef ENABLE_AUTHENTICATION
    -
    1150  if (auth_type != LEVEL_ADMIN) {
    -
    1151  response = false;
    -
    1152  } else
    -
    1153 #endif
    -
    1154  {
    -
    1155  if (parameter=="RESTART") {
    -
    1156  MYSERIAL0.println("Restart ongoing");
    -
    1157 #if NUM_SERIAL > 1
    -
    1158  MYSERIAL1.println("Restart ongoing");
    -
    1159 #endif
    - -
    1161  } else response = false;
    -
    1162  }
    -
    1163  if (!response) {
    -
    1164  if (espresponse)espresponse->println ("Error: Incorrect Command");
    -
    1165  } else {
    -
    1166  if (espresponse)espresponse->println ("ok");
    -
    1167  }
    -
    1168  break;
    -
    1169 #ifdef ENABLE_AUTHENTICATION
    -
    1170  //Change / Reset user password
    -
    1171  //[ESP555]<password>
    -
    1172  case 555: {
    -
    1173  if (auth_type == LEVEL_ADMIN) {
    -
    1174  parameter = get_param (cmd_params, "", true);
    -
    1175  if (parameter.length() == 0) {
    -
    1176  Preferences prefs;
    -
    1177  parameter = DEFAULT_USER_PWD;
    -
    1178  prefs.begin(NAMESPACE, false);
    -
    1179  if (prefs.putString(USER_PWD_ENTRY, parameter) != parameter.length()){
    -
    1180  response = false;
    -
    1181  espresponse->println ("error");
    -
    1182  } else espresponse->println ("ok");
    -
    1183  prefs.end();
    -
    1184 
    -
    1185  } else {
    -
    1186  if (isLocalPasswordValid (parameter.c_str() ) ) {
    -
    1187  Preferences prefs;
    -
    1188  prefs.begin(NAMESPACE, false);
    -
    1189  if (prefs.putString(USER_PWD_ENTRY, parameter) != parameter.length()) {
    -
    1190  response = false;
    -
    1191  espresponse->println ("error");
    -
    1192  } else espresponse->println ("ok");
    -
    1193  prefs.end();
    -
    1194  } else {
    -
    1195  espresponse->println ("error");
    -
    1196  response = false;
    -
    1197  }
    -
    1198  }
    -
    1199  } else {
    -
    1200  espresponse->println ("error");
    -
    1201  response = false;
    -
    1202  }
    -
    1203  break;
    -
    1204  }
    -
    1205 #endif
    -
    1206  //[ESP700]<filename>
    -
    1207  case 700: { //read local file
    -
    1208 #ifdef ENABLE_AUTHENTICATION
    -
    1209  if (auth_type == LEVEL_GUEST) return false;
    -
    1210 #endif
    -
    1211  cmd_params.trim() ;
    -
    1212  if ( (cmd_params.length() > 0) && (cmd_params[0] != '/') ) {
    -
    1213  cmd_params = "/" + cmd_params;
    -
    1214  }
    -
    1215  File currentfile = SPIFFS.open (cmd_params, FILE_READ);
    -
    1216  if (currentfile) {//if file open success
    -
    1217  //until no line in file
    -
    1218  while (currentfile.available()) {
    -
    1219  String currentline = currentfile.readStringUntil('\n');
    -
    1220  currentline.replace("\n","");
    -
    1221  currentline.replace("\r","");
    -
    1222  if (currentline.length() > 0) {
    -
    1223  int ESPpos = currentline.indexOf ("[ESP");
    -
    1224  if (ESPpos > -1) {
    -
    1225  //is there the second part?
    -
    1226  int ESPpos2 = currentline.indexOf ("]", ESPpos);
    -
    1227  if (ESPpos2 > -1) {
    -
    1228  //Split in command and parameters
    -
    1229  String cmd_part1 = currentline.substring (ESPpos + 4, ESPpos2);
    -
    1230  String cmd_part2 = "";
    -
    1231  //is there space for parameters?
    -
    1232  if (ESPpos2 < currentline.length() ) {
    -
    1233  cmd_part2 = currentline.substring (ESPpos2 + 1);
    -
    1234  }
    -
    1235  //if command is a valid number then execute command
    -
    1236  if(cmd_part1.toInt()!=0) {
    -
    1237  if (!execute_internal_command(cmd_part1.toInt(),cmd_part2, auth_type, espresponse)) response = false;
    -
    1238  }
    -
    1239  //if not is not a valid [ESPXXX] command ignore it
    -
    1240  }
    -
    1241  } else {
    -
    1242  if (currentline.length() > 0){
    -
    1243  currentline+="\n";
    -
    1244  Serial2Socket.push(currentline.c_str());
    -
    1245  //GCodeQueue::enqueue_one_now(currentline.c_str());
    -
    1246  }
    -
    1247  wifi_config.wait (1);
    -
    1248  }
    -
    1249  wifi_config.wait (1);
    -
    1250  }
    -
    1251  }
    -
    1252  currentfile.close();
    -
    1253  if (espresponse)espresponse->println ("ok");
    -
    1254  } else {
    -
    1255  if (espresponse)espresponse->println ("error");
    -
    1256  response = false;
    -
    1257  }
    -
    1258  break;
    -
    1259  }
    -
    1260  //Format SPIFFS
    -
    1261  //[ESP710]FORMAT pwd=<admin password>
    -
    1262  case 710:
    -
    1263 #ifdef ENABLE_AUTHENTICATION
    -
    1264  if (auth_type != LEVEL_ADMIN) return false;
    -
    1265 #endif
    -
    1266  parameter = get_param (cmd_params, "", true);
    -
    1267 #ifdef ENABLE_AUTHENTICATION
    -
    1268  if (auth_type != LEVEL_ADMIN) {
    -
    1269  espresponse->println ("error");
    -
    1270  response = false;
    -
    1271  break;
    -
    1272  } else
    -
    1273 #endif
    -
    1274  {
    -
    1275  if (parameter == "FORMAT") {
    -
    1276  if (espresponse)espresponse->print ("Formating");
    -
    1277  SPIFFS.format();
    -
    1278  if (espresponse)espresponse->println ("...Done");
    -
    1279  } else {
    -
    1280  if (espresponse)espresponse->println ("error");
    -
    1281  response = false;
    -
    1282  }
    -
    1283  }
    -
    1284  break;
    -
    1285  //get fw version / fw target / hostname / authentication
    -
    1286  //[ESP800]
    -
    1287  case 800:
    -
    1288  {
    -
    1289  if (!espresponse)return false;
    -
    1290  String resp;
    -
    1291  resp = "FW version:";
    -
    1292  resp += SHORT_BUILD_VERSION;
    -
    1293  resp += " # FW target:marlin-embedded # FW HW:";
    -
    1294  #if ENABLED(SDSUPPORT)
    -
    1295  resp += "Direct SD";
    -
    1296  #else
    -
    1297  resp += "No SD";
    -
    1298  #endif
    -
    1299  resp += " # primary sd:/sd # secondary sd:none # authentication:";
    -
    1300  #ifdef ENABLE_AUTHENTICATION
    -
    1301  resp += "yes";
    -
    1302  #else
    -
    1303  resp += "no";
    -
    1304  #endif
    -
    1305  resp += " # webcommunication: Sync: ";
    -
    1306  resp += String(_port + 1);
    -
    1307  resp += "# hostname:";
    -
    1308  resp += _hostname;
    -
    1309  if (WiFi.getMode() == WIFI_AP)resp += "(AP mode)";
    -
    1310  if (espresponse)espresponse->println (resp.c_str());
    -
    1311  }
    -
    1312  break;
    -
    1313  default:
    -
    1314  if (espresponse)espresponse->println ("Error: Incorrect Command");
    -
    1315  response = false;
    -
    1316  break;
    -
    1317  }
    -
    1318  return response;
    -
    1319 }
    -
    1320 
    -
    1321 //login status check
    -
    1322 void Web_Server::handle_login()
    -
    1323 {
    -
    1324 #ifdef ENABLE_AUTHENTICATION
    -
    1325  String smsg;
    -
    1326  String sUser,sPassword;
    -
    1327  String auths;
    -
    1328  int code = 200;
    -
    1329  bool msg_alert_error=false;
    -
    1330  //disconnect can be done anytime no need to check credential
    -
    1331  if (_webserver->hasArg("DISCONNECT")) {
    -
    1332  String cookie = _webserver->header("Cookie");
    -
    1333  int pos = cookie.indexOf("ESPSESSIONID=");
    -
    1334  String sessionID;
    -
    1335  if (pos!= -1) {
    -
    1336  int pos2 = cookie.indexOf(";",pos);
    -
    1337  sessionID = cookie.substring(pos+strlen("ESPSESSIONID="),pos2);
    -
    1338  }
    -
    1339  ClearAuthIP(_webserver->client().remoteIP(), sessionID.c_str());
    -
    1340  _webserver->sendHeader("Set-Cookie","ESPSESSIONID=0");
    -
    1341  _webserver->sendHeader("Cache-Control","no-cache");
    -
    1342  String buffer2send = "{\"status\":\"Ok\",\"authentication_lvl\":\"guest\"}";
    -
    1343  _webserver->send(code, "application/json", buffer2send);
    -
    1344  //_webserver->client().stop();
    -
    1345  return;
    -
    1346  }
    -
    1347 
    -
    1348  level_authenticate_type auth_level = is_authenticated();
    -
    1349  if (auth_level == LEVEL_GUEST) auths = "guest";
    -
    1350  else if (auth_level == LEVEL_USER) auths = "user";
    -
    1351  else if (auth_level == LEVEL_ADMIN) auths = "admin";
    -
    1352  else auths = "???";
    -
    1353 
    -
    1354  //check is it is a submission or a query
    -
    1355  if (_webserver->hasArg("SUBMIT")) {
    -
    1356  //is there a correct list of query?
    -
    1357  if ( _webserver->hasArg("PASSWORD") && _webserver->hasArg("USER")) {
    -
    1358  //USER
    -
    1359  sUser = _webserver->arg("USER");
    -
    1360  if ( !((sUser == DEFAULT_ADMIN_LOGIN) || (sUser == DEFAULT_USER_LOGIN))) {
    -
    1361  msg_alert_error=true;
    -
    1362  smsg = "Error : Incorrect User";
    -
    1363  code = 401;
    -
    1364  }
    -
    1365  if (msg_alert_error == false) {
    -
    1366  //Password
    -
    1367  sPassword = _webserver->arg("PASSWORD");
    -
    1368  String sadminPassword;
    -
    1369 
    -
    1370  Preferences prefs;
    -
    1371  prefs.begin(NAMESPACE, true);
    -
    1372  String defV = DEFAULT_ADMIN_PWD;
    -
    1373  sadminPassword = prefs.getString(ADMIN_PWD_ENTRY, defV);
    -
    1374  String suserPassword;
    -
    1375  defV = DEFAULT_USER_PWD;
    -
    1376  suserPassword = prefs.getString(USER_PWD_ENTRY, defV);
    -
    1377  prefs.end();
    -
    1378 
    -
    1379  if(!(((sUser == DEFAULT_ADMIN_LOGIN) && (strcmp(sPassword.c_str(),sadminPassword.c_str()) == 0)) ||
    -
    1380  ((sUser == DEFAULT_USER_LOGIN) && (strcmp(sPassword.c_str(),suserPassword.c_str()) == 0)))) {
    -
    1381  msg_alert_error=true;
    -
    1382  smsg = "Error: Incorrect password";
    -
    1383  code = 401;
    -
    1384  }
    -
    1385  }
    -
    1386  } else {
    -
    1387  msg_alert_error=true;
    -
    1388  smsg = "Error: Missing data";
    -
    1389  code = 500;
    -
    1390  }
    -
    1391  //change password
    -
    1392  if (_webserver->hasArg("PASSWORD") && _webserver->hasArg("USER") && _webserver->hasArg("NEWPASSWORD") && (msg_alert_error==false) ) {
    -
    1393  String newpassword = _webserver->arg("NEWPASSWORD");
    -
    1394  if (isLocalPasswordValid(newpassword.c_str())) {
    -
    1395  String spos;
    -
    1396  if(sUser == DEFAULT_ADMIN_LOGIN) spos = ADMIN_PWD_ENTRY;
    -
    1397  else spos = USER_PWD_ENTRY;
    -
    1398 
    -
    1399  Preferences prefs;
    -
    1400  prefs.begin(NAMESPACE, false);
    -
    1401  if (prefs.putString(spos.c_str(), newpassword) != newpassword.length()) {
    -
    1402  msg_alert_error = true;
    -
    1403  smsg = "Error: Cannot apply changes";
    -
    1404  code = 500;
    -
    1405  }
    -
    1406  prefs.end();
    -
    1407  } else {
    -
    1408  msg_alert_error=true;
    -
    1409  smsg = "Error: Incorrect password";
    -
    1410  code = 500;
    -
    1411  }
    -
    1412  }
    -
    1413  if ((code == 200) || (code == 500)) {
    -
    1414  level_authenticate_type current_auth_level;
    -
    1415  if(sUser == DEFAULT_ADMIN_LOGIN) {
    -
    1416  current_auth_level = LEVEL_ADMIN;
    -
    1417  } else if(sUser == DEFAULT_USER_LOGIN){
    -
    1418  current_auth_level = LEVEL_USER;
    -
    1419  } else {
    -
    1420  current_auth_level = LEVEL_GUEST;
    -
    1421  }
    -
    1422  //create Session
    -
    1423  if ((current_auth_level != auth_level) || (auth_level== LEVEL_GUEST)) {
    -
    1424  auth_ip * current_auth = new auth_ip;
    -
    1425  current_auth->level = current_auth_level;
    -
    1426  current_auth->ip=_webserver->client().remoteIP();
    -
    1427  strcpy(current_auth->sessionID,create_session_ID());
    -
    1428  strcpy(current_auth->userID,sUser.c_str());
    -
    1429  current_auth->last_time=millis();
    -
    1430  if (AddAuthIP(current_auth)) {
    -
    1431  String tmps ="ESPSESSIONID=";
    -
    1432  tmps+=current_auth->sessionID;
    -
    1433  _webserver->sendHeader("Set-Cookie",tmps);
    -
    1434  _webserver->sendHeader("Cache-Control","no-cache");
    -
    1435  switch(current_auth->level) {
    -
    1436  case LEVEL_ADMIN:
    -
    1437  auths = "admin";
    -
    1438  break;
    -
    1439  case LEVEL_USER:
    -
    1440  auths = "user";
    -
    1441  break;
    -
    1442  default:
    -
    1443  auths = "guest";
    -
    1444  break;
    -
    1445  }
    -
    1446  } else {
    -
    1447  delete current_auth;
    -
    1448  msg_alert_error=true;
    -
    1449  code = 500;
    -
    1450  smsg = "Error: Too many connections";
    -
    1451  }
    -
    1452  }
    -
    1453  }
    -
    1454  if (code == 200) smsg = "Ok";
    -
    1455 
    -
    1456  //build JSON
    -
    1457  String buffer2send = "{\"status\":\"" + smsg + "\",\"authentication_lvl\":\"";
    -
    1458  buffer2send += auths;
    -
    1459  buffer2send += "\"}";
    -
    1460  _webserver->send(code, "application/json", buffer2send);
    -
    1461  } else {
    -
    1462  if (auth_level != LEVEL_GUEST) {
    -
    1463  String cookie = _webserver->header("Cookie");
    -
    1464  int pos = cookie.indexOf("ESPSESSIONID=");
    -
    1465  String sessionID;
    -
    1466  if (pos!= -1) {
    -
    1467  int pos2 = cookie.indexOf(";",pos);
    -
    1468  sessionID = cookie.substring(pos+strlen("ESPSESSIONID="),pos2);
    -
    1469  auth_ip * current_auth_info = GetAuth(_webserver->client().remoteIP(), sessionID.c_str());
    -
    1470  if (current_auth_info != NULL){
    -
    1471  sUser = current_auth_info->userID;
    -
    1472  }
    -
    1473  }
    -
    1474  }
    -
    1475  String buffer2send = "{\"status\":\"200\",\"authentication_lvl\":\"";
    -
    1476  buffer2send += auths;
    -
    1477  buffer2send += "\",\"user\":\"";
    -
    1478  buffer2send += sUser;
    -
    1479  buffer2send +="\"}";
    -
    1480  _webserver->send(code, "application/json", buffer2send);
    -
    1481  }
    -
    1482 #else
    -
    1483  _webserver->sendHeader("Cache-Control","no-cache");
    -
    1484  _webserver->send(200, "application/json", "{\"status\":\"Ok\",\"authentication_lvl\":\"admin\"}");
    -
    1485 #endif
    -
    1486 }
    -
    1487 //SPIFFS
    -
    1488 //SPIFFS files list and file commands
    -
    1489 void Web_Server::handleFileList ()
    -
    1490 {
    -
    1491  level_authenticate_type auth_level = is_authenticated();
    -
    1492  if (auth_level == LEVEL_GUEST) {
    -
    1493  _upload_status = UPLOAD_STATUS_NONE;
    -
    1494  _webserver->send (401, "text/plain", "Authentication failed!\n");
    -
    1495  return;
    -
    1496  }
    -
    1497  String path ;
    -
    1498  String status = "Ok";
    -
    1499  if ( (_upload_status == UPLOAD_STATUS_FAILED) || (_upload_status == UPLOAD_STATUS_CANCELLED) ) {
    -
    1500  status = "Upload failed";
    -
    1501  }
    -
    1502  //be sure root is correct according authentication
    -
    1503  if (auth_level == LEVEL_ADMIN) {
    -
    1504  path = "/";
    -
    1505  } else {
    -
    1506  path = "/user";
    -
    1507  }
    -
    1508  //get current path
    -
    1509  if (_webserver->hasArg ("path") ) {
    -
    1510  path += _webserver->arg ("path") ;
    -
    1511  }
    -
    1512  //to have a clean path
    -
    1513  path.trim();
    -
    1514  path.replace ("//", "/");
    -
    1515  if (path[path.length() - 1] != '/') {
    -
    1516  path += "/";
    -
    1517  }
    -
    1518  //check if query need some action
    -
    1519  if (_webserver->hasArg ("action") ) {
    -
    1520  //delete a file
    -
    1521  if (_webserver->arg ("action") == "delete" && _webserver->hasArg ("filename") ) {
    -
    1522  String filename;
    -
    1523  String shortname = _webserver->arg ("filename");
    -
    1524  shortname.replace ("/", "");
    -
    1525  filename = path + _webserver->arg ("filename");
    -
    1526  filename.replace ("//", "/");
    -
    1527  if (!SPIFFS.exists (filename) ) {
    -
    1528  status = shortname + " does not exists!";
    -
    1529  } else {
    -
    1530  if (SPIFFS.remove (filename) ) {
    -
    1531  status = shortname + " deleted";
    -
    1532  //what happen if no "/." and no other subfiles ?
    -
    1533  String ptmp = path;
    -
    1534  if ( (path != "/") && (path[path.length() - 1] = '/') ) {
    -
    1535  ptmp = path.substring (0, path.length() - 1);
    -
    1536  }
    -
    1537  File dir = SPIFFS.open (ptmp);
    -
    1538  File dircontent = dir.openNextFile();
    -
    1539  if (!dircontent) {
    -
    1540  //keep directory alive even empty
    -
    1541  File r = SPIFFS.open (path + "/.", FILE_WRITE);
    -
    1542  if (r) {
    -
    1543  r.close();
    -
    1544  }
    -
    1545  }
    -
    1546  } else {
    -
    1547  status = "Cannot deleted " ;
    -
    1548  status += shortname ;
    -
    1549  }
    -
    1550  }
    -
    1551  }
    -
    1552  //delete a directory
    -
    1553  if (_webserver->arg ("action") == "deletedir" && _webserver->hasArg ("filename") ) {
    -
    1554  String filename;
    -
    1555  String shortname = _webserver->arg ("filename");
    -
    1556  shortname.replace ("/", "");
    -
    1557  filename = path + _webserver->arg ("filename");
    -
    1558  filename += "/";
    -
    1559  filename.replace ("//", "/");
    -
    1560  if (filename != "/") {
    -
    1561  bool delete_error = false;
    -
    1562  File dir = SPIFFS.open (path + shortname);
    -
    1563  {
    -
    1564  File file2deleted = dir.openNextFile();
    -
    1565  while (file2deleted) {
    -
    1566  String fullpath = file2deleted.name();
    -
    1567  if (!SPIFFS.remove (fullpath) ) {
    -
    1568  delete_error = true;
    -
    1569  status = "Cannot deleted " ;
    -
    1570  status += fullpath;
    -
    1571  }
    -
    1572  file2deleted = dir.openNextFile();
    -
    1573  }
    -
    1574  }
    -
    1575  if (!delete_error) {
    -
    1576  status = shortname ;
    -
    1577  status += " deleted";
    -
    1578  }
    -
    1579  }
    -
    1580  }
    -
    1581  //create a directory
    -
    1582  if (_webserver->arg ("action") == "createdir" && _webserver->hasArg ("filename") ) {
    -
    1583  String filename;
    -
    1584  filename = path + _webserver->arg ("filename") + "/.";
    -
    1585  String shortname = _webserver->arg ("filename");
    -
    1586  shortname.replace ("/", "");
    -
    1587  filename.replace ("//", "/");
    -
    1588  if (SPIFFS.exists (filename) ) {
    -
    1589  status = shortname + " already exists!";
    -
    1590  } else {
    -
    1591  File r = SPIFFS.open (filename, FILE_WRITE);
    -
    1592  if (!r) {
    -
    1593  status = "Cannot create ";
    -
    1594  status += shortname ;
    -
    1595  } else {
    -
    1596  r.close();
    -
    1597  status = shortname + " created";
    -
    1598  }
    -
    1599  }
    -
    1600  }
    -
    1601  }
    -
    1602  String jsonfile = "{";
    -
    1603  String ptmp = path;
    -
    1604  if ( (path != "/") && (path[path.length() - 1] = '/') ) {
    -
    1605  ptmp = path.substring (0, path.length() - 1);
    -
    1606  }
    -
    1607  File dir = SPIFFS.open (ptmp);
    -
    1608  jsonfile += "\"files\":[";
    -
    1609  bool firstentry = true;
    -
    1610  String subdirlist = "";
    -
    1611  File fileparsed = dir.openNextFile();
    -
    1612  while (fileparsed) {
    -
    1613  String filename = fileparsed.name();
    -
    1614  String size = "";
    -
    1615  bool addtolist = true;
    -
    1616  //remove path from name
    -
    1617  filename = filename.substring (path.length(), filename.length() );
    -
    1618  //check if file or subfile
    -
    1619  if (filename.indexOf ("/") > -1) {
    -
    1620  //Do not rely on "/." to define directory as SPIFFS upload won't create it but directly files
    -
    1621  //and no need to overload SPIFFS if not necessary to create "/." if no need
    -
    1622  //it will reduce SPIFFS available space so limit it to creation
    -
    1623  filename = filename.substring (0, filename.indexOf ("/") );
    -
    1624  String tag = "*";
    -
    1625  tag += filename + "*";
    -
    1626  if (subdirlist.indexOf (tag) > -1 || filename.length() == 0) { //already in list
    -
    1627  addtolist = false; //no need to add
    -
    1628  } else {
    -
    1629  size = "-1"; //it is subfile so display only directory, size will be -1 to describe it is directory
    -
    1630  if (subdirlist.length() == 0) {
    -
    1631  subdirlist += "*";
    -
    1632  }
    -
    1633  subdirlist += filename + "*"; //add to list
    -
    1634  }
    -
    1635  } else {
    -
    1636  //do not add "." file
    -
    1637  if (! ( (filename == ".") || (filename == "") ) ) {
    -
    1638  size = formatBytes (fileparsed.size() );
    -
    1639  } else {
    -
    1640  addtolist = false;
    -
    1641  }
    -
    1642  }
    -
    1643  if (addtolist) {
    -
    1644  if (!firstentry) {
    -
    1645  jsonfile += ",";
    -
    1646  } else {
    -
    1647  firstentry = false;
    -
    1648  }
    -
    1649  jsonfile += "{";
    -
    1650  jsonfile += "\"name\":\"";
    -
    1651  jsonfile += filename;
    -
    1652  jsonfile += "\",\"size\":\"";
    -
    1653  jsonfile += size;
    -
    1654  jsonfile += "\"";
    -
    1655  jsonfile += "}";
    -
    1656  }
    -
    1657  fileparsed = dir.openNextFile();
    -
    1658  }
    -
    1659  jsonfile += "],";
    -
    1660  jsonfile += "\"path\":\"" + path + "\",";
    -
    1661  jsonfile += "\"status\":\"" + status + "\",";
    -
    1662  size_t totalBytes;
    -
    1663  size_t usedBytes;
    -
    1664  totalBytes = SPIFFS.totalBytes();
    -
    1665  usedBytes = SPIFFS.usedBytes();
    -
    1666  jsonfile += "\"total\":\"" + formatBytes (totalBytes) + "\",";
    -
    1667  jsonfile += "\"used\":\"" + formatBytes (usedBytes) + "\",";
    -
    1668  jsonfile.concat (F ("\"occupation\":\"") );
    -
    1669  jsonfile += String (100 * usedBytes / totalBytes);
    -
    1670  jsonfile += "\"";
    -
    1671  jsonfile += "}";
    -
    1672  path = "";
    -
    1673  _webserver->sendHeader("Cache-Control", "no-cache");
    -
    1674  _webserver->send(200, "application/json", jsonfile);
    -
    1675  _upload_status = UPLOAD_STATUS_NONE;
    -
    1676 }
    -
    1677 
    -
    1678 //SPIFFS files uploader handle
    -
    1679 void Web_Server::SPIFFSFileupload ()
    -
    1680 {
    -
    1681  //get authentication status
    -
    1682  level_authenticate_type auth_level= is_authenticated();
    -
    1683  //Guest cannot upload - only admin
    -
    1684  if (auth_level == LEVEL_GUEST) {
    -
    1685  _upload_status = UPLOAD_STATUS_CANCELLED;
    -
    1686  MYSERIAL0.println("Upload rejected");
    -
    1687 #if NUM_SERIAL > 1
    -
    1688  MYSERIAL1.println("Upload rejected");
    -
    1689 #endif
    -
    1690  _webserver->client().stop();
    -
    1691  return;
    -
    1692  }
    -
    1693  static String filename;
    -
    1694  static File fsUploadFile = (File)0;
    -
    1695 
    -
    1696  HTTPUpload& upload = _webserver->upload();
    -
    1697  //Upload start
    -
    1698  //**************
    -
    1699  if(upload.status == UPLOAD_FILE_START) {
    -
    1700  String upload_filename = upload.filename;
    -
    1701  if (upload_filename[0] != '/') filename = "/" + upload_filename;
    -
    1702  else filename = upload.filename;
    -
    1703  //according User or Admin the root is different as user is isolate to /user when admin has full access
    -
    1704  if(auth_level != LEVEL_ADMIN) {
    -
    1705  upload_filename = filename;
    -
    1706  filename = "/user" + upload_filename;
    -
    1707  }
    -
    1708 
    -
    1709  if (SPIFFS.exists (filename) ) {
    -
    1710  SPIFFS.remove (filename);
    -
    1711  }
    -
    1712  if (fsUploadFile ) {
    -
    1713  fsUploadFile.close();
    -
    1714  }
    -
    1715  //create file
    -
    1716  fsUploadFile = SPIFFS.open(filename, FILE_WRITE);
    -
    1717  //check If creation succeed
    -
    1718  if (fsUploadFile) {
    -
    1719  //if yes upload is started
    -
    1720  _upload_status= UPLOAD_STATUS_ONGOING;
    -
    1721  } else {
    -
    1722  //if no set cancel flag
    -
    1723  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1724  MYSERIAL0.println("Upload error");
    -
    1725 #if NUM_SERIAL > 1
    -
    1726  MYSERIAL1.println("Upload error");
    -
    1727 #endif
    -
    1728  _webserver->client().stop();
    -
    1729  }
    -
    1730  //Upload write
    -
    1731  //**************
    -
    1732  } else if(upload.status == UPLOAD_FILE_WRITE) {
    -
    1733  //check if file is available and no error
    -
    1734  if(fsUploadFile && _upload_status == UPLOAD_STATUS_ONGOING) {
    -
    1735  //no error so write post date
    -
    1736  fsUploadFile.write(upload.buf, upload.currentSize);
    -
    1737  } else {
    -
    1738  //we have a problem set flag UPLOAD_STATUS_CANCELLED
    -
    1739  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1740  fsUploadFile.close();
    -
    1741  if (SPIFFS.exists (filename) ) {
    -
    1742  SPIFFS.remove (filename);
    -
    1743  }
    -
    1744  _webserver->client().stop();
    -
    1745  MYSERIAL0.println("Upload error");
    -
    1746 #if NUM_SERIAL > 1
    -
    1747  MYSERIAL1.println("Upload error");
    -
    1748 #endif
    -
    1749  }
    -
    1750  //Upload end
    -
    1751  //**************
    -
    1752  } else if(upload.status == UPLOAD_FILE_END) {
    -
    1753  //check if file is still open
    -
    1754  if(fsUploadFile) {
    -
    1755  //close it
    -
    1756  fsUploadFile.close();
    -
    1757  //check size
    -
    1758  String sizeargname = upload.filename + "S";
    -
    1759  fsUploadFile = SPIFFS.open (filename, FILE_READ);
    -
    1760  uint32_t filesize = fsUploadFile.size();
    -
    1761  fsUploadFile.close();
    -
    1762  if (_webserver->hasArg (sizeargname.c_str()) ) {
    -
    1763  if (_webserver->arg (sizeargname.c_str()) != String(filesize)) {
    -
    1764  _upload_status = UPLOAD_STATUS_FAILED;
    -
    1765  SPIFFS.remove (filename);
    -
    1766  }
    -
    1767  }
    -
    1768  if (_upload_status == UPLOAD_STATUS_ONGOING) {
    -
    1769  _upload_status = UPLOAD_STATUS_SUCCESSFUL;
    -
    1770  } else {
    -
    1771  MYSERIAL0.println("Upload error");
    -
    1772 #if NUM_SERIAL > 1
    -
    1773  MYSERIAL1.println("Upload error");
    -
    1774 #endif
    -
    1775  }
    -
    1776  } else {
    -
    1777  //we have a problem set flag UPLOAD_STATUS_CANCELLED
    -
    1778  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1779  _webserver->client().stop();
    -
    1780  if (SPIFFS.exists (filename) ) {
    -
    1781  SPIFFS.remove (filename);
    -
    1782  }
    -
    1783  MYSERIAL0.println("Upload error");
    -
    1784 #if NUM_SERIAL > 1
    -
    1785  MYSERIAL1.println("Upload error");
    -
    1786 #endif
    -
    1787  }
    -
    1788  //Upload cancelled
    -
    1789  //**************
    -
    1790  } else {
    -
    1791  if (_upload_status == UPLOAD_STATUS_ONGOING) {
    -
    1792  _upload_status = UPLOAD_STATUS_CANCELLED;
    -
    1793  }
    -
    1794  if(fsUploadFile)fsUploadFile.close();
    -
    1795  if (SPIFFS.exists (filename) ) {
    -
    1796  SPIFFS.remove (filename);
    -
    1797  }
    -
    1798  MYSERIAL0.println("Upload error");
    -
    1799 #if NUM_SERIAL > 1
    -
    1800  MYSERIAL1.println("Upload error");
    -
    1801 #endif
    -
    1802  }
    -
    1803  wifi_config.wait(0);
    -
    1804 }
    -
    1805 
    -
    1806 //Web Update handler
    -
    1807 void Web_Server::handleUpdate ()
    -
    1808 {
    -
    1809  level_authenticate_type auth_level = is_authenticated();
    -
    1810  if (auth_level != LEVEL_ADMIN) {
    -
    1811  _upload_status = UPLOAD_STATUS_NONE;
    -
    1812  _webserver->send (403, "text/plain", "Not allowed, log in first!\n");
    -
    1813  return;
    -
    1814  }
    -
    1815  String jsonfile = "{\"status\":\"" ;
    -
    1816  jsonfile += String(_upload_status);
    -
    1817  jsonfile += "\"}";
    -
    1818  //send status
    -
    1819  _webserver->sendHeader("Cache-Control", "no-cache");
    -
    1820  _webserver->send(200, "application/json", jsonfile);
    -
    1821  //if success restart
    -
    1822  if (_upload_status == UPLOAD_STATUS_SUCCESSFUL) {
    -
    1823  wifi_config.wait(1000);
    - -
    1825  } else {
    -
    1826  _upload_status = UPLOAD_STATUS_NONE;
    -
    1827  }
    -
    1828 }
    -
    1829 
    -
    1830 //File upload for Web update
    -
    1831 void Web_Server::WebUpdateUpload ()
    -
    1832 {
    -
    1833  static size_t last_upload_update;
    -
    1834  static uint32_t maxSketchSpace ;
    -
    1835  //only admin can update FW
    -
    1836  if (is_authenticated() != LEVEL_ADMIN) {
    -
    1837  _upload_status = UPLOAD_STATUS_CANCELLED;
    -
    1838  _webserver->client().stop();
    -
    1839  MYSERIAL0.println("Upload rejected");
    -
    1840 #if NUM_SERIAL > 1
    -
    1841  MYSERIAL1.println("Upload rejected");
    -
    1842 #endif
    -
    1843  return;
    -
    1844  }
    -
    1845 
    -
    1846  //get current file ID
    -
    1847  HTTPUpload& upload = _webserver->upload();
    -
    1848  //Upload start
    -
    1849  //**************
    -
    1850  if(upload.status == UPLOAD_FILE_START) {
    -
    1851  MYSERIAL0.println("Update Firmware");
    -
    1852 #if NUM_SERIAL > 1
    -
    1853  MYSERIAL1.println("Update Firmware");
    -
    1854 #endif
    -
    1855  _upload_status= UPLOAD_STATUS_ONGOING;
    -
    1856 
    -
    1857  //Not sure can do OTA on 2Mb board
    -
    1858  maxSketchSpace = (ESP.getFlashChipSize() > 0x20000) ? 0x140000 : 0x140000 / 2;
    -
    1859  last_upload_update = 0;
    -
    1860  if(!Update.begin(maxSketchSpace)) { //start with max available size
    -
    1861  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1862  MYSERIAL0.println("Update cancelled");
    -
    1863 #if NUM_SERIAL > 1
    -
    1864  MYSERIAL1.println("Update cancelled");
    -
    1865 #endif
    -
    1866  _webserver->client().stop();
    -
    1867  return;
    -
    1868  } else {
    -
    1869  MYSERIAL0.println("Update 0%");
    -
    1870 #if NUM_SERIAL > 1
    -
    1871  MYSERIAL1.println("Update 0%");
    -
    1872 #endif
    -
    1873  }
    -
    1874  //Upload write
    -
    1875  //**************
    -
    1876  } else if(upload.status == UPLOAD_FILE_WRITE) {
    -
    1877  //check if no error
    -
    1878  if (_upload_status == UPLOAD_STATUS_ONGOING) {
    -
    1879  //we do not know the total file size yet but we know the available space so let's use it
    -
    1880  if ( ((100 * upload.totalSize) / maxSketchSpace) !=last_upload_update) {
    -
    1881  last_upload_update = (100 * upload.totalSize) / maxSketchSpace;
    -
    1882  String s = "Update ";
    -
    1883  s+= String(last_upload_update);
    -
    1884  s+="%";
    -
    1885  MYSERIAL0.println(s.c_str());
    -
    1886 #if NUM_SERIAL > 1
    -
    1887  MYSERIAL1.println(s.c_str());
    -
    1888 #endif
    -
    1889  }
    -
    1890  if(Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
    -
    1891  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1892  }
    -
    1893  }
    -
    1894  //Upload end
    -
    1895  //**************
    -
    1896  } else if(upload.status == UPLOAD_FILE_END) {
    -
    1897  if(Update.end(true)) { //true to set the size to the current progress
    -
    1898  //Now Reboot
    -
    1899  MYSERIAL0.println("Update 100%");
    -
    1900 #if NUM_SERIAL > 1
    -
    1901  MYSERIAL1.println("Update 100%");
    -
    1902 #endif
    -
    1903  _upload_status=UPLOAD_STATUS_SUCCESSFUL;
    -
    1904  }
    -
    1905  } else if(upload.status == UPLOAD_FILE_ABORTED) {
    -
    1906  MYSERIAL0.println("Update failed");
    -
    1907 #if NUM_SERIAL > 1
    -
    1908  MYSERIAL1.println("Update failed");
    -
    1909 #endif
    -
    1910  Update.end();
    -
    1911  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    1912  }
    -
    1913  wifi_config.wait(0);
    -
    1914 }
    -
    1915 
    -
    1916 
    -
    1917 #if ENABLED(SDSUPPORT)
    -
    1918 
    -
    1919 //direct SD files list//////////////////////////////////////////////////
    -
    1920 void Web_Server::handle_direct_SDFileList()
    -
    1921 {
    -
    1922  //this is only for admin an user
    -
    1923  if (is_authenticated() == LEVEL_GUEST) {
    -
    1924  _upload_status=UPLOAD_STATUS_NONE;
    -
    1925  _webserver->send(401, "application/json", "{\"status\":\"Authentication failed!\"}");
    -
    1926  return;
    -
    1927  }
    -
    1928 
    -
    1929 
    -
    1930  String path="/";
    -
    1931  String sstatus="Ok";
    -
    1932  if ((_upload_status == UPLOAD_STATUS_FAILED) || (_upload_status == UPLOAD_STATUS_CANCELLED)) {
    -
    1933  sstatus = "Upload failed";
    -
    1934  _upload_status = UPLOAD_STATUS_NONE;
    -
    1935  }
    -
    1936  bool list_files = true;
    -
    1937  ESP_SD card;
    -
    1938  int8_t state = card.card_status();
    -
    1939  if (state != 1){
    -
    1940  _webserver->sendHeader("Cache-Control","no-cache");
    -
    1941  _webserver->send(200, "application/json", "{\"status\":\"No SD Card\"}");
    -
    1942  return;
    -
    1943  }
    -
    1944 
    -
    1945  //get current path
    -
    1946  if(_webserver->hasArg("path")) {
    -
    1947  path += _webserver->arg("path") ;
    -
    1948  }
    -
    1949  //to have a clean path
    -
    1950  path.trim();
    -
    1951  path.replace("//","/");
    -
    1952 
    -
    1953  //check if query need some action
    -
    1954  if(_webserver->hasArg("action")) {
    -
    1955  //delete a file
    -
    1956  if(_webserver->arg("action") == "delete" && _webserver->hasArg("filename")) {
    -
    1957  String filename;
    -
    1958  String shortname = _webserver->arg("filename");
    -
    1959  filename = path + shortname;
    -
    1960  shortname.replace("/","");
    -
    1961  filename.replace("//","/");
    -
    1962 
    -
    1963  if(!card.exists(filename.c_str())) {
    -
    1964  sstatus = shortname + " does not exist!";
    -
    1965  } else {
    -
    1966  if (card.remove(filename.c_str())) {
    -
    1967  sstatus = shortname + " deleted";
    -
    1968  } else {
    -
    1969  sstatus = "Cannot deleted ";
    -
    1970  sstatus+=shortname ;
    -
    1971  }
    -
    1972  }
    -
    1973  }
    -
    1974  //delete a directory
    -
    1975  if( _webserver->arg("action") == "deletedir" && _webserver->hasArg("filename")) {
    -
    1976  String filename;
    -
    1977  String shortname = _webserver->arg("filename");
    -
    1978  shortname.replace("/","");
    -
    1979  filename = path + "/" + shortname;
    -
    1980  filename.replace("//","/");
    -
    1981  if (filename != "/") {
    -
    1982  if(!card.dir_exists(filename.c_str())) {
    -
    1983  sstatus = shortname + " does not exist!";
    -
    1984  } else {
    -
    1985  if (!card.rmdir(filename.c_str())) {
    -
    1986  sstatus ="Error deleting: ";
    -
    1987  sstatus += shortname ;
    -
    1988  } else {
    -
    1989  sstatus = shortname ;
    -
    1990  sstatus+=" deleted";
    -
    1991  }
    -
    1992  }
    -
    1993  } else {
    -
    1994  sstatus ="Cannot delete root";
    -
    1995  }
    -
    1996  }
    -
    1997  //create a directory
    -
    1998  if( _webserver->arg("action")=="createdir" && _webserver->hasArg("filename")) {
    -
    1999  String filename;
    -
    2000  String shortname = _webserver->arg("filename");
    -
    2001  filename = path + shortname;
    -
    2002  shortname.replace("/","");
    -
    2003  filename.replace("//","/");
    -
    2004  if(card.exists(filename.c_str())) {
    -
    2005  sstatus = shortname + " already exists!";
    -
    2006  } else {
    -
    2007  if (!card.mkdir(filename.c_str())) {
    -
    2008  sstatus = "Cannot create ";
    -
    2009  sstatus += shortname ;
    -
    2010  } else {
    -
    2011  sstatus = shortname + " created";
    -
    2012  }
    -
    2013  }
    -
    2014  }
    -
    2015  }
    -
    2016 
    -
    2017  //check if no need build file list
    -
    2018  if( _webserver->hasArg("dontlist")) {
    -
    2019  if( _webserver->arg("dontlist") == "yes") {
    -
    2020  list_files = false;
    -
    2021  }
    -
    2022  }
    -
    2023  String jsonfile = "{" ;
    -
    2024  jsonfile+="\"files\":[";
    -
    2025  if (!card.openDir(path)){
    -
    2026  String s = "{\"status\":\" ";
    -
    2027  s += path;
    -
    2028  s+= " does not exist on SD Card\"}";
    -
    2029  _webserver->sendHeader("Cache-Control","no-cache");
    -
    2030  _webserver->send(200, "application/json", s.c_str());
    -
    2031  return;
    -
    2032  }
    -
    2033  if (list_files) {
    -
    2034  char name[13];
    -
    2035  uint32_t size;
    -
    2036  bool isFile;
    -
    2037  uint i = 0;
    -
    2038  while (card.readDir(name,&size ,&isFile)) {
    -
    2039  if (i>0) {
    -
    2040  jsonfile+=",";
    -
    2041  }
    -
    2042  jsonfile+="{\"name\":\"";
    -
    2043  jsonfile+=name;
    -
    2044  jsonfile+="\",\"shortname\":\"";
    -
    2045  jsonfile+=name;
    -
    2046  jsonfile+="\",\"size\":\"";
    -
    2047  if (isFile)jsonfile+=formatBytes(size);
    -
    2048  else jsonfile+="-1";
    -
    2049  jsonfile+="\",\"datetime\":\"";
    -
    2050  //TODO datatime
    -
    2051  jsonfile+="\"}";
    -
    2052  i++;
    -
    2053  wifi_config.wait(1);
    -
    2054  }
    -
    2055  jsonfile+="],\"path\":\"";
    -
    2056  jsonfile+=path + "\",";
    -
    2057  }
    -
    2058  static uint32_t volTotal = card.card_total_space();
    -
    2059  static uint32_t volUsed = card.card_used_space();;
    -
    2060  //TODO
    -
    2061  //Get right values
    -
    2062  uint32_t occupedspace = (volUsed/volTotal)*100;
    -
    2063  jsonfile+="\"total\":\"";
    -
    2064  if ( (occupedspace <= 1) && (volTotal!=volUsed)) {
    -
    2065  occupedspace=1;
    -
    2066  }
    -
    2067  jsonfile+= formatBytes(volTotal); ;
    -
    2068 
    -
    2069  jsonfile+="\",\"used\":\"";
    -
    2070  jsonfile+= formatBytes(volUsed); ;
    -
    2071  jsonfile+="\",\"occupation\":\"";
    -
    2072  jsonfile+=String(occupedspace);
    -
    2073  jsonfile+= "\",";
    -
    2074 
    -
    2075  jsonfile+= "\"mode\":\"direct\",";
    -
    2076  jsonfile+= "\"status\":\"";
    -
    2077  jsonfile+=sstatus + "\"";
    -
    2078  jsonfile+= "}";
    -
    2079 
    -
    2080  _webserver->sendHeader("Cache-Control","no-cache");
    -
    2081  _webserver->send (200, "application/json", jsonfile.c_str());
    -
    2082  _upload_status=UPLOAD_STATUS_NONE;
    -
    2083 }
    -
    2084 
    -
    2085 //SD File upload with direct access to SD///////////////////////////////
    -
    2086 void Web_Server::SDFile_direct_upload()
    -
    2087 {
    -
    2088  static ESP_SD sdfile;
    -
    2089  static String upload_filename;
    -
    2090  //this is only for admin and user
    -
    2091  if (is_authenticated() == LEVEL_GUEST) {
    -
    2092  _upload_status=UPLOAD_STATUS_NONE;
    -
    2093  _webserver->send(401, "application/json", "{\"status\":\"Authentication failed!\"}");
    -
    2094  return;
    -
    2095  }
    -
    2096  //retrieve current file id
    -
    2097  HTTPUpload& upload = _webserver->upload();
    -
    2098 
    -
    2099  //Upload start
    -
    2100  //**************
    -
    2101  if(upload.status == UPLOAD_FILE_START) {
    -
    2102  upload_filename = upload.filename;
    -
    2103  if (upload_filename[0] != '/') {
    -
    2104  upload_filename = "/" + upload.filename;
    -
    2105  }
    -
    2106  upload_filename= sdfile.makepath83(upload_filename);
    -
    2107  if ( sdfile.card_status() != 1) {
    -
    2108  _upload_status=UPLOAD_STATUS_CANCELLED;
    -
    2109  MYSERIAL0.println("Upload cancelled");
    -
    2110 #if NUM_SERIAL > 1
    -
    2111  MYSERIAL1.println("Upload cancelled");
    -
    2112 #endif
    -
    2113  _webserver->client().stop();
    -
    2114  return;
    -
    2115  }
    -
    2116  if (sdfile.exists (upload_filename.c_str()) ) {
    -
    2117  sdfile.remove (upload_filename.c_str());
    -
    2118  }
    -
    2119 
    -
    2120  if (sdfile.isopen())sdfile.close();
    -
    2121  if (!sdfile.open (upload_filename.c_str(),false)) {
    -
    2122  MYSERIAL0.println("Upload cancelled");
    -
    2123 #if NUM_SERIAL > 1
    -
    2124  MYSERIAL1.println("Upload cancelled");
    -
    2125 #endif
    -
    2126  _webserver->client().stop();
    -
    2127  _upload_status = UPLOAD_STATUS_FAILED;
    -
    2128  return ;
    -
    2129  } else {
    -
    2130  _upload_status = UPLOAD_STATUS_ONGOING;
    -
    2131  }
    -
    2132  //Upload write
    -
    2133  //**************
    -
    2134  } else if(upload.status == UPLOAD_FILE_WRITE) {
    -
    2135  //we need to check SD is inside
    -
    2136  if ( sdfile.card_status() != 1) {
    -
    2137  sdfile.close();
    -
    2138  MYSERIAL0.println("Upload failed");
    -
    2139  #if NUM_SERIAL > 1
    -
    2140  MYSERIAL1.println("Upload failed");
    -
    2141  #endif
    -
    2142  if (sdfile.exists (upload_filename.c_str()) ) {
    -
    2143  sdfile.remove (upload_filename.c_str());
    -
    2144  }
    -
    2145  _webserver->client().stop();
    -
    2146  return;
    -
    2147  }
    -
    2148  if (sdfile.isopen()) {
    -
    2149  if ( (_upload_status = UPLOAD_STATUS_ONGOING) && (upload.currentSize > 0)) {
    -
    2150  sdfile.write (upload.buf, upload.currentSize);
    -
    2151  }
    -
    2152  }
    -
    2153  //Upload end
    -
    2154  //**************
    -
    2155  } else if(upload.status == UPLOAD_FILE_END) {
    -
    2156  sdfile.close();
    -
    2157  uint32_t filesize = sdfile.size();
    -
    2158  String sizeargname = upload.filename + "S";
    -
    2159  if (_webserver->hasArg (sizeargname.c_str()) ) {
    -
    2160  if (_webserver->arg (sizeargname.c_str()) != String(filesize)) {
    -
    2161  MYSERIAL0.println("Upload failed");
    -
    2162  #if NUM_SERIAL > 1
    -
    2163  MYSERIAL1.println("Upload failed");
    -
    2164  #endif
    -
    2165  _upload_status = UPLOAD_STATUS_FAILED;
    -
    2166  }
    -
    2167  }
    -
    2168  if (_upload_status == UPLOAD_STATUS_ONGOING) {
    -
    2169  _upload_status = UPLOAD_STATUS_SUCCESSFUL;
    -
    2170  }
    -
    2171  } else {//Upload cancelled
    -
    2172  _upload_status=UPLOAD_STATUS_FAILED;
    -
    2173 
    -
    2174  MYSERIAL0.println("Upload failed");
    -
    2175 #if NUM_SERIAL > 1
    -
    2176  MYSERIAL1.println("Upload failed");
    -
    2177 #endif
    -
    2178  _webserver->client().stop();
    -
    2179  sdfile.close();
    -
    2180  if (sdfile.exists (upload_filename.c_str()) ) {
    -
    2181  sdfile.remove (upload_filename.c_str());
    -
    2182  }
    -
    2183  }
    -
    2184  wifi_config.wait(0);
    -
    2185 }
    -
    2186 #endif
    -
    2187 
    -
    2188 void Web_Server::handle(){
    -
    2189 static uint32_t timeout = millis();
    -
    2190 #ifdef ENABLE_CAPTIVE_PORTAL
    -
    2191  if(WiFi.getMode() == WIFI_AP){
    -
    2192  dnsServer.processNextRequest();
    -
    2193  }
    -
    2194 #endif
    -
    2195  if (_webserver)_webserver->handleClient();
    -
    2196  if (_socket_server && _setupdone) {
    - -
    2198  _socket_server->loop();
    -
    2199  }
    -
    2200  if ((millis() - timeout) > 10000) {
    -
    2201  if (_socket_server){
    -
    2202  String s = "PING:";
    -
    2203  s+=String(_id_connection);
    -
    2204  _socket_server->broadcastTXT(s);
    -
    2205  timeout=millis();
    -
    2206  }
    -
    2207  }
    -
    2208 }
    -
    2209 
    -
    2210 
    -
    2211 void Web_Server::handle_Websocket_Event(uint8_t num, uint8_t type, uint8_t * payload, size_t length) {
    -
    2212 
    -
    2213  switch(type) {
    -
    2214  case WStype_DISCONNECTED:
    -
    2215  //USE_SERIAL.printf("[%u] Disconnected!\n", num);
    -
    2216  break;
    -
    2217  case WStype_CONNECTED:
    -
    2218  {
    -
    2219  IPAddress ip = _socket_server->remoteIP(num);
    -
    2220  //USE_SERIAL.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload);
    -
    2221  String s = "CURRENT_ID:" + String(num);
    -
    2222  // send message to client
    -
    2223  _id_connection = num;
    -
    2224  _socket_server->sendTXT(_id_connection, s);
    -
    2225  s = "ACTIVE_ID:" + String(_id_connection);
    -
    2226  _socket_server->broadcastTXT(s);
    -
    2227  }
    -
    2228  break;
    -
    2229  case WStype_TEXT:
    -
    2230  //USE_SERIAL.printf("[%u] get Text: %s\n", num, payload);
    -
    2231 
    -
    2232  // send message to client
    -
    2233  // webSocket.sendTXT(num, "message here");
    -
    2234 
    -
    2235  // send data to all connected clients
    -
    2236  // webSocket.broadcastTXT("message here");
    -
    2237  break;
    -
    2238  case WStype_BIN:
    -
    2239  //USE_SERIAL.printf("[%u] get binary length: %u\n", num, length);
    -
    2240  //hexdump(payload, length);
    -
    2241 
    -
    2242  // send message to client
    -
    2243  // webSocket.sendBIN(num, payload, length);
    -
    2244  break;
    -
    2245  default:
    -
    2246  break;
    -
    2247  }
    -
    2248 
    -
    2249 }
    -
    2250 
    -
    2251 //just simple helper to convert mac address to string
    -
    2252 char * Web_Server::mac2str (uint8_t mac [8])
    -
    2253 {
    -
    2254  static char macstr [18];
    -
    2255  if (0 > sprintf (macstr, "%02X:%02X:%02X:%02X:%02X:%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ) {
    -
    2256  strcpy (macstr, "00:00:00:00:00:00");
    -
    2257  }
    -
    2258  return macstr;
    -
    2259 }
    -
    2260 
    -
    2261 String Web_Server::get_Splited_Value(String data, char separator, int index)
    -
    2262 {
    -
    2263  int found = 0;
    -
    2264  int strIndex[] = {0, -1};
    -
    2265  int maxIndex = data.length()-1;
    -
    2266 
    -
    2267  for(int i=0; i<=maxIndex && found<=index; i++){
    -
    2268  if(data.charAt(i)==separator || i==maxIndex){
    -
    2269  found++;
    -
    2270  strIndex[0] = strIndex[1]+1;
    -
    2271  strIndex[1] = (i == maxIndex) ? i+1 : i;
    -
    2272  }
    -
    2273  }
    -
    2274 
    -
    2275  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
    -
    2276 }
    -
    2277 
    -
    2278 
    -
    2279 //helper to format size to readable string
    -
    2280 String Web_Server::formatBytes (uint32_t bytes)
    -
    2281 {
    -
    2282  if (bytes < 1024) {
    -
    2283  return String (bytes) + " B";
    -
    2284  } else if (bytes < (1024 * 1024) ) {
    -
    2285  return String (bytes / 1024.0) + " KB";
    -
    2286  } else if (bytes < (1024 * 1024 * 1024) ) {
    -
    2287  return String (bytes / 1024.0 / 1024.0) + " MB";
    -
    2288  } else {
    -
    2289  return String (bytes / 1024.0 / 1024.0 / 1024.0) + " GB";
    -
    2290  }
    -
    2291 }
    -
    2292 
    -
    2293 //helper to extract content type from file extension
    -
    2294 //Check what is the content tye according extension file
    -
    2295 String Web_Server::getContentType (String filename)
    -
    2296 {
    -
    2297  String file_name = filename;
    -
    2298  file_name.toLowerCase();
    -
    2299  if (filename.endsWith (".htm") ) {
    -
    2300  return "text/html";
    -
    2301  } else if (file_name.endsWith (".html") ) {
    -
    2302  return "text/html";
    -
    2303  } else if (file_name.endsWith (".css") ) {
    -
    2304  return "text/css";
    -
    2305  } else if (file_name.endsWith (".js") ) {
    -
    2306  return "application/javascript";
    -
    2307  } else if (file_name.endsWith (".png") ) {
    -
    2308  return "image/png";
    -
    2309  } else if (file_name.endsWith (".gif") ) {
    -
    2310  return "image/gif";
    -
    2311  } else if (file_name.endsWith (".jpeg") ) {
    -
    2312  return "image/jpeg";
    -
    2313  } else if (file_name.endsWith (".jpg") ) {
    -
    2314  return "image/jpeg";
    -
    2315  } else if (file_name.endsWith (".ico") ) {
    -
    2316  return "image/x-icon";
    -
    2317  } else if (file_name.endsWith (".xml") ) {
    -
    2318  return "text/xml";
    -
    2319  } else if (file_name.endsWith (".pdf") ) {
    -
    2320  return "application/x-pdf";
    -
    2321  } else if (file_name.endsWith (".zip") ) {
    -
    2322  return "application/x-zip";
    -
    2323  } else if (file_name.endsWith (".gz") ) {
    -
    2324  return "application/x-gzip";
    -
    2325  } else if (file_name.endsWith (".txt") ) {
    -
    2326  return "text/plain";
    -
    2327  }
    -
    2328  return "application/octet-stream";
    -
    2329 }
    -
    2330 
    -
    2331 //check authentification
    -
    2332 level_authenticate_type Web_Server::is_authenticated()
    -
    2333 {
    -
    2334 #ifdef ENABLE_AUTHENTICATION
    -
    2335  if (_webserver->hasHeader ("Cookie") ) {
    -
    2336  String cookie = _webserver->header ("Cookie");
    -
    2337  int pos = cookie.indexOf ("ESPSESSIONID=");
    -
    2338  if (pos != -1) {
    -
    2339  int pos2 = cookie.indexOf (";", pos);
    -
    2340  String sessionID = cookie.substring (pos + strlen ("ESPSESSIONID="), pos2);
    -
    2341  IPAddress ip = _webserver->client().remoteIP();
    -
    2342  //check if cookie can be reset and clean table in same time
    -
    2343  return ResetAuthIP (ip, sessionID.c_str() );
    -
    2344  }
    -
    2345  }
    -
    2346  return LEVEL_GUEST;
    -
    2347 #else
    -
    2348  return LEVEL_ADMIN;
    -
    2349 #endif
    -
    2350 }
    -
    2351 
    -
    2352 #ifdef ENABLE_AUTHENTICATION
    -
    2353 
    -
    2354 bool Web_Server::isLocalPasswordValid (const char * password)
    -
    2355 {
    -
    2356  char c;
    -
    2357  //limited size
    -
    2358  if ( (strlen (password) > MAX_LOCAL_PASSWORD_LENGTH) || (strlen (password) < MIN_LOCAL_PASSWORD_LENGTH) ) {
    -
    2359  return false;
    -
    2360  }
    -
    2361  //no space allowed
    -
    2362  for (int i = 0; i < strlen (password); i++) {
    -
    2363  c = password[i];
    -
    2364  if (c == ' ') {
    -
    2365  return false;
    -
    2366  }
    -
    2367  }
    -
    2368  return true;
    -
    2369 }
    -
    2370 
    -
    2371 //add the information in the linked list if possible
    -
    2372 bool Web_Server::AddAuthIP (auth_ip * item)
    -
    2373 {
    -
    2374  if (_nb_ip > MAX_AUTH_IP) {
    -
    2375  return false;
    -
    2376  }
    -
    2377  item->_next = _head;
    -
    2378  _head = item;
    -
    2379  _nb_ip++;
    -
    2380  return true;
    -
    2381 }
    -
    2382 
    -
    2383 //Session ID based on IP and time using 16 char
    -
    2384 char * Web_Server::create_session_ID()
    -
    2385 {
    -
    2386  static char sessionID[17];
    -
    2387 //reset SESSIONID
    -
    2388  for (int i = 0; i < 17; i++) {
    -
    2389  sessionID[i] = '\0';
    -
    2390  }
    -
    2391 //get time
    -
    2392  uint32_t now = millis();
    -
    2393 //get remote IP
    -
    2394  IPAddress remoteIP = _webserver->client().remoteIP();
    -
    2395 //generate SESSIONID
    -
    2396  if (0 > sprintf (sessionID, "%02X%02X%02X%02X%02X%02X%02X%02X", remoteIP[0], remoteIP[1], remoteIP[2], remoteIP[3], (uint8_t) ( (now >> 0) & 0xff), (uint8_t) ( (now >> 8) & 0xff), (uint8_t) ( (now >> 16) & 0xff), (uint8_t) ( (now >> 24) & 0xff) ) ) {
    -
    2397  strcpy (sessionID, "NONE");
    -
    2398  }
    -
    2399  return sessionID;
    -
    2400 }
    -
    2401 
    -
    2402 
    -
    2403 bool Web_Server::ClearAuthIP (IPAddress ip, const char * sessionID)
    -
    2404 {
    -
    2405  auth_ip * current = _head;
    -
    2406  auth_ip * previous = NULL;
    -
    2407  bool done = false;
    -
    2408  while (current) {
    -
    2409  if ( (ip == current->ip) && (strcmp (sessionID, current->sessionID) == 0) ) {
    -
    2410  //remove
    -
    2411  done = true;
    -
    2412  if (current == _head) {
    -
    2413  _head = current->_next;
    -
    2414  _nb_ip--;
    -
    2415  delete current;
    -
    2416  current = _head;
    -
    2417  } else {
    -
    2418  previous->_next = current->_next;
    -
    2419  _nb_ip--;
    -
    2420  delete current;
    -
    2421  current = previous->_next;
    -
    2422  }
    -
    2423  } else {
    -
    2424  previous = current;
    -
    2425  current = current->_next;
    -
    2426  }
    -
    2427  }
    -
    2428  return done;
    -
    2429 }
    -
    2430 
    -
    2431 //Get info
    -
    2432 auth_ip * Web_Server::GetAuth (IPAddress ip, const char * sessionID)
    -
    2433 {
    -
    2434  auth_ip * current = _head;
    -
    2435  //auth_ip * previous = NULL;
    -
    2436  //get time
    -
    2437  //uint32_t now = millis();
    -
    2438  while (current) {
    -
    2439  if (ip == current->ip) {
    -
    2440  if (strcmp (sessionID, current->sessionID) == 0) {
    -
    2441  //found
    -
    2442  return current;
    -
    2443  }
    -
    2444  }
    -
    2445  //previous = current;
    -
    2446  current = current->_next;
    -
    2447  }
    -
    2448  return NULL;
    -
    2449 }
    -
    2450 
    -
    2451 //Review all IP to reset timers
    -
    2452 level_authenticate_type Web_Server::ResetAuthIP (IPAddress ip, const char * sessionID)
    -
    2453 {
    -
    2454  auth_ip * current = _head;
    -
    2455  auth_ip * previous = NULL;
    -
    2456  //get time
    -
    2457  //uint32_t now = millis();
    -
    2458  while (current) {
    -
    2459  if ( (millis() - current->last_time) > 360000) {
    -
    2460  //remove
    -
    2461  if (current == _head) {
    -
    2462  _head = current->_next;
    -
    2463  _nb_ip--;
    -
    2464  delete current;
    -
    2465  current = _head;
    -
    2466  } else {
    -
    2467  previous->_next = current->_next;
    -
    2468  _nb_ip--;
    -
    2469  delete current;
    -
    2470  current = previous->_next;
    -
    2471  }
    -
    2472  } else {
    -
    2473  if (ip == current->ip) {
    -
    2474  if (strcmp (sessionID, current->sessionID) == 0) {
    -
    2475  //reset time
    -
    2476  current->last_time = millis();
    -
    2477  return (level_authenticate_type) current->level;
    -
    2478  }
    -
    2479  }
    -
    2480  previous = current;
    -
    2481  current = current->_next;
    -
    2482  }
    -
    2483  }
    -
    2484  return LEVEL_GUEST;
    -
    2485 }
    -
    2486 #endif
    -
    2487 
    -
    2488 String Web_Server::get_param (String & cmd_params, const char * id, bool withspace)
    -
    2489 {
    -
    2490  static String parameter;
    -
    2491  String sid = id;
    -
    2492  int start;
    -
    2493  int end = -1;
    -
    2494  parameter = "";
    -
    2495  //if no id it means it is first part of cmd
    -
    2496  if (strlen (id) == 0) {
    -
    2497  start = 0;
    -
    2498  }
    -
    2499  //else find id position
    -
    2500  else {
    -
    2501  start = cmd_params.indexOf (id);
    -
    2502  }
    -
    2503  //if no id found and not first part leave
    -
    2504  if (start == -1 ) {
    -
    2505  return parameter;
    -
    2506  }
    -
    2507  //password and SSID can have space so handle it
    -
    2508  //if no space expected use space as delimiter
    -
    2509  if (!withspace) {
    -
    2510  end = cmd_params.indexOf (" ", start);
    -
    2511  }
    -
    2512  //if no end found - take all
    -
    2513  if (end == -1) {
    -
    2514  end = cmd_params.length();
    -
    2515  }
    -
    2516  //extract parameter
    -
    2517  parameter = cmd_params.substring (start + strlen (id), end);
    -
    2518  //be sure no extra space
    -
    2519  parameter.trim();
    -
    2520  return parameter;
    -
    2521 }
    -
    2522 
    -
    2523 ESPResponseStream::ESPResponseStream(WebServer * webserver){
    -
    2524  _header_sent=false;
    -
    2525  _webserver = webserver;
    -
    2526 }
    -
    2527 
    -
    2528 void ESPResponseStream::println(const char *data){
    -
    2529  print(data);
    -
    2530  print("\n");
    -
    2531 }
    -
    2532 
    -
    2533 void ESPResponseStream::print(const char *data){
    -
    2534  if (!_header_sent) {
    -
    2535  _webserver->setContentLength(CONTENT_LENGTH_UNKNOWN);
    -
    2536  _webserver->sendHeader("Content-Type","text/html");
    -
    2537  _webserver->sendHeader("Cache-Control","no-cache");
    -
    2538  _webserver->send(200);
    -
    2539  _header_sent = true;
    -
    2540  }
    -
    2541  _buffer+=data;
    -
    2542  if (_buffer.length() > 1200) {
    -
    2543  //send data
    -
    2544  _webserver->sendContent(_buffer);
    -
    2545  //reset buffer
    -
    2546  _buffer = "";
    -
    2547  }
    -
    2548 
    -
    2549 }
    -
    2550 
    - -
    2552  if(_header_sent) {
    -
    2553  //send data
    -
    2554  if(_buffer.length() > 0)_webserver->sendContent(_buffer);
    -
    2555  //close connection
    -
    2556  _webserver->sendContent("");
    -
    2557  }
    -
    2558  _header_sent = false;
    -
    2559  _buffer = "";
    -
    2560 
    -
    2561 }
    -
    2562 
    -
    2563 #endif // Enable HTTP
    -
    2564 
    -
    2565 #endif // ENABLE_WIFI
    -
    2566 
    -
    2567 #endif // ARDUINO_ARCH_ESP32
    -
    -
    - -
    #define STA_SSID_ENTRY
    Definition: wificonfig.h:38
    -
    #define MAX_HOSTNAME_LENGTH
    Definition: wificonfig.h:90
    -
    #define TELNET_PORT_ENTRY
    Definition: wificonfig.h:51
    -
    WiFiConfig wifi_config
    - -
    level_authenticate_type
    Definition: web_server.h:31
    -
    @ LEVEL_GUEST
    Definition: web_server.h:32
    -
    #define AP_IP_ENTRY
    Definition: wificonfig.h:46
    -
    bool attachWS(void *web_socket)
    -
    static void handle()
    - -
    #define MAX_HTTP_PORT
    Definition: wificonfig.h:92
    - -
    uint32_t card_used_space()
    -
    bool begin()
    -
    #define MAX_SSID_LENGTH
    Definition: wificonfig.h:84
    -
    String makepath83(String longpath)
    -
    uint16_t read(uint8_t *buf, uint16_t nbyte)
    - -
    #define HIDDEN_PASSWORD
    Definition: wificonfig.h:81
    -
    #define MIN_HTTP_PORT
    Definition: wificonfig.h:93
    - -
    #define AP_SSID_ENTRY
    Definition: wificonfig.h:44
    -
    void end()
    -
    #define DHCP_MODE
    Definition: wificonfig.h:59
    -
    #define STA_GW_ENTRY
    Definition: wificonfig.h:41
    -
    @ LEVEL_ADMIN
    Definition: web_server.h:34
    - - -
    #define STA_IP_MODE_ENTRY
    Definition: wificonfig.h:52
    -
    #define MAX_CHANNEL
    Definition: wificonfig.h:97
    -
    bool mkdir(const char *path)
    -
    #define MIN_HOSTNAME_LENGTH
    Definition: wificonfig.h:91
    -
    @ LEVEL_USER
    Definition: web_server.h:33
    - -
    bool push(const char *data)
    -
    bool exists(const char *path)
    -
    int8_t card_status()
    -
    bool isopen()
    -
    bool remove(const char *path)
    -
    int16_t write(const uint8_t *data, uint16_t len)
    -
    static int32_t getSignal(int32_t RSSI)
    -
    #define DEFAULT_HTTP_STATE
    Definition: wificonfig.h:80
    -
    #define MIN_CHANNEL
    Definition: wificonfig.h:96
    -
    #define STA_MK_ENTRY
    Definition: wificonfig.h:42
    -
    void print(const char *data)
    -
    #define MYSERIAL0
    Definition: esplibconfig.h:29
    - -
    void close()
    -
    #define DEFAULT_AP_CHANNEL
    Definition: wificonfig.h:78
    - -
    #define MIN_SSID_LENGTH
    Definition: wificonfig.h:85
    -
    bool dir_exists(const char *path)
    - -
    #define ESP_WIFI_MODE
    Definition: wificonfig.h:43
    -
    #define MIN_PASSWORD_LENGTH
    Definition: wificonfig.h:89
    -
    bool openDir(String path)
    - -
    ESPResponseStream(WebServer *webserver)
    -
    static long get_client_ID()
    -
    #define PAGE_NOFILES_SIZE
    Definition: nofile.h:23
    -
    #define ESP_WIFI_OFF
    Definition: wificonfig.h:55
    -
    #define TELNET_ENABLE_ENTRY
    Definition: wificonfig.h:50
    -
    #define STA_PWD_ENTRY
    Definition: wificonfig.h:39
    - -
    uint32_t size()
    -
    #define NAMESPACE
    Definition: wificonfig.h:36
    -
    bool rmdir(const char *path)
    -
    #define DEFAULT_STA_SSID
    Definition: wificonfig.h:68
    -
    #define DEFAULT_AP_IP
    Definition: wificonfig.h:76
    -
    static String IP_string_from_int(uint32_t ip_int)
    -
    Serial_2_Socket Serial2Socket
    -
    static void restart_ESP()
    -
    #define STA_IP_ENTRY
    Definition: wificonfig.h:40
    -
    uint32_t card_total_space()
    -
    #define HTTP_PORT_ENTRY
    Definition: wificonfig.h:49
    -
    #define DEFAULT_WEBSERVER_PORT
    Definition: wificonfig.h:79
    -
    static void wait(uint32_t milliseconds)
    -
    #define DEFAULT_HOSTNAME
    Definition: wificonfig.h:67
    -
    bool readDir(char name[13], uint32_t *size, bool *isFile)
    -
    #define DEFAULT_AP_SSID
    Definition: wificonfig.h:74
    -
    bool open(const char *path, bool readonly=true)
    -
    #define MAX_PASSWORD_LENGTH
    Definition: wificonfig.h:86
    -
    #define AP_PWD_ENTRY
    Definition: wificonfig.h:45
    -
    #define HTTP_ENABLE_ENTRY
    Definition: wificonfig.h:48
    -
    #define HOSTNAME_ENTRY
    Definition: wificonfig.h:37
    -
    void println(const char *data)
    -
    #define AP_CHANNEL_ENTRY
    Definition: wificonfig.h:47
    -
    static uint32_t IP_int_from_string(String &s)
    -
    Web_Server web_server
    - - - - diff --git a/docs/html/web__server_8h.html b/docs/html/web__server_8h.html deleted file mode 100644 index a184c52..0000000 --- a/docs/html/web__server_8h.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -ESP3D Lib: src/web_server.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    web_server.h File Reference
    -
    -
    -
    #include "wificonfig.h"
    -
    -Include dependency graph for web_server.h:
    -
    -
    - - - - - - -
    -
    -

    Go to the source code of this file.

    - - - - - - -

    -Classes

    class  ESPResponseStream
     
    class  Web_Server
     
    - - - -

    -Enumerations

    enum  level_authenticate_type { LEVEL_GUEST = 0, -LEVEL_USER = 1, -LEVEL_ADMIN = 2 - }
     
    - - - -

    -Variables

    Web_Server web_server
     
    -

    Enumeration Type Documentation

    - -

    ◆ level_authenticate_type

    - -
    -
    - - - - -
    enum level_authenticate_type
    -
    - - - - -
    Enumerator
    LEVEL_GUEST 
    LEVEL_USER 
    LEVEL_ADMIN 
    - -

    Definition at line 31 of file web_server.h.

    - -
    -
    -

    Variable Documentation

    - -

    ◆ web_server

    - -
    -
    - - - - -
    Web_Server web_server
    -
    - -
    -
    -
    -
    - - - - diff --git a/docs/html/web__server_8h.js b/docs/html/web__server_8h.js deleted file mode 100644 index 339222f..0000000 --- a/docs/html/web__server_8h.js +++ /dev/null @@ -1,11 +0,0 @@ -var web__server_8h = -[ - [ "ESPResponseStream", "class_e_s_p_response_stream.html", "class_e_s_p_response_stream" ], - [ "Web_Server", "class_web___server.html", "class_web___server" ], - [ "level_authenticate_type", "web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6", [ - [ "LEVEL_GUEST", "web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a162efbbc3db6c397f7d1b04b35720ff0", null ], - [ "LEVEL_USER", "web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a06598e45d399ba6c77371ff2b42dd41c", null ], - [ "LEVEL_ADMIN", "web__server_8h.html#a3095411b68dbc51b5b535151b5bf0ae6a4ddf9e0f200403030b62492db571d9bb", null ] - ] ], - [ "web_server", "web__server_8h.html#a4868e08e80c4b2c1456bf0f8d5c78dd8", null ] -]; \ No newline at end of file diff --git a/docs/html/web__server_8h__incl.map b/docs/html/web__server_8h__incl.map deleted file mode 100644 index 84253c9..0000000 --- a/docs/html/web__server_8h__incl.map +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/html/web__server_8h__incl.md5 b/docs/html/web__server_8h__incl.md5 deleted file mode 100644 index d56550c..0000000 --- a/docs/html/web__server_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -9925bd438feba7cdfafdf44ee4ba94b6 \ No newline at end of file diff --git a/docs/html/web__server_8h__incl.png b/docs/html/web__server_8h__incl.png deleted file mode 100644 index 1cc63a9..0000000 Binary files a/docs/html/web__server_8h__incl.png and /dev/null differ diff --git a/docs/html/web__server_8h_source.html b/docs/html/web__server_8h_source.html deleted file mode 100644 index 9b7079a..0000000 --- a/docs/html/web__server_8h_source.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -ESP3D Lib: src/web_server.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    web_server.h
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  web_server.h - wifi services functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 
    -
    22 #ifndef _WEB_SERVER_H
    -
    23 #define _WEB_SERVER_H
    -
    24 
    -
    25 
    -
    26 #include "wificonfig.h"
    -
    27 class WebSocketsServer;
    -
    28 class WebServer;
    -
    29 
    -
    30 //Authentication level
    -
    31 typedef enum {
    - - - - -
    36 
    -
    37 #ifdef ENABLE_AUTHENTICATION
    -
    38 struct auth_ip {
    -
    39  IPAddress ip;
    - -
    41  char userID[17];
    -
    42  char sessionID[17];
    -
    43  uint32_t last_time;
    -
    44  auth_ip * _next;
    -
    45 };
    -
    46 
    -
    47 #endif
    -
    48 
    -
    49 
    -
    50 
    -
    51 
    - -
    53  public:
    -
    54  void print(const char *data);
    -
    55  void println(const char *data);
    -
    56  void flush();
    -
    57  ESPResponseStream(WebServer * webserver);
    -
    58  private:
    -
    59  bool _header_sent;
    -
    60  WebServer * _webserver;
    -
    61  String _buffer;
    -
    62 };
    -
    63 
    -
    64 class Web_Server {
    -
    65  public:
    -
    66  Web_Server();
    -
    67  ~Web_Server();
    -
    68  bool begin();
    -
    69  void end();
    -
    70  static void handle();
    -
    71  static long get_client_ID();
    -
    72  private:
    -
    73  static bool _setupdone;
    -
    74  static WebServer * _webserver;
    -
    75  static long _id_connection;
    -
    76  static WebSocketsServer * _socket_server;
    -
    77  static uint16_t _port;
    -
    78  static uint16_t _data_port;
    -
    79  static String _hostname;
    -
    80  static uint8_t _upload_status;
    -
    81  static char * mac2str (uint8_t mac [8]);
    -
    82  static String formatBytes (uint32_t bytes);
    -
    83  static String getContentType (String filename);
    -
    84  static String get_Splited_Value(String data, char separator, int index);
    -
    85  static level_authenticate_type is_authenticated();
    -
    86 #ifdef ENABLE_AUTHENTICATION
    -
    87  static auth_ip * _head;
    -
    88  static uint8_t _nb_ip;
    -
    89  static bool AddAuthIP (auth_ip * item);
    -
    90  static char * create_session_ID();
    -
    91  static bool ClearAuthIP (IPAddress ip, const char * sessionID);
    -
    92  static auth_ip * GetAuth (IPAddress ip, const char * sessionID);
    -
    93  static level_authenticate_type ResetAuthIP (IPAddress ip, const char * sessionID);
    -
    94  static bool isLocalPasswordValid (const char * password);
    -
    95 #endif
    -
    96  static String get_param (String & cmd_params, const char * id, bool withspace);
    -
    97  static bool execute_internal_command (int cmd, String cmd_params, level_authenticate_type auth_level, ESPResponseStream *espresponse);
    -
    98 #ifdef ENABLE_SSDP
    -
    99  static void handle_SSDP ();
    -
    100 #endif
    -
    101  static void handle_root();
    -
    102  static void handle_login();
    -
    103  static void handle_not_found ();
    -
    104  static void handle_web_command ();
    -
    105  static void handle_web_command_silent ();
    -
    106  static void handle_Websocket_Event(uint8_t num, uint8_t type, uint8_t * payload, size_t length);
    -
    107  static void SPIFFSFileupload ();
    -
    108  static void handleFileList ();
    -
    109  static void handleUpdate ();
    -
    110  static void WebUpdateUpload ();
    -
    111 #if ENABLED(SDSUPPORT)
    -
    112  static void handle_direct_SDFileList();
    -
    113  static void SDFile_direct_upload();
    -
    114 #endif
    -
    115 };
    -
    116 
    -
    117 extern Web_Server web_server;
    -
    118 
    -
    119 #endif
    -
    120 
    -
    -
    - -
    level_authenticate_type
    Definition: web_server.h:31
    -
    @ LEVEL_GUEST
    Definition: web_server.h:32
    -
    static void handle()
    - -
    bool begin()
    - -
    void end()
    -
    @ LEVEL_ADMIN
    Definition: web_server.h:34
    -
    @ LEVEL_USER
    Definition: web_server.h:33
    -
    void print(const char *data)
    - - -
    ESPResponseStream(WebServer *webserver)
    -
    static long get_client_ID()
    - -
    void println(const char *data)
    -
    Web_Server web_server
    - - - - diff --git a/docs/html/wificonfig_8cpp.html b/docs/html/wificonfig_8cpp.html deleted file mode 100644 index df6ff5b..0000000 --- a/docs/html/wificonfig_8cpp.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -ESP3D Lib: src/wificonfig.cpp File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wificonfig.cpp File Reference
    -
    - -
    - - - - diff --git a/docs/html/wificonfig_8cpp_source.html b/docs/html/wificonfig_8cpp_source.html deleted file mode 100644 index 92970bd..0000000 --- a/docs/html/wificonfig_8cpp_source.html +++ /dev/null @@ -1,521 +0,0 @@ - - - - - - - -ESP3D Lib: src/wificonfig.cpp Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wificonfig.cpp
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  wificonfig.cpp - wifi functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 #ifdef ARDUINO_ARCH_ESP32
    -
    22 
    -
    23 #include "esplibconfig.h"
    -
    24 
    -
    25 #if ENABLED(ESP3D_WIFISUPPORT)
    -
    26 #include <WiFi.h>
    -
    27 #include <esp_wifi.h>
    -
    28 #include <ESPmDNS.h>
    -
    29 #include <FS.h>
    -
    30 #include <SPIFFS.h>
    -
    31 #include <Preferences.h>
    -
    32 #include "wificonfig.h"
    -
    33 #include "wifiservices.h"
    -
    34 
    -
    35 #ifdef __cplusplus
    -
    36 extern "C" {
    -
    37 #endif
    -
    38 esp_err_t esp_task_wdt_reset();
    -
    39 #ifdef __cplusplus
    -
    40 }
    -
    41 #endif
    -
    42 
    - -
    44 
    -
    45 bool WiFiConfig::restart_ESP_module = false;
    -
    46 
    - -
    48 }
    -
    49 
    - -
    51  end();
    -
    52 }
    -
    53 
    -
    58 uint32_t WiFiConfig::IP_int_from_string(String & s){
    -
    59  uint32_t ip_int = 0;
    -
    60  IPAddress ipaddr;
    -
    61  if (ipaddr.fromString(s)) ip_int = ipaddr;
    -
    62  return ip_int;
    -
    63 }
    -
    64 
    -
    69 String WiFiConfig::IP_string_from_int(uint32_t ip_int){
    -
    70  IPAddress ipaddr(ip_int);
    -
    71  return ipaddr.toString();
    -
    72 }
    -
    73 
    -
    78 bool WiFiConfig::isHostnameValid (const char * hostname)
    -
    79 {
    -
    80  //limited size
    -
    81  char c;
    -
    82  if (strlen (hostname) > MAX_HOSTNAME_LENGTH || strlen (hostname) < MIN_HOSTNAME_LENGTH) {
    -
    83  return false;
    -
    84  }
    -
    85  //only letter and digit
    -
    86  for (int i = 0; i < strlen (hostname); i++) {
    -
    87  c = hostname[i];
    -
    88  if (! (isdigit (c) || isalpha (c) || c == '_') ) {
    -
    89  return false;
    -
    90  }
    -
    91  if (c == ' ') {
    -
    92  return false;
    -
    93  }
    -
    94  }
    -
    95  return true;
    -
    96 }
    -
    97 
    -
    102 bool WiFiConfig::isSSIDValid (const char * ssid)
    -
    103 {
    -
    104  //limited size
    -
    105  //char c;
    -
    106  if (strlen (ssid) > MAX_SSID_LENGTH || strlen (ssid) < MIN_SSID_LENGTH) {
    -
    107  return false;
    -
    108  }
    -
    109  //only printable
    -
    110  for (int i = 0; i < strlen (ssid); i++) {
    -
    111  if (!isPrintable (ssid[i]) ) {
    -
    112  return false;
    -
    113  }
    -
    114  }
    -
    115  return true;
    -
    116 }
    -
    117 
    -
    122 bool WiFiConfig::isPasswordValid (const char * password)
    -
    123 {
    -
    124  if (strlen (password) == 0) return true; //open network
    -
    125  //limited size
    -
    126  if ((strlen (password) > MAX_PASSWORD_LENGTH) || (strlen (password) < MIN_PASSWORD_LENGTH)) {
    -
    127  return false;
    -
    128  }
    -
    129  //no space allowed ?
    -
    130  /* for (int i = 0; i < strlen (password); i++)
    -
    131  if (password[i] == ' ') {
    -
    132  return false;
    -
    133  }*/
    -
    134  return true;
    -
    135 }
    -
    136 
    -
    140 bool WiFiConfig::isValidIP(const char * string){
    -
    141  IPAddress ip;
    -
    142  return ip.fromString(string);
    -
    143 }
    -
    144 
    -
    145 /*
    -
    146  * delay is to avoid with asyncwebserver and may need to wait sometimes
    -
    147  */
    -
    148 void WiFiConfig::wait(uint32_t milliseconds){
    -
    149  uint32_t timeout = millis();
    -
    150  vTaskDelay(1 / portTICK_RATE_MS); // Yield to other tasks
    -
    151  esp_task_wdt_reset(); //for a wait 0;
    -
    152  //wait feeding WDT
    -
    153  while ( (millis() - timeout) < milliseconds) {
    -
    154  esp_task_wdt_reset();
    -
    155  vTaskDelay(1 / portTICK_RATE_MS); // Yield to other tasks
    -
    156  }
    -
    157 }
    -
    158 
    -
    188 void WiFiConfig::WiFiEvent(WiFiEvent_t event)
    -
    189 {
    -
    190  switch (event)
    -
    191  {
    -
    192  case SYSTEM_EVENT_STA_GOT_IP:
    -
    193  MYSERIAL0.println ("Connected");
    -
    194  MYSERIAL0.println(WiFi.localIP());
    -
    195  break;
    -
    196  case SYSTEM_EVENT_STA_DISCONNECTED:
    -
    197  MYSERIAL0.println("WiFi lost connection");
    -
    198  break;
    -
    199  default:
    -
    200  break;
    -
    201  }
    -
    202 }
    -
    203 
    -
    204 /*
    -
    205  * Get WiFi signal strength
    -
    206  */
    -
    207 int32_t WiFiConfig::getSignal (int32_t RSSI)
    -
    208 {
    -
    209  if (RSSI <= -100) {
    -
    210  return 0;
    -
    211  }
    -
    212  if (RSSI >= -50) {
    -
    213  return 100;
    -
    214  }
    -
    215  return (2 * (RSSI + 100) );
    -
    216 }
    -
    217 
    -
    218 /*
    -
    219  * Connect client to AP
    -
    220  */
    -
    221 
    -
    222 bool WiFiConfig::ConnectSTA2AP(){
    -
    223  String msg, msg_out;
    -
    224  uint8_t count = 0;
    -
    225  uint8_t dot = 0;
    -
    226  wl_status_t status = WiFi.status();
    -
    227  while (status != WL_CONNECTED && count < 40) {
    -
    228 
    -
    229  switch (status) {
    -
    230  case WL_NO_SSID_AVAIL:
    -
    231  msg="No SSID";
    -
    232  break;
    -
    233  case WL_CONNECT_FAILED:
    -
    234  msg="Connection failed";
    -
    235  break;
    -
    236  case WL_CONNECTED:
    -
    237  break;
    -
    238  default:
    -
    239  if ((dot>3) || (dot==0) ){
    -
    240  dot=0;
    -
    241  msg_out = "Connecting";
    -
    242  }
    -
    243  msg_out+=".";
    -
    244  msg= msg_out;
    -
    245  dot++;
    -
    246  break;
    -
    247  }
    -
    248  MYSERIAL0.println(msg.c_str());
    -
    249  wait (500);
    -
    250  count++;
    -
    251  status = WiFi.status();
    -
    252  }
    -
    253  return (status == WL_CONNECTED);
    -
    254 }
    -
    255 
    -
    256 /*
    -
    257  * Start client mode (Station)
    -
    258  */
    -
    259 
    -
    260 bool WiFiConfig::StartSTA(){
    -
    261  String defV;
    -
    262  Preferences prefs;
    -
    263  //stop active service
    -
    264  wifi_services.end();
    -
    265  //Sanity check
    -
    266  if((WiFi.getMode() == WIFI_STA) || (WiFi.getMode() == WIFI_AP_STA))WiFi.disconnect();
    -
    267  if((WiFi.getMode() == WIFI_AP) || (WiFi.getMode() == WIFI_AP_STA))WiFi.softAPdisconnect();
    -
    268  WiFi.enableAP (false);
    -
    269  WiFi.mode(WIFI_STA);
    -
    270  //Get parameters for STA
    -
    271  prefs.begin(NAMESPACE, true);
    -
    272  defV = DEFAULT_HOSTNAME;
    -
    273  String h = prefs.getString(HOSTNAME_ENTRY, defV);
    -
    274  WiFi.setHostname(h.c_str());
    -
    275  //SSID
    -
    276  defV = DEFAULT_STA_SSID;
    -
    277  String SSID = prefs.getString(STA_SSID_ENTRY, defV);
    -
    278  if (SSID.length() == 0)SSID = DEFAULT_STA_SSID;
    -
    279  //password
    -
    280  defV = DEFAULT_STA_PWD;
    -
    281  String password = prefs.getString(STA_PWD_ENTRY, defV);
    -
    282  int8_t IP_mode = prefs.getChar(STA_IP_MODE_ENTRY, DHCP_MODE);
    -
    283  //IP
    -
    284  defV = DEFAULT_STA_IP;
    -
    285  int32_t IP = prefs.getInt(STA_IP_ENTRY, IP_int_from_string(defV));
    -
    286  //GW
    -
    287  defV = DEFAULT_STA_GW;
    -
    288  int32_t GW = prefs.getInt(STA_GW_ENTRY, IP_int_from_string(defV));
    -
    289  //MK
    -
    290  defV = DEFAULT_STA_MK;
    -
    291  int32_t MK = prefs.getInt(STA_MK_ENTRY, IP_int_from_string(defV));
    -
    292  prefs.end();
    -
    293  //if not DHCP
    -
    294  if (IP_mode != DHCP_MODE) {
    -
    295  IPAddress ip(IP), mask(MK), gateway(GW);
    -
    296  WiFi.config(ip, gateway,mask);
    -
    297  }
    -
    298  if (WiFi.begin(SSID.c_str(), (password.length() > 0)?password.c_str():NULL)){
    -
    299  MYSERIAL0.print("\nClient Started\nConnecting ");
    -
    300  MYSERIAL0.println(SSID.c_str());
    -
    301  return ConnectSTA2AP();
    -
    302  } else {
    -
    303  MYSERIAL0.println("\nStarting client failed");
    -
    304  return false;
    -
    305  }
    -
    306 }
    -
    307 
    -
    312 bool WiFiConfig::StartAP(){
    -
    313  String defV;
    -
    314  Preferences prefs;
    -
    315  //stop active services
    -
    316  wifi_services.end();
    -
    317  //Sanity check
    -
    318  if((WiFi.getMode() == WIFI_STA) || (WiFi.getMode() == WIFI_AP_STA))WiFi.disconnect();
    -
    319  if((WiFi.getMode() == WIFI_AP) || (WiFi.getMode() == WIFI_AP_STA))WiFi.softAPdisconnect();
    -
    320  WiFi.enableSTA (false);
    -
    321  WiFi.mode(WIFI_AP);
    -
    322  //Get parameters for AP
    -
    323  prefs.begin(NAMESPACE, true);
    -
    324  //SSID
    -
    325  defV = DEFAULT_AP_SSID;
    -
    326  String SSID = prefs.getString(AP_SSID_ENTRY, defV);
    -
    327  if (SSID.length() == 0)SSID = DEFAULT_AP_SSID;
    -
    328  //password
    -
    329  defV = DEFAULT_AP_PWD;
    -
    330  String password = prefs.getString(AP_PWD_ENTRY, defV);
    -
    331  //channel
    -
    332  int8_t channel = prefs.getChar(AP_CHANNEL_ENTRY, DEFAULT_AP_CHANNEL);
    -
    333  if (channel == 0)channel = DEFAULT_AP_CHANNEL;
    -
    334  //IP
    -
    335  defV = DEFAULT_AP_IP;
    -
    336  int32_t IP = prefs.getInt(AP_IP_ENTRY, IP_int_from_string(defV));
    -
    337  if (IP==0){
    -
    338  IP = IP_int_from_string(defV);
    -
    339  }
    -
    340  prefs.end();
    -
    341  IPAddress ip(IP);
    -
    342  IPAddress mask;
    -
    343  mask.fromString(DEFAULT_AP_MK);
    -
    344  //Set static IP
    -
    345  WiFi.softAPConfig(ip, ip, mask);
    -
    346  //Start AP
    -
    347  if(WiFi.softAP(SSID.c_str(), (password.length() > 0)?password.c_str():NULL, channel)) {
    -
    348  MYSERIAL0.print("\nAP Started ");
    -
    349  MYSERIAL0.println(WiFi.softAPIP().toString());
    -
    350  return true;
    -
    351  } else {
    -
    352  MYSERIAL0.println("\nStarting AP failed");
    -
    353  return false;
    -
    354  }
    -
    355 }
    -
    356 
    -
    361 void WiFiConfig::StopWiFi(){
    -
    362  //Sanity check
    -
    363  if((WiFi.getMode() == WIFI_STA) || (WiFi.getMode() == WIFI_AP_STA))WiFi.disconnect(true);
    -
    364  if((WiFi.getMode() == WIFI_AP) || (WiFi.getMode() == WIFI_AP_STA))WiFi.softAPdisconnect(true);
    -
    365  wifi_services.end();
    -
    366  WiFi.mode(WIFI_OFF);
    -
    367  MYSERIAL0.println("\nWiFi Off");
    -
    368 }
    -
    369 
    -
    373 void WiFiConfig::begin() {
    -
    374  Preferences prefs;
    -
    375  //stop active services
    -
    376  wifi_services.end();
    -
    377  //setup events
    -
    378  WiFi.onEvent(WiFiConfig::WiFiEvent);
    -
    379  //open preferences as read-only
    -
    380  prefs.begin(NAMESPACE, true);
    -
    381  int8_t wifiMode = prefs.getChar(ESP_WIFI_MODE, DEFAULT_WIFI_MODE);
    -
    382  prefs.end();
    -
    383  if (wifiMode == ESP_WIFI_AP) {
    -
    384  StartAP();
    -
    385  //start services
    - -
    387  } else if (wifiMode == ESP_WIFI_STA){
    -
    388  if(!StartSTA()){
    -
    389  MYSERIAL0.println("\nCannot connect to AP");
    -
    390  StartAP();
    -
    391  }
    -
    392  //start services
    - -
    394  }else WiFi.mode(WIFI_OFF);
    -
    395 }
    -
    396 
    -
    400 void WiFiConfig::end() {
    -
    401  StopWiFi();
    -
    402 }
    -
    403 
    - -
    408  restart_ESP_module=true;
    -
    409 }
    -
    410 
    -
    414 void WiFiConfig::handle() {
    -
    415  //in case of restart requested
    -
    416  if (restart_ESP_module) {
    -
    417  end();
    -
    418  ESP.restart();
    -
    419  while (1) {};
    -
    420  }
    -
    421 
    -
    422  //Services
    - -
    424 }
    -
    425 
    -
    426 
    -
    427 #endif // ENABLE_WIFI
    -
    428 
    -
    429 #endif // ARDUINO_ARCH_ESP32
    -
    -
    -
    #define STA_SSID_ENTRY
    Definition: wificonfig.h:38
    -
    #define MAX_HOSTNAME_LENGTH
    Definition: wificonfig.h:90
    -
    WiFiConfig wifi_config
    -
    #define AP_IP_ENTRY
    Definition: wificonfig.h:46
    -
    static void end()
    -
    #define MAX_SSID_LENGTH
    Definition: wificonfig.h:84
    -
    #define DEFAULT_AP_PWD
    Definition: wificonfig.h:75
    -
    static void begin()
    -
    #define DEFAULT_STA_IP
    Definition: wificonfig.h:70
    -
    #define ESP_WIFI_STA
    Definition: wificonfig.h:56
    -
    static bool begin()
    -
    static void StopWiFi()
    - -
    #define AP_SSID_ENTRY
    Definition: wificonfig.h:44
    -
    #define DHCP_MODE
    Definition: wificonfig.h:59
    -
    #define STA_GW_ENTRY
    Definition: wificonfig.h:41
    -
    #define DEFAULT_STA_MK
    Definition: wificonfig.h:72
    -
    static bool isPasswordValid(const char *password)
    -
    #define STA_IP_MODE_ENTRY
    Definition: wificonfig.h:52
    -
    #define DEFAULT_WIFI_MODE
    Definition: wificonfig.h:73
    -
    static void end()
    -
    static bool StartAP()
    -
    #define MIN_HOSTNAME_LENGTH
    Definition: wificonfig.h:91
    - -
    static bool isHostnameValid(const char *hostname)
    -
    static void handle()
    -
    static void handle()
    -
    #define DEFAULT_STA_GW
    Definition: wificonfig.h:71
    -
    static int32_t getSignal(int32_t RSSI)
    -
    #define STA_MK_ENTRY
    Definition: wificonfig.h:42
    -
    static bool isValidIP(const char *string)
    -
    #define MYSERIAL0
    Definition: esplibconfig.h:29
    - - - -
    #define DEFAULT_AP_CHANNEL
    Definition: wificonfig.h:78
    -
    #define MIN_SSID_LENGTH
    Definition: wificonfig.h:85
    -
    #define ESP_WIFI_MODE
    Definition: wificonfig.h:43
    -
    #define MIN_PASSWORD_LENGTH
    Definition: wificonfig.h:89
    -
    static bool StartSTA()
    -
    #define DEFAULT_STA_PWD
    Definition: wificonfig.h:69
    -
    WiFiServices wifi_services
    -
    #define STA_PWD_ENTRY
    Definition: wificonfig.h:39
    - -
    #define NAMESPACE
    Definition: wificonfig.h:36
    -
    #define DEFAULT_STA_SSID
    Definition: wificonfig.h:68
    -
    #define DEFAULT_AP_IP
    Definition: wificonfig.h:76
    -
    static String IP_string_from_int(uint32_t ip_int)
    -
    static bool isSSIDValid(const char *ssid)
    -
    static void restart_ESP()
    -
    #define STA_IP_ENTRY
    Definition: wificonfig.h:40
    -
    static void wait(uint32_t milliseconds)
    -
    #define DEFAULT_HOSTNAME
    Definition: wificonfig.h:67
    -
    #define ESP_WIFI_AP
    Definition: wificonfig.h:57
    -
    #define DEFAULT_AP_SSID
    Definition: wificonfig.h:74
    -
    #define MAX_PASSWORD_LENGTH
    Definition: wificonfig.h:86
    -
    #define AP_PWD_ENTRY
    Definition: wificonfig.h:45
    -
    #define HOSTNAME_ENTRY
    Definition: wificonfig.h:37
    -
    #define DEFAULT_AP_MK
    Definition: wificonfig.h:77
    -
    #define AP_CHANNEL_ENTRY
    Definition: wificonfig.h:47
    -
    static uint32_t IP_int_from_string(String &s)
    - - - - diff --git a/docs/html/wificonfig_8h.html b/docs/html/wificonfig_8h.html deleted file mode 100644 index 8c002aa..0000000 --- a/docs/html/wificonfig_8h.html +++ /dev/null @@ -1,1222 +0,0 @@ - - - - - - - -ESP3D Lib: src/wificonfig.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    wificonfig.h File Reference
    -
    -
    -
    #include "esplibconfig.h"
    -#include <WiFi.h>
    -
    -Include dependency graph for wificonfig.h:
    -
    -
    - - - - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    class  WiFiConfig
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Macros

    #define ENABLE_MDNS
     
    #define ENABLE_OTA
     
    #define ENABLE_HTTP
     
    #define ENABLE_SSDP
     
    #define ENABLE_CAPTIVE_PORTAL
     
    #define ENABLE_SERIAL2SOCKET_OUT
     
    #define ENABLE_SERIAL2SOCKET_IN
     
    #define NAMESPACE   "MARLIN"
     
    #define HOSTNAME_ENTRY   "ESP_HOSTNAME"
     
    #define STA_SSID_ENTRY   "STA_SSID"
     
    #define STA_PWD_ENTRY   "STA_PWD"
     
    #define STA_IP_ENTRY   "STA_IP"
     
    #define STA_GW_ENTRY   "STA_GW"
     
    #define STA_MK_ENTRY   "STA_MK"
     
    #define ESP_WIFI_MODE   "WIFI_MODE"
     
    #define AP_SSID_ENTRY   "AP_SSID"
     
    #define AP_PWD_ENTRY   "AP_PWD"
     
    #define AP_IP_ENTRY   "AP_IP"
     
    #define AP_CHANNEL_ENTRY   "AP_CHANNEL"
     
    #define HTTP_ENABLE_ENTRY   "HTTP_ON"
     
    #define HTTP_PORT_ENTRY   "HTTP_PORT"
     
    #define TELNET_ENABLE_ENTRY   "TELNET_ON"
     
    #define TELNET_PORT_ENTRY   "TELNET_PORT"
     
    #define STA_IP_MODE_ENTRY   "STA_IP_MODE"
     
    #define ESP_WIFI_OFF   0
     
    #define ESP_WIFI_STA   1
     
    #define ESP_WIFI_AP   2
     
    #define DHCP_MODE   0
     
    #define STATIC_MODE   0
     
    #define ESP_SAVE_ONLY   0
     
    #define ESP_APPLY_NOW   1
     
    #define DEFAULT_HOSTNAME   "marlinesp"
     
    #define DEFAULT_STA_SSID   "MARLIN_ESP"
     
    #define DEFAULT_STA_PWD   "12345678"
     
    #define DEFAULT_STA_IP   "0.0.0.0"
     
    #define DEFAULT_STA_GW   "0.0.0.0"
     
    #define DEFAULT_STA_MK   "0.0.0.0"
     
    #define DEFAULT_WIFI_MODE   ESP_WIFI_AP
     
    #define DEFAULT_AP_SSID   "MARLIN_ESP"
     
    #define DEFAULT_AP_PWD   "12345678"
     
    #define DEFAULT_AP_IP   "192.168.0.1"
     
    #define DEFAULT_AP_MK   "255.255.255.0"
     
    #define DEFAULT_AP_CHANNEL   1
     
    #define DEFAULT_WEBSERVER_PORT   80
     
    #define DEFAULT_HTTP_STATE   1
     
    #define HIDDEN_PASSWORD   "********"
     
    #define MAX_SSID_LENGTH   32
     
    #define MIN_SSID_LENGTH   1
     
    #define MAX_PASSWORD_LENGTH   64
     
    #define MIN_PASSWORD_LENGTH   8
     
    #define MAX_HOSTNAME_LENGTH   32
     
    #define MIN_HOSTNAME_LENGTH   1
     
    #define MAX_HTTP_PORT   65001
     
    #define MIN_HTTP_PORT   1
     
    #define MAX_TELNET_PORT   65001
     
    #define MIN_TELNET_PORT   1
     
    #define MIN_CHANNEL   1
     
    #define MAX_CHANNEL   14
     
    #define _WIFI_CONFIG_H
     
    - - - -

    -Variables

    WiFiConfig wifi_config
     
    -

    Macro Definition Documentation

    - -

    ◆ _WIFI_CONFIG_H

    - -
    -
    - - - - -
    #define _WIFI_CONFIG_H
    -
    - -

    Definition at line 101 of file wificonfig.h.

    - -
    -
    - -

    ◆ AP_CHANNEL_ENTRY

    - -
    -
    - - - - -
    #define AP_CHANNEL_ENTRY   "AP_CHANNEL"
    -
    - -

    Definition at line 47 of file wificonfig.h.

    - -
    -
    - -

    ◆ AP_IP_ENTRY

    - -
    -
    - - - - -
    #define AP_IP_ENTRY   "AP_IP"
    -
    - -

    Definition at line 46 of file wificonfig.h.

    - -
    -
    - -

    ◆ AP_PWD_ENTRY

    - -
    -
    - - - - -
    #define AP_PWD_ENTRY   "AP_PWD"
    -
    - -

    Definition at line 45 of file wificonfig.h.

    - -
    -
    - -

    ◆ AP_SSID_ENTRY

    - -
    -
    - - - - -
    #define AP_SSID_ENTRY   "AP_SSID"
    -
    - -

    Definition at line 44 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_AP_CHANNEL

    - -
    -
    - - - - -
    #define DEFAULT_AP_CHANNEL   1
    -
    - -

    Definition at line 78 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_AP_IP

    - -
    -
    - - - - -
    #define DEFAULT_AP_IP   "192.168.0.1"
    -
    - -

    Definition at line 76 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_AP_MK

    - -
    -
    - - - - -
    #define DEFAULT_AP_MK   "255.255.255.0"
    -
    - -

    Definition at line 77 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_AP_PWD

    - -
    -
    - - - - -
    #define DEFAULT_AP_PWD   "12345678"
    -
    - -

    Definition at line 75 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_AP_SSID

    - -
    -
    - - - - -
    #define DEFAULT_AP_SSID   "MARLIN_ESP"
    -
    - -

    Definition at line 74 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_HOSTNAME

    - -
    -
    - - - - -
    #define DEFAULT_HOSTNAME   "marlinesp"
    -
    - -

    Definition at line 67 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_HTTP_STATE

    - -
    -
    - - - - -
    #define DEFAULT_HTTP_STATE   1
    -
    - -

    Definition at line 80 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_STA_GW

    - -
    -
    - - - - -
    #define DEFAULT_STA_GW   "0.0.0.0"
    -
    - -

    Definition at line 71 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_STA_IP

    - -
    -
    - - - - -
    #define DEFAULT_STA_IP   "0.0.0.0"
    -
    - -

    Definition at line 70 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_STA_MK

    - -
    -
    - - - - -
    #define DEFAULT_STA_MK   "0.0.0.0"
    -
    - -

    Definition at line 72 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_STA_PWD

    - -
    -
    - - - - -
    #define DEFAULT_STA_PWD   "12345678"
    -
    - -

    Definition at line 69 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_STA_SSID

    - -
    -
    - - - - -
    #define DEFAULT_STA_SSID   "MARLIN_ESP"
    -
    - -

    Definition at line 68 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_WEBSERVER_PORT

    - -
    -
    - - - - -
    #define DEFAULT_WEBSERVER_PORT   80
    -
    - -

    Definition at line 79 of file wificonfig.h.

    - -
    -
    - -

    ◆ DEFAULT_WIFI_MODE

    - -
    -
    - - - - -
    #define DEFAULT_WIFI_MODE   ESP_WIFI_AP
    -
    - -

    Definition at line 73 of file wificonfig.h.

    - -
    -
    - -

    ◆ DHCP_MODE

    - -
    -
    - - - - -
    #define DHCP_MODE   0
    -
    - -

    Definition at line 59 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_CAPTIVE_PORTAL

    - -
    -
    - - - - -
    #define ENABLE_CAPTIVE_PORTAL
    -
    - -

    Definition at line 28 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_HTTP

    - -
    -
    - - - - -
    #define ENABLE_HTTP
    -
    - -

    Definition at line 26 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_MDNS

    - -
    -
    - - - - -
    #define ENABLE_MDNS
    -
    - -

    Definition at line 24 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_OTA

    - -
    -
    - - - - -
    #define ENABLE_OTA
    -
    - -

    Definition at line 25 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_SERIAL2SOCKET_IN

    - -
    -
    - - - - -
    #define ENABLE_SERIAL2SOCKET_IN
    -
    - -

    Definition at line 33 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_SERIAL2SOCKET_OUT

    - -
    -
    - - - - -
    #define ENABLE_SERIAL2SOCKET_OUT
    -
    - -

    Definition at line 31 of file wificonfig.h.

    - -
    -
    - -

    ◆ ENABLE_SSDP

    - -
    -
    - - - - -
    #define ENABLE_SSDP
    -
    - -

    Definition at line 27 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_APPLY_NOW

    - -
    -
    - - - - -
    #define ESP_APPLY_NOW   1
    -
    - -

    Definition at line 64 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_SAVE_ONLY

    - -
    -
    - - - - -
    #define ESP_SAVE_ONLY   0
    -
    - -

    Definition at line 63 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_WIFI_AP

    - -
    -
    - - - - -
    #define ESP_WIFI_AP   2
    -
    - -

    Definition at line 57 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_WIFI_MODE

    - -
    -
    - - - - -
    #define ESP_WIFI_MODE   "WIFI_MODE"
    -
    - -

    Definition at line 43 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_WIFI_OFF

    - -
    -
    - - - - -
    #define ESP_WIFI_OFF   0
    -
    - -

    Definition at line 55 of file wificonfig.h.

    - -
    -
    - -

    ◆ ESP_WIFI_STA

    - -
    -
    - - - - -
    #define ESP_WIFI_STA   1
    -
    - -

    Definition at line 56 of file wificonfig.h.

    - -
    -
    - -

    ◆ HIDDEN_PASSWORD

    - -
    -
    - - - - -
    #define HIDDEN_PASSWORD   "********"
    -
    - -

    Definition at line 81 of file wificonfig.h.

    - -
    -
    - -

    ◆ HOSTNAME_ENTRY

    - -
    -
    - - - - -
    #define HOSTNAME_ENTRY   "ESP_HOSTNAME"
    -
    - -

    Definition at line 37 of file wificonfig.h.

    - -
    -
    - -

    ◆ HTTP_ENABLE_ENTRY

    - -
    -
    - - - - -
    #define HTTP_ENABLE_ENTRY   "HTTP_ON"
    -
    - -

    Definition at line 48 of file wificonfig.h.

    - -
    -
    - -

    ◆ HTTP_PORT_ENTRY

    - -
    -
    - - - - -
    #define HTTP_PORT_ENTRY   "HTTP_PORT"
    -
    - -

    Definition at line 49 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_CHANNEL

    - -
    -
    - - - - -
    #define MAX_CHANNEL   14
    -
    - -

    Definition at line 97 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_HOSTNAME_LENGTH

    - -
    -
    - - - - -
    #define MAX_HOSTNAME_LENGTH   32
    -
    - -

    Definition at line 90 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_HTTP_PORT

    - -
    -
    - - - - -
    #define MAX_HTTP_PORT   65001
    -
    - -

    Definition at line 92 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_PASSWORD_LENGTH

    - -
    -
    - - - - -
    #define MAX_PASSWORD_LENGTH   64
    -
    - -

    Definition at line 86 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_SSID_LENGTH

    - -
    -
    - - - - -
    #define MAX_SSID_LENGTH   32
    -
    - -

    Definition at line 84 of file wificonfig.h.

    - -
    -
    - -

    ◆ MAX_TELNET_PORT

    - -
    -
    - - - - -
    #define MAX_TELNET_PORT   65001
    -
    - -

    Definition at line 94 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_CHANNEL

    - -
    -
    - - - - -
    #define MIN_CHANNEL   1
    -
    - -

    Definition at line 96 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_HOSTNAME_LENGTH

    - -
    -
    - - - - -
    #define MIN_HOSTNAME_LENGTH   1
    -
    - -

    Definition at line 91 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_HTTP_PORT

    - -
    -
    - - - - -
    #define MIN_HTTP_PORT   1
    -
    - -

    Definition at line 93 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_PASSWORD_LENGTH

    - -
    -
    - - - - -
    #define MIN_PASSWORD_LENGTH   8
    -
    - -

    Definition at line 89 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_SSID_LENGTH

    - -
    -
    - - - - -
    #define MIN_SSID_LENGTH   1
    -
    - -

    Definition at line 85 of file wificonfig.h.

    - -
    -
    - -

    ◆ MIN_TELNET_PORT

    - -
    -
    - - - - -
    #define MIN_TELNET_PORT   1
    -
    - -

    Definition at line 95 of file wificonfig.h.

    - -
    -
    - -

    ◆ NAMESPACE

    - -
    -
    - - - - -
    #define NAMESPACE   "MARLIN"
    -
    - -

    Definition at line 36 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_GW_ENTRY

    - -
    -
    - - - - -
    #define STA_GW_ENTRY   "STA_GW"
    -
    - -

    Definition at line 41 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_IP_ENTRY

    - -
    -
    - - - - -
    #define STA_IP_ENTRY   "STA_IP"
    -
    - -

    Definition at line 40 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_IP_MODE_ENTRY

    - -
    -
    - - - - -
    #define STA_IP_MODE_ENTRY   "STA_IP_MODE"
    -
    - -

    Definition at line 52 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_MK_ENTRY

    - -
    -
    - - - - -
    #define STA_MK_ENTRY   "STA_MK"
    -
    - -

    Definition at line 42 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_PWD_ENTRY

    - -
    -
    - - - - -
    #define STA_PWD_ENTRY   "STA_PWD"
    -
    - -

    Definition at line 39 of file wificonfig.h.

    - -
    -
    - -

    ◆ STA_SSID_ENTRY

    - -
    -
    - - - - -
    #define STA_SSID_ENTRY   "STA_SSID"
    -
    - -

    Definition at line 38 of file wificonfig.h.

    - -
    -
    - -

    ◆ STATIC_MODE

    - -
    -
    - - - - -
    #define STATIC_MODE   0
    -
    - -

    Definition at line 60 of file wificonfig.h.

    - -
    -
    - -

    ◆ TELNET_ENABLE_ENTRY

    - -
    -
    - - - - -
    #define TELNET_ENABLE_ENTRY   "TELNET_ON"
    -
    - -

    Definition at line 50 of file wificonfig.h.

    - -
    -
    - -

    ◆ TELNET_PORT_ENTRY

    - -
    -
    - - - - -
    #define TELNET_PORT_ENTRY   "TELNET_PORT"
    -
    - -

    Definition at line 51 of file wificonfig.h.

    - -
    -
    -

    Variable Documentation

    - -

    ◆ wifi_config

    - -
    -
    - - - - -
    WiFiConfig wifi_config
    -
    - -
    -
    -
    -
    - - - - diff --git a/docs/html/wificonfig_8h.js b/docs/html/wificonfig_8h.js deleted file mode 100644 index 2eff4e3..0000000 --- a/docs/html/wificonfig_8h.js +++ /dev/null @@ -1,64 +0,0 @@ -var wificonfig_8h = -[ - [ "WiFiConfig", "class_wi_fi_config.html", "class_wi_fi_config" ], - [ "_WIFI_CONFIG_H", "wificonfig_8h.html#ab8b348667ac28cf627ba1f017ab8ce37", null ], - [ "AP_CHANNEL_ENTRY", "wificonfig_8h.html#a0333044a6d9118e5b5a39d1b354788d7", null ], - [ "AP_IP_ENTRY", "wificonfig_8h.html#ad82b92046f9a56e21ad90268859267b4", null ], - [ "AP_PWD_ENTRY", "wificonfig_8h.html#ae2f332a9b16c4c790c8c6cf2adb9e0ff", null ], - [ "AP_SSID_ENTRY", "wificonfig_8h.html#a328808fc35a09a2fb313deac34b9d82c", null ], - [ "DEFAULT_AP_CHANNEL", "wificonfig_8h.html#aace78dce19c66ced8bd85f78f00437e9", null ], - [ "DEFAULT_AP_IP", "wificonfig_8h.html#ad431da9b257e7776871842b4fff1d185", null ], - [ "DEFAULT_AP_MK", "wificonfig_8h.html#a888f906683687b2123bb8ff06bace748", null ], - [ "DEFAULT_AP_PWD", "wificonfig_8h.html#a3190230a1d294a04d89da9120b7fe41a", null ], - [ "DEFAULT_AP_SSID", "wificonfig_8h.html#a6ec134dde0c23e4f187982ad0200bf23", null ], - [ "DEFAULT_HOSTNAME", "wificonfig_8h.html#acbd0b3def6b58577376d5c5edbc1f8d1", null ], - [ "DEFAULT_HTTP_STATE", "wificonfig_8h.html#aa10f0f25989a209626afbb29fc5de2c3", null ], - [ "DEFAULT_STA_GW", "wificonfig_8h.html#a387af2bdc881b471a583e6c4aaae6289", null ], - [ "DEFAULT_STA_IP", "wificonfig_8h.html#aed5bca15e135aa994162121f211f0dd2", null ], - [ "DEFAULT_STA_MK", "wificonfig_8h.html#ad1a4fe20941a0a89b6adb7c69074a563", null ], - [ "DEFAULT_STA_PWD", "wificonfig_8h.html#ae8425a4cc2a76d12c86cd4158dab3f9f", null ], - [ "DEFAULT_STA_SSID", "wificonfig_8h.html#aeded7ff5e2b188ad18834aabee0a9b62", null ], - [ "DEFAULT_WEBSERVER_PORT", "wificonfig_8h.html#a4a81954ed709f28696d5f8f8d469da18", null ], - [ "DEFAULT_WIFI_MODE", "wificonfig_8h.html#a8a1cc8339f64fc2d7d12cb6cdf77ea67", null ], - [ "DHCP_MODE", "wificonfig_8h.html#aff327f17465177da582d6244e74e8528", null ], - [ "ENABLE_CAPTIVE_PORTAL", "wificonfig_8h.html#aa926938be2f167d492c5d6db9a278a76", null ], - [ "ENABLE_HTTP", "wificonfig_8h.html#a9352afc0fc80fea23a30ccd4fda2d98e", null ], - [ "ENABLE_MDNS", "wificonfig_8h.html#a463ce90dbb1a03304941593d0bfb83d4", null ], - [ "ENABLE_OTA", "wificonfig_8h.html#a069cace8124fbff2bca1b7f7986d173e", null ], - [ "ENABLE_SERIAL2SOCKET_IN", "wificonfig_8h.html#a2025c618377493b70e059f66dfe24f53", null ], - [ "ENABLE_SERIAL2SOCKET_OUT", "wificonfig_8h.html#a8bed93294be273410481362296a4a69d", null ], - [ "ENABLE_SSDP", "wificonfig_8h.html#a1855f51f6333f7731bfe585adbbf8cdf", null ], - [ "ESP_APPLY_NOW", "wificonfig_8h.html#a4ab0bcad4a107c4701c29f800d2c3bb8", null ], - [ "ESP_SAVE_ONLY", "wificonfig_8h.html#a1f70d78cdf58380922d6cc4453d9eea9", null ], - [ "ESP_WIFI_AP", "wificonfig_8h.html#a837bee3cd90959fa9c928100ef246389", null ], - [ "ESP_WIFI_MODE", "wificonfig_8h.html#ac21ce1aaba6806cfc837f07c3850cd47", null ], - [ "ESP_WIFI_OFF", "wificonfig_8h.html#a39fc4abada827a1f52b42a95f47b4e2c", null ], - [ "ESP_WIFI_STA", "wificonfig_8h.html#ade524ef86e44ae63840a77397e987132", null ], - [ "HIDDEN_PASSWORD", "wificonfig_8h.html#af5ca3daab5ff5c1b7a01e0b5ca75d745", null ], - [ "HOSTNAME_ENTRY", "wificonfig_8h.html#a431d9f136ad2d23ec637102eae795a34", null ], - [ "HTTP_ENABLE_ENTRY", "wificonfig_8h.html#a6cbf45cc1958b46f7583ba446e910c05", null ], - [ "HTTP_PORT_ENTRY", "wificonfig_8h.html#a0e25ab4d77c42e5b94e113ac70fa0b7b", null ], - [ "MAX_CHANNEL", "wificonfig_8h.html#a53550b02192e90e64ea2ecce606fc361", null ], - [ "MAX_HOSTNAME_LENGTH", "wificonfig_8h.html#ad5570a4ab8c9d790b0e8f7c15378d582", null ], - [ "MAX_HTTP_PORT", "wificonfig_8h.html#a43437215bdccd0e374c982e18ea542bc", null ], - [ "MAX_PASSWORD_LENGTH", "wificonfig_8h.html#a7f264fafe78080f8ea68715854b9bc24", null ], - [ "MAX_SSID_LENGTH", "wificonfig_8h.html#a1a3e371dfda6b729e6c7a890cf94f6ca", null ], - [ "MAX_TELNET_PORT", "wificonfig_8h.html#aa85ed0fa1387a2da58dc1837a21ab1d4", null ], - [ "MIN_CHANNEL", "wificonfig_8h.html#aa113b8d2f73b3bfbeeda47091a1bf203", null ], - [ "MIN_HOSTNAME_LENGTH", "wificonfig_8h.html#adb05470ece4dd649965e1a2255a5df1b", null ], - [ "MIN_HTTP_PORT", "wificonfig_8h.html#af9616ef1305aff821ce7443db3e22f2d", null ], - [ "MIN_PASSWORD_LENGTH", "wificonfig_8h.html#a696683541069982ec245fb7bf21720e8", null ], - [ "MIN_SSID_LENGTH", "wificonfig_8h.html#ada2533c8a1dcfad1d53e138a3eb163be", null ], - [ "MIN_TELNET_PORT", "wificonfig_8h.html#a35d5c2914ffd37d9d7d291e6385bc0cc", null ], - [ "NAMESPACE", "wificonfig_8h.html#afa7779fe56b160955b535cd6a8aaf8f4", null ], - [ "STA_GW_ENTRY", "wificonfig_8h.html#a6c7d5dfc16c16ac5a4859a7936865b94", null ], - [ "STA_IP_ENTRY", "wificonfig_8h.html#addbe6db6729643c92834d206336a5158", null ], - [ "STA_IP_MODE_ENTRY", "wificonfig_8h.html#ae5a8d9779d8565f582d7ae71c025af85", null ], - [ "STA_MK_ENTRY", "wificonfig_8h.html#a3b37d58c5eac7eb13a5caad6a5d215e4", null ], - [ "STA_PWD_ENTRY", "wificonfig_8h.html#a7827bce4c2ae2abd7d226c5b6b65455a", null ], - [ "STA_SSID_ENTRY", "wificonfig_8h.html#a2edda7833f2fd41413444a8464bcc6d0", null ], - [ "STATIC_MODE", "wificonfig_8h.html#a0c7b7c02a0a08deeca4534279ffe43b5", null ], - [ "TELNET_ENABLE_ENTRY", "wificonfig_8h.html#ab941d43500accae48d4317c960fde3a0", null ], - [ "TELNET_PORT_ENTRY", "wificonfig_8h.html#a701fb00a86117a4d6d2c34d060fe1676", null ], - [ "wifi_config", "wificonfig_8h.html#a17f30097832457731475d17a590b4654", null ] -]; \ No newline at end of file diff --git a/docs/html/wificonfig_8h__dep__incl.map b/docs/html/wificonfig_8h__dep__incl.map deleted file mode 100644 index 3b2795f..0000000 --- a/docs/html/wificonfig_8h__dep__incl.map +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/wificonfig_8h__dep__incl.md5 b/docs/html/wificonfig_8h__dep__incl.md5 deleted file mode 100644 index d5a9532..0000000 --- a/docs/html/wificonfig_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -2ee558fd3768a87ef2ea1fc3a597610a \ No newline at end of file diff --git a/docs/html/wificonfig_8h__dep__incl.png b/docs/html/wificonfig_8h__dep__incl.png deleted file mode 100644 index 943dd73..0000000 Binary files a/docs/html/wificonfig_8h__dep__incl.png and /dev/null differ diff --git a/docs/html/wificonfig_8h__incl.map b/docs/html/wificonfig_8h__incl.map deleted file mode 100644 index 46bcbcf..0000000 --- a/docs/html/wificonfig_8h__incl.map +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/html/wificonfig_8h__incl.md5 b/docs/html/wificonfig_8h__incl.md5 deleted file mode 100644 index 2d15e1a..0000000 --- a/docs/html/wificonfig_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -3224107255e652790d9cbee1aaf88fe7 \ No newline at end of file diff --git a/docs/html/wificonfig_8h__incl.png b/docs/html/wificonfig_8h__incl.png deleted file mode 100644 index 4807631..0000000 Binary files a/docs/html/wificonfig_8h__incl.png and /dev/null differ diff --git a/docs/html/wificonfig_8h_source.html b/docs/html/wificonfig_8h_source.html deleted file mode 100644 index 5d129f2..0000000 --- a/docs/html/wificonfig_8h_source.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - -ESP3D Lib: src/wificonfig.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wificonfig.h
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  wificonfig.h - wifi functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 //Services that need to be used
    -
    22 #include "esplibconfig.h"
    -
    23 
    -
    24 #define ENABLE_MDNS
    -
    25 #define ENABLE_OTA
    -
    26 #define ENABLE_HTTP
    -
    27 #define ENABLE_SSDP
    -
    28 #define ENABLE_CAPTIVE_PORTAL
    -
    29 //Authentication flag is now in Configuration_adv.h
    -
    30 //#define ENABLE_AUTHENTICATION
    -
    31 #define ENABLE_SERIAL2SOCKET_OUT
    -
    32 
    -
    33 #define ENABLE_SERIAL2SOCKET_IN
    -
    34 
    -
    35 //Preferences entries
    -
    36 #define NAMESPACE "MARLIN"
    -
    37 #define HOSTNAME_ENTRY "ESP_HOSTNAME"
    -
    38 #define STA_SSID_ENTRY "STA_SSID"
    -
    39 #define STA_PWD_ENTRY "STA_PWD"
    -
    40 #define STA_IP_ENTRY "STA_IP"
    -
    41 #define STA_GW_ENTRY "STA_GW"
    -
    42 #define STA_MK_ENTRY "STA_MK"
    -
    43 #define ESP_WIFI_MODE "WIFI_MODE"
    -
    44 #define AP_SSID_ENTRY "AP_SSID"
    -
    45 #define AP_PWD_ENTRY "AP_PWD"
    -
    46 #define AP_IP_ENTRY "AP_IP"
    -
    47 #define AP_CHANNEL_ENTRY "AP_CHANNEL"
    -
    48 #define HTTP_ENABLE_ENTRY "HTTP_ON"
    -
    49 #define HTTP_PORT_ENTRY "HTTP_PORT"
    -
    50 #define TELNET_ENABLE_ENTRY "TELNET_ON"
    -
    51 #define TELNET_PORT_ENTRY "TELNET_PORT"
    -
    52 #define STA_IP_MODE_ENTRY "STA_IP_MODE"
    -
    53 
    -
    54 //Wifi Mode
    -
    55 #define ESP_WIFI_OFF 0
    -
    56 #define ESP_WIFI_STA 1
    -
    57 #define ESP_WIFI_AP 2
    -
    58 
    -
    59 #define DHCP_MODE 0
    -
    60 #define STATIC_MODE 0
    -
    61 
    -
    62 //Switch
    -
    63 #define ESP_SAVE_ONLY 0
    -
    64 #define ESP_APPLY_NOW 1
    -
    65 
    -
    66 //defaults values
    -
    67 #define DEFAULT_HOSTNAME "marlinesp"
    -
    68 #define DEFAULT_STA_SSID "MARLIN_ESP"
    -
    69 #define DEFAULT_STA_PWD "12345678"
    -
    70 #define DEFAULT_STA_IP "0.0.0.0"
    -
    71 #define DEFAULT_STA_GW "0.0.0.0"
    -
    72 #define DEFAULT_STA_MK "0.0.0.0"
    -
    73 #define DEFAULT_WIFI_MODE ESP_WIFI_AP
    -
    74 #define DEFAULT_AP_SSID "MARLIN_ESP"
    -
    75 #define DEFAULT_AP_PWD "12345678"
    -
    76 #define DEFAULT_AP_IP "192.168.0.1"
    -
    77 #define DEFAULT_AP_MK "255.255.255.0"
    -
    78 #define DEFAULT_AP_CHANNEL 1
    -
    79 #define DEFAULT_WEBSERVER_PORT 80
    -
    80 #define DEFAULT_HTTP_STATE 1
    -
    81 #define HIDDEN_PASSWORD "********"
    -
    82 
    -
    83 //boundaries
    -
    84 #define MAX_SSID_LENGTH 32
    -
    85 #define MIN_SSID_LENGTH 1
    -
    86 #define MAX_PASSWORD_LENGTH 64
    -
    87 //min size of password is 0 or upper than 8 char
    -
    88 //so let set min is 8
    -
    89 #define MIN_PASSWORD_LENGTH 8
    -
    90 #define MAX_HOSTNAME_LENGTH 32
    -
    91 #define MIN_HOSTNAME_LENGTH 1
    -
    92 #define MAX_HTTP_PORT 65001
    -
    93 #define MIN_HTTP_PORT 1
    -
    94 #define MAX_TELNET_PORT 65001
    -
    95 #define MIN_TELNET_PORT 1
    -
    96 #define MIN_CHANNEL 1
    -
    97 #define MAX_CHANNEL 14
    -
    98 
    -
    99 
    -
    100 #ifndef _WIFI_CONFIG_H
    -
    101 #define _WIFI_CONFIG_H
    -
    102 
    -
    103 #include <WiFi.h>
    -
    104 
    -
    105 class WiFiConfig {
    -
    106 public:
    -
    107  WiFiConfig();
    -
    108  ~WiFiConfig();
    -
    109  static void wait(uint32_t milliseconds);
    -
    110  static bool isValidIP(const char * string);
    -
    111  static bool isPasswordValid (const char * password);
    -
    112  static bool isSSIDValid (const char * ssid);
    -
    113  static bool isHostnameValid (const char * hostname);
    -
    114  static uint32_t IP_int_from_string(String & s);
    -
    115  static String IP_string_from_int(uint32_t ip_int);
    -
    116 
    -
    117  static bool StartAP();
    -
    118  static bool StartSTA();
    -
    119  static void StopWiFi();
    -
    120  static int32_t getSignal (int32_t RSSI);
    -
    121  static void begin();
    -
    122  static void end();
    -
    123  static void handle();
    -
    124  static void restart_ESP();
    -
    125 
    -
    126  private :
    -
    127  static bool ConnectSTA2AP();
    -
    128  static void WiFiEvent(WiFiEvent_t event);
    -
    129  static bool restart_ESP_module;
    -
    130 };
    -
    131 
    -
    132 extern WiFiConfig wifi_config;
    -
    133 
    -
    134 #endif
    -
    -
    -
    WiFiConfig wifi_config
    -
    static void begin()
    -
    static void StopWiFi()
    - -
    static bool isPasswordValid(const char *password)
    -
    static void end()
    -
    static bool StartAP()
    -
    static bool isHostnameValid(const char *hostname)
    -
    static void handle()
    -
    static int32_t getSignal(int32_t RSSI)
    -
    static bool isValidIP(const char *string)
    - - - -
    static bool StartSTA()
    -
    static String IP_string_from_int(uint32_t ip_int)
    -
    static bool isSSIDValid(const char *ssid)
    -
    static void restart_ESP()
    -
    static void wait(uint32_t milliseconds)
    -
    static uint32_t IP_int_from_string(String &s)
    - - - - diff --git a/docs/html/wifiservices_8cpp.html b/docs/html/wifiservices_8cpp.html deleted file mode 100644 index b060abd..0000000 --- a/docs/html/wifiservices_8cpp.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - -ESP3D Lib: src/wifiservices.cpp File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wifiservices.cpp File Reference
    -
    - -
    - - - - diff --git a/docs/html/wifiservices_8cpp_source.html b/docs/html/wifiservices_8cpp_source.html deleted file mode 100644 index ce4e044..0000000 --- a/docs/html/wifiservices_8cpp_source.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - -ESP3D Lib: src/wifiservices.cpp Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wifiservices.cpp
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  wifiservices.cpp - wifi services functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 #ifdef ARDUINO_ARCH_ESP32
    -
    22 
    -
    23 #include "esplibconfig.h"
    -
    24 
    -
    25 #if ENABLED(ESP3D_WIFISUPPORT)
    -
    26 
    -
    27 #include <WiFi.h>
    -
    28 #include <FS.h>
    -
    29 #include <SPIFFS.h>
    -
    30 #include <Preferences.h>
    -
    31 #include "wificonfig.h"
    -
    32 #include "wifiservices.h"
    -
    33 #ifdef ENABLE_MDNS
    -
    34 #include <ESPmDNS.h>
    -
    35 #endif
    -
    36 #ifdef ENABLE_OTA
    -
    37 #include <ArduinoOTA.h>
    -
    38 #endif
    -
    39 #ifdef ENABLE_HTTP
    -
    40 #include "web_server.h"
    -
    41 #endif
    -
    42 
    - -
    44 
    - -
    46 }
    - -
    48  end();
    -
    49 }
    -
    50 
    -
    51 bool WiFiServices::begin(){
    -
    52  bool no_error = true;
    -
    53  //Sanity check
    -
    54  if(WiFi.getMode() == WIFI_OFF) return false;
    -
    55  String h;
    -
    56  Preferences prefs;
    -
    57  //Get hostname
    -
    58  String defV = DEFAULT_HOSTNAME;
    -
    59  prefs.begin(NAMESPACE, true);
    -
    60  h = prefs.getString(HOSTNAME_ENTRY, defV);
    -
    61  prefs.end();
    -
    62  //Start SPIFFS
    -
    63  SPIFFS.begin(true);
    -
    64 
    -
    65 #ifdef ENABLE_OTA
    -
    66  ArduinoOTA
    -
    67  .onStart([]() {
    -
    68  String type;
    -
    69  if (ArduinoOTA.getCommand() == U_FLASH)
    -
    70  type = "sketch";
    -
    71  else {// U_SPIFFS
    -
    72  // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
    -
    73  type = "filesystem";
    -
    74  SPIFFS.end();
    -
    75  }
    -
    76  MYSERIAL0.printf("OTA:Start OTA updating %s]\r\n", type.c_str());
    -
    77  })
    -
    78  .onEnd([]() {
    -
    79  MYSERIAL0.println("OTA:End");
    -
    80 
    -
    81  })
    -
    82  .onProgress([](unsigned int progress, unsigned int total) {
    -
    83  MYSERIAL0.printf("OTA:OTA Progress: %u%%]\r\n", (progress / (total / 100)));
    -
    84  })
    -
    85  .onError([](ota_error_t error) {
    -
    86  MYSERIAL0.printf("OTA: Error(%u)\r\n", error);
    -
    87  if (error == OTA_AUTH_ERROR) MYSERIAL0.println("OTA:Auth Failed]");
    -
    88  else if (error == OTA_BEGIN_ERROR) MYSERIAL0.println("OTA:Begin Failed");
    -
    89  else if (error == OTA_CONNECT_ERROR) MYSERIAL0.println("OTA:Connect Failed");
    -
    90  else if (error == OTA_RECEIVE_ERROR) MYSERIAL0.println("OTA:Receive Failed");
    -
    91  else if (error == OTA_END_ERROR) MYSERIAL0.println("OTA:End Failed]");
    -
    92  });
    -
    93  ArduinoOTA.begin();
    -
    94 #endif
    -
    95 #ifdef ENABLE_MDNS
    -
    96  //no need in AP mode
    -
    97  if(WiFi.getMode() == WIFI_STA){
    -
    98  //start mDns
    -
    99  if (!MDNS.begin(h.c_str())) {
    -
    100  MYSERIAL0.println("Cannot start mDNS");
    -
    101  no_error = false;
    -
    102  } else {
    -
    103  MYSERIAL0.printf("Start mDNS with hostname:%s\r\n",h.c_str());
    -
    104  }
    -
    105  }
    -
    106 #endif
    -
    107 #ifdef ENABLE_HTTP
    -
    108  web_server.begin();
    -
    109 #endif
    -
    110  return no_error;
    -
    111 }
    -
    112 void WiFiServices::end(){
    -
    113 #ifdef ENABLE_HTTP
    -
    114  web_server.end();
    -
    115 #endif
    -
    116  //stop OTA
    -
    117 #ifdef ENABLE_OTA
    -
    118  ArduinoOTA.end();
    -
    119 #endif
    -
    120  //Stop SPIFFS
    -
    121  SPIFFS.end();
    -
    122 
    -
    123 #ifdef ENABLE_MDNS
    -
    124  //Stop mDNS
    -
    125  //MDNS.end();
    -
    126 #endif
    -
    127 }
    -
    128 
    -
    129 void WiFiServices::handle(){
    -
    130 #ifdef ENABLE_OTA
    -
    131  ArduinoOTA.handle();
    -
    132 #endif
    -
    133 #ifdef ENABLE_HTTP
    -
    134  web_server.handle();
    -
    135 #endif
    -
    136 }
    -
    137 
    -
    138 #endif // ENABLE_WIFI
    -
    139 
    -
    140 #endif // ARDUINO_ARCH_ESP32
    -
    -
    -
    static void handle()
    - -
    static void end()
    -
    bool begin()
    -
    static bool begin()
    -
    void end()
    - - -
    static void handle()
    -
    #define MYSERIAL0
    Definition: esplibconfig.h:29
    - -
    WiFiServices wifi_services
    - -
    #define NAMESPACE
    Definition: wificonfig.h:36
    - -
    #define DEFAULT_HOSTNAME
    Definition: wificonfig.h:67
    - -
    #define HOSTNAME_ENTRY
    Definition: wificonfig.h:37
    -
    Web_Server web_server
    - - - - diff --git a/docs/html/wifiservices_8h.html b/docs/html/wifiservices_8h.html deleted file mode 100644 index 5df9ee3..0000000 --- a/docs/html/wifiservices_8h.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -ESP3D Lib: src/wifiservices.h File Reference - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    - -
    -
    wifiservices.h File Reference
    -
    -
    - -

    Go to the source code of this file.

    - - - - -

    -Classes

    class  WiFiServices
     
    - - - -

    -Variables

    WiFiServices wifi_services
     
    -

    Variable Documentation

    - -

    ◆ wifi_services

    - -
    -
    - - - - -
    WiFiServices wifi_services
    -
    - -
    -
    -
    -
    - - - - diff --git a/docs/html/wifiservices_8h.js b/docs/html/wifiservices_8h.js deleted file mode 100644 index 372fa2b..0000000 --- a/docs/html/wifiservices_8h.js +++ /dev/null @@ -1,5 +0,0 @@ -var wifiservices_8h = -[ - [ "WiFiServices", "class_wi_fi_services.html", "class_wi_fi_services" ], - [ "wifi_services", "wifiservices_8h.html#a5676e160d5e6622a97db6b98a98a3807", null ] -]; \ No newline at end of file diff --git a/docs/html/wifiservices_8h_source.html b/docs/html/wifiservices_8h_source.html deleted file mode 100644 index d2a58c3..0000000 --- a/docs/html/wifiservices_8h_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - -ESP3D Lib: src/wifiservices.h Source File - - - - - - - - - - - - - -
    -
    - - - - - - - -
    -
    ESP3D Lib -  1.0 -
    -
    3D Printer WiFi Library
    -
    -
    - - - - - - - -
    -
    - -
    -
    -
    - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    wifiservices.h
    -
    -
    -Go to the documentation of this file.
    1 /*
    -
    2  wifiservices.h - wifi services functions class
    -
    3 
    -
    4  Copyright (c) 2014 Luc Lebosse. All rights reserved.
    -
    5 
    -
    6  This library is free software; you can redistribute it and/or
    -
    7  modify it under the terms of the GNU Lesser General Public
    -
    8  License as published by the Free Software Foundation; either
    -
    9  version 2.1 of the License, or (at your option) any later version.
    -
    10 
    -
    11  This library is distributed in the hope that it will be useful,
    -
    12  but WITHOUT ANY WARRANTY; without even the implied warranty of
    -
    13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    -
    14  Lesser General Public License for more details.
    -
    15 
    -
    16  You should have received a copy of the GNU Lesser General Public
    -
    17  License along with this library; if not, write to the Free Software
    -
    18  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    -
    19 */
    -
    20 
    -
    21 
    -
    22 
    -
    23 #ifndef _WIFI_SERVICES_H
    -
    24 #define _WIFI_SERVICES_H
    -
    25 
    -
    26 
    -
    27 class WiFiServices {
    -
    28  public:
    -
    29  WiFiServices();
    -
    30  ~WiFiServices();
    -
    31  static bool begin();
    -
    32  static void end();
    -
    33  static void handle();
    -
    34 };
    -
    35 
    - -
    37 
    -
    38 #endif
    -
    39 
    -
    -
    -
    static void end()
    -
    static bool begin()
    - -
    static void handle()
    -
    WiFiServices wifi_services
    - - - - - - diff --git a/embedded/.gitignore b/embedded/.gitignore new file mode 100644 index 0000000..0602c47 --- /dev/null +++ b/embedded/.gitignore @@ -0,0 +1,5 @@ + +node_modules +.vscode +dist/*.map +dist/*.tmp diff --git a/embedded/Notes.txt b/embedded/Notes.txt new file mode 100644 index 0000000..4f16052 --- /dev/null +++ b/embedded/Notes.txt @@ -0,0 +1,7 @@ +* Fix dev websocket server cannot work under Linux +> sudo apt-get install libcap2-bin +> sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\`` + +* Fix ‘ and “ need space to be displayed under Linux +> setxkbmap -layout us + diff --git a/embedded/assets/favicon.ico b/embedded/assets/favicon.ico new file mode 100644 index 0000000..6794fd9 Binary files /dev/null and b/embedded/assets/favicon.ico differ diff --git a/embedded/assets/footer.txt b/embedded/assets/footer.txt new file mode 100644 index 0000000..5548a77 --- /dev/null +++ b/embedded/assets/footer.txt @@ -0,0 +1 @@ +#endif //__favicon_h \ No newline at end of file diff --git a/embedded/assets/header.txt b/embedded/assets/header.txt new file mode 100644 index 0000000..fde9da0 --- /dev/null +++ b/embedded/assets/header.txt @@ -0,0 +1,22 @@ +/* + favicon.h - ESP3D data file + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef __favicon_h +#define __favicon_h diff --git a/embedded/build.bat b/embedded/build.bat deleted file mode 100644 index 8981420..0000000 --- a/embedded/build.bat +++ /dev/null @@ -1,16 +0,0 @@ -cd %~dp0 -cmd.exe /c npm install -cmd.exe /c npm audit fix -cmd.exe /c npm audit -cmd.exe /c gulp package -cmd.exe /c bin2c -o embedded.h -m tool.html.gz -cat header.txt > out.h -cat embedded.h >> out.h -cat footer.txt >> out.h -sed -i "s/tool_html_gz_size/PAGE_NOFILES_SIZE/g" ./out.h -sed -i "s/const unsigned char tool_html_gz/const char PAGE_NOFILES/g" ./out.h -sed -i "s/] = {/] PROGMEM = {/g" ./out.h -cat out.h > ../src/nofile.h -rm -f out.h -pause - diff --git a/embedded/config/buildassets.js b/embedded/config/buildassets.js new file mode 100644 index 0000000..9e26d47 --- /dev/null +++ b/embedded/config/buildassets.js @@ -0,0 +1,95 @@ +let path = require("path"); +const fs = require("fs"); +const { createReadStream, createWriteStream } = require("fs"); +const { createGzip } = require("zlib"); +const chalk = require("chalk"); + +let distPath = path.normalize(__dirname + "/../dist/"); +let srcPath = path.normalize(__dirname + "/../assets/"); +let headerPath = path.normalize( + __dirname + "/../../src/modules/http/favicon.h" +); + + + +const convertToC = (filepath) => { +console.log(chalk.yellow("Converting bin to text file")); +//Cleaning files +if (fs.existsSync(distPath + "out.tmp")) fs.rmSync(distPath + "out.tmp"); +if (fs.existsSync(distPath + "favicon.h")) fs.rmSync(distPath + "favicon.h"); + +const data = new Uint8Array( + fs.readFileSync(filepath, { flag: "r" }) +); +console.log("data size is ", data.length); +let out = "#define favicon_size " + data.length + "\n"; +out += "const unsigned char favicon[" + data.length + "] PROGMEM = {\n "; +let nb = 0; +data.forEach((byte, index) => { + out += " 0x" + (byte.toString(16).length == 1 ? "0" : "") + byte.toString(16); + if (index < data.length - 1) out += ","; + if (nb == 15) { + out += "\n "; + nb = 0; + } else { + nb++; + } +}); + +out += "\n};\n"; +fs.writeFileSync(distPath + "out.tmp", out); + +//Check conversion +if (fs.existsSync(distPath + "out.tmp")) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Conversion failed")); + return; +} + +//Format header file +console.log(chalk.yellow("Building header")); +fs.writeFileSync( + distPath + "favicon.h", + fs.readFileSync(srcPath + "header.txt") +); +let bin2cfile = fs.readFileSync(distPath + "out.tmp").toString(); +fs.appendFileSync(distPath + "favicon.h", bin2cfile); +fs.appendFileSync( + distPath + "favicon.h", + fs.readFileSync(srcPath + "footer.txt") +); + +//Check format result +if (fs.existsSync(distPath + "favicon.h")) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Conversion failed")); + return; +} + +//Move file to src +console.log(chalk.yellow("Overwriting header in sources")); +fs.writeFileSync(headerPath, fs.readFileSync(distPath + "favicon.h")); +if (fs.existsSync(headerPath)) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Overwriting failed")); + return; +} + +} + + +// Create a gzip function for reusable purpose +const compressFile = (filePath, targetPath) => { + const stream = createReadStream(filePath); + stream + .pipe(createGzip(targetPath)) + .pipe(createWriteStream(targetPath)) + .on("finish", () =>{console.log(`Successfully compressed at ${targetPath}`); + convertToC (targetPath)} + ); +}; + +compressFile(srcPath + "favicon.ico", distPath + "favicon.ico.gz"); diff --git a/embedded/config/buildheader.js b/embedded/config/buildheader.js new file mode 100644 index 0000000..5f2e417 --- /dev/null +++ b/embedded/config/buildheader.js @@ -0,0 +1,75 @@ +let path = require("path"); +const fs = require("fs"); +const child_process = require("child_process"); +const chalk = require("chalk"); + +let distPath = path.normalize(__dirname + "/../dist/"); +let srcPath = path.normalize(__dirname + "/../src/"); +let headerPath = path.normalize( + __dirname + "/../../src/modules/http/embedded.h" +); + +console.log(chalk.yellow("Converting bin to text file")); +//Cleaning files +if (fs.existsSync(distPath + "out.tmp")) fs.rmSync(distPath + "out.tmp"); +if (fs.existsSync(distPath + "embedded.h")) fs.rmSync(distPath + "embedded.h"); + +const data = new Uint8Array( + fs.readFileSync(distPath + "index.html.gz", { flag: "r" }) +); +console.log("data size is ", data.length); +let out = "#define tool_html_gz_size " + data.length + "\n"; +out += "const unsigned char tool_html_gz[" + data.length + "] PROGMEM = {\n "; +let nb = 0; +data.forEach((byte, index) => { + out += " 0x" + (byte.toString(16).length == 1 ? "0" : "") + byte.toString(16); + if (index < data.length - 1) out += ","; + if (nb == 15) { + out += "\n "; + nb = 0; + } else { + nb++; + } +}); + +out += "\n};\n"; +fs.writeFileSync(distPath + "out.tmp", out); + +//Check conversion +if (fs.existsSync(distPath + "out.tmp")) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Conversion failed")); + return; +} + +//Format header file +console.log(chalk.yellow("Building header")); +fs.writeFileSync( + distPath + "embedded.h", + fs.readFileSync(srcPath + "header.txt") +); +let bin2cfile = fs.readFileSync(distPath + "out.tmp").toString(); +fs.appendFileSync(distPath + "embedded.h", bin2cfile); +fs.appendFileSync( + distPath + "embedded.h", + fs.readFileSync(srcPath + "footer.txt") +); + +//Check format result +if (fs.existsSync(distPath + "embedded.h")) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Conversion failed")); + return; +} + +//Move file to src +console.log(chalk.yellow("Overwriting header in sources")); +fs.writeFileSync(headerPath, fs.readFileSync(distPath + "embedded.h")); +if (fs.existsSync(headerPath)) { + console.log(chalk.green("[ok]")); +} else { + console.log(chalk.red("[error]Overwriting failed")); + return; +} diff --git a/embedded/config/pack_favicon.js b/embedded/config/pack_favicon.js new file mode 100644 index 0000000..ac56755 --- /dev/null +++ b/embedded/config/pack_favicon.js @@ -0,0 +1,15 @@ +const path = require("path"); +const { createReadStream, createWriteStream } = require("fs"); +const { createGzip } = require("zlib"); +const faviconPath = path.normalize(__dirname + "/../assets/favicon.ico"); + +// Create a gzip function for reusable purpose +const compressFile = (filePath) => { + const stream = createReadStream(filePath); + stream + .pipe(createGzip()) + .pipe(createWriteStream(`${filePath}.gz`)) + .on("finish", () =>console.log(`Successfully compressed the file at ${filePath}`) + ); +}; +compressFile(faviconPath); \ No newline at end of file diff --git a/embedded/config/server.js b/embedded/config/server.js new file mode 100644 index 0000000..6c91808 --- /dev/null +++ b/embedded/config/server.js @@ -0,0 +1,673 @@ +const express = require("express"); +const chalk = require("chalk"); +let path = require("path"); +const fs = require("fs"); +const port = 8080; +/* + * Web Server for development + * Web Socket server for development + */ +const wscolor = chalk.cyan; +const expresscolor = chalk.green; +const commandcolor = chalk.white; +const WebSocket = require("ws"); +let currentID = 0; +const app = express(); +const fileUpload = require("express-fileupload"); +let serverpath = path.normalize(__dirname + "/../server/public/"); +let sdpath = path.normalize(__dirname + "/../server/sd/"); + +let WebSocketServer = require("ws").Server, + wss = new WebSocketServer({ port: 81,handleProtocols:function(protocol) {console.log( "protocol received from client " + protocol ); + return "webui-v3"; + return null;}}); +app.use(fileUpload({ preserveExtension: true, debug: false })); +app.listen(port, () => + console.log(expresscolor(`[express] Listening on port ${port}!`)) +); + +//app.use(express.urlencoded({ extended: false })); + +function SendBinary(text) { + const array = new Uint8Array(text.length); + for (let i = 0; i < array.length; ++i) { + array[i] = text.charCodeAt(i); + } + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(array); + } + }); +} + +app.post("/login", function (req, res) { + res.send(""); + return; +}); + +app.get("/config", function (req, res) { + res.send( + "chip id: 56398\nCPU Freq: 240 Mhz
    " + + "CPU Temp: 58.3 C
    " + + "free mem: 212.36 KB
    " + + "SDK: v3.2.3-14-gd3e562907
    " + + "flash size: 4.00 MB
    " + + "size for update: 1.87 MB
    " + + "FS type: LittleFS
    " + + "FS usage: 104.00 KB/192.00 KB
    " + + "baud: 115200
    " + + "sleep mode: none
    " + + "wifi: ON
    " + + "hostname: esp3d
    " + + "HTTP port: 80
    " + + "Telnet port: 23
    " + + "WebDav port: 8383
    " + + "sta: ON
    " + + "mac: 80:7D:3A:C4:4E:DC
    " + + "SSID: WIFI_OFFICE_A2G
    " + + "signal: 100 %
    " + + "phy mode: 11n
    " + + "channel: 11
    " + + "ip mode: dhcp
    " + + "ip: 192.168.1.61
    " + + "gw: 192.168.1.1
    " + + "msk: 255.255.255.0
    " + + "DNS: 192.168.1.1
    " + + "ap: OFF
    " + + "mac: 80:7D:3A:C4:4E:DD
    " + + "serial: ON
    " + + "notification: OFF
    " + + "Target Fw: repetier
    " + + "FW ver: 3.0.0.a91
    " + + "FW arch: ESP32 " + ); + return; +}); + +app.get("/command", function (req, res) { + console.log(commandcolor(`[server]/command params: ${req.query.cmd}`)); + let url = req.query.cmd; + if (url.startsWith("[ESP800]json")) { + res.json( + { + cmd: "800", + status: "ok", + data:{ + FWVersion: "2.0.9.3+-3.0.0.a111", + FWTarget: 30, + SDConnection: "none", + Authentication: "Disabled", + WebCommunication: "Synchronous", + WebSocketIP: "localhost", + WebSocketPort: "81", + Hostname: "esp3d", + WiFiMode: "STA", + WebUpdate: "Enabled", + FlashFileSystem: "LittleFs", + HostPath: "/", + Time: "none", + } + } + ); + return; + } + if (url.indexOf("ESP111") != -1) { + res.send("192.168.1.111"); + return; + } + if (url.indexOf("ESP420") != -1) { + res.json({ + Status: [ + { id: "chip id", value: "38078" }, + { id: "CPU Freq", value: "240 Mhz" }, + { id: "CPU Temp", value: "50.6 C" }, + { id: "free mem", value: "217.50 KB" }, + { id: "SDK", value: "v3.3.1-61-g367c3c09c" }, + { id: "flash size", value: "4.00 MB" }, + { id: "size for update", value: "1.87 MB" }, + { id: "FS type", value: "SPIFFS" }, + { id: "FS usage", value: "39.95 KB/169.38 KB" }, + { id: "baud", value: "115200" }, + { id: "sleep mode", value: "none" }, + { id: "wifi", value: "ON" }, + { id: "hostname", value: "esp3d" }, + { id: "HTTP port", value: "80" }, + { id: "Telnet port", value: "23" }, + { id: "Ftp ports", value: "21, 20, 55600" }, + { id: "sta", value: "ON" }, + { id: "mac", value: "30:AE:A4:21:BE:94" }, + { id: "SSID", value: "WIFI_OFFICE_B2G" }, + { id: "signal", value: "100 %" }, + { id: "phy mode", value: "11n" }, + { id: "channel", value: "2" }, + { id: "ip mode", value: "dhcp" }, + { id: "ip", value: "192.168.1.43" }, + { id: "gw", value: "192.168.1.1" }, + { id: "msk", value: "255.255.255.0" }, + { id: "DNS", value: "192.168.1.1" }, + { id: "ap", value: "OFF" }, + { id: "mac", value: "30:AE:A4:21:BE:95" }, + { id: "serial", value: "ON" }, + { id: "notification", value: "OFF" }, + { id: "FW ver", value: "3.0.0.a28" }, + { id: "FW arch", value: "ESP32" }, + ], + }); + return; + } + + if (url.indexOf("ESP410") != -1) { + res.json({ + AP_LIST: [ + { + SSID: "HP-Setup>71-M277 LaserJet", + SIGNAL: "92", + IS_PROTECTED: "0", + }, + { SSID: "WIFI_OFFICE_B2G", SIGNAL: "88", IS_PROTECTED: "1" }, + { SSID: "NETGEAR70", SIGNAL: "66", IS_PROTECTED: "1" }, + { SSID: "ZenFone6'luc", SIGNAL: "48", IS_PROTECTED: "1" }, + { SSID: "Livebox-EF01", SIGNAL: "20", IS_PROTECTED: "1" }, + { SSID: "orange", SIGNAL: "20", IS_PROTECTED: "0" }, + ], + }); + return; + } + + if (url.indexOf("ESP400") != -1) { + res.json({ + Settings: [ + { + F: "network/network", + P: "130", + T: "S", + V: "esp3d", + H: "hostname", + S: "32", + M: "1", + }, + { + F: "network/network", + P: "0", + T: "B", + V: "1", + H: "radio mode", + O: [{ none: "0" }, { sta: "1" }, { ap: "2" }], + }, + { + F: "network/sta", + P: "1", + T: "S", + V: "WIFI_OFFICE_B2G", + S: "32", + H: "SSID", + M: "1", + }, + { + F: "network/sta", + P: "34", + T: "S", + N: "1", + V: "********", + S: "64", + H: "pwd", + M: "8", + }, + { + F: "network/sta", + P: "99", + T: "B", + V: "1", + H: "ip mode", + O: [{ dhcp: "1" }, { static: "0" }], + }, + { + F: "network/sta", + P: "100", + T: "A", + V: "192.168.0.1", + H: "ip", + }, + { + F: "network/sta", + P: "108", + T: "A", + V: "192.168.0.1", + H: "gw", + }, + { + F: "network/sta", + P: "104", + T: "A", + V: "255.255.255.0", + H: "msk", + }, + { + F: "network/ap", + P: "218", + T: "S", + V: "ESP3D", + S: "32", + H: "SSID", + M: "1", + }, + { + F: "network/ap", + P: "251", + T: "S", + N: "1", + V: "********", + S: "64", + H: "pwd", + M: "8", + }, + { + F: "network/ap", + P: "316", + T: "A", + V: "192.168.0.1", + H: "ip", + }, + { + F: "network/ap", + P: "118", + T: "B", + V: "11", + H: "channel", + O: [ + { 1: "1" }, + { 2: "2" }, + { 3: "3" }, + { 4: "4" }, + { 5: "5" }, + { 6: "6" }, + { 7: "7" }, + { 8: "8" }, + { 9: "9" }, + { 10: "10" }, + { 11: "11" }, + { 12: "12" }, + { 13: "13" }, + { 14: "14" }, + ], + }, + { + F: "service/http", + P: "328", + T: "B", + V: "1", + H: "enable", + O: [{ no: "0" }, { yes: "1" }], + }, + { + F: "service/http", + P: "121", + T: "I", + V: "80", + H: "port", + S: "65001", + M: "1", + }, + { + F: "service/telnetp", + P: "329", + T: "B", + V: "1", + H: "enable", + O: [{ no: "0" }, { yes: "1" }], + }, + { + F: "service/telnetp", + P: "125", + T: "I", + V: "23", + H: "port", + S: "65001", + M: "1", + }, + { + F: "service/ftp", + P: "1021", + T: "B", + V: "1", + H: "enable", + O: [{ no: "0" }, { yes: "1" }], + }, + { + F: "service/ftp", + P: "1009", + T: "I", + V: "21", + H: "control port", + S: "65001", + M: "1", + }, + { + F: "service/ftp", + P: "1013", + T: "I", + V: "20", + H: "active port", + S: "65001", + M: "1", + }, + { + F: "service/ftp", + P: "1017", + T: "I", + V: "55600", + H: "passive port", + S: "65001", + M: "1", + }, + { + F: "service/notification", + P: "1004", + T: "B", + V: "1", + H: "auto notif", + O: [{ no: "0" }, { yes: "1" }], + }, + { + F: "service/notification", + P: "116", + T: "B", + V: "0", + H: "notification", + O: [{ none: "0" }, { pushover: "1" }, { email: "2" }, { line: "3" }], + }, + { + F: "service/notification", + P: "332", + T: "S", + V: "********", + S: "63", + H: "t1", + M: "0", + }, + { + F: "service/notification", + P: "396", + T: "S", + V: "********", + S: "63", + H: "t2", + M: "0", + }, + { + F: "service/notification", + P: "855", + T: "S", + V: " ", + S: "127", + H: "ts", + M: "0", + }, + { + F: "system/system", + P: "461", + T: "B", + V: "40", + H: "targetfw", + O: [ + { repetier: "50" }, + { marlin: "20" }, + { marlinkimbra: "35" }, + { smoothieware: "40" }, + { grbl: "10" }, + { unknown: "0" }, + ], + }, + { + F: "system/system", + P: "112", + T: "I", + V: "115200", + H: "baud", + O: [ + { 9600: "9600" }, + { 19200: "19200" }, + { 38400: "38400" }, + { 57600: "57600" }, + { 74880: "74880" }, + { 115200: "115200" }, + { 230400: "230400" }, + { 250000: "250000" }, + { 500000: "500000" }, + { 921600: "921600" }, + ], + }, + { + F: "system/system", + P: "320", + T: "I", + V: "10000", + H: "bootdelay", + S: "40000", + M: "0", + }, + { + F: "system/system", + P: "129", + T: "F", + V: "255", + H: "outputmsg", + O: [{ M117: "16" }, { serial: "1" }, { telnet: "2" }], + }, + ], + }); + return; + } + SendBinary("ok\n"); + res.send(""); +}); + +function fileSizeString(size) { + let s; + if (size < 1024) return size + " B"; + if (size < 1024 * 1024) return (size / 1024).toFixed(2) + " KB"; + if (size < 1024 * 1024 * 1024) + return (size / (1024 * 1024)).toFixed(2) + " MB"; + if (size < 1024 * 1024 * 1024 * 1024) + return (size / (1024 * 1024 * 1024)).toFixed(2) + " GB"; + return "X B"; +} + +function filesList(mypath,mainpath) { + let res = '{"files":['; + let nb = 0; + let total = sdpath==mainpath? (4096 * 1024 * 1024):(1.2 * 1024 * 1024); + let totalused = getTotalSize(mainpath); + let currentpath = path.normalize(mainpath + mypath); + console.log("[path]" + currentpath); + fs.readdirSync(currentpath).forEach((fileelement) => { + let fullpath = path.normalize(currentpath + "/" + fileelement); + let fst = fs.statSync(fullpath); + let fsize = -1; + + if (fst.isFile()) { + fsize = fileSizeString(fst.size); + } + if (nb > 0) res += ","; + res += '{"name":"' + fileelement + '","size":"' + fsize + '"}'; + nb++; + }); + res += + '],"path":"' + + mypath + + '","occupation":"' + + ((100 * totalused) / total).toFixed(0) + + '","status":"ok","total":"' + + fileSizeString(total) + + '","used":"' + + fileSizeString(totalused) + + '"}'; + return res; +} + +const getAllFiles = function (dirPath, arrayOfFiles) { + let files = fs.readdirSync(dirPath); + + arrayOfFiles = arrayOfFiles || []; + + files.forEach(function (file) { + if (fs.statSync(dirPath + "/" + file).isDirectory()) { + arrayOfFiles = getAllFiles(dirPath + "/" + file, arrayOfFiles); + } else { + arrayOfFiles.push(dirPath + "/" + file); + } + }); + + return arrayOfFiles; +}; + +const getTotalSize = function (directoryPath) { + const arrayOfFiles = getAllFiles(directoryPath); + + let totalSize = 0; + + arrayOfFiles.forEach(function (filePath) { + totalSize += fs.statSync(filePath).size; + }); + + return totalSize; +}; + +function deleteFolderRecursive(path) { + if (fs.existsSync(path) && fs.lstatSync(path).isDirectory()) { + fs.readdirSync(path).forEach(function (file, index) { + let curPath = path + "/" + file; + + if (fs.lstatSync(curPath).isDirectory()) { + // recurse + deleteFolderRecursive(curPath); + } else { + // delete file + fs.unlinkSync(curPath); + } + }); + + console.log(`[server]Deleting directory "${path}"...`); + if (fs.existsSync(path)) fs.rmdirSync(path); + } else console.log(`[server]No directory "${path}"...`); +} + +app.all("/updatefw", function (req, res) { + res.send("ok"); +}); + +app.all("/sdfiles", function (req, res) { + let mypath = req.query.path; + let url = req.originalUrl; + let filepath = path.normalize(sdpath + mypath + "/" + req.query.filename); + if (url.indexOf("action=deletedir") != -1) { + console.log("[server]delete directory " + filepath); + deleteFolderRecursive(filepath); + fs.readdirSync(mypath); + } else if (url.indexOf("action=delete") != -1) { + fs.unlinkSync(filepath); + console.log("[server]delete file " + filepath); + } + if (url.indexOf("action=createdir") != -1) { + fs.mkdirSync(filepath); + console.log("[server]new directory " + filepath); + } + if (typeof mypath == "undefined") { + if (typeof req.body.path == "undefined") { + console.log("[server]path is not defined"); + mypath = "/"; + } else { + mypath = (req.body.path == "/" ? "" : req.body.path) + "/"; + } + } + console.log("[server]path is " + mypath); + if (!req.files || Object.keys(req.files).length === 0) { + return res.send(filesList(mypath,sdpath)); + } + let myFile = req.files.myfiles; + if (typeof myFile.length == "undefined") { + let fullpath = path.normalize(sdpath + mypath + myFile.name); + console.log("[server]one file:" + fullpath); + myFile.mv(fullpath, function (err) { + if (err) return res.status(500).send(err); + res.send(filesList(mypath,sdpath)); + }); + return; + } else { + console.log(myFile.length + " files"); + for (let i = 0; i < myFile.length; i++) { + let fullpath = path.normalize(sdpath + mypath + myFile[i].name); + console.log(fullpath); + myFile[i].mv(fullpath).then(() => { + if (i == myFile.length - 1) res.send(filesList(mypath,sdpath)); + }); + } + } +}); + +app.all("/files", function (req, res) { + let mypath = req.query.path; + let url = req.originalUrl; + let filepath = path.normalize(serverpath + mypath + "/" + req.query.filename); + if (url.indexOf("action=deletedir") != -1) { + console.log("[server]delete directory " + filepath); + deleteFolderRecursive(filepath); + fs.readdirSync(mypath); + } else if (url.indexOf("action=delete") != -1) { + fs.unlinkSync(filepath); + console.log("[server]delete file " + filepath); + } + if (url.indexOf("action=createdir") != -1) { + fs.mkdirSync(filepath); + console.log("[server]new directory " + filepath); + } + if (typeof mypath == "undefined") { + if (typeof req.body.path == "undefined") { + console.log("[server]path is not defined"); + mypath = "/"; + } else { + mypath = (req.body.path == "/" ? "" : req.body.path) + "/"; + } + } + console.log("[server]path is " + mypath); + if (!req.files || Object.keys(req.files).length === 0) { + return res.send(filesList(mypath,serverpath)); + } + let myFile = req.files.myfiles; + if (typeof myFile.length == "undefined") { + let fullpath = path.normalize(serverpath + mypath + myFile.name); + console.log("[server]one file:" + fullpath); + myFile.mv(fullpath, function (err) { + if (err) return res.status(500).send(err); + res.send(filesList(mypath, serverpath)); + }); + return; + } else { + console.log(myFile.length + " files"); + for (let i = 0; i < myFile.length; i++) { + let fullpath = path.normalize(serverpath + mypath + myFile[i].name); + console.log(fullpath); + myFile[i].mv(fullpath).then(() => { + if (i == myFile.length - 1) res.send(filesList(mypath, serverpath)); + }); + } + } +}); + +wss.on("connection", (socket, request) => { + console.log(wscolor("[ws] New connection")); + console.log(wscolor(`[ws] currentID:${currentID}`)); + socket.send(`currentID:${currentID}`); + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(`activeID:${currentID}`); + } + }); + currentID++; + socket.on("message", (message) => { + console.log(wscolor("[ws] received: %s", message)); + }); +}); +wss.on("error", (error) => { + console.log(wscolor("[ws] Error: %s", error)); +}); diff --git a/embedded/config/webpack.dev.js b/embedded/config/webpack.dev.js new file mode 100644 index 0000000..47b5624 --- /dev/null +++ b/embedded/config/webpack.dev.js @@ -0,0 +1,53 @@ +const path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); + +module.exports = { + mode: "development", // this will trigger some webpack default stuffs for dev + entry: path.resolve(__dirname, "../src/index.js"), // if not set, default path to './src/index.js'. Accepts an object with multiple key-value pairs, with key as your custom bundle filename(substituting the [name]), and value as the corresponding file path + output: { + filename: "[name].bundle.js", // [name] will take whatever the input filename is. defaults to 'main' if only a single entry value + path: path.resolve(__dirname, "../dist"), // the folder containing you final dist/build files. Default to './dist' + }, + devServer: { + historyApiFallback: true, // to make our SPA works after a full reload, so that it serves 'index.html' when 404 response + open: true, + static: { + directory: path.resolve(__dirname, "./dist"), + }, + port: 8088, + proxy: { + context: () => true, + target: "http://localhost:8080", + }, + }, + stats: "minimal", // default behaviour spit out way too much info. adjust to your need. + devtool: "source-map", // a sourcemap type. map to original source with line number + plugins: [ + new HtmlWebpackPlugin({ + template: path.join(__dirname, "../src/index.html"), + inlineSource: ".(js|css)$", + inject: true, + }), + ], // automatically creates a 'index.html' for us with our ,