move eth_10mbit to Network Settings

This commit is contained in:
proddy
2026-09-03 12:22:52 +02:00
parent c711d1c6de
commit 13c6ed9e06
15 changed files with 83 additions and 74 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ This release is based on the latest Espressif/Arduino core version 3. It brings
- Commands Service that can be called via MQTT or API or used in the Scheduler Service - Commands Service that can be called via MQTT or API or used in the Scheduler Service
- option to disable factory reset [#3150](https://github.com/emsesp/EMS-ESP32/issues/3150) - option to disable factory reset [#3150](https://github.com/emsesp/EMS-ESP32/issues/3150)
- TLS support with 4MB boards without PSRAM - TLS support with 4MB boards without PSRAM
- added eth_10mbit, which forces 10BASE-T half-duplex & autonegotiation off, halving the PHYs power draw. Its off by default as it will cause issues on managed switches with a port forced to 100Mb [#3213](https://github.com/emsesp/EMS-ESP32/pull/3213) - added eth_10mbit to Network Settings, which forces 10BASE-T half-duplex & autonegotiation off, halving the PHYs power draw. Its off by default as it will cause issues on managed switches with a port forced to 100Mb [#3213](https://github.com/emsesp/EMS-ESP32/pull/3213)
## Fixed ## Fixed
+2 -2
View File
@@ -16,7 +16,8 @@
"enableMDNS": true, "enableMDNS": true,
"enableCORS": false, "enableCORS": false,
"CORSOrigin": "*", "CORSOrigin": "*",
"tx_power": 0 "tx_power": 0,
"eth_10mbit": false
}, },
"AP": { "AP": {
"provision_mode": 2, "provision_mode": 2,
@@ -129,7 +130,6 @@
"eth_power": 15, "eth_power": 15,
"eth_phy_addr": 0, "eth_phy_addr": 0,
"eth_clock_mode": 1, "eth_clock_mode": 1,
"eth_10mbit": false,
"modbus_enabled": false, "modbus_enabled": false,
"modbus_port": 502, "modbus_port": 502,
"modbus_max_clients": 10, "modbus_max_clients": 10,
+1 -1
View File
@@ -42,7 +42,7 @@
"@eslint/js": "^10.0.1", "@eslint/js": "^10.0.1",
"@preact/preset-vite": "^2.10.6", "@preact/preset-vite": "^2.10.6",
"@trivago/prettier-plugin-sort-imports": "^6.0.2", "@trivago/prettier-plugin-sort-imports": "^6.0.2",
"@types/node": "^26.4.0", "@types/node": "^26.4.1",
"@types/react": "^19.2.18", "@types/react": "^19.2.18",
"@types/react-dom": "^19.2.5", "@types/react-dom": "^19.2.5",
"concurrently": "^10.0.5", "concurrently": "^10.0.5",
+26 -26
View File
@@ -56,13 +56,13 @@ importers:
version: 10.0.1(eslint@10.9.1(supports-color@10.2.2)) version: 10.0.1(eslint@10.9.1(supports-color@10.2.2))
'@preact/preset-vite': '@preact/preset-vite':
specifier: ^2.10.6 specifier: ^2.10.6
version: 2.10.6(@babel/core@7.29.7(supports-color@10.2.2))(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)) version: 2.10.6(@babel/core@7.29.7(supports-color@10.2.2))(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))
'@trivago/prettier-plugin-sort-imports': '@trivago/prettier-plugin-sort-imports':
specifier: ^6.0.2 specifier: ^6.0.2
version: 6.0.2(prettier@3.9.6)(supports-color@10.2.2) version: 6.0.2(prettier@3.9.6)(supports-color@10.2.2)
'@types/node': '@types/node':
specifier: ^26.4.0 specifier: ^26.4.1
version: 26.4.0 version: 26.4.1
'@types/react': '@types/react':
specifier: ^19.2.18 specifier: ^19.2.18
version: 19.2.18 version: 19.2.18
@@ -101,10 +101,10 @@ importers:
version: 8.69.0(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3) version: 8.69.0(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
vite: vite:
specifier: ^8.2.2 specifier: ^8.2.2
version: 8.2.2(@types/node@26.4.0)(terser@5.51.2) version: 8.2.2(@types/node@26.4.1)(terser@5.51.2)
vite-plugin-imagemin: vite-plugin-imagemin:
specifier: ^0.6.1 specifier: ^0.6.1
version: 0.6.1(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)) version: 0.6.1(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))
packages: packages:
@@ -668,8 +668,8 @@ packages:
resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==}
deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.
'@types/node@26.4.0': '@types/node@26.4.1':
resolution: {integrity: sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ==} resolution: {integrity: sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA==}
'@types/parse-json@4.0.2': '@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -3394,19 +3394,19 @@ snapshots:
'@popperjs/core@2.11.8': {} '@popperjs/core@2.11.8': {}
'@preact/preset-vite@2.10.6(@babel/core@7.29.7(supports-color@10.2.2))(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2))': '@preact/preset-vite@2.10.6(@babel/core@7.29.7(supports-color@10.2.2))(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))':
dependencies: dependencies:
'@babel/core': 7.29.7(supports-color@10.2.2) '@babel/core': 7.29.7(supports-color@10.2.2)
'@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
'@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2) '@babel/plugin-transform-react-jsx-development': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
'@prefresh/vite': 2.4.12(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)) '@prefresh/vite': 2.4.12(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))
'@rollup/pluginutils': 5.4.0 '@rollup/pluginutils': 5.4.0
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.7(supports-color@10.2.2)) babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.29.7(supports-color@10.2.2))
debug: 4.4.3(supports-color@10.2.2) debug: 4.4.3(supports-color@10.2.2)
magic-string: 0.30.21 magic-string: 0.30.21
picocolors: 1.1.1 picocolors: 1.1.1
vite: 8.2.2(@types/node@26.4.0)(terser@5.51.2) vite: 8.2.2(@types/node@26.4.1)(terser@5.51.2)
vite-prerender-plugin: 0.5.13(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)) vite-prerender-plugin: 0.5.13(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))
zimmerframe: 1.1.5 zimmerframe: 1.1.5
transitivePeerDependencies: transitivePeerDependencies:
- preact - preact
@@ -3421,7 +3421,7 @@ snapshots:
'@prefresh/utils@1.2.1': {} '@prefresh/utils@1.2.1': {}
'@prefresh/vite@2.4.12(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2))': '@prefresh/vite@2.4.12(preact@10.29.8)(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2))':
dependencies: dependencies:
'@babel/core': 7.29.7(supports-color@10.2.2) '@babel/core': 7.29.7(supports-color@10.2.2)
'@prefresh/babel-plugin': 0.5.3 '@prefresh/babel-plugin': 0.5.3
@@ -3429,7 +3429,7 @@ snapshots:
'@prefresh/utils': 1.2.1 '@prefresh/utils': 1.2.1
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
preact: 10.29.8 preact: 10.29.8
vite: 8.2.2(@types/node@26.4.0)(terser@5.51.2) vite: 8.2.2(@types/node@26.4.1)(terser@5.51.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -3523,7 +3523,7 @@ snapshots:
'@types/glob@7.2.0': '@types/glob@7.2.0':
dependencies: dependencies:
'@types/minimatch': 6.0.0 '@types/minimatch': 6.0.0
'@types/node': 26.4.0 '@types/node': 26.4.1
'@types/imagemin-gifsicle@7.0.4': '@types/imagemin-gifsicle@7.0.4':
dependencies: dependencies:
@@ -3552,23 +3552,23 @@ snapshots:
'@types/imagemin@7.0.1': '@types/imagemin@7.0.1':
dependencies: dependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
'@types/imagemin@9.0.1': '@types/imagemin@9.0.1':
dependencies: dependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
'@types/keyv@3.1.4': '@types/keyv@3.1.4':
dependencies: dependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
'@types/minimatch@6.0.0': '@types/minimatch@6.0.0':
dependencies: dependencies:
minimatch: 10.2.6 minimatch: 10.2.6
'@types/node@26.4.0': '@types/node@26.4.1':
dependencies: dependencies:
undici-types: 8.3.0 undici-types: 8.3.0
@@ -3590,11 +3590,11 @@ snapshots:
'@types/responselike@1.0.3': '@types/responselike@1.0.3':
dependencies: dependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
'@types/svgo@2.6.4': '@types/svgo@2.6.4':
dependencies: dependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
'@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)': '@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.9.1(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
dependencies: dependencies:
@@ -5775,7 +5775,7 @@ snapshots:
spdx-correct: 3.2.0 spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1 spdx-expression-parse: 3.0.1
vite-plugin-imagemin@0.6.1(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)): vite-plugin-imagemin@0.6.1(supports-color@10.2.2)(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2)):
dependencies: dependencies:
'@types/imagemin': 7.0.1 '@types/imagemin': 7.0.1
'@types/imagemin-gifsicle': 7.0.4 '@types/imagemin-gifsicle': 7.0.4
@@ -5800,11 +5800,11 @@ snapshots:
imagemin-webp: 6.1.0 imagemin-webp: 6.1.0
jpegtran-bin: 6.0.1 jpegtran-bin: 6.0.1
pathe: 0.2.0 pathe: 0.2.0
vite: 8.2.2(@types/node@26.4.0)(terser@5.51.2) vite: 8.2.2(@types/node@26.4.1)(terser@5.51.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite-prerender-plugin@0.5.13(vite@8.2.2(@types/node@26.4.0)(terser@5.51.2)): vite-prerender-plugin@0.5.13(vite@8.2.2(@types/node@26.4.1)(terser@5.51.2)):
dependencies: dependencies:
kolorist: 1.8.0 kolorist: 1.8.0
magic-string: 0.30.21 magic-string: 0.30.21
@@ -5812,9 +5812,9 @@ snapshots:
simple-code-frame: 1.3.0 simple-code-frame: 1.3.0
source-map: 0.7.6 source-map: 0.7.6
stack-trace: 1.0.0 stack-trace: 1.0.0
vite: 8.2.2(@types/node@26.4.0)(terser@5.51.2) vite: 8.2.2(@types/node@26.4.1)(terser@5.51.2)
vite@8.2.2(@types/node@26.4.0)(terser@5.51.2): vite@8.2.2(@types/node@26.4.1)(terser@5.51.2):
dependencies: dependencies:
lightningcss: 1.33.0 lightningcss: 1.33.0
picomatch: 4.0.7 picomatch: 4.0.7
@@ -5822,7 +5822,7 @@ snapshots:
rolldown: 1.2.6 rolldown: 1.2.6
tinyglobby: 0.2.17 tinyglobby: 0.2.17
optionalDependencies: optionalDependencies:
'@types/node': 26.4.0 '@types/node': 26.4.1
fsevents: 2.3.3 fsevents: 2.3.3
terser: 5.51.2 terser: 5.51.2
-1
View File
@@ -39,7 +39,6 @@ export interface Settings {
eth_power: number; eth_power: number;
eth_phy_addr: number; eth_phy_addr: number;
eth_clock_mode: number; eth_clock_mode: number;
eth_10mbit: boolean;
platform: string; platform: string;
modbus_enabled: boolean; modbus_enabled: boolean;
modbus_port: number; modbus_port: number;
@@ -820,18 +820,6 @@ const ApplicationSettings = () => {
</Grid> </Grid>
</Grid> </Grid>
)} )}
{data.phy_type !== 0 && (
<BlockFormControlLabel
control={
<Checkbox
checked={data.eth_10mbit}
onChange={updateFormValue}
name="eth_10mbit"
/>
}
label="Force 10Mbit half-duplex"
/>
)}
</> </>
)} )}
<Grid container spacing={2} rowSpacing={0}> <Grid container spacing={2} rowSpacing={0}>
@@ -22,6 +22,7 @@ import {
import * as NetworkApi from 'api/network'; import * as NetworkApi from 'api/network';
import { API } from 'api/app'; import { API } from 'api/app';
import { readSystemStatus } from 'api/system';
import { updateState, useRequest } from 'alova/client'; import { updateState, useRequest } from 'alova/client';
import type { APIcall } from 'app/main/types'; import type { APIcall } from 'app/main/types';
@@ -50,6 +51,8 @@ import { isNetworkOpen, networkSecurityMode } from './WiFiNetworkSelector';
const NetworkSettings = () => { const NetworkSettings = () => {
const { LL } = useI18nContext(); const { LL } = useI18nContext();
const { data: hardwareData } = useRequest(readSystemStatus);
const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext); const { selectedNetwork, deselectNetwork } = useContext(WiFiConnectionContext);
const [initialized, setInitialized] = useState(false); const [initialized, setInitialized] = useState(false);
@@ -92,7 +95,8 @@ const NetworkSettings = () => {
nosleep: true, nosleep: true,
enableMDNS: true, enableMDNS: true,
enableCORS: false, enableCORS: false,
CORSOrigin: '*' CORSOrigin: '*',
eth_10mbit: current_data ? current_data.eth_10mbit : false
}) })
); );
} }
@@ -136,7 +140,7 @@ const NetworkSettings = () => {
}; };
const content = () => { const content = () => {
if (!data) { if (!data || !hardwareData) {
return <FormLoader onRetry={loadData} errorMessage={errorMessage || ''} />; return <FormLoader onRetry={loadData} errorMessage={errorMessage || ''} />;
} }
@@ -246,6 +250,23 @@ const NetworkSettings = () => {
} }
label={LL.NETWORK_LOW_BAND()} label={LL.NETWORK_LOW_BAND()}
/> />
{hardwareData.esp_platform === 'ESP32' && (
<>
<Typography sx={{ pt: 2 }} variant="h6" color="primary">
Ethernet
</Typography>
<BlockFormControlLabel
control={
<Checkbox
name="eth_10mbit"
checked={data.eth_10mbit}
onChange={updateFormValue}
/>
}
label="Force 10Mbit half-duplex"
/>
</>
)}
<Typography sx={{ pt: 2 }} variant="h6" color="primary"> <Typography sx={{ pt: 2 }} variant="h6" color="primary">
{LL.GENERAL_OPTIONS()} {LL.GENERAL_OPTIONS()}
</Typography> </Typography>
+1
View File
@@ -54,6 +54,7 @@ export interface NetworkSettingsType {
enableMDNS: boolean; enableMDNS: boolean;
enableCORS: boolean; enableCORS: boolean;
CORSOrigin: string; CORSOrigin: string;
eth_10mbit: boolean;
[key: string]: unknown; [key: string]: unknown;
} }
+1
View File
@@ -31,6 +31,7 @@ class DummySettings {
// SYSTEM // SYSTEM
bool bandwidth20 = false; bool bandwidth20 = false;
bool nosleep = true; bool nosleep = true;
bool eth_10mbit = false;
// MQTT // MQTT
uint16_t publish_time = 10; uint16_t publish_time = 10;
+23 -23
View File
@@ -58,7 +58,6 @@ let settings = {
eth_power: 15, eth_power: 15,
eth_phy_addr: 0, eth_phy_addr: 0,
eth_clock_mode: 1, eth_clock_mode: 1,
eth_10mbit: false,
led_type: 0, led_type: 0,
platform: 'ESP32', platform: 'ESP32',
modbus_enabled: false, modbus_enabled: false,
@@ -96,9 +95,9 @@ let system_status = {
// network_status: 10, // ethernet connected // network_status: 10, // ethernet connected
// network_status: 6, // wifi disconnected // network_status: 6, // wifi disconnected
wifi_rssi: -41, wifi_rssi: -41,
esp_platform: 'ESP32S3', esp_platform: 'ESP32',
build_flags: 'DEMO', build_flags: 'DEMO',
cpu_type: 'ESP32-S3', cpu_type: 'ESP32',
cpu_rev: 0, cpu_rev: 0,
cpu_cores: 2, cpu_cores: 2,
cpu_freq_mhz: 240, cpu_freq_mhz: 240,
@@ -203,8 +202,8 @@ system_status.partitions[0].version = THIS_VERSION; // app0
// set the ESP platform - using ESP32 will disable OTA and automatic version downloading // set the ESP platform - using ESP32 will disable OTA and automatic version downloading
let emulate_esp: string; let emulate_esp: string;
emulate_esp = 'ESP32S3'; // emulate_esp = 'ESP32S3';
// emulate_esp = 'ESP32'; emulate_esp = 'ESP32';
switch (emulate_esp) { switch (emulate_esp) {
// ESP32 4MB // ESP32 4MB
@@ -330,10 +329,10 @@ function updateMask(entity: any, de: any, dd: any) {
const old_custom_name = dd.nodes[dd_objIndex].cn; const old_custom_name = dd.nodes[dd_objIndex].cn;
console.log( console.log(
'comparing names, old (' + 'comparing names, old (' +
old_custom_name + old_custom_name +
') with new (' + ') with new (' +
new_custom_name + new_custom_name +
')' ')'
); );
if (old_custom_name !== new_custom_name) { if (old_custom_name !== new_custom_name) {
changed = true; changed = true;
@@ -450,9 +449,9 @@ function upgradeImportantMessages(version: string) {
console.log( console.log(
'upgradeImportantMessageType: version=' + 'upgradeImportantMessageType: version=' +
version + version +
' type=' + ' type=' +
upgradeImportantMessageType_n upgradeImportantMessageType_n
); );
return { upgradeImportantMessageType: upgradeImportantMessageType_n }; return { upgradeImportantMessageType: upgradeImportantMessageType_n };
} }
@@ -503,17 +502,17 @@ function get_versions() {
console.log( console.log(
'getVersions: current=' + 'getVersions: current=' +
THIS_VERSION + THIS_VERSION +
' stable=' + ' stable=' +
LATEST_STABLE_VERSION + LATEST_STABLE_VERSION +
' (upgradeable=' + ' (upgradeable=' +
(STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') + (STABLE_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
') dev=' + ') dev=' +
LATEST_DEV_VERSION + LATEST_DEV_VERSION +
' (upgradeable=' + ' (upgradeable=' +
(DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') + (DEV_VERSION_IS_UPGRADEABLE ? 'YES' : 'NO') +
')' + ')' +
(MOCK_OFFLINE ? ' [offline]' : '') (MOCK_OFFLINE ? ' [offline]' : '')
); );
return data; return data;
} }
@@ -583,6 +582,7 @@ let network_settings = {
enableMDNS: true, enableMDNS: true,
enableCORS: false, enableCORS: false,
CORSOrigin: '*', CORSOrigin: '*',
eth_10mbit: false,
local_ip: '', local_ip: '',
gateway_ip: '', gateway_ip: '',
subnet_mask: '', subnet_mask: '',
@@ -24,6 +24,7 @@ void NetworkSettings::read(NetworkSettings & settings, JsonObject root) {
root["enableCORS"] = settings.enableCORS; root["enableCORS"] = settings.enableCORS;
root["CORSOrigin"] = settings.CORSOrigin; root["CORSOrigin"] = settings.CORSOrigin;
root["tx_power"] = settings.tx_power; root["tx_power"] = settings.tx_power;
root["eth_10mbit"] = settings.eth_10mbit;
// extended settings // extended settings
JsonUtils::writeIP(root, "local_ip", settings.localIP); JsonUtils::writeIP(root, "local_ip", settings.localIP);
@@ -51,6 +52,7 @@ StateUpdateResult NetworkSettings::update(JsonObject root, NetworkSettings & set
settings.enableMDNS = root["enableMDNS"] | true; settings.enableMDNS = root["enableMDNS"] | true;
settings.enableCORS = root["enableCORS"]; settings.enableCORS = root["enableCORS"];
settings.CORSOrigin = root["CORSOrigin"] | "*"; settings.CORSOrigin = root["CORSOrigin"] | "*";
settings.eth_10mbit = root["eth_10mbit"];
// extended settings // extended settings
JsonUtils::readIP(root, "local_ip", settings.localIP); JsonUtils::readIP(root, "local_ip", settings.localIP);
+1
View File
@@ -39,6 +39,7 @@ class NetworkSettings {
bool enableMDNS = true; bool enableMDNS = true;
bool enableCORS = false; bool enableCORS = false;
String CORSOrigin = "*"; String CORSOrigin = "*";
bool eth_10mbit = false; // force 10BASE-T half-duplex, no auto-negotiation
// optional configuration for static IP address // optional configuration for static IP address
IPAddress localIP; IPAddress localIP;
+2 -2
View File
@@ -49,15 +49,15 @@ void Network::begin() {
nosleep_ = settings.nosleep; nosleep_ = settings.nosleep;
tx_power_ = settings.tx_power; tx_power_ = settings.tx_power;
bssid_ = settings.bssid; bssid_ = settings.bssid;
eth_10mbit_ = settings.eth_10mbit;
}); });
// read Ethernet settings // read Ethernet hardware settings
EMSESP::webSettingsService.read([&](WebSettings & settings) { EMSESP::webSettingsService.read([&](WebSettings & settings) {
phy_type_ = settings.phy_type; phy_type_ = settings.phy_type;
eth_power_ = settings.eth_power; eth_power_ = settings.eth_power;
eth_phy_addr_ = settings.eth_phy_addr; eth_phy_addr_ = settings.eth_phy_addr;
eth_clock_mode_ = settings.eth_clock_mode; eth_clock_mode_ = settings.eth_clock_mode;
eth_10mbit_ = settings.eth_10mbit;
}); });
// get Access Point settings // get Access Point settings
-3
View File
@@ -79,7 +79,6 @@ void WebSettings::read(WebSettings & settings, JsonObject root) {
root["eth_power"] = settings.eth_power; root["eth_power"] = settings.eth_power;
root["eth_phy_addr"] = settings.eth_phy_addr; root["eth_phy_addr"] = settings.eth_phy_addr;
root["eth_clock_mode"] = settings.eth_clock_mode; root["eth_clock_mode"] = settings.eth_clock_mode;
root["eth_10mbit"] = settings.eth_10mbit;
root["modbus_enabled"] = settings.modbus_enabled; root["modbus_enabled"] = settings.modbus_enabled;
root["modbus_port"] = settings.modbus_port; root["modbus_port"] = settings.modbus_port;
root["modbus_max_clients"] = settings.modbus_max_clients; root["modbus_max_clients"] = settings.modbus_max_clients;
@@ -121,7 +120,6 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
settings.eth_power = root["eth_power"]; settings.eth_power = root["eth_power"];
settings.eth_phy_addr = root["eth_phy_addr"]; settings.eth_phy_addr = root["eth_phy_addr"];
settings.eth_clock_mode = root["eth_clock_mode"]; settings.eth_clock_mode = root["eth_clock_mode"];
settings.eth_10mbit = root["eth_10mbit"];
settings.led_type = root["led_type"]; // 1 = RGB-LED settings.led_type = root["led_type"]; // 1 = RGB-LED
reset_flags(); reset_flags();
@@ -147,7 +145,6 @@ StateUpdateResult WebSettings::update(JsonObject root, WebSettings & settings) {
if (settings.phy_type != PHY_type::PHY_TYPE_NONE) { if (settings.phy_type != PHY_type::PHY_TYPE_NONE) {
check_flag(original_settings.eth_power, settings.eth_power, ChangeFlags::RESTART); check_flag(original_settings.eth_power, settings.eth_power, ChangeFlags::RESTART);
check_flag(original_settings.eth_clock_mode, settings.eth_clock_mode, ChangeFlags::RESTART); check_flag(original_settings.eth_clock_mode, settings.eth_clock_mode, ChangeFlags::RESTART);
check_flag(original_settings.eth_10mbit, settings.eth_10mbit, ChangeFlags::RESTART);
if (settings.eth_power != -1) { // Ethernet Power -1 means disabled if (settings.eth_power != -1) { // Ethernet Power -1 means disabled
EMSESP::system_.remove_gpio(settings.eth_power, true); EMSESP::system_.remove_gpio(settings.eth_power, true);
} }
-1
View File
@@ -119,7 +119,6 @@ class WebSettings {
int8_t eth_power; // -1 means disabled int8_t eth_power; // -1 means disabled
uint8_t eth_phy_addr; uint8_t eth_phy_addr;
uint8_t eth_clock_mode; uint8_t eth_clock_mode;
bool eth_10mbit; // force 10BASE-T half-duplex, no auto-negotiation
bool developer_mode; // developer mode bool developer_mode; // developer mode
bool disable_reset; // disable reset bool disable_reset; // disable reset