mirror of
https://github.com/SpacehuhnTech/esp8266_deauther.git
synced 2025-12-13 18:19:58 +01:00
Added Settining serialEcho
This commit is contained in:
@@ -90,7 +90,8 @@ void SerialInterface::stopScript() {
|
|||||||
|
|
||||||
void SerialInterface::update() {
|
void SerialInterface::update() {
|
||||||
if (executing) {
|
if (executing) {
|
||||||
if (execPath.charAt(0) != SLASH) execPath = SLASH + execPath;
|
if (execPath.charAt(0) != SLASH)
|
||||||
|
execPath = SLASH + execPath;
|
||||||
prnt(CLI_EXECUTING);
|
prnt(CLI_EXECUTING);
|
||||||
prntln(execPath);
|
prntln(execPath);
|
||||||
File f = SPIFFS.open(execPath, "r");
|
File f = SPIFFS.open(execPath, "r");
|
||||||
@@ -198,9 +199,11 @@ void SerialInterface::runCommand(String input) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(settings.getSerialEcho()){
|
||||||
// print command
|
// print command
|
||||||
prnt(CLI_INPUT_PREFIX);
|
prnt(CLI_INPUT_PREFIX);
|
||||||
prntln(input);
|
prntln(input);
|
||||||
|
}
|
||||||
|
|
||||||
if (list->size() == 0) return;
|
if (list->size() == 0) return;
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ void Settings::load() {
|
|||||||
if(data.containsKey(keyword(S_DISPLAYINTERFACE))) setDisplayInterface(data.get<bool>(keyword(S_DISPLAYINTERFACE)));
|
if(data.containsKey(keyword(S_DISPLAYINTERFACE))) setDisplayInterface(data.get<bool>(keyword(S_DISPLAYINTERFACE)));
|
||||||
if(data.containsKey(keyword(S_DISPLAY_TIMEOUT))) setDisplayTimeout(data.get<uint32_t>(keyword(S_DISPLAY_TIMEOUT)));
|
if(data.containsKey(keyword(S_DISPLAY_TIMEOUT))) setDisplayTimeout(data.get<uint32_t>(keyword(S_DISPLAY_TIMEOUT)));
|
||||||
if(data.containsKey(keyword(S_SERIALINTERFACE))) setSerialInterface(data.get<bool>(keyword(S_SERIALINTERFACE)));
|
if(data.containsKey(keyword(S_SERIALINTERFACE))) setSerialInterface(data.get<bool>(keyword(S_SERIALINTERFACE)));
|
||||||
|
if(data.containsKey(keyword(S_SERIAL_ECHO))) setSerialEcho(data.get<bool>(keyword(S_SERIAL_ECHO)));
|
||||||
if(data.containsKey(keyword(S_WEBINTERFACE))) setWebInterface(data.get<bool>(keyword(S_WEBINTERFACE)));
|
if(data.containsKey(keyword(S_WEBINTERFACE))) setWebInterface(data.get<bool>(keyword(S_WEBINTERFACE)));
|
||||||
if(data.containsKey(keyword(S_LEDENABLED))) setLedEnabled(data.get<bool>(keyword(S_LEDENABLED)));
|
if(data.containsKey(keyword(S_LEDENABLED))) setLedEnabled(data.get<bool>(keyword(S_LEDENABLED)));
|
||||||
if(data.containsKey(keyword(S_MAXCH))) setMaxCh(data.get<uint8_t>(keyword(S_MAXCH)));
|
if(data.containsKey(keyword(S_MAXCH))) setMaxCh(data.get<uint8_t>(keyword(S_MAXCH)));
|
||||||
@@ -86,6 +87,7 @@ void Settings::reset() {
|
|||||||
setDisplayInterface(USE_DISPLAY);
|
setDisplayInterface(USE_DISPLAY);
|
||||||
setDisplayTimeout(600);
|
setDisplayTimeout(600);
|
||||||
setSerialInterface(true);
|
setSerialInterface(true);
|
||||||
|
serialEcho = true;
|
||||||
setWebInterface(true);
|
setWebInterface(true);
|
||||||
setLedEnabled(true);
|
setLedEnabled(true);
|
||||||
setMaxCh(14);
|
setMaxCh(14);
|
||||||
@@ -130,6 +132,7 @@ String Settings::getJsonStr() {
|
|||||||
data.set(keyword(S_DISPLAYINTERFACE), displayInterface);
|
data.set(keyword(S_DISPLAYINTERFACE), displayInterface);
|
||||||
data.set(keyword(S_DISPLAY_TIMEOUT), displayTimeout);
|
data.set(keyword(S_DISPLAY_TIMEOUT), displayTimeout);
|
||||||
data.set(keyword(S_SERIALINTERFACE), serialInterface);
|
data.set(keyword(S_SERIALINTERFACE), serialInterface);
|
||||||
|
data.set(keyword(S_SERIAL_ECHO), serialEcho);
|
||||||
data.set(keyword(S_WEBINTERFACE), webInterface);
|
data.set(keyword(S_WEBINTERFACE), webInterface);
|
||||||
data.set(keyword(S_LEDENABLED), ledEnabled);
|
data.set(keyword(S_LEDENABLED), ledEnabled);
|
||||||
data.set(keyword(S_MAXCH), maxCh);
|
data.set(keyword(S_MAXCH), maxCh);
|
||||||
@@ -188,16 +191,17 @@ void Settings::print() {
|
|||||||
|
|
||||||
void Settings::set(const char* str, String value) {
|
void Settings::set(const char* str, String value) {
|
||||||
// booleans
|
// booleans
|
||||||
if (eqls(str,S_BEACONCHANNEL)) setBeaconChannel(eqls(value,STR_TRUE));
|
if (eqls(str, S_BEACONCHANNEL)) setBeaconChannel(s2b(value));
|
||||||
else if (eqls(str,S_AUTOSAVE)) setAutosave(eqls(value,STR_TRUE));
|
else if (eqls(str, S_AUTOSAVE)) setAutosave(s2b(value));
|
||||||
else if (eqls(str,S_BEACONINTERVAL)) setBeaconInterval(eqls(value,STR_TRUE));
|
else if (eqls(str, S_BEACONINTERVAL)) setBeaconInterval(s2b(value));
|
||||||
else if (eqls(str,S_SERIALINTERFACE)) setSerialInterface(eqls(value,STR_TRUE));
|
else if (eqls(str, S_SERIALINTERFACE)) setSerialInterface(s2b(value));
|
||||||
else if (eqls(str,S_DISPLAYINTERFACE)) setDisplayInterface(eqls(value,STR_TRUE));
|
else if (eqls(str, S_DISPLAYINTERFACE)) setDisplayInterface(s2b(value));
|
||||||
else if (eqls(str,S_WEBINTERFACE)) setWebInterface(eqls(value,STR_TRUE));
|
else if (eqls(str, S_WEBINTERFACE)) setWebInterface(s2b(value));
|
||||||
else if (eqls(str,S_RANDOMTX)) setRandomTX(eqls(value,STR_TRUE));
|
else if (eqls(str, S_RANDOMTX)) setRandomTX(s2b(value));
|
||||||
else if (eqls(str,S_LEDENABLED)) setLedEnabled(eqls(value,STR_TRUE));
|
else if (eqls(str, S_LEDENABLED)) setLedEnabled(s2b(value));
|
||||||
else if (eqls(str,S_HIDDEN)) setHidden(eqls(value,STR_TRUE));
|
else if (eqls(str, S_HIDDEN)) setHidden(s2b(value));
|
||||||
else if (eqls(str,S_CAPTIVEPORTAL)) setCaptivePortal(eqls(value,STR_TRUE));
|
else if (eqls(str, S_CAPTIVEPORTAL)) setCaptivePortal(s2b(value));
|
||||||
|
else if (eqls(str, S_SERIAL_ECHO)) setSerialEcho(s2b(value));
|
||||||
|
|
||||||
// integer
|
// integer
|
||||||
else if (eqls(str, S_FORCEPACKETS)) setForcePackets(value.toInt());
|
else if (eqls(str, S_FORCEPACKETS)) setForcePackets(value.toInt());
|
||||||
@@ -238,38 +242,39 @@ void Settings::set(const char* str, String value) {
|
|||||||
String Settings::get(const char* str) {
|
String Settings::get(const char* str) {
|
||||||
if (eqls(str, S_SETTINGS)) print();
|
if (eqls(str, S_SETTINGS)) print();
|
||||||
// booleans
|
// booleans
|
||||||
else if (eqls(str,S_BEACONCHANNEL)) return b2s(getBeaconChannel());
|
else if (eqls(str, S_BEACONCHANNEL)) return b2s(beaconChannel);
|
||||||
else if (eqls(str,S_AUTOSAVE)) return b2s(getAutosave());
|
else if (eqls(str, S_AUTOSAVE)) return b2s(autosave);
|
||||||
else if (eqls(str,S_BEACONINTERVAL)) return b2s(getBeaconInterval());
|
else if (eqls(str, S_BEACONINTERVAL)) return b2s(beaconInterval);
|
||||||
else if (eqls(str,S_SERIALINTERFACE)) return b2s(getSerialInterface());
|
else if (eqls(str, S_SERIALINTERFACE)) return b2s(serialInterface);
|
||||||
else if (eqls(str,S_DISPLAYINTERFACE)) return b2s(getDisplayInterface());
|
else if (eqls(str, S_DISPLAYINTERFACE)) return b2s(displayInterface);
|
||||||
else if (eqls(str,S_WEBINTERFACE)) return b2s(getWebInterface());
|
else if (eqls(str, S_WEBINTERFACE)) return b2s(webInterface);
|
||||||
else if (eqls(str,S_RANDOMTX)) return b2s(getRandomTX());
|
else if (eqls(str, S_RANDOMTX)) return b2s(randomTX);
|
||||||
else if (eqls(str,S_LEDENABLED)) return b2s(getLedEnabled());
|
else if (eqls(str, S_LEDENABLED)) return b2s(ledEnabled);
|
||||||
else if (eqls(str,S_HIDDEN)) return b2s(getHidden());
|
else if (eqls(str, S_HIDDEN)) return b2s(hidden);
|
||||||
else if (eqls(str,S_CAPTIVEPORTAL)) return b2s(getCaptivePortal());
|
else if (eqls(str, S_CAPTIVEPORTAL)) return b2s(captivePortal);
|
||||||
|
else if (eqls(str, S_SERIAL_ECHO)) return b2s(serialEcho);
|
||||||
|
|
||||||
// integer
|
// integer
|
||||||
else if (eqls(str,S_FORCEPACKETS)) return (String)getForcePackets();
|
else if (eqls(str, S_FORCEPACKETS)) return (String)forcePackets;
|
||||||
else if (eqls(str,S_AUTOSAVETIME)) return (String)getAutosaveTime();
|
else if (eqls(str, S_AUTOSAVETIME)) return (String)autosaveTime;
|
||||||
else if (eqls(str,S_DEAUTHSPERTARGET)) return (String)getDeauthsPerTarget();
|
else if (eqls(str, S_DEAUTHSPERTARGET)) return (String)deauthsPerTarget;
|
||||||
else if (eqls(str,S_CHTIME)) return (String)getChTime();
|
else if (eqls(str, S_CHTIME)) return (String)chTime;
|
||||||
else if (eqls(str,S_ATTACKTIMEOUT)) return (String)getAttackTimeout();
|
else if (eqls(str, S_ATTACKTIMEOUT)) return (String)attackTimeout;
|
||||||
else if (eqls(str,S_MAXCH)) return (String)getMaxCh();
|
else if (eqls(str, S_MAXCH)) return (String)maxCh;
|
||||||
else if (eqls(str,S_CHANNEL)) return (String)getChannel();
|
else if (eqls(str, S_CHANNEL)) return (String)channel;
|
||||||
else if (eqls(str,S_DEAUTHREASON)) return (String)getDeauthReason();
|
else if (eqls(str, S_DEAUTHREASON)) return (String)deauthReason;
|
||||||
else if (eqls(str,S_PROBESPERSSID)) return (String)getProbesPerSSID();
|
else if (eqls(str, S_PROBESPERSSID)) return (String)probesPerSSID;
|
||||||
else if (eqls(str,S_MIN_DEAUTHS)) return (String)getMinDeauths();
|
else if (eqls(str, S_MIN_DEAUTHS)) return (String)minDeauths;
|
||||||
else if (eqls(str,S_DISPLAY_TIMEOUT)) return (String)getDisplayTimeout();
|
else if (eqls(str, S_DISPLAY_TIMEOUT)) return (String)displayTimeout;
|
||||||
|
|
||||||
// strings
|
// strings
|
||||||
else if (eqls(str,S_SSID)) return getSSID();
|
else if (eqls(str, S_SSID)) return ssid;
|
||||||
else if (eqls(str,S_LANG)) return getLang();
|
else if (eqls(str, S_LANG)) return lang;
|
||||||
else if (eqls(str,S_PASSWORD)) return getPassword();
|
else if (eqls(str, S_PASSWORD)) return password;
|
||||||
else if (eqls(str, S_MACAP)) return macToStr(getMacAP());
|
else if (eqls(str, S_MACAP)) return macToStr(getMacAP());
|
||||||
else if (eqls(str, S_MACST)) return macToStr(getMacSt());
|
else if (eqls(str, S_MACST)) return macToStr(getMacSt());
|
||||||
else if (eqls(str,S_MAC)) return "AP: " + macToStr(getMacAP()) + ", Station: " + macToStr(getMacSt());
|
else if (eqls(str, S_MAC)) return "AP: " + macToStr(macAP) + ", Station: " + macToStr(macSt);
|
||||||
else if (eqls(str,S_VERSION)) return getVersion();
|
else if (eqls(str, S_VERSION)) return version;
|
||||||
|
|
||||||
else {
|
else {
|
||||||
prnt(S_ERROR_NOT_FOUND);
|
prnt(S_ERROR_NOT_FOUND);
|
||||||
@@ -388,6 +393,10 @@ String Settings::getLang(){
|
|||||||
return lang;
|
return lang;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Settings::getSerialEcho(){
|
||||||
|
return serialEcho;
|
||||||
|
}
|
||||||
|
|
||||||
// ===== SETTERS ===== //
|
// ===== SETTERS ===== //
|
||||||
|
|
||||||
void Settings::setDeauthsPerTarget(uint16_t deauthsPerTarget) {
|
void Settings::setDeauthsPerTarget(uint16_t deauthsPerTarget) {
|
||||||
@@ -572,4 +581,8 @@ void Settings::setLang(String lang){
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Settings::setSerialEcho(bool serialEcho){
|
||||||
|
Settings::serialEcho = serialEcho;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ extern "C" {
|
|||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "A_config.h"
|
#include "A_config.h"
|
||||||
|
|
||||||
#define VERSION "v2.0.1"
|
#define VERSION "v2.0.2"
|
||||||
|
|
||||||
extern void checkFile(String path, String data);
|
extern void checkFile(String path, String data);
|
||||||
extern JsonVariant parseJSONFile(String path, DynamicJsonBuffer &jsonBuffer);
|
extern JsonVariant parseJSONFile(String path, DynamicJsonBuffer &jsonBuffer);
|
||||||
@@ -63,6 +63,7 @@ class Settings {
|
|||||||
uint16_t getMinDeauths();
|
uint16_t getMinDeauths();
|
||||||
uint32_t getDisplayTimeout();
|
uint32_t getDisplayTimeout();
|
||||||
String getLang();
|
String getLang();
|
||||||
|
bool getSerialEcho();
|
||||||
|
|
||||||
void setDeauthsPerTarget(uint16_t deauthsPerTarget);
|
void setDeauthsPerTarget(uint16_t deauthsPerTarget);
|
||||||
void setDeauthReason(uint8_t deauthReason);
|
void setDeauthReason(uint8_t deauthReason);
|
||||||
@@ -92,6 +93,7 @@ class Settings {
|
|||||||
void setMinDeauths(uint16_t minDeauths);
|
void setMinDeauths(uint16_t minDeauths);
|
||||||
void setDisplayTimeout(uint32_t displayTimeout);
|
void setDisplayTimeout(uint32_t displayTimeout);
|
||||||
void setLang(String lang);
|
void setLang(String lang);
|
||||||
|
void setSerialEcho(bool serialEcho);
|
||||||
private:
|
private:
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
@@ -105,6 +107,7 @@ class Settings {
|
|||||||
bool webInterface = true;
|
bool webInterface = true;
|
||||||
bool randomTX = false;
|
bool randomTX = false;
|
||||||
bool ledEnabled = true;
|
bool ledEnabled = true;
|
||||||
|
bool serialEcho = true;
|
||||||
|
|
||||||
uint32_t attackTimeout = 600;
|
uint32_t attackTimeout = 600;
|
||||||
uint32_t autosaveTime = 10000;
|
uint32_t autosaveTime = 10000;
|
||||||
|
|||||||
@@ -469,6 +469,7 @@ static const char S_SSID[] PROGMEM = "ssid";
|
|||||||
static const char S_MAC[] PROGMEM = "mac";
|
static const char S_MAC[] PROGMEM = "mac";
|
||||||
static const char S_MIN_DEAUTHS[] PROGMEM = "minDeauths";
|
static const char S_MIN_DEAUTHS[] PROGMEM = "minDeauths";
|
||||||
static const char S_DISPLAY_TIMEOUT[] PROGMEM = "displayTimeout";
|
static const char S_DISPLAY_TIMEOUT[] PROGMEM = "displayTimeout";
|
||||||
|
static const char S_SERIAL_ECHO[] PROGMEM = "serialEcho";
|
||||||
|
|
||||||
static const char S_SETTINGS_LOADED[] PROGMEM = "Settings loaded from ";
|
static const char S_SETTINGS_LOADED[] PROGMEM = "Settings loaded from ";
|
||||||
static const char S_SETTINGS_RESETED[] PROGMEM = "Settings reseted";
|
static const char S_SETTINGS_RESETED[] PROGMEM = "Settings reseted";
|
||||||
|
|||||||
15
settings.md
15
settings.md
@@ -3,21 +3,22 @@
|
|||||||
- [`ssid`](#ssid)
|
- [`ssid`](#ssid)
|
||||||
- [`password`](#password)
|
- [`password`](#password)
|
||||||
- [`channel`](#channel)
|
- [`channel`](#channel)
|
||||||
- [`hidden`](#HIDDEN)
|
- [`hidden`](#hidden)
|
||||||
- [`captivePortal`](#CAPTIVEPORTAL)
|
- [`captivePortal`](#captiveportal)
|
||||||
- [`lang`](#lang)
|
- [`lang`](#lang)
|
||||||
- [`autosave`](#autosave)
|
- [`autosave`](#autosave)
|
||||||
- [`autosaveTime`](#autosave-time)
|
- [`autosaveTime`](#autosave-time)
|
||||||
- [`displayInterface`](#display-interface)
|
- [`displayInterface`](#display-interface)
|
||||||
- [`displayTimeout`](#DISPLAYTIMEOUT)
|
- [`displayTimeout`](#displaytimeout)
|
||||||
- [`serialInterface`](#serial-interface)
|
- [`serialInterface`](#serial-interface)
|
||||||
|
- [`serialEcho`](#serial-echo)
|
||||||
- [`webInterface`](#web-interface)
|
- [`webInterface`](#web-interface)
|
||||||
- [`ledEnabled`](#ledEnabled)
|
- [`ledEnabled`](#ledEnabled)
|
||||||
- [`maxCh`](#max-ch)
|
- [`maxCh`](#max-ch)
|
||||||
- [`macAP`](#macap)
|
- [`macAP`](#macap)
|
||||||
- [`macSt`](#macst)
|
- [`macSt`](#macst)
|
||||||
- [`chTime`](#ch-time)
|
- [`chTime`](#ch-time)
|
||||||
- [`minDeauths`](#MINDEAUTHS)
|
- [`minDeauths`](#mindeauths)
|
||||||
- [`attackTimeout`](#attacktimeout)
|
- [`attackTimeout`](#attacktimeout)
|
||||||
- [`forcePackets`](#force-packets)
|
- [`forcePackets`](#force-packets)
|
||||||
- [`deauthsPerTarget`](#deauths-per-target)
|
- [`deauthsPerTarget`](#deauths-per-target)
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
- [`beaconChannel`](#beacon-channel)
|
- [`beaconChannel`](#beacon-channel)
|
||||||
- [`beaconInterval`](#beacon-interval)
|
- [`beaconInterval`](#beacon-interval)
|
||||||
- [`randomTx`](#randomtx)
|
- [`randomTx`](#randomtx)
|
||||||
- [`probesPerSSID`](#PROBESPERSSID)
|
- [`probesPerSSID`](#probesperssid)
|
||||||
|
|
||||||
## VERSION
|
## VERSION
|
||||||
`String version = VERSION;`
|
`String version = VERSION;`
|
||||||
@@ -80,6 +81,10 @@ To disable the display timeout, set it to 0.
|
|||||||
`bool serialInterface = true;`
|
`bool serialInterface = true;`
|
||||||
Enables serial interface.
|
Enables serial interface.
|
||||||
|
|
||||||
|
## SERIAL-ECHO
|
||||||
|
`bool serialEcho = true`
|
||||||
|
Enables echo for each incoming message over serial.
|
||||||
|
|
||||||
## WEB-INTERFACE
|
## WEB-INTERFACE
|
||||||
`bool webInterface = false;`
|
`bool webInterface = false;`
|
||||||
Enables web interface.
|
Enables web interface.
|
||||||
|
|||||||
@@ -53,6 +53,7 @@
|
|||||||
"setting_display": "Aktiviert Display-Interface.",
|
"setting_display": "Aktiviert Display-Interface.",
|
||||||
"setting_displayTimeout": "Zeit in Sekunden nachdem der Display automatisch ausschaltet, wenn inaktiv.\nZum Deaktivieren des Timeouts, setze es auf 0.",
|
"setting_displayTimeout": "Zeit in Sekunden nachdem der Display automatisch ausschaltet, wenn inaktiv.\nZum Deaktivieren des Timeouts, setze es auf 0.",
|
||||||
"setting_serial": "Aktiviere Serial-Interface.\nEs wird empfohlen es immer aktiviert zu lassen!",
|
"setting_serial": "Aktiviere Serial-Interface.\nEs wird empfohlen es immer aktiviert zu lassen!",
|
||||||
|
"setting_serialEcho": "Erlaubt Echo für jede Nachricht über die serielle Verbindung.",
|
||||||
"setting_web": "Aktiviert Webinterface.",
|
"setting_web": "Aktiviert Webinterface.",
|
||||||
"setting_led": "Aktiviert (RGB) LED.",
|
"setting_led": "Aktiviert (RGB) LED.",
|
||||||
"setting_maxch": "Max. Kanal zum Scannen.\nUS = 11, EU = 13, Japan = 14.",
|
"setting_maxch": "Max. Kanal zum Scannen.\nUS = 11, EU = 13, Japan = 14.",
|
||||||
|
|||||||
@@ -53,6 +53,7 @@
|
|||||||
"setting_display": "Enables display interface.",
|
"setting_display": "Enables display interface.",
|
||||||
"setting_displayTimeout": "Time in seconds after which the display turns off when inactive.\nTo disable the display timeout, set it to 0.",
|
"setting_displayTimeout": "Time in seconds after which the display turns off when inactive.\nTo disable the display timeout, set it to 0.",
|
||||||
"setting_serial": "Enables serial interface.\nIt's recommended not to disable it!",
|
"setting_serial": "Enables serial interface.\nIt's recommended not to disable it!",
|
||||||
|
"setting_serialEcho": "Enables echo for each incoming message over serial.",
|
||||||
"setting_web": "Enables web interface.",
|
"setting_web": "Enables web interface.",
|
||||||
"setting_led": "Enables the (RGB) LED feature.",
|
"setting_led": "Enables the (RGB) LED feature.",
|
||||||
"setting_maxch": "Max. channel to scan on.\nUS = 11, EU = 13, Japan = 14.",
|
"setting_maxch": "Max. channel to scan on.\nUS = 11, EU = 13, Japan = 14.",
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
"display":false,
|
"display":false,
|
||||||
"displayTimeout":600,
|
"displayTimeout":600,
|
||||||
"serial":true,
|
"serial":true,
|
||||||
|
"serialEcho":true,
|
||||||
"web":true,
|
"web":true,
|
||||||
"led":true,
|
"led":true,
|
||||||
"maxch":14,
|
"maxch":14,
|
||||||
|
|||||||
Reference in New Issue
Block a user