forked from gronod/squeezelite-esp32
applied platformio structure
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"presets": [
|
||||
"@babel/preset-env",
|
||||
"@babel/typescript"
|
||||
],
|
||||
"env": {
|
||||
"production": {
|
||||
"presets": [
|
||||
"minify"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"parser": "babel-eslint",
|
||||
"extends": "eslint:recommended",
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2020,
|
||||
"ecmaFeatures": {
|
||||
"modules": true
|
||||
}
|
||||
},
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true,
|
||||
"jquery": true
|
||||
} ,
|
||||
"rules": {
|
||||
"no-tabs": "off",
|
||||
"semi": 0,
|
||||
"comma-dangle": 0,
|
||||
"require-jsdoc": ["off", {
|
||||
"require": {
|
||||
"FunctionDeclaration": true,
|
||||
"MethodDefinition": false,
|
||||
"ClassDeclaration": false
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true,
|
||||
"jquery": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
.idea
|
||||
package-lock.json
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"name": "Debug",
|
||||
"preLaunchTask": "webpack: dev server",
|
||||
"sourceMaps": true,
|
||||
"trace": true
|
||||
}
|
||||
]
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"type": "npm",
|
||||
"label": "webpack: dev server",
|
||||
"script": "dev",
|
||||
"promptOnClose": true,
|
||||
"isBackground": true,
|
||||
"problemMatcher": {
|
||||
"owner": "webpack",
|
||||
"severity": "error",
|
||||
"fileLocation": "absolute",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "ERROR in (.*)",
|
||||
"file": 1
|
||||
},
|
||||
{
|
||||
"regexp": "\\((\\d+),(\\d+)\\):(.*)",
|
||||
"line": 1,
|
||||
"column": 2,
|
||||
"message": 3
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Compiling\\.\\.\\.",
|
||||
"endsPattern": "Compiled successfully\\."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"label": "webpack: prod server",
|
||||
"script": "prod",
|
||||
"promptOnClose": true,
|
||||
"isBackground": true,
|
||||
"problemMatcher": {
|
||||
"owner": "webpack",
|
||||
"severity": "error",
|
||||
"fileLocation": "absolute",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "ERROR in (.*)",
|
||||
"file": 1
|
||||
},
|
||||
{
|
||||
"regexp": "\\((\\d+),(\\d+)\\):(.*)",
|
||||
"line": 1,
|
||||
"column": 2,
|
||||
"message": 3
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Compiling\\.\\.\\.",
|
||||
"endsPattern": "Compiled successfully\\."
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "npm",
|
||||
"label": "webpack: build",
|
||||
"script": "build",
|
||||
"promptOnClose": true,
|
||||
"isBackground": true,
|
||||
"problemMatcher": {
|
||||
"owner": "webpack",
|
||||
"severity": "error",
|
||||
"fileLocation": "absolute",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "ERROR in (.*)",
|
||||
"file": 1
|
||||
},
|
||||
{
|
||||
"regexp": "\\((\\d+),(\\d+)\\):(.*)",
|
||||
"line": 1,
|
||||
"column": 2,
|
||||
"message": 3
|
||||
}
|
||||
],
|
||||
"background": {
|
||||
"activeOnStart": true,
|
||||
"beginsPattern": "Compiling\\.\\.\\.",
|
||||
"endsPattern": "Compiled successfully\\."
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 AndyKorek
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,204 @@
|
||||
<h2 align="center">Boilerplate - Bootstrap v4 - SASS - JQuery - WebPack</h2>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://webpack.js.org/"><img alt="Webpack" src="https://img.shields.io/badge/Webpack-4.41.6-%238DD6F9.svg"></a>
|
||||
<a href="https://babeljs.io/"><img alt="Webpack" src="https://img.shields.io/badge/Babel%2FCore-7.8.4-%23f5da55.svg"></a>
|
||||
<a href="https://www.npmjs.com/package/gulp-sass"><img alt="node-sass" src="https://img.shields.io/badge/node--sass-v4.13.1-ff69b4.svg"></a>
|
||||
<a href="https://jquery.com/"><img src="https://img.shields.io/badge/jQuery-3.3.1-blue.svg" alt="jquery"></a>
|
||||
<a href="https://lodash.com/"><img src="https://img.shields.io/badge/lodash-4.17.15-blue.svg" alt="jquery"></a>
|
||||
<a href="https://popper.js.org/"><img src="https://img.shields.io/badge/popper.js-2.0.6-blue.svg" alt="popper.js"></a>
|
||||
<a href="https://eslint.org/"><img src="https://img.shields.io/badge/es--lint-5.15.1-%23463fd4.svg" alt="eslint"></a>
|
||||
<a href="https://fontawesome.com/"><img alt="Font Awesome" src="https://img.shields.io/badge/Font--Awesome-5.12.1-blue.svg"></a>
|
||||
<a href="https://icons8.com/line-awesome"><img alt="Line Awesome" src="https://img.shields.io/badge/Line%20Awesome-1.3.0-green"></a>
|
||||
</p>
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
|
||||
<p align="center">
|
||||
<em>
|
||||
SASS
|
||||
· Babel
|
||||
· Bootstrap
|
||||
· JQuery
|
||||
· PopperJS
|
||||
· Font Awesome
|
||||
</em>
|
||||
</p>
|
||||
|
||||
This Webpack4-Sass Boilerplate contains the following features:
|
||||
|
||||
- Webpack4 & Dev-Server
|
||||
- TypeScript 3.7.5
|
||||
- Babel ES6 Compiler
|
||||
- Bootstrap v4 - with Theme Support
|
||||
- Font Awesome v5.7
|
||||
- Animate.css Library v3.7.2
|
||||
- JQuery v3.3.1
|
||||
- PopperJS v2
|
||||
- _lodash
|
||||
- concentrate and minify JavaScript.
|
||||
- Compile, minify, Autoprefix SASS.
|
||||
- Optimize and Cache Images
|
||||
- Preconfigured BootsWatch Template (YETI & Slate)
|
||||
- Linting for your TS, JS and SASS
|
||||
|
||||
## Features
|
||||
|
||||
### Webpack Loaders & Plugins
|
||||
|
||||
This project contains the following loaders & plugins:
|
||||
|
||||
- `node-sass` for compiling sass (SCSS)
|
||||
- `babel-loader` for compiling ES6 code
|
||||
- `babel-eslint && eslint-loader` for Linting your .js
|
||||
- `tslint` for Linting your .ts
|
||||
- `lodash-webpack-plugin` create smaller Lodash builds by replacing feature sets of modules with noop, identity, or simpler alternatives.
|
||||
- `webpack-dev-server` for serving & Hot-Reloading
|
||||
- `css-loader` for compressing css
|
||||
- `sass-loader` for compressing and loading scss & sass
|
||||
- `url- & file-loader` for loading and optimizing images
|
||||
- `xml and csv loader` for loading data files
|
||||
- `html-loader` for loading & optimizing html files
|
||||
- `clean-webpack-plugin` for keeping your dist folder clean
|
||||
- `favicons-webpack-plugin` generate favicons form your "logo.png"
|
||||
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Dependencies
|
||||
|
||||
Make sure these are installed first.
|
||||
|
||||
- [Node.js](http://nodejs.org)
|
||||
- [Webpack](https://webpack.js.org/guides/installation/)
|
||||
|
||||
`npm install --g webpack`
|
||||
|
||||
<hr/>
|
||||
|
||||
### Quick Start
|
||||
|
||||
1. Clone the repo :
|
||||
`git clone https://github.com/AndyKorek/webpack-boilerplate-sass-ts-bootstrap4-fontawesome.git`
|
||||
2. In bash/terminal/command line, `cd ` into project directory.
|
||||
3. Run `npm i` to install required dependencies.
|
||||
|
||||
4. Run the Dev Server with (with Hot Reloading) `npm run dev`
|
||||
|
||||
<hr/>
|
||||
|
||||
### Build the Production Folder
|
||||
`npm run build`
|
||||
|
||||
This will:
|
||||
|
||||
- Bundle and Minify SASS(scss) to css & Hash and Cash it
|
||||
- generate GZip and Brodli Compressed Assets
|
||||
- Bundle and Minify JS
|
||||
- Optimize Images
|
||||
- Optimize HTML
|
||||
- generate Favicons
|
||||
|
||||
<hr/>
|
||||
|
||||
## Documentation
|
||||
|
||||
### Workflow structure
|
||||
|
||||
`src` - > source directory
|
||||
|
||||
`dist` -> build directory
|
||||
|
||||
|
||||
```
|
||||
|
||||
├── src
|
||||
│ ├── assets
|
||||
│ │ └── images
|
||||
│ ├── fonts
|
||||
│ ├── sass
|
||||
│ │ ├── layout
|
||||
| | | └── _features.scss
|
||||
│ │ ├── setup
|
||||
| | | └── _normalize.scss
|
||||
│ │ ├── themes
|
||||
| | | ├── _slate.scss
|
||||
| | | └── _yeti.scss
|
||||
│ │ ├── utils
|
||||
| | | ├── _mixins.scss
|
||||
| | | └── _variables.scss
|
||||
│ │ ├── _globals.scss
|
||||
│ │ ├── _headings.scss
|
||||
│ │ ├── _typography.scss
|
||||
│ │ ├── _vendor.scss
|
||||
│ │ └── main.scss
|
||||
│ ├── ts
|
||||
│ │ ├── custom.ts
|
||||
│ │ ├── line-awesome.ts
|
||||
│ │ ├── vendor.ts
|
||||
│ |── .htaccess
|
||||
│ |── 404.html
|
||||
│ |── index.html
|
||||
│ └── index.ts
|
||||
|
||||
|
||||
|
||||
├── dist
|
||||
│ ├── assets
|
||||
│ │ ├── images
|
||||
│ │ └──
|
||||
│ ├── css
|
||||
│ │ ├── vendors.[contenthash].css
|
||||
│ │ └── main.contenthash].css
|
||||
│ ├── js
|
||||
│ │ ├── main.[contenthash].js
|
||||
│ │ ├── runtime.[contenthash].js
|
||||
│ │ └── vendors.[contenthash].js
|
||||
│ │
|
||||
│ └── index.html
|
||||
|
||||
```
|
||||
### Loading the Features you need
|
||||
|
||||
in `src/js/vendor/_boostrap.js` uncomment all Features you need
|
||||
|
||||
put your custom js to `src/js/_custom.js`
|
||||
|
||||
|
||||
<hr/>
|
||||
|
||||
### Instructions
|
||||
|
||||
- Add `sass`(.scss) files to `src/_scss` folder.
|
||||
|
||||
- Make sure you import the scss file in `main.scss`
|
||||
```
|
||||
@import "filename";
|
||||
```
|
||||
- Add your assets to `src/assets/`
|
||||
|
||||
- Add `images` to `src/assets/images`
|
||||
|
||||
## TODO list
|
||||
|
||||
- [x] Bootstrap 4
|
||||
- [x] Webpack 4
|
||||
- [x] Jquery
|
||||
- [x] PopperJS v2
|
||||
- [x] Include ES-Lint
|
||||
- [x] Font-Awesome
|
||||
- [x] Assets Loader
|
||||
- [x] Separated location for Bundled Files
|
||||
- [x] Adding EsLint
|
||||
- [ ] Code Optimising
|
||||
- [x] Uglify and Minify JS with Terser
|
||||
|
||||
## Licence
|
||||
|
||||
Code released under the [MIT License](https://github.com/AndyKorek/webpack4_boilerplate/blob/master/LICENSE).
|
||||
|
||||
*</> with* :heart: *from Germany*
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"extends": "stylelint-config-standard",
|
||||
"rules": {
|
||||
"no-duplicate-selectors": true,
|
||||
"indentation": null,
|
||||
"color-hex-case": "lower",
|
||||
"color-hex-length": "long",
|
||||
"selector-combinator-space-after": "never",
|
||||
"declaration-block-trailing-semicolon": "always",
|
||||
"declaration-colon-space-before": "never",
|
||||
"declaration-colon-newline-after": null,
|
||||
"comment-whitespace-inside": "always",
|
||||
"comment-empty-line-before": null,
|
||||
"selector-pseudo-class-parentheses-space-inside": "always",
|
||||
"selector-list-comma-newline-after": null,
|
||||
"media-feature-range-operator-space-before": "always",
|
||||
"media-feature-range-operator-space-after": "always",
|
||||
"media-feature-parentheses-space-inside": "always",
|
||||
"media-feature-colon-space-before": "always",
|
||||
"media-feature-colon-space-after": "always",
|
||||
"no-eol-whitespace": null,
|
||||
"no-missing-end-of-source-newline": null,
|
||||
"number-leading-zero": "never" }
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
[1211/165128.604:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3)
|
||||
[1212/063417.746:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3)
|
||||
[1213/063413.475:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3)
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
BIN
Binary file not shown.
|
After Width: | Height: | Size: 634 B |
+1
File diff suppressed because one or more lines are too long
BIN
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
export {};
|
||||
+39
File diff suppressed because one or more lines are too long
+4
@@ -0,0 +1,4 @@
|
||||
import 'bootstrap';
|
||||
import './sass/main.scss';
|
||||
import './assets/images/favicon-32x32.png';
|
||||
import './js/custom.js';
|
||||
@@ -0,0 +1 @@
|
||||
export {};
|
||||
+252
@@ -0,0 +1,252 @@
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getStatus(): {};
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function getRadioButton(entry: any): string;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare function pushStatus(): void;
|
||||
declare let sd: {};
|
||||
declare let rf: boolean;
|
||||
declare function refreshStatus(): void;
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
import 'bootstrap';
|
||||
import './sass/main.scss';
|
||||
import './js/test.js';
|
||||
+1
@@ -0,0 +1 @@
|
||||
export {};
|
||||
+1
@@ -0,0 +1 @@
|
||||
export {};
|
||||
@@ -0,0 +1,2 @@
|
||||
declare function _exports(env: any, options: any): {};
|
||||
export = _exports;
|
||||
@@ -0,0 +1,8 @@
|
||||
export class BuildEventsHook {
|
||||
constructor(name: any, fn: any, stage?: string);
|
||||
name: any;
|
||||
stage: string;
|
||||
function: any;
|
||||
apply(compiler: any): void;
|
||||
}
|
||||
export function createBuildEventsHook(options: any): BuildEventsHook;
|
||||
@@ -0,0 +1,6 @@
|
||||
export const parser: string;
|
||||
export const plugins: {
|
||||
'postcss-import': {};
|
||||
'postcss-cssnext': {};
|
||||
cssnano: {};
|
||||
};
|
||||
@@ -0,0 +1,37 @@
|
||||
declare const PORT: 5000;
|
||||
import HtmlWebPackPlugin = require("html-webpack-plugin");
|
||||
export namespace entry {
|
||||
const test: string;
|
||||
}
|
||||
export namespace devServer {
|
||||
export namespace _static {
|
||||
const directory: string;
|
||||
const staticOptions: {};
|
||||
const publicPath: string;
|
||||
const serveIndex: boolean;
|
||||
const watch: boolean;
|
||||
}
|
||||
export { _static as static };
|
||||
export namespace devMiddleware {
|
||||
const publicPath_1: string;
|
||||
export { publicPath_1 as publicPath };
|
||||
}
|
||||
export const open: boolean;
|
||||
export const compress: boolean;
|
||||
export { PORT as port };
|
||||
export const host: string;
|
||||
export const allowedHosts: string;
|
||||
export const headers: {
|
||||
'Access-Control-Allow-Origin': string;
|
||||
'Accept-Encoding': string;
|
||||
};
|
||||
export namespace client {
|
||||
const logging: string;
|
||||
const overlay: boolean;
|
||||
const progress: boolean;
|
||||
}
|
||||
export function onListening(devServer: any): void;
|
||||
export function onBeforeSetupMiddleware(devServer: any): void;
|
||||
}
|
||||
export const plugins: HtmlWebPackPlugin[];
|
||||
export {};
|
||||
@@ -0,0 +1,13 @@
|
||||
[
|
||||
{"ssid":"Pantum-AP-A6D49F","chan":11,"rssi":-55,"auth":4, "known":false},
|
||||
{"ssid":"a0308","chan":1,"rssi":-56,"auth":3, "known":false},
|
||||
{"ssid":"dlink-D9D8","chan":11,"rssi":-82,"auth":4, "known":false},
|
||||
{"ssid":"Linksys06730","chan":7,"rssi":-85,"auth":0, "known":false},
|
||||
{"ssid":"SINGTEL-5171","chan":9,"rssi":-88,"auth":4, "known":false},
|
||||
{"ssid":"1126-1","chan":11,"rssi":-89,"auth":4, "known":false},
|
||||
{"ssid":"The Shah 5GHz-2","chan":1,"rssi":-90,"auth":0, "known":false},
|
||||
{"ssid":"SINGTEL-1D28 (2G)","chan":11,"rssi":-91,"auth":3, "known":false},
|
||||
{"ssid":"dlink-F864","chan":1,"rssi":-92,"auth":4, "known":false},
|
||||
{"ssid":"dlink-74F0","chan":1,"rssi":-93,"auth":4, "known":false},
|
||||
{"ssid":"MyTestSSID","chan":2,"rssi":-53,"auth":4, "known":true}
|
||||
]
|
||||
@@ -0,0 +1,783 @@
|
||||
{
|
||||
"commands": [{
|
||||
"help": "Get the current size of free heap memory",
|
||||
"hascb": false,
|
||||
"name": "free"
|
||||
}, {
|
||||
"help": "Services",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"glossary": "Spotify (cspot)",
|
||||
"longopts": "cspot",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Bluetooth Speaker",
|
||||
"longopts": "BT_Speaker",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "AirPlay",
|
||||
"longopts": "AirPlay",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "Disabled|Telnet Only|Telnet and Serial",
|
||||
"glossary": "Telnet server. Use only for troubleshooting",
|
||||
"longopts": "telnet",
|
||||
"shortopts": "t",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "System Statistics. Use only for troubleshooting",
|
||||
"longopts": "stats",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [--cspot] [--BT_Speaker] [--AirPlay] [-t Disabled|Telnet Only|Telnet and Serial] [--stats]",
|
||||
"name": "cfg-syst-services"
|
||||
}, {
|
||||
"help": "Get minimum size of free heap memory found during execution",
|
||||
"hascb": false,
|
||||
"name": "heap"
|
||||
}, {
|
||||
"help": "Device Name",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "squeezelite-1fe714",
|
||||
"glossary": "New Name",
|
||||
"longopts": "new_name",
|
||||
"shortopts": "n",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [-n squeezelite-1fe714]",
|
||||
"name": "cfg-syst-name"
|
||||
}, {
|
||||
"help": "Get version of chip and SDK",
|
||||
"hascb": false,
|
||||
"name": "version"
|
||||
}, {
|
||||
"help": "Reboot system",
|
||||
"hascb": false,
|
||||
"name": "restart"
|
||||
}, {
|
||||
"help": "Reboot system to Recovery",
|
||||
"hascb": false,
|
||||
"name": "recovery"
|
||||
}, {
|
||||
"help": "Reboot system to Squeezelite",
|
||||
"hascb": false,
|
||||
"name": "restart_ota"
|
||||
}, {
|
||||
"help": "Preset Options",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "SqueezeAMP|T-WATCH2020 by LilyGo",
|
||||
"glossary": "Known Board Name.\nFor known boards, several systems parameters will be updated",
|
||||
"longopts": "model_config",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " --model_config=SqueezeAMP|T-WATCH2020 by LilyGo",
|
||||
"name": "cfg-hw-preset"
|
||||
}, {
|
||||
"help": "General Audio Options",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "Headphones|Subwoofer",
|
||||
"glossary": "On supported DAC, determines the audio jack behavior. Selecting headphones will cause the external amp to be muted on insert, while selecting Subwoofer will keep the amp active all the time.",
|
||||
"longopts": "jack_behavior",
|
||||
"shortopts": "j",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [-j Headphones|Subwoofer]",
|
||||
"name": "cfg-audio-general"
|
||||
}, {
|
||||
"help": "Bluetooth Audio Output Options",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "name",
|
||||
"glossary": "Bluetooth audio device name. This applies when output mode is Bluetooth",
|
||||
"longopts": "sink_name",
|
||||
"shortopts": "n",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "pin",
|
||||
"glossary": "Bluetooth security/pin code. Usually 0000. This applies when output mode is Bluetooth",
|
||||
"longopts": "pin_code",
|
||||
"shortopts": "p",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " -n name -p pin",
|
||||
"name": "cfg-audio-bt_source"
|
||||
}, {
|
||||
"help": "DAC Options",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "TAS57xx|TAS5713|AC101|WM8978|ES8388|",
|
||||
"glossary": "DAC Model Name",
|
||||
"longopts": "model_name",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Clock GPIO. e.g. 33",
|
||||
"longopts": "clock",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Word Select GPIO. e.g. 25",
|
||||
"longopts": "wordselect",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Data GPIO. e.g. 32",
|
||||
"longopts": "data",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Mute GPIO. e.g. 14",
|
||||
"longopts": "mute_gpio",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Mute GPIO level. Checked=HIGH, Unchecked=LOW",
|
||||
"longopts": "mute_level",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SDA GPIO. e.g. 27",
|
||||
"longopts": "dac_sda",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SCL GPIO. e.g. 26",
|
||||
"longopts": "dac_scl",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "I2C device address. e.g. 106",
|
||||
"longopts": "dac_i2c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Clear configuration",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " --model_name=TAS57xx|TAS5713|AC101|WM8978|ES8388| [--clock=<n>] [--wordselect=<n>] [--data=<n>] [--mute_gpio=<n>] [--mute_level] [--dac_sda=<n>] [--dac_scl=<n>] [--dac_i2c=<n>] [--clear]",
|
||||
"name": "cfg-hw-dac"
|
||||
}, {
|
||||
"help": "SPDIF Options",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "<n>",
|
||||
"glossary": "Clock GPIO. e.g. 33",
|
||||
"longopts": "clock",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Word Select GPIO. e.g. 25",
|
||||
"longopts": "wordselect",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Data GPIO. e.g. 32",
|
||||
"longopts": "data",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Clear configuration",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " --clock=<n> --wordselect=<n> --data=<n> [--clear]",
|
||||
"name": "cfg-hw-spdif"
|
||||
}, {
|
||||
"help": "Rotary Control",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "remark",
|
||||
"glossary": "One rotary encoder is supported, quadrature shift with press. Such encoders usually have 2 pins for encoders (A and B), and common C that must be set to ground and an optional SW pin for press. A, B and SW must be pulled up, so automatic pull-up is provided by ESP32, but you can add your own resistors. A bit of filtering on A and B (~470nF) helps for debouncing which is not made by software.\r\nEncoder is normally hard-coded to respectively knob left, right and push on LMS and to volume down/up/play toggle on BT and AirPlay.",
|
||||
"checkbox": false,
|
||||
"remark": true,
|
||||
"hasvalue": false,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "gpio",
|
||||
"glossary": "A/DT gpio",
|
||||
"longopts": "A",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "gpio",
|
||||
"glossary": "B/CLK gpio",
|
||||
"longopts": "B",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "gpio",
|
||||
"glossary": "Switch gpio",
|
||||
"longopts": "SW",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Force Volume down/up/play toggle all the time (even in LMS). ",
|
||||
"longopts": "volume_lock",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Enable alternate mode mode on long-press. In that mode, left is previous, right is next and press is toggle. Every long press on SW alternates between modes (the main mode actual behavior depends on 'volume').",
|
||||
"longopts": "longpress",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Single knob full navigation. Left, Right and Press is navigation, with Press always going to lower submenu item. Longpress is 'Play', Double press is 'Back', a quick left-right movement on the encoder is 'Pause'",
|
||||
"longopts": "knobonly",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "ms",
|
||||
"glossary": "The speed of double click (or left-right) when knob only option is enabled. Be aware that the longer you set double click speed, the less responsive the interface will be. ",
|
||||
"longopts": "timer",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Clear configuration",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Send button events as raw values to LMS. No remapping is possible when this is enabled",
|
||||
"longopts": "raw_mode",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " remark --A=gpio --B=gpio [--SW=gpio] [--volume_lock] [--longpress] [--knobonly] [--timer=ms] [--clear] [--raw_mode]",
|
||||
"name": "cfg-hw-rotary"
|
||||
}, {
|
||||
"help": "I2C Bus Parameters",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "0|1",
|
||||
"glossary": "Port",
|
||||
"longopts": "port",
|
||||
"shortopts": "p",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "int",
|
||||
"glossary": "Frequency (Hz) e.g. 100000",
|
||||
"longopts": "speed",
|
||||
"shortopts": "f",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SDA GPIO. e.g. 19",
|
||||
"longopts": "sda",
|
||||
"shortopts": "d",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SCL GPIO. e.g. 18",
|
||||
"longopts": "scl",
|
||||
"shortopts": "c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Clear configuration",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [-p 0|1] [-f int] [-d <n>] [-c <n>] [--clear]",
|
||||
"name": "cfg-hw-i2c"
|
||||
}, {
|
||||
"help": "SPI Bus Parameters",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "<n>",
|
||||
"glossary": "Data OUT GPIO",
|
||||
"longopts": "data",
|
||||
"shortopts": "d",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Data IN GPIO",
|
||||
"longopts": "miso",
|
||||
"shortopts": "d",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Clock GPIO",
|
||||
"longopts": "clk",
|
||||
"shortopts": "k",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "DC GPIO",
|
||||
"longopts": "dc",
|
||||
"shortopts": "c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "1|2",
|
||||
"glossary": "SPI Host Number",
|
||||
"longopts": "host",
|
||||
"shortopts": "h",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Clear configuration",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [-d <n>] [-d <n>] [-k <n>] [-c <n>] [-h 1|2] [--clear]",
|
||||
"name": "cfg-hw-spi"
|
||||
}, {
|
||||
"help": "Scan I2C bus for devices",
|
||||
"hascb": false,
|
||||
"name": "i2cdetect"
|
||||
}, {
|
||||
"help": "Read registers visible through the I2C bus",
|
||||
"hascb": false,
|
||||
"argtable": [{
|
||||
"datatype": "<chip_addr>",
|
||||
"glossary": "Specify the address of the chip on that bus",
|
||||
"longopts": "chip",
|
||||
"shortopts": "c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<register_addr>",
|
||||
"glossary": "Specify the address on that chip to read from",
|
||||
"longopts": "register",
|
||||
"shortopts": "r",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<length>",
|
||||
"glossary": "Specify the length to read from that data address",
|
||||
"longopts": "length",
|
||||
"shortopts": "l",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " -c <chip_addr> [-r <register_addr>] [-l <length>]",
|
||||
"name": "i2cget"
|
||||
}, {
|
||||
"help": "Set registers visible through the I2C bus",
|
||||
"hascb": false,
|
||||
"argtable": [{
|
||||
"datatype": "<chip_addr>",
|
||||
"glossary": "Specify the address of the chip on that bus",
|
||||
"longopts": "chip",
|
||||
"shortopts": "c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Specify the i2c port (0|2)",
|
||||
"longopts": "port",
|
||||
"shortopts": "p",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<register_addr>",
|
||||
"glossary": "Specify the address on that chip to read from",
|
||||
"longopts": "register",
|
||||
"shortopts": "r",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<data>",
|
||||
"glossary": "Specify the data to write to that data address",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 256
|
||||
}],
|
||||
"hint": " -c <chip_addr> [-p <n>] [-r <register_addr>] [<data>]...",
|
||||
"name": "i2cset"
|
||||
}, {
|
||||
"help": "Examine registers visible through the I2C bus",
|
||||
"hascb": false,
|
||||
"argtable": [{
|
||||
"datatype": "<chip_addr>",
|
||||
"glossary": "Specify the address of the chip on that bus",
|
||||
"longopts": "chip",
|
||||
"shortopts": "c",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<size>",
|
||||
"glossary": "Specify the size of each read",
|
||||
"longopts": "size",
|
||||
"shortopts": "s",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " -c <chip_addr> [-s <size>]",
|
||||
"name": "i2cdump"
|
||||
}, {
|
||||
"help": "Display",
|
||||
"hascb": true,
|
||||
"argtable": [{
|
||||
"datatype": "<I2C|SPI>",
|
||||
"glossary": "Interface (default I2C)",
|
||||
"longopts": "type",
|
||||
"shortopts": "t",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<SH1106|SSD1306|SSD1322|SSD1326|SSD1327|SSD1675|SSD1351|ST7735|ST7789|ILI9341|>",
|
||||
"glossary": "Driver",
|
||||
"longopts": "driver",
|
||||
"shortopts": "d",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "-1|1|4",
|
||||
"glossary": "Bit Depth (only for SSD1326 displays)",
|
||||
"longopts": "depth",
|
||||
"shortopts": "p",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "I2C address (default 60)",
|
||||
"longopts": "address",
|
||||
"shortopts": "a",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Width",
|
||||
"longopts": "width",
|
||||
"shortopts": "w",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Height",
|
||||
"longopts": "height",
|
||||
"shortopts": "h",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 1,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Rotate 180 degrees",
|
||||
"longopts": "rotate",
|
||||
"shortopts": "r",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Flip horizontally",
|
||||
"longopts": "hf",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "Flip vertically",
|
||||
"longopts": "vf",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SPI Only. Bus Speed (Default 8000000). SPI interface can work up to 26MHz~40MHz",
|
||||
"longopts": "speed",
|
||||
"shortopts": "s",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "SPI Only. CS GPIO (for SPI displays)",
|
||||
"longopts": "cs",
|
||||
"shortopts": "b",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Backlight GPIO (if applicable)",
|
||||
"longopts": "back",
|
||||
"shortopts": "b",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"datatype": "<n>",
|
||||
"glossary": "Reset GPIO",
|
||||
"longopts": "reset",
|
||||
"checkbox": false,
|
||||
"remark": false,
|
||||
"hasvalue": true,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}, {
|
||||
"glossary": "clear configuration and return",
|
||||
"longopts": "clear",
|
||||
"checkbox": true,
|
||||
"remark": false,
|
||||
"hasvalue": false,
|
||||
"mincount": 0,
|
||||
"maxcount": 1
|
||||
}],
|
||||
"hint": " [-r] [-t <I2C|SPI>] [-d <SH1106|SSD1306|SSD1322|SSD1326|SSD1327|SSD1675|SSD1351|ST7735|ST7789|ILI9341|>] [-p -1|1|4] [-a <n>] -w <n> -h <n> [--hf] [--vf] [-s <n>] [-b <n>] [-b <n>] [--reset=<n>] [--clear]",
|
||||
"name": "cfg-hw-display"
|
||||
}],
|
||||
"values": {
|
||||
"cfg-syst-services": {
|
||||
"BT_Speaker": true,
|
||||
"AirPlay": true,
|
||||
"cspot": true,
|
||||
"stats": false,
|
||||
"telnet": "Telnet and Serial"
|
||||
},
|
||||
"cfg-syst-name": {
|
||||
"new_name": "squeezelite-1fe714"
|
||||
},
|
||||
"cfg-hw-preset": {
|
||||
"model_config": "previous config value"
|
||||
},
|
||||
"cfg-audio-general": {
|
||||
"jack_behavior": "Subwoofer"
|
||||
},
|
||||
"cfg-audio-bt_source": {
|
||||
"sink_name": "SMSL BT4.2",
|
||||
"pin_code": "0000"
|
||||
},
|
||||
"cfg-hw-dac": {
|
||||
"dac_sda": 33,
|
||||
"dac_scl": 32,
|
||||
"model_name": "AC101"
|
||||
},
|
||||
"cfg-hw-spdif": {
|
||||
},
|
||||
"cfg-hw-rotary": {
|
||||
},
|
||||
"cfg-hw-i2c": {
|
||||
"speed": 400000
|
||||
},
|
||||
"cfg-hw-spi": {
|
||||
"data": 13,
|
||||
"clk": 14,
|
||||
"host": 1
|
||||
},
|
||||
"cfg-hw-display": {
|
||||
"rotate": false,
|
||||
"hf": false,
|
||||
"vf": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,349 @@
|
||||
{
|
||||
"gpio": [
|
||||
{
|
||||
"gpio": 33,
|
||||
"name": "bck",
|
||||
"group": "spdif",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": 25,
|
||||
"name": "ws",
|
||||
"group": "spdif",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": 15,
|
||||
"name": "do",
|
||||
"group": "spdif",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "bck",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "ws",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "do",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "sda",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "scl",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": -1,
|
||||
"name": "mute",
|
||||
"group": "dac",
|
||||
"fixed": false
|
||||
},
|
||||
{
|
||||
"gpio": 17,
|
||||
"name": "clk",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 16,
|
||||
"name": "cs",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 7,
|
||||
"name": "spiq_sd0_io",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 8,
|
||||
"name": "spid_sd1_io",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 10,
|
||||
"name": "spiwp_sd3_io",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 9,
|
||||
"name": "spihd_sd2_io",
|
||||
"group": "psram",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 6,
|
||||
"name": "clk",
|
||||
"group": "flash",
|
||||
"fixed": true
|
||||
},
|
||||
{
|
||||
"gpio": 11,
|
||||
"name": "cs",
|
||||
"group": "flash",
|
||||
"fixed": true
|
||||
}
|
||||
],
|
||||
"config": {
|
||||
"a2dp_sink_name": {
|
||||
"type": 33,
|
||||
"value": "SMSL BT4.2",
|
||||
"chg": false
|
||||
},
|
||||
"a2dp_ctmt": {
|
||||
"type": 33,
|
||||
"value": "1000",
|
||||
"chg": false
|
||||
},
|
||||
"a2dp_ctrld": {
|
||||
"type": 33,
|
||||
"value": "500",
|
||||
"chg": false
|
||||
},
|
||||
"bt_sink_pin": {
|
||||
"type": 33,
|
||||
"value": "1234",
|
||||
"chg": false
|
||||
},
|
||||
"release_url": {
|
||||
"type": 33,
|
||||
"value": "https://github.com/sle118/squeezelite-esp32/releases",
|
||||
"chg": false
|
||||
},
|
||||
"ap_ip_address": {
|
||||
"type": 33,
|
||||
"value": "192.168.4.1",
|
||||
"chg": false
|
||||
},
|
||||
"ap_ip_gateway": {
|
||||
"type": 33,
|
||||
"value": "192.168.4.1",
|
||||
"chg": false
|
||||
},
|
||||
"ap_ip_netmask": {
|
||||
"type": 33,
|
||||
"value": "255.255.255.0",
|
||||
"chg": false
|
||||
},
|
||||
"ap_channel": {
|
||||
"type": 33,
|
||||
"value": "1",
|
||||
"chg": false
|
||||
},
|
||||
"ap_pwd": {
|
||||
"type": 33,
|
||||
"value": "squeezelite",
|
||||
"chg": false
|
||||
},
|
||||
"airplay_port": {
|
||||
"type": 33,
|
||||
"value": "5000",
|
||||
"chg": false
|
||||
},
|
||||
"bypass_wm": {
|
||||
"type": 33,
|
||||
"value": "0",
|
||||
"chg": false
|
||||
},
|
||||
"actrls_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"lms_ctrls_raw": {
|
||||
"type": 33,
|
||||
"value": "n",
|
||||
"chg": false
|
||||
},
|
||||
"rotary_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"ota_erase_blk": {
|
||||
"type": 33,
|
||||
"value": "249856",
|
||||
"chg": false
|
||||
},
|
||||
"ota_stack": {
|
||||
"type": 33,
|
||||
"value": "10240",
|
||||
"chg": false
|
||||
},
|
||||
"ota_prio": {
|
||||
"type": 33,
|
||||
"value": "6",
|
||||
"chg": false
|
||||
},
|
||||
"display_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"i2c_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"spi_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"set_GPIO": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"led_brightness": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"dac_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"dac_controlset": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"jack_mutes_amp": {
|
||||
"type": 33,
|
||||
"value": "n",
|
||||
"chg": false
|
||||
},
|
||||
"bat_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"metadata_config": {
|
||||
"type": 33,
|
||||
"value": "",
|
||||
"chg": false
|
||||
},
|
||||
"telnet_buffer": {
|
||||
"type": 33,
|
||||
"value": "40000",
|
||||
"chg": false
|
||||
},
|
||||
"telnet_block": {
|
||||
"type": 33,
|
||||
"value": "500",
|
||||
"chg": false
|
||||
},
|
||||
"spdif_config": {
|
||||
"type": 33,
|
||||
"value": "bck=33,ws=25,do=15",
|
||||
"chg": false
|
||||
},
|
||||
"enable_bt_sink": {
|
||||
"type": 33,
|
||||
"value": "N",
|
||||
"chg": false
|
||||
},
|
||||
"enable_airplay": {
|
||||
"type": 33,
|
||||
"value": "N",
|
||||
"chg": false
|
||||
},
|
||||
"disable_ps": {
|
||||
"type": 33,
|
||||
"value": "n",
|
||||
"chg": false
|
||||
},
|
||||
"stats": {
|
||||
"type": 33,
|
||||
"value": "Y",
|
||||
"chg": false
|
||||
},
|
||||
"autoexec": {
|
||||
"type": 33,
|
||||
"value": "1",
|
||||
"chg": false
|
||||
},
|
||||
"autoexec1_spdif": {
|
||||
"type": 33,
|
||||
"value": "squeezelite -b 500:2000 -d all=info -C 30 -W -n \"squeezelite-test3\" -o SPDIF -Z 192000",
|
||||
"chg": false
|
||||
},
|
||||
"autoexec1_i2s": {
|
||||
"type": 33,
|
||||
"value": "squeezelite -b 500:2000 -d all=info -C 30 -W -n \"squeezelite-test3\" -o I2S",
|
||||
"chg": false
|
||||
},
|
||||
"autoexec1_bt": {
|
||||
"type": 33,
|
||||
"value": "squeezelite -b 500:2000 -d all=info -C 30 -W -n \"squeezelite-test3\" -o \"BT -n 'test'\" -Z 192000",
|
||||
"chg": false
|
||||
},
|
||||
"autoexec1": {
|
||||
"type": 33,
|
||||
"value": "squeezelite -b 500:2000 -d all=info -C 30 -W -n \"squeezelite-test3\" -o \"BT -n 'test'\" -Z 192000",
|
||||
"chg": false
|
||||
},
|
||||
"bt_name": {
|
||||
"type": 33,
|
||||
"value": "squeezelite-test3",
|
||||
"chg": false
|
||||
},
|
||||
"host_name": {
|
||||
"type": 33,
|
||||
"value": "squeezelite-test3",
|
||||
"chg": false
|
||||
},
|
||||
"airplay_name": {
|
||||
"type": 33,
|
||||
"value": "squeezelite-test3",
|
||||
"chg": false
|
||||
},
|
||||
"ap_ssid": {
|
||||
"type": 33,
|
||||
"value": "squeezelite-test3",
|
||||
"chg": false
|
||||
},
|
||||
"a2dp_dev_name": {
|
||||
"type": 33,
|
||||
"value": "squeezelite-test3",
|
||||
"chg": false
|
||||
},
|
||||
"telnet_enable": {
|
||||
"type": 33,
|
||||
"value": "D",
|
||||
"chg": false
|
||||
},
|
||||
"rel_api": {
|
||||
"type": 33,
|
||||
"value": "https://api.github.com/repos/sle118/squeezelite-esp32/releases",
|
||||
"chg": false
|
||||
},
|
||||
"enable_cspot": {
|
||||
"type": 33,
|
||||
"value": "Y",
|
||||
"chg": false
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
[{
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":184520,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":3468,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":2,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 61257,
|
||||
"current_time": 147316
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":3468,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 71255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 81256,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 91255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 101255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":98,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 111255,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 121256,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183872,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 131255,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183872,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 141256,
|
||||
"current_time": 147319
|
||||
},
|
||||
{
|
||||
"message": "Network connected",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_SYSTEM",
|
||||
"sent_time": 141256,
|
||||
"current_time": 147319
|
||||
},
|
||||
{
|
||||
"message": "[{\n\t\t\"name\":\t\"SMSL BT4.2\",\n\t\t\"rssi\":\t-64\n\t}]",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_BT",
|
||||
"sent_time": 6245,
|
||||
"current_time": 6364
|
||||
}, {
|
||||
"message": "[{\n\t\t\"name\":\t\"BOSE BT\",\n\t\t\"rssi\":\t-129\n\t}]",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_BT",
|
||||
"sent_time": 6259,
|
||||
"current_time": 6364
|
||||
}
|
||||
, {
|
||||
"message": "[{\n\t\t\"name\":\t\"BOSE2 BT\",\n\t\t\"rssi\":\t-50\n\t}]",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_BT",
|
||||
"sent_time": 6259,
|
||||
"current_time": 6364
|
||||
}
|
||||
|
||||
|
||||
]
|
||||
@@ -0,0 +1,123 @@
|
||||
[
|
||||
{
|
||||
"message": "Save Success",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_SYSTEM",
|
||||
"sent_time": 14084,
|
||||
"current_time": 16958
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Initializing...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 14110,
|
||||
"current_time": 16958
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Starting OTA...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 14146,
|
||||
"current_time": 16958
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Downloading firmware\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 15208,
|
||||
"current_time": 16958
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Download success\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 18825,
|
||||
"current_time": 22219
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"New version is : mock version \",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 18849,
|
||||
"current_time": 22220
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Formatting OTA partition\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 18850,
|
||||
"current_time": 22220
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (1/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 22217,
|
||||
"current_time": 22220
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (5/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 29896,
|
||||
"current_time": 29902
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (7/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 33395,
|
||||
"current_time": 33408
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (9/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 36843,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Erasing flash complete.\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 39463,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":5}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 41862,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":10}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 44003,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":40}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 56678,
|
||||
"current_time": 65185
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":70}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 69407,
|
||||
"current_time": 77858
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":95}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 80010,
|
||||
"current_time": 82592
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":100}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 82084,
|
||||
"current_time": 82592
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Success!\",\"ota_pct\":100}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 119255,
|
||||
"current_time": 121838
|
||||
}
|
||||
|
||||
]
|
||||
@@ -0,0 +1,21 @@
|
||||
[{
|
||||
"message": "{\"ota_dsc\":\"Initializing...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 119203,
|
||||
"current_time": 121837
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Starting OTA...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 119255,
|
||||
"current_time": 121838
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Error: Failed to execute HTTP download. ERROR\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_ERROR",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 121954,
|
||||
"current_time": 124911
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,117 @@
|
||||
[
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Initializing...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 14110,
|
||||
"current_time": 16958
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Starting OTA...\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 14146,
|
||||
"current_time": 16958
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"New version is : mock version \",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 18849,
|
||||
"current_time": 22220
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Formatting OTA partition\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 18850,
|
||||
"current_time": 22220
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (1/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 22217,
|
||||
"current_time": 22220
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (5/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 29896,
|
||||
"current_time": 29902
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (7/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 33395,
|
||||
"current_time": 33408
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Erasing flash (9/11)\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 36843,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Erasing flash complete.\",\"ota_pct\":0}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 39463,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":5}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 41862,
|
||||
"current_time": 54597
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":25}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 50307,
|
||||
"current_time": 54598
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":30}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 52455,
|
||||
"current_time": 54598
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":35}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 54603,
|
||||
"current_time": 65184
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":55}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 63042,
|
||||
"current_time": 65185
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":60}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 65190,
|
||||
"current_time": 77858
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":95}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 80010,
|
||||
"current_time": 82592
|
||||
}, {
|
||||
"message": "{\"ota_dsc\":\"Writing binary file\",\"ota_pct\":100}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 82084,
|
||||
"current_time": 82592
|
||||
},
|
||||
{
|
||||
"message": "{\"ota_dsc\":\"Success!\",\"ota_pct\":100}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_OTA",
|
||||
"sent_time": 119255,
|
||||
"current_time": 121838
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,90 @@
|
||||
[{
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":184520,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":3468,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":2,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 61257,
|
||||
"current_time": 147316
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":3468,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 71255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 81256,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 91255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 101255,
|
||||
"current_time": 147317
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":98,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 111255,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183992,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 121256,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183872,\"free_spiram\":4048488,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 131255,
|
||||
"current_time": 147318
|
||||
}, {
|
||||
"message": "{\"free_iram\":190232,\"min_free_iram\":183872,\"free_spiram\":4048492,\"min_free_spiram\":4026220,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":400,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":97,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":1580,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":0,\"minstk\":708,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":3436,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 141256,
|
||||
"current_time": 147319
|
||||
},
|
||||
{
|
||||
"message": "Info Message",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_SYSTEM",
|
||||
"sent_time": 3519,
|
||||
"current_time": 24674
|
||||
},
|
||||
{
|
||||
"message": "Warning Message",
|
||||
"type": "MESSAGING_WARNING",
|
||||
"class": "MESSAGING_CLASS_SYSTEM",
|
||||
"sent_time": 3519,
|
||||
"current_time": 24674
|
||||
},
|
||||
{
|
||||
"message": "Warning Message",
|
||||
"type": "MESSAGING_ERROR",
|
||||
"class": "MESSAGING_CLASS_SYSTEM",
|
||||
"sent_time": 3519,
|
||||
"current_time": 24674
|
||||
},
|
||||
{
|
||||
"message": "{\"free_iram\":194144,\"min_free_iram\":185048,\"free_spiram\":4061372,\"min_free_spiram\":4050012,\"ntasks\":13,\"tasks\":[]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 11201,
|
||||
"current_time": 24674
|
||||
}, {
|
||||
"message": "{\"free_iram\":193848,\"min_free_iram\":185048,\"free_spiram\":4049576,\"min_free_spiram\":4049576,\"ntasks\":13,\"tasks\":[{\"cpu\":0,\"minstk\":480,\"bprio\":1,\"cprio\":1,\"nme\":\"Tmr Svc\",\"st\":1,\"num\":8},{\"cpu\":99,\"minstk\":1000,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE1\",\"st\":1,\"num\":7},{\"cpu\":98,\"minstk\":992,\"bprio\":0,\"cprio\":0,\"nme\":\"IDLE0\",\"st\":1,\"num\":6},{\"cpu\":0,\"minstk\":2184,\"bprio\":18,\"cprio\":18,\"nme\":\"tiT\",\"st\":2,\"num\":12},{\"cpu\":0,\"minstk\":1948,\"bprio\":5,\"cprio\":5,\"nme\":\"console\",\"st\":2,\"num\":18},{\"cpu\":0,\"minstk\":528,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc0\",\"st\":2,\"num\":2},{\"cpu\":0,\"minstk\":676,\"bprio\":20,\"cprio\":20,\"nme\":\"sys_evt\",\"st\":2,\"num\":13},{\"cpu\":0,\"minstk\":2096,\"bprio\":5,\"cprio\":5,\"nme\":\"wifi_manager\",\"st\":2,\"num\":15},{\"cpu\":0,\"minstk\":3468,\"bprio\":22,\"cprio\":22,\"nme\":\"esp_timer\",\"st\":2,\"num\":1},{\"cpu\":0,\"minstk\":2524,\"bprio\":5,\"cprio\":5,\"nme\":\"httpd\",\"st\":2,\"num\":16},{\"cpu\":1,\"minstk\":868,\"bprio\":23,\"cprio\":23,\"nme\":\"wifi\",\"st\":2,\"num\":14},{\"cpu\":0,\"minstk\":536,\"bprio\":24,\"cprio\":24,\"nme\":\"ipc1\",\"st\":2,\"num\":3},{\"cpu\":0,\"minstk\":7244,\"bprio\":1,\"cprio\":1,\"nme\":\"telnet\",\"st\":2,\"num\":17}]}",
|
||||
"type": "MESSAGING_INFO",
|
||||
"class": "MESSAGING_CLASS_STATS",
|
||||
"sent_time": 21267,
|
||||
"current_time": 24674
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"project_name": "recovery",
|
||||
"version": "custom.build",
|
||||
"recovery": 1,
|
||||
"Jack": "1",
|
||||
"Voltage": 0,
|
||||
"disconnect_count": 0,
|
||||
"avg_conn_time": 0,
|
||||
"is_i2c_locked": false,
|
||||
"urc": 0,
|
||||
"bt_status": 0,
|
||||
"ssid": "MyTestSSID",
|
||||
"ip": "192.168.10.225",
|
||||
"netmask": "255.255.255.0",
|
||||
"gw": "192.168.10.1"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"project_name": "SqueezeAMP",
|
||||
"version": "local.500.cmake-master",
|
||||
"recovery": 1,
|
||||
"Jack": "1",
|
||||
"Voltage": 0,
|
||||
"disconnect_count": 0,
|
||||
"avg_conn_time": 0,
|
||||
"is_i2c_locked": false,
|
||||
"urc": 0,
|
||||
"bt_status": 0,
|
||||
"bt_sub_status": 0,
|
||||
"rssi": -59,
|
||||
"ssid": "MyTestSSID",
|
||||
"ip": "192.168.10.225",
|
||||
"netmask": "255.255.255.0",
|
||||
"gw": "192.168.10.1",
|
||||
"lms_cport": 9090,
|
||||
"lms_port": 9100,
|
||||
"lms_ip": "127.0.0.1",
|
||||
"if": "eth",
|
||||
"platform_name": "SqueezeAmp",
|
||||
"mock_plugin_has_proxy": "x",
|
||||
"mock_fail_fw_update":"",
|
||||
"mock_fail_recovery":"",
|
||||
"mock_old_recovery":"",
|
||||
"depth": 16
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"urc": {
|
||||
"Wifi Connection OK": 0,
|
||||
"Wifi Failed Connect Attempt": 1,
|
||||
"WiFi User Disconnect": 2,
|
||||
"WiFi Lost Connection": 3,
|
||||
"Wifi update failed attempt and restore" : 4,
|
||||
"Ethernet Connected": 5
|
||||
},
|
||||
"bt_status": {
|
||||
"Idle": 0,
|
||||
"Discovering": 1,
|
||||
"Discovered": 2,
|
||||
"Unconnected": 3,
|
||||
"Connecting": 4,
|
||||
"Connected": 5,
|
||||
"Disconnecting": 6
|
||||
},
|
||||
"bt_sub_status": {
|
||||
"Default": 0,
|
||||
"Connected - Starting": 1,
|
||||
"Connected - Started": 2,
|
||||
"Connected - Pause": 3,
|
||||
"Connected - Stop": 4
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"name": "squeezelite-esp32",
|
||||
"version": "0.5.0",
|
||||
"main": "src/index.html",
|
||||
"repository": "git@github.com:sle118/squeezelite-esp32.git",
|
||||
"author": "Sebastien L",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"prod": "webpack serve --open --mode=production",
|
||||
"build": "webpack --mode=production ",
|
||||
"stats": "webpack --env ANALYZE_SIZE=1 --mode=production ",
|
||||
"watch": "webpack --progress --watch --mode=development ",
|
||||
"dev": "webpack serve --open --mode=development"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.16.12",
|
||||
"@babel/plugin-transform-runtime": "^7.16.10",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@babel/preset-typescript": "^7.16.7",
|
||||
"@squoosh/lib": "^0.4.0",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"babel": "^6.23.0",
|
||||
"babel-loader": "^8.2.3",
|
||||
"babel-runtime": "^6.26.0",
|
||||
"clean-webpack-plugin": "^4.0.0",
|
||||
"commander": "^8.3.0",
|
||||
"compression-webpack-plugin": "^9.2.0",
|
||||
"copy-webpack-plugin": "^10.2.1",
|
||||
"css-loader": "^6.5.1",
|
||||
"css-minimizer-webpack-plugin": "^3.4.1",
|
||||
"ejs-loader": "^0.5.0",
|
||||
"es6-promise": "^4.2.8",
|
||||
"file-loader": "^6.2.0",
|
||||
"glob": "^7.2.0",
|
||||
"glob-all": "^3.2.1",
|
||||
"google-fonts-webpack-plugin": "^0.4.4",
|
||||
"html-loader": "^3.1.0",
|
||||
"html-minimizer-webpack-plugin": "^3.5.0",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"image-minimizer-webpack-plugin": "^3.2.3",
|
||||
"imagemin": "^8.0.1",
|
||||
"imagemin-gifsicle": "^7.0.0",
|
||||
"imagemin-jpegtran": "^7.0.0",
|
||||
"imagemin-mozjpeg": "^10.0.0",
|
||||
"imagemin-optipng": "^8.0.0",
|
||||
"imagemin-pngquant": "^9.0.2",
|
||||
"imagemin-svgo": "^10.0.1",
|
||||
"js-cookie": "^3.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"lodash-webpack-plugin": "^0.11.6",
|
||||
"mini-css-extract-plugin": "^2.5.2",
|
||||
"node-sass": "^7.0.1",
|
||||
"open": "^9.1.0",
|
||||
"postcss": "^8.4.5",
|
||||
"postcss-loader": "^6.2.1",
|
||||
"purgecss-webpack-plugin": "^4.1.3",
|
||||
"purgecss-whitelister": "^2.4.0",
|
||||
"purify-css": "^1.2.5",
|
||||
"purifycss-webpack": "^0.7.0",
|
||||
"remixicon": "^2.5.0",
|
||||
"sass-loader": "^12.4.0",
|
||||
"string-argv": "^0.3.1",
|
||||
"style-loader": "^3.3.1",
|
||||
"terser-webpack-plugin": "^5.3.0",
|
||||
"ts-loader": "^9.2.6",
|
||||
"typescript": "^4.5.5",
|
||||
"webpack": "^5.67.0",
|
||||
"webpack-bundle-analyzer": "^4.8.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^4.7.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.16.7",
|
||||
"async-mutex": "^0.3.2",
|
||||
"bootstrap": "^5.1.3",
|
||||
"bootswatch": "^5.3.2",
|
||||
"jquery": "^3.6.0",
|
||||
"npm": "^10.1.0",
|
||||
"optipng-bin": "^9.0.0",
|
||||
"popper.js": "^1.16.1",
|
||||
"webpack-visualizer-plugin": "^0.1.11",
|
||||
"webpack-visualizer-plugin2": "^1.0.0"
|
||||
},
|
||||
"keywords": [
|
||||
"webppack4",
|
||||
"sass",
|
||||
"bootstrap4",
|
||||
"jquery",
|
||||
"popperjs",
|
||||
"livereload",
|
||||
"dev-server",
|
||||
"font-awesome",
|
||||
"es-lint",
|
||||
"typescript",
|
||||
"line-awesome"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
{
|
||||
"name": "squeezelite-esp32",
|
||||
"version": "0.5.0",
|
||||
"main": "src/index.html",
|
||||
"repository": "git@github.com:sle118/squeezelite-esp32.git",
|
||||
"author": "Andy K., Sebastien",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --open --config webpack/webpack.dev.js",
|
||||
"build": "webpack --config webpack/webpack.prod.js",
|
||||
"prod": "webpack-dev-server --open --config webpack/webpack.prod.js"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@popperjs/core": "^2.11.2",
|
||||
"@types/bootstrap": "^5.1.8",
|
||||
"animate.css": "^4.1.1",
|
||||
"bootstrap": "^5.1.3",
|
||||
"bootswatch": "^5.1.3",
|
||||
"commander": "^8.3.0",
|
||||
"expose-loader": "^3.1.0",
|
||||
"hamburgers": "^1.1.3",
|
||||
"jquery": "^3.6.0",
|
||||
"line-awesome": "^1.3.0",
|
||||
"lodash": "^4.17.21",
|
||||
"perfect-scrollbar": "^1.5.3",
|
||||
"popper": "^1.0.1",
|
||||
"react": "^17.0.2",
|
||||
"remixicon": "^2.5.0",
|
||||
"string-argv": "^0.3.1",
|
||||
"stylelint-config-standard": "^24.0.0",
|
||||
"svgo": "^2.8.0",
|
||||
"underscore": "^1.13.2",
|
||||
"webpack-icons-installer": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.16.7",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
|
||||
"@babel/plugin-proposal-optional-chaining": "^7.16.7",
|
||||
"@babel/plugin-transform-runtime": "^7.16.8",
|
||||
"@babel/preset-env": "^7.16.8",
|
||||
"@babel/preset-typescript": "^7.16.7",
|
||||
"@fullhuman/postcss-purgecss": "^4.1.3",
|
||||
"@types/lodash": "^4.14.178",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"babel-loader": "^8.2.3",
|
||||
"babel-preset-minify": "^0.5.1",
|
||||
"body-parser": "^1.19.1",
|
||||
"browser-sync": "^2.27.7",
|
||||
"browser-sync-webpack-plugin": "^2.3.0",
|
||||
"browserlist": "^1.0.1",
|
||||
"compression-webpack-plugin": "^9.2.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "^6.5.1",
|
||||
"cssnano": "^5.0.15",
|
||||
"eslint": "^8.6.0",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"eslint-webpack-plugin": "^3.1.1",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"favicons-webpack-plugin": "5.0.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"glob": "^7.2.0",
|
||||
"glob-all": "^3.2.1",
|
||||
"hook-shell-script-webpack-plugin": "^0.1.4",
|
||||
"html-loader": "^3.1.0",
|
||||
"html-webpack-plugin": "^5.5.0",
|
||||
"image-minimizer-webpack-plugin": "^3.2.2",
|
||||
"image-webpack-loader": "^8.1.0",
|
||||
"imagemin": "^8.0.1",
|
||||
"imagemin-gifsicle": "^7.0.0",
|
||||
"imagemin-mozjpeg": "^10.0.0",
|
||||
"imagemin-pngquant": "^9.0.2",
|
||||
"imagemin-svgo": "^10.0.1",
|
||||
"imagemin-webpack-plugin": "^2.4.2",
|
||||
"img-loader": "^4.0.0",
|
||||
"install": "^0.13.0",
|
||||
"less": "^4.1.2",
|
||||
"lodash-webpack-plugin": "^0.11.6",
|
||||
"mini-css-extract-plugin": "^2.4.6",
|
||||
"miragejs": "^0.1.43",
|
||||
"node-sass": "^7.0.1",
|
||||
"offline-plugin": "^5.0.7",
|
||||
"on-build-webpack": "^0.1.0",
|
||||
"optimize-css-assets-webpack-plugin": "^6.0.1",
|
||||
"postcss-loader": "^6.2.1",
|
||||
"preload-webpack-plugin": "^2.3.0",
|
||||
"promise": "^8.1.0",
|
||||
"purgecss-webpack-plugin": "^4.1.3",
|
||||
"purify-css": "^1.2.5",
|
||||
"purifycss-webpack": "^0.7.0",
|
||||
"raw-loader": "^4.0.2",
|
||||
"resolve-url-loader": "^4.0.0",
|
||||
"sass-loader": "^12.4.0",
|
||||
"script-ext-html-webpack-plugin": "^2.1.5",
|
||||
"source-map-loader": "^3.0.1",
|
||||
"style-loader": "^3.3.1",
|
||||
"stylelint": "^14.2.0",
|
||||
"stylelint-config-recommended": "^6.0.0",
|
||||
"stylelint-webpack-plugin": "^3.1.0",
|
||||
"svg-sprite-loader": "^6.0.11",
|
||||
"svg-transform-loader": "^2.0.13",
|
||||
"svgo-loader": "^3.0.0",
|
||||
"terser-webpack-plugin": "^5.3.0",
|
||||
"ts-loader": "^9.2.6",
|
||||
"tslint": "^5.20.1",
|
||||
"tslint-webpack-plugin": "^2.1.1",
|
||||
"typescript": "^4.5.4",
|
||||
"url-loader": "^4.1.1",
|
||||
"webpack": "^5.65.0",
|
||||
"webpack-bundle-analyzer": "^4.5.0",
|
||||
"webpack-cli": "^4.9.1",
|
||||
"webpack-dev-server": "^4.7.3",
|
||||
"webpack-merge": "^5.8.0",
|
||||
"xml-loader": "^1.2.1"
|
||||
},
|
||||
"keywords": [
|
||||
"webppack4",
|
||||
"sass",
|
||||
"bootstrap4",
|
||||
"jquery",
|
||||
"popperjs",
|
||||
"livereload",
|
||||
"dev-server",
|
||||
"font-awesome",
|
||||
"es-lint",
|
||||
"typescript",
|
||||
"line-awesome"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
module.exports = {
|
||||
|
||||
};
|
||||
@@ -0,0 +1,37 @@
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive On
|
||||
ExpiresDefault "access plus 1 days"
|
||||
ExpiresByType text/html "access plus 5 minutes"
|
||||
ExpiresByType text/xml "access plus 6 hours"
|
||||
ExpiresByType text/css "access plus 1 weeks"
|
||||
ExpiresByType text/javascript "access plus 1 weeks"
|
||||
ExpiresByType application/javascript "access plus 1 weeks"
|
||||
ExpiresByType application/x-javascript "access plus 1 weeks"
|
||||
ExpiresByType text/ecmascript "access plus 1 weeks"
|
||||
ExpiresByType image/gif "access plus 1 years"
|
||||
ExpiresByType image/png "access plus 1 years"
|
||||
ExpiresByType image/jpeg "access plus 1 years"
|
||||
ExpiresByType image/ico "access plus 1 years"
|
||||
ExpiresByType image/icon "access plus 1 years"
|
||||
ExpiresByType image/x-icon "access plus 1 years"
|
||||
ExpiresByType video/x-flv "access plus 1 years"
|
||||
ExpiresByType video/quicktime "access plus 1 years"
|
||||
ExpiresByType application/x-shockwave-flash "access plus 1 years"
|
||||
ExpiresByType application/pdf "access plus 1 years"
|
||||
</IfModule>
|
||||
|
||||
# gzip Compression if availiable
|
||||
AddEncoding gzip .gzip
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/plain
|
||||
AddOutputFilterByType DEFLATE text/html
|
||||
AddOutputFilterByType DEFLATE text/xml
|
||||
AddOutputFilterByType DEFLATE text/css
|
||||
AddOutputFilterByType DEFLATE text/javascript
|
||||
AddOutputFilterByType DEFLATE application/xml
|
||||
AddOutputFilterByType DEFLATE application/xhtml+xml
|
||||
AddOutputFilterByType DEFLATE application/rss+xml
|
||||
AddOutputFilterByType DEFLATE application/javascript
|
||||
AddOutputFilterByType DEFLATE application/x-javascript
|
||||
AddOutputFilterByType DEFLATE application/x-shockwave-flash
|
||||
</IfModule>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 634 B |
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,590 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<link href="https://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet">
|
||||
<title></title>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="d-flex flex-column">
|
||||
<header class="navbar navbar-expand-sm navbar-dark bg-primary sticky-top border-bottom border-dark" id="mainnav">
|
||||
<a class="navbar-brand" id="navtitle" href="#"></a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="nav navbar-nav mr-auto" role="tablist">
|
||||
<li class="nav-item"><a class="nav-link active" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-wifi">WiFi</a></li>
|
||||
<li class="nav-item omsg"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-syslog">Status<span class="badge badge-pill badge-success" id="msgcnt"></span></a>
|
||||
</li>
|
||||
<li class="nav-item orec"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-cfg-audio">Audio</a></li>
|
||||
<li class="nav-item orec"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-cfg-syst">System</a></li>
|
||||
<li class="nav-item orec"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-cfg-hw">Hardware</a></li>
|
||||
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-cfg-fw">Updates</a></li>
|
||||
<div class="dropdown-divider"></div>
|
||||
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-nvs">NVS Editor</a></li>
|
||||
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-commands">Advanced</a></li>
|
||||
<li class="nav-item"><a class="nav-link" data-bs-toggle="tab" aria-controls="profile" role="tab"
|
||||
href="#tab-credits">Credits</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="info navbar-right" style="display: inline-flex;">
|
||||
<span class="recovery_element material-icons " style="color:orange; display: none"
|
||||
aria-label="🛑">system_update_alt</span>
|
||||
<span id="battery" class="material-icons" style="fill:white; display: none"
|
||||
aria-label="🔋">battery_full</span>
|
||||
<span id="o_jack" class="material-icons" style="fill:white; display: none" aria-label="🎧">headphones</span>
|
||||
<span id="s_airplay" class="material-icons" style="fill:white; display: none" aria-label="🍎">airplay</span>
|
||||
<em id="s_cspot" class="fab fa-spotify" style="fill:white; display: inline"></em>
|
||||
<span data-bs-toggle="tooltip" id="o_type" data-bs-placement="top" title="">
|
||||
<span id="o_bt" class="material-icons" style="fill:white; display: none" aria-label="">bluetooth</span>
|
||||
<span id="o_spdif" class="material-icons" style="fill:white; display: none"
|
||||
aria-label="">graphic_eq</span>
|
||||
<span id="o_i2s" class="material-icons" style="fill:white; display: none" aria-label="🔈">speaker</span>
|
||||
</span>
|
||||
<span id="ethernet" class="material-icons if_eth" style="fill:white; display: none"
|
||||
aria-label="ETH">cable</span>
|
||||
<span id="wifiStsIcon" class="material-icons if_wifi" style="fill:white; display: none"
|
||||
aria-label=""></span>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
<main role="main" class="flex-grow mt-1 mb-12" style="margin-bottom: 7rem;" id="content">
|
||||
<!-- Button trigger modal -->
|
||||
|
||||
<!-- Modal -->
|
||||
|
||||
<div class="modal" id="otadiv" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="fwProgressLabel">Upgrade Progress</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<span id="flash-status"></span>
|
||||
<div class="progress" id="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100"
|
||||
style="width:0%">
|
||||
0%
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="myTabContent" class="tab-content">
|
||||
|
||||
<div class="tab-pane fade" id="tab-cfg-hw"> </div>
|
||||
<div class="tab-pane fade" id="tab-cfg-syst"></div>
|
||||
<div class="tab-pane fade" id="tab-cfg-gen"></div>
|
||||
<div class="tab-pane fade" id="tab-cfg-fw">
|
||||
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">Software Updates</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover table-striped table-dark">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="border-bottom-0 pb-0" scope="col">Version</th>
|
||||
<th class="border-bottom-0 pb-0" scope="col">Date/Time</th>
|
||||
<th class="border-bottom-0 pb-0" scope="col">Platform</th>
|
||||
<th class="border-bottom-0 pb-0" scope="col">Branch</th>
|
||||
<th class="border-bottom-0 pb-0" scope="col">Bit Depth</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="border-top-0 pt-0" scope="col"><input class="form-control-sm upSrch"
|
||||
id="svrs" type="text" placeholder="search releases"></th>
|
||||
<th class="border-top-0 pt-0" scope="col"></th>
|
||||
<th class="border-top-0 pt-0" scope="col"><input class="form-control-sm upSrch"
|
||||
id="splf" type="text" placeholder="search platform"></th>
|
||||
<th class="border-top-0 pt-0" scope="col"><select class="form-control-sm upSrch"
|
||||
id="fwbranch">
|
||||
<option selected="">Choose FW branch</option>
|
||||
</select>
|
||||
<th class="border-top-0 pt-0" scope="col"><input class="form-control-sm upSrch"
|
||||
id="bits" type="text" placeholder="search bit depth"></th>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="rTable"></tbody>
|
||||
</table>
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-auto">
|
||||
<button type="button" id="chkUpdates" class="btn btn-info btn-sm">Check for
|
||||
updates</button>
|
||||
</div>
|
||||
<label class="col-auto col-form-label" for="fw-url-input">Firmware URL</label>
|
||||
<div class="col">
|
||||
<input type="text" class="form-control"
|
||||
placeholder="select entry from list or enter known url" id="fw-url-input">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button type="button" id='start-flash' data-bs-toggle="modal" data-bs-target="#uCnfrm"
|
||||
class="btn btn-warning btn-sm flact" style="display: none;">Flash Firmware</button>
|
||||
</div>
|
||||
|
||||
<div class="col-auto">
|
||||
<button id="btn_reboot_recovery" class="btn-warning ota_element"
|
||||
type="submit">Recovery</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal" id="uCnfrm">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Firmware Flash</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||
aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>Flash URL <span id="selectedFWURL" class="text-break"></span> to device?</p>
|
||||
</div>
|
||||
<div class="modal-footer ">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<button id="btn_flash" type="button" class="btn btn-warning"
|
||||
data-bs-dismiss="modal">Ok</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">Local Firmware Upload</div>
|
||||
<div class="card-body">
|
||||
<div id="uploaddiv" class="form-group row ">
|
||||
<label for="flashfilename" class="col-auto col-form-label">Local File</label>
|
||||
<div class="col">
|
||||
<input type="file" class="form-control-file" id="flashfilename"
|
||||
aria-describedby="fileHelp">
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class="buttons">
|
||||
<button type="button" class="btn btn-danger flact" id="fwUpload">Upload!</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="tab-pane fade" id="tab-nvs">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Key</th>
|
||||
<th scope="col">Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="nvsTable">
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="buttons">
|
||||
<button button id="btn_reboot" class="btn btn-primary" style="float:right"
|
||||
type="submit">Reboot</button>
|
||||
|
||||
<input id="save-nvs" type="button" class="btn btn-success" value="Commit">
|
||||
<input id="save-as-nvs" type="button" class="btn btn-success" value="Download config">
|
||||
<input id="load-nvs" type="button" class="btn btn-success" value="Load File">
|
||||
<input aria-describedby="fileHelp" id="nvsfilename" type="file" style="display:none">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade" id="tab-cfg-audio">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">Usage Templates</div>
|
||||
<div class="card-body">
|
||||
<fieldset class="form-group" id="output-tmpl">
|
||||
<label>Output</label><br>
|
||||
<div class="form-check form-check-inline">
|
||||
<label class="form-check-label">
|
||||
<input type="radio" class="form-check-input" name="output-tmpl" id="i2s">
|
||||
I2S Dac
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<label class="form-check-label">
|
||||
<input type="radio" class="form-check-input" name="output-tmpl" id="spdif">
|
||||
SPDIF
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<label class="form-check-label">
|
||||
<input type="radio" class="form-check-input" name="output-tmpl" id="bt">
|
||||
Bluetooth
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div id="options">
|
||||
<div class="form-group"><label for="cmd_opt_n">Set the player name</label><input
|
||||
type="text" class="form-control sqcmd" placeholder="name" id="cmd_opt_n"></div>
|
||||
<div class="form-group"><label for="cmd_opt_s">Server</label><input type="text"
|
||||
class="form-control sqcmd" placeholder="server[:port]" id="cmd_opt_s"></div>
|
||||
<div class="form-group"><label for="cmd_opt_b">Stream and Output buffer sizes (in
|
||||
Kbytes)</label><input type="text" class="form-control sqcmd"
|
||||
placeholder="stream:output" id="cmd_opt_b"></div>
|
||||
<div class="form-group"><label for="cmd_opt_c">Restrict codecs </label><input
|
||||
type="text" class="form-control sqcmd" placeholder="codec1,codec2"
|
||||
id="cmd_opt_c"><small class="form-text text-muted">Supported: flac,pcm,mp3,ogg
|
||||
(mad,mpg for specific mp3 codec)</small></div>
|
||||
<div class="form-group"><label for="cmd_opt_C">Ouput device close timeout</label><input
|
||||
type="text" class="form-control sqcmd" placeholder="timeout"
|
||||
id="cmd_opt_C"><small class="form-text text-muted">Close output device after
|
||||
timeout seconds, default
|
||||
is to keep it open while player is 'on'</small></div>
|
||||
<div class="form-group"><label for="cmd_opt_d">Set logging level</label><input
|
||||
type="text" class="form-control sqcmd" placeholder="log=level"
|
||||
id="cmd_opt_d"><small class="form-text text-muted">Logs:
|
||||
all|slimproto|stream|decode|output, level:
|
||||
info|debug|sdebug</small></div>
|
||||
<div class="form-group"><label for="cmd_opt_e">Explicitly exclude native support of one
|
||||
or more codecs</label><input type="text" class="form-control sqcmd"
|
||||
placeholder="codec1,codec2" id="cmd_opt_e"><small
|
||||
class="form-text text-muted">Supported: flac,pcm,mp3,ogg (mad,mpg for specific
|
||||
mp3 codec)</small></div>
|
||||
<div class="form-group"><label for="cmd_opt_m">Set mac address</label><input type="text"
|
||||
class="form-control sqcmd" placeholder="mac addr" id="cmd_opt_m"><small
|
||||
class="form-text text-muted">Format: ab:cd:ef:12:34:56</small></div>
|
||||
<div class="form-group"><label for="cmd_opt_r">Sample rates supported, allows output to
|
||||
be off when squeezelite is started</label><input type="text"
|
||||
class="form-control sqcmd" placeholder="rates" id="cmd_opt_r"><small
|
||||
class="form-text text-muted"><maxrate>|<minrate><maxrate><rate1><rate2><rate3></small>
|
||||
</div>
|
||||
|
||||
<div class="form-group hide" id="cmd_opt_R">
|
||||
<label>Resample</label><br>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="resample" id="resample_none"
|
||||
suffix="" checked aint="false">
|
||||
<label class="form-check-label" for="resampleNone">No resampling</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="resample" id="resample"
|
||||
suffix=' -R' aint="false">
|
||||
<label class="form-check-label" for="resampleNone">Default</label>
|
||||
</div>
|
||||
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="resample" id="resample_b"
|
||||
suffix=' -R -u b' aint="true">
|
||||
<label class="form-check-label" for="resampleBasic">Basic linear
|
||||
interpolation</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="resample" id="resample_l"
|
||||
suffix=' -R -u l' aint="true">
|
||||
<label class="form-check-label" for="resample13Taps">13 taps</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="radio" name="resample" id="resample_m"
|
||||
suffix=' -R -u m' aint="true">
|
||||
<label class="form-check-label" for="resample21Taps">21 taps</label>
|
||||
</div>
|
||||
<div class="form-check form-check-inline">
|
||||
<input class="form-check-input" type="checkbox" name="interpolate"
|
||||
id="resample_i" suffix=":i">
|
||||
<label class="form-check-label" for="interpolate">Interpolate filter
|
||||
coefficients</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group"><label for="cmd_opt_Z">Report rate to server in helo as the
|
||||
maximum sample rate we can support</label><input type="text"
|
||||
class="form-control" placeholder="rate" id="cmd_opt_Z"></div>
|
||||
<div class="form-group">
|
||||
<div class="form-check">
|
||||
<label class="form-check-label">
|
||||
<input class="form-check-input" type="checkbox" id="cmd_opt_W" value=""
|
||||
checked="">
|
||||
Read wave and aiff format from header, ignore server parameters
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
||||
<div class="form-check">
|
||||
<label class="form-check-label">
|
||||
<input class="form-check-input" type="checkbox" id="disable-squeezelite" value="" >
|
||||
Disable Squeezelite
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: 16px;">
|
||||
<div class="toast hide" role="alert" aria-live="assertive" aria-atomic="true"
|
||||
id="toast_cfg-audio-tmpl">
|
||||
<div class="toast-header"><strong class="mr-auto">Result</strong>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="toast"
|
||||
aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="toast-body" id="msg_cfg-audio-tmpl"></div>
|
||||
</div>
|
||||
</div>
|
||||
<button id="save-autoexec1" type="submit" class="btn btn-info"
|
||||
cmdname="cfg-audio-tmpl">Save</button>
|
||||
<button id="commit-autoexec1" type="submit" class="btn btn-warning"
|
||||
cmdname="cfg-audio-tmpl">Apply</button>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade active show" id="tab-wifi">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">WiFi Status</div>
|
||||
|
||||
<div class="card-body if_eth" style="display: none">
|
||||
<h2>Connected to Ethernet</h2>
|
||||
<p>WiFi is inactive while connected to a wired network.
|
||||
</div>
|
||||
<div class="card-body if_wifi" style="display: none">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Joined</th>
|
||||
<th scope="col">Name</th>
|
||||
<th scope="col">Signal</th>
|
||||
<th scope="col">Security</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="wifiTable"></tbody>
|
||||
</table>
|
||||
<button type="button" id="updateAP" class="btn btn-info btn-sm">Scan</button>
|
||||
|
||||
</div>
|
||||
<div class="modal" id="WiFiDisconnectConfirm">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title">Disconnect</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||
aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>Disconnect from network? After disconnecting, the system won't be accessible from
|
||||
the current address and will expose itself as access point name <span
|
||||
id="apName"></span> with password <span id="apPass"></span> </p>
|
||||
</div>
|
||||
<div class="modal-footer connecting-success connecting-status">
|
||||
<button type="button" class="btn btn-secondary"
|
||||
data-bs-dismiss="modal">Cancel</button>
|
||||
<button id="btn_disconnect" type="button" class="btn btn-warning"
|
||||
data-bs-dismiss="modal">Ok</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal" id="WifiConnectDialog" aria-hidden="true">
|
||||
<div class="modal-dialog ">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title connecting connecting-init connecting-fail">Connect to WiFi
|
||||
</h5>
|
||||
<h5 class="modal-title connecting-status connecting-success">Status</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||
aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<fieldset class="connecting-init connecting-fail">
|
||||
<div class="form-group"><label for="manual_ssid">Wifi Name</label><input
|
||||
type="text" class="form-control" placeholder="Enter Name"
|
||||
id="manual_ssid"></div>
|
||||
<div class="form-group"><label for="manual_pwd">Password</label><input
|
||||
type="password" class="form-control" placeholder="Enter Name"
|
||||
id="manual_pwd"></div>
|
||||
</fieldset>
|
||||
<div id="connect-wait" class="connecting">
|
||||
<div>Connecting to <span id="ssid-wait"></span> </div>
|
||||
<div>
|
||||
You may lose wifi access while the esp32 recalibrates
|
||||
its radio. Please
|
||||
wait until your device automatically reconnects. This can take up to
|
||||
30s.
|
||||
</div>
|
||||
</div>
|
||||
<div id="connect-success" class="connecting-success connecting-status">
|
||||
<div> Connected to Access Point : <span id="connectedToSSID"></span></div>
|
||||
<div> Device IP address : <span id="ipAddress"></span></div>
|
||||
<div>Subnet Mask:<span id="netmask"></span></div>
|
||||
<div>Default Gateway:<span id="gateway"></span></div>
|
||||
</div>
|
||||
<div id="connect-fail" class="connecting-fail">
|
||||
<h3 class="text-error">Connection failed</h3>
|
||||
<p>Please double-check wifi password if any and make sure the access point has
|
||||
good signal.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer ">
|
||||
<button type="button"
|
||||
class="btn btn-secondary connecting-init connecting-fail connecting"
|
||||
data-bs-dismiss="modal">Close</button>
|
||||
<button type="button" id="btnJoin"
|
||||
class="btn btn-primary connecting-init connecting-fail">Join</button>
|
||||
<button type="button" class="connecting btn btn-primary" disabled>
|
||||
<span class="spinner-border spinner-border-sm" role="status"
|
||||
aria-hidden="true"></span>
|
||||
<span class="sr-only">Connecting...</span></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer connecting-success connecting-status justify-content-between"
|
||||
style=""><button type="button" class="btn btn-primary"
|
||||
data-bs-dismiss="modal">Ok</button><button type="button" class="btn btn-danger"
|
||||
data-bs-toggle="modal" data-bs-dismiss="modal"
|
||||
data-bs-target="#WiFiDisconnectConfirm">Disconnect</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-pane fade " id="tab-commands">
|
||||
<fieldset id="commands-list"></fieldset>
|
||||
</div>
|
||||
<!-- Status -->
|
||||
<div class="tab-pane fade " id="tab-syslog">
|
||||
<div class="card border-primary mb-3">
|
||||
<div class="card-header">Logs</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Timestamp</th>
|
||||
<th scope="col">Message</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="syslogTable">
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="buttons">
|
||||
<input id="clear-syslog" type="button" class="btn btn-danger btn-sm" value="Clear" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card border-primary mb-3" id="pins" style="display: none;">
|
||||
<div class="card-header">Pin Assignments</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Device</th>
|
||||
<th scope="col">Pin Name</th>
|
||||
<th scope="col">GPIO Number</th>
|
||||
<th scope="col">Type</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="gpiotable"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card border-primary mb-3" style="visibility: collapse;" id="tasks_sect">
|
||||
<div class="card-header">Tasks</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover">
|
||||
<!-- console.log(msg_time.toLocaleString() + '\tname' + '\tcpu' + '\tstate' + '\tminstk' + '\tbprio' + '\tcprio' + '\tnum'); -->
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Task Name</th>
|
||||
<th scope="col">CPU</th>
|
||||
<th scope="col">State</th>
|
||||
<th scope="col">Min Stack</th>
|
||||
<th scope="col">Base Priority</th>
|
||||
<th scope="col">Cur Priority</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tasks"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- syslog -->
|
||||
<div class="tab-pane fade " id="tab-credits">
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">Credits</div>
|
||||
<div class="card-body">
|
||||
<p><strong><a
|
||||
href="https://github.com/sle118/squeezelite-esp32">squeezelite-esp32</a><br></strong>©
|
||||
2020, philippe44, sle118, daduke<br /><a href="https://opensource.org/licenses/MIT">This
|
||||
software is released under the MIT License.</a></p>
|
||||
<p>
|
||||
This app would not be possible without the following libraries:
|
||||
</p>
|
||||
<ul>
|
||||
<li>squeezelite, © 2012-2019, Adrian Smith and Ralph Irving. Licensed under the GPL
|
||||
License.</li>
|
||||
<li>esp32-wifi-manager, © 2017-2019, Tony Pottier. Licensed under the MIT License.</li>
|
||||
<li>SpinKit, © 2015, Tobias Ahlin. Licensed under the MIT License.</li>
|
||||
<li>jQuery, The jQuery Foundation. Licensed under the MIT License.</li>
|
||||
<li>cJSON, © 2009-2017, Dave Gamble and cJSON contributors. Licensed under the MIT
|
||||
License.
|
||||
</li>
|
||||
<li>esp32-rotary-encoder, © 2011-2019, David Antliff and Ben Buxton. Licensed under the
|
||||
GPL
|
||||
License.</li>
|
||||
<li>tarablessd1306, © 2017-2018, Tara Keeling. Licensed under the MIT license.</li>
|
||||
<li>CSpot, © 2020 feelfreelinux & alufers. Licensed under the GPL License</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card mb-3">
|
||||
<div class="card-header">Extras/Overrides</div>
|
||||
<div class="card-body">
|
||||
<fieldset>
|
||||
<div class="form-check">
|
||||
<label class="form-check-label"><input type="checkbox" id="show-nvs"
|
||||
class="form-check-input " value="">Show NVS Editor</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div class="form-check">
|
||||
<label class="form-check-label"><input type="checkbox" id="show-commands"
|
||||
class="form-check-input " value="">Show Advanced Commands</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- credits -->
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
<div class="fixed-bottom d-flex justify-content-between border-top border-dark p-3 bg-primary">
|
||||
<span class="text-center" id="foot-fw"></span><button class="btn-warning ota_element " id="reboot_nav"
|
||||
type="submit" style="display: none;">Reboot</button>
|
||||
<button class="btn-warning recovery_element" id="reboot_ota_nav" type="submit" style="display: none;">Exit
|
||||
Recovery</button><span class="text-center" id="foot-if"></span>
|
||||
</div>
|
||||
|
||||
</footer>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
import 'bootstrap';
|
||||
import './sass/main.scss';
|
||||
import './assets/images/favicon-32x32.png';
|
||||
import './js/custom.js';
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,135 @@
|
||||
let sd = {};
|
||||
let rf=false;
|
||||
function getStatus() {
|
||||
const config = {};
|
||||
$(`#valuesTable input:text, #valuesTable input:checked`).each(function(_index, entry) {
|
||||
switch (entry.attributes.dtype.value) {
|
||||
case 'string':
|
||||
config[entry.name] = entry.value;
|
||||
break;
|
||||
case 'number':
|
||||
config[entry.name] = Number(entry.value);
|
||||
break;
|
||||
case 'boolean':
|
||||
config[entry.name] = entry.value=='true';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
return config;
|
||||
}
|
||||
|
||||
// function getOptions(entry) {
|
||||
// let output='';
|
||||
// for (const property in entry) {
|
||||
// output+=`<option value="${entry[property]}">${property}</option>`;
|
||||
// }
|
||||
// return output;
|
||||
// }
|
||||
function getRadioButton(entry){
|
||||
let output='';
|
||||
for (const property in sd[entry]) {
|
||||
output+=`
|
||||
<div class="custom-control custom-radio">
|
||||
<input type="radio" class="custom-control-input" id="${entry}_${sd[entry][property]}" name="${entry}" value="${sd[entry][property]}" dtype='${typeof(sd[entry][property])}'>
|
||||
<label class="custom-control-label" for="${entry}_${sd[entry][property]}">${property}</label>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
return output;
|
||||
|
||||
}
|
||||
|
||||
var refreshStatus = function() {
|
||||
if(Object.keys(sd).length>0){
|
||||
if(rf) return;
|
||||
rf=true;
|
||||
$.getJSON('/status.json', function(data) {
|
||||
for (const property in data) {
|
||||
const val = data[property];
|
||||
let input = $(`#val_${property}, #valuesTable input[name="${property}"]`) ;
|
||||
if(input.length>0){
|
||||
if(input.is(':radio') ){
|
||||
$(`#${property}_${val ?? 0}`).prop('checked',true);
|
||||
}
|
||||
else {
|
||||
if(input.val() !==val && !input.is(":focus")){
|
||||
input.val(val);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
if(sd[property]){
|
||||
$('#valuesTable').append(
|
||||
`<tr><td>${property}</td>
|
||||
<td >
|
||||
${getRadioButton(property)}
|
||||
</td></tr>`);
|
||||
$(`#${property}_${val ?? 0}`).prop('checked',true);
|
||||
}
|
||||
else {
|
||||
$('#valuesTable').append(`<tr><td>${property}</td><td><input type='text' class='value form-control nvs' id="val_${property}" name='${property}' dtype='${typeof(val)}' ></input></td></tr>`);
|
||||
$(`#val_${property}`).val(val);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
.fail(function() {
|
||||
|
||||
})
|
||||
.done(function(){
|
||||
rf=false;
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
$.getJSON('/statusdefinition.json', function(data) {
|
||||
sd=data;
|
||||
})
|
||||
.fail(function() {
|
||||
|
||||
})
|
||||
.done(function(){
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
function pushStatus(){
|
||||
const data = {
|
||||
timestamp: Date.now(),
|
||||
status: getStatus()
|
||||
};
|
||||
$.ajax({
|
||||
url: '/status.json',
|
||||
dataType: 'text',
|
||||
method: 'POST',
|
||||
cache: false,
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
data: JSON.stringify(data),
|
||||
});
|
||||
console.log('sent config JSON with data:', JSON.stringify(data));
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#save_status').on('click', function() {
|
||||
pushStatus();
|
||||
});
|
||||
$( "#valuesTable" ).change(function() {
|
||||
pushStatus();
|
||||
});
|
||||
|
||||
setInterval(refreshStatus, 1000);
|
||||
$('svg >> symbol').each(function() {
|
||||
$('#allIcons').append( `<svg style="fill:white; width:1.5rem; height: 1.5rem;">
|
||||
<use xlink:href="#${this.id}"></use>
|
||||
</svg>`);
|
||||
});
|
||||
|
||||
}) ;
|
||||
@@ -0,0 +1,42 @@
|
||||
|
||||
// @import "~bootswatch/dist/darkly/variables"; -- remove darkly until bootswatch color is resolved
|
||||
@import "utils/variables";
|
||||
@import "~bootstrap/scss/bootstrap";
|
||||
// @import "~bootstrap/scss/functions";
|
||||
// @import "~bootstrap/scss/variables";
|
||||
// @import "~bootstrap/scss/mixins";
|
||||
// @import "~bootstrap/scss/utilities";
|
||||
|
||||
// // Layout & components
|
||||
// @import "~bootstrap/scss/root";
|
||||
// @import "~bootstrap/scss/reboot";
|
||||
// @import "~bootstrap/scss/type";
|
||||
// @import "~bootstrap/scss/images";
|
||||
// @import "~bootstrap/scss/containers";
|
||||
// @import "~bootstrap/scss/grid";
|
||||
// @import "~bootstrap/scss/tables";
|
||||
// @import "~bootstrap/scss/forms";
|
||||
// @import "~bootstrap/scss/buttons";
|
||||
// @import "~bootstrap/scss/transitions";
|
||||
// @import "~bootstrap/scss/dropdown";
|
||||
// @import "~bootstrap/scss/button-group";
|
||||
// @import "~bootstrap/scss/nav";
|
||||
// @import "~bootstrap/scss/navbar";
|
||||
// @import "~bootstrap/scss/card";
|
||||
// @import "~bootstrap/scss/badge";
|
||||
// @import "~bootstrap/scss/alert";
|
||||
// @import "~bootstrap/scss/progress";
|
||||
// //@import "~bootstrap/scss/list-group";
|
||||
// @import "~bootstrap/scss/close";
|
||||
// @import "~bootstrap/scss/toasts";
|
||||
// @import "~bootstrap/scss/modal";
|
||||
// @import "~bootstrap/scss/tooltip";
|
||||
// @import "~bootstrap/scss/placeholders";
|
||||
|
||||
// // Helpers
|
||||
// @import "~bootstrap/scss/helpers";
|
||||
|
||||
// // Utilities
|
||||
// @import "~bootstrap/scss/utilities/api";
|
||||
// @import "~bootswatch/dist/darkly/bootswatch"; -- remove darkly until bootswatch color is resolved
|
||||
@import "utils/style";
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
|
||||
body {
|
||||
min-height: 100vh;
|
||||
}
|
||||
.border-bottom {
|
||||
border-width:3px !important;
|
||||
}
|
||||
.xl { font-size: 1.5em; line-height: 1em; vertical-align: -.075em; }
|
||||
.border-top {
|
||||
border-width:3px !important;
|
||||
}
|
||||
tr.hide {
|
||||
display: none;
|
||||
}
|
||||
.rebooting {
|
||||
display: none;
|
||||
}
|
||||
td.value {
|
||||
width: 80%;
|
||||
}
|
||||
#boot-div {
|
||||
float: right;
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
$enable-gradients: false;
|
||||
// This is needed below, otherwise colors look washed out
|
||||
$table-bg-level: 0;
|
||||
@@ -0,0 +1,134 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>esp32-wifi-manager testing</title>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/favicon-32x32.png">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div style="display:none">
|
||||
<% if (htmlWebpackPlugin.files.sprites) { %>
|
||||
<% for (var spriteFileName in htmlWebpackPlugin.files.sprites) { %>
|
||||
<%= htmlWebpackPlugin.files.sprites[spriteFileName] %>
|
||||
<% } %>
|
||||
<% } %>
|
||||
</div>
|
||||
<div id="allIcons"><i class="recovery_element ri-device-recover-fill ri-xl" style="color:orange; " ></i>
|
||||
<i class="ri-battery-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-headphone-fill ri-xl" style="fill:white; "></i>
|
||||
<i class= "ri-bluetooth-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-speaker-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-voiceprint ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-signal-wifi-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-signal-wifi-3-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-signal-wifi-2-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-signal-wifi-1-fill ri-xl" style="fill:white; " ></i>
|
||||
<i class= "ri-signal-wifi-line ri-xl" style="fill:white; " ></i>
|
||||
</div>
|
||||
|
||||
<div class="card border-primary mb-3">
|
||||
<div class="card-header">Status Variables</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Variable</th>
|
||||
<th scope="col">Value</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="valuesTable">
|
||||
</tbody>
|
||||
</table>
|
||||
<input id="save_status" type="button" class="btn btn-success" value="Commit">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div>
|
||||
<table class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">BT State</th>
|
||||
<th scope="col">Sub state #</th>
|
||||
<th scope="col">Sub state</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>0</td>
|
||||
<td>Idle</td>
|
||||
<td>0</td>
|
||||
<td>bt_neutral</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1</td>
|
||||
<td>Discovering</td>
|
||||
<td>0</td>
|
||||
<td>bt_searching</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2</td>
|
||||
<td>Discovered</td>
|
||||
<td>0</td>
|
||||
<td>bt_searching</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td>Unconnected</td>
|
||||
<td>0</td>
|
||||
<td>bt_disabled</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
<td>Connecting</td>
|
||||
<td>0</td>
|
||||
<td>bt_disabled</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5</td>
|
||||
<td>Connected</td>
|
||||
<td>0</td>
|
||||
<td>bt_connected</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>1</td>
|
||||
<td>play_circle_outline</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>2</td>
|
||||
<td>bt_playing</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>3</td>
|
||||
<td>pause</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td>4</td>
|
||||
<td>stop</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>6</td>
|
||||
<td>Disconnecting</td>
|
||||
<td>0</td>
|
||||
<td>bt_neutral</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,5 @@
|
||||
import 'bootstrap';
|
||||
import './sass/main.scss';
|
||||
import './js/test.js';
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
const stats='';
|
||||
// Merges webpack.common config with this production config
|
||||
const fs = require('fs');
|
||||
const glob = require('glob');
|
||||
var getDirectories = function (src, callback) {
|
||||
glob(src + '/**/*.gz', callback);
|
||||
};
|
||||
getDirectories('./webpack/', function (err, list) {
|
||||
if (err) {
|
||||
console.log('Error', err);
|
||||
} else {
|
||||
const regex = /^(.*\/)([^\/]*)$/
|
||||
const relativeRegex = /(\w+\/[^\/]*)$/
|
||||
const makePathRegex = /([^\.].*)$/
|
||||
let exportDefHead=
|
||||
'/***********************************\n'+
|
||||
'webpack_headers\n'+
|
||||
stats+'\n'+
|
||||
'***********************************/\n'+
|
||||
'#pragma once\n'+
|
||||
'#include <inttypes.h>\n'+
|
||||
'extern const char * resource_lookups[];\n'+
|
||||
'extern const uint8_t * resource_map_start[];\n'+
|
||||
'extern const uint8_t * resource_map_end[];\n';
|
||||
let exportDef= '// Automatically generated. Do not edit manually!.\n'+
|
||||
'#include <inttypes.h>\n';
|
||||
let lookupDef='const char * resource_lookups[] = {\n';
|
||||
let lookupMapStart='const uint8_t * resource_map_start[] = {\n';
|
||||
let lookupMapEnd='const uint8_t * resource_map_end[] = {\n';
|
||||
let cMake='';
|
||||
list.forEach(fileName=>{
|
||||
console.log(fileName);
|
||||
let exportName=fileName.match(regex)[2].replace(/[\. \-]/gm,'_');
|
||||
let relativeName=fileName.match(relativeRegex)[1];
|
||||
exportDef+= 'extern const uint8_t '+exportName+'_start[] asm("_binary_'+exportName+'_start");\n'+
|
||||
'extern const uint8_t '+exportName+'_end[] asm("_binary_'+exportName+'_end");\n';
|
||||
lookupDef+='\t"/'+relativeName+'",\n';
|
||||
lookupMapStart+='\t'+ exportName+'_start,\n';
|
||||
lookupMapEnd+= '\t'+ exportName+'_end,\n';
|
||||
cMake+='target_add_binary_data( __idf_wifi-manager ./webapp'+fileName.match(makePathRegex)[1]+' BINARY)\n';
|
||||
|
||||
});
|
||||
lookupDef+='""\n};\n';
|
||||
lookupMapStart=lookupMapStart.substring(0,lookupMapStart.length-2)+'\n};\n';
|
||||
lookupMapEnd=lookupMapEnd.substring(0,lookupMapEnd.length-2)+'\n};\n';
|
||||
try {
|
||||
fs.writeFileSync('webapp.cmake', cMake);
|
||||
fs.writeFileSync('webpack.c', exportDef+lookupDef+lookupMapStart+lookupMapEnd);
|
||||
fs.writeFileSync('webpack.h', exportDefHead);
|
||||
//file written successfully
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1 @@
|
||||
Some content!
|
||||
@@ -0,0 +1,8 @@
|
||||
var assert = require('assert');
|
||||
describe('Array', function() {
|
||||
describe('#indexOf()', function() {
|
||||
it('should return -1 when the value is not present', function() {
|
||||
assert.equal([1, 2, 3].indexOf(4), -1);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@/*": [ "src/*"],
|
||||
"@node_modules/*" : ["./node_modules/*"]},
|
||||
"outDir": "./dist/",
|
||||
"noImplicitAny": true,
|
||||
"target": "es6",
|
||||
"module": "CommonJS",
|
||||
"composite": true,
|
||||
// "jsx": "react",
|
||||
"allowJs": true,
|
||||
"allowSyntheticDefaultImports" : true,
|
||||
"esModuleInterop" : true
|
||||
|
||||
},
|
||||
"exclude": [
|
||||
"./node_modules"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"defaultSeverity": "error",
|
||||
"extends": [
|
||||
"tslint:recommended"
|
||||
],
|
||||
"jsRules": {},
|
||||
"rules": {
|
||||
"eofline": false,
|
||||
"no-trailing-whitespace": false,
|
||||
"comment-format": false,
|
||||
"quotemark": false,
|
||||
"no-console": false,
|
||||
"one-line": false,
|
||||
"no-consecutive-blank-lines": false,
|
||||
"curly": false,
|
||||
"ordered-imports": [false],
|
||||
"object-literal-sort-keys": [false],
|
||||
"only-arrow-functions": false,
|
||||
"indent": false
|
||||
},
|
||||
"rulesDirectory": []
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
target_add_binary_data( __idf_wifi-manager webapp/dist/css/index.3b0bbfde52d921a84f9b.css.gz BINARY)
|
||||
target_add_binary_data( __idf_wifi-manager webapp/dist/favicon-32x32.png BINARY)
|
||||
target_add_binary_data( __idf_wifi-manager webapp/dist/index.html.gz BINARY)
|
||||
target_add_binary_data( __idf_wifi-manager webapp/dist/js/index.d35fda.bundle.js.gz BINARY)
|
||||
target_add_binary_data( __idf_wifi-manager webapp/dist/js/node_vendors.d35fda.bundle.js.gz BINARY)
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
// Automatically generated. Do not edit manually!.
|
||||
#include <inttypes.h>
|
||||
extern const uint8_t _index_3b0bbfde52d921a84f9b_css_gz_start[] asm("_binary_index_3b0bbfde52d921a84f9b_css_gz_start");
|
||||
extern const uint8_t _index_3b0bbfde52d921a84f9b_css_gz_end[] asm("_binary_index_3b0bbfde52d921a84f9b_css_gz_end");
|
||||
extern const uint8_t _favicon_32x32_png_start[] asm("_binary_favicon_32x32_png_start");
|
||||
extern const uint8_t _favicon_32x32_png_end[] asm("_binary_favicon_32x32_png_end");
|
||||
extern const uint8_t _index_html_gz_start[] asm("_binary_index_html_gz_start");
|
||||
extern const uint8_t _index_html_gz_end[] asm("_binary_index_html_gz_end");
|
||||
extern const uint8_t _index_d35fda_bundle_js_gz_start[] asm("_binary_index_d35fda_bundle_js_gz_start");
|
||||
extern const uint8_t _index_d35fda_bundle_js_gz_end[] asm("_binary_index_d35fda_bundle_js_gz_end");
|
||||
extern const uint8_t _node_vendors_d35fda_bundle_js_gz_start[] asm("_binary_node_vendors_d35fda_bundle_js_gz_start");
|
||||
extern const uint8_t _node_vendors_d35fda_bundle_js_gz_end[] asm("_binary_node_vendors_d35fda_bundle_js_gz_end");
|
||||
const char * resource_lookups[] = {
|
||||
"/css/index.3b0bbfde52d921a84f9b.css.gz",
|
||||
"/favicon-32x32.png",
|
||||
"/index.html.gz",
|
||||
"/js/index.d35fda.bundle.js.gz",
|
||||
"/js/node_vendors.d35fda.bundle.js.gz",
|
||||
""
|
||||
};
|
||||
const uint8_t * resource_map_start[] = {
|
||||
_index_3b0bbfde52d921a84f9b_css_gz_start,
|
||||
_favicon_32x32_png_start,
|
||||
_index_html_gz_start,
|
||||
_index_d35fda_bundle_js_gz_start,
|
||||
_node_vendors_d35fda_bundle_js_gz_start
|
||||
};
|
||||
const uint8_t * resource_map_end[] = {
|
||||
_index_3b0bbfde52d921a84f9b_css_gz_end,
|
||||
_favicon_32x32_png_end,
|
||||
_index_html_gz_end,
|
||||
_index_d35fda_bundle_js_gz_end,
|
||||
_node_vendors_d35fda_bundle_js_gz_end
|
||||
};
|
||||
@@ -0,0 +1,426 @@
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const CopyPlugin = require("copy-webpack-plugin");
|
||||
const HtmlMinimizerPlugin = require("html-minimizer-webpack-plugin");
|
||||
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
|
||||
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
const CompressionPlugin = require("compression-webpack-plugin");
|
||||
const TerserPlugin = require("terser-webpack-plugin");
|
||||
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
|
||||
const ImageMinimizerPlugin = require("image-minimizer-webpack-plugin");
|
||||
const webpack = require("webpack");
|
||||
const path = require("path");
|
||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
|
||||
|
||||
const globSync = require("glob").sync;
|
||||
const glob = require('glob');
|
||||
const { merge } = require('webpack-merge');
|
||||
const devserver = require('./webpack/webpack.dev.js');
|
||||
const fs = require('fs');
|
||||
const zlib = require("zlib");
|
||||
const PurgeCSSPlugin = require('purgecss-webpack-plugin')
|
||||
const whitelister = require('purgecss-whitelister');
|
||||
|
||||
|
||||
const PATHS = {
|
||||
src: path.join(__dirname, 'src')
|
||||
}
|
||||
|
||||
class BuildEventsHook {
|
||||
constructor(name, fn, stage = 'afterEmit') {
|
||||
this.name = name;
|
||||
this.stage = stage;
|
||||
this.function = fn;
|
||||
}
|
||||
apply(compiler) {
|
||||
compiler.hooks[this.stage].tap(this.name, this.function);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module.exports = (env, options) => (
|
||||
merge(
|
||||
env.WEBPACK_SERVE ? devserver : {},
|
||||
env.ANALYZE_SIZE?{ plugins: [ new BundleAnalyzerPlugin(
|
||||
{
|
||||
analyzerMode: 'static',
|
||||
generateStatsFile: true,
|
||||
statsFilename: 'stats.json',
|
||||
}
|
||||
) ]}:{},
|
||||
|
||||
|
||||
{
|
||||
entry:
|
||||
{
|
||||
index: './src/index.ts'
|
||||
},
|
||||
devtool:"source-map",
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.ejs$/,
|
||||
loader: 'ejs-loader',
|
||||
options: {
|
||||
variable: 'data',
|
||||
interpolate : '\\{\\{(.+?)\\}\\}',
|
||||
evaluate : '\\[\\[(.+?)\\]\\]'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/,
|
||||
use: [
|
||||
{
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
name: '[name].[ext]',
|
||||
outputPath: 'fonts/'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
// {
|
||||
// test: /\.s[ac]ss$/i,
|
||||
|
||||
// use: [{
|
||||
// loader: 'style-loader', // inject CSS to page
|
||||
// },
|
||||
// {
|
||||
// loader: MiniCssExtractPlugin.loader,
|
||||
// options: {
|
||||
// publicPath: "../",
|
||||
// },
|
||||
// },
|
||||
// "css-loader",
|
||||
// {
|
||||
// loader: "postcss-loader",
|
||||
// options: {
|
||||
// postcssOptions: {
|
||||
// plugins: [["autoprefixer"]],
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
// "sass-loader",
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
test: /\.(scss)$/,
|
||||
use: [
|
||||
|
||||
{
|
||||
loader: MiniCssExtractPlugin.loader,
|
||||
options: {
|
||||
publicPath: "../",
|
||||
},
|
||||
},
|
||||
// {
|
||||
// // inject CSS to page
|
||||
// loader: 'style-loader'
|
||||
// },
|
||||
{
|
||||
// translates CSS into CommonJS modules
|
||||
loader: 'css-loader'
|
||||
},
|
||||
|
||||
{
|
||||
// Run postcss actions
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
// `postcssOptions` is needed for postcss 8.x;
|
||||
// if you use postcss 7.x skip the key
|
||||
postcssOptions: {
|
||||
// postcss plugins, can be exported to postcss.config.js
|
||||
plugins: function () {
|
||||
return [
|
||||
require('autoprefixer')
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
// compiles Sass to CSS
|
||||
loader: 'sass-loader'
|
||||
}]
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /(node_modules|bower_components)/,
|
||||
use: {
|
||||
loader: "babel-loader",
|
||||
options: {
|
||||
presets: ["@babel/preset-env"],
|
||||
plugins: ['@babel/plugin-transform-runtime']
|
||||
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
test: /\.(jpe?g|png|gif|svg)$/i,
|
||||
type: "asset",
|
||||
},
|
||||
// {
|
||||
// test: /\.html$/i,
|
||||
// type: "asset/resource",
|
||||
// },
|
||||
{
|
||||
test: /\.html$/i,
|
||||
loader: "html-loader",
|
||||
options: {
|
||||
minimize: true,
|
||||
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.tsx?$/,
|
||||
use: 'ts-loader',
|
||||
exclude: /node_modules/,
|
||||
},
|
||||
|
||||
|
||||
],
|
||||
},
|
||||
plugins: [
|
||||
new HtmlWebpackPlugin({
|
||||
title: 'SqueezeESP32',
|
||||
template: './src/index.ejs',
|
||||
filename: 'index.html',
|
||||
inject: 'body',
|
||||
minify: {
|
||||
html5 : true,
|
||||
collapseWhitespace : true,
|
||||
minifyCSS : true,
|
||||
minifyJS : true,
|
||||
minifyURLs : false,
|
||||
removeAttributeQuotes : true,
|
||||
removeComments : true, // false for Vue SSR to find app placeholder
|
||||
removeEmptyAttributes : true,
|
||||
removeOptionalTags : true,
|
||||
removeRedundantAttributes : true,
|
||||
removeScriptTypeAttributes : true,
|
||||
removeStyleLinkTypeAttributese : true,
|
||||
useShortDoctype : true
|
||||
},
|
||||
favicon: "./src/assets/images/favicon-32x32.png",
|
||||
excludeChunks: ['test'],
|
||||
}),
|
||||
// new CompressionPlugin({
|
||||
// test: /\.(js|css|html|svg)$/,
|
||||
// //filename: '[path].br[query]',
|
||||
// filename: "[path][base].br",
|
||||
// algorithm: 'brotliCompress',
|
||||
// compressionOptions: { level: 11 },
|
||||
// threshold: 100,
|
||||
// minRatio: 0.8,
|
||||
// deleteOriginalAssets: false
|
||||
// }),
|
||||
new MiniCssExtractPlugin({
|
||||
filename: "css/[name].[contenthash].css",
|
||||
}),
|
||||
new PurgeCSSPlugin({
|
||||
keyframes: false,
|
||||
paths: glob.sync(`${path.join(__dirname, 'src')}/**/*`, {
|
||||
nodir: true
|
||||
}),
|
||||
whitelist: whitelister('bootstrap/dist/css/bootstrap.css')
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
$: "jquery",
|
||||
// jQuery: "jquery",
|
||||
// "window.jQuery": "jquery",
|
||||
// Popper: ["popper.js", "default"],
|
||||
// Util: "exports-loader?Util!bootstrap/js/dist/util",
|
||||
// Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown",
|
||||
}),
|
||||
new CompressionPlugin({
|
||||
//filename: '[path].gz[query]',
|
||||
test: /\.js$|\.css$|\.html$/,
|
||||
filename: "[path][base].gz",
|
||||
|
||||
algorithm: 'gzip',
|
||||
|
||||
threshold: 100,
|
||||
minRatio: 0.8,
|
||||
}),
|
||||
|
||||
new BuildEventsHook('Update C App',
|
||||
function (stats, arguments) {
|
||||
|
||||
if (options.mode !== "production") return;
|
||||
let buildRootPath = path.join(process.cwd(),'..','..','..');
|
||||
let wifiManagerPath=glob.sync(path.join(buildRootPath,'components/**/wifi-manager*'))[0];
|
||||
let buildCRootPath=glob.sync(buildRootPath)[0];
|
||||
fs.appendFileSync('./dist/index.html.gz',
|
||||
zlib.gzipSync(fs.readFileSync('./dist/index.html'),
|
||||
{
|
||||
chunckSize: 65536,
|
||||
level: zlib.constants.Z_BEST_COMPRESSION
|
||||
}));
|
||||
|
||||
var getDirectories = function (src, callback) {
|
||||
var searchPath = path.posix.join(src, '/**/*(*.gz|favicon-32x32.png)');
|
||||
console.log(`Post build: Getting file list from ${searchPath}`);
|
||||
glob(searchPath, callback);
|
||||
};
|
||||
var cleanUpPath = path.posix.join(buildCRootPath, '/build/*.S');
|
||||
console.log(`Post build: Cleaning up previous builds in ${cleanUpPath}`);
|
||||
glob(cleanUpPath, function (err, list) {
|
||||
if (err) {
|
||||
console.error('Error', err);
|
||||
} else {
|
||||
list.forEach(fileName => {
|
||||
try {
|
||||
console.log(`Post build: Purging old binary file ${fileName} from C project.`);
|
||||
fs.unlinkSync(fileName)
|
||||
//file removed
|
||||
} catch (ferr) {
|
||||
console.error(ferr)
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
'afterEmit'
|
||||
);
|
||||
console.log('Generating C include files from webpack build output');
|
||||
getDirectories('./dist', function (err, list) {
|
||||
console.log(`Post build: found ${list.length} files. Relative path: ${wifiManagerPath}.`);
|
||||
if (err) {
|
||||
console.log('Error', err);
|
||||
} else {
|
||||
|
||||
let exportDefHead =
|
||||
`/***********************************
|
||||
webpack_headers
|
||||
${arguments[1]}
|
||||
***********************************/
|
||||
#pragma once
|
||||
#include <inttypes.h>
|
||||
extern const char * resource_lookups[];
|
||||
extern const uint8_t * resource_map_start[];
|
||||
extern const uint8_t * resource_map_end[];`;
|
||||
let exportDef = '// Automatically generated. Do not edit manually!.\n' +
|
||||
'#include <inttypes.h>\n';
|
||||
let lookupDef = 'const char * resource_lookups[] = {\n';
|
||||
let lookupMapStart = 'const uint8_t * resource_map_start[] = {\n';
|
||||
let lookupMapEnd = 'const uint8_t * resource_map_end[] = {\n';
|
||||
let cMake='';
|
||||
|
||||
list.forEach(foundFile => {
|
||||
let exportName = path.basename(foundFile).replace(/[\. \-]/gm, '_');
|
||||
//take the full path of the file and make it relative to the build directory
|
||||
let cmakeFileName = path.posix.relative(wifiManagerPath,glob.sync(path.resolve(foundFile))[0]);
|
||||
let httpRelativePath=path.posix.join('/',path.posix.relative('dist',foundFile));
|
||||
exportDef += `extern const uint8_t _${exportName}_start[] asm("_binary_${exportName}_start");\nextern const uint8_t _${exportName}_end[] asm("_binary_${exportName}_end");\n`;
|
||||
lookupDef += `\t"${httpRelativePath}",\n`;
|
||||
lookupMapStart += '\t_' + exportName + '_start,\n';
|
||||
lookupMapEnd += '\t_' + exportName + '_end,\n';
|
||||
cMake += `target_add_binary_data( __idf_wifi-manager ${cmakeFileName} BINARY)\n`;
|
||||
console.log(`Post build: adding cmake file reference to ${cmakeFileName} from C project, with web path ${httpRelativePath}.`);
|
||||
});
|
||||
|
||||
lookupDef += '""\n};\n';
|
||||
lookupMapStart = lookupMapStart.substring(0, lookupMapStart.length - 2) + '\n};\n';
|
||||
lookupMapEnd = lookupMapEnd.substring(0, lookupMapEnd.length - 2) + '\n};\n';
|
||||
try {
|
||||
fs.writeFileSync('webapp.cmake', cMake);
|
||||
fs.writeFileSync('webpack.c', exportDef + lookupDef + lookupMapStart + lookupMapEnd);
|
||||
fs.writeFileSync('webpack.h', exportDefHead);
|
||||
//file written successfully
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log('Post build completed.');
|
||||
|
||||
})
|
||||
],
|
||||
optimization: {
|
||||
minimize: true,
|
||||
providedExports: true,
|
||||
usedExports: true,
|
||||
minimizer: [
|
||||
|
||||
new TerserPlugin({
|
||||
terserOptions: {
|
||||
format: {
|
||||
comments: false,
|
||||
},
|
||||
},
|
||||
extractComments: false,
|
||||
// enable parallel running
|
||||
parallel: true,
|
||||
}),
|
||||
new HtmlMinimizerPlugin({
|
||||
minimizerOptions: {
|
||||
removeComments: true,
|
||||
removeOptionalTags: true,
|
||||
|
||||
}
|
||||
}
|
||||
),
|
||||
new CssMinimizerPlugin(),
|
||||
new ImageMinimizerPlugin({
|
||||
minimizer: {
|
||||
implementation: ImageMinimizerPlugin.imageminMinify,
|
||||
options: {
|
||||
// Lossless optimization with custom option
|
||||
// Feel free to experiment with options for better result for you
|
||||
plugins: [
|
||||
["gifsicle", { interlaced: true }],
|
||||
["jpegtran", { progressive: true }],
|
||||
["optipng", { optimizationLevel: 5 }],
|
||||
// Svgo configuration here https://github.com/svg/svgo#configuration
|
||||
[
|
||||
"svgo",
|
||||
{
|
||||
plugins: [
|
||||
{
|
||||
name: 'preset-default',
|
||||
params: {
|
||||
overrides: {
|
||||
// customize default plugin options
|
||||
inlineStyles: {
|
||||
onlyMatchedOnce: false,
|
||||
},
|
||||
|
||||
// or disable plugins
|
||||
removeDoctype: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
],
|
||||
],
|
||||
},
|
||||
},
|
||||
}),
|
||||
|
||||
|
||||
],
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
vendor: {
|
||||
name: "node_vendors",
|
||||
test: /[\\/]node_modules[\\/]/,
|
||||
chunks: "all",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
// output: {
|
||||
// filename: "[name].js",
|
||||
// path: path.resolve(__dirname, "dist"),
|
||||
// publicPath: "",
|
||||
// },
|
||||
resolve: {
|
||||
extensions: ['.tsx', '.ts', '.js', '.ejs' ],
|
||||
},
|
||||
output: {
|
||||
path: path.resolve(__dirname, 'dist'),
|
||||
filename: './js/[name].[fullhash:6].bundle.js',
|
||||
clean: true
|
||||
},
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -0,0 +1,9 @@
|
||||
/***********************************
|
||||
webpack_headers
|
||||
dist/css/index.3b0bbfde52d921a84f9b.css.gz,dist/favicon-32x32.png,dist/index.html.gz,dist/js/index.d35fda.bundle.js.gz,dist/js/node_vendors.d35fda.bundle.js.gz
|
||||
***********************************/
|
||||
#pragma once
|
||||
#include <inttypes.h>
|
||||
extern const char * resource_lookups[];
|
||||
extern const uint8_t * resource_map_start[];
|
||||
extern const uint8_t * resource_map_end[];
|
||||
@@ -0,0 +1,117 @@
|
||||
const path = require("path");
|
||||
const fs = require('fs');
|
||||
const zlib = require("zlib");
|
||||
const glob = require('glob');
|
||||
|
||||
|
||||
class BuildEventsHook {
|
||||
constructor(name, fn, stage = 'afterEmit') {
|
||||
this.name = name;
|
||||
this.stage = stage;
|
||||
this.function = fn;
|
||||
}
|
||||
apply(compiler) {
|
||||
compiler.hooks[this.stage].tap(this.name, this.function);
|
||||
}
|
||||
}
|
||||
|
||||
function createBuildEventsHook(options){
|
||||
return new BuildEventsHook('Update C App',
|
||||
function (stats, arguments) {
|
||||
|
||||
if (options.mode !== "production") return;
|
||||
let buildRootPath = path.join(process.cwd(), '..', '..', '..');
|
||||
let wifiManagerPath = glob.sync(path.join(buildRootPath, 'components/**/wifi-manager*'))[0];
|
||||
let buildCRootPath = glob.sync(buildRootPath)[0];
|
||||
fs.appendFileSync('./dist/index.html.gz',
|
||||
zlib.gzipSync(fs.readFileSync('./dist/index.html'),
|
||||
{
|
||||
chunckSize: 65536,
|
||||
level: zlib.constants.Z_BEST_COMPRESSION
|
||||
}));
|
||||
|
||||
let getDirectories = function getDirectories (src, callback) {
|
||||
let searchPath = path.posix.join(src, '/**/*(*.gz|favicon-32x32.png)');
|
||||
console.log(`Post build: Getting file list from ${searchPath}`);
|
||||
glob(searchPath, callback);
|
||||
};
|
||||
let cleanUpPath = path.posix.join(buildCRootPath, '/build/*.S');
|
||||
console.log(`Post build: Cleaning up previous builds in ${cleanUpPath}`);
|
||||
glob(cleanUpPath, function (err, list) {
|
||||
if (err) {
|
||||
console.error('Error', err);
|
||||
} else {
|
||||
list.forEach(fileName => {
|
||||
try {
|
||||
console.log(`Post build: Purging old binary file ${fileName} from C project.`);
|
||||
fs.unlinkSync(fileName)
|
||||
//file removed
|
||||
} catch (ferr) {
|
||||
console.error(ferr)
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
'afterEmit'
|
||||
);
|
||||
console.log('Generating C include files from webpack build output');
|
||||
getDirectories('./dist', function (err, list) {
|
||||
console.log(`Post build: found ${list.length} files. Relative path: ${wifiManagerPath}.`);
|
||||
if (err) {
|
||||
console.log('Error', err);
|
||||
} else {
|
||||
|
||||
let exportDefHead =
|
||||
`/***********************************
|
||||
webpack_headers
|
||||
${arguments[1]}
|
||||
***********************************/
|
||||
#pragma once
|
||||
#include <inttypes.h>
|
||||
extern const char * resource_lookups[];
|
||||
extern const uint8_t * resource_map_start[];
|
||||
extern const uint8_t * resource_map_end[];`;
|
||||
let exportDef = '// Automatically generated. Do not edit manually!.\n' +
|
||||
'#include <inttypes.h>\n';
|
||||
let lookupDef = 'const char * resource_lookups[] = {\n';
|
||||
let lookupMapStart = 'const uint8_t * resource_map_start[] = {\n';
|
||||
let lookupMapEnd = 'const uint8_t * resource_map_end[] = {\n';
|
||||
let cMake = '';
|
||||
|
||||
list.forEach(foundFile => {
|
||||
let exportName = path.basename(foundFile).replace(/[\. \-]/gm, '_');
|
||||
//take the full path of the file and make it relative to the build directory
|
||||
let cmakeFileName = path.posix.relative(wifiManagerPath, glob.sync(path.resolve(foundFile))[0]);
|
||||
let httpRelativePath = path.posix.join('/', path.posix.relative('dist', foundFile));
|
||||
exportDef += `extern const uint8_t _${exportName}_start[] asm("_binary_${exportName}_start");\nextern const uint8_t _${exportName}_end[] asm("_binary_${exportName}_end");\n`;
|
||||
lookupDef += `\t"${httpRelativePath}",\n`;
|
||||
lookupMapStart += '\t_' + exportName + '_start,\n';
|
||||
lookupMapEnd += '\t_' + exportName + '_end,\n';
|
||||
cMake += `target_add_binary_data( __idf_wifi-manager ${cmakeFileName} BINARY)\n`;
|
||||
console.log(`Post build: adding cmake file reference to ${cmakeFileName} from C project, with web path ${httpRelativePath}.`);
|
||||
});
|
||||
|
||||
lookupDef += '""\n};\n';
|
||||
lookupMapStart = lookupMapStart.substring(0, lookupMapStart.length - 2) + '\n};\n';
|
||||
lookupMapEnd = lookupMapEnd.substring(0, lookupMapEnd.length - 2) + '\n};\n';
|
||||
try {
|
||||
fs.writeFileSync('webapp.cmake', cMake);
|
||||
fs.writeFileSync('webpack.c', exportDef + lookupDef + lookupMapStart + lookupMapEnd);
|
||||
fs.writeFileSync('webpack.h', exportDefHead);
|
||||
//file written successfully
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log('Post build completed.');
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
module.exports = {
|
||||
BuildEventsHook,
|
||||
createBuildEventsHook
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
module.exports = {
|
||||
parser: 'sugarss',
|
||||
// syntax: 'postcss-scss',
|
||||
plugins: {
|
||||
'postcss-import': {},
|
||||
'postcss-cssnext': {},
|
||||
cssnano: {}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,464 @@
|
||||
/* eslint-disable */
|
||||
var path = require('path');
|
||||
const bodyParser = require('body-parser')
|
||||
const { config } = require('process');
|
||||
const HtmlWebPackPlugin = require('html-webpack-plugin');
|
||||
const { Command } = require('commander');
|
||||
let cmdLines= { };
|
||||
var { parseArgsStringToArgv } = require('string-argv');
|
||||
const PORT = 5000;
|
||||
|
||||
const data = {
|
||||
messages: require("../mock/messages.json"),
|
||||
messagequeue: require("../mock/messages.json"),
|
||||
message_queue_sequence: [],
|
||||
status_queue_sequence:[],
|
||||
message_queue_sequence_post_empty: null,
|
||||
status_queue_sequence_post_empty: null,
|
||||
commands: require("../mock/commands.json"),
|
||||
scan: require("../mock/scan.json"),
|
||||
ap: require("../mock/ap.json"),
|
||||
config: require("../mock/config.json"),
|
||||
statusdefinition: require("../mock/statusdefinition.json"),
|
||||
status: require("../mock/status.json"),
|
||||
messages_ota_fail: require("../mock/messages_ota_fail.json"),
|
||||
messages_ota_flash: require("../mock/messages_ota_flash.json"),
|
||||
messages_ota: require("../mock/messages_ota.json"),
|
||||
rebooting: false,
|
||||
reboottime: Date.now(),
|
||||
devServer:{}
|
||||
|
||||
};
|
||||
const messagingTypes= {
|
||||
MESSAGING_INFO : 'MESSAGING_INFO',
|
||||
MESSAGING_WARNING : 'MESSAGING_WARNING',
|
||||
MESSAGING_ERROR : 'MESSAGING_ERROR'
|
||||
};
|
||||
const messagingClass= {
|
||||
MESSAGING_CLASS_OTA : 'MESSAGING_CLASS_OTA',
|
||||
MESSAGING_CLASS_SYSTEM : 'MESSAGING_CLASS_SYSTEM',
|
||||
MESSAGING_CLASS_STATS : 'MESSAGING_CLASS_STATS',
|
||||
MESSAGING_CLASS_CFGCMD: 'MESSAGING_CLASS_CFGCMD',
|
||||
MESSAGING_CLASS_BT: 'MESSAGING_CLASS_BT'
|
||||
} ;
|
||||
|
||||
function rebooting(){
|
||||
let duration=10000;
|
||||
console.log(`Simulating a reboot of ${duration}ms`);
|
||||
data.reboottime = Date.now() + duration;
|
||||
data.rebooting=true;
|
||||
setTimeout(() => {
|
||||
data.rebooting=false;
|
||||
console.log("Reboot completed!");
|
||||
}, duration);
|
||||
}
|
||||
function sleep(milliseconds) {
|
||||
const date = Date.now();
|
||||
let currentDate = null;
|
||||
do {
|
||||
currentDate = Date.now();
|
||||
} while (currentDate - date < milliseconds);
|
||||
}
|
||||
function waitForReboot(){
|
||||
while(Date.now() < data.reboottime){
|
||||
sleep(500);
|
||||
console.log(`Waiting for reboot to finish.`);
|
||||
}
|
||||
}
|
||||
|
||||
function requeueMessages(){
|
||||
data.messagequeue = [];
|
||||
data.messagequeue.push(...data.messages);
|
||||
console.log(`Re-queued ${data.messages.length} messages. Total queue length is: ${data.messagequeue.length}`);
|
||||
}
|
||||
function sendMessaging(cmdname,msgtype,msgClass,msg){
|
||||
let message_txt=`${cmdname}\n${msg}`;
|
||||
var d = new Date();
|
||||
var n = d.getMilliseconds();
|
||||
data.messagequeue.push({
|
||||
message: message_txt,
|
||||
type: msgtype,
|
||||
class: msgClass,
|
||||
sent_time: n,
|
||||
current_time: n});
|
||||
console.log(`Queued message ~${data.messagequeue.length} type ${msgtype}, class ${msgClass}: ${message_txt}`);
|
||||
}
|
||||
Array.prototype.filter = function(fun /*, thisp*/) {
|
||||
var len = this.length >>> 0;
|
||||
if (typeof fun != "function")
|
||||
throw new TypeError();
|
||||
|
||||
var res = [];
|
||||
var thisp = arguments[1];
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (i in this) {
|
||||
var val = this[i];
|
||||
if (fun.call(thisp, val, i, this))
|
||||
res.push(val);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
};
|
||||
for(const cmdIdx in data.commands.commands){
|
||||
const cmd = data.commands.commands[cmdIdx];
|
||||
//console.log(`Creating command structure for ${cmd.name}`);
|
||||
cmdLines[cmd.name] = {
|
||||
cmd: new Command(),
|
||||
};
|
||||
cmdLines[cmd.name].cmd
|
||||
.storeOptionsAsProperties(true)
|
||||
.name(cmd.name)
|
||||
.exitOverride();
|
||||
for(const argIdx in cmd.argtable){
|
||||
const arg=cmd.argtable[argIdx];
|
||||
const optstr=((arg.shortopts?'-'+arg.shortopts:'')+
|
||||
(arg.shortopts && arg.longopts?', ':'')+
|
||||
(arg.longopts?'--'+arg.longopts:'') +
|
||||
(arg.hasvalue?`${(arg.shortopts || arg.longopts?' ':'')}<${arg.datatype.replace(/[<>]/gm,'')}>`:''));
|
||||
//console.log(` Option: ${optstr}, Glossary: ${arg.glossary}`);
|
||||
if(arg.remark) continue;
|
||||
if(arg.mincount>0){
|
||||
cmdLines[cmd.name].cmd.requiredOption( optstr,arg.glossary);
|
||||
}
|
||||
else {
|
||||
cmdLines[cmd.name].cmd.option( optstr,arg.glossary);
|
||||
}
|
||||
}
|
||||
}
|
||||
const connectReturnCode = {
|
||||
UPDATE_CONNECTION_OK : 0,
|
||||
UPDATE_FAILED_ATTEMPT : 1,
|
||||
UPDATE_USER_DISCONNECT : 2,
|
||||
UPDATE_LOST_CONNECTION : 3,
|
||||
UPDATE_FAILED_ATTEMPT_AND_RESTORE : 4
|
||||
}
|
||||
module.exports ={
|
||||
entry: {
|
||||
test: './src/test.ts'
|
||||
|
||||
},
|
||||
devServer: {
|
||||
static: {
|
||||
directory: path.resolve(__dirname, './dist'),
|
||||
staticOptions: {},
|
||||
// Don't be confused with `devMiddleware.publicPath`, it is `publicPath` for static directory
|
||||
// Can be:
|
||||
// publicPath: ['/static-public-path-one/', '/static-public-path-two/'],
|
||||
publicPath: "/",
|
||||
// Can be:
|
||||
// serveIndex: {} (options for the `serveIndex` option you can find https://github.com/expressjs/serve-index)
|
||||
serveIndex: true,
|
||||
// Can be:
|
||||
// watch: {} (options for the `watch` option you can find https://github.com/paulmillr/chokidar)
|
||||
watch: true,
|
||||
},
|
||||
devMiddleware: {
|
||||
publicPath: "/",
|
||||
|
||||
},
|
||||
open: true,
|
||||
compress: true,
|
||||
port: PORT,
|
||||
host: '0.0.0.0',
|
||||
allowedHosts: "all",
|
||||
headers: {'Access-Control-Allow-Origin': '*', 'Accept-Encoding': 'identity'},
|
||||
client: {
|
||||
logging: "verbose",
|
||||
// Can be used only for `errors`/`warnings`
|
||||
//
|
||||
// overlay: {
|
||||
// errors: true,
|
||||
// warnings: true,
|
||||
// }
|
||||
overlay: true,
|
||||
progress: true,
|
||||
},
|
||||
onListening: function (devServer) {
|
||||
if (!devServer) {
|
||||
throw new Error('webpack-dev-server is not defined');
|
||||
}
|
||||
|
||||
const PORT = devServer.server.address().port;
|
||||
|
||||
// get the path to the test page
|
||||
const compiler = devServer.compiler;
|
||||
const entry = compiler.options.entry;
|
||||
const testEntry = entry['test'].import[0];
|
||||
const testPath = testEntry.replace('./src/', '').replace('.ts', '.html');
|
||||
|
||||
// open the test page
|
||||
import('open').then((open) => open.default(`http://localhost:${PORT}/${testPath}`));
|
||||
|
||||
|
||||
},
|
||||
|
||||
onBeforeSetupMiddleware: function (devServer) {
|
||||
data.devServer=devServer;
|
||||
devServer.app.use(bodyParser.json()) // for parsing application/json
|
||||
devServer.app.use(bodyParser.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded
|
||||
devServer.app.get('/ap.json', function(req, res) { waitForReboot(); res.json( data.ap ); });
|
||||
devServer.app.get('/scan.json', function(req, res) { waitForReboot(); res.json( data.scan ); });
|
||||
devServer.app.get('/config.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status.recovery==1 && (data.status.mock_old_recovery??'')!==''){
|
||||
res.json( data.config.config );
|
||||
console.log('Mock old recovery - return config structure without gpio');
|
||||
}
|
||||
else {
|
||||
res.json( data.config );
|
||||
}
|
||||
});
|
||||
|
||||
devServer.app.get('/status.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status_queue_sequence.length>0){
|
||||
const curstatus = JSON.parse(data.status_queue_sequence_queue_sequence.shift());
|
||||
data.status.ota_pct=curstatus.ota_pct??0;
|
||||
data.status.ota_dsc=curstatus.ota_dsc??'';
|
||||
console.log(`Mock firmware update @${data.status.ota_pct}%, ${data.status.ota_dsc}`)
|
||||
}
|
||||
else if (data.status_queue_sequence_post_empty){
|
||||
data.status_queue_sequence_post_emptyy();
|
||||
console.log(`Mock old firmware update: simulating a restart`);
|
||||
data.status_queue_sequence_post_empty = null;
|
||||
}
|
||||
else if(data.status.ota_pct!=undefined || data.status.ota_dsc!=undefined) {
|
||||
if(data.status.ota_pct!=undefined) delete data.status.ota_pct;
|
||||
if(data.status.ota_dsc!=undefined) delete data.status.ota_dsc;
|
||||
}
|
||||
if(data.status.message) delete data.status.message;
|
||||
if(data.status.recovery==1 && (data.status.mock_old_recovery??'')!==''){
|
||||
if(data.message_queue_sequence.length>0){
|
||||
|
||||
const msgpayload = JSON.parse(data.message_queue_sequence.shift());
|
||||
data.status.message = msgpayload.message??'';
|
||||
console.log(`Mocking recovery, setting status message to ${data.status.message}`)
|
||||
}
|
||||
else if (data.message_queue_sequence_post_empty){
|
||||
data.message_queue_sequence_post_empty();
|
||||
data.message_queue_sequence_post_empty = null;
|
||||
}
|
||||
}
|
||||
res.json( data.status );
|
||||
});
|
||||
devServer.app.get('/plugins/SqueezeESP32/firmware/-99', function(req, res) {
|
||||
waitForReboot();
|
||||
let has_proxy= data.status.mock_plugin_has_proxy ?? 'n';
|
||||
const statusCode='xy'.includes((has_proxy).toLowerCase())?200:500;
|
||||
console.log(`Checking if plugin has proxy enabled with option mock_plugin_has_proxy = ${data.status.mock_plugin_has_proxy}. Returning status ${statusCode} `);
|
||||
res.status(statusCode ).json();
|
||||
});
|
||||
devServer.app.get('/messages.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status.recovery==1 && (data.status.mock_old_recovery??'')!==''){
|
||||
console.log('Mocking old recovery, with no commands backend' );
|
||||
res.status(404).end();
|
||||
return;
|
||||
}
|
||||
if(data.message_queue_sequence.length>0){
|
||||
data.messagequeue.push(data.message_queue_sequence.shift());
|
||||
}
|
||||
else if (data.message_queue_sequence_post_empty){
|
||||
data.message_queue_sequence_post_empty();
|
||||
data.message_queue_sequence_post_empty = null;
|
||||
}
|
||||
res.json( data.messagequeue ) ;
|
||||
data.messagequeue=[];
|
||||
});
|
||||
|
||||
devServer.app.get('/statusdefinition.json', function(req, res) {
|
||||
waitForReboot();
|
||||
res.json( data.statusdefinition );
|
||||
});
|
||||
devServer.app.get('/commands.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status.recovery==1 && (data.status.mock_old_recovery??'')!==''){
|
||||
console.log('Mocking old recovery, with no commands backend' );
|
||||
res.status(404).end();
|
||||
}
|
||||
else {
|
||||
res.json( data.commands );
|
||||
}
|
||||
|
||||
});
|
||||
devServer.app.post('/commands.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status.recovery==1 && (data.status.mock_old_recovery??'')!==''){
|
||||
console.log('Mocking old recovery, with no commands backend' );
|
||||
res.status(404).end();
|
||||
return;
|
||||
}
|
||||
console.log(req.body.command);
|
||||
try {
|
||||
const cmdName=req.body.command.split(" ")[0];
|
||||
const args=parseArgsStringToArgv(req.body.command,'node ');
|
||||
let cmd=cmdLines[cmdName].cmd;
|
||||
if(cmd){
|
||||
for (const property in cmd.opts()) {
|
||||
delete cmd[property];
|
||||
}
|
||||
cmd.parse(args);
|
||||
const msg=`Received Options: ${JSON.stringify(cmd.opts())}\n`;
|
||||
console.log('Options: ', cmd.opts());
|
||||
console.log('Remaining arguments: ', cmd.args);
|
||||
sendMessaging(cmdName,messagingTypes.MESSAGING_INFO,messagingClass.MESSAGING_CLASS_CFGCMD,msg);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
res.json( { 'Result' : 'Success' } );
|
||||
});
|
||||
devServer.app.post('/config.json', function(req, res) {
|
||||
waitForReboot();
|
||||
var fwurl='';
|
||||
console.log(`Processing config.json with request body: ${req.body}`);
|
||||
console.log(data.config.config);
|
||||
for (const property in req.body.config) {
|
||||
console.log(`${property}: ${req.body.config[property].value}`);
|
||||
if(property=='fwurl'){
|
||||
fwurl=req.body.config[property].value;
|
||||
}
|
||||
else {
|
||||
if(data.config.config[property]=== undefined){
|
||||
console.log(`Added config value ${property} [${req.body.config[property].value}]`);
|
||||
data.config.config[property] = {value: req.body.config[property].value};
|
||||
}
|
||||
else if (data.config.config[property].value!=req.body.config[property].value){
|
||||
console.log(`Updated config value ${property}\n From: ${data.config.config[property].value}\n To: ${req.body.config[property].value}]`);
|
||||
data.config.config[property].value=req.body.config[property].value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
res.json( {"result" : "OK" });
|
||||
if(fwurl!=='' ){
|
||||
const ota_msg_list= ((data.status.mock_fail_fw_update ?? '')!=='')?data.messages_ota_fail:data.messages_ota;
|
||||
if(data.status.recovery!=1) {
|
||||
// we're not yet in recovery. Simulate reboot to recovery
|
||||
data.status.recovery=1;
|
||||
if((data.status.mock_old_recovery??'')===''){
|
||||
// older recovery partitions possibly aren't
|
||||
// sending messages
|
||||
requeueMessages();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var targetQueue='message_queue_sequence';
|
||||
var targetPostEmpty='message_queue_sequence_post_empty';
|
||||
if((data.status.mock_old_recovery??'')!==''){
|
||||
console.log('Mocking old firmware flashing mechanism. Starting!');
|
||||
targetQueue='status_queue_sequence';
|
||||
targetPostEmpty='status_queue_sequence_post_empty';
|
||||
}
|
||||
console.log(`queuing ${ota_msg_list.length} ota messages `);
|
||||
data[targetQueue].push(...ota_msg_list);
|
||||
data[targetPostEmpty] = function(){
|
||||
data.status.recovery=0;
|
||||
requeueMessages();
|
||||
}
|
||||
}
|
||||
});
|
||||
devServer.app.post('/status.json', function(req, res) {
|
||||
waitForReboot();
|
||||
for (const property in req.body.status) {
|
||||
if(data.status[property]=== undefined){
|
||||
console.log(`Added status value ${property} [${req.body.status[property]}]`);
|
||||
data.status[property] = {value: req.body.status[property]};
|
||||
}
|
||||
else if (data.status[property]!==req.body.status[property]){
|
||||
console.log(`Updated status value ${property}\nFrom: ${data.status[property]}\nTo: ${req.body.status[property]}`);
|
||||
data.status[property]=req.body.status[property];
|
||||
}
|
||||
}
|
||||
res.json( {"result" : "OK" } );
|
||||
});
|
||||
devServer.app.post('/connect.json', function(req, res) {
|
||||
waitForReboot();
|
||||
setTimeout(function(r){
|
||||
if(r.body.ssid.search('fail')>=0){
|
||||
if(data.status.ssid){
|
||||
// in this case, the same ssid will be reused - the ESP32 would restore its previous state on failure
|
||||
data.status.urc=connectReturnCode.UPDATE_FAILED_ATTEMPT_AND_RESTORE;
|
||||
}
|
||||
else {
|
||||
data.status.urc=connectReturnCode.UPDATE_FAILED_ATTEMPT;
|
||||
}
|
||||
}
|
||||
else {
|
||||
data.status.ssid=r.body.ssid;
|
||||
data.status.urc=connectReturnCode.UPDATE_CONNECTION_OK;
|
||||
}
|
||||
}, 1000, req);
|
||||
res.json( {"result" : "OK" } );
|
||||
});
|
||||
devServer.app.post('/reboot_ota.json', function(req, res) {
|
||||
waitForReboot();
|
||||
data.status.recovery=0;
|
||||
requeueMessages();
|
||||
rebooting();
|
||||
res.json( {"result" : "OK" } );
|
||||
});
|
||||
devServer.app.post('/reboot.json', function(req, res) {
|
||||
waitForReboot();
|
||||
res.json( {"result" : "OK" } );
|
||||
rebooting();
|
||||
requeueMessages();
|
||||
});
|
||||
devServer.app.post('/recovery.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if((data.status.mock_fail_recovery ?? '')!==''){
|
||||
res.status(404).end();
|
||||
}
|
||||
else {
|
||||
data.status.recovery=1;
|
||||
requeueMessages();
|
||||
rebooting();
|
||||
res.json( {"result" : "OK" } );
|
||||
}
|
||||
});
|
||||
devServer.app.post('/flash.json', function(req, res) {
|
||||
waitForReboot();
|
||||
if(data.status.recovery>0){
|
||||
if((data.status.mock_fail_fw_update ?? '')!=='' || (data.status.mock_old_recovery??'')!==''){
|
||||
console.log('Old recovery mock, or fw fail requested' );
|
||||
res.status(404).end();
|
||||
}
|
||||
else {
|
||||
console.log(`queuing ${data.messages_ota_flash.length} flash ota messages `);
|
||||
data.message_queue_sequence.push(...data.messages_ota_flash);
|
||||
data.message_queue_sequence_post_empty = function(){
|
||||
data.status.recovery=0;
|
||||
rebooting();
|
||||
requeueMessages();
|
||||
}
|
||||
res.json({"result" : "OK" });
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
res.status(404).end();
|
||||
}
|
||||
});
|
||||
devServer.app.delete('/connect.json', function(req, res) {
|
||||
waitForReboot();
|
||||
data.status.ssid='';
|
||||
res.json({"result" : "OK" }); });
|
||||
devServer.app.get('/reboot', function(req, res) {
|
||||
waitForReboot();
|
||||
res.json({"result" : "OK" }); });
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
|
||||
new HtmlWebPackPlugin({
|
||||
title: 'SqueezeESP32-test',
|
||||
template: './src/test.ejs',
|
||||
filename: 'test.html',
|
||||
minify: false,
|
||||
inject: 'body',
|
||||
excludeChunks: ['index','main'],
|
||||
})
|
||||
|
||||
],
|
||||
}
|
||||
Reference in New Issue
Block a user