diff --git a/package.json b/package.json index ac2ff3e1c..f86d97c4e 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "esc-configurator", - "version": "0.27.2", + "version": "0.29.0", "private": false, "license": "AGPL-3.0", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.16.7", "@palmabit/react-cookie-law": "^0.6.2", "autoprefixer": "^10.4.2", + "bin-to-hex": "^0.4.1", "bluejay-rtttl-parse": "^2.0.2", "compare-versions": "^4.1.3", "dateformat": "^5.0.2", diff --git a/src/Components/FirmwareSelector/__tests__/index.test.jsx b/src/Components/FirmwareSelector/__tests__/index.test.jsx index 2d19da3bb..d9a900518 100644 --- a/src/Components/FirmwareSelector/__tests__/index.test.jsx +++ b/src/Components/FirmwareSelector/__tests__/index.test.jsx @@ -45,6 +45,7 @@ describe('FirmwareSelector', () => { onCancel={onCancel} onLocalSubmit={onLocalSubmit} onSubmit={onSubmit} + showUnstable={false} /> ); diff --git a/src/Components/MainContent/index.jsx b/src/Components/MainContent/index.jsx index 92119ee70..ea41077eb 100644 --- a/src/Components/MainContent/index.jsx +++ b/src/Components/MainContent/index.jsx @@ -16,29 +16,41 @@ function WarningWrapper() { const { t } = useTranslation('common'); return ( -
-

+ <> +

- - {t('note')} + + {t('warning')} + + {t('warningRadio')} +
- - {t('notePropsOff')} - +
+

+ + + {t('note')} + + -
+ + {t('notePropsOff')} + - - - {t('note')} - +
- {t('noteConnectPower')} -
-

-
+ + + {t('note')} + + + {t('noteConnectPower')} + +

+
+ ); } @@ -85,8 +97,11 @@ function MainContent({ const unsupportedNames = ['JESC', 'BLHeli_M', 'BLHeli_32']; const unsupported = unsupportedNames.includes(settings.NAME); + const disableFlashingNames = ['BLHeli_32']; + const disableFlashing = disableFlashingNames.includes(settings.NAME); + const canWrite = (escs.length > 0) && !isSelecting && settings && !isFlashing && !isReading && !isWriting && !unsupported; - const canFlash = (escs.length > 0) && !isSelecting && !isWriting && !isFlashing && !isReading; + const canFlash = (escs.length > 0) && !isSelecting && !isWriting && !isFlashing && !isReading && !disableFlashing; const canRead = !isReading && !isWriting && !isSelecting && !isFlashing; const showMelodyEditor = escs.length > 0 && escs[0].individualSettings.STARTUP_MELODY ? true : false; diff --git a/src/Components/MainContent/style.scss b/src/Components/MainContent/style.scss index 9d8d9d80f..e1d02f230 100644 --- a/src/Components/MainContent/style.scss +++ b/src/Components/MainContent/style.scss @@ -12,8 +12,10 @@ .note { margin-bottom: 20px; - background-color: #fff7cd; - border: 1px solid #ffe55f; + background-color: #fff3cd; + border: 1px solid #ffeeba; + color: #856404; + margin-top: 5px; margin-bottom: 25px; border-radius: 3px; @@ -24,6 +26,13 @@ @media screen and (max-width: 768px) { margin-bottom: 18px; } + + &.warning { + margin-bottom: 10px; + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; + } } .note.alert { diff --git a/src/Components/MelodyEditor/style.scss b/src/Components/MelodyEditor/style.scss index e54963afd..fcb72942d 100644 --- a/src/Components/MelodyEditor/style.scss +++ b/src/Components/MelodyEditor/style.scss @@ -15,10 +15,6 @@ display: flex; flex-direction: row; - .info-wrapper-wrapper { - white-space: nowrap; - } - select { margin-left: 10px; height: 20px; diff --git a/src/Containers/App/index.jsx b/src/Containers/App/index.jsx index 4de8cc0fd..0c44433ca 100644 --- a/src/Containers/App/index.jsx +++ b/src/Containers/App/index.jsx @@ -4,6 +4,7 @@ import React, { Component } from 'react'; import Rtttl from 'bluejay-rtttl-parse'; import dateFormat from 'dateformat'; import i18next from 'i18next'; +import BinToHex from 'bin-to-hex'; import { fetchHexCached } from '../../utils/Fetch'; import { getMasterSettings } from '../../utils/helpers/Settings'; @@ -210,10 +211,14 @@ class App extends Component { }; fetchConfigs = async() => { - const { configs } = this.state; + const { + appSettings, + configs, + } = this.state; for(let i = 0; i < sources.length; i += 1) { const source = sources[i]; const name = source.getName(); + source.setSkipCache(appSettings.settings.skipCache.value); try { configs.versions[name] = await source.getVersions(); @@ -572,16 +577,18 @@ class App extends Component { this.setActions({ isFlashing: true }); this.addLogMessage('dumpingEsc', { index: target + 1 }); - const data = await this.serial.readFirmware(target, esc, updateProgress); + const dataBin = await this.serial.readFirmware(target, esc, updateProgress); + const binToHex = new BinToHex(16, 0x00, 0xFF); + const dataHex = binToHex.convert(dataBin); updateProgress(0); this.setActions({ isFlashing: false }); const element = document.createElement("a"); - const file = new Blob([data], { type: 'application/octet/stream' }); + const file = new Blob([dataHex], { type: 'text/plain' }); element.href = URL.createObjectURL(file); - element.download = "firmware.bin"; + element.download = "dump.hex"; document.body.appendChild(element); element.click(); }; diff --git a/src/changelog.json b/src/changelog.json index d097de668..458887596 100644 --- a/src/changelog.json +++ b/src/changelog.json @@ -1,8 +1,21 @@ [ + { + "title": "Unreleased", + "items": [ + "Enhancement: More melodies", + "Enhancement: Show warning to turn off radio", + "Enhancement: Dump firmware as HEX file instead of BIN", + "Enhancement: Allow skipping cache for new releases", + "Bugifx: Do not check for mistagging if JESC is detected", + "Bugfix: Properly display flashed fail in ESC name", + "Bugfix: Allow re-flashing if firmware is broken", + "Bugfix: Do not cut off hint text for melody sync checkbox" + ] + }, { "title": "0.27.2", "items": [ - "Bugfix: Limit fetching release list for Bluejay to the last 5 releases" + "Chore: Limit to fetching last 5 releases" ] }, { diff --git a/src/melodies.json b/src/melodies.json index 93a6ccbb6..82b8f67cb 100644 --- a/src/melodies.json +++ b/src/melodies.json @@ -68,6 +68,15 @@ "oops4:d=4,o=5,b=120:p.,a3,2d4,2c#4" ] }, + { + "name": "Bobby Helms - Jingle Bell Rock", + "tracks": [ + "jingle1:b=200,o=5,d=4:f#,32p,8f#,32p,8f#,p,f#,32p,8f#,32p,8f#,p,f#,32p,8a,32p,d,32p,8e,64p,f,32p,8e,32p,d,32p,8b4,32p,2a4", + "jingle2:b=200,o=5,d=4:d,32p,8d,32p,8d,p,c#,32p,8c#,32p,8c#,p,d,32p,8e,32p,a4,32p,8b4,32p,c,32p,8b4,64p,a4,32p,8g4,32p,2f#4", + "jingle3:b=200,o=5,d=4:f#,32p,8f#,32p,8f#,p,f#,32p,8f#,32p,8f#,p,f#,32p,8a,32p,d,32p,8e,64p,f,32p,8e,32p,d,32p,8b4,32p,2a4", + "jingle4:b=200,o=5,d=4:d,32p,8d,32p,8d,p,c#,32p,8c#,32p,8c#,p,d,32p,8e,32p,a4,32p,8b4,32p,c,32p,8b4,64p,a4,32p,8g4,32p,2f#4" + ] + }, { "name": "Chiquitita - Abba", "tracks": [ @@ -77,6 +86,24 @@ "ab_chiq_b2:b=104,o=4,d=16:a3,p,a3,p,a,p,a3,p,a3,p,a3,p,a,p,a3,p,a3,p,a3,p,a,p,a3,p,a,p,a,p,h,p,c#5,p,d,p,d,p,d5,p,d,p,d,p,d,p,d5,p,d,p,d,p,d,p,d5,p,d,p,d,p,d,p,8d5" ] }, + { + "name": "Cheech and Chong - Earache my eye", + "tracks": [ + "Earache:d=4,o=3,b=180:8b,8a#,a,8b,8a#,a,d4,32p,d4,1b,1b", + "Earache:d=4,o=4,b=180:8b,8a#,a,8b,8a#,a,d5,32p,d5,1b,1b", + "Earache:d=4,o=3,b=180:8b,8a#,a,8b,8a#,a,d4,32p,d4,1b,1b", + "Earache:d=4,o=4,b=180:8f#,8f,e,8f#,8f,e,a,32p,a,1f#,1f#" + ] + }, + { + "name": "Doom Theme", + "tracks": [ + "e1m1:b=420,o=4,d=32:8c4,8p,4c4,4c5,8c4,8p,4c4,4a#4,8c4,8p,4c4,4g#4,8c4,8p,4c4,4f#4,8c4,8p,4c4,4g4,4g#4,8c4,8p,4c4,4c5,8c4,8p,4c4,4a#4,8c4,8p,4c4,4g#4,8c4,8p,4c4,1f#4", + "e1m1:b=420,o=4,d=32:8c4,8p,4c4,4c5,8c4,8p,4c4,4a#4,8c4,8p,4c4,4g#4,8c4,8p,4c4,4f#4,8c4,8p,4c4,4g4,4g#4,8c4,8p,4c4,4c5,8c4,8p,4c4,4a#4,8c4,8p,4c4,4g#4,8c4,8p,4c4,1c4", + "e1m1:b=420,o=4,d=32:4c4,4p,4c4,4p,4c4,4p,4c4,4p,4c4,4p,4c4,4p,4c4,2c4,4p,4c4,2p,4p,4c4,2p,4p,4c4,4p,4c4,1c4", + "e1m1:b=420,o=4,d=32:8c5,8p,4c5,4c6,8c5,8p,4c5,4a#5,8c5,8p,4c5,4g#5,8c5,8p,4c5,4f#5,8c5,8p,4c5,4g5,4g#5,8c5,8p,4c5,4c6,8c5,8p,4c5,4a#5,8c5,8p,4c5,4g#5,8c5,8p,4c5,1f#4" + ] + }, { "name": "Everything is Awesome", "tracks": [ @@ -95,6 +122,12 @@ "expance4:b=140,o=3,d=4:p,p,2f,8f.,16p,f,2e,2p,1a,p" ] }, + { + "name": "Guns n Roses - Sweet Child O Mine", + "tracks": [ + "SweetChi:d=4,o=5,b=125:8f6,8g#,8d#,8c#6,8g#,8f#,8f#6,8g#,8f6,8g#,8d#,8c#6,8g#,8f#,8f#6,8g#,8f6,8g#" + ] + }, { "name": "Giorno's Theme", "tracks": [ @@ -120,6 +153,15 @@ "mmmbop4:d=4,o=5,b=104:p.,8e.3,16p,8e.3,16p,8e3,16p,16e3,8p,8e3,8f#.3,16p,8f#.3,16p,8f#3,16p,16f#3,8p,8f#3,8e.3,16p,8e.3,16p,8e3,16p,16e3,8p,8e3" ] }, + { + "name": "Kino - A Pack of Cigarettes", + "tracks": [ + "Kino1:b=128,o=7,d=8:b4,c5,b5,a5,e5,4c5,g5,e5,c5,4d5,a5,f#5,c5,b4,b4,b5,a5,e5,4c5,g5,e5,b4,c5,p,a5,f#5,c5,4b4", + "Kino2:b=128,o=7,d=8:e4,e3,4a3,p,a3,4c4,p,c4,4d4,p,d4,4e4,4e4,4a3,p,a3,4c4,p,c4,4d4,p,d4,4e4", + "Kino3:b=128,o=7,d=8:b4,c5,b5,a5,e5,4c5,g5,e5,c5,4d5,a5,f#5,c5,b4,b4,b5,a5,e5,4c5,g5,e5,b4,c5,p,a5,f#5,c5,4b4", + "Kino4:b=128,o=7,d=8:e4,e3,4a3,p,a3,4c4,p,c4,4d4,p,d4,4e4,4e4,4a3,p,a3,4c4,p,c4,4d4,p,d4,4e4" + ] + }, { "name": "Loituma - Ievan Polkka", "tracks": [ @@ -192,6 +234,15 @@ "pokemon4:b=135,o=5,d=4:16d4,8p.,1p,16g3,8p.,16g3,8p.,32g3,32p,32g3,32p,16g3,16p,32g3,32p,32g3,32p,16g3,16p,16g3,p,16p,16g3,16p,p,16g3,8p.,16f3,16p,p,16f3,p,16p,16f3,8p.,16g3,p,16p,16g3,p,16p,16g3,8p.,16g3" ] }, + { + "name": "Pokémon Red/Blue Title Theme (Short)", + "tracks": [ + "PkmnOpening1:d=8,o=7,b=198:16d4,16p,16d4,16p,4a4,16d4,16p,16d4,16p,4a#4,16d4,16p,16d4,16p,4c5,16d4,16p,16d4,16p,4c#5,1d5", + "PkmnOpening2:d=8,o=7,b=198:16a3,16p,16a3,16p,4d4,16a3,16p,16a3,16p,4d#4,16a3,16p,16a3,16p,4f4,16a3,16p,16a3,16p,4g4,1f#4", + "PkmnOpening3:d=8,o=7,b=198:16d4,16p,16d4,16p,4a4,16d4,16p,16d4,16p,4a4,16d4,16p,16d4,16p,4a#4,16d4,16p,16d4,16p,4a#4,1a4", + "PkmnOpening4:d=8,o=7,b=198:16d4,16p,16d4,16p,4a4,16d4,16p,16d4,16p,4a#4,16d4,16p,16d4,16p,4c5,16d4,16p,16d4,16p,4c#5,1d5" + ] + }, { "name": "Rick & Morty Theme", "tracks": [ @@ -244,11 +295,17 @@ ] }, { - "name": "Starwars Theme", + "name": "Star Wars Theme", "tracks": [ "starwars:d=4,o=5,b=180:8f,8f,8f,2a#.,2f.6,8d#6,8d6,8c6,2a#.6,f.6,8d#6,8d6,8c6,2a#.6,f.6,8d#6,8d6,8d#6,2c6" ] }, + { + "name": "Star Wars - Cantina Song", + "tracks": [ + "Cantina:d=4,o=5,b=250:8a,8p,8d6,8p,8a,8p,8d6,8p,8a,8d6,8p,8a,8p,8g#,a,8a,8g#,8a,g,8f#,8g,8f#,f.,8d.,16p,p.,8a,8p,8d6,8p,8a,8p,8d6,8p,8a,8d6,8p,8a,8p,8g#,8a,8p,8g,8p,g.,8f#,8g,8p,8c6,a#,a,g" + ] + }, { "name": "Star Trek - The Next Generation", "tracks": [ @@ -307,6 +364,26 @@ "le_unama_b:b=150,o=4,d=1:2p,8p,8f3,8c,8a,8c,8a,8c,8a,8c,8g3,8d,8h,8d,8h,8d,8h,8d,8a3,8e,8c5,8e,8c5,8e,8c5,8e,4c5,2p.,8f3,8c,8a,8c,8a,8c,8a,8c,8g3,8d,8h,8d,8h,8d,8h,8d,8a3,8e,8a,8e,8a,8e,8a,8e,4a" ] }, + { + "name": "Violent Femmes - Blister In the Sun", + "tracks": [ + "BlisterI:d=4,o=5,b=285:e.,8g#.,8e.,a.,8g#.,e.,g#.,8e.,a.,g#.,e.,8g#.,8e.,a.,8g#.,e.,p,p,p,p,p,e.,8g#.,8e.,a.,8g#.,e.,g#.,8e.,a.,g#.,e.,8g#.,8e.,a.,8g#.,e." + ] + }, + { + "name": "Violent Femmes - Blister In the Sun (short)", + "tracks": [ + "BlisterI:d=4,o=5,b=285:e.,8g#.,8e.,a.,8g#.,e.,g#.,8e.,a.,g#.,e.,8g#.,8e.,a.,8g#.,e." + ] + }, + { + "name":"We wish you a merry christmas", + "tracks":[ + "WE_WISH_YOU:d=2,o=2,b=384:2c#4,16p,2f#4,16p,4f#4,32p,4g#4,32p,4f#4,32p,4f4,32p,2d#4,32p,2d#4,16p,2d#4,16p,2g#4,16p,4g#4,32p,4a#4,32p,4g#4,32p,4f#4,32p,2f4,16p,2c#4,16p,2c#4,16p,2a#4,16p,4a#4,32p,4b4,32p,4a#4,32p,4g#4,32p,2f#4,16p,2d#4,16p,4c#4,32p,4c#4,16p,2d#4,16p,2g#4,16p,2f4,16p,1f#4", + "WE_WISH_YOU:d=2,o=2,b=384:2c#4,16p,2f#4,16p,2f#4,16p,2f#4,16p,2d#4,16p,2d#4,16p,2d#4,16p,2g#4,16p,2g#4,16p,2g#4,16p,2f4,16p,2c#4,16p,2c#4,16p,2a#4,16p,2a#4,16p,2a#4,16p,2f#4,16p,2f#4,16p,2c#4,16p,2d#4,16p,2g#4,16p,2f4,16p,1a#4", + "WE_WISH_YOU:d=2,o=2,b=384:2c#4,16p,2a#4,16p,2a#4,16p,2a#4,16p,2b#5,16p,2b#5,16p,2d#4,16p,2c5,16p,2c5,16p,2c5,16p,2c#5,16p,2c#5,16p,2c#4,16p,2d4,16p,2d4,16p,2f#4,16p,2d#4,16p,2c#4,16p,2c#4,16p,2f#4,16p,2b#4,16p,2c#4,16p,1c#4" + ] + }, { "name": "X-Files", "tracks": [ @@ -322,6 +399,15 @@ "GON_GIVE_IT_TO_YA:d=2,o=2,b=384:2a#4,16p,2a#4,16p,4a#6,32p,4a#6,32p,4a#6,32p,4a#6,32p,2g#4,16p,2g#4,16p,4g#6,32p,4g#6,32p,4g#6,32p,4g#6,32p,2f#4,16p,2f#4,16p,4f#6,32p,4f#6,32p,4f#6,32p,4f#6,32p,2d#4,16p,2d#4,16p,4d#6,32p,4d#6,32p,4d#6,32p,4d#6,32p" ] }, + { + "name": "Zelda Chest opening", + "tracks": [ + "ZeldaChest1:b=122,o=7,d=8:16b4,16c#5,16d#5,16f5,16c5,16d5,16e5,16f#5,16c#5,16d#5,16f5,16g5,16d5,16e5,16f#5,16g#5,4p,a5,e5,f5,2f#5", + "ZeldaChest2:b=122,o=7,d=8:4c#4,4d4,4d#4,4e4,4p,c5,c#5,d5,2d#5", + "ZeldaChest3:b=122,o=7,d=8:16b3,16c#4,16d#4,16f4,16c4,16d4,16e4,16f#4,16c#4,16d#4,16f4,16g4,16d4,16e4,16f#4,16g#4,4p,d#5,a#5,g4,2g#4", + "ZeldaChest4:b=122,o=7,d=8:16b4,16c#5,16d#5,16f5,16c5,16d5,16e5,16f#5,16c#5,16d#5,16f5,16g5,16d5,16e5,16f#5,16g#5,4p,f4,f#4,b5,2c6" + ] + }, { "name": "Zelda Theme", "tracks": [ diff --git a/src/settings.json b/src/settings.json index 7977356e4..2c970a675 100644 --- a/src/settings.json +++ b/src/settings.json @@ -1,5 +1,5 @@ { - "version": "v0.27.2", + "version": "v0.29.0", "corsProxy": "https://cors.bubblesort.me/?", "availableLanguages": [ { @@ -60,6 +60,10 @@ "unstableVersions": { "type": "boolean", "value": false + }, + "skipCache": { + "type": "boolean", + "value": false } } } diff --git a/src/sources/AM32/index.js b/src/sources/AM32/index.js index 231f23e11..c48eeb1fb 100644 --- a/src/sources/AM32/index.js +++ b/src/sources/AM32/index.js @@ -51,6 +51,10 @@ class AM32Source extends GithubSource { async getVersions() { return this.getRemoteVersionsList(GITHUB_REPO, blacklist); } + + getValidNames() { + return Object.keys(escs.layouts); + } } const source = new AM32Source( diff --git a/src/sources/Blheli/index.js b/src/sources/Blheli/index.js index 9a4f15bc5..3f3e0e973 100644 --- a/src/sources/Blheli/index.js +++ b/src/sources/Blheli/index.js @@ -2,8 +2,9 @@ import Source from '../Source'; class BLHeliSource extends Source { buildDisplayName(flash, make) { + const flashFailedString = "**FLASH*FAILED**"; const { - MAIN_REVISION, SUB_REVISION, + MAIN_REVISION, SUB_REVISION, NAME, } = flash.settings; let revision = 'Unsupported/Unrecognized'; if(MAIN_REVISION !== undefined && SUB_REVISION !== undefined) { @@ -14,6 +15,10 @@ class BLHeliSource extends Source { make += ` (Probably mistagged: ${flash.actualMake})`; } + if(NAME === flashFailedString) { + return flashFailedString; + } + return `${make} - ${this.name}, ${revision}`; } diff --git a/src/sources/GithubSource.js b/src/sources/GithubSource.js index 1eaba78c2..2fdd8cb83 100644 --- a/src/sources/GithubSource.js +++ b/src/sources/GithubSource.js @@ -19,7 +19,7 @@ class GithubSource extends Source { * @returns */ async getRemoteVersionsList(repo, blacklist = [], amount = 100) { - const githubReleases = await fetchJsonCached(`https://api.github.com/repos/${repo}/releases?per_page=${amount}&page=1`); + const githubReleases = await fetchJsonCached(`https://api.github.com/repos/${repo}/releases?per_page=${amount}&page=1`, this.skipCache); const releasesWithAssets = githubReleases.filter( (release) => release.assets.length && !blacklist.includes(release.tag_name) ); diff --git a/src/sources/Source.js b/src/sources/Source.js index 407ee7c5d..32d0ffa3c 100644 --- a/src/sources/Source.js +++ b/src/sources/Source.js @@ -30,6 +30,14 @@ class Source { this.settings = settingsDescriptions; this.escs = escs; this.pwm = []; + this.skipCache = false; + } + + /** + * @param {boolean} skipCache + */ + setSkipCache(skipCache) { + this.skipCache = skipCache; } /** diff --git a/src/sources/__tests__/Source.test.js b/src/sources/__tests__/Source.test.js index 861d34f83..3b2931ec0 100644 --- a/src/sources/__tests__/Source.test.js +++ b/src/sources/__tests__/Source.test.js @@ -57,6 +57,7 @@ describe('Invalid Source', () => { const invalidGithubSource = new GithubSource('invalid', 'invalid', 'invalid', 'invalid'); const versions = await invalidGithubSource.getRemoteVersionsList(); + console.log(versions); expect(versions).toStrictEqual([]); }); diff --git a/src/translations/cs/common.json b/src/translations/cs/common.json index 288edac46..fff1b573d 100644 --- a/src/translations/cs/common.json +++ b/src/translations/cs/common.json @@ -7,8 +7,10 @@ "showLog": "Zobrazit protokol", "hideLog": "Skrýt protokol", "note": "Poznámka: ", + "warning": "Varování: ", "notePropsOff": "Předtím, než na této kartě cokoliv provedete, ujistěte se, že jste odmontovali vrtule.", "noteConnectPower": "Připojte napájení k ESC.", + "warningRadio": "Vypněte vysílač! Jinak by nahrávání mohlo selhat, zejména na vysoce integrovaných AIO.", "commonParameters": "Běžné parametry", "unsupportedFirmware": "Nepodporovaný firmware", "commonSettingsDisabled": "Běžná nastavení zakázána", @@ -34,7 +36,7 @@ "escRampupPower": "Ochrana výkonu RPM (Rampup)", "escMinStartupPower": "Minimální spouštěcí výkon (Boost)", "escMaxStartupPower": "Maximální spouštěcí výkon (ochrana)", - "escButtonFirmwareDump": "Vypsat firmware", + "escButtonFirmwareDump": "Uložit firmware", "escButtonFlash": "Nahrát Firmware do tohoto ESC", "defaultChangelogHead": "Seznam změn", "escButtonRead": "Načíst nastavení", @@ -53,20 +55,20 @@ "homeContributionHeader": "Přispívání", "homeContributionText": "Pokud byste chtěli pomoci vylepšit ESC Configurator, můžete pomoci mnoha způsoby, včetně:", "homeContributionItem1": "Odpovídání na dotazy ostatních uživatelů na fórech", - "homeContributionItem2": "Přispívání [code](https://github.com/stylesuxx/esc-configurator) - nové funkce, opravy, vylepšení", - "homeContributionItem3": "Odesílání [issues](https://github.com/stylesuxx/esc-configurator/issues/new) s podrobným popisem", + "homeContributionItem2": "[Přispět](https://github.com/stylesuxx/esc-configurator) - nové funkce, opravy, vylepšení", + "homeContributionItem3": "Odeslání [chyby](https://github.com/stylesuxx/esc-configurator/issues/new) s podrobným popisem", "homeContributionItem4": "Testování aplikace na vašem hardwaru", - "homeContributionItem5": "Pomoc [translate](http://crowdin.com/project/esc-configuratorcom) rozhraní do vašeho jazyka", - "homeDisclaimerHeader": "Odmítnutí odpovědnosti", + "homeContributionItem5": "Pomoci [přeložit](http://crowdin.com/project/esc-configuratorcom) rozhraní do vašeho jazyka", + "homeDisclaimerHeader": "Vymezení", "homeDisclaimerTextLine1": "Webová aplikace podporuje ESC běh BLHeli pro Atmel, BLHeli pro SiLabs a BLHeli_S.", "homeDisclaimerTextLine2": "Jediné aktuálně podporované rozhraní je **BLHeli FC passthrough**.", "homeDisclaimerTextLine3": "Pokud narazíte na nějaké problémy, nezapomeňte použít tlačítko **Uložit protokol ladění** a odeslat nový problém prostřednictvím [GitHub](https://github.com/stylesuxx/esc-configurator/issues/new).", - "homeDisclaimerTextLine4": "Zdrojový kód aplikace lze stáhnout z [here](https://github.com/stylesuxx/esc-configurator).", - "homeDisclaimerTextLine5": "Nejnovější [CP210x Drivers](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) lze stáhnout z [here](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers).", - "homeDisclaimerTextLine6": "Nejnovější [STM USB VCP Drivers](https://www.st.com/en/development-tools/stsw-stm32102.html) lze stáhnout z [here](https://www.st.com/en/development-tools/stsw-stm32102.html).", - "homeWelcome": "Vítejte v **ESC - Konfigurátoru**, nástroji pro zjednodušení aktualizace a nastavení vašich ESC.", + "homeDisclaimerTextLine4": "Zdrojový kód aplikace lze stáhnout [zde](https://github.com/stylesuxx/esc-configurator).", + "homeDisclaimerTextLine5": "Nejnovější [CP210x Drivers](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers) lze stáhnout [zde](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers).", + "homeDisclaimerTextLine6": "Nejnovější [STM USB VCP Drivers](https://www.st.com/en/development-tools/stsw-stm32102.html) lze stáhnout [zde](https://www.st.com/en/development-tools/stsw-stm32102.html).", + "homeWelcome": "Vítejte v **ESC - Configurator**, nástroji navrženém pro zjednodušení aktualizace a konfigurace vašich ESC.", "betaWarningLine1": "**Tento nástroj je považován za BETA.**", - "betaWarningLine2": "Zatím nemusí vše fungovat podle očekávání - pokud najdeš nějaké chyby, prosím [issue](https://github.com/stylesuxx/esc-configurator/issues/new).", + "betaWarningLine2": "Zatím nemusí vše fungovat podle očekávání - pokud najdeš nějaké chyby, prosím [nahlásit](https://github.com/stylesuxx/esc-configurator/issues/new).", "findHelp": "Pro známé problémy s prohlížečem se podívejte na [wiki](https://github.com/stylesuxx/esc-configurator/wiki/Known-Browser-issues).", "escButtonSelectLocally": "Nahrát místní firmware", "cookieText": "Tento web nebo nástroje třetích stran používané tímto webem využívají soubory cookie nezbytné pro provoz a užitečné pro účely uvedené v zásadách používání souborů cookie. Přijetím omezujete souhlasíte s používáním souborů cookie.", @@ -74,7 +76,7 @@ "forceFlashText": "Ignorovat nevhodné MCU a rozložení?", "forceFlashHint": "(Nainstalovaný nevhodný firmware může poškodit ESC, učinit tak na vlastní riziko)", "migrateFlashText": "Přenést nastavení mezi různými firmwary?", - "migrateFlashHint": "(Toto se pokusí migrovat nastavení mezi různými firmwaresy, jako například z BLHeli_S do Bluejay)", + "migrateFlashHint": "(Toto se pokusí migrovat nastavení mezi různými firmwary, jako například z BLHeli_S do Bluejay)", "migrationNote": "Uvědomte si, že nastavení nejsou migrována mezi různými firmwary, nezapomeňte si poznamenat směry motoru a další nastavení, která byste mohli chtít přesunout. Nastavení budou migrována mezi různými verzemi stejného firmwaru.", "escDirectionReversed": "Opačný směr", "escBidirectionalMode": "Obousměrný režim", @@ -99,31 +101,31 @@ "escHallSensors": "Hallovy senzory", "escSineModeRange": "Rozsah sinusového režimu", "escBrakeStrength": "Brzdná síla", - "bluejayTextLine1": "Bluejay je firmware založený na BLHeli_S schopný obousměrné DShot - tak skvělá volba, pokud chcete spustit filtrování RPM na vašem zařízení. Tento projekt má také za cíl vyčistit a zjednodušit původní zdrojový kód BLHeli_S.", + "bluejayTextLine1": "Bluejay je firmware založený na BLHeli_S schopný obousměrného DShotu - takže skvělá volba, pokud chcete spustit filtrování RPM na vašem zařízení. Tento projekt má také za cíl vyčistit a zjednodušit původní zdrojový kód BLHeli_S.", "bluejayTextLine2": "Součástí je také zvukový editor spouštěcího zvuku.", - "bluejaySupportedHardwareLine1": "Věnujte nám prosím čas, abyste nám pomohli dokumentovat hardware, na kterém jste úspěšně nainstalovali a otestovali Bluejay [adding it to the Wiki](https://github.com/bird-sanctuary/bluejay/wiki/Tested-Hardware).", + "bluejaySupportedHardwareLine1": "Věnuj nám prosím čas, aby jsi nám pomohl dokumentovat hardware, na kterém jsi úspěšně nainstaloval a otestoval Bluejay [přidat na wiki](https://github.com/bird-sanctuary/bluejay/wiki/Tested-Hardware).", "bluejaySupportedHardwareLine2": "Přestože by měl fungovat na veškerém hardwaru kompatibilním s BLHeli, rádi bychom udržovali seznam, aby si lidé mohli být jisti, že jejich vybraný hardware bude s Bluejay skutečně správně fungovat.", "blheli32ToAM32Line1": "Přicházející firmware pro ESC založené na ARM. Přestože je na scéně relativně nový, má velký zájem ze strany uživatelů i výrobců. ESC AM32 budou brzy dostupné od různých výrobců.", - "blheli32ToAM32Line2": "**AM32 lze nahrát na BLHeli_32 ESC**. Nejprve však budete muset nahrát zavaděč AM32 pomocí [STM32 Cube Programmer](https://www.st.com/en/development-tools /stm32cubeprog.html#get-software) a programovací adaptér ST Link V2. Požadovaný zavaděč lze nalézt v uložišti [AM32 bootloader repository](https://github.com/AlkaMotors/AM32_Bootloader_F051/releases).", + "blheli32ToAM32Line2": "**AM32 lze nahrát na BLHeli_32 ESC**. Nejprve však budete muset nahrát zavaděč AM32 pomocí [STM32 Cube Programmer](https://www.st.com/en/development-tools/stm32cubeprog.html#get-software) a programovací adaptér ST Link V2. Požadovaný zavaděč lze nalézt v uložišti [AM32 bootloader repository](https://github.com/AlkaMotors/AM32_Bootloader_F051/releases).", "blhelisTextLine1": "BLHeli_S pravděpodobně není třeba představovat - velmi populární firmware ESC používaný téměř na každém ESC založeném na EFM8 v hobby kvadrokoptérách.", "blhelisTextLine2": "Vyzkoušeno a otestováno, podporuje každý analogový a digitální protokol.", "whatsNextHeader": "Co bude dál?", - "whatsNextText": "Pokud chcete vidět, které funkce se chystají, navštivte github repozitář [github repository](https://github.com/stylesuxx/esc-configurator). Pokud máte, můžete přidat žádost o funkci, nápad, který chcete vidět implementovaný.", + "whatsNextText": "Pokud chcete vidět, které funkce se chystají, navštivte [repozitář](https://github.com/stylesuxx/esc-configurator). Pokud máte nápad, můžete přidat žádost o funkci, kterou chcete vidět implementovanou.", "openPortSelection": "Výběr portu k otevření", "versionUnsupportedLine1": "{{name}} verze '{{version}}' (Rozvržení {{layout}}) zatím není podporováno.", "versionUnsupportedLine2": "Dejte nám vědět otevřením [issue](https://github.com/stylesuxx/esc-configurator).", "useDedicatedConfigurator": "{{name}} není podporován, použijte prosím vyhrazený konfigurátor.", "motorControl": "Řízení motoru", - "motorControlTextLine1": "Ujistěte se, že vaše ESC jsou správně nastaveny tak, aby odrážely stav posuvníků.", + "motorControlTextLine1": "Ujistěte se, že vaše ESC jsou správně nastaveny tak, aby odpovídaly stavu posuvníků.", "motorControlTextLine2": "Např.: Když jste ve svém letovém ovladači povolili 3D režim, ujistěte se, že jsou ESC také nastaveny na 3D režim, jinak by se motory mohly vypnout na plný výkon.", "motorControlTextLine3": "Uvědomte si také, že motory se nebudou otáčet, pokud máte na letovém ovladači povolen obousměrný Dshot, ale ESC jej nepodporuje. Což může být případ, kdy flashujete z firmwaru s povoleným RPM na BLHeli_S.", "enableMotorControl": "Povolit ovládání motoru", - "masterSpeed": "Hlavní rychlost", + "masterSpeed": "Společné otáčky", "motorNr": "Motor {{index}}", "homeDiscordHeader": "Připojte se k nám na Discord!", "homeDiscordText": "Pokud máš nějaké dotazy nebo potřebuješ rychlou pomocnou ruku, připoj se k nám na našem Discord serveru:", "homeChinaHeader": "Pro naše čínské návštěvníky", - "homeChinaText": "Řekněte svým přátelům za velkou čínskou zdí, že nás mohou kontaktovat přes místní [mirror directly in China](https://esc-configurator.pitronic.top).", + "homeChinaText": "Řekněte svým přátelům za velkou čínskou zdí, že nás mohou kontaktovat přes místní link [přímo v Číně](https://esc-configurator.pitronic.top).", "melodyEditorHeader": "Editor melodie", "melodyEditorWrite": "Zapsat melodie", "melodyEditorSave": "Uložit", @@ -136,8 +138,8 @@ "melodyEditorPlayAll": "Přehrát vše", "melodyEditorStopAll": "Zastavit vše", "melodyPresetsLabel": "Vyberte melodii", - "homeAttributionHeader": "Přiřazení", - "homeAttributionText": "Tento projekt byl silně inspirován [BLHeli Configurator](https://github.com/blheli-configurator/blheli-configurator). Většina uživatelského rozhraní byla přepsána od začátku, ale mnoho věcí související s nahráváním a manipulací s firmwarem bylo znovu použito - takže velký hold pro všechny, kdo se podíleli na původním BLHeli Configurator.", + "homeAttributionHeader": "Ustanovení", + "homeAttributionText": "Tento projekt byl silně inspirován [BLHeli Configuratorem](https://github.com/blheli-configurator/blheli-configurator). Většina uživatelského rozhraní byla přepsána od začátku, ale mnoho věcí související s nahráváním a manipulací s firmwarem bylo znovu použito - takže velký hold pro všechny, kdo se podíleli na původním BLHeli Configuratoru.", "syncMelodies": "Synchronizovat melodie", "syncMelodiesHint": "Pokud je povoleno, stejná melodie bude použita do všech ESC.", "allEscs": "Všechny ESC", diff --git a/src/translations/cs/hints.json b/src/translations/cs/hints.json index 1009cba1c..225a1f79d 100644 --- a/src/translations/cs/hints.json +++ b/src/translations/cs/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Pro dvousměrné režimy se jedná o nulovou polohu plynu v mikrosekundách.", "SERVO_DEAD_BAND": "Aplikováno na obě strany servo neutrálu, cokoliv v tomto rozsahu je považováno za nulový plyn.", "LOW_VOLTAGE_CUTOFF": "Pokud je povoleno, přeruší napájení motoru, když napětí klesne pod práh nízkého napětí.", - "LOW_VOLTAGE_THRESHOLD": "Úroveň napětí na článek, kde je přerušeno napájení. Jednotky ve voltech * 10. Například pro vypnutí při 3,3V zadejte 330.", + "LOW_VOLTAGE_THRESHOLD": "Úroveň napětí na článek, kde je přerušeno napájení. Jednotky ve voltech * 100. Například pro vypnutí při 3,3V zadejte 330.", "RC_CAR_REVERSING": "Pouze pro pozemní vozidla. Přepíše uživatelská nastavení a přepne ESC do obousměrného režimu s dvojitým klepnutím pro ovládání typu vzad.", "USE_HALL_SENSORS": "Pro regulátory otáček pro použití se senzorovými motory se vstupem Hallova čidla.", "SINE_MODE_RANGE": "Množství plynu v procentech použité pro sinusoidální startování.", diff --git a/src/translations/cs/settings.json b/src/translations/cs/settings.json index 523405deb..19d4bb307 100644 --- a/src/translations/cs/settings.json +++ b/src/translations/cs/settings.json @@ -6,11 +6,13 @@ "printLogs": "Tisk logů", "printLogsHint": "Pokud je povoleno, vypíše protokoly do konzoly.", "extendedDebug": "Rozšířené ladění", - "extendedDebugHint": "Dále vytiskne adresy, které jsou čteny/zapsány a odeslané/přijaté užitečné zatížení.", + "extendedDebugHint": "Dále vytiskne adresy, které jsou čteny/zapisovány a odeslané/přijímané zatížení.", "disableCommon": "Zakázat společná nastavení", "disableCommonHint": "Každý ESC bude mít vlastní sadu nastavení místo toho, aby měl společnou sekci, která je platná pro všechny ESC.", "enableAdvanced": "Povolit pokročilá nastavení", "enableAdvancedHint": "Přidá pokročilá nastavení jako je dumping firmware.", "unstableVersions": "Zobrazit předběžná uvolnění firmwaru", - "unstableVersionsHint": "Zobrazit nestabilní verze firmwaru a předběžná vydání" + "unstableVersionsHint": "Zobrazit nestabilní verze firmwaru a předběžná vydání", + "skipCache": "Přeskočit vyrovnávací paměť", + "skipCacheHint": "Povolte toto nastavení, pokud ve výběru firmwaru nevidíte nejnovější verzi." } diff --git a/src/translations/de/common.json b/src/translations/de/common.json index 6d801fb12..3b8ddc7c8 100644 --- a/src/translations/de/common.json +++ b/src/translations/de/common.json @@ -7,8 +7,10 @@ "showLog": "Log zeigen", "hideLog": "Log ausblenden", "note": "Achtung: ", + "warning": "Warnung: ", "notePropsOff": "Stelle sicher, dass die Propeller **entfernt** wurden, bevor du den Konfigurator verwendest.", "noteConnectPower": "Stelle sicher, dass eine Batterie angesteckt ist.", + "warningRadio": "Schalte deine Fernsteuerung aus! Ansonsten kann es zu Problemen beim Flashen kommen, insbesondere bei hoch integrierten AIOs.", "commonParameters": "Allgemeine Parameter", "unsupportedFirmware": "Nicht unterstützte Firmware", "commonSettingsDisabled": "Allgemeine Einstellungen deaktiviert", diff --git a/src/translations/de/hints.json b/src/translations/de/hints.json index 8c5329914..3976d98ee 100644 --- a/src/translations/de/hints.json +++ b/src/translations/de/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Im bidirektionalen Modus ist dies die Null-Position in Mikrosekunden.", "SERVO_DEAD_BAND": "Wird auf beiden Seiten der Servo Neutralstellung angewendet. Alles in diesem Bereich wird als Null interpretiert.", "LOW_VOLTAGE_CUTOFF": "Wenn aktiviert, wird die Stromversorgung zum Motor getrennt falls die Versorgungsspannung unter einen bestimmten Wert fällt.", - "LOW_VOLTAGE_THRESHOLD": "Spannungswert pro Zelle bei dem der Strom unterbrochen wird. Einheit in Volt x 10. Um bei 3.3V abzuschalten, gib 33 ein.", + "LOW_VOLTAGE_THRESHOLD": "Spannungswert pro Zelle bei dem der Strom unterbrochen wird. Einheit in Volt x 100. Um bei 3.3V abzuschalten, gib 330 ein.", "RC_CAR_REVERSING": "Nur für Bodenfahrzeuge. Überschreibt die Benutzereinstellungen und versetzt den ESC in den bidirektionalen Modus. Mit Doppeltipp, um den Motor rückwärts zu drehen.", "USE_HALL_SENSORS": "Für ESCs mit Hall-Sensoreingang, wenn Motoren mit Drehzahlgeber verwendet werden.", "SINE_MODE_RANGE": "Schub in Prozent für sinusförmigen Startup.", diff --git a/src/translations/de/settings.json b/src/translations/de/settings.json index 1ef506480..0f0a3131c 100644 --- a/src/translations/de/settings.json +++ b/src/translations/de/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Erweiterte Einstellungen aktivieren", "enableAdvancedHint": "Fügt fortgeschrittene Optionen wie das Dumpen von Firmware hinzu.", "unstableVersions": "Firmware Vorabversionen anzeigen", - "unstableVersionsHint": "Zeige instabile Firmware und Vorabversionen" + "unstableVersionsHint": "Zeige instabile Firmware und Vorabversionen", + "skipCache": "Cache überspringen", + "skipCacheHint": "Aktiviere diese Option, falls die neuesten Versionen in der Firmwareauswahl nicht zur Verfügung stehen." } diff --git a/src/translations/en/common.json b/src/translations/en/common.json index bd0b82202..89013da67 100644 --- a/src/translations/en/common.json +++ b/src/translations/en/common.json @@ -7,8 +7,10 @@ "showLog": "Show Log", "hideLog": "Hide Log", "note": "Note: ", + "warning": "Warning: ", "notePropsOff": "Make sure you've taken the propellers **OFF** before doing anything on this tab.", "noteConnectPower": "Connect power to the ESCs.", + "warningRadio": "Turn off your radio! Otherwise flashing might fail, especially on highly integrated AIOs.", "commonParameters": "Common Parameters", "unsupportedFirmware": "Unsupported Firmware", "commonSettingsDisabled": "Common settings disabled", diff --git a/src/translations/en/settings.json b/src/translations/en/settings.json index dab1e47ff..67680ff0e 100644 --- a/src/translations/en/settings.json +++ b/src/translations/en/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Enable advanced settings", "enableAdvancedHint": "Adds advanced settings like dumping firmware.", "unstableVersions": "Show firmware pre-releases", - "unstableVersionsHint": "Show unstable firmware versions and pre-releases" + "unstableVersionsHint": "Show unstable firmware versions and pre-releases", + "skipCache": "Skip cache", + "skipCacheHint": "Enable this setting if you do not see the latest version in the firmware selection." } diff --git a/src/translations/es/common.json b/src/translations/es/common.json index 6412976b9..d1e4a5c4f 100644 --- a/src/translations/es/common.json +++ b/src/translations/es/common.json @@ -7,8 +7,10 @@ "showLog": "Mostar Registro", "hideLog": "Ocultar registro", "note": "Nota: ", + "warning": "Atención: ", "notePropsOff": "Asegúrate de que has removido las **HELICES** antes de hacer nada en esta pestaña.", "noteConnectPower": "Conecta energía a los ESCs.", + "warningRadio": "¡Apaga tu radio! De lo contrario, el flasheo podría fallar, especialmente en AIOs altamente integrados.", "commonParameters": "Parámetros Comunes", "unsupportedFirmware": "Firmware no soportado", "commonSettingsDisabled": "Ajustes comunes desactivados", @@ -101,7 +103,7 @@ "escBrakeStrength": "Fuerza de Frenado", "bluejayTextLine1": "Bluejay es un firmware basado en BLHeli_S capaz de usar DShot Bidireccional - así que es una gran opción si quieres ejecutar un filtro RPM en tu aparato. Este proyecto también pretende limpiar y simplificar el código fuente original de BLHeli_S.", "bluejayTextLine2": "Un editor de sonido de inicio también es parte de la oferta.

", - "bluejaySupportedHardwareLine1": "Please take the time to help us document hardware on which you have successfully flashed and tested Bluejay by [adding it to the Wiki](https://github.com/bird-sanctuary/bluejay/wiki/Tested-Hardware).", + "bluejaySupportedHardwareLine1": "Por favor, tómate algo de tiempo para ayudarnos a documentar el hardware en el que has flasheado y probado con éxito Bluejay [añadiéndolo a la Wiki](https://github.com/bird-sanctuary/bluejay/wiki/Tested-Hardware).", "bluejaySupportedHardwareLine2": "Aunque debería estar trabajando en todo el hardware compatible con BLHeli, nos gustaría mantener una lista, para que la gente pueda estar segura de que el hardware elegido funcionará correctamente con Bluejay.", "blheli32ToAM32Line1": "El firmware para los ESC basados en ARM. A pesar de ser relativamente nuevo en la escena tiene mucho interés, tanto de los usuarios como de los fabricantes. Los ESCs AM32 pronto estarán disponibles en diferentes fabricantes.", "blheli32ToAM32Line2": "**AM32 puede ser flasheado en ESC's BLHeli_32**. Pero, primero tendrá que flashear el cargador de arranque AM32 a través de [STM32 Cube Programmer](https://www.st.com/en/development-tools/stm32cubeprog.html#get-software) o ST Link V2. El cargador de arranque necesario se puede encontrar en el repositorio [de carga de arranque AM32](https://github.com/AlkaMotors/AM32_Bootloader_F051/releases).", diff --git a/src/translations/es/hints.json b/src/translations/es/hints.json index 988f6a555..e0a7a8ec8 100644 --- a/src/translations/es/hints.json +++ b/src/translations/es/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Para los modos bidireccionales esta es la posición cero del acelerador en microsegundos.", "SERVO_DEAD_BAND": "Aplicado a ambos lados del Neutral, cualquier cosa en este rango se considera de cero acelerador.", "LOW_VOLTAGE_CUTOFF": "Cuando está habilitado cortará energía al motor cuando el voltaje caiga por debajo del umbral de baja tensión.", - "LOW_VOLTAGE_THRESHOLD": "Nivel de voltaje por celda donde se corta. Unidades en voltios * 10. Para cortar a 3.3v introduzca 330 por ejemplo.", + "LOW_VOLTAGE_THRESHOLD": "Nivel de voltaje por celda donde se corta. Unidades en voltios * 100. Para cortar a 3.3v introduzca 330 por ejemplo.", "RC_CAR_REVERSING": "Solo para vehículos terrestres. Anula la configuración del usuario y coloca los ESC en modo bidireccional con doble toque para controlar el tipo inverso.", "USE_HALL_SENSORS": "Para usar controladores de velocidad con sensor Hall para el uso de motores con sensores.", "SINE_MODE_RANGE": "La cantidad de acelerador en porcentaje usada para el arranque sinusoidal.", diff --git a/src/translations/es/settings.json b/src/translations/es/settings.json index 7418f779e..a8ee37d6d 100644 --- a/src/translations/es/settings.json +++ b/src/translations/es/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Activar opciones avanzadas", "enableAdvancedHint": "Añade ajustes avanzados como volcar el firmware.", "unstableVersions": "Mostrar pre-lanzamientos de firmware", - "unstableVersionsHint": "Mostrar versiones inestables del firmware y pre-lanzamientos" + "unstableVersionsHint": "Mostrar versiones inestables del firmware y pre-lanzamientos", + "skipCache": "Ignorar caché", + "skipCacheHint": "Activa esta opción si no ves la última versión en la selección del firmware." } diff --git a/src/translations/fr/common.json b/src/translations/fr/common.json index 5e6aea572..dc59550c5 100644 --- a/src/translations/fr/common.json +++ b/src/translations/fr/common.json @@ -7,8 +7,10 @@ "showLog": "Afficher le journal", "hideLog": "Masquer le journal", "note": "Remarque: ", + "warning": "Warning: ", "notePropsOff": "**ENLEVEZ LES HÉLICES** avant de toucher à quoique ce soit dans cet onglet.", "noteConnectPower": "Alimentez les ESCs.", + "warningRadio": "Turn off your radio! Otherwise flashing might fail, especially on highly integrated AIOs.", "commonParameters": "Paramètres communs", "unsupportedFirmware": "Firmware non supporté", "commonSettingsDisabled": "Paramètres communs désactivés", diff --git a/src/translations/fr/hints.json b/src/translations/fr/hints.json index ea9986e45..f3bacdf92 100644 --- a/src/translations/fr/hints.json +++ b/src/translations/fr/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Postion neutre pour le mode bidirectionnel, en microsecondes.", "SERVO_DEAD_BAND": "Appliqué de chaque côté du neutre servo. Tout signal inclus dans cette bande est considéré comme zéro gaz.", "LOW_VOLTAGE_CUTOFF": "Quand activé, coupera l'alimentation du moteur lorsque la tension descend en dessous du seuil de basse tension.", - "LOW_VOLTAGE_THRESHOLD": "Niveau de tension par cellule où l'alimentation est coupée. Unités en volts * 10. Pour couper à 3,3v entrer 330 par exemple.", + "LOW_VOLTAGE_THRESHOLD": "Niveau de tension par cellule où l'alimentation est coupée. Unités en volts * 100. Pour couper à 3,3v entrer 330 par exemple.", "RC_CAR_REVERSING": "Pour véhicules terrestre uniquement. Remplace les paramètres de l'utilisateur et passe l'ESC en mode bidirectionnel avec double appui pour inverser le type de contrôle.", "USE_HALL_SENSORS": "For speed controllers with a hall sensor input to be used with sensored motors.", "SINE_MODE_RANGE": "The amount of throttle in percent used for sinusoidal startup.", diff --git a/src/translations/fr/settings.json b/src/translations/fr/settings.json index f74ee48af..c0cc2d8a4 100644 --- a/src/translations/fr/settings.json +++ b/src/translations/fr/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Activer les réglages avancés", "enableAdvancedHint": "Ajoute les réglages avancés comme le déchargement du micrologiciel.", "unstableVersions": "Afficher les versions non officielles", - "unstableVersionsHint": "Afficher les versions instables et les versions non officielles" + "unstableVersionsHint": "Afficher les versions instables et les versions non officielles", + "skipCache": "Skip cache", + "skipCacheHint": "Enable this setting if you do not see the latest version in the firmware selection." } diff --git a/src/translations/it/common.json b/src/translations/it/common.json index 08105a73c..8ac0ad89d 100644 --- a/src/translations/it/common.json +++ b/src/translations/it/common.json @@ -7,8 +7,10 @@ "showLog": "Mostra il Log", "hideLog": "Nascondi il Log", "note": "Nota: ", + "warning": "Attenzione: ", "notePropsOff": "Assicurati di aver rimosso le eliche prima di fare qualsiasi cosa su questa scheda.", "noteConnectPower": "Connetti l'alimentazione all' ESC.", + "warningRadio": "Spegnere la radio! Altrimenti il flash potrebbe fallire, sopratutto sugli AIO completi di molte periferiche.", "commonParameters": "Parametri comuni", "unsupportedFirmware": "Firmware non supportato", "commonSettingsDisabled": "Impostazioni comuni disabilitate", diff --git a/src/translations/it/hints.json b/src/translations/it/hints.json index 202a6510f..e9d09ca13 100644 --- a/src/translations/it/hints.json +++ b/src/translations/it/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Per le modalità bidirezionali questa è la posizione di zero acceleratore in microsecondi.", "SERVO_DEAD_BAND": "Applicato su entrambi i lati del Servo Neutral, qualsiasi cosa in questa gamma è considerata a zero acceleratore.", "LOW_VOLTAGE_CUTOFF": "Quando abilitato taglierà energia al motore quando la tensione scende al di sotto della soglia di bassa tensione.", - "LOW_VOLTAGE_THRESHOLD": "Livello di tensione per cella in cui viene interrotta l'alimentazione. Unità in volt * 10. Per interrompere a 3.3v immettere 330 ad esempio.", + "LOW_VOLTAGE_THRESHOLD": "Livello di tensione per cella in cui viene interrotta l'alimentazione. Unità in volt * 100. Per interrompere a 3.3v immettere 330 ad esempio.", "RC_CAR_REVERSING": "Solo per i veicoli di terra. Sovrascrive le impostazioni dell'utente e posiziona ESC in modalità bidirezionale con doppio tocco per invertire il tipo di controllo.", "USE_HALL_SENSORS": "Per i regolatori di velocità con sensore d'ingresso hall da utilizzare con motori sensored.", "SINE_MODE_RANGE": "La quantità di acceleratore in percentuale utilizzata per l'avvio sinusoidale.", diff --git a/src/translations/it/settings.json b/src/translations/it/settings.json index bb3d2f6e8..197452025 100644 --- a/src/translations/it/settings.json +++ b/src/translations/it/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Abilita impostazioni avanzate", "enableAdvancedHint": "Aggiunge impostazioni avanzate come il dump del firmware.", "unstableVersions": "Mostra pre-release del firmware", - "unstableVersionsHint": "Mostra versioni del firmware instabili e pre-release" + "unstableVersionsHint": "Mostra versioni del firmware instabili e pre-release", + "skipCache": "Ignora la cache", + "skipCacheHint": "Abilita questa impostazione se non vedi l'ultima versione nella selezione del firmware." } diff --git a/src/translations/pl/common.json b/src/translations/pl/common.json index a8c20dd84..76e5a3da7 100644 --- a/src/translations/pl/common.json +++ b/src/translations/pl/common.json @@ -7,8 +7,10 @@ "showLog": "Pokaż logi", "hideLog": "Ukryj logi", "note": "Notka: ", + "warning": "Warning: ", "notePropsOff": "Przed wykonaniem czegokolwiek, upewnij się, że śmigła są **ZDJĘTE**.", "noteConnectPower": "Podłącz zasilanie do ESC.", + "warningRadio": "Turn off your radio! Otherwise flashing might fail, especially on highly integrated AIOs.", "commonParameters": "Ogólne parametry", "unsupportedFirmware": "Nieobsługiwany Firmware", "commonSettingsDisabled": "Wspólne ustawienia wyłączone", @@ -162,7 +164,7 @@ "escMissing2": "Po prostu **nie ma więcej podłączonych ESC**", "escMissing3": "**MCU ESC jest uszkodzone.**", "escMissing4": "Spróbuj użyć innego kabla USB - czasami nie są one odpowiednio ekranowane i mogą powodować takie błędy.", - "escMissing5": "Make sure your radio is turned off while interacting with the configurator. Switched on radios have been reported to cause issues with electro-magnetic interference and thus failed read/writes.", + "escMissing5": "Upewnij się, że radio jest wyłączone podczas interakcji z konfiguratorem. Zgłoszono, że włączone radia powodują problemy z zakłóceniami elektromagnetycznymi, a tym samym nieudane odczyty/zapisy.", "mistaggedLine1": "**Ostrzeżenie:** Wygląda na to, że aktualnie zainstalowane oprogramowanie układowe jest błędnie rozpoznawane!", "mistaggedLine2": "Kontynuuj tylko, jeśli wiesz co robisz. Dalsze działania mogą narazić ESC na ryzyko przegrzania, a w najgorszym przypadku zniszczenia ESC. Jeśli chcesz kontynuować, Zaleca się wgranie wersji z wyższym czasem opóźnienia - musisz zaznaczyć pole *\"Ignorój nieodpowiedni układ MCU? * na pierwszej stronie.", "mistaggedLine3": "Jeśli widzisz tę wiadomość, [rozważ dodanie wpisu do Wiki](https://github.com/stylesuxx/esc-configurator/wiki/Wrongly-Tagged-AIO's), pomagając nam udokumentować problematyczny sprzęt.", diff --git a/src/translations/pl/hints.json b/src/translations/pl/hints.json index 87f1564d5..bd1d7f212 100644 --- a/src/translations/pl/hints.json +++ b/src/translations/pl/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "Dla trybów dwukierunkowych jest to pozycja zerowa przepustnicy w mikrosekundach.", "SERVO_DEAD_BAND": "W przypadku zastosowania po obu stronach Servo Neutral wszystko w tym zakresie jest uważane za zerową przepustnicę.", "LOW_VOLTAGE_CUTOFF": "Gdy włączone, zmniejszy się moc silnika, gdy napięcie spadnie poniżej progu niskiego napięcia.", - "LOW_VOLTAGE_THRESHOLD": "Poziom napięcia na komórkę, w której pobór mocy jest niwelowany. Jednostki w woltach * 10. Aby odciąć od wartości 3.3v należy na przykład wprowadzić 330.", + "LOW_VOLTAGE_THRESHOLD": "Poziom napięcia na komórkę, w której pobór mocy jest niwelowany. Jednostki w woltach * 100. Aby odciąć od wartości 3.3v należy na przykład wprowadzić 330.", "RC_CAR_REVERSING": "Wyłącznie do pojazdów naziemnych. Zastępuje ustawienia użytkownika i umieszcza ESC w trybie dwukierunkowym z podwójnym dotknięciem, aby odwrócić kontrolę typu.", "USE_HALL_SENSORS": "Do regulatorów prędkości z wejściem czujnika Halla do stosowania z silnikami z czujnikami.", "SINE_MODE_RANGE": "Ilość przepustnicy w procentach użyta do sinusoidalnego rozruchu.", diff --git a/src/translations/pl/settings.json b/src/translations/pl/settings.json index 9ee8e0533..a3e639a92 100644 --- a/src/translations/pl/settings.json +++ b/src/translations/pl/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Włącz zaawansowane ustawienia", "enableAdvancedHint": "Dodaje zaawansowane ustawienia, takie jak zgranie oprogramowanie.", "unstableVersions": "Pokaż wstępne wydania oprogramowania", - "unstableVersionsHint": "Pokaż niestabilne wersje oprogramowania i wstępne wydania" + "unstableVersionsHint": "Pokaż niestabilne wersje oprogramowania i wstępne wydania", + "skipCache": "Skip cache", + "skipCacheHint": "Enable this setting if you do not see the latest version in the firmware selection." } diff --git a/src/translations/tr/common.json b/src/translations/tr/common.json index d4ee1e00a..3f86268f2 100644 --- a/src/translations/tr/common.json +++ b/src/translations/tr/common.json @@ -7,8 +7,10 @@ "showLog": "Logları Göster", "hideLog": "Logları Gizle", "note": "Not: ", + "warning": "Warning: ", "notePropsOff": "Bu sekmede herhangi bir işlem yapmadan önce pervaneleri **SÖKTÜĞÜNÜZDEN** emin olun.", "noteConnectPower": "ESC lere güç veriniz.", + "warningRadio": "Turn off your radio! Otherwise flashing might fail, especially on highly integrated AIOs.", "commonParameters": "Genel Parametreler", "unsupportedFirmware": "Desteklenmeyen Donanım Yazılımı", "commonSettingsDisabled": "Ortak ayarlar devre dışı", diff --git a/src/translations/tr/settings.json b/src/translations/tr/settings.json index 0e318cb50..56167e9f7 100644 --- a/src/translations/tr/settings.json +++ b/src/translations/tr/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "Gelişmiş Ayarları aktifleştir", "enableAdvancedHint": "Firmware dumping gibi gelişmiş ayarları ekler.", "unstableVersions": "Önceki Yayınlanmamış Firmwareleri göster", - "unstableVersionsHint": "Önceki Yayınlanmamış ve stabil olmayan Firmwareleri göster" + "unstableVersionsHint": "Önceki Yayınlanmamış ve stabil olmayan Firmwareleri göster", + "skipCache": "Skip cache", + "skipCacheHint": "Enable this setting if you do not see the latest version in the firmware selection." } diff --git a/src/translations/zh-CN/common.json b/src/translations/zh-CN/common.json index ef6cf0da3..6d45f2660 100644 --- a/src/translations/zh-CN/common.json +++ b/src/translations/zh-CN/common.json @@ -7,8 +7,10 @@ "showLog": "显示日志", "hideLog": "隐藏日志", "note": "注意: ", + "warning": "警告: ", "notePropsOff": "在使用本页面前,请确保您已经 **取下** 所有螺旋桨。", "noteConnectPower": "请将电源连接至电调。", + "warningRadio": "关闭您的遥控器!否则烧录可能失败,尤其是在高集成度的 AIO 上。", "commonParameters": "公共参数", "unsupportedFirmware": "不支持的固件", "commonSettingsDisabled": "公共设置已禁用", diff --git a/src/translations/zh-CN/hints.json b/src/translations/zh-CN/hints.json index d124ba0bc..4d4de8ea6 100644 --- a/src/translations/zh-CN/hints.json +++ b/src/translations/zh-CN/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "对于双向模式,这是零油门位置。", "SERVO_DEAD_BAND": "施加在伺服输入中位的两侧,这个范围内的任何信号都将被视为零。", "LOW_VOLTAGE_CUTOFF": "启用后,当电压降到低电压阈值以下时,将会切断电源。", - "LOW_VOLTAGE_THRESHOLD": "切断电源时每节电池的电压等级。电压单位为 *10伏。例如,要在在 3.3V 切断,请输入 330。", + "LOW_VOLTAGE_THRESHOLD": "切断电源时每节电池的电压等级。电压单位为 *100伏。例如,要在在 3.3V 切断,请输入 330。", "RC_CAR_REVERSING": "仅适用于地面车辆。将会覆盖用户设置,并将 ESC 设置为双向模式。", "USE_HALL_SENSORS": "用于与带有霍尔传感器输入的速度控制器来感应电机", "SINE_MODE_RANGE": "用于正弦式启动的油门量%", diff --git a/src/translations/zh-CN/settings.json b/src/translations/zh-CN/settings.json index 01b18aaee..e0c3b14c3 100644 --- a/src/translations/zh-CN/settings.json +++ b/src/translations/zh-CN/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "启用高级设置", "enableAdvancedHint": "添加一些高级设置,如转储固件。", "unstableVersions": "显示预发布固件版本", - "unstableVersionsHint": "显示不稳定的固件版本和预发布版本" + "unstableVersionsHint": "显示不稳定的固件版本和预发布版本", + "skipCache": "跳过缓存", + "skipCacheHint": "如果您在固件选择中看不到最新版本,请启用此设置。" } diff --git a/src/translations/zh-TW/common.json b/src/translations/zh-TW/common.json index 0460e38b0..1a39bba62 100644 --- a/src/translations/zh-TW/common.json +++ b/src/translations/zh-TW/common.json @@ -7,8 +7,10 @@ "showLog": "顯示日誌", "hideLog": "隱藏日誌", "note": "注意: ", + "warning": "警告: ", "notePropsOff": "在使用本頁面前,請確保您已經 **取下** 所有螺旋槳。", "noteConnectPower": "請將電源連接至電調。", + "warningRadio": "關閉您的遙控器!否則燒錄可能失敗,尤其是在高集成度的 AIO 上。", "commonParameters": "公共參數", "unsupportedFirmware": "不支援的固件。", "commonSettingsDisabled": "公共設定已禁用", diff --git a/src/translations/zh-TW/hints.json b/src/translations/zh-TW/hints.json index 7df26bd38..f05c3c3e2 100644 --- a/src/translations/zh-TW/hints.json +++ b/src/translations/zh-TW/hints.json @@ -29,7 +29,7 @@ "SERVO_NEUTRAL": "对于双向模式,这是零油门位置。", "SERVO_DEAD_BAND": "施加在伺服輸入中位的兩側,這個範圍內的任何信號都將被視為零。", "LOW_VOLTAGE_CUTOFF": "啟用後,當電壓降到低電壓閾值以下時,將會切斷電源。", - "LOW_VOLTAGE_THRESHOLD": "切斷電源時每節電池的電壓等級。電壓單位為 *10伏。例如,要在在 3.3V 切斷,請輸入 330。", + "LOW_VOLTAGE_THRESHOLD": "切斷電源時每節電池的電壓等級。電壓單位為 *100伏。例如,要在在 3.3V 切斷,請輸入 330。", "RC_CAR_REVERSING": "僅適用於地面車輛。將會覆蓋用戶設置,并將 ESC 設置為雙向模式。", "USE_HALL_SENSORS": "用於與帶有霍爾傳感器輸入的速度控制器來感應電機", "SINE_MODE_RANGE": "用於正弦式啟動的油門量%", diff --git a/src/translations/zh-TW/settings.json b/src/translations/zh-TW/settings.json index 0ea75a4d4..5b1d45fe5 100644 --- a/src/translations/zh-TW/settings.json +++ b/src/translations/zh-TW/settings.json @@ -12,5 +12,7 @@ "enableAdvanced": "啓用高級設定", "enableAdvancedHint": "添加一些高級設定,如轉儲固件。", "unstableVersions": "顯示預發佈固件版本", - "unstableVersionsHint": "顯示不穩定的固件版本和預發佈版本" + "unstableVersionsHint": "顯示不穩定的固件版本和預發佈版本", + "skipCache": "跳過緩存", + "skipCacheHint": "如果您在固件選擇中看不到最新版本,請啟用此設置。" } diff --git a/src/utils/Fetch.js b/src/utils/Fetch.js index da1bcd68d..67b4df435 100644 --- a/src/utils/Fetch.js +++ b/src/utils/Fetch.js @@ -123,11 +123,11 @@ function shouldFetch(response, maxAge) { * @param {number} maxAge * @returns {object} */ -async function fetchJsonCached(url, maxAge = ONE_DAY) { +async function fetchJsonCached(url, skip = false, maxAge = ONE_DAY) { const cache = await window.caches.open('v1'); let cachedResponse = await cache.match(url); - if (!cachedResponse || !cachedResponse.ok) { + if (!cachedResponse || !cachedResponse.ok || skip) { // Fetch response and cache it cachedResponse = await fetchAndCacheJsonResponse(cache, url); } else if (shouldFetch(cachedResponse, maxAge)) { diff --git a/src/utils/FourWay.js b/src/utils/FourWay.js index 2f9470989..1792cd7d7 100644 --- a/src/utils/FourWay.js +++ b/src/utils/FourWay.js @@ -340,9 +340,9 @@ class FourWay { const mcu = new MCU(info.meta.interfaceMode, info.meta.signature); const eepromOffset = mcu.getEepromOffset(); - // Assume BLHeli as default let source = null; if (info.isSiLabs) { + // Assume BLHeli_S to be the default source = blheliSSource; info.layout = source.getLayout(); @@ -368,6 +368,17 @@ class FourWay { info.layoutSize = source.getLayoutSize(); info.settingsArray = (await this.read(eepromOffset, info.layoutSize)).params; info.settings = Convert.arrayToSettingsObject(info.settingsArray, info.layout); + + /** + * If not AM32, then very likely BLHeli_32, even if not - we can't + * handle it. + */ + const validNames = source.getValidNames(); + if(!validNames.includes(info.settings.NAME)) { + source = null; + + info.settings.NAME = 'BLHeli_32'; + } } if (!info.isArm && !info.isSiLabs){ @@ -417,21 +428,14 @@ class FourWay { } const layoutRevision = info.settings.LAYOUT_REVISION.toString(); - info.settingsDescriptions = source.getCommonSettings(layoutRevision); - info.individualSettingsDescriptions = source.getIndividualSettings(layoutRevision); - info.defaultSettings = source.getDefaultSettings(layoutRevision); + if(source) { + info.settingsDescriptions = source.getCommonSettings(layoutRevision); + info.individualSettingsDescriptions = source.getIndividualSettings(layoutRevision); + info.defaultSettings = source.getDefaultSettings(layoutRevision); + } if(!info.settingsDescriptions) { this.addLogMessage('layoutNotSupported', { revision: layoutRevision }); - - /** - * If Arm is detected and we have no matching layout, it might be - * BLHeli_32. - */ - if(info.isArm) { - info.settings.NAME = 'BLHeli_32'; - info.layout = null; - } } const layoutName = (info.settings.LAYOUT || '').trim(); @@ -439,15 +443,39 @@ class FourWay { // SiLabs EFM8 based if (info.isSiLabs) { + /** + * If we don't have a valid layout, something is wrong with the current + * firmware. It means the ESC can still be flashed, but we can't say + * for sure which firmware it is running + */ const layouts = source.getEscLayouts(); - make = layouts[layoutName].name; + const layout = layouts[layoutName]; + if(!layout) { + source = null; + + info.layout = {}; + info.settingsDescriptions = { base: [] }; + info.individualSettingsDescriptions = { base: [] }; + } else { + make = layout.name; + } if (source instanceof sources.BluejaySource) { info.displayName = source.buildDisplayName(info, make); info.firmwareName = source.getName(); } - if (source instanceof sources.BLHeliSSource) { + /** + * Check if firmware is mistagged + * + * This will only work for BLHeli_S, not JESC or BLHeli_M, if either of + * those is detected we don't even attempt it. + */ + if ( + source instanceof sources.BLHeliSSource && + info.settings.NAME !== 'JESC' && + info.settings.NAME !== 'BLHeli_M' + ) { const splitMake = make.split('-'); const taggedTiming = splitMake[2]; const mcuType = splitMake[1]; @@ -1013,11 +1041,14 @@ class FourWay { let newEsc = await this.getInfo(target); const sameFirmware = ( - esc.individualSettings && newEsc.individualSettings && + esc.individualSettings && + newEsc.individualSettings && + esc.source && esc.source.canMigrateTo(newEsc.individualSettings.NAME) ); - /* Only migrate settings if new and old Firmware are the same or if user + /** + * Only migrate settings if new and old Firmware are the same or if user * forces override. */ if(migrate || sameFirmware) { diff --git a/yarn.lock b/yarn.lock index fc481d39f..4f84e8856 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2623,6 +2623,11 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +bin-to-hex@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/bin-to-hex/-/bin-to-hex-0.4.1.tgz#c81f8e61f6d2e0c7a2d508e8ae3e9915b4329769" + integrity sha512-hyZyhw/0fKIZy1JkwyXrn93XdMxlpoLVBBQKSzRsVh1jUEpkFzCD8hXn570m/t1knkVaslv8g+34YbrmkGynAg== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"