1
0
forked from me/IronOS

Compare commits

...

85 Commits

Author SHA1 Message Date
Ben V. Brown
72e0c17ebf Merge pull request #1153 from federicodilo/patch-14
Update IT_translation
2022-01-03 18:36:39 +11:00
federicodilo
a1cfbf8f68 Update IT_translation
Fix in Hall sensor sensitivity sentence.
2021-12-29 19:46:10 +01:00
Ben V. Brown
4c29cbabd5 Merge pull request #1149 from Ralim/handle-menu-sizing-better
Handle menu sizing better
2021-12-29 23:31:35 +11:00
Ben V. Brown
9a9a98957d Update Settings.cpp
Set a default sane PD timeout
2021-12-29 23:02:18 +11:00
Ben V. Brown
9961411435 Drop volt symbol as its offscreen 2021-12-29 22:55:07 +11:00
Ben V. Brown
8d84a51dc6 Merge branch 'master' into handle-menu-sizing-better 2021-12-29 22:14:33 +11:00
Ben V. Brown
53eb92c262 Merge pull request #1144 from slycordinator/generic_shellscripts
Generic shellscripts
2021-12-29 17:24:46 +11:00
Ben V. Brown
16db0c7c0b Fix missed limit settings 2021-12-29 17:22:30 +11:00
Ben V. Brown
f945360437 Compensate scrollbar for skipped screens 2021-12-29 17:19:11 +11:00
Ben V. Brown
07b692e330 Recalculate scroll size on value change 2021-12-29 17:16:58 +11:00
Ben V. Brown
6d3a52e32b Extract menu size calc 2021-12-29 17:03:05 +11:00
slycordinator
48b9097c2c update flash_ts100_linux.sh
Change to more generic /bin/sh script

* added support for using on shells that don't have UID variable; uses UID if it's available and calls "id -u" when it's not
* modified quoting as recommended by shellcheck
* changed to not use "$?" to check for failure. Now uses "if ! (command); then (fail condition); fi" for when a command fails
2021-12-27 16:26:54 +09:00
slycordinator
47b0d287bb update buildAll.sh
Doesn't use anything bash-specific so it can be a /bin/sh script
2021-12-27 16:10:55 +09:00
slycordinator
5aa30f2b05 update build.sh
Modified quoting/variables as recommended by shellcheck
2021-12-27 16:07:55 +09:00
slycordinator
6dfab0ae3c update build.sh
Doesn't use anything bash-specific, so can be a /bin/sh script
2021-12-27 16:04:51 +09:00
slycordinator
82fdd74be7 update setup.sh
Doesn't use anything bash-specific, so it can be a /bin/sh script

Added quotes to MDPATH variable, as recommended by shellcheck utility
2021-12-27 16:03:39 +09:00
slycordinator
ccddb1ebdc Update start_dev.sh
Doesn't use anything bash-specific, so it can be /bin/sh
2021-12-27 16:00:56 +09:00
Ben V. Brown
f13b7be3d9 Merge pull request #1138 from discip/patch-1
updated graphics for idle screen & for missing tip
2021-12-27 10:01:33 +11:00
Ben V. Brown
c2a8b432d8 Merge branch 'master' into patch-1 2021-12-27 09:43:13 +11:00
Ben V. Brown
bd19d3549b Merge pull request #1143 from discip/patch-2
Tackling issue #1140
2021-12-27 09:42:43 +11:00
discip
00b8115e7c all three 2021-12-26 23:24:55 +01:00
discip
e2613d2f31 update 2021-12-26 16:59:03 +01:00
discip
f34fb53119 Update gui.cpp 2021-12-26 15:55:11 +01:00
discip
8f32267340 fix_IIa 2021-12-26 15:52:20 +01:00
discip
52a13dae27 fix_II 2021-12-26 15:49:32 +01:00
discip
c2d9631efd Update gui.cpp 2021-12-26 15:42:33 +01:00
discip
30b632fc19 fix 2021-12-26 15:38:05 +01:00
discip
c3406112cd Update gui.cpp 2021-12-26 14:59:10 +01:00
discip
822c3da3ba tackling #1140
https://github.com/Ralim/IronOS/issues/1140
2021-12-26 01:26:26 +01:00
discip
cc3988be24 maybe this time 2021-12-22 03:44:36 +01:00
discip
bf1fc1c157 just preparing 2021-12-22 03:12:31 +01:00
discip
95ccb528e1 updated graphics for idle screen & for missing tip 2021-12-22 00:03:28 +01:00
Ben V. Brown
a0eb5b5d06 Merge pull request #1137 from onxblog/patch-2
Updated translation of the PD section
2021-12-21 08:49:29 +11:00
Alex
7ae7ecbd0b Updated translation of the PD section
Updated translation of the PD section
2021-12-20 16:40:54 +02:00
Ben V. Brown
ca35772db9 Merge pull request #1136 from discip/patch-1
changed POWER_PULSE since 100 would display as 0.0
2021-12-20 11:26:00 +11:00
discip
13bce53249 changed POWER_PULSE since 100 would display as 0.0 2021-12-20 00:57:57 +01:00
Ben V. Brown
4dce812cf9 Merge pull request #1098 from discip/disconnected-tip
Disconnected tip pic in detailed idle screen
2021-12-20 09:28:47 +11:00
Ben V. Brown
5ad124f39d Merge pull request #1117 from Ralim/fix/1116
Address settings bounds checks #1116
Pull in fix for PD PPS
2021-12-19 19:17:24 +11:00
Ben V. Brown
bee384defd Merge branch 'master' into fix/1116 2021-12-19 19:09:17 +11:00
Ben V. Brown
7a654caf2a Handle different calibration offset ranges for MHP30 2021-12-19 11:23:42 +11:00
Ben V. Brown
47929e9ee0 Update PD stack 2021-12-19 10:57:57 +11:00
Ben V. Brown
e33b900cff Rework settings to be min-max inclusive 2021-12-19 10:21:19 +11:00
Ben V. Brown
6d7fc2f689 Update configuration.h 2021-12-15 11:19:35 +11:00
Ben V. Brown
1662a8bbc0 Merge pull request #1134 from playday3008/upd-uk
Update translation_UK.json
2021-12-11 10:04:07 +11:00
PlayDay
b22822f229 Update translation_UK.json
Using this PR #1131

Co-Authored-By: Ihor Bats <batsihor@gmail.com>
2021-12-05 08:26:07 +01:00
Ben V. Brown
509e903800 Merge pull request #1130 from Ralim/dependabot/github_actions/actions/cache-2.1.7
chore(deps): bump actions/cache from 2.1.6 to 2.1.7
2021-11-30 20:50:41 +11:00
dependabot[bot]
128ecb425d chore(deps): bump actions/cache from 2.1.6 to 2.1.7
Bumps [actions/cache](https://github.com/actions/cache) from 2.1.6 to 2.1.7.
- [Release notes](https://github.com/actions/cache/releases)
- [Commits](https://github.com/actions/cache/compare/v2.1.6...v2.1.7)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 12:06:12 +00:00
Ben V. Brown
092f195182 Merge pull request #1115 from onxblog/patch-1
New translations
2021-11-29 13:15:59 +11:00
Ben V. Brown
44b849ae24 Merge branch 'master' into patch-1 2021-11-29 11:59:41 +11:00
Ben V. Brown
284de30bb8 Merge pull request #1127 from contactalexliu/patch-translation_ZH_CN-1
Improve Simplified Chinese translations
2021-11-28 23:04:03 +11:00
Ben V. Brown
3fade684d5 Merge pull request #1128 from contactalexliu/patch-custom-multi-lang-combinations-1
Add custom multi-language build options and improve build docs
2021-11-28 14:44:13 +11:00
Ben V. Brown
d5ded11050 Merge branch 'master' into patch-translation_ZH_CN-1 2021-11-28 14:36:16 +11:00
Ben V. Brown
b2357ec8f6 Merge pull request #1129 from alvinhochun/zh-fixes
Some improvements for Traditional Chinese and Cantonese
2021-11-28 12:49:30 +11:00
Alvin Wong
4042e616da Translate more strings for zh-TW and yue-HK
Didn't translate these strings before as I didn't feel there is enough
room to accurately translate them, but now I have a change of heart.
2021-11-27 21:01:52 +08:00
Alvin Wong
d72a207b36 Fix character writing in yue-HK
俗字「辣雞」-> 正字「焫雞」
2021-11-27 20:54:00 +08:00
Alex Liu
e052cd05bb Refine Simplified Chinese translations
Some Simplified Chinese translations were further improved to be more in line with the vernacular.
2021-11-27 04:52:01 -08:00
Alvin Wong
6000fa47f7 Fix typo with zh-TW
錯別字:「鉻鐵」->「烙鐵」
2021-11-27 20:51:36 +08:00
Alex Liu
d5b6ef368a Update build instructions and examples
Updated and clarified how to build IronOS for different models with single or multiple, preset or custom, languages on macOS and Linux.
2021-11-27 04:20:57 -08:00
Alex Liu
8bb26eb39c Enable custom language combinations at build time
Added a parameter to allow custom language combinations to be selected at build time.
2021-11-27 03:38:36 -08:00
Alex Liu
e80610d6fd Improve Simplified Chinese translations
Some Simplified Chinese translations were improved to be more in line with the vernacular.
2021-11-27 03:22:15 -08:00
Ben V. Brown
882bd68036 Merge pull request #1121 from Devnol/master
Add Greek font table and GR translation
2021-11-24 17:46:56 +11:00
Ben V. Brown
7743aee1f5 Merge pull request #1123 from lidacity/master
add new language (Belarussian)
2021-11-24 17:42:44 +11:00
lidacity
a3990adb39 correct Belarussian language
BY -> BE (ISO language code)
2021-11-23 20:09:45 +03:00
Devnol
8d9cbab79e change translation filename to EL
Signed-off-by: Devnol <pgkoutsoumanis@gmail.com>
2021-11-23 16:09:01 +02:00
lidacity
26c95dfad6 дадана беларуская мова
добавлен файл с белорусским языком
2021-11-22 11:52:47 +03:00
Devnol
9e6783c1d5 Make indentation consistent in font_tables.py
Signed-off-by: Devnol <pgkoutsoumanis@gmail.com>
2021-11-20 19:10:59 +02:00
Devnol
ac769c109a Fix some half height glyphs
Signed-off-by: Devnol <pgkoutsoumanis@gmail.com>
2021-11-20 18:58:58 +02:00
Devnol
e0f9809693 Fix issues pointed out by @alvinhochun
Signed-off-by: Devnol <pgkoutsoumanis@gmail.com>
2021-11-20 18:05:06 +02:00
Devnol
63cf8aa437 Add Greek font table and GR translation
Signed-off-by: Devnol <pgkoutsoumanis@gmail.com>
2021-11-20 17:52:26 +02:00
Ben V. Brown
b29c5a9602 Address settings bounds checks 2021-11-19 19:52:14 +11:00
Alex
472b6ceb77 Fix sentence
Fix sentence
2021-11-17 01:42:40 +02:00
Alex
19fb0deb2f New translations
Added new translations
2021-11-17 01:27:13 +02:00
Ben V. Brown
bc7d106c9f Merge pull request #1108 from discip/master
fix for disconnected tip icon in lefty mode
2021-11-06 08:16:02 +11:00
discip
63f777d553 Update Font.h 2021-10-28 20:55:38 +02:00
discip
73bedf3981 Update GUIThread.cpp 2021-10-28 19:48:14 +02:00
discip
6fe01721e7 Update Font.h 2021-10-28 19:47:40 +02:00
Ben V. Brown
d6f059cc43 Merge pull request #1106 from Ralim/ralim/1105
Fix #1105
2021-10-17 11:29:10 +11:00
Ben V. Brown
ca02f7606b Fix #1105 2021-10-17 11:20:03 +11:00
Ben V. Brown
2fcccbc310 Merge pull request #1103 from alvinhochun/alvin/fix-jp-translation
Fix Japanese translation
2021-10-14 09:43:55 +11:00
Alvin Wong
5e2d696260 Revert "Update translation_JA_JP.json"
This reverts commit 20c2b78e38.
2021-10-13 00:06:44 +08:00
Alvin Wong
d60244c0da Remove obsolete msgs from translation_JA_JP.json 2021-10-12 23:53:14 +08:00
discip
d72b27543b Merge branch 'master' into disconnected-tip 2021-10-02 13:30:06 +02:00
discip
dfe96c3eca Merge branch 'master' into disconnected-tip 2021-10-01 11:26:49 +02:00
discip
994be53ae4 Update GUIThread.cpp 2021-10-01 02:12:18 +02:00
discip
5b684b6c75 changed idle screen & missing tip 2021-10-01 01:22:51 +02:00
29 changed files with 2555 additions and 1733 deletions

View File

@@ -19,7 +19,7 @@ jobs:
run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build
- name: Cached compiler source files - name: Cached compiler source files
uses: actions/cache@v2.1.6 uses: actions/cache@v2.1.7
env: env:
cache-name: cache-compilers cache-name: cache-compilers
with: with:
@@ -66,7 +66,7 @@ jobs:
run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build
- name: Cached compiler source files - name: Cached compiler source files
uses: actions/cache@v2.1.6 uses: actions/cache@v2.1.7
env: env:
cache-name: cache-compilers cache-name: cache-compilers
with: with:
@@ -130,7 +130,7 @@ jobs:
run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build run: chmod +x setup.sh && chmod +x source/build.sh && sudo mkdir -p /build/cache && sudo chmod -R 777 /build
- name: Cached compiler source files - name: Cached compiler source files
uses: actions/cache@v2.1.6 uses: actions/cache@v2.1.7
env: env:
cache-name: cache-compilers cache-name: cache-compilers
with: with:

View File

@@ -1,30 +1,86 @@
# Development # Development
Building this software can be performed two ways, using the STMCubeIDE or using command line tools. Building this software can be performed two ways: using the STM32CubeIDE or using command line tools.
## STM Cube IDE ## STM32CubeIDE
The easiest way to start working using the STM Cube IDE is to create a new project for the STM32F103RCTx. The easiest way to start working with the STM32CubeIDE is to create a new project for the STM32F103RCTx.
Then once this is created remove the auto-generated source code. Once this is created, remove the auto-generated source code.
Next drag the contents of the `source` folder into the project and choose to link to files. Next, drag the contents of the `source` folder into the project and choose to link to files.
You will need to update the build settings for include paths & point to the new `.ld` linker file You will need to update the build settings for include paths and point to the new `.ld` linker file.
## Developing with command line tools & building a release ## Command line tools and building a release
In the `source` folder there is a makefile that can be used to build the repository using command line tools. In the `source` folder there is a `Makefile` that can be used to build the repository using command line tools.
when running the `make` command, specify which model of the device & the language you would like to use. When running the `make` command, specify which model of the device and the language(s) you would like to use.
`make -j8 lang=EN model=TS80` ### macOS
To build a release instead, run the build.sh script. This will update translations and also build every language for both TS100 and TS80 models. Use the following steps to set up a build environment for IronOS on the command line (in Terminal).
1. [Follow steps 1 3 here to install the toolchain](https://github.com/glegrain/STM32-with-macOS#0---installing-the-toolchain) needed to compile for STM32 microcontrollers.
2. Install `python`:
```
brew install python
```
3. (Optional) Update `pip` so it doesn't warn you about being out-of-date:
```
python3 -m pip install --upgrade pip
```
4. Change to the `source` directory:
```
cd source
```
5. Create a Python virtual environment for IronOS named `ironos-venv` to keep your Python installation clean:
```
python3 -m venv ironos-venv
```
6. Activate the Python virtual environment:
```
source ironos-venv/bin/activate
```
7. Install the dependencies required to run `make-translation.py`:
```
pip install bdflib
```
8. All done! See some examples below for how you can build your own IronOS.
### Examples
To build a single language Simplified Chinese firmware for the TS80P with 8 simultaneous jobs:
```
make -j8 model=TS80P firmware-ZH_CN
```
To build a European multi-language firmware for the Pinecil with as many simultaneous jobs as there are logical processors on Linux:
```
make -j$(nproc) model=Pinecil firmware-multi_European
```
To build a Cyrillic compressed multi-language firmware for the Pinecil with as many simultaneous jobs as there are logical processors on macOS:
```
make -j$(sysctl -n hw.logicalcpu) model=Pinecil firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian
```
To build a custom multi-language firmware including English and Simplified Chinese for the TS80:
```
make -j8 model=TS80 custom_multi_langs="EN ZH_CN" firmware-multi_Custom
```
To build a custom compressed multi-language firmware including German, Spanish, and French for the TS100 (note if `model` is unspecified, it will default to `TS100`):
```
make -j8 custom_multi_langs="DE ES FR" firmware-multi_compressed_Custom
```
To build a release instead, run the `build.sh` script. This will update translations and also build every language for all device models. For macOS users, replace `make -j$(nproc)` in the script with `make -j$(sysctl -n hw.logicalcpu)` before running.
## Updating languages ## Updating languages
To update the language translation files & associated font map, execute the `make_translation.py` code from the translations directory. To update the language translation files and their associated font maps, execute the `make_translation.py` code from the `Translations` directory.
## Building Pinecil ## Building Pinecil
I highly recommend using the command line tools and using docker to run the compiler. I highly recommend using the command line tools and using Docker to run the compiler.
It's a bit more fussy on setup than the STM tooling and this is by far the easiest way. It's a bit more fussy on setup than the STM tooling, and this is by far the easiest way.
If you _need_ an IDE I have used [Nuclei's IDE](https://nucleisys.com/download.php) If you _need_ an IDE I have used [Nuclei's IDE](https://nucleisys.com/download.php).
And follow same idea as the STM Cube IDE notes above. Follow the same idea as the STM Cube IDE notes above.

View File

@@ -1,9 +1,9 @@
#!/bin/bash #!/bin/sh
# TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen) # TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen)
DIR_TMP="/tmp/ts100" DIR_TMP="/tmp/ts100"
function usage() { usage() {
echo echo
echo "#################" echo "#################"
echo "# TS100 Flasher #" echo "# TS100 Flasher #"
@@ -18,36 +18,32 @@ function usage() {
} }
GAUTOMOUNT=0 GAUTOMOUNT=0
function disable_gautomount { disable_gautomount() {
GSETTINGS=$(which gsettings) if ! GSETTINGS=$(which gsettings); then
if [ $? -ne 0 ]; then
return 1 return 1
fi fi
gsettings get org.gnome.desktop.media-handling automount | grep true > /dev/null if ! gsettings get org.gnome.desktop.media-handling automount | grep true > /dev/null; then
if [ $? -eq 0 ]; then
GAUTOMOUNT=1 GAUTOMOUNT=1
gsettings set org.gnome.desktop.media-handling automount false gsettings set org.gnome.desktop.media-handling automount false
fi fi
} }
function enable_gautomount { enable_gautomount() {
if [ "$GAUTOMOUNT" -ne 0 ]; then if [ "$GAUTOMOUNT" -ne 0 ]; then
gsettings set org.gnome.desktop.media-handling automount true gsettings set org.gnome.desktop.media-handling automount true
fi fi
} }
function is_attached { is_attached() {
output=$(lsblk -b --raw --output NAME,MODEL | grep 'DFU.*Disk') if ! output=$(lsblk -b --raw --output NAME,MODEL | grep 'DFU.*Disk'); then
if [ $? -ne 0 ]; then
return 1 return 1
fi fi
DEVICE=$(echo $output | awk '{print "/dev/"$1}') DEVICE=$(echo "$output" | awk '{print "/dev/"$1}')
} }
instructions="not printed" instructions="not printed"
function wait_for_ts100 { wait_for_ts100() {
is_attached while ! is_attached; do
while [ $? -ne 0 ]; do
if [ "$instructions" = "not printed" ]; then if [ "$instructions" = "not printed" ]; then
echo echo
echo "#####################################################" echo "#####################################################"
@@ -60,29 +56,27 @@ function wait_for_ts100 {
instructions="printed" instructions="printed"
fi fi
sleep 0.1 sleep 0.1
is_attached
done done
} }
function mount_ts100 { mount_ts100() {
mkdir -p "$DIR_TMP" mkdir -p "$DIR_TMP"
sudo mount -t msdos -o uid=$UID "$DEVICE" "$DIR_TMP" user="${UID:-$(id -u)}"
if [ $? -ne 0 ]; then if ! sudo mount -t msdos -o uid=$user "$DEVICE" "$DIR_TMP"; then
echo "Failed to mount $DEVICE on $DIR_TMP" echo "Failed to mount $DEVICE on $DIR_TMP"
exit 1 exit 1
fi fi
} }
function umount_ts100 { umount_ts100() {
mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP" if ! mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP"; then
if [ $? -ne 0 ]; then
echo "Failed to unmount $DIR_TMP" echo "Failed to unmount $DIR_TMP"
exit 1 exit 1
fi fi
rmdir "$DIR_TMP" rmdir "$DIR_TMP"
} }
function cleanup { cleanup() {
enable_gautomount enable_gautomount
if [ -d "$DIR_TMP" ]; then if [ -d "$DIR_TMP" ]; then
umount_ts100 umount_ts100
@@ -102,7 +96,7 @@ if [ ! -f "$1" ]; then
exit 1 exit 1
fi fi
if [ $(head -c1 "$1") != ":" ] || [ $(tail -n1 "$1" | head -c1) != ":" ]; then if [ "$(head -c1 "$1")" != ":" ] || [ "$(tail -n1 "$1" | head -c1)" != ":" ]; then
echo "'$1' doesn't look like a valid HEX file. Please provide a HEX file to flash" echo "'$1' doesn't look like a valid HEX file. Please provide a HEX file to flash"
usage usage
exit 1 exit 1

View File

@@ -308,6 +308,7 @@
<select v-model="fontToAdd"> <select v-model="fontToAdd">
<!-- <option value="ascii_basic">ascii_basic: ASCII Basic</option> --> <!-- <option value="ascii_basic">ascii_basic: ASCII Basic</option> -->
<option value="latin_extended">latin_extended: Latin Extended</option> <option value="latin_extended">latin_extended: Latin Extended</option>
<option value="greek">greek: Greek Glyphs</option>
<option value="cyrillic">cyrillic: Cyrillic Glyphs</option> <option value="cyrillic">cyrillic: Cyrillic Glyphs</option>
<option value="cjk">cjk: Chinese/Japanese/Korean</option> <option value="cjk">cjk: Chinese/Japanese/Korean</option>
</select> </select>

View File

@@ -326,6 +326,70 @@ def get_font_map_latin_extended() -> Dict[str, bytes]:
return font return font
def get_font_map_greek() -> Dict[str, bytes]:
font = {
# U+0370..U+03FF Greek and Coptic
"Έ": b"\x06\xFC\xFC\x8C\x8C\x8C\x8C\x8C\x8C\x0C\x0C\x00\x00\x3F\x3F\x31\x31\x31\x31\x31\x31\x30\x30\x00",
"Α": b"\x00\x00\x00\xE0\xFC\x1F\x1F\xFC\xE0\x00\x00\x00\x00\x38\x3F\x07\x06\x06\x06\x06\x07\x3F\x38\x00",
"Β": b"\x00\xFF\xFF\xC3\xC3\xC3\xC3\xE7\xFE\xBC\x00\x00\x00\x3F\x3F\x30\x30\x30\x30\x30\x39\x1F\x0F\x00",
"Γ": b"\x00\xFF\xFF\x03\x03\x03\x03\x03\x03\x03\x03\x00\x00\x3F\x3F\x00\x00\x00\x00\x00\x00\x00\x00\x00",
"Δ": b"\x00\x00\x00\xE0\xFC\x1F\x1F\xFC\xE0\x00\x00\x00\x00\x38\x3F\x37\x30\x30\x30\x30\x37\x3F\x38\x00",
"Ε": b"\x00\xFF\xFF\xC3\xC3\xC3\xC3\xC3\xC3\x03\x03\x00\x00\x3F\x3F\x30\x30\x30\x30\x30\x30\x30\x30\x00",
"Ζ": b"\x00\x03\x03\x03\x03\xC3\xE3\x33\x1F\x0F\x03\x00\x00\x30\x3C\x3E\x33\x31\x30\x30\x30\x30\x30\x00",
"Η": b"\x00\xFF\xFF\xC0\xC0\xC0\xC0\xC0\xC0\xFF\xFF\x00\x00\x3F\x3F\x00\x00\x00\x00\x00\x00\x3F\x3F\x00",
"Θ": b"\x00\xF0\xFC\x0E\xC7\xC3\xC3\xC7\x0E\xFC\xF0\x00\x00\x03\x0F\x1C\x38\x30\x30\x38\x1C\x0F\x03\x00",
"Ι": b"\x00\x00\x00\x03\x03\xFF\xFF\x03\x03\x00\x00\x00\x00\x00\x00\x30\x30\x3F\x3F\x30\x30\x00\x00\x00",
"Κ": b"\x00\xFF\xFF\xC0\xE0\xF0\x38\x1C\x0E\x07\x03\x00\x00\x3F\x3F\x00\x01\x03\x07\x0E\x1C\x38\x30\x00",
"Λ": b"\x00\x00\x00\xE0\xFC\x1F\x1F\xFC\xE0\x00\x00\x00\x00\x38\x3F\x07\x00\x00\x00\x00\x07\x3F\x38\x00",
"Μ": b"\x00\xFF\xFF\x1E\x78\xE0\xE0\x78\x1E\xFF\xFF\x00\x00\x3F\x3F\x00\x00\x01\x01\x00\x00\x3F\x3F\x00",
"Ν": b"\x00\xFF\xFF\x0E\x38\xF0\xC0\x00\x00\xFF\xFF\x00\x00\x3F\x3F\x00\x00\x00\x03\x07\x1C\x3F\x3F\x00",
"Ξ": b"\x00\x03\x03\xC3\xC3\xC3\xC3\xC3\xC3\x03\x03\x00\x00\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x00",
"Ο": b"\x00\xF0\xFC\x0E\x07\x03\x03\x07\x0E\xFC\xF0\x00\x00\x03\x0F\x1C\x38\x30\x30\x38\x1C\x0F\x03\x00",
"Π": b"\x00\xFF\xFF\x03\x03\x03\x03\x03\x03\xFF\xFF\x00\x00\x3F\x3F\x00\x00\x00\x00\x00\x00\x3F\x3F\x00",
"Ρ": b"\x00\xFF\xFF\x83\x83\x83\x83\x83\xC7\xFE\x7C\x00\x00\x3F\x3F\x01\x01\x01\x01\x01\x01\x00\x00\x00",
"Σ": b"\x00\x03\x0F\x1F\x33\xE3\xE3\x03\x03\x03\x03\x00\x00\x30\x3C\x3E\x33\x31\x30\x30\x30\x30\x30\x00",
"Τ": b"\x00\x03\x03\x03\x03\xFF\xFF\x03\x03\x03\x03\x00\x00\x00\x00\x00\x00\x3F\x3F\x00\x00\x00\x00\x00",
"Υ": b"\x00\x03\x0F\x3C\xF0\xC0\xC0\xF0\x3C\x0F\x03\x00\x00\x00\x00\x00\x00\x3F\x3F\x00\x00\x00\x00\x00",
"Φ": b"\x00\xF8\xFC\x0E\x06\xFF\xFF\x06\x0E\xFC\xF8\x00\x00\x03\x07\x0E\x0C\x3F\x3F\x0C\x0E\x07\x03\x00",
"Χ": b"\x00\x03\x0F\x3C\xF0\xC0\xC0\xF0\x3C\x0F\x03\x00\x00\x30\x3C\x0F\x03\x00\x00\x03\x0F\x3C\x30\x00",
"Ψ": b"\x00\x3F\x7F\xE0\xC0\xFF\xFF\xC0\xE0\x7F\x3F\x00\x00\x00\x00\x00\x00\x3F\x3F\x00\x00\x00\x00\x00",
"Ω": b"\x00\xF0\xFC\x0E\x07\x03\x03\x07\x0E\xFC\xF0\x00\x00\x63\x6F\x7C\x70\x00\x00\x70\x7C\x6F\x63\x00",
"ά": b"\x00\x80\xC0\xE0\x60\x6C\x6E\x66\xC0\xE0\xE0\x00\x00\x0F\x1F\x38\x30\x30\x30\x30\x18\x3F\x3F\x20",
"έ": b"\x00\xE0\xF0\x30\x30\x36\x37\x33\x30\x70\x60\x00\x00\x1D\x3F\x33\x33\x33\x33\x33\x33\x38\x18\x00",
"ή": b"\x00\xE0\xE0\xC0\x60\x6C\x6E\xE6\xE0\xC0\x00\x00\x00\x1F\x1F\x00\x00\x00\x00\x00\x7F\x7F\x00\x00",
"ί": b"\x00\x00\x00\xEC\xEE\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1F\x3F\x30\x30\x30\x00\x00\x00\x00",
"α": b"\x00\x80\xC0\xE0\x60\x60\x60\x60\xC0\xE0\xE0\x00\x00\x0F\x1F\x38\x30\x30\x30\x30\x18\x3F\x3F\x20",
"β": b"\x00\x00\xC0\xE0\x30\x10\x10\x30\xE0\xC0\x00\x00\x00\x00\xFF\xFF\x21\x21\x21\x33\x3F\x1E\x00\x00",
"γ": b"\x00\x60\xE0\x80\x00\x00\x00\x00\x80\xE0\x60\x00\x00\x00\x01\x07\x1E\xF8\xF8\x1E\x07\x01\x00\x00",
"δ": b"\x00\x83\xC7\xEF\x7F\x7B\x73\x63\xE3\xC3\x83\x00\x00\x0F\x1F\x38\x30\x30\x30\x30\x38\x1F\x0F\x00",
"ε": b"\x00\xE0\xF0\x30\x30\x30\x30\x30\x30\x70\x60\x00\x00\x1D\x3F\x33\x33\x33\x33\x33\x33\x38\x18\x00",
"ζ": b"\x00\x83\xC3\xE3\x63\x63\x63\x73\x3F\x1F\x00\x00\x00\x0F\x1F\x38\x30\x30\x30\xF0\xE0\x00\x00\x00",
"η": b"\x00\xE0\xE0\xC0\x60\x60\x60\xE0\xE0\xC0\x00\x00\x00\x1F\x1F\x00\x00\x00\x00\x00\x7F\x7F\x00\x00",
"θ": b"\x00\xF0\xF8\x1C\x8C\x8C\x8C\x8C\x1C\xF8\xF0\x00\x00\x0F\x1F\x38\x31\x31\x31\x31\x38\x1F\x0F\x00",
"ι": b"\x00\x00\x00\xE0\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1F\x3F\x30\x30\x30\x00\x00\x00\x00",
"κ": b"\x00\x00\xC0\xC0\x00\x00\x80\xC0\xC0\x00\x00\x00\x00\x00\x3F\x3F\x06\x0F\x1F\x39\x30\x00\x00\x00",
"λ": b"\x00\x00\x00\x00\xC0\xE0\xE0\xC0\x00\x00\x00\x00\x00\x30\x3C\x0F\x03\x00\x00\x03\x0F\x3C\x30\x00",
"μ": b"\x00\xF0\xF0\x00\x00\x00\x00\x00\xF0\xF0\x00\x00\x00\xFF\xFF\x0E\x0C\x0C\x0C\x06\x0F\x0F\x00\x00",
"ν": b"\x00\x60\xE0\x80\x00\x00\x00\x00\x80\xE0\x60\x00\x00\x00\x01\x07\x1E\x38\x38\x1E\x07\x01\x00\x00",
"ξ": b"\x00\x3C\xFE\xE7\xC3\xC3\xC3\xC3\x00\x00\x00\x00\x00\x0F\x1F\x39\x30\x30\xF0\xE0\x00\x00\x00\x00",
"ο": b"\x00\x80\xC0\xE0\x60\x60\x60\x60\xE0\xC0\x80\x00\x00\x0F\x1F\x38\x30\x30\x30\x30\x38\x1F\x0F\x00",
"π": b"\x00\x60\xE0\xE0\x60\x60\x60\xE0\xE0\x60\x00\x00\x00\x00\x3F\x3F\x00\x00\x00\x3F\x3F\x30\x00\x00",
"ρ": b"\x00\xE0\xE0\x60\x60\x60\x60\x60\xE0\xC0\x80\x00\x00\xFF\xFF\x0C\x18\x18\x18\x18\x1C\x0F\x07\x00",
"ς": b"\x00\x80\xC0\xE0\x60\x60\x60\xE0\xC0\x80\x00\x00\x00\x0F\x1F\x38\x30\x30\xF0\xE0\x03\x03\x00\x00",
"σ": b"\x00\x80\xC0\xE0\x60\x60\x60\xE0\xE0\xE0\x60\x00\x00\x0F\x1F\x38\x30\x30\x30\x38\x1F\x0F\x00\x00",
"τ": b"\x00\x60\x60\xE0\xE0\x60\x60\x60\x00\x00\x00\x00\x00\x00\x00\x1F\x3F\x30\x30\x30\x00\x00\x00\x00",
"υ": b"\x00\xE0\xE0\x00\x00\x00\x00\x00\xE0\xE0\x00\x00\x00\x0F\x1F\x38\x30\x30\x30\x38\x1F\x0F\x00\x00",
"φ": b"\x00\xC0\xE0\x70\x30\xF8\xF8\x30\x70\xE0\xC0\x00\x00\x07\x0F\x1C\x18\x7F\x7F\x18\x1C\x0F\x07\x00",
"χ": b"\x00\x70\xF0\xC0\x80\x00\x80\xC0\xF0\x70\x00\x00\x00\x70\x78\x1D\x0F\x07\x0F\x1D\x78\x70\x00\x00",
"ψ": b"\x00\xE0\xE0\x00\x00\xE0\xE0\x00\x00\xE0\xE0\x00\x00\x07\x0F\x1C\x18\x7F\x7F\x18\x1C\x0F\x07\x00",
"ω": b"\x00\xC0\xE0\x00\x00\x00\x00\x00\x00\xE0\xC0\x00\x00\x0F\x1F\x38\x38\x1E\x1E\x38\x38\x1F\x0F\x00",
"ό": b"\x00\x80\xC0\xE0\x60\x6C\x6E\x66\xE0\xC0\x80\x00\x00\x0F\x1F\x38\x30\x30\x30\x30\x38\x1F\x0F\x00",
"ύ": b"\x00\xE0\xE0\x00\x00\x0C\x0E\x06\xE0\xE0\x00\x00\x00\x0F\x1F\x38\x30\x30\x30\x38\x1F\x0F\x00\x00",
"ώ": b"\x00\xC0\xE0\x00\x00\x18\x1C\x0C\x00\xE0\xC0\x00\x00\x0F\x1F\x38\x38\x1E\x1E\x38\x38\x1F\x0F\x00",
}
return font
def get_font_map_cyrillic() -> Dict[str, bytes]: def get_font_map_cyrillic() -> Dict[str, bytes]:
font = { font = {
# U+0400..U+04FF Cyrillic # U+0400..U+04FF Cyrillic
@@ -750,6 +814,70 @@ def get_small_font_map_latin_extended() -> Dict[str, bytes]:
return font return font
def get_small_font_map_greek() -> Dict[str, bytes]:
font = {
# U+0370..U+03FF Greek and Coptic
"Έ": b"\x03\x7F\x49\x49\x49\x41",
"Α": b"\x7e\x09\x09\x09\x7e\x00",
"Β": b"\x7f\x49\x49\x49\x36\x00",
"Γ": b"\x7f\x01\x01\x01\x01\x00",
"Δ": b"\x70\x4C\x43\x4C\x70\x00",
"Ε": b"\x7f\x49\x49\x49\x41\x00",
"Ζ": b"\x61\x51\x49\x45\x43\x00",
"Η": b"\x7f\x08\x08\x08\x7f\x00",
"Θ": b"\x3E\x49\x49\x49\x3E\x00",
"Ι": b"\x00\x41\x7f\x41\x00\x00",
"Κ": b"\x7f\x08\x14\x22\x41\x00",
"Λ": b"\x70\x0C\x03\x0C\x70\x00",
"Μ": b"\x7f\x02\x0c\x02\x7f\x00",
"Ν": b"\x7f\x04\x08\x10\x7f\x00",
"Ξ": b"\x41\x49\x49\x49\x41\x00",
"Ο": b"\x3e\x41\x41\x41\x3e\x00",
"Π": b"\x7F\x01\x01\x01\x7F\x00",
"Ρ": b"\x7f\x09\x09\x09\x06\x00",
"Σ": b"\x63\x55\x49\x41\x41\x00",
"Τ": b"\x01\x01\x7f\x01\x01\x00",
"Υ": b"\x07\x08\x70\x08\x07\x00",
"Φ": b"\x0c\x12\x7f\x12\x0c\x00",
"Χ": b"\x63\x14\x08\x14\x63\x00",
"Ψ": b"\x07\x08\x7F\x08\x07\x00",
"Ω": b"\x5E\x61\x01\x61\x5E\x00",
"ά": b"\x38\x45\x45\x38\x7C\x40",
"έ": b"\x28\x55\x55\x44\x28\x00",
"ή": b"\x04\x79\x05\x04\xF8\x00",
"ί": b"\x04\x3D\x41\x40\x00\x00",
"α": b"\x38\x44\x44\x38\x7C\x40",
"β": b"\x7E\x21\x25\x25\x1A\x00",
"γ": b"\x0C\x10\x60\x10\x0C\x00",
"δ": b"\x30\x4B\x45\x49\x30\x00",
"ε": b"\x28\x54\x54\x44\x28\x00",
"ζ": b"\x00\x31\x49\x45\xC3\x00",
"η": b"\x04\x78\x04\x04\xF8\x00",
"θ": b"\x3E\x49\x49\x49\x3E\x00",
"ι": b"\x04\x3C\x40\x40\x00\x00",
"κ": b"\x00\x7C\x10\x28\x44\x00",
"λ": b"\x70\x0A\x04\x08\x70\x00",
"μ": b"\xFC\x10\x10\x3C\x20\x00",
"ν": b"\x1C\x20\x40\x20\x1C\x00",
"ξ": b"\x36\x49\x49\xC9\x00\x00",
"ο": b"\x38\x44\x44\x44\x38\x00",
"π": b"\x04\x7C\x04\x7C\x44\x00",
"ρ": b"\xF8\x24\x24\x24\x18\x00",
"ς": b"\x38\x44\x44\xC4\x04\x00",
"σ": b"\x38\x44\x44\x44\x3C\x04",
"τ": b"\x04\x3C\x44\x44\x00\x00",
"υ": b"\x3C\x40\x40\x40\x3C\x00",
"φ": b"\x18\x24\x7e\x24\x18\x00",
"χ": b"\x44\x24\x38\x48\x44\x00",
"ψ": b"\x1C\x20\x7C\x20\x1C\x00",
"ω": b"\x38\x44\x30\x44\x38\x00",
"ό": b"\x38\x45\x45\x44\x38\x00",
"ύ": b"\x3C\x41\x41\x40\x3C\x00",
"ώ": b"\x38\x45\x31\x44\x38\x00",
}
return font
def get_small_font_map_cyrillic() -> Dict[str, bytes]: def get_small_font_map_cyrillic() -> Dict[str, bytes]:
font = { font = {
# U+0400..U+04FF Cyrillic # U+0400..U+04FF Cyrillic
@@ -859,6 +987,7 @@ NAME_ASCII_BASIC: Final = "ascii_basic"
NAME_LATIN_EXTENDED: Final = "latin_extended" NAME_LATIN_EXTENDED: Final = "latin_extended"
NAME_CYRILLIC: Final = "cyrillic" NAME_CYRILLIC: Final = "cyrillic"
NAME_CJK: Final = "cjk" NAME_CJK: Final = "cjk"
NAME_GREEK: Final = "greek"
def get_font_maps_for_name( def get_font_maps_for_name(
@@ -870,5 +999,7 @@ def get_font_maps_for_name(
return get_font_map_latin_extended(), get_small_font_map_latin_extended() return get_font_map_latin_extended(), get_small_font_map_latin_extended()
elif font_name == NAME_CYRILLIC: elif font_name == NAME_CYRILLIC:
return get_font_map_cyrillic(), get_small_font_map_cyrillic() return get_font_map_cyrillic(), get_small_font_map_cyrillic()
elif font_name == NAME_GREEK:
return get_font_map_greek(), get_small_font_map_greek()
else: else:
raise ValueError("Invalid font name") raise ValueError("Invalid font name")

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,213 @@
{
"languageCode": "BE",
"languageLocalName": "Беларуская",
"fonts": ["ascii_basic", "latin_extended", "cyrillic"],
"messages": {
"SettingsCalibrationDone": "Каліброўка закончана!",
"SettingsCalibrationWarning": "Перад тым, як працягнуць, каліласка, упэўнецеся, што джала мае комнатную тэмпературу!",
"SettingsResetWarning": "Вы ўпэннены, што жадаеце зкінуць налады да першапачатковых значэнняў?",
"UVLOWarningString": "НАПРУГА--",
"UndervoltageString": "Нізкая напруга",
"InputVoltageString": "Сілкаванне В: ",
"WarningTipTempString": "Тэмп. джала: ",
"BadTipString": "ДЖАЛА--",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Чаканне...",
"WarningSimpleString": "ГОРАЧА!",
"WarningAdvancedString": "!!! ГАРАЧАЕ !!!\n!!! ДЖАЛА !!!",
"SleepingTipAdvancedString": "Джала:",
"IdleTipString": "Джала:",
"IdleSetString": " ->",
"TipDisconnectedString": "ДЖАЛА АДЛУЧАНА",
"SolderingAdvancedPowerPrompt": "Сілкаванне: ",
"OffString": "Выкл.",
"YourGainMessage": "Прырост:"
},
"messagesWarn": {
"ResetOKMessage": "Скід OK",
"SettingsResetMessage": ["Налады", "зкінуты!"],
"NoAccelerometerMessage": ["Ня вызначаны", "акселерометр!"],
"NoPowerDeliveryMessage": ["Няма USB-PD IC", "выяўлены!"],
"LockingKeysString": "ЗАМКНУТЫ",
"UnlockingKeysString": "АДЫМКНУТЫ",
"WarningKeysLockedString": "!ЗАМКНУТЫ!",
"WarningThermalRunaway": ["Цеплавы", "Уцякач"]
},
"characters": {
"SettingRightChar": "П",
"SettingLeftChar": "Л",
"SettingAutoChar": "А",
"SettingOffChar": "O",
"SettingSlowChar": "М",
"SettingMediumChar": "С",
"SettingFastChar": "Х",
"SettingStartNoneChar": "В",
"SettingStartSolderingChar": "П",
"SettingStartSleepChar": "Ч",
"SettingStartSleepOffChar": "К",
"SettingSensitivityOff": "А",
"SettingSensitivityLow": "Н",
"SettingSensitivityMedium": "С",
"SettingSensitivityHigh": "В",
"SettingLockDisableChar": "А",
"SettingLockBoostChar": "Т",
"SettingLockFullChar": "П",
"SettingNAChar": "Н/Д"
},
"menuGroups": {
"PowerMenu": {
"text2": ["Налады", "сілкавання"],
"desc": "Крыніца сілкавання і мінімальная напруга на ячэйку"
},
"SolderingMenu": {
"text2": ["Налады", "пайкі"],
"desc": "Налады пайкі"
},
"PowerSavingMenu": {
"text2": ["Рэжымы", "сну"],
"desc": "Налады рэжыму чакання"
},
"UIMenu": {
"text2": ["Налады", "інтэрфейсу"],
"desc": "Карыстальніцкія налады знешняга выгляду"
},
"AdvancedMenu": {
"text2": ["Дадатковыя", "налады"],
"desc": "Дадатковыя налады"
}
},
"menuOptions": {
"DCInCutoff": {
"text2": ["Крыніца", "сілкавання"],
"desc": "Крыніца сілкавання. Усталюе напругу адсечкі. (DC 10В) (S 3,3В на ячэйку, без абмежавання магутнасці)"
},
"SleepTemperature": {
"text2": ["Тэмп.", "чакання"],
"desc": "Тэмпература рэжыму чакання"
},
"SleepTimeout": {
"text2": ["Таймаўт", "чакання"],
"desc": "Час да пераходу ў рэжым чакання (Хвіліны | Секунды)"
},
"ShutdownTimeout": {
"text2": ["Таймаут", "выключэння"],
"desc": "Час да адключэння паяльніка (Хвіліны)"
},
"MotionSensitivity": {
"text2": ["Адчувальнасць", "акселерометра"],
"desc": "Адчувальнасць акселерометра (0=Выкл. | 1=Мін. | ... | 9=Макс.)"
},
"TemperatureUnit": {
"text2": ["Адзінкі", "тэмпературы"],
"desc": "Адзінкі вымярэння тэмпературы (C=Цэльcія | F=Фарэнгейта)"
},
"AdvancedIdle": {
"text2": ["Падрабязны", "рэжым чакання"],
"desc": "Адлюстроўваць дэталёвую инфармацыю паменьшаным шрыфтом на экране чакання"
},
"DisplayRotation": {
"text2": ["Арыентацыя", "экрану"],
"desc": "Арыентацыя экрану (П=Правая рука | Л=Левая рука | А=Аўта)"
},
"BoostTemperature": {
"text2": ["t° турба", "рэжыму"],
"desc": "Тэмпература джала ў турба-рэжыме"
},
"AutoStart": {
"text2": ["Аўта", "старт"],
"desc": "Рэжым, у якім запускаецца паяльнік пры падачы сілкавання (В=Выкл. | П=Пайка | Ч=Чаканне | К=Чаканне пры комн. тэмп.)"
},
"CooldownBlink": {
"text2": ["Мігценне t°", "пры астуджэнні"],
"desc": "Міргаць тэмпературай на экране астуджэння, пакуль джага яшчэ гарачае"
},
"TemperatureCalibration": {
"text2": ["Каліброўка", "тэмпературы"],
"desc": "Каліброўка тэрмадатчыка джала"
},
"SettingsReset": {
"text2": ["Скід", "наладаў"],
"desc": "Скід наладаў да першапачатковых значэнняў"
},
"VoltageCalibration": {
"text2": ["Каліброўка", "напругі"],
"desc": "Каліброўка ўваходнай напругі (падоўжаны націск для выхаду)"
},
"AdvancedSoldering": {
"text2": ["Падрабязны", "экран пайкі"],
"desc": "Паказваць дэталёвую інформацыю на экране пайкі"
},
"ScrollingSpeed": {
"text2": ["Хуткацсь", "тексту"],
"desc": "Хуткасць гартання тэксту (М=марудна | Х=хутка)"
},
"QCMaxVoltage": {
"text2": ["Магутнасць", "сілкавання"],
"desc": "Магутнасць выкарыстоўваемай крыніцы сілкавання"
},
"PDNegTimeout": {
"text2": ["PD", "прыпынак"],
"desc": "Час чакання ўзгаднення PD з крокам 100 мс для сумяшчальнасці з некаторымі зараднымі зараднымі прыладамі QC (0: адключана)"
},
"PowerLimit": {
"text2": ["Межы", "магутнасці"],
"desc": "Максімальная магутнасць, якую можа выкарыстоўваць паяльнік (Ватт)"
},
"ReverseButtonTempChange": {
"text2": ["Інвертаваць", "кнопкі"],
"desc": "Інвертаваць кнопкі вымярэння тэмпературы"
},
"TempChangeShortStep": {
"text2": ["Крок тэмп.", "кар. нац."],
"desc": "Крок вымярэння тэмпературы пры кароткім націску кнопак"
},
"TempChangeLongStep": {
"text2": ["Крок тэмп.", "пад. нац."],
"desc": "Крок вымярэння тэмпературы пры падоўжаным націску кнопак"
},
"PowerPulsePower": {
"text2": ["Сіла імп.", "сілкав. Вт"],
"desc": "Сіла імпульса щтрымливаючага ад сну павербанку ці іншай крыніцы сілкавання"
},
"HallEffSensitivity": {
"text2": ["Эфект Хола", "адчувальнасць"],
"desc": "Узровень адчувальнасці датчыка хола ў рэжыме сну (А=Адключана | Н=Нізкі | С=Сярэдні | В=Высокі)"
},
"LockingMode": {
"text2": ["Дазволіць", "блок. кнопак"],
"desc": "Пры рабоце падоўжаны націск дзьвух кнопак блакуе іх (А=Адключана | Т=Толькі турба | П=Поўная блакіроўка)"
},
"MinVolCell": {
"text2": ["Мін.", "напр."],
"desc": "Мінімальная дазволеная напруга на ячэйку (3S: 3 - 3,7V | 4S: 2,4 - 3,7V)"
},
"AnimLoop": {
"text2": ["Зацыкленая", "анімацыя"],
"desc": "Зацыкленая анімацыя гузікаў у галоўным меню"
},
"AnimSpeed": {
"text2": ["Хуткасць", "анімацыі"],
"desc": "Хуткасць анімацыі гузікаў у галоўным меню (Мілісекунды) (А=Адключана | Н=Нізкі | С=Сярэдні | В=Высокі)"
},
"PowerPulseWait": {
"text2": ["Імпульс магутнасці", "час чакання"],
"desc": "Час чакання перад запускам кожнага імпульсу няспання (x 2.5 с)"
},
"PowerPulseDuration": {
"text2": ["Імпульс магутнасці", "працягласць"],
"desc": "Працягласць імпульсу няспання (x 250 мс)"
},
"LanguageSwitch": {
"text2": ["Мова:", " BY Беларуская"],
"desc": ""
},
"Brightness": {
"text2": ["Экран", "Яркасць"],
"desc": "Адрэгулюйце кантраснасць / яркасць OLED-экрана"
},
"ColourInversion": {
"text2": ["Экран", "Інвертаваць"],
"desc": "Інвертаваць колеры OLED-экрана"
}
}
}

View File

@@ -0,0 +1,340 @@
{
"languageCode": "EL",
"languageLocalName": "Greek",
"fonts": [
"ascii_basic",
"greek"
],
"tempUnitFahrenheit": true,
"messages": {
"SettingsCalibrationWarning": "Πριν προχωρήσετε, παρακαλώ σιγουρευτείτε πως η μύτη βρίσκεται σε θερμοκρασία δωματίου!",
"SettingsResetWarning": "Σίγουρα θέλετε επαναφορά αρχικών ρυθμίσεων;",
"UVLOWarningString": "Χαμηλ DC",
"UndervoltageString": "Υπόταση",
"InputVoltageString": "Είσοδος V: ",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Υπνος...",
"SleepingTipAdvancedString": "Μύτη:",
"IdleTipString": "Μύτη:",
"IdleSetString": " Set:",
"TipDisconnectedString": "ΧΩΡΙΣ ΜΥΤΗ",
"SolderingAdvancedPowerPrompt": "Ενέργεια: ",
"OffString": "Απ."
},
"messagesWarn": {
"ResetOKMessage": "Επαν. OK",
"SettingsResetMessage": [
"Κάποιες ρυθμ.",
"άλλαξαν"
],
"NoAccelerometerMessage": [
"Δεν εντοπίστηκε",
"επιταχυνσιόμετρο"
],
"NoPowerDeliveryMessage": [
"Δεν εντοπίστηκε",
"κύκλωμα USB-PD"
],
"LockingKeysString": "ΚΛΕΙΔ.",
"UnlockingKeysString": "ΞΕΚΛΕΙΔ.",
"WarningKeysLockedString": [
"ΚΛΕΙΔΩΜΕΝΑ",
"ΠΛΗΚΤΡΑ!"
],
"WarningThermalRunaway": [
"Θερμική",
"Φυγή"
]
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "Α",
"SettingOffChar": "0",
"SettingSlowChar": "Α",
"SettingMediumChar": "Μ",
"SettingFastChar": "Γ",
"SettingStartNoneChar": "0",
"SettingStartSolderingChar": "Κ",
"SettingStartSleepChar": "Ζ",
"SettingStartSleepOffChar": "Υ",
"SettingSensitivityOff": "0",
"SettingSensitivityLow": "Χ",
"SettingSensitivityMedium": "Μ",
"SettingSensitivityHigh": "Υ",
"SettingLockDisableChar": "Α",
"SettingLockBoostChar": "B",
"SettingLockFullChar": "Π",
"SettingNAChar": "Δ/Δ"
},
"menuGroups": {
"PowerMenu": {
"text2": [
"Ρυθμίσεις",
"ενέργειας"
],
"desc": "Ρυθμίσεις ενέργειας"
},
"SolderingMenu": {
"text2": [
"Ρυθμίσεις",
"κόλλησης"
],
"desc": "Ρυθμίσεις κόλλησης"
},
"PowerSavingMenu": {
"text2": [
"Λειτουργία",
"ύπνου"
],
"desc": "Ρυθμίσεις εξοικ. ενέργ."
},
"UIMenu": {
"text2": [
"Διεπαφή",
"χρήστη"
],
"desc": "Ρυθμίσεις διεπαφής χρήστη"
},
"AdvancedMenu": {
"text2": [
"Προηγμένες",
"ρυθμίσεις"
],
"desc": "Προηγμένες ρυθμίσεις"
}
},
"menuOptions": {
"DCInCutoff": {
"text2": [
"Πηγή",
"ενέργειας"
],
"desc": "Πηγή ενέργειας. Oρισμός τάσης απενεργοποίησης. (DC 10V) (S 3.3V ανα κυψέλη, απενεργοποίηση ενεργειακού ορίου)"
},
"SleepTemperature": {
"text2": [
"Θερμοκρ.",
"ύπνου"
],
"desc": "Θερμοκρασία μύτης σε λειτ. ύπνου"
},
"SleepTimeout": {
"text2": [
"Έναρξη",
"ύπνου"
],
"desc": "Χρονικό διάστημα πρίν την ενεργοποίηση λειτουργίας ύπνου (Δ=δευτ. | Λ=λεπτά)"
},
"ShutdownTimeout": {
"text2": [
"Έναρξη",
"απενεργ."
],
"desc": "Χρονικό διάστημα πρίν την απενεργοποίηση του κολλητηριού (Λ=λεπτά)"
},
"MotionSensitivity": {
"text2": [
"Ευαισθησία",
"κίνησης"
],
"desc": "0=off | 1=λιγότερο ευαίσθητο | ... | 9=περισσότερο ευαίσθητο"
},
"TemperatureUnit": {
"text2": [
"Μονάδες",
"θερμοκρασίας"
],
"desc": "C=Κελσίου | F=Φαρενάιτ"
},
"AdvancedIdle": {
"text2": [
"Λεπτομερής",
"οθ. αδράνειας"
],
"desc": "Προβολή λεπτομερών πληροφοριών σε μικρότερη γραμματοσειρά στην οθόνη αδράνειας"
},
"DisplayRotation": {
"text2": [
"Διάταξη",
"οθόνης"
],
"desc": "R=δεξιόχειρες | L=αριστερόχειρες | Α=αυτόματο"
},
"BoostTemperature": {
"text2": [
"Θερμοκ.",
"boost"
],
"desc": "Θερμοκρασία στη \"λειτουργία boost\""
},
"AutoStart": {
"text2": [
"Ζέσταμα",
"κατά την εν."
],
"desc": "0=off | Κ=θερμ. κόλλησης | Z=αναμονή σε θερμοκρασία ύπνου μέχρι την κίνηση | Υ=αναμονή χωρίς ζέσταμα μέχρι την κίνηση"
},
"CooldownBlink": {
"text2": [
"Αναβοσβήσιμο",
"ψύξης"
],
"desc": "Αναβοσβήσιμο της ενδειξης θερμοκρασίας κατά την παύση θέρμανσης όταν η μύτη είναι ακόμα καυτή"
},
"TemperatureCalibration": {
"text2": [
"Βαθμονόμηση",
"θερμοκρασίας;"
],
"desc": "Βαθμονόμηση αρχικής θερμοκρασίας μύτης"
},
"SettingsReset": {
"text2": [
"Επαναφορά",
"εργ. ρυθμίσεων;"
],
"desc": "Επαναφορά στις προεπιλεγμένες ρυθμίσεις"
},
"VoltageCalibration": {
"text2": [
"Βαθμονόμηση",
"τάσης εισόδου;"
],
"desc": "Έναρξη βαθμονόμησης τάσης εισόδου (κράτημα για έξοδο)"
},
"AdvancedSoldering": {
"text2": [
"Λεπτομερής",
"οθ. κόλλησης"
],
"desc": "Προβολή λεπτομερών πληροφοριών σε μικρότερη γραμματοσειρά στην οθόνη κόλλησης"
},
"ScrollingSpeed": {
"text2": [
"Ταχύτητα",
"κύλισης"
],
"desc": "Ταχύτητα κύλισης κειμένου (Α=αργά | Γ=γρήγορα)"
},
"QCMaxVoltage": {
"text2": [
"Τάση",
"QC"
],
"desc": "Μέγιστη τάση QC που να ζητά το κολλητήρι από το τροφοδοτικό"
},
"PDNegTimeout": {
"text2": [
"χρονικό όριο",
"PD"
],
"desc": "Χρονικό όριο διαπραγμάτευσης PD σε βήματα 100ms για συμβατότητα με κάποιους φορτιστές QC"
},
"PowerLimit": {
"text2": [
"Ενεργειακό",
"όριο"
],
"desc": "Μέγιστη ενέργεια που μπορεί να χρησιμοποιεί το κολλητήρι (W=watt)"
},
"ReverseButtonTempChange": {
"text2": [
"Αντιστροφή",
"πλήκτρων + -"
],
"desc": "Αντιστροφή διάταξης πλήκτρων στη ρύθμιση θερμοκρασίας"
},
"TempChangeShortStep": {
"text2": [
"Αλλαγή θερμοκ.",
"στιγμιαίο"
],
"desc": "Βήμα αλλαγής θερμοκρασίας σε στιγμιαίο πάτημα πλήκτρου"
},
"TempChangeLongStep": {
"text2": [
"Αλλαγή θερμοκ.",
"παρατεταμένο"
],
"desc": "Βήμα αλλαγής θερμοκρασίας σε παρατεταμένο πάτημα πλήκτρου"
},
"PowerPulsePower": {
"text2": [
"Παλμός",
"ενέργειας"
],
"desc": "Ένταση ενέργειας παλμού διατήρησης λειτουργίας (watt)"
},
"HallEffSensitivity": {
"text2": [
"Ευαισθ. αισθ. ",
"φαιν. Hall"
],
"desc": "Ευαισθησία του αισθητήρα φαινομένου Hall για εντοπισμό αδράνειας (0=off | Χ=χαμηλή | Μ=μέτρια | Υ=υψηλή)"
},
"LockingMode": {
"text2": [
"Κλείδωμα",
"πλήκτρων"
],
"desc": "Κατά την κόλληση, κρατήστε και τα δύο πλήκτρα για κλείδωμα (A=απενεργοποίηση | B=μόνο λειτ. boost | Π=πλήρες κλείδωμα)"
},
"MinVolCell": {
"text2": [
"Ελάχιστη",
"τάση"
],
"desc": "Ελάχιστη επιτρεπτή τάση ανα κυψέλη (3 σε σειρά: 3 - 3.7V | 4-6 σε σειρά: 2.4 - 3.7V)"
},
"AnimLoop": {
"text2": [
"Επανάληψη",
"κιν. εικονιδ."
],
"desc": "Επανάληψη κίνησης εικονιδίων στο αρχικό μενού"
},
"AnimSpeed": {
"text2": [
"Ταχύτητα",
"κιν. εικονιδ."
],
"desc": "Ρυθμός κίνησης εικονιδίων στο μενού (0=off | Α=αργός | Μ=μέτριος | Γ=γρήγορος"
},
"PowerPulseWait": {
"text2": [
"Καθυστέρηση",
"παλμού ενέργ."
],
"desc": "Καθυστέρηση πριν την ενεργοποίση παλμού διατήρησης λειτουργίας (x 2.5s)"
},
"PowerPulseDuration": {
"text2": [
"Διάρκεια",
"παλμού ενέργ."
],
"desc": "Διάρκεια παλμού διατήρησης ενέργειας (x 250ms)"
},
"LanguageSwitch": {
"text2": [
"Γλώσσα",
" GR Ελληνικά"
],
"desc": "Τρέχουσα γλώσσα λογισμικού"
},
"Brightness": {
"text2": [
"Αντίθεση",
"οθόνης"
],
"desc": "Ρύθμιση φωτεινότητας οθόνης OLED"
},
"ColourInversion": {
"text2": [
"Αντιστροφή",
"χρωμάτων"
],
"desc": "Αντιστροφή χρωμάτων οθόνης OLED"
}
}
}

View File

@@ -267,7 +267,7 @@
"Sensore", "Sensore",
"Hall" "Hall"
], ],
"desc": "Regola la sensibilità alla rilevazione di supporti metallici per entrare in modalità Riposo [O: OFF; B: bassa; M: media; A: alta]" "desc": "Regola la sensibilità del sensore ad effetto Hall per entrare in modalità Riposo [O: OFF; B: bassa; M: media; A: alta]"
}, },
"LockingMode": { "LockingMode": {
"text2": [ "text2": [

View File

@@ -4,25 +4,19 @@
"fonts": ["ascii_basic", "cjk"], "fonts": ["ascii_basic", "cjk"],
"tempUnitFahrenheit": true, "tempUnitFahrenheit": true,
"messages": { "messages": {
"SettingsCalibrationDone": "校正完了",
"SettingsCalibrationWarning": "続行する前に、コテ先が室温と同じになっていることを確認してください", "SettingsCalibrationWarning": "続行する前に、コテ先が室温と同じになっていることを確認してください",
"SettingsResetWarning": "設定をリセットしますか?", "SettingsResetWarning": "設定をリセットしますか?",
"UVLOWarningString": "DC電圧が低すぎます", "UVLOWarningString": "電圧が低すぎます",
"UndervoltageString": "電圧不足", "UndervoltageString": "Undervoltage",
"InputVoltageString": "入力電圧 V: ", "InputVoltageString": "Input V: ",
"WarningTipTempString": "コテ先温度: ",
"BadTipString": "コテ先エラー",
"SleepingSimpleString": "Zzzz", "SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "スリープ中...", "SleepingAdvancedString": "Sleeping...",
"WarningSimpleString": "高温注意!", "SleepingTipAdvancedString": "Tip:",
"WarningAdvancedString": "!!! コテ先高温 !!!", "IdleTipString": "Tip:",
"SleepingTipAdvancedString": "コテ先:", "IdleSetString": " Set:",
"IdleTipString": "コテ先:", "TipDisconnectedString": "NO TIP",
"IdleSetString": " 設定:", "SolderingAdvancedPowerPrompt": "Power: ",
"TipDisconnectedString": "コテ先が接続されていません", "OffString": "オフ"
"SolderingAdvancedPowerPrompt": "電源: ",
"OffString": "オフ",
"YourGainMessage": "ゲイン:"
}, },
"messagesWarn": { "messagesWarn": {
"ResetOKMessage": "リセットOK", "ResetOKMessage": "リセットOK",

View File

@@ -146,8 +146,8 @@
"desc": "Мощность используемого источника питания" "desc": "Мощность используемого источника питания"
}, },
"PDNegTimeout": { "PDNegTimeout": {
"text2": ["PD", "timeout"], "text2": ["PD", "тайм-аут"],
"desc": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers (0: disabled)" "desc": "Power Delivery тайм-аут согласования с шагом 100 мс для совместимости с некоторыми быстрыми зарядными QC (0: отключено)"
}, },
"PowerLimit": { "PowerLimit": {
"text2": ["Предел", "мощности"], "text2": ["Предел", "мощности"],
@@ -190,24 +190,24 @@
"desc": "Скорость анимации иконок в главном меню (Милисекунды) (О=Отключено | Н=Низкий | С=Средний | В=Высокий)" "desc": "Скорость анимации иконок в главном меню (Милисекунды) (О=Отключено | Н=Низкий | С=Средний | В=Высокий)"
}, },
"PowerPulseWait": { "PowerPulseWait": {
"text2": ["Power pulse", "wait time"], "text2": ["Пауза имп.", "питания с"],
"desc": "Time to wait before triggering every keep-awake pulse (x 2,5с)" "desc": "Пауза между импульсами удерживающими источник питания от сна (x 2,5с)"
}, },
"PowerPulseDuration": { "PowerPulseDuration": {
"text2": ["Power pulse", "duration"], "text2": ["Длина имп.", "питания мс"],
"desc": "Keep-awake-pulse duration (x 250мс)" "desc": "Длина импульса удерживающего от сна источник питания (x 250мс)"
}, },
"LanguageSwitch": { "LanguageSwitch": {
"text2": ["Язык:", " RU Русский"], "text2": ["Язык:", " RU Русский"],
"desc": "" "desc": ""
}, },
"Brightness": { "Brightness": {
"text2": ["Screen", "Brightness"], "text2": ["Яркость", "экрана"],
"desc": "Adjust the contrast/brightness of the OLED screen" "desc": "Настройки контраста/яркости OLED экрана"
}, },
"ColourInversion": { "ColourInversion": {
"text2": ["Screen", "Invert"], "text2": ["Инверт", "экрана"],
"desc": "Invert the colours of the OLED screen" "desc": "Инвертировать цвета на OLED экране"
} }
} }
} }

View File

@@ -202,12 +202,12 @@
"desc": "" "desc": ""
}, },
"Brightness": { "Brightness": {
"text2": ["Screen", "Brightness"], "text2": ["Яскравість", "екрану"],
"desc": "Adjust the contrast/brightness of the OLED screen" "desc": "Налаштування контрасту/яскравості OLED екрану"
}, },
"ColourInversion": { "ColourInversion": {
"text2": ["Screen", "Invert"], "text2": ["Інверт", "екрану"],
"desc": "Invert the colours of the OLED screen" "desc": "Налаштування контрасту/яскравості OLED екрану"
} }
} }
} }

View File

@@ -4,7 +4,7 @@
"fonts": ["ascii_basic", "cjk"], "fonts": ["ascii_basic", "cjk"],
"tempUnitFahrenheit": true, "tempUnitFahrenheit": true,
"messages": { "messages": {
"SettingsCalibrationWarning": "開始温度校正之前,請先確定雞咀係處於室温!", "SettingsCalibrationWarning": "開始温度校正之前,請先確定雞咀係處於室温!",
"SettingsResetWarning": "你係咪確定要將全部設定重設到預設值?", "SettingsResetWarning": "你係咪確定要將全部設定重設到預設值?",
"UVLOWarningString": "電壓過低", "UVLOWarningString": "電壓過低",
"UndervoltageString": "Undervoltage", "UndervoltageString": "Undervoltage",
@@ -21,8 +21,8 @@
"messagesWarn": { "messagesWarn": {
"ResetOKMessage": "已重設!", "ResetOKMessage": "已重設!",
"SettingsResetMessage": "設定已被重設!", "SettingsResetMessage": "設定已被重設!",
"NoAccelerometerMessage": ["No accelerometer", "detected!"], "NoAccelerometerMessage": "未能偵測加速度計",
"NoPowerDeliveryMessage": ["No USB-PD IC", "detected!"], "NoPowerDeliveryMessage": "未能偵測PD晶片",
"LockingKeysString": "已鎖定", "LockingKeysString": "已鎖定",
"UnlockingKeysString": "已解除鎖定", "UnlockingKeysString": "已解除鎖定",
"WarningKeysLockedString": "!撳掣鎖定!", "WarningKeysLockedString": "!撳掣鎖定!",
@@ -78,7 +78,7 @@
}, },
"SleepTemperature": { "SleepTemperature": {
"text2": "待機温度", "text2": "待機温度",
"desc": "喺待機模式時嘅雞咀温度" "desc": "喺待機模式時嘅雞咀温度"
}, },
"SleepTimeout": { "SleepTimeout": {
"text2": "待機延時", "text2": "待機延時",
@@ -114,11 +114,11 @@
}, },
"CooldownBlink": { "CooldownBlink": {
"text2": "降温時閃爍", "text2": "降温時閃爍",
"desc": "停止加熱之後,當雞咀仲係熱嗰陣閃爍畫面" "desc": "停止加熱之後,當雞咀仲係熱嗰陣閃爍畫面"
}, },
"TemperatureCalibration": { "TemperatureCalibration": {
"text2": "温度校正?", "text2": "温度校正?",
"desc": "開始校正雞咀温度位移" "desc": "開始校正雞咀温度位移"
}, },
"SettingsReset": { "SettingsReset": {
"text2": "全部重設?", "text2": "全部重設?",
@@ -146,7 +146,7 @@
}, },
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制雞可用嘅最大功率 <W=watt>" "desc": "限制雞可用嘅最大功率 <W=watt>"
}, },
"ReverseButtonTempChange": { "ReverseButtonTempChange": {
"text2": "反轉加減掣", "text2": "反轉加減掣",

View File

@@ -4,27 +4,27 @@
"fonts": ["ascii_basic", "cjk"], "fonts": ["ascii_basic", "cjk"],
"tempUnitFahrenheit": true, "tempUnitFahrenheit": true,
"messages": { "messages": {
"SettingsCalibrationWarning": "开始温度校正前,请先确定铁头正处于室温!", "SettingsCalibrationWarning": "开始温度校正前,请先确定铁头正处于室温!",
"SettingsResetWarning": "你是否确定要将全部设重置为默认值?", "SettingsResetWarning": "你是否确定要将全部设重置为默认值?",
"UVLOWarningString": "电压过低", "UVLOWarningString": "电压过低",
"UndervoltageString": "Undervoltage", "UndervoltageString": "Undervoltage",
"InputVoltageString": "Input V: ", "InputVoltageString": "VIN: ",
"SleepingSimpleString": "Zzzz", "SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Sleeping...", "SleepingAdvancedString": "Zzzz...",
"SleepingTipAdvancedString": "Tip:", "SleepingTipAdvancedString": "--->",
"IdleTipString": "Tip:", "IdleTipString": "--->",
"IdleSetString": " Set:", "IdleSetString": " /",
"TipDisconnectedString": "NO TIP", "TipDisconnectedString": "<-X-",
"SolderingAdvancedPowerPrompt": "Power: ", "SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "关" "OffString": "关"
}, },
"messagesWarn": { "messagesWarn": {
"ResetOKMessage": "已重置!", "ResetOKMessage": "已重置!",
"SettingsResetMessage": "设已被重置!", "SettingsResetMessage": "设已被重置!",
"NoAccelerometerMessage": ["No accelerometer", "detected!"], "NoAccelerometerMessage": "未检测到加速度计",
"NoPowerDeliveryMessage": ["No USB-PD IC", "detected!"], "NoPowerDeliveryMessage": "未检测到PD电路",
"LockingKeysString": "已锁定", "LockingKeysString": "已锁定",
"UnlockingKeysString": "已解除锁定", "UnlockingKeysString": "已解",
"WarningKeysLockedString": "!按键锁定!", "WarningKeysLockedString": "!按键锁定!",
"WarningThermalRunaway": "加热失控" "WarningThermalRunaway": "加热失控"
}, },
@@ -63,78 +63,78 @@
"desc": "自动待机省电设置" "desc": "自动待机省电设置"
}, },
"UIMenu": { "UIMenu": {
"text2": "使用者介面", "text2": "用户界面",
"desc": "使用者介面设置" "desc": "用户界面设置"
}, },
"AdvancedMenu": { "AdvancedMenu": {
"text2": "进阶设置", "text2": "高级设置",
"desc": "进阶设置" "desc": "高级设置"
} }
}, },
"menuOptions": { "menuOptions": {
"DCInCutoff": { "DCInCutoff": {
"text2": "电源", "text2": "下限电压",
"desc": "输入电源;设置自动停机电压 <DC 10V> <S 锂电池,以每颗3.3V计算;此设置会禁用功率限制>" "desc": "设置自动停机电压 <DC=10V | S=(串)每节锂电池3.3V;此设置会禁用功率限制>"
}, },
"SleepTemperature": { "SleepTemperature": {
"text2": "待机温度", "text2": "待机温度",
"desc": "待机模式时的铁头温度" "desc": "待机模式时的铁头温度"
}, },
"SleepTimeout": { "SleepTimeout": {
"text2": "待机时", "text2": "待机时",
"desc": "自动进入待机模式前的闲置等候时间 <S=秒 | M=分钟>" "desc": "自动进入待机模式前的等候时间 <S=秒 | M=分钟>"
}, },
"ShutdownTimeout": { "ShutdownTimeout": {
"text2": "自动关机", "text2": "自动关机",
"desc": "自动关机前的闲置等候时间 <M=分钟>" "desc": "自动关机前的等候时间 <M=分钟>"
}, },
"MotionSensitivity": { "MotionSensitivity": {
"text2": "动作灵敏度", "text2": "动作灵敏度",
"desc": "0=禁用 | 1=最低灵敏度 | ... | 9=最高灵敏度" "desc": "0=禁用 | 1=最低灵敏度 | ... | 9=最高灵敏度"
}, },
"TemperatureUnit": { "TemperatureUnit": {
"text2": "温", "text2": "温度单位",
"desc": "C=摄氏 | F=华氏" "desc": "C=摄氏 | F=华氏"
}, },
"AdvancedIdle": { "AdvancedIdle": {
"text2": "详细闲置画面", "text2": "闲置画面详情",
"desc": "闲置画面以英语小字显示详细信息" "desc": "闲置画面以英语小字显示详"
}, },
"DisplayRotation": { "DisplayRotation": {
"text2": "画面方向", "text2": "显示方向",
"desc": "右=使用右手 | 左=使用左手 | 自=自动" "desc": "右=右手 | 左=左手 | 自=自动"
}, },
"BoostTemperature": { "BoostTemperature": {
"text2": "增热温度", "text2": "增热温度",
"desc": "增热模式时使用的温度" "desc": "增热模式时使用的温度"
}, },
"AutoStart": { "AutoStart": {
"text2": "自动启", "text2": "自动启",
"desc": "开机时自动启 <无=禁用 | 焊=焊接模式 | 待=待机模式 | 室=室温待机>" "desc": "开机时自动启 <无=禁用 | 焊=焊接模式 | 待=待机模式 | 室=室温待机>"
}, },
"CooldownBlink": { "CooldownBlink": {
"text2": "降温时闪", "text2": "降温时闪",
"desc": "停止加热之后,当铬铁头仍处于高温时闪烁画面" "desc": "停止加热之后,闪动温度显示提醒烙铁头仍处于高温状态"
}, },
"TemperatureCalibration": { "TemperatureCalibration": {
"text2": "温度校正?", "text2": "温度校正?",
"desc": "开始校正铁头温度移" "desc": "开始校正铁头温度移"
}, },
"SettingsReset": { "SettingsReset": {
"text2": "全部重置?", "text2": "全部重置?",
"desc": "将所有设重置为默认值" "desc": "将所有设重置为默认值"
}, },
"VoltageCalibration": { "VoltageCalibration": {
"text2": "输入电压校正?", "text2": "输入电压校正?",
"desc": "开始校正VIN输入电压 <长按以退出>" "desc": "开始校正输入电压VIN<长按以退出>"
}, },
"AdvancedSoldering": { "AdvancedSoldering": {
"text2": "详细焊接画面", "text2": "焊接画面详情",
"desc": "焊接模式画面以英语小字显示详细信息" "desc": "焊接模式画面以英语小字显示详"
}, },
"ScrollingSpeed": { "ScrollingSpeed": {
"text2": "动速度", "text2": "动速度",
"desc": "解说文字的动速度" "desc": "解说文字的动速度"
}, },
"QCMaxVoltage": { "QCMaxVoltage": {
"text2": "QC电压", "text2": "QC电压",
@@ -142,55 +142,55 @@
}, },
"PDNegTimeout": { "PDNegTimeout": {
"text2": "PD超时", "text2": "PD超时",
"desc": "设定USB PD协议交涉的超时时限为兼容某些QC电源而设 <x100ms亳秒>" "desc": "设定USB-PD协议交涉的超时时限为兼容某些QC电源而设 <x100ms亳秒>"
}, },
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制铁可用的最大功率 <W=watt瓦特>" "desc": "限制铁可用的最大功率 <W=瓦特>"
}, },
"ReverseButtonTempChange": { "ReverseButtonTempChange": {
"text2": "调换加减键", "text2": "调换加减键",
"desc": "调校温度时换加减键的方向" "desc": "调校温度时换加减键的方向"
}, },
"TempChangeShortStep": { "TempChangeShortStep": {
"text2": "温度调整", "text2": "短按温度调整",
"desc": "调校温度时短按一下的温度变幅" "desc": "调校温度时短按按键的温度变幅"
}, },
"TempChangeLongStep": { "TempChangeLongStep": {
"text2": "温度调整", "text2": "长按温度调整",
"desc": "调校温度时长按按键的温度变幅" "desc": "调校温度时长按按键的温度变幅"
}, },
"PowerPulsePower": { "PowerPulsePower": {
"text2": "电源脉冲", "text2": "电源脉冲",
"desc": "为保持电源唤醒而通电所用的功率 <watt瓦特>" "desc": "为保持电源处于唤醒状态所用的功率 <Watt瓦特>"
}, },
"HallEffSensitivity": { "HallEffSensitivity": {
"text2": "磁场灵敏度", "text2": "磁场灵敏度",
"desc": "磁场感应器用作启动待机模式的灵敏度 <关=禁用 | 低=低灵敏度 | 中=中灵敏度 | 高=高灵敏度>" "desc": "霍尔效应传感器用作启动待机模式的灵敏度 <关=禁用 | 低=低灵敏度 | 中=中灵敏度 | 高=高灵敏度>"
}, },
"LockingMode": { "LockingMode": {
"text2": "按键锁定", "text2": "按键锁定",
"desc": "焊接模式时,同时长按两个按键启用按键锁定 <无=禁用 | 增=只容许增热模式 | 全=锁定全部>" "desc": "焊接模式时,同时长按两个按键启用按键锁定 <无=禁用 | 增=只容许增热模式 | 全=完全锁定>"
}, },
"MinVolCell": { "MinVolCell": {
"text2": "最低电压", "text2": "最低电压",
"desc": "每电池的最低可用电压 <伏特> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>" "desc": "每电池的最低允许电压 <V伏特> <3S: 3.0V - 3.7V, 4/5/6S: 2.4V - 3.7V>"
}, },
"AnimLoop": { "AnimLoop": {
"text2": "动画循环", "text2": "动画循环",
"desc": "循环显示功能表图示动画" "desc": "主菜单中循环播放功能图标动画"
}, },
"AnimSpeed": { "AnimSpeed": {
"text2": "动画速度", "text2": "动画速度",
"desc": "功能表图示动画的速度 <关=不显示动画 | 慢=慢速 | 中=中速 | 快=快速>" "desc": "主菜单中功能图标动画的播放速度 <关=不显示动画 | 慢=慢速 | 中=中速 | 快=快速>"
}, },
"PowerPulseWait": { "PowerPulseWait": {
"text2": "电源脉冲间隔", "text2": "电源脉冲间隔",
"desc": "为保持电源唤醒,每次通电之间的间隔时间 <x2.5s(秒)>" "desc": "为保持电源处于唤醒状态,每次通电之间的间隔时间 <x2.5s(秒)>"
}, },
"PowerPulseDuration": { "PowerPulseDuration": {
"text2": "电源脉冲时长", "text2": "电源脉冲时长",
"desc": "为保持电源唤醒,每次通电脉冲的时间长度 <x250ms亳秒>" "desc": "为保持电源处于唤醒状态,每次通电脉冲的时间长度 <x250ms亳秒>"
}, },
"LanguageSwitch": { "LanguageSwitch": {
"text2": "语言:简体中文", "text2": "语言:简体中文",
@@ -198,11 +198,11 @@
}, },
"Brightness": { "Brightness": {
"text2": "屏幕亮度", "text2": "屏幕亮度",
"desc": "设定OLED屏幕的亮度" "desc": "调整OLED屏幕的亮度"
}, },
"ColourInversion": { "ColourInversion": {
"text2": "螢幕反轉色", "text2": "反转屏幕颜色",
"desc": "反转OLED屏幕的黑白色彩" "desc": "反转OLED黑/白屏幕"
} }
} }
} }

View File

@@ -4,7 +4,7 @@
"fonts": ["ascii_basic", "cjk"], "fonts": ["ascii_basic", "cjk"],
"tempUnitFahrenheit": true, "tempUnitFahrenheit": true,
"messages": { "messages": {
"SettingsCalibrationWarning": "開始溫度校正前,請先確定鐵頭正處於室溫!", "SettingsCalibrationWarning": "開始溫度校正前,請先確定鐵頭正處於室溫!",
"SettingsResetWarning": "你是否確定要將全部設定重設到預設值?", "SettingsResetWarning": "你是否確定要將全部設定重設到預設值?",
"UVLOWarningString": "電壓過低", "UVLOWarningString": "電壓過低",
"UndervoltageString": "Undervoltage", "UndervoltageString": "Undervoltage",
@@ -21,8 +21,8 @@
"messagesWarn": { "messagesWarn": {
"ResetOKMessage": "已重設!", "ResetOKMessage": "已重設!",
"SettingsResetMessage": "設定已被重設!", "SettingsResetMessage": "設定已被重設!",
"NoAccelerometerMessage": ["No accelerometer", "detected!"], "NoAccelerometerMessage": "未能偵測加速度計",
"NoPowerDeliveryMessage": ["No USB-PD IC", "detected!"], "NoPowerDeliveryMessage": "未能偵測PD晶片",
"LockingKeysString": "已鎖定", "LockingKeysString": "已鎖定",
"UnlockingKeysString": "已解除鎖定", "UnlockingKeysString": "已解除鎖定",
"WarningKeysLockedString": "!按鍵鎖定!", "WarningKeysLockedString": "!按鍵鎖定!",
@@ -78,7 +78,7 @@
}, },
"SleepTemperature": { "SleepTemperature": {
"text2": "待機溫度", "text2": "待機溫度",
"desc": "於待機模式時的鐵頭溫度" "desc": "於待機模式時的鐵頭溫度"
}, },
"SleepTimeout": { "SleepTimeout": {
"text2": "待機延時", "text2": "待機延時",
@@ -114,11 +114,11 @@
}, },
"CooldownBlink": { "CooldownBlink": {
"text2": "降溫時閃爍", "text2": "降溫時閃爍",
"desc": "停止加熱之後,當鐵頭仍處於高溫時閃爍畫面" "desc": "停止加熱之後,當鐵頭仍處於高溫時閃爍畫面"
}, },
"TemperatureCalibration": { "TemperatureCalibration": {
"text2": "溫度校正?", "text2": "溫度校正?",
"desc": "開始校正鐵頭溫度位移" "desc": "開始校正鐵頭溫度位移"
}, },
"SettingsReset": { "SettingsReset": {
"text2": "全部重設?", "text2": "全部重設?",
@@ -146,7 +146,7 @@
}, },
"PowerLimit": { "PowerLimit": {
"text2": "功率限制", "text2": "功率限制",
"desc": "限制鐵可用的最大功率 <W=watt瓦特>" "desc": "限制鐵可用的最大功率 <W=watt瓦特>"
}, },
"ReverseButtonTempChange": { "ReverseButtonTempChange": {
"text2": "調換加減鍵", "text2": "調換加減鍵",

View File

@@ -1,2 +1,2 @@
#!/usr/bin/env bash #!/bin/sh
docker-compose run --rm builder /bin/bash /build/ci/buildAll.sh docker-compose run --rm builder /bin/bash /build/ci/buildAll.sh

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/bin/sh
set -e set -e
set -u set -u

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/sh
set -e set -e
# Setup shell file to setup the environment on an ubuntu machine # Setup shell file to setup the environment on an ubuntu machine
sudo apt-get update && sudo apt-get install -y make bzip2 git python3 python3-pip wget dfu-util sudo apt-get update && sudo apt-get install -y make bzip2 git python3 python3-pip wget dfu-util
python3 -m pip install bdflib black flake8 python3 -m pip install bdflib black flake8
sudo mkdir -p /build sudo mkdir -p /build
cd /build cd /build
@@ -12,7 +12,7 @@ cd /build
MDPATH=${GITHUB_WORKSPACE:-/build/source/} MDPATH=${GITHUB_WORKSPACE:-/build/source/}
sudo mkdir -p /build/cache sudo mkdir -p /build/cache
cd /build/cache/ cd /build/cache/
if md5sum -c $MDPATH/ci/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2.md5; then if md5sum -c "$MDPATH"/ci/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2.md5; then
echo "Good MD5 ARM" echo "Good MD5 ARM"
else else
echo "ARM MD5 Mismatch, downloading fresh" echo "ARM MD5 Mismatch, downloading fresh"
@@ -20,7 +20,7 @@ else
sudo wget -q "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2" -O gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 sudo wget -q "https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2" -O gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
fi fi
if md5sum -c $MDPATH/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then if md5sum -c "$MDPATH"/ci/nuclei_riscv_newlibc_prebuilt_linux64_2020.08.tar.bz2.md5; then
echo "Good MD5 RISCV" echo "Good MD5 RISCV"
else else
echo "RISCV MD5 Mismatch, downloading fresh" echo "RISCV MD5 Mismatch, downloading fresh"

View File

@@ -95,8 +95,9 @@
#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define THERMAL_RUNAWAY_TIME_SEC 20 // Due to large thermal mass of the PCB being heated we need to pull this back a bit
#define THERMAL_RUNAWAY_TEMP_C 20 #define THERMAL_RUNAWAY_TIME_SEC 45
#define THERMAL_RUNAWAY_TEMP_C 3
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33)) #define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
@@ -118,25 +119,26 @@
#endif #endif
#ifdef MODEL_MHP30 #ifdef MODEL_MHP30
#define SOLDERING_TEMP 200 // Default soldering temp is 200.0 °C #define SOLDERING_TEMP 200 // Default soldering temp is 200.0 °C
#define VOLTAGE_DIV 360 // Default for MHP30 #define VOLTAGE_DIV 360 // Default for MHP30
#define PID_POWER_LIMIT 65 // Sets the max pwm power limit #define PID_POWER_LIMIT 65 // Sets the max pwm power limit
#define CALIBRATION_OFFSET 0 // the adc offset in uV - MHP compensates automagically #define CALIBRATION_OFFSET 0 // the adc offset in uV - MHP compensates automagically
#define POWER_LIMIT 65 // 65 watts default power limit #define MIN_CALIBRATION_OFFSET 0 // Min value for calibration
#define MAX_POWER_LIMIT 65 // #define POWER_LIMIT 65 // 65 watts default power limit
#define POWER_LIMIT_STEPS 1 // #define MAX_POWER_LIMIT 65 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_MHP30 // #define POWER_LIMIT_STEPS 1 //
#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_MHP30 //
#define MODEL_HAS_DCDC // Has inductor to current filter #define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate
#define PID_TIM_HZ (16) // #define MODEL_HAS_DCDC // Has inductor to current filter
#define MAX_TEMP_C 300 // Max soldering temp selectable °C #define PID_TIM_HZ (16) //
#define MAX_TEMP_F 570 // Max soldering temp selectable °F #define MAX_TEMP_C 350 // Max soldering temp selectable °C
#define MIN_TEMP_C 10 // Min soldering temp selectable °C #define MAX_TEMP_F 660 // Max soldering temp selectable °F
#define MIN_TEMP_F 60 // Min soldering temp selectable °F #define MIN_TEMP_C 10 // Min soldering temp selectable °C
#define MIN_BOOST_TEMP_C 150 // The min settable temp for boost mode °C #define MIN_TEMP_F 60 // Min soldering temp selectable °F
#define MIN_BOOST_TEMP_F 300 // The min settable temp for boost mode °F #define MIN_BOOST_TEMP_C 150 // The min settable temp for boost mode °C
#define NO_DISPLAY_ROTATE // Disable OLED rotation by accel #define MIN_BOOST_TEMP_F 300 // The min settable temp for boost mode °F
#define SLEW_LIMIT 50 // Limit to 3.0 Watts per 64ms pid loop update rate slew rate #define NO_DISPLAY_ROTATE // Disable OLED rotation by accel
#define SLEW_LIMIT 50 // Limit to 3.0 Watts per 64ms pid loop update rate slew rate
#define ACCEL_MSA #define ACCEL_MSA
#define POW_PD 1 #define POW_PD 1
#define TEMP_NTC #define TEMP_NTC

View File

@@ -125,23 +125,24 @@
#endif #endif
#ifdef MODEL_TS100 #ifdef MODEL_TS100
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C #define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic #define VOLTAGE_DIV 467 // 467 - Default divider from schematic
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV #define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit #define MIN_CALIBRATION_OFFSET 100 // Min value for calibration
#define POWER_LIMIT 0 // 0 watts default limit #define PID_POWER_LIMIT 70 // Sets the max pwm power limit
#define MAX_POWER_LIMIT 70 // #define POWER_LIMIT 0 // 0 watts default limit
#define POWER_LIMIT_STEPS 5 // #define MAX_POWER_LIMIT 70 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 // #define POWER_LIMIT_STEPS 5 //
#define TEMP_uV_LOOKUP_HAKKO // #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100 //
#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate #define TEMP_uV_LOOKUP_HAKKO //
#define PID_TIM_HZ (8) // Tick rate of the PID loop #define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate
#define MAX_TEMP_C 450 // Max soldering temp selectable °C #define PID_TIM_HZ (8) // Tick rate of the PID loop
#define MAX_TEMP_F 850 // Max soldering temp selectable °F #define MAX_TEMP_C 450 // Max soldering temp selectable °C
#define MIN_TEMP_C 10 // Min soldering temp selectable °C #define MAX_TEMP_F 850 // Max soldering temp selectable °F
#define MIN_TEMP_F 60 // Min soldering temp selectable °F #define MIN_TEMP_C 10 // Min soldering temp selectable °C
#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C #define MIN_TEMP_F 60 // Min soldering temp selectable °F
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F #define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F
#define POW_DC #define POW_DC
#define ACCEL_MMA #define ACCEL_MMA
#define POW_PD 0 #define POW_PD 0
@@ -150,23 +151,24 @@
#endif #endif
#ifdef MODEL_TS80 #ifdef MODEL_TS80
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C #define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
#define VOLTAGE_DIV 780 // Default divider from schematic #define VOLTAGE_DIV 780 // Default divider from schematic
#define PID_POWER_LIMIT 24 // Sets the max pwm power limit #define PID_POWER_LIMIT 24 // Sets the max pwm power limit
#define CALIBRATION_OFFSET 900 // the adc offset in uV #define CALIBRATION_OFFSET 900 // the adc offset in uV
#define POWER_LIMIT 24 // 24 watts default power limit #define MIN_CALIBRATION_OFFSET 100 // Min value for calibration
#define MAX_POWER_LIMIT 40 // #define POWER_LIMIT 24 // 24 watts default power limit
#define POWER_LIMIT_STEPS 2 // #define MAX_POWER_LIMIT 40 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 // #define POWER_LIMIT_STEPS 2 //
#define TEMP_uV_LOOKUP_TS80 // #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 //
#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate #define TEMP_uV_LOOKUP_TS80 //
#define PID_TIM_HZ (8) // Tick rate of the PID loop #define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate
#define MAX_TEMP_C 450 // Max soldering temp selectable °C #define PID_TIM_HZ (8) // Tick rate of the PID loop
#define MAX_TEMP_F 850 // Max soldering temp selectable °F #define MAX_TEMP_C 450 // Max soldering temp selectable °C
#define MIN_TEMP_C 10 // Min soldering temp selectable °C #define MAX_TEMP_F 850 // Max soldering temp selectable °F
#define MIN_TEMP_F 60 // Min soldering temp selectable °F #define MIN_TEMP_C 10 // Min soldering temp selectable °C
#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C #define MIN_TEMP_F 60 // Min soldering temp selectable °F
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F #define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F
#define ACCEL_LIS #define ACCEL_LIS
#define POW_QC #define POW_QC
#define POW_PD 0 #define POW_PD 0
@@ -176,23 +178,24 @@
#endif #endif
#ifdef MODEL_TS80P #ifdef MODEL_TS80P
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C #define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
#define VOLTAGE_DIV 650 // Default for TS80P with slightly different resistors #define VOLTAGE_DIV 650 // Default for TS80P with slightly different resistors
#define PID_POWER_LIMIT 35 // Sets the max pwm power limit #define PID_POWER_LIMIT 35 // Sets the max pwm power limit
#define CALIBRATION_OFFSET 1500 // the adc offset in uV #define CALIBRATION_OFFSET 1500 // the adc offset in uV
#define POWER_LIMIT 30 // 30 watts default power limit #define MIN_CALIBRATION_OFFSET 100 // Min value for calibration
#define MAX_POWER_LIMIT 40 // #define POWER_LIMIT 30 // 30 watts default power limit
#define POWER_LIMIT_STEPS 2 // #define MAX_POWER_LIMIT 40 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 // #define POWER_LIMIT_STEPS 2 //
#define TEMP_uV_LOOKUP_TS80 // #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80 //
#define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate #define TEMP_uV_LOOKUP_TS80 //
#define PID_TIM_HZ (8) // Tick rate of the PID loop #define USB_PD_VMAX 12 // Maximum voltage for PD to negotiate
#define MAX_TEMP_C 450 // Max soldering temp selectable °C #define PID_TIM_HZ (8) // Tick rate of the PID loop
#define MAX_TEMP_F 850 // Max soldering temp selectable °F #define MAX_TEMP_C 450 // Max soldering temp selectable °C
#define MIN_TEMP_C 10 // Min soldering temp selectable °C #define MAX_TEMP_F 850 // Max soldering temp selectable °F
#define MIN_TEMP_F 60 // Min soldering temp selectable °F #define MIN_TEMP_C 10 // Min soldering temp selectable °C
#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C #define MIN_TEMP_F 60 // Min soldering temp selectable °F
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F #define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F
#define ACCEL_LIS #define ACCEL_LIS
#define ACCEL_MSA #define ACCEL_MSA
#define POW_PD 1 #define POW_PD 1

View File

@@ -114,23 +114,24 @@
#endif #endif
#ifdef MODEL_Pinecil #ifdef MODEL_Pinecil
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C #define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic #define VOLTAGE_DIV 467 // 467 - Default divider from schematic
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV #define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit #define MIN_CALIBRATION_OFFSET 100 // Min value for calibration
#define POWER_LIMIT 0 // 0 watts default limit #define PID_POWER_LIMIT 70 // Sets the max pwm power limit
#define MAX_POWER_LIMIT 70 // #define POWER_LIMIT 0 // 0 watts default limit
#define POWER_LIMIT_STEPS 5 // #define MAX_POWER_LIMIT 70 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_PINECIL // Uses TS100 resistors #define POWER_LIMIT_STEPS 5 //
#define TEMP_uV_LOOKUP_HAKKO // Use Hakko lookup table #define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_PINECIL // Uses TS100 resistors
#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate #define TEMP_uV_LOOKUP_HAKKO // Use Hakko lookup table
#define PID_TIM_HZ (8) // Tick rate of the PID loop #define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate
#define MAX_TEMP_C 450 // Max soldering temp selectable °C #define PID_TIM_HZ (8) // Tick rate of the PID loop
#define MAX_TEMP_F 850 // Max soldering temp selectable °F #define MAX_TEMP_C 450 // Max soldering temp selectable °C
#define MIN_TEMP_C 10 // Min soldering temp selectable °C #define MAX_TEMP_F 850 // Max soldering temp selectable °F
#define MIN_TEMP_F 60 // Min soldering temp selectable °F #define MIN_TEMP_C 10 // Min soldering temp selectable °C
#define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C #define MIN_TEMP_F 60 // Min soldering temp selectable °F
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F #define MIN_BOOST_TEMP_C 250 // The min settable temp for boost mode °C
#define MIN_BOOST_TEMP_F 480 // The min settable temp for boost mode °F
#define POW_PD 1 #define POW_PD 1
#define POW_QC 1 #define POW_QC 1

View File

@@ -124,26 +124,77 @@ const uint8_t WarningBlock24[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0xF1, 0xF1, 0xF1, 0x02, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x0C, 0x02, 0xF1, 0xF1, 0xF1, 0x02, 0x0C, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xB0, 0x8C, 0x83, 0x80, 0x80, 0x80, 0x80, 0xB3, 0xB3, 0xB3, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8C, 0xB0, 0xC0, 0x00, 0x00}; 0x00, 0x00, 0x00, 0xC0, 0xB0, 0x8C, 0x83, 0x80, 0x80, 0x80, 0x80, 0xB3, 0xB3, 0xB3, 0x80, 0x80, 0x80, 0x80, 0x83, 0x8C, 0xB0, 0xC0, 0x00, 0x00};
#if defined(MODEL_TS100) + defined(MODEL_Pinecil) >= 1
const uint8_t idleScreenBG[] = { const uint8_t idleScreenBG[] = {
// width = 84 // width = 84
// height = 16 // height = 16
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0xbd, 0x81, 0x01, 0x01, 0xfd, 0x01, 0x01, 0x71, 0x55, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0xbd, 0x81, 0x01, 0x01, 0xfd, 0x01, 0x01, 0x71, 0x55, 0x71,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0x25, 0x19, 0x01, 0xc1, 0x25, 0x19, 0x01, 0x81, 0x49, 0x31, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x25, 0xc1, 0x01, 0x19, 0x25, 0xc1, 0x01, 0x31, 0x49, 0x81, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0xba, 0x83, 0x80, 0x8e, 0xaa, 0x8e, 0x80, 0x80, 0xbf, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0xba, 0x83, 0x80, 0x8e, 0xaa, 0x8e, 0x80, 0x80, 0xbf, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x44, 0x54, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x22, 0x4a, 0x46, 0x8a, 0xa6, 0x8a, 0xa6, 0x8a, 0xa6,
0x94, 0x94, 0x94, 0x94, 0x94, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0x94, 0x95, 0x88, 0x88, 0x89, 0x8a, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00}; 0x8a, 0xa6, 0x8e, 0xa6, 0x8e, 0xa6, 0x8e, 0xa6, 0x8e, 0xbe, 0x80, 0xae, 0x94, 0x8c, 0x94, 0x88, 0x8a, 0x89, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00};
const uint8_t disconnectedTipIcon[] = { const uint8_t disconnectedTipIcon[] = {
// //
// 41 x 16 // 41 x 16
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x18, 0xb0, 0x60, 0xc0, 0x80, 0xc0, 0x60, 0xb0, 0x18, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0x9c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x20, 0x70, 0x38, 0x1c, 0xcc, 0x40,
0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x50, 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x60, 0xe0, 0x01, 0x01, 0x01, 0x02, 0x01, 0x02, 0x05, 0x00, 0x07, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04,
0x31, 0x38, 0x1c, 0x0e, 0x04, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x39, 0x30, 0x01, 0x03, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x04, 0x09, 0x0f};
const uint8_t disconnectedTipIconFlip[] = {
// //
0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x02, 0x30, 0x1a, 0x0c, 0x07, 0x03, 0x07, 0x0c, 0x1a, 0x30, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, // 41 x 16
0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x15, 0x00 0xe0, 0x60, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x40, 0xcc, 0x1c, 0x38, 0x70, 0x20, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x9c, 0xcc, 0xc0, 0xc0,
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x04, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x00, 0x03, 0x01, 0x30,
0x39, 0x1c, 0x0e, 0x07, 0x03, 0x01, 0x04, 0x0e, 0x1c, 0x38, 0x31, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x07, 0x00, 0x05, 0x02, 0x01, 0x02, 0x01, 0x01, 0x01};
#endif
#if defined(MODEL_TS80) + defined(MODEL_TS80P) >= 1
const uint8_t idleScreenBG[] = {
// width = 84
// height = 16
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0xbd, 0x81, 0x01, 0x01, 0xfd, 0x01, 0x01, 0x71, 0x55, 0x71,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x25, 0xc1, 0x01, 0x19, 0x25, 0xc1, 0x01, 0x31, 0x49, 0x81, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0xba, 0x83, 0x80, 0x8e, 0xaa, 0x8e, 0x80, 0x80, 0xbf, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x44, 0x4c, 0x94, 0x8c, 0x94, 0x8c, 0x94, 0x8c,
0x94, 0x8c, 0x94, 0x80, 0x9c, 0x8a, 0xa6, 0x8a, 0xa6, 0x8e, 0xa6, 0x9c, 0x81, 0x94, 0x88, 0x88, 0x8a, 0x81, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00};
const uint8_t disconnectedTipIcon[] = {
// //
}; // 41 x 16
0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xc0, 0xc0, 0xc0, 0x40, 0xc0, 0x40, 0x80, 0x00, 0x80, 0x80, 0x8c, 0x9c, 0x38, 0x70, 0xe0, 0xc0, 0x80, 0x20, 0x70, 0x38, 0x9c, 0x8c,
0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0x40, 0xe0, 0x60, 0xe0, 0x01, 0x01, 0x01, 0x02, 0x00, 0x03, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0x03, 0x00, 0x02,
0x01, 0x32, 0x39, 0x1c, 0x0e, 0x04, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x31, 0x02, 0x01, 0x02, 0x00, 0x02, 0x01, 0x04, 0x01, 0x04, 0x01, 0x0a, 0x01, 0x0f};
const uint8_t disconnectedTipIconFlip[] = {
//
// 41 x 16
0xe0, 0x60, 0xe0, 0x40, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x8c, 0x9c, 0x38, 0x70, 0x20, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x9c, 0x8c, 0x80, 0x80, 0x00,
0x80, 0x40, 0xc0, 0x40, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x0a, 0x01, 0x04, 0x01, 0x04, 0x01, 0x02, 0x00, 0x02, 0x01, 0x02, 0x31, 0x38,
0x1c, 0x0e, 0x07, 0x03, 0x01, 0x04, 0x0e, 0x1c, 0x39, 0x32, 0x01, 0x02, 0x00, 0x03, 0x01, 0x04, 0x01, 0x04, 0x01, 0x04, 0x03, 0x00, 0x02, 0x01, 0x01, 0x01};
#endif
#ifdef MODEL_MHP30
const uint8_t idleScreenBG[] = {
// width = 84
// height = 16
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81, 0xbd, 0x81, 0x01, 0x01, 0xfd, 0x01, 0x01, 0x71, 0x55, 0x71,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x81,
0x81, 0x99, 0xa5, 0x01, 0xc1, 0xd9, 0xe5, 0x21, 0xe1, 0xf1, 0x89, 0x41, 0xc1, 0x81, 0x81, 0x81, 0x81, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0xba, 0x83, 0x80, 0x8e, 0xaa, 0x8e, 0x80, 0x80, 0xbf, 0x80,
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x40, 0x40, 0x86, 0x89, 0x85, 0x91, 0x8b, 0x93,
0x8b, 0xa3, 0x97, 0xa7, 0x97, 0xa7, 0x8f, 0xaf, 0x87, 0x97, 0xa5, 0x86, 0x93, 0x8b, 0x93, 0x83, 0x89, 0xa5, 0x89, 0x46, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00};
const uint8_t disconnectedTipIcon[] = {
//
// 41 x 16
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0xa0, 0x30, 0x70, 0x70, 0x60, 0x4c, 0x9c, 0x38, 0x70, 0xe4, 0xcc, 0x88, 0x20, 0x70, 0x38, 0x9c, 0x4c, 0x60,
0x70, 0x60, 0x20, 0xa0, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x29, 0x10, 0x22, 0x01,
0x32, 0x38, 0x1c, 0x0e, 0x04, 0x01, 0x03, 0x07, 0x0e, 0x1c, 0x38, 0x30, 0x01, 0x12, 0x29, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const uint8_t disconnectedTipIconFlip[] = {
//
// 41 x 16
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0xa0, 0x20, 0x60, 0x70, 0x60, 0x4c, 0x9c, 0x38, 0x70, 0x20, 0x88, 0xcc, 0xe4, 0x70, 0x38, 0x9c, 0x4c, 0x60, 0x70,
0x70, 0x30, 0xa0, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x29, 0x12, 0x01, 0x30,
0x38, 0x1c, 0x0e, 0x07, 0x03, 0x01, 0x04, 0x0e, 0x1c, 0x38, 0x32, 0x01, 0x22, 0x10, 0x29, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
#endif
// 16 x 16 // 16 x 16
const uint8_t brightnessIcon[] const uint8_t brightnessIcon[]

View File

@@ -16,9 +16,9 @@
bool sanitiseSettings(); bool sanitiseSettings();
#ifdef POW_QC_20V #ifdef POW_QC_20V
#define QC_VOLTAGE_MAX 222 #define QC_VOLTAGE_MAX 220
#else #else
#define QC_VOLTAGE_MAX 142 #define QC_VOLTAGE_MAX 140
#endif #endif
/* /*
@@ -26,6 +26,7 @@ bool sanitiseSettings();
* flash in uint16_t chunks * flash in uint16_t chunks
*/ */
typedef struct { typedef struct {
uint16_t versionMarker;
uint16_t length; // Length of valid bytes following uint16_t length; // Length of valid bytes following
uint16_t settingsValues[SettingsOptionsLength]; uint16_t settingsValues[SettingsOptionsLength];
// used to make this nicely "good enough" aligned to 32 butes to make driver code trivial // used to make this nicely "good enough" aligned to 32 butes to make driver code trivial
@@ -41,48 +42,48 @@ volatile systemSettingsType systemSettings;
// For every setting we need to store the min/max/increment values // For every setting we need to store the min/max/increment values
typedef struct { typedef struct {
const uint16_t min; // Inclusive minimum value const uint16_t min; // Inclusive minimum value
const uint16_t max; // Exclusive maximum value const uint16_t max; // Inclusive maximum value
const uint16_t increment; // Standard increment const uint16_t increment; // Standard increment
const uint16_t defaultValue; // Default vaue after reset const uint16_t defaultValue; // Default vaue after reset
} SettingConstants; } SettingConstants;
static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = { static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOptionsLength] = {
//{min,max,increment,default} //{min,max,increment,default}
{10, 580, 5, 320}, // SolderingTemp {MIN_TEMP_C, MAX_TEMP_F, 5, 320}, // SolderingTemp
{10, 580, 5, 150}, // SleepTemp {MIN_TEMP_C, MAX_TEMP_F, 5, 150}, // SleepTemp
{0, 16, 1, SLEEP_TIME}, // SleepTime {0, 15, 1, SLEEP_TIME}, // SleepTime
{0, 5, 1, CUT_OUT_SETTING}, // MinDCVoltageCells {0, 4, 1, CUT_OUT_SETTING}, // MinDCVoltageCells
{24, 38, 1, RECOM_VOL_CELL}, // MinVoltageCells {24, 38, 1, RECOM_VOL_CELL}, // MinVoltageCells
{90, QC_VOLTAGE_MAX, 2, 90}, // QCIdealVoltage {90, QC_VOLTAGE_MAX, 2, 90}, // QCIdealVoltage
{0, 3, 1, ORIENTATION_MODE}, // OrientationMode {0, 2, 1, ORIENTATION_MODE}, // OrientationMode
{0, 10, 1, SENSITIVITY}, // Sensitivity {0, 9, 1, SENSITIVITY}, // Sensitivity
{0, 2, 1, ANIMATION_LOOP}, // AnimationLoop {0, 1, 1, ANIMATION_LOOP}, // AnimationLoop
{0, settingOffSpeed_t::MAX_VALUE, 1, ANIMATION_SPEED}, // AnimationSpeed {0, settingOffSpeed_t::MAX_VALUE - 1, 1, ANIMATION_SPEED}, // AnimationSpeed
{0, 4, 1, AUTO_START_MODE}, // AutoStartMode {0, 3, 1, AUTO_START_MODE}, // AutoStartMode
{0, 61, 1, SHUTDOWN_TIME}, // ShutdownTime {0, 60, 1, SHUTDOWN_TIME}, // ShutdownTime
{0, 2, 1, COOLING_TEMP_BLINK}, // CoolingTempBlink {0, 1, 1, COOLING_TEMP_BLINK}, // CoolingTempBlink
{0, 2, 1, DETAILED_IDLE}, // DetailedIDLE {0, 1, 1, DETAILED_IDLE}, // DetailedIDLE
{0, 2, 1, DETAILED_SOLDERING}, // DetailedSoldering {0, 1, 1, DETAILED_SOLDERING}, // DetailedSoldering
{0, 2, 1, TEMPERATURE_INF}, // TemperatureInF {0, 1, 1, TEMPERATURE_INF}, // TemperatureInF
{0, 2, 1, DESCRIPTION_SCROLL_SPEED}, // DescriptionScrollSpeed {0, 1, 1, DESCRIPTION_SCROLL_SPEED}, // DescriptionScrollSpeed
{0, 3, 1, LOCKING_MODE}, // LockingMode {0, 2, 1, LOCKING_MODE}, // LockingMode
{0, 100, 1, POWER_PULSE_DEFAULT}, // KeepAwakePulse {0, 99, 1, POWER_PULSE_DEFAULT}, // KeepAwakePulse
{1, POWER_PULSE_WAIT_MAX, 1, POWER_PULSE_WAIT_DEFAULT}, // KeepAwakePulseWait {1, POWER_PULSE_WAIT_MAX, 1, POWER_PULSE_WAIT_DEFAULT}, // KeepAwakePulseWait
{1, POWER_PULSE_DURATION_MAX, 1, POWER_PULSE_DURATION_DEFAULT}, // KeepAwakePulseDuration {1, POWER_PULSE_DURATION_MAX, 1, POWER_PULSE_DURATION_DEFAULT}, // KeepAwakePulseDuration
{360, 900, 1, VOLTAGE_DIV}, // VoltageDiv {360, 900, 1, VOLTAGE_DIV}, // VoltageDiv
{0, MAX_TEMP_F, 10, BOOST_TEMP}, // BoostTemp {MIN_TEMP_C, MAX_TEMP_F, 10, BOOST_TEMP}, // BoostTemp
{100, 2500, 1, CALIBRATION_OFFSET}, // CalibrationOffset {MIN_CALIBRATION_OFFSET, 2500, 1, CALIBRATION_OFFSET}, // CalibrationOffset
{0, MAX_POWER_LIMIT, POWER_LIMIT_STEPS, POWER_LIMIT}, // PowerLimit {0, MAX_POWER_LIMIT, POWER_LIMIT_STEPS, POWER_LIMIT}, // PowerLimit
{0, 2, 1, REVERSE_BUTTON_TEMP_CHANGE}, // ReverseButtonTempChangeEnabled {0, 1, 1, REVERSE_BUTTON_TEMP_CHANGE}, // ReverseButtonTempChangeEnabled
{5, TEMP_CHANGE_LONG_STEP_MAX, 5, TEMP_CHANGE_LONG_STEP}, // TempChangeLongStep {5, TEMP_CHANGE_LONG_STEP_MAX, 5, TEMP_CHANGE_LONG_STEP}, // TempChangeLongStep
{1, TEMP_CHANGE_SHORT_STEP_MAX, 1, TEMP_CHANGE_SHORT_STEP}, // TempChangeShortStep {1, TEMP_CHANGE_SHORT_STEP_MAX, 1, TEMP_CHANGE_SHORT_STEP}, // TempChangeShortStep
{0, 4, 1, 1}, // HallEffectSensitivity {0, 3, 1, 1}, // HallEffectSensitivity
{0, 10, 1, 0}, // AccelMissingWarningCounter {0, 9, 1, 0}, // AccelMissingWarningCounter
{0, 10, 1, 0}, // PDMissingWarningCounter {0, 9, 1, 0}, // PDMissingWarningCounter
{0, 0xFFFF, 0, 41431 /*EN*/}, // UILanguage {0, 0xFFFF, 0, 41431 /*EN*/}, // UILanguage
{0, 51, 1, 0}, // PDNegTimeout {0, 50, 1, 20}, // PDNegTimeout
{0, 2, 1, 0}, // OLEDInversion {0, 1, 1, 0}, // OLEDInversion
{0, 100, 11, 33}, // OLEDBrightness {0, 99, 11, 33}, // OLEDBrightness
}; };
static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength)); static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength));
@@ -100,6 +101,11 @@ bool sanitiseSettings() {
// For all settings, need to ensure settings are in a valid range // For all settings, need to ensure settings are in a valid range
// First for any not know about due to array growth, reset them and update the length value // First for any not know about due to array growth, reset them and update the length value
bool dirty = false; bool dirty = false;
if (systemSettings.versionMarker != 0x55AA) {
memset((void *)&systemSettings, 0xFF, sizeof(systemSettings));
systemSettings.versionMarker = 0x55AA;
dirty = true;
}
if (systemSettings.padding != 0xFFFFFFFF) { if (systemSettings.padding != 0xFFFFFFFF) {
systemSettings.padding = 0xFFFFFFFF; // Force padding to 0xFFFFFFFF so that rolling forwards / back should be easier systemSettings.padding = 0xFFFFFFFF; // Force padding to 0xFFFFFFFF so that rolling forwards / back should be easier
dirty = true; dirty = true;
@@ -115,8 +121,7 @@ bool sanitiseSettings() {
// Check min max for all settings, if outside the range, move to default // Check min max for all settings, if outside the range, move to default
if (systemSettings.settingsValues[i] < settingsConstants[i].min || systemSettings.settingsValues[i] > settingsConstants[i].max) { if (systemSettings.settingsValues[i] < settingsConstants[i].min || systemSettings.settingsValues[i] > settingsConstants[i].max) {
systemSettings.settingsValues[i] = settingsConstants[i].defaultValue; systemSettings.settingsValues[i] = settingsConstants[i].defaultValue;
dirty = true;
dirty = true;
} }
} }
if (dirty) { if (dirty) {
@@ -133,34 +138,45 @@ void resetSettings() {
void setSettingValue(const enum SettingsOptions option, const uint16_t newValue) { void setSettingValue(const enum SettingsOptions option, const uint16_t newValue) {
const auto constants = settingsConstants[(int)option]; const auto constants = settingsConstants[(int)option];
systemSettings.settingsValues[(int)option] = newValue; systemSettings.settingsValues[(int)option] = newValue;
// If less than min, constrain
if (systemSettings.settingsValues[(int)option] < constants.min) { if (systemSettings.settingsValues[(int)option] < constants.min) {
systemSettings.settingsValues[(int)option] = constants.min; systemSettings.settingsValues[(int)option] = constants.min;
} }
// If hit max, constrain // If hit max, constrain
if (systemSettings.settingsValues[(int)option] >= constants.max) { if (systemSettings.settingsValues[(int)option] > constants.max) {
systemSettings.settingsValues[(int)option] = constants.max - 1; systemSettings.settingsValues[(int)option] = constants.max;
} }
} }
// Lookup wrapper for ease of use (with typing)
uint16_t getSettingValue(const enum SettingsOptions option) { return systemSettings.settingsValues[(int)option]; } uint16_t getSettingValue(const enum SettingsOptions option) { return systemSettings.settingsValues[(int)option]; }
// Increment by the step size to the next value. If past the end wrap to the minimum
// Returns true if we are on the _last_ value
bool nextSettingValue(const enum SettingsOptions option) { bool nextSettingValue(const enum SettingsOptions option) {
const auto constants = settingsConstants[(int)option]; const auto constants = settingsConstants[(int)option];
if (systemSettings.settingsValues[(int)option] >= (constants.max - constants.increment)) { if (systemSettings.settingsValues[(int)option] == (constants.max)) {
// Already at max, wrap to the start
systemSettings.settingsValues[(int)option] = constants.min; systemSettings.settingsValues[(int)option] = constants.min;
} else if (systemSettings.settingsValues[(int)option] >= (constants.max - constants.increment)) {
// If within one increment of the end, constrain to the end
systemSettings.settingsValues[(int)option] = constants.max;
} else { } else {
// Otherwise increment
systemSettings.settingsValues[(int)option] += constants.increment; systemSettings.settingsValues[(int)option] += constants.increment;
} }
return (constants.max - systemSettings.settingsValues[(int)option]) <= constants.increment; // Return if we are at the max
return constants.max == systemSettings.settingsValues[(int)option];
} }
// Step backwards on the settings item
// Return true if we are at the end (min)
bool prevSettingValue(const enum SettingsOptions option) { bool prevSettingValue(const enum SettingsOptions option) {
const auto constants = settingsConstants[(int)option]; const auto constants = settingsConstants[(int)option];
int value = systemSettings.settingsValues[(int)option]; int value = systemSettings.settingsValues[(int)option];
if (value <= constants.min) { if (value <= constants.min) {
value = constants.max; value = constants.max;
} else {
value -= constants.increment;
} }
value -= constants.increment;
systemSettings.settingsValues[(int)option] = value; systemSettings.settingsValues[(int)option] = value;
return systemSettings.settingsValues[(int)option] == constants.min; return systemSettings.settingsValues[(int)option] == constants.min;
} }

View File

@@ -18,6 +18,7 @@ void gui_Menu(const menuitem *menu);
#ifdef POW_DC #ifdef POW_DC
static void settings_displayInputVRange(void); static void settings_displayInputVRange(void);
static bool settings_showInputVOptions(void);
static void settings_displayInputMinVRange(void); static void settings_displayInputMinVRange(void);
#endif #endif
#ifdef POW_QC #ifdef POW_QC
@@ -27,12 +28,13 @@ static void settings_displayQCInputV(void);
static void settings_displayPDNegTimeout(void); static void settings_displayPDNegTimeout(void);
#endif #endif
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
static void settings_displaySensitivity(void);
static bool settings_showSleepOptions(void);
static bool settings_setSleepTemp(void); static bool settings_setSleepTemp(void);
static void settings_displaySleepTemp(void); static void settings_displaySleepTemp(void);
static void settings_displaySleepTime(void); static void settings_displaySleepTime(void);
#endif
static void settings_displayShutdownTime(void); static void settings_displayShutdownTime(void);
static void settings_displaySensitivity(void); #endif
static bool settings_setTempF(void); static bool settings_setTempF(void);
static void settings_displayTempF(void); static void settings_displayTempF(void);
static void settings_displayAdvancedSolderingScreens(void); static void settings_displayAdvancedSolderingScreens(void);
@@ -59,6 +61,7 @@ static void settings_displayReverseButtonTempChangeEnabled(void);
static void settings_displayTempChangeShortStep(void); static void settings_displayTempChangeShortStep(void);
static void settings_displayTempChangeLongStep(void); static void settings_displayTempChangeLongStep(void);
static void settings_displayPowerPulse(void); static void settings_displayPowerPulse(void);
static bool settings_displayAnimationOptions(void);
static void settings_displayAnimationSpeed(void); static void settings_displayAnimationSpeed(void);
static void settings_displayAnimationLoop(void); static void settings_displayAnimationLoop(void);
static void settings_displayPowerPulseWait(void); static void settings_displayPowerPulseWait(void);
@@ -153,8 +156,8 @@ const menuitem powerMenu[] = {
* Power Source * Power Source
*/ */
#ifdef POW_DC #ifdef POW_DC
{SETTINGS_DESC(SettingsItemIndex::DCInCutoff), nullptr, settings_displayInputVRange, nullptr, SettingsOptions::MinDCVoltageCells}, /*Voltage input*/ {SETTINGS_DESC(SettingsItemIndex::DCInCutoff), nullptr, settings_displayInputVRange, nullptr, SettingsOptions::MinDCVoltageCells}, /*Voltage input*/
{SETTINGS_DESC(SettingsItemIndex::MinVolCell), nullptr, settings_displayInputMinVRange, nullptr, SettingsOptions::MinVoltageCells}, /*Minimum voltage input*/ {SETTINGS_DESC(SettingsItemIndex::MinVolCell), nullptr, settings_displayInputMinVRange, settings_showInputVOptions, SettingsOptions::MinVoltageCells}, /*Minimum voltage input*/
#endif #endif
#ifdef POW_QC #ifdef POW_QC
{SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), nullptr, settings_displayQCInputV, nullptr, SettingsOptions::QCIdealVoltage}, /*Voltage input*/ {SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), nullptr, settings_displayQCInputV, nullptr, SettingsOptions::QCIdealVoltage}, /*Voltage input*/
@@ -199,28 +202,28 @@ const menuitem UIMenu[] = {
{SETTINGS_DESC(SettingsItemIndex::CooldownBlink), nullptr, settings_displayCoolingBlinkEnabled, nullptr, SettingsOptions::CoolingTempBlink}, /*Cooling blink warning*/ {SETTINGS_DESC(SettingsItemIndex::CooldownBlink), nullptr, settings_displayCoolingBlinkEnabled, nullptr, SettingsOptions::CoolingTempBlink}, /*Cooling blink warning*/
{SETTINGS_DESC(SettingsItemIndex::ScrollingSpeed), nullptr, settings_displayScrollSpeed, nullptr, SettingsOptions::DescriptionScrollSpeed}, /*Scroll Speed for descriptions*/ {SETTINGS_DESC(SettingsItemIndex::ScrollingSpeed), nullptr, settings_displayScrollSpeed, nullptr, SettingsOptions::DescriptionScrollSpeed}, /*Scroll Speed for descriptions*/
{SETTINGS_DESC(SettingsItemIndex::ReverseButtonTempChange), nullptr, settings_displayReverseButtonTempChangeEnabled, nullptr, {SETTINGS_DESC(SettingsItemIndex::ReverseButtonTempChange), nullptr, settings_displayReverseButtonTempChangeEnabled, nullptr,
SettingsOptions::ReverseButtonTempChangeEnabled}, /* Reverse Temp change buttons + - */ SettingsOptions::ReverseButtonTempChangeEnabled}, /* Reverse Temp change buttons + - */
{SETTINGS_DESC(SettingsItemIndex::AnimSpeed), nullptr, settings_displayAnimationSpeed, nullptr, SettingsOptions::AnimationSpeed}, /*Animation Speed adjustment */ {SETTINGS_DESC(SettingsItemIndex::AnimSpeed), nullptr, settings_displayAnimationSpeed, nullptr, SettingsOptions::AnimationSpeed}, /*Animation Speed adjustment */
{SETTINGS_DESC(SettingsItemIndex::AnimLoop), nullptr, settings_displayAnimationLoop, nullptr, SettingsOptions::AnimationLoop}, /*Animation Loop switch */ {SETTINGS_DESC(SettingsItemIndex::AnimLoop), nullptr, settings_displayAnimationLoop, settings_displayAnimationOptions, SettingsOptions::AnimationLoop}, /*Animation Loop switch */
{SETTINGS_DESC(SettingsItemIndex::Brightness), nullptr, settings_displayBrightnessLevel, nullptr, SettingsOptions::OLEDBrightness}, /*Brightness Level*/ {SETTINGS_DESC(SettingsItemIndex::Brightness), nullptr, settings_displayBrightnessLevel, nullptr, SettingsOptions::OLEDBrightness}, /*Brightness Level*/
{SETTINGS_DESC(SettingsItemIndex::ColourInversion), nullptr, settings_displayInvertColor, nullptr, SettingsOptions::OLEDInversion}, /*Invert screen colour*/ {SETTINGS_DESC(SettingsItemIndex::ColourInversion), nullptr, settings_displayInvertColor, nullptr, SettingsOptions::OLEDInversion}, /*Invert screen colour*/
{SETTINGS_DESC(SettingsItemIndex::AdvancedIdle), nullptr, settings_displayAdvancedIDLEScreens, nullptr, SettingsOptions::DetailedIDLE}, /* Advanced idle screen*/ {SETTINGS_DESC(SettingsItemIndex::AdvancedIdle), nullptr, settings_displayAdvancedIDLEScreens, nullptr, SettingsOptions::DetailedIDLE}, /* Advanced idle screen*/
{SETTINGS_DESC(SettingsItemIndex::AdvancedSoldering), nullptr, settings_displayAdvancedSolderingScreens, nullptr, SettingsOptions::DetailedSoldering}, /* Advanced soldering screen*/ {SETTINGS_DESC(SettingsItemIndex::AdvancedSoldering), nullptr, settings_displayAdvancedSolderingScreens, nullptr, SettingsOptions::DetailedSoldering}, /* Advanced soldering screen*/
{0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength} // end of menu marker. DO NOT REMOVE {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength} // end of menu marker. DO NOT REMOVE
}; };
const menuitem PowerSavingMenu[] = { const menuitem PowerSavingMenu[] = {
/* /*
* Sleep Temp * Motion Sensitivity
* Sleep Temp
* Sleep Time * Sleep Time
* Shutdown Time * Shutdown Time
* Motion Sensitivity
*/ */
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
{SETTINGS_DESC(SettingsItemIndex::SleepTemperature), settings_setSleepTemp, settings_displaySleepTemp, nullptr, SettingsOptions::SettingsOptionsLength}, /*Sleep Temp*/ {SETTINGS_DESC(SettingsItemIndex::MotionSensitivity), nullptr, settings_displaySensitivity, nullptr, SettingsOptions::Sensitivity}, /* Motion Sensitivity*/
{SETTINGS_DESC(SettingsItemIndex::SleepTimeout), nullptr, settings_displaySleepTime, nullptr, SettingsOptions::SleepTime}, /*Sleep Time*/ {SETTINGS_DESC(SettingsItemIndex::SleepTemperature), settings_setSleepTemp, settings_displaySleepTemp, settings_showSleepOptions, SettingsOptions::SettingsOptionsLength}, /*Sleep Temp*/
{SETTINGS_DESC(SettingsItemIndex::SleepTimeout), nullptr, settings_displaySleepTime, settings_showSleepOptions, SettingsOptions::SleepTime}, /*Sleep Time*/
{SETTINGS_DESC(SettingsItemIndex::ShutdownTimeout), nullptr, settings_displayShutdownTime, settings_showSleepOptions, SettingsOptions::ShutdownTime}, /*Shutdown Time*/
#endif #endif
{SETTINGS_DESC(SettingsItemIndex::ShutdownTimeout), nullptr, settings_displayShutdownTime, nullptr, SettingsOptions::ShutdownTime}, /*Shutdown Time*/
{SETTINGS_DESC(SettingsItemIndex::MotionSensitivity), nullptr, settings_displaySensitivity, nullptr, SettingsOptions::Sensitivity}, /* Motion Sensitivity*/
#ifdef HALL_SENSOR #ifdef HALL_SENSOR
{SETTINGS_DESC(SettingsItemIndex::HallEffSensitivity), nullptr, settings_displayHallEffect, nullptr, SettingsOptions::HallEffectSensitivity}, /* HallEffect Sensitivity*/ {SETTINGS_DESC(SettingsItemIndex::HallEffSensitivity), nullptr, settings_displayHallEffect, nullptr, SettingsOptions::HallEffectSensitivity}, /* HallEffect Sensitivity*/
#endif #endif
@@ -309,16 +312,12 @@ static void settings_displayInputVRange(void) {
} }
} }
static bool settings_showInputVOptions(void) { return getSettingValue(SettingsOptions::MinDCVoltageCells) > 0; }
static void settings_displayInputMinVRange(void) { static void settings_displayInputMinVRange(void) {
if (getSettingValue(SettingsOptions::MinDCVoltageCells)) { printShortDescription(SettingsItemIndex::MinVolCell, 4);
printShortDescription(SettingsItemIndex::MinVolCell, 4); OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) / 10, 2, FontStyle::LARGE);
OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) / 10, 2, FontStyle::LARGE); OLED::print(SymbolDot, FontStyle::LARGE);
OLED::print(SymbolDot, FontStyle::LARGE); OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) % 10, 1, FontStyle::LARGE);
OLED::printNumber(getSettingValue(SettingsOptions::MinVoltageCells) % 10, 1, FontStyle::LARGE);
} else {
printShortDescription(SettingsItemIndex::MinVolCell, 5);
OLED::print(translatedString(Tr->SettingNAChar), FontStyle::LARGE);
}
} }
#endif #endif
#ifdef POW_QC #ifdef POW_QC
@@ -331,7 +330,6 @@ static void settings_displayQCInputV(void) {
OLED::printNumber(voltage / 10, 2, FontStyle::LARGE); OLED::printNumber(voltage / 10, 2, FontStyle::LARGE);
OLED::print(SymbolDot, FontStyle::LARGE); OLED::print(SymbolDot, FontStyle::LARGE);
OLED::printNumber(voltage % 10, 1, FontStyle::LARGE); OLED::printNumber(voltage % 10, 1, FontStyle::LARGE);
OLED::print(SymbolVolts, FontStyle::LARGE);
} }
#endif #endif
@@ -350,6 +348,17 @@ static void settings_displayPDNegTimeout(void) {
#endif #endif
#ifndef NO_SLEEP_MODE #ifndef NO_SLEEP_MODE
static void settings_displayShutdownTime(void) {
printShortDescription(SettingsItemIndex::ShutdownTimeout, 5);
if (getSettingValue(SettingsOptions::ShutdownTime) == 0) {
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
} else {
OLED::printNumber(getSettingValue(SettingsOptions::ShutdownTime), 2, FontStyle::LARGE);
OLED::print(SymbolMinutes, FontStyle::LARGE);
}
}
static bool settings_setSleepTemp(void) { static bool settings_setSleepTemp(void) {
// If in C, 10 deg, if in F 20 deg // If in C, 10 deg, if in F 20 deg
uint16_t temp = getSettingValue(SettingsOptions::SleepTemp); uint16_t temp = getSettingValue(SettingsOptions::SleepTemp);
@@ -368,6 +377,12 @@ static bool settings_setSleepTemp(void) {
} }
} }
static void settings_displaySensitivity(void) {
printShortDescription(SettingsItemIndex::MotionSensitivity, 7);
OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false);
}
static bool settings_showSleepOptions(void) { return getSettingValue(SettingsOptions::Sensitivity) > 0; }
static void settings_displaySleepTemp(void) { static void settings_displaySleepTemp(void) {
printShortDescription(SettingsItemIndex::SleepTemperature, 5); printShortDescription(SettingsItemIndex::SleepTemperature, 5);
OLED::printNumber(getSettingValue(SettingsOptions::SleepTemp), 3, FontStyle::LARGE); OLED::printNumber(getSettingValue(SettingsOptions::SleepTemp), 3, FontStyle::LARGE);
@@ -387,15 +402,6 @@ static void settings_displaySleepTime(void) {
} }
#endif #endif
static void settings_displayShutdownTime(void) {
printShortDescription(SettingsItemIndex::ShutdownTimeout, 5);
if (getSettingValue(SettingsOptions::ShutdownTime) == 0) {
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
} else {
OLED::printNumber(getSettingValue(SettingsOptions::ShutdownTime), 2, FontStyle::LARGE);
OLED::print(SymbolMinutes, FontStyle::LARGE);
}
}
static bool settings_setTempF(void) { static bool settings_setTempF(void) {
bool res = nextSettingValue(SettingsOptions::TemperatureInF); bool res = nextSettingValue(SettingsOptions::TemperatureInF);
uint16_t BoostTemp = getSettingValue(SettingsOptions::BoostTemp); uint16_t BoostTemp = getSettingValue(SettingsOptions::BoostTemp);
@@ -435,11 +441,6 @@ static void settings_displayTempF(void) {
OLED::print((getSettingValue(SettingsOptions::TemperatureInF)) ? SymbolDegF : SymbolDegC, FontStyle::LARGE); OLED::print((getSettingValue(SettingsOptions::TemperatureInF)) ? SymbolDegF : SymbolDegC, FontStyle::LARGE);
} }
static void settings_displaySensitivity(void) {
printShortDescription(SettingsItemIndex::MotionSensitivity, 7);
OLED::printNumber(getSettingValue(SettingsOptions::Sensitivity), 1, FontStyle::LARGE, false);
}
static void settings_displayAdvancedSolderingScreens(void) { static void settings_displayAdvancedSolderingScreens(void) {
printShortDescription(SettingsItemIndex::AdvancedSoldering, 7); printShortDescription(SettingsItemIndex::AdvancedSoldering, 7);
OLED::drawCheckbox(getSettingValue(SettingsOptions::DetailedSoldering)); OLED::drawCheckbox(getSettingValue(SettingsOptions::DetailedSoldering));
@@ -705,6 +706,7 @@ static void settings_displayPowerPulse(void) {
} }
} }
static bool settings_displayAnimationOptions(void) { return getSettingValue(SettingsOptions::AnimationSpeed) > 0; }
static void settings_displayAnimationLoop(void) { static void settings_displayAnimationLoop(void) {
printShortDescription(SettingsItemIndex::AnimLoop, 7); printShortDescription(SettingsItemIndex::AnimLoop, 7);
OLED::drawCheckbox(getSettingValue(SettingsOptions::AnimationLoop)); OLED::drawCheckbox(getSettingValue(SettingsOptions::AnimationLoop));
@@ -854,6 +856,17 @@ static bool settings_enterAdvancedMenu(void) {
return false; return false;
} }
uint8_t gui_getMenuLength(const menuitem *menu) {
uint8_t scrollContentSize = 0;
for (uint8_t i = 0; menu[i].draw != nullptr; i++) {
if (menu[i].isVisible == nullptr) {
scrollContentSize += 1; // Always visible
} else if (menu[i].isVisible()) {
scrollContentSize += 1; // Selectively visible and chosen to show
}
}
return scrollContentSize;
}
void gui_Menu(const menuitem *menu) { void gui_Menu(const menuitem *menu) {
// Draw the settings menu and provide iteration support etc // Draw the settings menu and provide iteration support etc
@@ -868,29 +881,24 @@ void gui_Menu(const menuitem *menu) {
Exiting, Exiting,
}; };
uint8_t currentScreen = 0; uint8_t currentScreen = 0; // Current screen index in the menu struct
TickType_t autoRepeatTimer = 0; uint8_t screensSkipped = 0; // Number of screens skipped due to being disabled
TickType_t autoRepeatAcceleration = 0; TickType_t autoRepeatTimer = 0;
bool earlyExit = false; TickType_t autoRepeatAcceleration = 0;
bool lcdRefresh = true; bool earlyExit = false;
ButtonState lastButtonState = BUTTON_NONE; bool lcdRefresh = true;
uint8_t scrollContentSize = 0;
bool scrollBlink = false; ButtonState lastButtonState = BUTTON_NONE;
bool lastValue = false; uint8_t scrollContentSize = gui_getMenuLength(menu);
NavState navState = NavState::Entering;
bool scrollBlink = false;
bool lastValue = false;
NavState navState = NavState::Entering;
ScrollMessage scrollMessage; ScrollMessage scrollMessage;
for (uint8_t i = 0; menu[i].draw != nullptr; i++) {
if (menu[i].isVisible == nullptr) {
scrollContentSize += 1; // Always visible
} else if (menu[i].isVisible()) {
scrollContentSize += 1; // Selectively visible and chosen to show
}
}
while ((menu[currentScreen].draw != nullptr) && earlyExit == false) { while ((menu[currentScreen].draw != nullptr) && earlyExit == false) {
bool valueChanged = false;
// Handle menu transition: // Handle menu transition:
if (navState != NavState::Idle) { if (navState != NavState::Idle) {
// Check if this menu item shall be skipped. If it shall be skipped, // Check if this menu item shall be skipped. If it shall be skipped,
@@ -901,6 +909,7 @@ void gui_Menu(const menuitem *menu) {
if (menu[currentScreen].isVisible != nullptr) { if (menu[currentScreen].isVisible != nullptr) {
if (!menu[currentScreen].isVisible()) { if (!menu[currentScreen].isVisible()) {
currentScreen++; currentScreen++;
screensSkipped++;
OLED::useSecondaryFramebuffer(false); OLED::useSecondaryFramebuffer(false);
continue; continue;
} }
@@ -939,7 +948,7 @@ void gui_Menu(const menuitem *menu) {
OLED::clearScreen(); OLED::clearScreen();
menu[currentScreen].draw(); menu[currentScreen].draw();
uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize; uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize;
uint8_t position = OLED_HEIGHT * currentScreen / scrollContentSize; uint8_t position = OLED_HEIGHT * (currentScreen - screensSkipped) / scrollContentSize;
if (lastValue) if (lastValue)
scrollBlink = !scrollBlink; scrollBlink = !scrollBlink;
if (!lastValue || !scrollBlink) if (!lastValue || !scrollBlink)
@@ -965,6 +974,7 @@ void gui_Menu(const menuitem *menu) {
auto callIncrementHandler = [&]() { auto callIncrementHandler = [&]() {
wasInGuiMenu = false; wasInGuiMenu = false;
valueChanged = true;
bool res = false; bool res = false;
if ((int)menu[currentScreen].autoSettingOption < (int)SettingsOptions::SettingsOptionsLength) { if ((int)menu[currentScreen].autoSettingOption < (int)SettingsOptions::SettingsOptionsLength) {
res = nextSettingValue(menu[currentScreen].autoSettingOption); res = nextSettingValue(menu[currentScreen].autoSettingOption);
@@ -1040,6 +1050,10 @@ void gui_Menu(const menuitem *menu) {
earlyExit = true; earlyExit = true;
scrollMessage.reset(); scrollMessage.reset();
} }
if (valueChanged) {
// If user changed value, update the scroll content size
scrollContentSize = gui_getMenuLength(menu);
}
} }
} }

View File

@@ -913,7 +913,7 @@ void startGUITask(void const *argument) {
OLED::setCursor(0, 0); OLED::setCursor(0, 0);
if (getSettingValue(SettingsOptions::DetailedIDLE)) { if (getSettingValue(SettingsOptions::DetailedIDLE)) {
if (isTipDisconnected()) { if (isTipDisconnected()) {
OLED::print(translatedString(Tr->TipDisconnectedString), FontStyle::SMALL); OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon);
} else { } else {
if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300)))
// Blink temp if setting enable and temp < 55° // Blink temp if setting enable and temp < 55°
@@ -986,7 +986,7 @@ void startGUITask(void const *argument) {
if (OLED::getRotation()) { if (OLED::getRotation()) {
#endif #endif
// in right handed mode we want to draw over the first part // in right handed mode we want to draw over the first part
OLED::drawArea(55, 0, 41, 16, disconnectedTipIcon); OLED::drawArea(55, 0, 41, 16, disconnectedTipIconFlip);
} else { } else {
OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon); OLED::drawArea(0, 0, 41, 16, disconnectedTipIcon);

View File

@@ -1,4 +1,3 @@
ifndef model ifndef model
model:=TS100 model:=TS100
endif endif
@@ -11,18 +10,30 @@ ifneq ($(model),$(filter $(model),$(ALL_MODELS)))
$(error Invalid model '$(model)', valid options are: $(ALL_MODELS)) $(error Invalid model '$(model)', valid options are: $(ALL_MODELS))
endif endif
# output folder
HEXFILE_DIR=Hexfile
# temporary objects folder
OUTPUT_DIR_BASE=Objects
OUTPUT_DIR=Objects/$(model)
ALL_LANGUAGES=BG CS DA DE EN ES FI FR HR HU IT JA_JP LT NL NL_BE NO PL PT RU SK SL SR_CYRL SR_LATN SV TR UK YUE_HK ZH_CN ZH_TW ALL_LANGUAGES=BG CS DA DE EN ES FI FR HR HU IT JA_JP LT NL NL_BE NO PL PT RU SK SL SR_CYRL SR_LATN SV TR UK YUE_HK ZH_CN ZH_TW
LANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN LANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN
LANGUAGE_GROUP_CJK_NAME=Chinese+Japanese LANGUAGE_GROUP_CJK_NAME=Chinese+Japanese
ifdef custom_multi_langs
RUN_SHELL_CMD := $(shell rm -Rf {Core/Gen,$(OUTPUT_DIR)/Core/Gen,$(HEXFILE_DIR)/*_Custom.*})
LANGUAGE_GROUP_CUSTOM_LANGS=$(custom_multi_langs)
LANGUAGE_GROUP_CUSTOM_NAME=Custom
endif
LANGUAGE_GROUP_CYRILLIC_LANGS=EN BG RU SR_CYRL SR_LATN UK LANGUAGE_GROUP_CYRILLIC_LANGS=EN BG RU SR_CYRL SR_LATN UK
LANGUAGE_GROUP_CYRILLIC_NAME=Bulgarian+Russian+Serbian+Ukrainian LANGUAGE_GROUP_CYRILLIC_NAME=Bulgarian+Russian+Serbian+Ukrainian
LANGUAGE_GROUP_EUR_LANGS=EN $(filter-out $(LANGUAGE_GROUP_CJK_LANGS) $(LANGUAGE_GROUP_CYRILLIC_LANGS),$(ALL_LANGUAGES)) LANGUAGE_GROUP_EUR_LANGS=EN $(filter-out $(LANGUAGE_GROUP_CJK_LANGS) $(LANGUAGE_GROUP_CYRILLIC_LANGS),$(ALL_LANGUAGES))
LANGUAGE_GROUP_EUR_NAME=European LANGUAGE_GROUP_EUR_NAME=European
LANGUAGE_GROUPS=CJK CYRILLIC EUR LANGUAGE_GROUPS=CUSTOM CJK CYRILLIC EUR
# Defines for host tools # Defines for host tools
@@ -184,12 +195,7 @@ $(shell find $(SOURCE_CORE_DIR) -type f -name '*.cpp') \
$(shell find $(SOURCE_DRIVERS_DIR) -path $(PD_DRIVER_TESTS_DIR) -prune -false -o -type f -name '*.cpp') \ $(shell find $(SOURCE_DRIVERS_DIR) -path $(PD_DRIVER_TESTS_DIR) -prune -false -o -type f -name '*.cpp') \
$(shell find $(DEVICE_BSP_DIR) -type f -name '*.cpp') \ $(shell find $(DEVICE_BSP_DIR) -type f -name '*.cpp') \
$(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.cpp') $(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.cpp')
# output folder
HEXFILE_DIR=Hexfile
# temporary objects folder
OUTPUT_DIR_BASE=Objects
OUTPUT_DIR=Objects/$(model)
# code optimisation ------------------------------------------------------------ # code optimisation ------------------------------------------------------------
OPTIM=-Os -flto -finline-small-functions -findirect-inlining -fdiagnostics-color -ffunction-sections -fdata-sections -fshort-enums OPTIM=-Os -flto -finline-small-functions -findirect-inlining -fdiagnostics-color -ffunction-sections -fdata-sections -fshort-enums

View File

@@ -77,7 +77,7 @@ echo "*********************************************"
# Calculate available languages # Calculate available languages
for f in "$TRANSLATION_DIR"/translation_*.json; do for f in "$TRANSLATION_DIR"/translation_*.json; do
AVAILABLE_LANGUAGES+=($(echo $f | tr "[:lower:]" "[:upper:]" | sed "s/[^_]*_//" | sed "s/\.JSON//g")) AVAILABLE_LANGUAGES+=("$(echo "$f" | tr "[:lower:]" "[:upper:]" | sed "s/[^_]*_//" | sed "s/\.JSON//g")")
done done
# Checking requested language # Checking requested language
@@ -124,8 +124,8 @@ if [ ${#BUILD_LANGUAGES[@]} -gt 0 ] && [ ${#BUILD_MODELS[@]} -gt 0 ]; then
checkLastCommand checkLastCommand
for model in "${BUILD_MODELS[@]}"; do for model in "${BUILD_MODELS[@]}"; do
echo "Building firmware for $model in ${BUILD_LANGUAGES[@]}" echo "Building firmware for $model in ${BUILD_LANGUAGES[*]}"
make -j$(nproc) model="$model" "${BUILD_LANGUAGES[@]/#/firmware-}" >/dev/null make -j"$(nproc)" model="$model" "${BUILD_LANGUAGES[@]/#/firmware-}" >/dev/null
checkLastCommand checkLastCommand
done done
else else

View File

@@ -1,2 +1,2 @@
#!/usr/bin/env bash #!/bin/sh
docker-compose run --rm builder docker-compose run --rm builder