Compare commits

...

123 Commits

Author SHA1 Message Date
Ben V. Brown
e725e63b3f Merge pull request #558 from Ralim/fix/acting-as-red-light
Fix Acting as red light + translations around the auto start
2020-01-18 20:35:32 +11:00
Ben V. Brown
e2067971a5 Rework translation format for soldering settings 2020-01-18 20:09:31 +11:00
Ben V. Brown
a841608547 Fix race condition around PID temp setpoint 2020-01-18 19:12:53 +11:00
Ben V. Brown
0384ef70b0 Add slightly more tolerance to temp model to account for noise 2020-01-18 19:12:42 +11:00
Ben V. Brown
b1899c08f9 Remove unused var 2020-01-18 19:12:24 +11:00
Ben V. Brown
08a1e0c7c7 v Bump 2020-01-18 13:54:11 +11:00
Ben V. Brown
4b2e9e38ea Merge pull request #554 from Ralim/fix/remove-tip-dis-and-fix-disp
Fix: Remove tip disconnection warning. Fix leading zeros (again)
2020-01-18 13:24:54 +11:00
Ben V. Brown
0a671a97ba Add limiter for setpoint > ADC range 2020-01-18 13:01:51 +11:00
Ben V. Brown
03d3a20f9d Fix leader zero suppression (again) 2020-01-18 12:44:08 +11:00
Ben V. Brown
78450d8171 Remove bad tip counter 2020-01-18 12:39:10 +11:00
Ben V. Brown
ca1ff599a9 Merge pull request #553 from Firebie/AutoStartFix
Menu autostart fix + Implement power limit option
2020-01-18 12:02:45 +11:00
firebie
61c127cc2d Autostart: Manual/Auto/Sleep 2020-01-17 22:44:33 +02:00
firebie
358726631f PowerLimit 2020-01-17 21:15:56 +02:00
Ben V. Brown
88b64e24c1 Merge pull request #550 from fatcookies/master
Reduced stack usage in showBootLogoIfavailable().
2020-01-17 10:46:47 +11:00
fatcookies
0591a01c5a Reduced stack usage in showBootLogoIfavailable().
Introduced new function OLED::drawAreaSwapped() for drawing images where
the octets are reveresed endianess in 16-bit words.
2020-01-16 21:58:02 +00:00
Ben V. Brown
1ca87a4241 Merge pull request #546 from Cabalist/gitignorecleanup
Gitignorecleanup
2020-01-03 10:09:12 +11:00
Ryan Jarvis
973a3bfe1a Update .gitignore 2020-01-01 21:56:37 -08:00
Ryan Jarvis
9f0cbc17ef Remove IDE settings and cache files 2020-01-01 21:56:28 -08:00
Ben V. Brown
86d60da935 Merge pull request #542 from Ralim/drop-inline
Drop inline on QC as not required
2019-12-31 23:23:56 +11:00
Ben V. Brown
e1a4418599 Update hardware.cpp 2019-12-31 23:23:20 +11:00
Ben V. Brown
0402b7bd2f Merge pull request #541 from Ralim/v2.07
Update make_translation.py
2019-12-31 23:10:28 +11:00
Ben V. Brown
644a3e4349 Update make_translation.py 2019-12-31 23:09:51 +11:00
Ben V. Brown
76a3ec00d0 Merge pull request #540 from Ralim/Fix-dropped-zeros
Fix dropped zeros
2019-12-31 23:06:31 +11:00
Ben V. Brown
a4ccb3ae96 Merge pull request #539 from Ralim/lets-fix-qc
Fixing QC 12V
2019-12-31 23:04:39 +11:00
Ben V. Brown
0d713ae257 Dont suppress zeros 2019-12-31 22:59:04 +11:00
Ben V. Brown
26bf31ae64 Make zero suppression optional 2019-12-31 22:58:52 +11:00
Ben V. Brown
0672d637a4 Update hardware.cpp 2019-12-31 22:54:43 +11:00
Ben V. Brown
6b7567257b Update hardware.cpp 2019-12-31 22:46:23 +11:00
Ben V. Brown
554001a2d4 Cleanup QC 2019-12-31 22:45:00 +11:00
Ben V. Brown
d98b1aa76d Regin the rested voltage to be 9 or 12 2019-12-31 22:44:47 +11:00
Ben V. Brown
7683ad155d Merge pull request #538 from Ralim/fix-temp-symbol
Fix the temp symbol to be used in soldering mode
2019-12-29 16:46:40 +11:00
Ben V. Brown
832940353b Draw nicer temp sybols if current font allows 2019-12-29 16:35:41 +11:00
Ben V. Brown
e82c75258a Add readback for the current font 2019-12-29 16:35:29 +11:00
Ben V. Brown
3040bc5fa4 Merge pull request #523 from thomasgi1/powerPulses
generate power pulses also in soldering and sleep mode
2019-12-29 16:10:19 +11:00
Thomas Gimpel
00bf5357c1 Merge branch 'master' into powerPulses 2019-12-28 14:59:36 +01:00
Ben V. Brown
4626f32ede Merge pull request #535 from Ralim/feat/Settings-Reset-Should-Warn
Show warning message when settings are reset from a firmware update.
2019-12-28 12:36:42 +11:00
Ben V. Brown
ce81a3ee18 Update Translation.cpp 2019-12-28 12:00:44 +11:00
Ben V. Brown
255f7009f2 Display the warning 2019-12-28 12:00:34 +11:00
Ben V. Brown
da882fe27a Export new settings message 2019-12-28 12:00:26 +11:00
Ben V. Brown
2032e8a2f3 Return if settings were reset 2019-12-28 12:00:18 +11:00
Ben V. Brown
e6a562f8f4 Track if settings were reset 2019-12-28 11:59:56 +11:00
Ben V. Brown
97f0dcae36 Cleanup generator code to handle \n in messages 2019-12-28 11:59:43 +11:00
Ben V. Brown
2d5482ecd2 Add new SettingsResetMessage Message 2019-12-28 11:59:33 +11:00
Ben V. Brown
ff69301207 Merge pull request #534 from Ralim/fix-drop-leader-zeros
Fix drop leader zeros
2019-12-28 11:31:25 +11:00
Ben V. Brown
5974ece927 Dont blank entire string if all zero 2019-12-28 11:21:40 +11:00
Ben V. Brown
3ca3b7fcca Delete language.settings.xml 2019-12-28 11:21:21 +11:00
Ben V. Brown
48b32dcf45 Merge pull request #532 from Ralim/menu-should-timeout
Menu should timeout
2019-12-28 11:10:06 +11:00
Ben V. Brown
c1cc64c485 Fix typo 2019-12-28 10:57:40 +11:00
Ben V. Brown
5c2c37604e Merge pull request #533 from Ralim/codeship-update
Codeship update
Re-work the build script to keep temp files that can be kept
2019-12-26 11:31:54 +11:00
Ben V. Brown
b46ae3a7a5 Fix cleaning temp files properly to allow re-use of STM libs 2019-12-26 11:23:36 +11:00
Ben V. Brown
e394ad0a93 Fix line ending mistake 2019-12-26 11:13:42 +11:00
Ben V. Brown
636edcbd50 Drop github-releases, decided against auto releases 2019-12-26 11:04:33 +11:00
Thomas Gimpel
902fa7f75b Merge branch 'master' into powerPulses 2019-12-24 10:10:24 +01:00
Ben V. Brown
7e2ba77d79 Merge pull request #531 from Ralim/nix-leader-zero
Walk over number prints to drop leader zeros
2019-12-24 12:26:36 +11:00
Ben V. Brown
f2337ffc37 Add timeout to the menu display logic 2019-12-24 12:17:02 +11:00
Ben V. Brown
0f707bf323 Dont double save 2019-12-24 12:13:40 +11:00
Ben V. Brown
8e50f16f6c Walk over number prints to drop leader zeros 2019-12-24 12:08:22 +11:00
Ben V. Brown
7e7d31d563 Merge pull request #524 from awigen/update-linux-flash-script
Update Linux flash script
2019-12-24 11:57:27 +11:00
Ben V. Brown
dc3d64444f Merge branch 'master' of https://github.com/Ralim/ts100 2019-12-23 23:05:46 +11:00
Ben V. Brown
3a45014b75 Add build status 2019-12-23 23:04:00 +11:00
Ben V. Brown
ae388031b4 Merge pull request #530 from Ralim/add-build-command
Create build.sh
2019-12-23 22:50:00 +11:00
Ben V. Brown
f33ea7e4d7 Create build.sh 2019-12-23 22:46:58 +11:00
Ben V. Brown
2c121df181 Update codeship-steps.yml 2019-12-23 22:15:53 +11:00
Ben V. Brown
4ccf735351 Merge pull request #529 from Ralim/fix-perm
Fix execute bits
2019-12-23 19:37:59 +11:00
Ben V. Brown
937728b734 Fix execute bits 2019-12-23 08:36:54 +00:00
Ben V. Brown
3554913153 Merge pull request #528 from Ralim/ci-codeship
Setting up CI builds
2019-12-23 19:26:29 +11:00
Ben V. Brown
7b563bf2ba Merge pull request #527 from Ralim/testing-temp-rework
Temperature control system re-write
2019-12-23 19:24:55 +11:00
Ben V. Brown
448b5824ff Prevent reuse causing lang issues due to optimisations 2019-12-23 19:22:16 +11:00
Ben V. Brown
47fb6d2cc1 Update translations, more repeatable sorting 2019-12-23 19:21:53 +11:00
Ben V. Brown
aee37d4c5d Merge branch 'testing-temp-rework' into ci-codeship 2019-12-23 18:46:00 +11:00
Ben V. Brown
cc79fcb4cf Rough pass at builder 2019-12-23 18:36:10 +11:00
Ben V. Brown
51420829f0 update build script 2019-12-23 18:33:24 +11:00
Ben V. Brown
668e2c0ec0 Squash compiler warnings and keep translation file up to date 2019-12-23 15:10:47 +11:00
Ben V. Brown
720f81a0f5 Remove unused thermal model 2019-12-23 15:06:55 +11:00
Ben V. Brown
9e7355adab Update .gitignore 2019-12-23 14:48:34 +11:00
Ben V. Brown
d8f7d660b8 Rough ts80 tuning 2019-12-23 13:33:17 +11:00
Ben V. Brown
c408fc0a7e tune ts100 2019-12-23 13:25:11 +11:00
Ben V. Brown
329f6fdbe7 Fix battery voltage not updating when not soldering 2019-12-23 13:19:48 +11:00
Ben V. Brown
e3434fba9e Update GUIThread.cpp 2019-12-23 13:14:28 +11:00
Alex Wigen
a596ffd5e4 Update Linux flash script
Miwer commented in issue #11 that on Mint 17.3 lsblk does not escape
potentially unsafe characters like it does on Fedora (lsblk v2.32.1). So
broaden the grep match expression to catch both posibilities.
2019-11-30 23:21:04 +10:00
Thomas Gimpel
3f45e6a5af generate power pulses also in soldering and sleep mode 2019-11-24 11:50:51 +01:00
Ben V. Brown
a3faa9fa4a Merge pull request #520 from onovy/master
Update Czech translation
2019-11-09 16:11:14 +11:00
Ondřej Nový
b3f8193fdf Update Czech translation 2019-11-08 20:08:52 +01:00
Ben V. Brown
cad422fba4 Merge pull request #519 from C0rn3j/master
Grammar and other small fixes
2019-11-03 15:14:00 +11:00
C0rn3j
e5171d0ead Grammar and other small fixes 2019-11-02 15:38:34 +01:00
Ben V. Brown
5cfab0ad65 Merge pull request #511 from OliverParoczai/patch-1
Grammar fixes
2019-10-15 18:45:58 +11:00
Paróczai Olivér
d3fbfb9d46 Grammar fixes 2019-10-14 22:38:14 +02:00
Ben V. Brown
3fea95c6b1 Fix calibration, move to exp moving average 2019-10-08 21:50:50 +11:00
Ben V. Brown
6a39e4bcc8 Work in progress
Working, but has temp offset issue slightly.

Could have slightly wrong gain values
2019-10-07 21:11:31 +11:00
Ben V. Brown
3e1abc451c Remove old PID struct 2019-10-07 19:31:02 +11:00
Ben V. Brown
eda0681eb8 Update & Fix translations 2019-10-07 19:09:28 +11:00
Ben V. Brown
64f8ca5c53 Functioning MVP tester 2019-10-07 19:09:21 +11:00
Ben V. Brown
1cf88b2cd6 Rough refactor main control loop to C 2019-10-07 18:58:51 +11:00
Ben V. Brown
c5f6f6d044 Roughing out concept of patent based temp curve 2019-10-07 18:20:09 +11:00
Ben V. Brown
c1db22cb4a Merge pull request #508 from Ralim/TweakTS80
This re-works the movement filter and some IRQ cleanup misc work.
2019-10-07 16:51:46 +11:00
Ben V. Brown
4fe8c1654e Fix build after merge 2019-10-07 16:51:10 +11:00
Ben V. Brown
bc38132f31 Merge branch 'master' into TweakTS80 2019-10-07 16:40:42 +11:00
Ben V. Brown
144600d531 Merge pull request #499 from agatti/guicleanup
Refactor OLED on/off mechanism.
2019-10-07 16:34:20 +11:00
Ben V. Brown
e162d20723 Merge pull request #507 from playday3008/patch-1
Fixed translations Ukranian
2019-10-07 16:33:04 +11:00
Вадим
9040d6fe9c Fixed translations 2019-10-06 05:27:52 +02:00
Ben V. Brown
84de602245 Merge pull request #500 from agatti/accelerometer-speedup
Speed up accelerometer driver data processing.
2019-08-29 17:39:09 +10:00
Alessandro Gatti
5eb3df47df Speed up accelerometer data intake.
The LIS2DH12 driver performed an unnecessary endianness conversion, as
data from the sensor was already coming in little-endian format.  The
MMA8652FC driver is now using the rev16 opcode to perform the swap
rather than doing all the bitshuffling operations in multiple steps.
2019-08-29 04:11:38 +02:00
Alessandro Gatti
b8819b8e73 Refactor OLED on/off mechanism.
Made the display on/off mechanism a bit more self-descriptive by
replacing bare true/false values with an enum with more appropriate
value names.  OLED automatic turn-off logic has been cleaned up,
along with minor updates to the OLED initialisation sequence.
2019-08-28 21:13:39 +02:00
Ben V. Brown
c96f1b528a Merge pull request #496 from aWZHY0yQH81uOYvH/master
changed Python logo converter to use correct line endings on all OSes
2019-08-28 18:50:48 +10:00
aWZHY0yQH81uOYvH
ef88d5ec31 changed Intel HEX gen to use correct line endings on all OSes 2019-08-27 22:58:39 -07:00
Ben V. Brown
481be32c2f Merge pull request #493 from agatti/remove-urender
Remove unused uRender code.
2019-08-27 12:40:54 +10:00
Alessandro Gatti
c26eeb0c2c Remove unused uRender code. 2019-08-23 00:05:31 +02:00
Ben V. Brown
08f7dedd52 Merge pull request #492 from Ralim/STMCubeIDE
Move to STM32CubeIDE
2019-08-19 21:30:37 +10:00
Ben V. Brown
9bdb601742 Fix Debug menu translation 2019-08-19 21:26:24 +10:00
Ben V. Brown
eb3837e529 Re-size stacks 2019-08-19 20:41:27 +10:00
Ben V. Brown
aed7d7b126 Split GUI out for easier management 2019-08-19 20:36:57 +10:00
Ben V. Brown
a49c4e9740 WiP some general cleanup with help of new IDE
Static'ing more of the code where possible
2019-08-19 18:53:29 +10:00
Ben V. Brown
bafe43fc63 Updating documentation 2019-08-19 07:54:16 +10:00
Ben V. Brown
1d4f4822ed Cleanup 2019-08-18 22:32:36 +10:00
Ben V. Brown
7ca613e22b Migrate :O 2019-08-18 22:24:01 +10:00
Ben V. Brown
09ce60f658 Merge pull request #486 from agatti/macos_build_fix
Fix build on macOS
2019-08-16 08:13:54 +10:00
Ben V. Brown
bcae079cd7 Merge pull request #488 from mesutkilic/patch-1
added some turkish translations
2019-08-16 08:13:19 +10:00
Ben V. Brown
a18cca6639 Merge pull request #491 from timecop97/master
changed intel Hex gen to use unix line endings to fix #460
2019-08-16 08:12:34 +10:00
timecop97
379df5b7c1 changed intel Hex gen to use unix line ends 2019-08-15 14:12:02 +01:00
Mesut KILIÇ
27d40d0b36 added some turkish translations 2019-07-23 14:51:05 +03:00
Ben V. Brown
a9dec94476 Merge pull request #487 from pikipirs/master
Slovenian Translation
2019-07-23 19:18:58 +10:00
pikipirs
25c96dab2c Add files via upload 2019-07-23 11:07:10 +02:00
Alessandro Gatti
495073425e Make build.sh Bash 3.x compatible.
The highest version of bash shipped by vanilla macOS is 3.2, and it will
stay like that for the foreseeable future (bash being removed as default
in 10.15 is a strong indicator for that).

The build.sh script used Bash 4.x syntax for enumerating available
translations - this patch dials back the clock to Bash 3.x making things
work again on macOS and (hopefully) still maintaining functionality on
other platforms that use a newer version of bash.
2019-07-20 00:06:17 +02:00
307 changed files with 108701 additions and 311493 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Ignore all differences in line endings
* -crlf

249
.gitignore vendored
View File

@@ -1,55 +1,194 @@
# Object files
*.o
*.ko
*.obj
*.elf
*.d
*.DS_Store
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
workspace/*.hex
# Debug files
*.dSYM/
*.su
workspace/ts100/Debug/*
workspace/.metadata/*
workspace/ts100/.settings/language.settings.xml
workspace/ts100/.cproject
TS100/KiCad/TS100.bak
Logo GUI/TS100 Logo Editor/TS100 Logo Editor/obj/
Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/
workspace/ts100/ts100.xml
workspace/ts100_old/*
*.cache
workspace/TS100/.settings/language.settings.xml
workspace/TS100A/Release/TS100A.map
workspace/TS100A/Release/TS100A.list
workspace/TS100A/Release/TS100A.hex
workspace/TS100A/.settings/language.settings.xml
workspace/TS100A/.metadata/
Translation Editor/.vscode/
Translation Editor/__pycache__/
*.pyc
workspace/TS100/src/Translation.cpp
# Object files
*.o
*.ko
*.obj
*.elf
*.d
*.DS_Store
# Precompiled Headers
*.gch
*.pch
# Libraries
*.lib
*.a
*.la
*.lo
# Shared objects (inc. Windows DLLs)
*.dll
*.so
*.so.*
*.dylib
# Executables
*.exe
*.out
*.app
*.i*86
*.x86_64
workspace/*.hex
# Debug files
*.dSYM/
*.su
workspace/ts100/Debug/*
workspace/.metadata/*
workspace/ts100/.settings/language.settings.xml
workspace/ts100/.cproject
TS100/KiCad/TS100.bak
Logo GUI/TS100 Logo Editor/TS100 Logo Editor/obj/
Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/
workspace/ts100/ts100.xml
workspace/ts100_old/*
*.cache
workspace/TS100/.settings/language.settings.xml
workspace/TS100A/Release/TS100A.map
workspace/TS100A/Release/TS100A.list
workspace/TS100A/Release/TS100A.hex
workspace/TS100A/.settings/language.settings.xml
workspace/TS100A/.metadata/
Translation Editor/.vscode/
Translation Editor/__pycache__/
*.pyc
workspace/TS100/src/Translation.cpp
*.lst
*.mk
*.list
workspace/TS100/Release/
workspace/TS100/Hexfile/
workspace/RemoteSystemsTempFiles/
workspace/TS100/.settings/
workspace/TS100/TS80/
ci/artefacts/
ci/secrets/unencrypted/
codeship.aes
.vscode/settings.json
# IDE configs
.vs/*
.settings/*
.project
..cproject.swp
# Visual Studios
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# Eclipse
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# PyDev specific (Python IDE for Eclipse)
*.pydevproject
# CDT-specific (C/C++ Development Tooling)
.cproject
# CDT- autotools
.autotools
# Java annotation processor (APT)
.factorypath
# PDT-specific (PHP Development Tools)
.buildpath
# sbteclipse plugin
.target
# Tern plugin
.tern-project
# TeXlipse plugin
.texlipse
# STS (Spring Tool Suite)
.springBeans
# Code Recommenders
.recommenders/
# Annotation Processing
.apt_generated/
# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
# Jetbrains
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
.mxproject
CoreCompileInputs.cache

View File

@@ -1 +0,0 @@
1f6b9b8bf2c9e759acd19ce919cfeae19b243aa0

View File

@@ -42,8 +42,8 @@ def intel_hex_line(record_type, offset, data):
for byte in data:
yield "{:02X}".format(byte)
# compute and write checksum (with DOS line ending for compatibility/safety)
yield "{:02X}\r\n".format((((sum(data, # sum data ...
# compute and write checksum (now using unix style line endings for DFU3.45 compatibility
yield "{:02X}\n".format((((sum(data, # sum data ...
record_length # ... and other ...
+ sum(split16(offset)) # ... fields ...
+ record_type) # ... on line
@@ -229,7 +229,7 @@ if __name__ == "__main__":
sys.exit(1)
try:
with open(args.output_filename, 'w') as output:
with open(args.output_filename, 'w', newline='\r\n') as output:
img2hex(args.input_filename,
output,
args.preview,

21
Dockerfile Normal file
View File

@@ -0,0 +1,21 @@
FROM ubuntu:rolling
LABEL maintainer="Ben V. Brown <ralim@ralimtek.com>"
WORKDIR /build
# Setup the ARM GCC toolchain
# Install any needed packages specified in requirements.txt
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
make \
bzip2 \
python3 \
wget && \
apt-get clean && \
wget -qO- https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 | tar -xj
# Add compiler to the path
ENV PATH "/build/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH"
COPY . /build/source
COPY ./ci /build/ci

2
Flashing/flash_ts100_linux.sh Normal file → Executable file
View File

@@ -37,7 +37,7 @@ function enable_gautomount {
}
function is_attached {
output=`lsblk -b --raw --output NAME,MODEL | grep 'DFU\\\\x20Disk'`
output=`lsblk -b --raw --output NAME,MODEL | grep 'DFU.*Disk'`
if [ $? -ne 0 ]; then
return 1
fi

View File

@@ -24,21 +24,21 @@ V1.16
V1.15
* Added support for a custom bootup logo to be programmed via the DFU bootloader.
* Added support for a custom bootup logo to be programmed via the DFU bootloader
V1.14
* Changed input voltage cutoff to be based on cell count rather than voltage.
* Changed input voltage cutoff to be based on cell count rather than voltage
V1.13
* Swapped buttons for menu to prevent accidentally changing first menu item
* Added auto key repeat.
* Added auto key repeat
V1.12
* Increases sensitivity options to be 1*9 with 0 off state
* Fixes issue where going from COOL *> soldering can leave screen off.
* Fixes issue where going from COOL *> soldering can leave screen off
V1.11
@@ -77,7 +77,7 @@ V1.04
* Allows temperature offset calibration
* Nicer idle screen
V1.03
V1.03
* Improved Button handling
* Ability to set motion sensitivity
@@ -85,5 +85,5 @@ V1.03
V1.02
* Adds hold both buttons on IDLE to access the therometer mode.
* Changes the exit soldering mode to be holding both buttons (Like original firmware).
* Adds hold both buttons on IDLE to access the therometer mode
* Changes the exit soldering mode to be holding both buttons (Like original firmware)

View File

@@ -21,9 +21,9 @@ Please edit this template and fill out all the information you can (where releva
***Steps to reproduce:***
1.
2.
3.
1.
2.
3.
***Video of problem if hard to reproduce***
@@ -40,7 +40,6 @@ On the idle screen, you can hold the settings button and it will show you the fi
- Power Supply (Voltage and Current Rating) :
* **Other information**
* **Other information**
If submitting graphics to go on the iron, please use BMP or PNG files over JPG.

View File

@@ -2,18 +2,16 @@
Please try and fill out this template where possible, not all fields are required and can be removed.
* **Please check if the PR fulfills these requirements**
- [ ] The commit message make sense
- [ ] The changes have been tested locally
- [ ] New features have been documented in the Wiki
- [ ] I'm willing to maintain this in the future (Totally Optional)
- [] The commit message makes sense
- [] The changes have been tested locally
- [] Are there any breaking changes
* **What kind of change does this PR introduce?**
* **What kind of change does this PR introduce?**
(Bug fix, feature, docs update, ...)
* **What is the current behavior?**
* **What is the current behavior?**
(You can also link to an open issue here)
@@ -22,7 +20,7 @@ Please try and fill out this template where possible, not all fields are require
* **Does this PR introduce a breaking change?**
* **Does this PR introduce a breaking change?**
(What changes might users need to make in their application due to this PR?)

View File

@@ -1,18 +1,21 @@
[![Codeship Status for ts100](https://app.codeship.com/projects/c77dbfe0-0764-0138-9520-3eb35bdb2b2c/status?branch=master)](https://app.codeship.com/projects/379118)
# TS100 & TS80 Firmware
This firmware is a fresh start for these soldering irons. Designed from the ground up as fully featured control software that leaves nothing to be desired.
It originally started back back at the end of 2016 and has since seen vast improvements, especially some very smart work by community members.
It originally started back at the end of 2016 and has since seen vast improvements, especially some very smart work by community members.
The firmware supports everything you would expect in the soldering iron, and has the same features as the stock firmware with some nice extras packed in.
There is a comprehensive menu system in the iron that allows for adjustment of all the settings on the unit, and support for various languages is added by the communitiy.
The firmware supports everything you would expect in the soldering iron and has the same features as the stock firmware with some nice extras packed in.
There is a comprehensive menu system in the iron that allows for adjustment of all the settings on the unit, and support for various languages is added by the community.
On the TS100 there are settings to allow you to specify a cutoff voltage for different lithium iron battery packs to protect your power source.
On the TS100 there are settings to allow you to specify a cutoff voltage for different lithium-ion battery packs to protect your power source.
For the TS80 these are removed and replaced with the selection of 18W or 24W depending on what your QC power bank can support.
Otherwise both systems work very similar and should support all the features.
Otherwise, both systems work very similar and should support all the features.
This project is considered feature complete for use as a soldering iron, *so please suggest any feature improvements you would like!*
*This firmware does **NOT** support the usb port while running for changing settings. This is done through the onscreen menu only. Logos are edited using the tool or python script and uploaded in DFU mode.*
*This firmware does **NOT** support the USB port while running for changing settings. This is done through the onscreen menu only. Logos are edited using the tool or python script and uploaded in DFU mode.*
## Core Features
@@ -20,23 +23,23 @@ This project is considered feature complete for use as a soldering iron, *so ple
* Automatic sleep with selectable sensitivity
* Motion wake support
* Settings menu on the unit
* (TS100) Set a voltage lower limit for Lithium batteries so you dont kill your battery pack
* (TS100) Set a voltage lower limit for Lithium batteries so you don't kill your battery pack
* (TS80 ) Set 18W or 24W settings for your power bank
* All settings saved to flash when you exit the menu
* Improved readability Fonts
* Use hardware features to improve reliability
* Can disable movement detection if desired
* Full tip profile calibration
* Boost mode lets you temporarily change the temperature when soldering (ie raise temperature for short periods of time)
* (TS100) Battery charge level indicator if power source set to a lipo cell count.
* (TS80) Power bank operating voltage is displayed.
* Custom boot up logo support.
* Automatic LCD rotation based on orientation
* Boost mode lets you temporarily change the temperature when soldering (ie raise the temperature for short periods of time)
* (TS100) Battery charge level indicator if power source set to a lipo cell count
* (TS80) Power bank operating voltage is displayed
* Custom boot up logo support
* Automatic LCD rotation based on the orientation
* Supports both the version 1 and version 2 hardware (different accelerometers)
# Upgrading your iron
This is completely safe, if it goes wrong just put the .hex file from the official website onto the unit and your back to the old firmware. Downloads for the hex files to flash are available on the [releases page.](https://github.com/Ralim/ts100/releases) The file you want is called *(MODEL)_EN.hex* unless you want the translations, they are (MODEL)_*language short name*.hex. Where (MODEL) is either TS100 or TS80.
This is completely safe, but if it goes wrong just put the .hex file from the official website onto the unit and you're back to the old firmware. Downloads for the hex files to flash are available on the [releases page.](https://github.com/Ralim/ts100/releases) The file you want is called *(MODEL)_EN.hex* unless you want the translations, they are (MODEL)_*language short name*.hex. Where (MODEL) is either TS100 or TS80.
Officially the bootloader on the iron only works under Windows. However, users have reported that it does work under Mac, and can be made to work under Linux *sometimes*. Details over on the [wiki page](https://github.com/Ralim/ts100/wiki/Upgrading-Firmware).
@@ -45,23 +48,23 @@ Officially the bootloader on the iron only works under Windows. However, users h
2. The unit will appear as a USB drive.
3. Drag the .hex file onto the USB drive.
4. The unit will disconnect and reconnect.
5. The filename will have changed to end in .RDY or .ERR
6. If it ends with .RDY you're done! Otherwise something went wrong.
7. If it didnt work the first time, try copying the file again without disconnecting the iron, often it will work on the second shot.
5. The filename will have changed to end in .RDY or .ERR
6. If it ends with .RDY you're done! Otherwise, something went wrong.
7. If it didn't work the first time, try copying the file again without disconnecting the iron, often it will work on the second shot.
8. Disconnect the USB and power up the iron. You're good to go.
```
For the more adventurous out there, you can also load this firmware onto the device using a SWD programmer.
On the bottom of the MCU riser pcb, there are 4 pads for programming.
There is a complete device flash backup included in this repository. (Note this includes the bootloader, so will need a SWD programmer to load onto the unit).
For the TS80 the SWD pins are used for the QC negotiation, so you can actually connect to the SWD power via the USB connector
For the more adventurous out there, you can also load this firmware onto the device using an SWD programmer.
On the bottom of the MCU riser PCB, there are 4 pads for programming.
There is a complete device flash backup included in this repository. (Note this includes the bootloader, so will need an SWD programmer to load onto the unit).
For the TS80 the SWD pins are used for the QC negotiation, so you can actually connect to the SWD power via the USB connector.
## Setting a custom bootup image
This firmware uses a different method of updating the bootup image.
This removes the need for emulating a USB drive on the iron just to allow for a bootup image to be setup.
There are further instructions on the [wiki](https://github.com/Ralim/ts100/wiki/Logo-Editor).
There are further instructions on the [wiki](https://github.com/Ralim/ts100/wiki/Logo-Editor).
Instructions are kept on the wiki so that users can update the information if they find extra helpful information.
# Menu System
@@ -70,9 +73,9 @@ This new firmware uses a new menu system to allow access to the settings on the
When on the main screen, the unit shows prompts for the two most common operations.
* Pressing the button near the tip enters soldering mode
* Pressing the button near the USB enters the settings menu.
* Holding the button near the tip will enter soldering temperature adjust mode (This is the same as the one in the soldering menu, just to let you edit before heating up).
* Holding the button near the USB end will show the firmware version details.
* Pressing the button near the USB enters the settings menu
* Holding the button near the tip will enter soldering temperature adjust mode (This is the same as the one in the soldering menu, just to let you edit before heating up)
* Holding the button near the USB end will show the firmware version details
More details are over in the [Menu information.](menu.md)
@@ -80,9 +83,9 @@ More details are over in the [Menu information.](menu.md)
If you love this firmware and want to continue my caffeine addiction, you can do so here (or email me for other options) : https://paypal.me/RalimTek
I also want to should out to all of the [Fantastic Contributors](https://github.com/Ralim/ts100/graphs/contributors).
I also want to give a shout out to all of the [Fantastic Contributors](https://github.com/Ralim/ts100/graphs/contributors).
Especially to the following users, who have helped in various ways that are massively appreciated.:
Especially to the following users, who have helped in various ways that are massively appreciated:
* [dhiltonp](https://github.com/dhiltonp)
* [Mrkvozrout](https://github.com/Mrkvozrout)
@@ -95,12 +98,11 @@ Especially to the following users, who have helped in various ways that are mass
## Licence
The code in this repository that is based on the STM tools is under a BSD like licence.
The code in this repository that is based on the STM tools is under a BSD-like licence.
The code created by the community is GNU GPLv3. Unless noted elsewhere.
The FreeRToS is under its own licence.
## Commercial Use
This software is provided as-is, so I cannot provide any commercial support for the firmware. However you are more than welcome to distribute links to the firmware, or provide irons with this software on them.
Please do not re-host the files, but rather link to this page, so that there are not old versions of the firmware scattered around. If this firmware does make you money, it would be nice to recieve a donation, however there is no enforcement.
This software is provided as-is, so I cannot provide any commercial support for the firmware. However, you are more than welcome to distribute links to the firmware, or provide irons with this software on them.
Please do not re-host the files, but rather link to this page, so that there are no old versions of the firmware scattered around. If this firmware does make you money, it would be nice to receive a donation, however, there is no enforcement.

File diff suppressed because it is too large Load Diff

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "ВРЪХ ЛОША ВРЪЗКА",
"SolderingAdvancedPowerPrompt": "Захранване: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -3,32 +3,36 @@
"languageLocalName": "Český",
"cyrillicGlyphs": false,
"messages": {
"SettingsCalibrationDone": "Calibration done!",
"SettingsCalibrationDone": "Kalibrace dokončena!",
"SettingsCalibrationWarning": "Ujistěte se, že hrot má pokojovou teplotu!",
"SettingsResetWarning": "Opravdu chcete resetovat zařízení do továrního nastavení?",
"UVLOWarningString": "DC LOW",
"UVLOWarningString": "Nízké DC",
"UndervoltageString": "! Nízké napětí !",
"InputVoltageString": "Napětí: ",
"WarningTipTempString": "Teplota: ",
"BadTipString": "BAD TIP",
"BadTipString": "ŠP. HROT",
"SleepingSimpleString": "Zzz ",
"SleepingAdvancedString": "Režim spánku...",
"WarningSimpleString": "HOT!",
"WarningSimpleString": "PÁLÍ",
"WarningAdvancedString": "!! HORKÝ HROT !!",
"SleepingTipAdvancedString": "Hrot:",
"IdleTipString": "Hrot:",
"IdleSetString": " Cíl:",
"TipDisconnectedString": "HROT NEPŘIPOJEN",
"SolderingAdvancedPowerPrompt": "Ohřev: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"OffString": "Vyp",
"ResetOKMessage": "Reset OK",
"YourGainMessage": "Zisk:"
},
"characters": {
"SettingRightChar": "P",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "R",
"SettingSlowChar": "P"
"SettingSlowChar": "P",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -37,7 +41,7 @@
"Pájecí",
"nastavení"
],
"desc": "Nastavení pájení (boost, auto start...)"
"desc": "Nastavení pájení (boost, auto start...)."
},
"PowerSavingMenu": {
"text2": [
@@ -58,7 +62,7 @@
"Pokročilé",
"volby"
],
"desc": "Pokročilé volby (detailní obrazovky, kalibrace, tovární nastavení...)"
"desc": "Pokročilé volby (detailní obrazovky, kalibrace, tovární nastavení...)."
}
},
"menuOptions": {
@@ -68,7 +72,7 @@
"Zdroj",
"napájení"
],
"desc": "Při nižším napětí ukončí pájení <DC=10V, ?S=?x3.3V pro LiPo,LiIon...>"
"desc": "Při nižším napětí ukončí pájení <DC=10V, ?S=?x3.3V pro LiPo, LiIon...>."
},
"SleepTemperature": {
"text": "",
@@ -84,7 +88,7 @@
"Čas do",
"r. spánku"
],
"desc": "Čas do režimu spánku <Minut/Sekund>"
"desc": "Čas do režimu spánku <Minut/Sekund>."
},
"ShutdownTimeout": {
"text": "",
@@ -92,7 +96,7 @@
"Čas do",
"vypnutí"
],
"desc": "Čas do automatického vypnutí <Minut>"
"desc": "Čas do automatického vypnutí <Minut>."
},
"MotionSensitivity": {
"text": "",
@@ -100,7 +104,7 @@
"Citlivost",
"det. pohybu"
],
"desc": "Citlivost detekce pohybu <0=Vyp, 1=Min, ... 9=Max>"
"desc": "Citlivost detekce pohybu <0=Vyp, 1=Min, ... 9=Max>."
},
"TemperatureUnit": {
"text": "",
@@ -108,7 +112,7 @@
"Jednotky",
"teploty"
],
"desc": "Jednotky měření teploty <C=Celsius, F=Fahrenheit>"
"desc": "Jednotky měření teploty <C=Celsius, F=Fahrenheit>."
},
"AdvancedIdle": {
"text": "",
@@ -124,7 +128,7 @@
"Orientace",
"obrazovky"
],
"desc": "Orientace obrazovky <A=Auto, L=Levák, P=Pravák>"
"desc": "Orientace obrazovky <A=Auto, L=Levák, P=Pravák>."
},
"BoostEnabled": {
"text": "",
@@ -132,7 +136,7 @@
"Povolit",
"boost"
],
"desc": "Povolit boost držením předního tlačítka při pájení?"
"desc": "Povolit boost podržením předního tlačítka při pájení?"
},
"BoostTemperature": {
"text": "",
@@ -145,7 +149,7 @@
"AutoStart": {
"text": "",
"text2": [
"Auto",
"Automatický",
"start"
],
"desc": "Při startu ihned nahřát hrot?"
@@ -196,39 +200,55 @@
"Rychlost",
"popisků"
],
"desc": "Rychlost skrolování popisků podobných tomuto <P=Pomalu,R=Rychle>"
"desc": "Rychlost posuvu popisků podobných tomuto <P=Pomalu, R=Rychle>"
},
"TipModel": {
"text": "TIPMO",
"text2": [
"Tip",
"Model"
"Model",
"hrotu"
],
"desc": "Tip Model selection"
"desc": "Výběr modelu hrotu."
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Simple",
"Calibration"
"Jednoduchá",
"kalibrace"
],
"desc": "Simple Calibration using Hot water"
"desc": "Jednoduchá kalibrace pomocí horké vody."
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Advanced",
"Calibration"
"Pokročilá",
"kalibrace"
],
"desc": "Advanced calibration using thermocouple on the tip"
"desc": "Pokročilá kalibrace pomocí termočlánku na hrotu."
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Power",
"Wattage"
"Výkon",
"ve wattech"
],
"desc": "Power Wattage of the power adapter used"
"desc": "Výkon použítého napájecího adaptéru ve wattech."
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "TIP DISCONNECTED",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "H",
"SettingLeftChar": "V",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "L",
"SettingStartSleepChar": "D",
"SettingStartNoneChar": "S"
},
"menuDouble": false,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "Spitze fehlt",
"SolderingAdvancedPowerPrompt": "Leistung: ",
"OffString": "Aus",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "J",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"aufnahme"
],
"desc": "Leistungsaufnahme der verwendeten Spannungsversorgung"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -1,235 +1,255 @@
{
"languageCode": "EN",
"languageLocalName": "English",
"cyrillicGlyphs": false,
"messages": {
"SettingsCalibrationDone": "Calibration done!",
"SettingsCalibrationWarning": "Please ensure the tip is at room temperature before continuing!",
"SettingsResetWarning": "Are you sure you want to reset settings to default values?",
"UVLOWarningString": "DC LOW",
"UndervoltageString": "Undervoltage",
"InputVoltageString": "Input V: ",
"WarningTipTempString": "Tip Temp: ",
"BadTipString": "BAD TIP",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Sleeping...",
"WarningSimpleString": "HOT!",
"WarningAdvancedString": "!!! TIP HOT !!!",
"SleepingTipAdvancedString": "Tip:",
"IdleTipString": "Tip:",
"IdleSetString": " Set:",
"TipDisconnectedString": "TIP DISCONNECTED",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK",
"YourGainMessage":"Your Gain:"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
},
"menuDouble": true,
"menuGroups": {
"SolderingMenu": {
"text2": [
"Soldering",
"Settings"
],
"desc": "Soldering settings"
},
"PowerSavingMenu": {
"text2": [
"Sleep",
"Modes"
],
"desc": "Power saving settings"
},
"UIMenu": {
"text2": [
"User",
"Interface"
],
"desc": "User interface settings"
},
"AdvancedMenu": {
"text2": [
"Advanced",
"Options"
],
"desc": "Advanced options"
}
},
"menuOptions": {
"PowerSource": {
"text": "PWRSC",
"text2": [
"Power",
"source"
],
"desc": "Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell>"
},
"SleepTemperature": {
"text": "STMP",
"text2": [
"Sleep",
"temp"
],
"desc": "Sleep Temperature <C>"
},
"SleepTimeout": {
"text": "STME",
"text2": [
"Sleep",
"timeout"
],
"desc": "Sleep Timeout <Minutes/Seconds>"
},
"ShutdownTimeout": {
"text": "SHTME",
"text2": [
"Shutdown",
"timeout"
],
"desc": "Shutdown Timeout <Minutes>"
},
"MotionSensitivity": {
"text": "MSENSE",
"text2": [
"Motion",
"sensitivity"
],
"desc": "Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>"
},
"TemperatureUnit": {
"text": "TMPUNT",
"text2": [
"Temperature",
"units"
],
"desc": "Temperature Unit <C=Celsius F=Fahrenheit>"
},
"AdvancedIdle": {
"text": "ADVIDL",
"text2": [
"Detailed",
"idle screen"
],
"desc": "Display detailed information in a smaller font on the idle screen."
},
"DisplayRotation": {
"text": "DSPROT",
"text2": [
"Display",
"orientation"
],
"desc": "Display Orientation <A. Automatic L. Left Handed R. Right Handed>"
},
"BoostEnabled": {
"text": "BOOST",
"text2": [
"Boost mode",
"enabled"
],
"desc": "Enable front key enters boost mode 450C mode when soldering"
},
"BoostTemperature": {
"text": "BTMP",
"text2": [
"Boost",
"temp"
],
"desc": "Temperature when in \"boost\" mode"
},
"AutoStart": {
"text": "ASTART",
"text2": [
"Auto",
"start"
],
"desc": "Automatically starts the iron into soldering on power up. T=Soldering, S= Sleep mode,F=Off"
},
"CooldownBlink": {
"text": "CLBLNK",
"text2": [
"Cooldown",
"blink"
],
"desc": "Blink the temperature on the cooling screen while the tip is still hot."
},
"TemperatureCalibration": {
"text": "TMP CAL?",
"text2": [
"Calibrate",
"temperature?"
],
"desc": "Calibrate tip offset."
},
"SettingsReset": {
"text": "RESET?",
"text2": [
"Factory",
"Reset?"
],
"desc": "Reset all settings"
},
"VoltageCalibration": {
"text": "CAL VIN?",
"text2": [
"Calibrate",
"input voltage?"
],
"desc": "VIN Calibration. Buttons adjust, long press to exit"
},
"AdvancedSoldering": {
"text": "ADVSLD",
"text2": [
"Detailed",
"solder screen"
],
"desc": "Display detailed information while soldering"
},
"ScrollingSpeed": {
"text": "DESCSP",
"text2": [
"Scrolling",
"Speed"
],
"desc": "Speed this text scrolls past at"
},
"TipModel": {
"text": "TIPMO",
"text2": [
"Tip",
"Model"
],
"desc": "Tip Model selection"
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Simple",
"Calibration"
],
"desc": "Simple Calibration using Hot water"
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Advanced",
"Calibration"
],
"desc": "Advanced calibration using thermocouple on the tip"
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Power",
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
}
}
{
"languageCode": "EN",
"languageLocalName": "English",
"cyrillicGlyphs": false,
"messages": {
"SettingsCalibrationDone": "Calibration done!",
"SettingsCalibrationWarning": "Please ensure the tip is at room temperature before continuing!",
"SettingsResetWarning": "Are you sure you want to reset settings to default values?",
"UVLOWarningString": "DC LOW",
"UndervoltageString": "Undervoltage",
"InputVoltageString": "Input V: ",
"WarningTipTempString": "Tip Temp: ",
"BadTipString": "BAD TIP",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Sleeping...",
"WarningSimpleString": "HOT!",
"WarningAdvancedString": "!!! TIP HOT !!!",
"SleepingTipAdvancedString": "Tip:",
"IdleTipString": "Tip:",
"IdleSetString": " Set:",
"TipDisconnectedString": "TIP DISCONNECTED",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage": "Reset OK",
"YourGainMessage": "Your Gain:",
"SettingsResetMessage": "Settings were\nreset!"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
"SolderingMenu": {
"text2": [
"Soldering",
"Settings"
],
"desc": "Soldering settings"
},
"PowerSavingMenu": {
"text2": [
"Sleep",
"Modes"
],
"desc": "Power saving settings"
},
"UIMenu": {
"text2": [
"User",
"Interface"
],
"desc": "User interface settings"
},
"AdvancedMenu": {
"text2": [
"Advanced",
"Options"
],
"desc": "Advanced options"
}
},
"menuOptions": {
"PowerSource": {
"text": "PWRSC",
"text2": [
"Power",
"source"
],
"desc": "Power source. Sets cutoff voltage. <DC 10V> <S 3.3V per cell, disable power limit>"
},
"SleepTemperature": {
"text": "STMP",
"text2": [
"Sleep",
"temp"
],
"desc": "Sleep Temperature <C>"
},
"SleepTimeout": {
"text": "STME",
"text2": [
"Sleep",
"timeout"
],
"desc": "Sleep Timeout <Minutes/Seconds>"
},
"ShutdownTimeout": {
"text": "SHTME",
"text2": [
"Shutdown",
"timeout"
],
"desc": "Shutdown Timeout <Minutes>"
},
"MotionSensitivity": {
"text": "MSENSE",
"text2": [
"Motion",
"sensitivity"
],
"desc": "Motion Sensitivity <0.Off 1.least sensitive 9.most sensitive>"
},
"TemperatureUnit": {
"text": "TMPUNT",
"text2": [
"Temperature",
"units"
],
"desc": "Temperature Unit <C=Celsius F=Fahrenheit>"
},
"AdvancedIdle": {
"text": "ADVIDL",
"text2": [
"Detailed",
"idle screen"
],
"desc": "Display detailed information in a smaller font on the idle screen."
},
"DisplayRotation": {
"text": "DSPROT",
"text2": [
"Display",
"orientation"
],
"desc": "Display Orientation <A. Automatic L. Left Handed R. Right Handed>"
},
"BoostEnabled": {
"text": "BOOST",
"text2": [
"Boost mode",
"enabled"
],
"desc": "Enable front key enters boost mode 450C mode when soldering"
},
"BoostTemperature": {
"text": "BTMP",
"text2": [
"Boost",
"temp"
],
"desc": "Temperature when in \"boost\" mode"
},
"AutoStart": {
"text": "ASTART",
"text2": [
"Auto",
"start"
],
"desc": "Automatically starts the iron into soldering on power up. A=Soldering, S= Sleep mode, M=Off"
},
"CooldownBlink": {
"text": "CLBLNK",
"text2": [
"Cooldown",
"blink"
],
"desc": "Blink the temperature on the cooling screen while the tip is still hot."
},
"TemperatureCalibration": {
"text": "TMP CAL?",
"text2": [
"Calibrate",
"temperature?"
],
"desc": "Calibrate tip offset."
},
"SettingsReset": {
"text": "RESET?",
"text2": [
"Factory",
"Reset?"
],
"desc": "Reset all settings"
},
"VoltageCalibration": {
"text": "CAL VIN?",
"text2": [
"Calibrate",
"input voltage?"
],
"desc": "VIN Calibration. Buttons adjust, long press to exit"
},
"AdvancedSoldering": {
"text": "ADVSLD",
"text2": [
"Detailed",
"solder screen"
],
"desc": "Display detailed information while soldering"
},
"ScrollingSpeed": {
"text": "DESCSP",
"text2": [
"Scrolling",
"Speed"
],
"desc": "Speed this text scrolls past at"
},
"TipModel": {
"text": "TIPMO",
"text2": [
"Tip",
"Model"
],
"desc": "Tip Model selection"
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Simple",
"Calibration"
],
"desc": "Simple Calibration using Hot water"
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Advanced",
"Calibration"
],
"desc": "Advanced calibration using thermocouple on the tip"
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Power",
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "SIN PUNTA",
"SolderingAdvancedPowerPrompt": "POTENCIA: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "I",
"SettingAutoChar": "A",
"SettingFastChar": "R",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "V",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "KÄRKI ON IRTI",
"SolderingAdvancedPowerPrompt": "Teho: ",
"OffString": "OFF",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "O",
"SettingLeftChar": "V",
"SettingAutoChar": "A",
"SettingFastChar": "N",
"SettingSlowChar": "H"
"SettingSlowChar": "H",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "PANNE DÉBRANCHÉE",
"SolderingAdvancedPowerPrompt": "Puissance: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "G",
"SettingAutoChar": "A",
"SettingFastChar": "R",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "A",
"SettingStartSleepChar": "V",
"SettingStartNoneChar": "D"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"l'alimentation"
],
"desc": "Puissance de l'alimentation utilisée"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "VRH NIJE SPOJEN!",
"SolderingAdvancedPowerPrompt": "Snaga: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "B",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"napajanja"
],
"desc": "Snaga modula za napajanje"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "HEGY LEVÉVE",
"SolderingAdvancedPowerPrompt": "Telj: ",
"OffString": "Ki",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "J",
"SettingLeftChar": "B",
"SettingAutoChar": "A",
"SettingFastChar": "G",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": false,
"menuGroups": {
@@ -229,6 +232,22 @@
"teljesítmény"
],
"desc": "A tápegység által leadott teljesítmény"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "PUNTA ASSENTE",
"SolderingAdvancedPowerPrompt": "Potenz:",
"OffString": "OFF",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "S",
"SettingAutoChar": "A",
"SettingFastChar": "V",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "A",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "D"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"alimentaz"
],
"desc": "Imposta la potenza massima erogabile dall'alimentatore in uso"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "ANTGAL ATJUNGTAS",
"SolderingAdvancedPowerPrompt": "Maitinimas: ",
"OffString": "Išj",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "K",
"SettingAutoChar": "A",
"SettingFastChar": "T",
"SettingSlowChar": "N"
"SettingSlowChar": "N",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"vatais"
],
"desc": "Maitinimo bloko galia vatais"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "TIP LOSGEKOPPELD",
"SolderingAdvancedPowerPrompt": "vermogen: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "Punt ONTKOPPELD",
"SolderingAdvancedPowerPrompt": "Vermogen: ",
"OffString": "Uit",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "S",
"SettingSlowChar": "T"
"SettingSlowChar": "T",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Watt"
],
"desc": "Vermogen van de adapter"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "SPISS FRAKOBLET",
"SolderingAdvancedPowerPrompt": "Effekt: ",
"OffString": "Av",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "H",
"SettingLeftChar": "V",
"SettingAutoChar": "A",
"SettingFastChar": "H",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "L",
"SettingStartSleepChar": "D",
"SettingStartNoneChar": "I"
},
"menuDouble": false,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "GROT ODŁĄCZONY",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Wyłącz",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "P",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "N"
},
"menuDouble": false,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattach"
],
"desc": "Moc używanego zasilacza w Watach"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "SEM PONTA",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "C",
"SettingAutoChar": "A",
"SettingFastChar": "R",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Fonte"
],
"desc": "Potência da fonte usada (Watt)"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "Жало отключено",
"SolderingAdvancedPowerPrompt": "Питание: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "П",
"SettingLeftChar": "Л",
"SettingAutoChar": "A",
"SettingFastChar": "+",
"SettingSlowChar": "-"
"SettingSlowChar": "-",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "TIP DISCONNECTED",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": false,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -0,0 +1,254 @@
{
"languageCode": "SL",
"languageLocalName": "Slovensko",
"cyrillicGlyphs": false,
"messages": {
"SettingsCalibrationDone": "Kalibracija opravljena!",
"SettingsCalibrationWarning": "Preden nadaljujete, mora biti konica na sobni temperaturi!",
"SettingsResetWarning": "Ste prepričani, da želite ponastaviti nastavitve na privzete vrednosti?",
"UVLOWarningString": "NIZKA U",
"UndervoltageString": "Nizka napetost",
"InputVoltageString": "Vhodna U: ",
"WarningTipTempString": "Temp. kon.: ",
"BadTipString": "OKVARA K",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Spim...",
"WarningSimpleString": "HOT!",
"WarningAdvancedString": "!!!VROČA KON.!!!",
"SleepingTipAdvancedString": "Knica:",
"IdleTipString": "Kon:",
"IdleSetString": " nst.:",
"TipDisconnectedString": "KONICA ODSTRANJ.",
"SolderingAdvancedPowerPrompt": "Moč: ",
"OffString": "Izk",
"ResetOKMessage": "Reset OK",
"YourGainMessage": "Ojačan.:"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "L",
"SettingAutoChar": "S",
"SettingFastChar": "H",
"SettingSlowChar": "P",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
"SolderingMenu": {
"text2": [
"Nastavitve",
"spajkanja"
],
"desc": "Nastavitve spajkanja"
},
"PowerSavingMenu": {
"text2": [
"Načini",
"spanja"
],
"desc": "Nastavitve varčevanja z energijo"
},
"UIMenu": {
"text2": [
"Uporabniški",
"vmesnik"
],
"desc": "Nastavitve uporabniškega vmesnika"
},
"AdvancedMenu": {
"text2": [
"Napredne",
"možnosti"
],
"desc": "Napredne možnosti"
}
},
"menuOptions": {
"PowerSource": {
"text": "PWRSC",
"text2": [
"Vir",
"napajanja"
],
"desc": "Vir napajanja. Nastavi napetost izklopa. <DC 10V> <S 3.3V na celico>"
},
"SleepTemperature": {
"text": "STMP",
"text2": [
"Temp. med",
"spanjem"
],
"desc": "Temperatura med spanjem <C>"
},
"SleepTimeout": {
"text": "STME",
"text2": [
"Čas do",
"spanja"
],
"desc": "Čas pred spanjem <minute/sekunde>"
},
"ShutdownTimeout": {
"text": "SHTME",
"text2": [
"Čas do",
"izklopa"
],
"desc": "Čas pred izklopom <minute>"
},
"MotionSensitivity": {
"text": "MSENSE",
"text2": [
"Občutljivost",
"premikanja"
],
"desc": "Občutljivost premikanja <0.izklopljeno 1.najmanj 9.najbolj občutljivo>"
},
"TemperatureUnit": {
"text": "TMPUNT",
"text2": [
"Enota za",
"temperaturo"
],
"desc": "Enota za temperaturo <C=celzija F=fahrenheita>"
},
"AdvancedIdle": {
"text": "ADVIDL",
"text2": [
"Več info na",
"zaslonu v mir"
],
"desc": "Prikaže več informacij z manjšo pisavo na zaslonu med mirovanjem."
},
"DisplayRotation": {
"text": "DSPROT",
"text2": [
"Orientacija",
"zaslona"
],
"desc": "Orientacija zaslona <S. samodejno L. levo D. desno>"
},
"BoostEnabled": {
"text": "BOOST",
"text2": [
"Omogoči",
"boost mode"
],
"desc": "Omogoči, da tipka za naprej zagreje konico na 450C."
},
"BoostTemperature": {
"text": "BTMP",
"text2": [
"Temperat.",
"v boost"
],
"desc": "Temperatura v \"boost\" načinu"
},
"AutoStart": {
"text": "ASTART",
"text2": [
"Samodejni",
"zagon"
],
"desc": "Samodejno segrej konico ob vklopu. T=segrej, S=spanje, F=izklop"
},
"CooldownBlink": {
"text": "CLBLNK",
"text2": [
"Utripanje med",
"hlajenjem"
],
"desc": "Utripaj temperaturo med hlajenjem, ko je konica še vroča."
},
"TemperatureCalibration": {
"text": "TMP CAL?",
"text2": [
"Kalibriram",
"temperaturo?"
],
"desc": "Kalibracija temperature na konici."
},
"SettingsReset": {
"text": "RESET?",
"text2": [
"Tovarniške",
"nastavitve?"
],
"desc": "Ponastavitev vseh nastavitev"
},
"VoltageCalibration": {
"text": "CAL VIN?",
"text2": [
"Kalibriram",
"vhodno napetost?"
],
"desc": "Kalibracija VIN. Nastavitve z gumbi, dolgi pritisk za izhod."
},
"AdvancedSoldering": {
"text": "ADVSLD",
"text2": [
"Več info na",
"zaslonu spaj."
],
"desc": "Prikaže več informacij z manjšo pisavo na zaslonu med spajkanjem."
},
"ScrollingSpeed": {
"text": "DESCSP",
"text2": [
"Hitrost",
"besedila"
],
"desc": "Hitrost, s katero se prikazuje besedilo"
},
"TipModel": {
"text": "TIPMO",
"text2": [
"Model",
"konice"
],
"desc": "Izbira tipa konice"
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Preprosta",
"kalibracija"
],
"desc": "Preprosta kalibracija z vročo vodo."
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Napredna",
"kalibracija"
],
"desc": "Napredna kalibracija s termočlenom na konici"
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Moč napajalnega",
"vira"
],
"desc": "Moč v W napajalnega vira"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "ВРХ НИЈЕ СПОЈЕН",
"SolderingAdvancedPowerPrompt": "Снага: ",
"OffString": "Иск",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "Д",
"SettingLeftChar": "Л",
"SettingAutoChar": "А",
"SettingFastChar": "Б",
"SettingSlowChar": "С"
"SettingSlowChar": "С",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"снага"
],
"desc": "Снага напајања у ватима."
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "VRH NIJE SPOJEN",
"SolderingAdvancedPowerPrompt": "Snaga: ",
"OffString": "Isk",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "D",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "B",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"snaga"
],
"desc": "Snaga napajanja u vatima."
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -21,14 +21,17 @@
"TipDisconnectedString": "SPETS URTAGEN",
"SolderingAdvancedPowerPrompt": "Ström: ",
"OffString": "Av",
"ResetOKMessage":"Reset OK"
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "H",
"SettingLeftChar": "V",
"SettingAutoChar": "A",
"SettingFastChar": "S",
"SettingSlowChar": "L"
"SettingSlowChar": "L",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
@@ -229,6 +232,22 @@
"Wattage"
],
"desc": "Power Wattage of the power adapter used"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}

View File

@@ -1,64 +1,67 @@
{
"languageCode": "TR",
"languageLocalName": "Türk",
"languageLocalName": "Türkçe",
"cyrillicGlyphs": false,
"messages": {
"SettingsCalibrationDone": "Calibration done!",
"SettingsCalibrationDone": "Kalibrasyon tamamlandı!",
"SettingsCalibrationWarning": "Lütfen devam etmeden önce ucun oda sıcaklığında olduğunu garantiye alın!",
"SettingsResetWarning": "Are you sure to reset settings to default values?",
"SettingsResetWarning": "Ayarları varsayılan değerlere sıfırlamak istediğinizden emin misiniz?",
"UVLOWarningString": "DC LOW",
"UndervoltageString": "Undervoltage",
"InputVoltageString": "Input V: ",
"WarningTipTempString": "Tip Temp: ",
"BadTipString": "BAD TIP",
"UndervoltageString": "Düşüş Voltaj",
"InputVoltageString": "Giriş V: ",
"WarningTipTempString": "Uç Sıcaklığı: ",
"BadTipString": "KÖTÜ UÇ",
"SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Uyuyor...",
"WarningSimpleString": "HOT!",
"WarningSimpleString": "SICAK!",
"WarningAdvancedString": "UYARI! UÇ SICAK!",
"SleepingTipAdvancedString": "Tip:",
"IdleTipString": "Tip:",
"IdleSetString": " Set:",
"TipDisconnectedString": "TIP DISCONNECTED",
"SolderingAdvancedPowerPrompt": "Power: ",
"OffString": "Off",
"ResetOKMessage":"Reset OK"
"SleepingTipAdvancedString": ":",
"IdleTipString": ":",
"IdleSetString": " Ayarla:",
"TipDisconnectedString": "UÇ ÇIKARILDI",
"SolderingAdvancedPowerPrompt": "Güç: ",
"OffString": "Kapalı",
"ResetOKMessage": "Reset Tamam"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingAutoChar": "A",
"SettingFastChar": "F",
"SettingSlowChar": "S"
"SettingSlowChar": "S",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": false,
"menuGroups": {
"SolderingMenu": {
"text2": [
"Soldering",
"Settings"
"Lehimleme",
"Ayarları"
],
"desc": "Soldering settings"
"desc": "Lehimleme Ayarları"
},
"PowerSavingMenu": {
"text2": [
"Sleep",
"Modes"
"Uyku",
"Modları"
],
"desc": "Power Saving Settings"
"desc": "Güç Tasarrufu Ayarları"
},
"UIMenu": {
"text2": [
"User",
"Interface"
"Kullanıcı",
"Arayüzü"
],
"desc": "User Interface settings"
"desc": "Kullanıcı Arayüzü Ayarları"
},
"AdvancedMenu": {
"text2": [
"Advanced",
"Options"
"Gelişmiş",
"Ayarlar"
],
"desc": "Advanced options"
"desc": "Gelişmiş Ayarlar"
}
},
"menuOptions": {
@@ -201,34 +204,50 @@
"TipModel": {
"text": "TIPMO",
"text2": [
"Tip",
"Model"
"",
"Modeli"
],
"desc": "Tip Model selection"
"desc": " Modeli seçimi"
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Simple",
"Calibration"
"Basit",
"Kalibrasyon"
],
"desc": "Simple Calibration using Hot water"
"desc": "Sıcak su kullanarak basit kalibrasyon"
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Advanced",
"Calibration"
"Gelişmiş",
"Kalibrasyon"
],
"desc": "Advanced calibration using thermocouple on the tip"
"desc": "Uçtaki ısı sensörünü kullanarak gelişmiş kalibrasyon"
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Power",
"Wattage"
"Güç",
"Miktarı(W)"
],
"desc": "Power Wattage of the power adapter used"
"desc": "Kullanılan adaptörün güç miktarı"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -3,7 +3,7 @@
"languageLocalName": "Українська",
"cyrillicGlyphs": true,
"messages": {
"SettingsCalibrationDone": "Calibration done!",
"SettingsCalibrationDone": "Калібрування виконане!",
"SettingsCalibrationWarning": "Переконайтеся, що жало охололо до кімнатної температури, перш ніж продовжувати!",
"SettingsResetWarning": "Ви дійсно хочете скинути налаштування до значень за замовчуванням?",
"UVLOWarningString": "АККУМ--",
@@ -20,29 +20,32 @@
"IdleSetString": " ->",
"TipDisconnectedString": "Жало вимкнено!",
"SolderingAdvancedPowerPrompt": "Живлення: ",
"OffString": "Вим",
"ResetOKMessage":"Reset OK"
"OffString": "Вимк",
"ResetOKMessage": "Reset OK"
},
"characters": {
"SettingRightChar": "R",
"SettingLeftChar": "L",
"SettingRightChar": "П",
"SettingLeftChar": "Л",
"SettingAutoChar": "A",
"SettingFastChar": "+",
"SettingSlowChar": "-"
"SettingSlowChar": "-",
"SettingStartSolderingChar": "T",
"SettingStartSleepChar": "S",
"SettingStartNoneChar": "F"
},
"menuDouble": true,
"menuGroups": {
"SolderingMenu": {
"text2": [
"Пайка",
""
"Параметри",
"пайки"
],
"desc": "Налаштування для режиму пайки. Діють при включеному жалі."
},
"PowerSavingMenu": {
"text2": [
"Сон",
""
"Режим",
"сну"
],
"desc": "Налаштування при бездіяльності. Корисно що б не обпектися і з часом не спалити житло."
},
@@ -51,24 +54,24 @@
"Інтерфейс",
""
],
"desc": "Користувальницький інтерфейс."
"desc": "Параметри користувальницького інтерфейсу."
},
"AdvancedMenu": {
"text2": [
"Інші",
""
"Додаткові",
"параметри"
],
"desc": "Розширені налаштування. Додаткові зручності."
}
},
"menuOptions": {
"PowerSource": {
"text": "",
"text": "ДжЖив",
"text2": [
"Джерело",
"живлення"
],
"desc": "Установка напруги відключення. <DC - 10V, 3S - 9.9V, 4S - 13.2V, 5S - 16.5V, 6S - 19.8V>"
"desc": "Встановлення напруги відключення. <DC - 10V, 3S - 9.9V, 4S - 13.2V, 5S - 16.5V, 6S - 19.8V>"
},
"SleepTemperature": {
"text": "",
@@ -81,10 +84,10 @@
"SleepTimeout": {
"text": "",
"text2": [
"Таймаут",
"Тайм-аут",
"сну"
],
"desc": "Час до переходу в режим очікування <Доступно отключение>"
"desc": "Час до переходу в режим очікування <Хвилини>"
},
"ShutdownTimeout": {
"text": "",
@@ -92,7 +95,7 @@
"Часу до",
"вимкнення"
],
"desc": "Час до відключення <Доступно відключення>"
"desc": "Час до відключення <Хвилини>"
},
"MotionSensitivity": {
"text": "",
@@ -100,7 +103,7 @@
"Чутл. сенсо-",
"ру руху"
],
"desc": "Акселерометр <0 - Викл. 1 хв. чутливості 9 - макс. чутливості>"
"desc": "Акселерометр <0 - Вимк. 1 хв. чутливості 9 - макс. чутливості>"
},
"TemperatureUnit": {
"text": "",
@@ -116,7 +119,7 @@
"Детальний ре-",
"жим очікуван."
],
"desc": "Показувати детальну в режимі налаштувань <Замість картинки>"
"desc": "Показувати детальну інформацію маленьким шрифтом на домашньому екрані"
},
"DisplayRotation": {
"text": "",
@@ -124,7 +127,7 @@
"Автоповорот",
"екрану"
],
"desc": "Орієнтація дисплея <A - Автоповорот, L - Лівша, R - Правша>"
"desc": "Орієнтація дисплея <A - Автоповорот, Л - Лівша, П - Правша>"
},
"BoostEnabled": {
"text": "",
@@ -148,7 +151,7 @@
"Гарячий",
"старт"
],
"desc": "Автоматичний перехід в режим пайки при включенні живлення."
"desc": "Автоматичний перехід в режим пайки при ввімкнені живлення."
},
"CooldownBlink": {
"text": "",
@@ -172,13 +175,13 @@
"Скинути всі",
"налаштування?"
],
"desc": "Скидання всіх параметрів до вихідних значень."
"desc": "Скидання всіх параметрів до стандартних значень."
},
"VoltageCalibration": {
"text": "",
"text2": [
"Калібровка",
"напруга"
"напруги"
],
"desc": "Калібрування напруги входу. Налаштувати кнопками, натиснути і утримати щоб завершити."
},
@@ -201,34 +204,50 @@
"TipModel": {
"text": "TIPMO",
"text2": [
"Tip",
"Model"
"Модель",
"Жало"
],
"desc": "Tip Model selection"
"desc": "Вибір моделі жала"
},
"SimpleCalibrationMode": {
"text": "SMPCAL",
"text2": [
"Simple",
"Calibration"
"Просте",
"Калібрування"
],
"desc": "Simple Calibration using Hot water"
"desc": "Просте калібрування з використанням гарячої води"
},
"AdvancedCalibrationMode": {
"text": "ADVCAL",
"text2": [
"Advanced",
"Calibration"
"Детальне",
"Калібрування"
],
"desc": "Advanced calibration using thermocouple on the tip"
"desc": "Калібрування за допомогою термопари"
},
"PowerInput": {
"text": "PWRW",
"text2": [
"Power",
"Wattage"
"Потужність",
"дж. живл."
],
"desc": "Power Wattage of the power adapter used"
"desc": "Потужність джерела живлення в Ватах"
},
"PowerLimitEnable": {
"text": "PLIMEN",
"text2": [
"P Limit",
"Enable"
],
"desc": "Enable power limit"
},
"PowerLimit": {
"text": "PLIM",
"text2": [
"Power",
"Limit"
],
"desc": "Maximum power the iron can use <Watts>"
}
}
}
}

View File

@@ -1,241 +1,268 @@
var def =
{
"messages": [
{
"id": "SettingsCalibrationDone"
},
{
"id": "SettingsCalibrationWarning"
},
{
"id": "SettingsResetWarning"
},
{
"id": "UVLOWarningString",
"maxLen": 8
},
{
"id": "UndervoltageString",
"maxLen": 16
},
{
"id": "InputVoltageString",
"maxLen": 11,
"note": "Preferably end with a space"
},
{
"id": "WarningTipTempString",
"maxLen": 12,
"note": "Preferably end with a space"
},
{
"id": "BadTipString",
"maxLen": 8
},
{
"id": "SleepingSimpleString",
"maxLen": 4
},
{
"id": "SleepingAdvancedString",
"maxLen": 16
},
{
"id": "WarningSimpleString",
"maxLen": 4
},
{
"id": "WarningAdvancedString",
"maxLen": 16
},
{
"id": "SleepingTipAdvancedString",
"maxLen": 6
},
{
"id": "IdleTipString",
"lenSum":
{
"fields": ["IdleTipString", "IdleSetString"],
"maxLen": 10
}
},
{
"id": "IdleSetString",
"lenSum":
{
"fields": ["IdleTipString", "IdleSetString"],
"maxLen": 10
},
"note": "Preferably start with a space"
},
{
"id": "TipDisconnectedString",
"maxLen": 16
},
{
"id": "SolderingAdvancedPowerPrompt",
"maxLen": null
},
{
"id": "OffString",
"maxLen": 3
},
{
"id": "ResetOKMessage",
"maxLen": 8
},
{
"id": "YourGainMessage",
"maxLen": 8,
"default":"Your Gain"
}
],
"characters": [
{
"id": "SettingRightChar",
"len": 1
},
{
"id": "SettingLeftChar",
"len": 1
},
{
"id": "SettingAutoChar",
"len": 1
},
{
"id": "SettingFastChar",
"len": 1
},
{
"id": "SettingSlowChar",
"len": 1
}
],
"menuGroups": [
{
"id": "SolderingMenu",
"maxLen": 11
},
{
"id": "PowerSavingMenu",
"maxLen": 11
},
{
"id": "UIMenu",
"maxLen": 11
},
{
"id": "AdvancedMenu",
"maxLen": 11
}
],
"menuOptions": [
{
"id": "PowerSource",
"maxLen": 5,
"maxLen2": 11
},
{
"id": "SleepTemperature",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "SleepTimeout",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "ShutdownTimeout",
"maxLen": 5,
"maxLen2": 11
},
{
"id": "MotionSensitivity",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "TemperatureUnit",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "AdvancedIdle",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "DisplayRotation",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "BoostEnabled",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "BoostTemperature",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "AutoStart",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "CooldownBlink",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "TemperatureCalibration",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "SettingsReset",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "VoltageCalibration",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "AdvancedSoldering",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "ScrollingSpeed",
"maxLen": 6,
"maxLen2": 11
},
{
"id": "TipModel",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "SimpleCalibrationMode",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "AdvancedCalibrationMode",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "PowerInput",
"maxLen": 8,
"maxLen2": 16
}
]
}
var def =
{
"messages": [
{
"id": "SettingsCalibrationDone"
},
{
"id": "SettingsCalibrationWarning"
},
{
"id": "SettingsResetWarning"
},
{
"id": "UVLOWarningString",
"maxLen": 8
},
{
"id": "UndervoltageString",
"maxLen": 16
},
{
"id": "InputVoltageString",
"maxLen": 11,
"note": "Preferably end with a space"
},
{
"id": "WarningTipTempString",
"maxLen": 12,
"note": "Preferably end with a space"
},
{
"id": "BadTipString",
"maxLen": 8
},
{
"id": "SleepingSimpleString",
"maxLen": 4
},
{
"id": "SleepingAdvancedString",
"maxLen": 16
},
{
"id": "WarningSimpleString",
"maxLen": 4
},
{
"id": "WarningAdvancedString",
"maxLen": 16
},
{
"id": "SleepingTipAdvancedString",
"maxLen": 6
},
{
"id": "IdleTipString",
"lenSum":
{
"fields": ["IdleTipString", "IdleSetString"],
"maxLen": 10
}
},
{
"id": "IdleSetString",
"lenSum":
{
"fields": ["IdleTipString", "IdleSetString"],
"maxLen": 10
},
"note": "Preferably start with a space"
},
{
"id": "TipDisconnectedString",
"maxLen": 16
},
{
"id": "SolderingAdvancedPowerPrompt",
"maxLen": null
},
{
"id": "OffString",
"maxLen": 3
},
{
"id": "ResetOKMessage",
"maxLen": 8
},
{
"id": "YourGainMessage",
"maxLen": 8,
"default": "Your Gain"
},
{
"id": "SettingsResetMessage",
"maxLen": 16,
"default": "Settings were\nreset!"
}
],
"characters": [
{
"id": "SettingRightChar",
"len": 1
},
{
"id": "SettingLeftChar",
"len": 1
},
{
"id": "SettingAutoChar",
"len": 1
},
{
"id": "SettingFastChar",
"len": 1
},
{
"id": "SettingSlowChar",
"len": 1
},
{
"id": "SettingStartSolderingChar",
"len": 1
},
{
"id": "SettingStartSleepChar",
"len": 1
},
{
"id": "SettingStartNoneChar",
"len": 1
}
],
"menuGroups": [
{
"id": "SolderingMenu",
"maxLen": 11
},
{
"id": "PowerSavingMenu",
"maxLen": 11
},
{
"id": "UIMenu",
"maxLen": 11
},
{
"id": "AdvancedMenu",
"maxLen": 11
}
],
"menuOptions": [
{
"id": "PowerSource",
"maxLen": 5,
"maxLen2": 11
},
{
"id": "SleepTemperature",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "SleepTimeout",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "ShutdownTimeout",
"maxLen": 5,
"maxLen2": 11
},
{
"id": "MotionSensitivity",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "TemperatureUnit",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "AdvancedIdle",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "DisplayRotation",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "BoostEnabled",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "BoostTemperature",
"maxLen": 4,
"maxLen2": 9
},
{
"id": "AutoStart",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "CooldownBlink",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "TemperatureCalibration",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "SettingsReset",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "VoltageCalibration",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "AdvancedSoldering",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "ScrollingSpeed",
"maxLen": 6,
"maxLen2": 11
},
{
"id": "TipModel",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "SimpleCalibrationMode",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "AdvancedCalibrationMode",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "PowerInput",
"maxLen": 8,
"maxLen2": 16
},
{
"id": "PowerLimitEnable",
"maxLen": 6,
"maxLen2": 13
},
{
"id": "PowerLimit",
"maxLen": 5,
"maxLen2": 11
}
]
}

View File

@@ -3,4 +3,4 @@ If you would like to contribute a translation, use the [Translation Editor](http
[Open a reference language file and optionally a target language file](https://github.com/Ralim/ts100/tree/master/Translation%20Editor).
You can create an issue with your updated json translation, or make your own pull request. If you make a pull request, also run `python3 make_translation.py` to regenerate the source file.
You can create a pull request with the new / updated json configuration file, and this will include this language into the new builds for the firmware.

2
build.sh Normal file
View File

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

13
ci/buildAll.sh Executable file
View File

@@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -e
set -u
mkdir -p /build/ci/artefacts
# Build STM code
cd /build/source/workspace/TS100/
bash ./build.sh || exit 1
echo "All Firmware built"
# Copy out all the final resulting files we would like to store for the next op
cp -r /build/source/workspace/TS100/Hexfile/*.hex /build/ci/artefacts/
cp -r /build/source/workspace/TS100/Hexfile/*.bin /build/ci/artefacts/

16
ci/secrets/decrypt.sh Executable file
View File

@@ -0,0 +1,16 @@
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
SECRETS="$DIR/encrypted/*.encrypted"
KEY="$DIR/../../codeship.aes"
mkdir -p $DIR/unencrypted
for f in $SECRETS
do
out="${f/.encrypted/.secret}"
out="${out/encrypted/unencrypted}"
echo $out
jet decrypt $f $out --key-path $KEY
done
echo "Done"

View File

@@ -0,0 +1,2 @@
codeship:v2
DUgOERb8iPVn95/DKIw9M7sgNjJlIlsaeE4PFV58tmmBu2sD1ooR7Y0L23bimC9a

8
codeship-services.yml Normal file
View File

@@ -0,0 +1,8 @@
builder:
build:
context: .
dockerfile: Dockerfile
cached: true
encrypted_env_file: ci/secrets/encrypted/deployment.encrypted
volumes:
- ./ci:/ci

6
codeship-steps.yml Normal file
View File

@@ -0,0 +1,6 @@
- type: parallel
name: Build the firmware
steps:
- name: build
service: builder
command: /build/ci/buildAll.sh

20
development.md Normal file
View File

@@ -0,0 +1,20 @@
# Development
Building this software can be performed two ways, using the STMCubeIDE or using command line tools.
## STM Cube IDE
The repository is setup to try and make this painless, when starting the IDE you can import the project by pointing the internal search to the workspace folder of this repository. If you start with a fresh installation, close the welcome screen tab, and then in the left sidebar, there is an option to "import". Select General -> Import existing projects -> Set the top location option to this repositories workspace -> Should find the TS100 project.
## Developing with command line tools & building a release
In the `workspace/TS100` 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.
`make -j8 lang=EN model=TS80`
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.
## Updating languages
To update the language translation files & associated font map, execute the `make_translation.py` code from the translations directory.

11
docker-compose.yml Normal file
View File

@@ -0,0 +1,11 @@
version: '3'
services:
builder:
stdin_open: true
tty: true
build:
context: .
command: /bin/bash
volumes:
- ./ci:/build/ci
- ./:/build/source

12
menu.md
View File

@@ -26,7 +26,7 @@ Please calibrate your iron if you have any issues with the cutoff voltage.
Note that cutoff messages can also be triggered by using a power supply that is too weak and fails under the load of the iron.
This is more critical than before with the new cell count based cutout voltage.
To calibrate your Iron:
To calibrate your iron:
1. Measure the input voltage with a multimeter and note it down.
2. Connect the input to your iron.
@@ -51,11 +51,11 @@ Some tips will have an offset on their readings, to calibrate this out perform t
4. Scroll down to the advanced menu, and then the temperature calibration
5. Press the button to change the option (tip button)
6. The display will start to scroll a warning message to check that the tip is at ambient temperature!
7. Press the button near the tip of the iron to confirm.
7. Press the button near the tip of the iron to confirm
8. The display will go to "...." for a short period of time as the unit measures the tip temperature and the handle temperature and compares them
9. The display will then go back to *TMP CAL*
10. Calibration is done, just exit the settings menu as normal
11. You're done. Enjoy your iron.
11. You're done, enjoy your iron!
### Calibration of custom tip
@@ -63,11 +63,11 @@ There are two methods to calibrate the tip, the simple mode which requires boili
Advanced mode is preffered.
In simple mode you first need to have the tip at room temperature to start, and then when promped place the tip into a cup of boiling water, wait a few seconds and then press a button to confirm.
In simple mode you first need to have the tip at room temperature to start, and then when prompted place the tip into a cup of boiling water, wait a few seconds and then press a button to confirm.
In advanced mode, follow instructions on the screen, you will need to adjust the ranges to find two calibration points by measuing the tip temperature directly. This tends to be significantly more accurate.
In advanced mode, follow instructions on the screen, you will need to adjust the ranges to find two calibration points by measuring the tip temperature directly. This tends to be significantly more accurate.
If you do calibrate your own values for a tip because its missing from the menu or because you think the one in the menu is really wrong, raise an issue on github and I'm happy to look at adding it or revising the existing settings.
If you do calibrate your own values for a tip because it's missing from the menu or because you think the one in the menu is really wrong, raise an issue on github and I'll be happy to look at adding it or revising the existing settings.
### Boost mode

24
power.md Normal file
View File

@@ -0,0 +1,24 @@
# Power & Performance
Both the TS100 and TS80 are PWM controlled resistive heating elements.
This means that the electronics in the handle can only turn the heating element on and off.
This *means* that the power proivded in the tip is 100% controlled by the supply voltage used.
Both irons at their simplest are just a resistor connected to your power source via a switch.
When the switch is on, the power in the resistor is `Current (I) times Volts (V)`.
Current through the resistor is `Volts (V) divided by Resistance (R)`.
Combining these two gives the common equation, power is `Volts (V) squared / Resistance (R)`.
The resistance of the tip is fixed, 8.5 ohms for the TS100 and 4.5 ohms for the TS80.
This means that for both irons, the power delivered to the soldering tip is proportional to the voltage used, squared.
This is why the TS100 performs poorly when run off 12V power supplies.
## Output Control & Regulation
Both soldering irons use a FET to switch the power to the soldering iron tip. This is a P-MOSFET and its controlled via a small transistor circuit, which in turn is controlled via the STM32. The STM32 controls this PWM output proportional to the output from the PID control loop running in the software.
To measure the tip temperature in the iron, the iron has a small op-amp connected across the terminals, this is setup to measure the voltage across the same terminals that are used the power the tip. In order to be able to read the small voltage generated by the thermocouple junction, the irons output must be turned off.
Once the output is turned off (via the FET), the system has a recovery time as the tip capacitance discharges and the op-amp exits saturation. After this delay period, the STM32 ADC samples the output of the op-amp 8 times quickly and then sets a flag to turn the PWM output back on.
This enforces a small dead time in the output signal while this occurs, so there is a balance between sampling the temperature often to maintain stable tip temperature control and sampling less often to increase the maximum power deliverable to the tip

2
start_dev.sh Executable file
View File

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

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RemoteSystemsTempFiles</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
<nature>org.eclipse.rse.ui.remoteSystemsTempNature</nature>
</natures>
</projectDescription>

Binary file not shown.

View File

@@ -1,146 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998" name="Debug" parent="fr.ac6.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="Generating binary and Printing size information:" postbuildStep="arm-none-eabi-objcopy -O binary &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.bin&quot;; arm-none-eabi-size &quot;${BuildArtifactFileName}&quot;;arm-none-eabi-objcopy -O ihex &quot;${BuildArtifactFileBaseName}.elf&quot; &quot;${BuildArtifactFileBaseName}.hex&quot;">
<folderInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998." name="/" resourcePath="">
<toolChain id="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug.35243712" name="Ac6 STM32 MCU GCC" superClass="fr.ac6.managedbuild.toolchain.gnu.cross.exe.debug">
<option id="fr.ac6.managedbuild.option.gnu.cross.mcu.2131093113" name="Mcu" superClass="fr.ac6.managedbuild.option.gnu.cross.mcu" useByScannerDiscovery="false" value="STM32F103T8Ux" valueType="string"/>
<option id="fr.ac6.managedbuild.option.gnu.cross.board.1847707232" name="Board" superClass="fr.ac6.managedbuild.option.gnu.cross.board" useByScannerDiscovery="false" value="ts100" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="fr.ac6.managedbuild.targetPlatform.gnu.cross.317155453" isAbstract="false" osList="all" superClass="fr.ac6.managedbuild.targetPlatform.gnu.cross"/>
<builder buildPath="${workspace_loc:/TS100}/Debug" id="fr.ac6.managedbuild.builder.gnu.cross.910934658" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="fr.ac6.managedbuild.builder.gnu.cross"/>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.319926124" name="MCU GCC Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler">
<option id="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level.1178790692" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.c.optimization.level.size" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.1214895662" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1766485383" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/core&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/device&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc/Legacy&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3&quot;"/>
</option>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.2127531885" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="STM32F103T8Ux"/>
<listOptionValue builtIn="false" value="MODEL_TS100"/>
<listOptionValue builtIn="false" value="STM32F1"/>
<listOptionValue builtIn="false" value="STM32"/>
<listOptionValue builtIn="false" value="DEBUG"/>
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
<listOptionValue builtIn="false" value="STM32F103xB"/>
<listOptionValue builtIn="false" value="USE_RTOS_SYSTICK"/>
</option>
<option id="gnu.c.compiler.option.dialect.std.565083189" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
<option id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata.338139343" name="Place the data in their own section (-fdata-sections)" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.fdata" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.176392389" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s.893418158" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.s"/>
</tool>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.1941847243" name="MCU G++ Compiler" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler">
<option id="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level.1283353237" name="Optimization Level" superClass="fr.ac6.managedbuild.gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="fr.ac6.managedbuild.gnu.cpp.optimization.level.size" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.224874042" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.include.paths.1749257477" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/core&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/device&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc/Legacy&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3&quot;"/>
</option>
<option id="gnu.cpp.compiler.option.preprocessor.def.766879664" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="STM32F103T8Ux"/>
<listOptionValue builtIn="false" value="MODEL_TS100"/>
<listOptionValue builtIn="false" value="STM32F1"/>
<listOptionValue builtIn="false" value="STM32"/>
<listOptionValue builtIn="false" value="DEBUG"/>
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
<listOptionValue builtIn="false" value="STM32F103xB"/>
<listOptionValue builtIn="false" value="USE_RTOS_SYSTICK"/>
</option>
<option id="gnu.cpp.compiler.option.dialect.std.1681974405" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/>
<option id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.fdata.1463726438" name="Place the data in their own section (-fdata-sections)" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.fdata" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.149685854" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s.1092052043" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.s"/>
</tool>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.c.linker.529125565" name="MCU GCC Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.c.linker"/>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker.617418615" name="MCU G++ Linker" superClass="fr.ac6.managedbuild.tool.gnu.cross.cpp.linker">
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.602897981" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="fr.ac6.managedbuild.tool.gnu.archiver.1863989965" name="MCU GCC Archiver" superClass="fr.ac6.managedbuild.tool.gnu.archiver"/>
<tool id="fr.ac6.managedbuild.tool.gnu.cross.assembler.2093484706" name="MCU GCC Assembler" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler">
<option id="gnu.both.asm.option.include.paths.1148882090" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/core&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/CMSIS/device&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc/Legacy&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/HAL_Driver/Inc&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;${ProjDirPath}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3&quot;"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.2116244351" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
<inputType id="fr.ac6.managedbuild.tool.gnu.cross.assembler.input.1096324633" superClass="fr.ac6.managedbuild.tool.gnu.cross.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
<fileInfo id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998.1352310611" name="LIS2DH12.hpp" rcbsApplicability="disable" resourcePath="inc/LIS2DH12.hpp" toolsToInvoke=""/>
<sourceEntries>
<entry excluding="Src/stm32f1xx_hal_timebase_tim_template.c|Src/stm32f1xx_hal_timebase_rtc_wakeup_template.c|Src/stm32f1xx_hal_timebase_rtc_alarm_template.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="HAL_Driver"/>
<entry excluding="Third_Party/FreeRTOS/Source/portable/MemMang/heap_1.c|Third_Party/FreeRTOS/Source/portable/MemMang/heap_2.c|Third_Party/FreeRTOS/Source/portable/MemMang/heap_3.c|Third_Party/FreeRTOS/Source/portable/MemMang/heap_5.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="inc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="startup"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="TS100.fr.ac6.managedbuild.target.gnu.cross.exe.1768512215" name="Executable" projectType="fr.ac6.managedbuild.target.gnu.cross.exe"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.release.723264573;fr.ac6.managedbuild.config.gnu.cross.exe.release.723264573.;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.1363306495;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.747173367">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998;fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998.;fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.1941847243;fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.149685854">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998;fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998.;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.319926124;fr.ac6.managedbuild.tool.gnu.cross.c.compiler.input.c.176392389">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="fr.ac6.managedbuild.config.gnu.cross.exe.release.723264573;fr.ac6.managedbuild.config.gnu.cross.exe.release.723264573.;fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.1414722294;fr.ac6.managedbuild.tool.gnu.cross.cpp.compiler.input.cpp.688034595">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="Debug">
<resource resourceType="PROJECT" workspacePath="/TS100"/>
</configuration>
<configuration configurationName="Release">
<resource resourceType="PROJECT" workspacePath="/TS100"/>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
</cproject>

View File

@@ -1,5 +0,0 @@
/Debug/
/Release/
/Hexfile/
/Objects/

View File

@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>TS100</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>fr.ac6.mcu.ide.core.MCUProjectNature</nature>
</natures>
</projectDescription>

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="fr.ac6.managedbuild.config.gnu.cross.exe.debug.1352500998" name="Debug">
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-283880394950776525" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
</extension>
</configuration>
</project>

View File

@@ -1,73 +0,0 @@
eclipse.preferences.version=1
fr.ac6.mcu.ide.source.checker.libnano.problem=Error
fr.ac6.mcu.ide.source.checker.libnano.problem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Float formatting support\\")"}
org.eclipse.cdt.codan.checkers.errnoreturn=Warning
org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false}
org.eclipse.cdt.codan.checkers.errreturnvalue=Error
org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"}
org.eclipse.cdt.codan.checkers.nocommentinside=-Error
org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"}
org.eclipse.cdt.codan.checkers.nolinecomment=-Error
org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"}
org.eclipse.cdt.codan.checkers.noreturn=Error
org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false}
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"}
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"}
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"}
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"}
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false}
org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"}
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true}
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"}
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"}
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"}
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"}
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"}
org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"}
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"}
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"}
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"}
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"}
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false}
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false}
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true}
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true}
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")}
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"}

View File

@@ -1,2 +0,0 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@@ -1,66 +0,0 @@
{
"configurations": [
{
"name": "Mac",
"includePath": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"defines": ["STM32F103T8Ux","STM32F1","STM32","USE_HAL_DRIVER","STM32F103xB","USE_RTOS_SYSTICK"],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"/usr/include",
"/usr/local/include",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
]
},
{
"name": "STM32",
"includePath": [
"${workspaceFolder}",
"/usr/include/c++/5",
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5/backward",
"/usr/lib/llvm-5.0/lib/clang/5.0.0/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include",
"${workspaceFolder}/inc",
"${workspaceFolder}/HAL_Driver/Inc",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS",
"${workspaceFolder}/CMSIS/device",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/include",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM3"
],
"defines": [],
"intelliSenseMode": "clang-x64",
"browse": {
"path": [
"${workspaceFolder}",
"/usr/include/c++/5",
"/usr/include/x86_64-linux-gnu/c++/5",
"/usr/include/c++/5/backward",
"/usr/lib/llvm-5.0/lib/clang/5.0.0/include",
"/usr/local/include",
"/usr/include/x86_64-linux-gnu",
"/usr/include"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
},
"compilerPath": "/usr/bin/clang++-5.0",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 3
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -13,18 +13,20 @@
class FRToSI2C {
public:
static void init(I2C_HandleTypeDef *i2chandle) {i2c=i2chandle;
I2CSemaphore=nullptr;}
static void init(I2C_HandleTypeDef *i2chandle) {
i2c = i2chandle;
I2CSemaphore = nullptr;
}
static void FRToSInit() {
I2CSemaphore = xSemaphoreCreateBinary();
I2CSemaphore = xSemaphoreCreateBinaryStatic(&xSemaphoreBuffer);
xSemaphoreGive(I2CSemaphore);
}
static void CpltCallback(); //Normal Tx Callback
static void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize,
uint8_t *pData, uint16_t Size);
static void Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
static void Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
@@ -36,6 +38,7 @@ private:
static I2C_HandleTypeDef *i2c;
static void I2C1_ClearBusyFlagErratum();
static SemaphoreHandle_t I2CSemaphore;
static StaticSemaphore_t xSemaphoreBuffer;
};
#endif /* FRTOSI2C_HPP_ */

View File

@@ -93,9 +93,9 @@
#endif
#define configUSE_PREEMPTION 1
#define configSUPPORT_STATIC_ALLOCATION 0
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#define configUSE_IDLE_HOOK 0
#define configSUPPORT_STATIC_ALLOCATION 1
#define configSUPPORT_DYNAMIC_ALLOCATION 0
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ ( SystemCoreClock )
#define configTICK_RATE_HZ ((TickType_t)100)

View File

@@ -34,7 +34,7 @@ public:
return static_cast<Orientation>((FRToSI2C::I2C_RegisterRead(LIS2DH_I2C_ADDRESS,LIS_INT2_SRC) >> 2) - 1);
#endif
}
static void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
static void getAxisReadings(int16_t& x, int16_t& y, int16_t& z);
private:
};

View File

@@ -19,7 +19,7 @@ public:
static void initalize(); // Initalize the system
static Orientation getOrientation();// Reads the I2C register and returns the orientation (true == left)
static void getAxisReadings(int16_t *x, int16_t *y, int16_t *z);
static void getAxisReadings(int16_t& x, int16_t& y, int16_t& z);
private:
};

View File

@@ -1,106 +1,115 @@
/*
* OLED.hpp
*
* Created on: 20Jan.,2017
* Author: Ben V. Brown <Ralim>
* Designed for the SSD1307
* Cleared for release for TS100 2017/08/20
*/
#ifndef OLED_HPP_
#define OLED_HPP_
#include <hardware.h>
#include "stm32f1xx_hal.h"
#include <stdbool.h>
#include <string.h>
#include "FRToSI2C.hpp"
#include "Font.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "FreeRTOS.h"
#ifdef __cplusplus
}
#endif
#define DEVICEADDR_OLED (0x3c<<1)
#define OLED_WIDTH 96
#define FRAMEBUFFER_START 17
class OLED {
public:
static void initialize(); // Startup the I2C coms (brings screen out of reset etc)
// Draw the buffer out to the LCD using the DMA Channel
static void refresh() {
FRToSI2C::Transmit( DEVICEADDR_OLED, screenBuffer,
FRAMEBUFFER_START + (OLED_WIDTH * 2));
//DMA tx time is ~ 20mS Ensure after calling this you delay for at least 25ms
//or we need to goto double buffering
}
// Turn the screen on or not
static void displayOnOff(bool on) {
displayOnOffState = on;
screenBuffer[1] = on ? 0xAF : 0xAE;
}
static void setRotation(bool leftHanded); // Set the rotation for the screen
// Get the current rotation of the LCD
static bool getRotation() {
return inLeftHandedMode;
}
static int16_t getCursorX() {
return cursor_x;
}
static void print(const char* string);// Draw a string to the current location, with current font
// Set the cursor location by pixels
static void setCursor(int16_t x, int16_t y) {
cursor_x = x;
cursor_y = y;
}
//Set cursor location by chars in current font
static void setCharCursor(int16_t x, int16_t y) {
cursor_x = x * fontWidth;
cursor_y = y * fontHeight;
}
static void setFont(uint8_t fontNumber); // (Future) Set the font that is being used
static void drawImage(const uint8_t* buffer, uint8_t x, uint8_t width) {
drawArea(x, 0, width, 16, buffer);
}
// Draws an image to the buffer, at x offset from top to bottom (fixed height renders)
static void printNumber(uint16_t number, uint8_t places);
// Draws a number at the current cursor location
// Clears the buffer
static void clearScreen() {
memset(&screenBuffer[FRAMEBUFFER_START], 0, OLED_WIDTH * 2);
}
// Draws the battery level symbol
static void drawBattery(uint8_t state) {
drawSymbol(3 + (state > 10 ? 10 : state));
}
// Draws a checkbox
static void drawCheckbox(bool state) {
drawSymbol((state) ? 16 : 17);
}
static void debugNumber(int32_t val);
static void drawSymbol(uint8_t symbolID);//Used for drawing symbols of a predictable width
static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t* ptr); //Draw an area, but y must be aligned on 0/8 offset
static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset
static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
bool clear);
static void drawHeatSymbol(uint8_t state);
private:
static void drawChar(char c); // Draw a character to a specific location
static const uint8_t* currentFont;// Pointer to the current font used for rendering to the buffer
static uint8_t* firstStripPtr; // Pointers to the strips to allow for buffer having extra content
static uint8_t* secondStripPtr; //Pointers to the strips
static bool inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM)
static bool displayOnOffState; // If the display is on or not
static uint8_t fontWidth, fontHeight;
static int16_t cursor_x, cursor_y;
static uint8_t displayOffset;
static uint8_t screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer
};
#endif /* OLED_HPP_ */
/*
* OLED.hpp
*
* Created on: 20Jan.,2017
* Author: Ben V. Brown <Ralim>
* Designed for the SSD1307
* Cleared for release for TS100 2017/08/20
*/
#ifndef OLED_HPP_
#define OLED_HPP_
#include <hardware.h>
#include "stm32f1xx_hal.h"
#include <stdbool.h>
#include <string.h>
#include "FRToSI2C.hpp"
#include "Font.h"
#ifdef __cplusplus
extern "C" {
#endif
#include "FreeRTOS.h"
#ifdef __cplusplus
}
#endif
#define DEVICEADDR_OLED (0x3c<<1)
#define OLED_WIDTH 96
#define FRAMEBUFFER_START 17
class OLED {
public:
enum DisplayState : bool {
OFF = false,
ON = true
};
static void initialize(); // Startup the I2C coms (brings screen out of reset etc)
// Draw the buffer out to the LCD using the DMA Channel
static void refresh() {
FRToSI2C::Transmit( DEVICEADDR_OLED, screenBuffer,
FRAMEBUFFER_START + (OLED_WIDTH * 2));
//DMA tx time is ~ 20mS Ensure after calling this you delay for at least 25ms
//or we need to goto double buffering
}
static void setDisplayState(DisplayState state) {
displayState = state;
screenBuffer[1] = (state == ON) ? 0xAF : 0xAE;
}
static void setRotation(bool leftHanded); // Set the rotation for the screen
// Get the current rotation of the LCD
static bool getRotation() {
return inLeftHandedMode;
}
static int16_t getCursorX() {
return cursor_x;
}
static void print(const char* string);// Draw a string to the current location, with current font
// Set the cursor location by pixels
static void setCursor(int16_t x, int16_t y) {
cursor_x = x;
cursor_y = y;
}
//Set cursor location by chars in current font
static void setCharCursor(int16_t x, int16_t y) {
cursor_x = x * fontWidth;
cursor_y = y * fontHeight;
}
static void setFont(uint8_t fontNumber); // (Future) Set the font that is being used
static uint8_t getFont();
static void drawImage(const uint8_t* buffer, uint8_t x, uint8_t width) {
drawArea(x, 0, width, 16, buffer);
}
// Draws an image to the buffer, at x offset from top to bottom (fixed height renders)
static void printNumber(uint16_t number, uint8_t places,bool noLeaderZeros=true);
// Draws a number at the current cursor location
// Clears the buffer
static void clearScreen() {
memset(&screenBuffer[FRAMEBUFFER_START], 0, OLED_WIDTH * 2);
}
// Draws the battery level symbol
static void drawBattery(uint8_t state) {
drawSymbol(3 + (state > 10 ? 10 : state));
}
// Draws a checkbox
static void drawCheckbox(bool state) {
drawSymbol((state) ? 16 : 17);
}
static void debugNumber(int32_t val);
static void drawSymbol(uint8_t symbolID);//Used for drawing symbols of a predictable width
static void drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t* ptr); //Draw an area, but y must be aligned on 0/8 offset
static void drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t* ptr); //Draw an area, but y must be aligned on 0/8 offset
static void fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t value); //Fill an area, but y must be aligned on 0/8 offset
static void drawFilledRect(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1,
bool clear);
static void drawHeatSymbol(uint8_t state);
private:
static void drawChar(char c); // Draw a character to a specific location
static const uint8_t* currentFont;// Pointer to the current font used for rendering to the buffer
static uint8_t* firstStripPtr; // Pointers to the strips to allow for buffer having extra content
static uint8_t* secondStripPtr; //Pointers to the strips
static bool inLeftHandedMode; // Whether the screen is in left or not (used for offsets in GRAM)
static DisplayState displayState;
static uint8_t fontWidth, fontHeight;
static int16_t cursor_x, cursor_y;
static uint8_t displayOffset;
static uint8_t screenBuffer[16 + (OLED_WIDTH * 2) + 10]; // The data buffer
};
#endif /* OLED_HPP_ */

View File

@@ -11,7 +11,7 @@
#define SETTINGS_H_
#include <stdint.h>
#include "stm32f1xx_hal.h"
#define SETTINGSVERSION ( 0x19 )
#define SETTINGSVERSION ( 0x1C )
/*Change this if you change the struct below to prevent people getting \
out of sync*/
@@ -39,18 +39,15 @@ typedef struct {
uint8_t descriptionScrollSpeed :1; // Description scroll speed
uint16_t voltageDiv; // Voltage divisor factor
uint16_t BoostTemp; // Boost mode set point for the iron
int16_t CalibrationOffset; // This stores the temperature offset for this tip
// in the iron.
uint8_t PID_P; // PID P Term
uint8_t PID_I; // PID I Term
uint8_t PID_D; // PID D Term
uint8_t version; // Used to track if a reset is needed on firmware upgrade
uint8_t customTipGain; // Tip gain value if custom tuned, or 0 if using a
// tipType param
uint8_t tipType;
#ifdef MODEL_TS80
uint16_t CalibrationOffset; // This stores the temperature offset for this tip
// in the iron.
uint8_t pidPowerLimit;
#endif
uint8_t powerLimitEnable; // Allow toggling of power limit without changing value
uint8_t powerLimit; // Maximum power iron allowed to output
uint8_t version; // Used to track if a reset is needed on firmware upgrade
uint32_t padding; // This is here for in case we are not an even divisor so
// that nothing gets cut off
} systemSettingsType;
@@ -58,7 +55,7 @@ typedef struct {
extern volatile systemSettingsType systemSettings;
void saveSettings();
void restoreSettings();
bool restoreSettings();
uint8_t lookupVoltageLevel(uint8_t level);
void resetSettings();
bool showBootLogoIfavailable();

View File

@@ -0,0 +1,76 @@
/*
* Translation.h
*
* Created on: 31Aug.,2017
* Author: Ben V. Brown
*/
#ifndef TRANSLATION_H_
#define TRANSLATION_H_
#include "stm32f1xx_hal.h"
enum ShortNameType {
SHORT_NAME_SINGLE_LINE = 1, SHORT_NAME_DOUBLE_LINE = 2,
};
extern const uint8_t USER_FONT_12[];
extern const uint8_t USER_FONT_6x8[];
/*
* When SettingsShortNameType is SHORT_NAME_SINGLE_LINE
* use SettingsShortNames as SettingsShortNames[16][1].. second column undefined
*/
extern const enum ShortNameType SettingsShortNameType;
extern const char *SettingsShortNames[23][2];
extern const char *SettingsDescriptions[23];
extern const char *SettingsMenuEntries[4];
extern const char *SettingsCalibrationDone;
extern const char *SettingsCalibrationWarning;
extern const char *SettingsResetWarning;
extern const char *UVLOWarningString;
extern const char *UndervoltageString;
extern const char *InputVoltageString;
extern const char *WarningTipTempString;
extern const char *BadTipString;
extern const char *SleepingSimpleString;
extern const char *SleepingAdvancedString;
extern const char *WarningSimpleString;
extern const char *WarningAdvancedString;
extern const char *SleepingTipAdvancedString;
extern const char *IdleTipString;
extern const char *IdleSetString;
extern const char *TipDisconnectedString;
extern const char *SolderingAdvancedPowerPrompt;
extern const char *OffString;
extern const char *ResetOKMessage;
extern const char *YourGainMessage;
extern const char *SettingsResetMessage;
extern const char *SettingTrueChar;
extern const char *SettingFalseChar;
extern const char *SettingRightChar;
extern const char *SettingLeftChar;
extern const char *SettingAutoChar;
extern const char *SettingStartSolderingChar;
extern const char *SettingStartSleepChar;
extern const char *SettingStartNoneChar;
extern const char *SettingFastChar;
extern const char *SettingSlowChar;
extern const char *TipModelStrings[];
extern const char *DebugMenu[];
extern const char *SymbolPlus;
extern const char *SymbolMinus;
extern const char *SymbolSpace;
extern const char *SymbolDot;
extern const char *SymbolDegC;
extern const char *SymbolDegF;
extern const char *SymbolMinutes;
extern const char *SymbolSeconds;
extern const char *SymbolWatts;
extern const char *SymbolVolts;
extern const char *SymbolDC;
extern const char *SymbolCellCount;
extern const char *SymbolVersionNumber;
extern const char *DebugMenu[];
#endif /* TRANSLATION_H_ */

View File

@@ -0,0 +1,24 @@
/*
* expMovingAverage.h
*
* Created on: 8 Oct 2019
* Author: ralim
*/
#ifndef INC_EXPMOVINGAVERAGE_H_
#define INC_EXPMOVINGAVERAGE_H_
// max size = 127
template<class T, uint8_t weighting>
struct expMovingAverage {
int32_t sum;
void update(T const val) {
sum = ((val * weighting) + (sum * (256 - weighting))) / 256;
}
T average() const {
return sum;
}
};
#endif /* INC_EXPMOVINGAVERAGE_H_ */

View File

@@ -9,6 +9,10 @@
#define HARDWARE_H_
#include "Setup.h"
#include "stm32f1xx_hal.h"
#include "FreeRTOS.h"
#include "stm32f1xx_hal.h"
#include "cmsis_os.h"
#ifdef __cplusplus
extern "C" {
#endif
@@ -131,7 +135,9 @@ void startQC(uint16_t divisor); // Tries to negotiate QC for highest voltage, mu
// This will try for 12V, failing that 9V, failing that 5V
// If input is over 12V returns -1
// If the input is [5-12] Will return the value.
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) ;
void vApplicationIdleHook(void);
#ifdef __cplusplus
}
#endif

View File

@@ -11,25 +11,25 @@
#include <stdint.h>
// max size = 127
template <class T, uint8_t SIZE>
template<class T, uint8_t SIZE>
struct history {
static const uint8_t size = SIZE;
static const uint8_t size = SIZE;
T buf[size];
int32_t sum;
uint8_t loc;
void update(T const val) {
// step backwards so i+1 is the previous value.
loc = (size+loc-1) % size;
sum -= buf[loc];
sum += val;
buf[loc] = val;
loc = (loc + 1) % size;
}
T operator[] (uint8_t i) const {
T operator[](uint8_t i) const {
// 0 = newest, size-1 = oldest.
i = (i+loc) % size;
i = (i + loc) % size;
return buf[i];
}

View File

@@ -5,20 +5,21 @@
#include "OLED.hpp"
#include "Setup.h"
extern uint8_t PCBVersion;
extern uint32_t currentlyActiveTemperatureTarget;
extern uint32_t currentTempTargetDegC;
extern bool settingsWereReset;
enum ButtonState {
BUTTON_NONE = 0, /* No buttons pressed / < filter time*/
BUTTON_F_SHORT = 1, /* User has pressed the front button*/
BUTTON_B_SHORT = 2, /* User has pressed the back button*/
BUTTON_F_LONG = 4, /* User is holding the front button*/
BUTTON_B_LONG = 8, /* User is holding the back button*/
BUTTON_BOTH = 16, /* User has pressed both buttons*/
BUTTON_NONE = 0, /* No buttons pressed / < filter time*/
BUTTON_F_SHORT = 1, /* User has pressed the front button*/
BUTTON_B_SHORT = 2, /* User has pressed the back button*/
BUTTON_F_LONG = 4, /* User is holding the front button*/
BUTTON_B_LONG = 8, /* User is holding the back button*/
BUTTON_BOTH = 16, /* User has pressed both buttons*/
/*
* Note:
* Pressed means press + release, we trigger on a full \__/ pulse
* holding means it has gone low, and been low for longer than filter time
*/
/*
* Note:
* Pressed means press + release, we trigger on a full \__/ pulse
* holding means it has gone low, and been low for longer than filter time
*/
};
ButtonState getButtonState();
@@ -37,7 +38,7 @@ void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
void vApplicationStackOverflowHook(xTaskHandle *pxTask,
signed portCHAR *pcTaskName);
signed portCHAR *pcTaskName);
#ifdef __cplusplus
}

View File

@@ -8,6 +8,7 @@
#include "stdint.h"
#include <history.hpp>
#include "hardware.h"
#include "expMovingAverage.h"
#ifndef POWER_HPP_
#define POWER_HPP_
@@ -18,22 +19,21 @@
// Once we have feed-forward temp estimation we should be able to better tune this.
#ifdef MODEL_TS100
const uint16_t tipMass = 450; // divide here so division is compile-time.
const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second
const uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
#endif
#ifdef MODEL_TS80
const uint16_t tipMass = 450;
const uint32_t tipMass = 40;
const uint8_t tipResistance = 45; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
#endif
const uint8_t oscillationPeriod = 6 * PID_TIM_HZ; // I term look back value
extern history<uint32_t, oscillationPeriod> milliWattHistory;
int32_t tempToMilliWatts(int32_t rawTemp, uint8_t rawC);
void setTipMilliWatts(int32_t mw);
uint8_t milliWattsToPWM(int32_t milliWatts, uint8_t divisor,
uint8_t sample = 0);
int32_t PWMToMilliWatts(uint8_t pwm, uint8_t divisor, uint8_t sample = 0);
const uint8_t wattHistoryFilter = 24; // I term look back weighting
extern expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory;
int32_t tempToX10Watts(int32_t rawTemp);
void setTipX10Watts(int32_t mw);
uint8_t X10WattsToPWM(int32_t milliWatts, uint8_t sample = 0);
int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample = 0);
uint32_t availableW10(uint8_t sample) ;
#endif /* POWER_HPP_ */

View File

@@ -9,6 +9,8 @@
#define I2CUSESDMA
I2C_HandleTypeDef* FRToSI2C::i2c;
SemaphoreHandle_t FRToSI2C::I2CSemaphore;
StaticSemaphore_t FRToSI2C::xSemaphoreBuffer;
void FRToSI2C::CpltCallback() {
i2c->State = HAL_I2C_STATE_READY; // Force state reset (even if tx error)
if (I2CSemaphore) {
@@ -29,8 +31,8 @@ void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
// Wait up to 1 second for the mutex
if (xSemaphoreTake(I2CSemaphore, (TickType_t)50) == pdTRUE) {
#ifdef I2CUSESDMA
if (HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize,
pData, Size,500) != HAL_OK) {
if (HAL_I2C_Mem_Read(i2c, DevAddress, MemAddress, MemAddSize, pData,
Size, 500) != HAL_OK) {
I2C1_ClearBusyFlagErratum();
xSemaphoreGive(I2CSemaphore);
@@ -70,7 +72,7 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
if (xSemaphoreTake(I2CSemaphore, (TickType_t)50) == pdTRUE) {
#ifdef I2CUSESDMA
if (HAL_I2C_Mem_Write(i2c, DevAddress, MemAddress, MemAddSize,
pData, Size,500) != HAL_OK) {
pData, Size, 500) != HAL_OK) {
I2C1_ClearBusyFlagErratum();
xSemaphoreGive(I2CSemaphore);

View File

@@ -1,4 +1,9 @@
// By Ben V. Brown - V2.0 of the TS100 firmware
/*
* GUIThread.cpp
*
* Created on: 19 Aug 2019
* Author: ralim
*/
#include <MMA8652FC.hpp>
#include <gui.hpp>
#include <main.hpp>
@@ -11,87 +16,27 @@
#include "stdlib.h"
#include "stm32f1xx_hal.h"
#include "string.h"
#define ACCELDEBUG 0
uint8_t PCBVersion = 0;
#include "TipThermoModel.h"
extern uint8_t PCBVersion;
// File local variables
uint32_t currentlyActiveTemperatureTarget = 0;
uint32_t lastMovementTime = 0;
extern uint32_t currentTempTargetDegC;
extern uint32_t lastMovementTime;
extern int16_t idealQCVoltage;
uint32_t lastButtonTime = 0;
int16_t idealQCVoltage = 0;
// FreeRTOS variables
osThreadId GUITaskHandle;
osThreadId PIDTaskHandle;
osThreadId MOVTaskHandle;
extern osThreadId GUITaskHandle;
extern osThreadId MOVTaskHandle;
extern osThreadId PIDTaskHandle;
static TaskHandle_t pidTaskNotification = NULL;
// TODO: express time constants in terms of dividends of portTICK_RATE_MS
void startGUITask(void const *argument);
void startPIDTask(void const *argument);
void startMOVTask(void const *argument);
// End FreeRTOS
#define MOVEMENT_INACTIVITY_TIME 6000
#define BUTTON_INACTIVITY_TIME 6000
// Main sets up the hardware then hands over to the FreeRTOS kernel
int main(void) {
/* Reset of all peripherals, Initializes the Flash interface and the Systick.
*/
HAL_Init();
Setup_HAL(); // Setup all the HAL objects
HAL_IWDG_Refresh(&hiwdg);
setTipMilliWatts(0); // force tip off
FRToSI2C::init(&hi2c1);
OLED::initialize(); // start up the LCD
OLED::setFont(0); // default to bigger font
// Testing for which accelerometer is mounted
uint8_t buffer[1];
HAL_IWDG_Refresh(&hiwdg);
if (HAL_I2C_Mem_Read(&hi2c1, 29 << 1, 0x0F, I2C_MEMADD_SIZE_8BIT, buffer, 1,
1000) == HAL_OK) {
PCBVersion = 1;
MMA8652FC::initalize(); // this sets up the I2C registers
} else if (HAL_I2C_Mem_Read(&hi2c1, 25 << 1, 0x0F, I2C_MEMADD_SIZE_8BIT,
buffer, 1, 1000) == HAL_OK) {
PCBVersion = 2;
// Setup the ST Accelerometer
LIS2DH12::initalize(); // startup the accelerometer
} else {
PCBVersion = 3;
systemSettings.SleepTime = 0;
systemSettings.ShutdownTime = 0; // No accel -> disable sleep
systemSettings.sensitivity = 0;
}
HAL_IWDG_Refresh(&hiwdg);
restoreSettings(); // load the settings from flash
setCalibrationOffset(systemSettings.CalibrationOffset);
setTipType((enum TipType) systemSettings.tipType,
systemSettings.customTipGain); // apply tip type selection
HAL_IWDG_Refresh(&hiwdg);
/* Create the thread(s) */
/* definition and creation of GUITask */
osThreadDef(GUITask, startGUITask, osPriorityBelowNormal, 0, 5 * 1024 / 4);
GUITaskHandle = osThreadCreate(osThread(GUITask), NULL);
/* definition and creation of PIDTask */
osThreadDef(PIDTask, startPIDTask, osPriorityRealtime, 0, 3 * 1024 / 4);
PIDTaskHandle = osThreadCreate(osThread(PIDTask), NULL);
if (PCBVersion < 3) {
/* definition and creation of MOVTask */
osThreadDef(MOVTask, startMOVTask, osPriorityNormal, 0, 4 * 1024 / 4);
MOVTaskHandle = osThreadCreate(osThread(MOVTask), NULL);
#ifdef LOCAL_BUILD
//Test that there was enough ram in the FreeRToS pool to allocate all the tasks
if (MOVTaskHandle == 0)
asm("bkpt");
#endif
}
/* Start scheduler */
osKernelStart();
/* We should never get here as control is now taken by the scheduler */
while (1) {
}
static uint16_t min(uint16_t a, uint16_t b) {
if (a > b)
return b;
else
return a;
}
void printVoltage() {
@@ -109,19 +54,28 @@ void GUIDelay() {
}
void gui_drawTipTemp(bool symbol) {
// Draw tip temp handling unit conversion & tolerance near setpoint
uint16_t Temp = getTipRawTemp(0);
uint16_t Temp = 0;
if (systemSettings.temperatureInF)
Temp = tipMeasurementToF(Temp);
Temp = TipThermoModel::getTipInF();
else
Temp = tipMeasurementToC(Temp);
Temp = TipThermoModel::getTipInC();
OLED::printNumber(Temp, 3); // Draw the tip temp out finally
if (symbol) {
if (systemSettings.temperatureInF)
OLED::print(SymbolDegF);
else
OLED::print(SymbolDegC);
if (OLED::getFont() == 0) {
//Big font, can draw nice symbols
if (systemSettings.temperatureInF)
OLED::drawSymbol(0);
else
OLED::drawSymbol(1);
} else {
//Otherwise fall back to chars
if (systemSettings.temperatureInF)
OLED::print(SymbolDegF);
else
OLED::print(SymbolDegC);
}
}
}
ButtonState getButtonState() {
@@ -256,7 +210,7 @@ static bool checkVoltageForExit() {
}
OLED::refresh();
currentlyActiveTemperatureTarget = 0;
currentTempTargetDegC = 0;
waitForButtonPress();
return true;
}
@@ -271,17 +225,17 @@ static void gui_drawBatteryIcon() {
// we need to calculate which of the 10 levels they are on
uint8_t cellCount = systemSettings.cutoutSetting + 2;
uint32_t cellV = getInputVoltageX10(systemSettings.voltageDiv, 0)
/ cellCount;
/ cellCount;
// Should give us approx cell voltage X10
// Range is 42 -> 33 = 9 steps therefore we will use battery 1-10
if (cellV < 33)
cellV = 33;
cellV -= 33;// Should leave us a number of 0-9
cellV = 33;
cellV -= 33; // Should leave us a number of 0-9
if (cellV > 9)
cellV = 9;
cellV = 9;
OLED::drawBattery(cellV + 1);
} else
OLED::drawSymbol(15); // Draw the DC Logo
OLED::drawSymbol(15); // Draw the DC Logo
#else
// On TS80 we replace this symbol with the voltage we are operating on
// If <9V then show single digit, if not show duals
@@ -305,7 +259,7 @@ static void gui_drawBatteryIcon() {
}
static void gui_solderingTempAdjust() {
uint32_t lastChange = xTaskGetTickCount();
currentlyActiveTemperatureTarget = 0;
currentTempTargetDegC = 0;
uint32_t autoRepeatTimer = 0;
uint8_t autoRepeatAcceleration = 0;
for (;;) {
@@ -324,16 +278,16 @@ static void gui_solderingTempAdjust() {
return;
break;
case BUTTON_B_LONG:
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration >
PRESS_ACCEL_INTERVAL_MAX) {
if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
systemSettings.SolderingTemp -= 10; // sub 10
autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP;
}
break;
case BUTTON_F_LONG:
if (xTaskGetTickCount() - autoRepeatTimer + autoRepeatAcceleration >
PRESS_ACCEL_INTERVAL_MAX) {
if (xTaskGetTickCount() - autoRepeatTimer
+ autoRepeatAcceleration> PRESS_ACCEL_INTERVAL_MAX) {
systemSettings.SolderingTemp += 10;
autoRepeatTimer = xTaskGetTickCount();
autoRepeatAcceleration += PRESS_ACCEL_STEP;
@@ -348,10 +302,10 @@ static void gui_solderingTempAdjust() {
default:
break;
}
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration) <
PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration =
PRESS_ACCEL_INTERVAL_MAX - PRESS_ACCEL_INTERVAL_MIN;
if ((PRESS_ACCEL_INTERVAL_MAX - autoRepeatAcceleration)
< PRESS_ACCEL_INTERVAL_MIN) {
autoRepeatAcceleration = PRESS_ACCEL_INTERVAL_MAX
- PRESS_ACCEL_INTERVAL_MIN;
}
// constrain between 50-450 C
if (systemSettings.temperatureInF) {
@@ -372,7 +326,7 @@ static void gui_solderingTempAdjust() {
#ifdef MODEL_TS80
if (!OLED::getRotation())
#else
if (OLED::getRotation())
if (OLED::getRotation())
#endif
OLED::print(SymbolMinus);
else
@@ -388,7 +342,7 @@ static void gui_solderingTempAdjust() {
#ifdef MODEL_TS80
if (!OLED::getRotation())
#else
if (OLED::getRotation())
if (OLED::getRotation())
#endif
OLED::print(SymbolPlus);
else
@@ -398,12 +352,6 @@ static void gui_solderingTempAdjust() {
}
}
static uint16_t min(uint16_t a, uint16_t b) {
if (a > b)
return b;
else
return a;
}
static int gui_SolderingSleepingMode() {
// Drop to sleep temperature and display until movement or button press
@@ -415,24 +363,23 @@ static int gui_SolderingSleepingMode() {
|| (xTaskGetTickCount() - lastButtonTime < 100))
return 0; // user moved or pressed a button, go back to soldering
#ifdef MODEL_TS100
if (checkVoltageForExit())
if (checkVoltageForExit())
return 1; // return non-zero on error
#endif
if (systemSettings.temperatureInF) {
currentlyActiveTemperatureTarget = ftoTipMeasurement(
currentTempTargetDegC = TipThermoModel::convertFtoC(
min(systemSettings.SleepTemp,
systemSettings.SolderingTemp));
} else {
currentlyActiveTemperatureTarget = ctoTipMeasurement(
min(systemSettings.SleepTemp,
systemSettings.SolderingTemp));
currentTempTargetDegC = (min(systemSettings.SleepTemp,
systemSettings.SolderingTemp));
}
// draw the lcd
uint16_t tipTemp;
if (systemSettings.temperatureInF)
tipTemp = tipMeasurementToF(getTipRawTemp(0));
tipTemp = TipThermoModel::getTipInF();
else
tipTemp = tipMeasurementToC(getTipRawTemp(0));
tipTemp = TipThermoModel::getTipInC();
OLED::clearScreen();
OLED::setCursor(0, 0);
@@ -464,7 +411,7 @@ static int gui_SolderingSleepingMode() {
if (((uint32_t) (xTaskGetTickCount() - lastMovementTime))
> (uint32_t) (systemSettings.ShutdownTime * 60 * 100)) {
// shutdown
currentlyActiveTemperatureTarget = 0;
currentTempTargetDegC = 0;
return 1; // we want to exit soldering mode
}
OLED::refresh();
@@ -506,7 +453,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
* --> Double button to exit
*/
bool boostModeOn = false;
uint8_t badTipCounter = 0;
uint32_t sleepThres = 0;
if (systemSettings.SleepTime < 6)
sleepThres = systemSettings.SleepTime * 10 * 100;
@@ -554,19 +501,13 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
OLED::setCursor(0, 0);
OLED::clearScreen();
OLED::setFont(0);
uint16_t tipTemp = getTipRawTemp(0);
if (tipTemp > 32700) {
badTipCounter++; // Use a counter so that error has to persist for > 1 second continious so that peak errors dont trip it
} else {
badTipCounter = 0;
}
//Draw in the screen details
if (systemSettings.detailedSoldering) {
OLED::setFont(1);
OLED::print(SolderingAdvancedPowerPrompt); // Power:
OLED::printNumber(milliWattHistory[0] / 1000, 2);
OLED::printNumber(x10WattHistory.average() / 10, 2);
OLED::print(SymbolDot);
OLED::printNumber(milliWattHistory[0] / 100 % 10, 1);
OLED::printNumber(x10WattHistory.average() % 10, 1);
OLED::print(SymbolWatts);
if (systemSettings.sensitivity && systemSettings.SleepTime) {
@@ -576,6 +517,9 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
OLED::setCursor(0, 8);
OLED::print(SleepingTipAdvancedString);
//OLED::printNumber(
// TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0)), 5); // Draw the tip temp out finally
gui_drawTipTemp(true);
OLED::print(SymbolSpace);
printVoltage();
@@ -597,14 +541,10 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
OLED::print(SymbolSpace);
// Draw heating/cooling symbols
OLED::drawHeatSymbol(
milliWattsToPWM(milliWattHistory[0],
systemSettings.voltageDiv));
OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));
} else {
// Draw heating/cooling symbols
OLED::drawHeatSymbol(
milliWattsToPWM(milliWattHistory[0],
systemSettings.voltageDiv));
OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average()));
// We draw boost arrow if boosting, or else gap temp <-> heat
// indicator
if (boostModeOn)
@@ -618,33 +558,22 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
gui_drawBatteryIcon();
}
}
if (badTipCounter > 128) {
OLED::print(BadTipString);
OLED::refresh();
currentlyActiveTemperatureTarget = 0;
waitForButtonPress();
currentlyActiveTemperatureTarget = 0;
return;
}
OLED::refresh();
// Update the setpoints for the temperature
if (boostModeOn) {
if (systemSettings.temperatureInF)
currentlyActiveTemperatureTarget = ftoTipMeasurement(
currentTempTargetDegC = TipThermoModel::convertFtoC(
systemSettings.BoostTemp);
else
currentlyActiveTemperatureTarget = ctoTipMeasurement(
systemSettings.BoostTemp);
currentTempTargetDegC = (systemSettings.BoostTemp);
} else {
if (systemSettings.temperatureInF)
currentlyActiveTemperatureTarget = ftoTipMeasurement(
currentTempTargetDegC = TipThermoModel::convertFtoC(
systemSettings.SolderingTemp);
else
currentlyActiveTemperatureTarget = ctoTipMeasurement(
systemSettings.SolderingTemp);
currentTempTargetDegC = (systemSettings.SolderingTemp);
}
#ifdef MODEL_TS100
@@ -674,67 +603,64 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
}
}
void showVersion(void) {
void showDebugMenu(void) {
uint8_t screen = 0;
ButtonState b;
for (;;) {
OLED::clearScreen(); // Ensure the buffer starts clean
OLED::setCursor(0, 0); // Position the cursor at the 0,0 (top left)
OLED::setFont(1); // small font
#ifdef MODEL_TS100
OLED::print(SymbolVersionNumber); // Print version number
#else
OLED::print(SymbolVersionNumber); // Print version number
#endif
OLED::setCursor(0, 8); // second line
OLED::print(DebugMenu[screen]);
switch (screen) {
case 1:
OLED::printNumber(xPortGetFreeHeapSize(), 5);
case 0: //Just prints date
break;
case 2:
case 1:
//High water mark for GUI
OLED::printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 5);
break;
case 2:
//High water mark for the Movement task
OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 5);
break;
case 3:
//High water mark for the PID task
OLED::printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 5);
break;
case 4:
OLED::printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 5);
break;
case 5:
//system up time stamp
OLED::printNumber(xTaskGetTickCount() / 100, 5);
break;
case 6:
case 5:
//Movement time stamp
OLED::printNumber(lastMovementTime / 100, 5);
break;
case 6:
//Raw Tip
{
uint32_t temp = systemSettings.CalibrationOffset;
systemSettings.CalibrationOffset = 0;
OLED::printNumber(
TipThermoModel::convertTipRawADCTouV(getTipRawTemp(1)), 6);
systemSettings.CalibrationOffset = temp;
}
break;
case 7:
OLED::printNumber(getTipRawTemp(0), 6);
//Temp in C
OLED::printNumber(TipThermoModel::getTipInC(1), 5);
break;
case 8:
OLED::printNumber(tipMeasurementToC(getTipRawTemp(0)), 5);
//Handle Temp
OLED::printNumber(getHandleTemperature(), 3);
break;
case 9:
//Voltage input
printVoltage();
break;
case 10:
OLED::printNumber(getHandleTemperature(), 3);
break;
case 11:
OLED::printNumber(PCBVersion, 1); // Print PCB ID number
break;
case 12:
#ifdef MODEL_TS80
OLED::printNumber(idealQCVoltage, 3);
#else
OLED::printNumber(systemSettings.tipType, 3);
#endif
break;
case 13:
#ifdef MODEL_TS80
OLED::printNumber(calculateTipR(), 5);
#else
OLED::printNumber(8500, 5);
#endif
// Print PCB ID number
OLED::printNumber(PCBVersion, 1);
break;
default:
break;
@@ -746,7 +672,7 @@ void showVersion(void) {
return;
else if (b == BUTTON_F_SHORT) {
screen++;
screen = screen % 14;
screen = screen % 11;
}
GUIDelay();
}
@@ -770,6 +696,17 @@ void startGUITask(void const *argument __unused) {
ticks = xTaskGetTickCount(); // make timeout now so we will exit
GUIDelay();
}
if (settingsWereReset) {
//Display alert settings were reset
OLED::setFont(1);
OLED::setCursor(0, 0);
OLED::print(SettingsResetMessage);
OLED::refresh();
waitForButtonPressOrTimeout(1000);
}
if (systemSettings.autoStartMode) {
// jump directly to the autostart mode
if (systemSettings.autoStartMode == 1)
@@ -778,7 +715,7 @@ void startGUITask(void const *argument __unused) {
gui_solderingMode(1);
}
#if ACCELDEBUG
#ifdef ACCELDEBUG
for (;;) {
HAL_IWDG_Refresh(&hiwdg);
@@ -790,7 +727,7 @@ void startGUITask(void const *argument __unused) {
for (;;) {
ButtonState buttons = getButtonState();
if (buttons != BUTTON_NONE) {
OLED::displayOnOff(true); // turn lcd on
OLED::setDisplayState(OLED::DisplayState::ON);
OLED::setFont(0);
}
if (tempWarningState == 2)
@@ -812,7 +749,7 @@ void startGUITask(void const *argument __unused) {
case BUTTON_B_LONG:
// Show the version information
showVersion();
showDebugMenu();
break;
case BUTTON_F_LONG:
gui_solderingTempAdjust();
@@ -824,29 +761,29 @@ void startGUITask(void const *argument __unused) {
break;
case BUTTON_B_SHORT:
enterSettingsMenu(); // enter the settings menu
saveSettings();
buttonLockout = true;
setCalibrationOffset(systemSettings.CalibrationOffset); // ensure cal offset is applied
break;
default:
break;
}
currentlyActiveTemperatureTarget = 0; // ensure tip is off
currentTempTargetDegC = 0; // ensure tip is off
getInputVoltageX10(systemSettings.voltageDiv, 0);
uint16_t tipTemp = tipMeasurementToC(getTipRawTemp(0));
uint16_t tipTemp = TipThermoModel::getTipInC();
if (tipTemp < 50) {
if (systemSettings.sensitivity) {
if ((xTaskGetTickCount() - lastMovementTime) > 6000
&& (xTaskGetTickCount() - lastButtonTime) > 6000) {
OLED::displayOnOff(false); // turn lcd off when no movement
} else
OLED::displayOnOff(true); // turn lcd on
} else
OLED::displayOnOff(true); // turn lcd on - disabled motion sleep
} else
OLED::displayOnOff(true); // turn lcd on when temp > 50C
// Preemptively turn the display on. Turn it off if and only if
// the tip temperature is below 50 degrees C *and* motion sleep
// detection is enabled *and* there has been no activity (movement or
// button presses) in a while.
OLED::setDisplayState(OLED::DisplayState::ON);
if ((tipTemp < 50) && systemSettings.sensitivity
&& (((xTaskGetTickCount() - lastMovementTime)
> MOVEMENT_INACTIVITY_TIME)
&& ((xTaskGetTickCount() - lastButtonTime)
> BUTTON_INACTIVITY_TIME))) {
OLED::setDisplayState(OLED::DisplayState::OFF);
}
// Clear the lcd buffer
OLED::clearScreen();
@@ -871,7 +808,7 @@ void startGUITask(void const *argument __unused) {
#ifdef MODEL_TS80
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
if (OLED::getRotation()) {
#endif
OLED::drawArea(12, 0, 84, 16, idleScreenBG);
OLED::setCursor(0, 0);
@@ -892,7 +829,7 @@ void startGUITask(void const *argument __unused) {
#ifdef MODEL_TS80
if (!OLED::getRotation()) {
#else
if (OLED::getRotation()) {
if (OLED::getRotation()) {
#endif
// in right handed mode we want to draw over the first part
OLED::fillArea(55, 0, 41, 16, 0); // clear the area for the temp
@@ -912,232 +849,3 @@ void startGUITask(void const *argument __unused) {
GUIDelay();
}
}
/* StartPIDTask function */
void startPIDTask(void const *argument __unused) {
/*
* We take the current tip temperature & evaluate the next step for the tip
* control PWM.
*/
setTipMilliWatts(0); // disable the output driver if the output is set to be off
#ifdef MODEL_TS80
idealQCVoltage = calculateMaxVoltage(systemSettings.cutoutSetting);
#endif
uint8_t rawC = ctoTipMeasurement(101) - ctoTipMeasurement(100); // 1*C change in raw.
#ifdef MODEL_TS80
//Set power management code to the tip resistance in ohms * 10
TickType_t lastPowerPulse = 0;
#endif
// Tip temp reading filter
// Tip temp is read at a rate of PID_TIM_Hz
history<int32_t, PID_TIM_HZ / 4> tempError = { { 0 }, 0, 0 };
currentlyActiveTemperatureTarget = 0; // Force start with no output (off). If in sleep / soldering this will
// be over-ridden rapidly
pidTaskNotification = xTaskGetCurrentTaskHandle();
for (;;) {
if (ulTaskNotifyTake(pdTRUE, 2000)) {
// This is a call to block this thread until the ADC does its samples
uint16_t rawTemp = getTipRawTemp(1); // get instantaneous reading
if (currentlyActiveTemperatureTarget) {
// Cap the max set point to 450C
if (currentlyActiveTemperatureTarget > ctoTipMeasurement(450)) {
//Maximum allowed output
currentlyActiveTemperatureTarget = ctoTipMeasurement(450);
} else if (currentlyActiveTemperatureTarget > 32700) {
//Cap to max adc reading (32768)
currentlyActiveTemperatureTarget = 32700;
}
// As we get close to our target, temp noise causes the system
// to be unstable. Use a rolling average to dampen it.
// We overshoot by roughly 1/2 of 1 degree Fahrenheit.
// This helps stabilize the display.
int32_t tError = currentlyActiveTemperatureTarget - rawTemp
+ (rawC / 4);
tError = tError > INT16_MAX ? INT16_MAX : tError;
tError = tError < INT16_MIN ? INT16_MIN : tError;
tempError.update(tError);
// Now for the PID!
// P term - total power needed to hit target temp next cycle.
// thermal mass = 1690 milliJ/*C for my tip.
// = Watts*Seconds to raise Temp from room temp to +100*C, divided by 100*C.
int32_t milliWattsOut = tempToMilliWatts(tempError.average(),
rawC);
// note that milliWattsNeeded is sometimes negative, this counters overshoot
// from I term's inertia.
// I term - energy needed to compensate for heat loss.
// We track energy put into the system over some window.
// Assuming the temp is stable, energy in = energy transfered.
// (If it isn't, P will dominate).
milliWattsOut += milliWattHistory.average();
// Not Used:
// D term - use sudden temp change to counter fast cooling/heating.
// In practice, this provides an early boost if temp is dropping
// and counters extra power if the iron is no longer losing temp.
// basically: temp - lastTemp
// Unfortunately, our temp signal is too noisy to really help.
setTipMilliWatts(milliWattsOut);
} else {
#ifdef MODEL_TS80
//If its a TS80, we want to have the option of using an occasional pulse to keep the power bank on
// This is purely guesswork :'( as everyone implements stuff differently
if (xTaskGetTickCount() - lastPowerPulse < 10) {
// for the first 100mS turn on for a bit
setTipMilliWatts(2000); // typically its around 5W to hold the current temp, so this wont raise temp much
} else {
setTipMilliWatts(0);
}
//Then wait until the next 0.5 seconds
if (xTaskGetTickCount() - lastPowerPulse > 50) {
lastPowerPulse = xTaskGetTickCount();
}
#else
setTipMilliWatts(0);
#endif
}
HAL_IWDG_Refresh(&hiwdg);
} else {
//ADC interrupt timeout
setTipMilliWatts(0);
setTipPWM(0);
}
}
}
#define MOVFilter 8
void startMOVTask(void const *argument __unused) {
OLED::setRotation(true);
#ifdef MODEL_TS80
startQC(systemSettings.voltageDiv);
while (pidTaskNotification == 0)
osDelay(30); // To ensure we return after idealQCVoltage/tip resistance
seekQC(idealQCVoltage, systemSettings.voltageDiv); // this will move the QC output to the preferred voltage to start with
#else
osDelay(250); // wait for accelerometer to stabilize
#endif
OLED::setRotation(systemSettings.OrientationMode & 1);
lastMovementTime = 0;
history<int32_t, MOVFilter> datax = { { 0 }, 0, 0 };
history<int32_t, MOVFilter> datay = { { 0 }, 0, 0 };
history<int32_t, MOVFilter> dataz = { { 0 }, 0, 0 };
int16_t tempx = 0, tempy = 0, tempz = 0;
if (systemSettings.sensitivity > 9)
systemSettings.sensitivity = 9;
#if ACCELDEBUG
uint32_t max = 0;
#endif
Orientation rotation = ORIENTATION_FLAT;
for (;;) {
int32_t threshold = 1500 + (9 * 200);
threshold -= systemSettings.sensitivity * 200; // 200 is the step size
if (PCBVersion == 2) {
LIS2DH12::getAxisReadings(&tempx, &tempy, &tempz);
rotation = LIS2DH12::getOrientation();
} else if (PCBVersion == 1) {
MMA8652FC::getAxisReadings(&tempx, &tempy, &tempz);
rotation = MMA8652FC::getOrientation();
}
if (systemSettings.OrientationMode == 2) {
if (rotation != ORIENTATION_FLAT) {
OLED::setRotation(rotation == ORIENTATION_LEFT_HAND); // link the data through
}
}
datax.update(tempx);
datay.update(tempx);
dataz.update(tempx);
// Sum the deltas
int32_t error = (abs(datax.average() - tempx)
+ abs(datay.average() - tempy) + abs(dataz.average() - tempz));
// So now we have averages, we want to look if these are different by more
// than the threshold
// If this has occurred then we update the tick timer
if (error > threshold) {
lastMovementTime = xTaskGetTickCount();
}
osDelay(100); // Slow down update rate
}
}
#define FLASH_LOGOADDR \
(0x8000000 | 0xF800) /*second last page of flash set aside for logo image*/
bool showBootLogoIfavailable() {
// check if the header is there (0xAA,0x55,0xF0,0x0D)
// If so display logo
uint8_t temp8[98 * 2];
for (uint8_t i = 0; i < 98; i++) {
uint16_t temp = *(uint16_t *) (FLASH_LOGOADDR + (i * 2));
temp8[i * 2] = temp >> 8;
temp8[i * 2 + 1] = temp & 0xFF;
}
if (temp8[0] != 0xAA)
return false;
if (temp8[1] != 0x55)
return false;
if (temp8[2] != 0xF0)
return false;
if (temp8[3] != 0x0D)
return false;
OLED::drawArea(0, 0, 96, 16, (uint8_t *) (temp8 + 4));
OLED::refresh();
return true;
}
/*
* Catch the IRQ that says that the conversion is done on the temperature
* readings coming in Once these have come in we can unblock the PID so that it
* runs again
*/
void HAL_ADCEx_InjectedConvCpltCallback(ADC_HandleTypeDef *hadc) {
(void) hadc;
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
if (pidTaskNotification) {
vTaskNotifyGiveFromISR(pidTaskNotification, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
}
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c __unused) {
FRToSI2C::CpltCallback();
}
void vApplicationStackOverflowHook(xTaskHandle *pxTask __unused,
signed portCHAR *pcTaskName __unused) {
// We dont have a good way to handle a stack overflow at this point in time
NVIC_SystemReset();
}

View File

@@ -5,9 +5,10 @@
* Author: Ralim
*/
#include <LIS2DH12.hpp>
#include "cmsis_os.h"
#include <array>
#include "LIS2DH12.hpp"
#include "cmsis_os.h"
typedef struct {
const uint8_t reg;
@@ -36,14 +37,14 @@ void LIS2DH12::initalize() {
}
}
void LIS2DH12::getAxisReadings(int16_t* x, int16_t* y, int16_t* z) {
uint8_t tempArr[6];
FRToSI2C::Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8, I2C_MEMADD_SIZE_8BIT,
(uint8_t*) tempArr, 6);
void LIS2DH12::getAxisReadings(int16_t& x, int16_t& y, int16_t& z) {
std::array<int16_t, 3> sensorData;
(*x) = ((uint16_t) (tempArr[1] << 8 | tempArr[0]));
(*y) = ((uint16_t) (tempArr[3] << 8 | tempArr[2]));
(*z) = ((uint16_t) (tempArr[5] << 8 | tempArr[4]));
FRToSI2C::Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8, I2C_MEMADD_SIZE_8BIT,
reinterpret_cast<uint8_t*>(sensorData.begin()),
sensorData.size() * sizeof(int16_t));
x = sensorData[0];
y = sensorData[1];
z = sensorData[2];
}

View File

@@ -5,7 +5,9 @@
* Author: Ben V. Brown
*/
#include <MMA8652FC.hpp>
#include <array>
#include "MMA8652FC.hpp"
#include "cmsis_os.h"
typedef struct {
@@ -62,12 +64,15 @@ Orientation MMA8652FC::getOrientation() {
return ORIENTATION_FLAT;
}
void MMA8652FC::getAxisReadings(int16_t *x, int16_t *y, int16_t *z) {
uint8_t tempArr[6];
FRToSI2C::Mem_Read( MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG, I2C_MEMADD_SIZE_8BIT,
(uint8_t*) tempArr, 6);
(*x) = tempArr[0] << 8 | tempArr[1];
(*y) = tempArr[2] << 8 | tempArr[3];
(*z) = tempArr[4] << 8 | tempArr[5];
void MMA8652FC::getAxisReadings(int16_t& x, int16_t& y, int16_t& z) {
std::array<int16_t, 3> sensorData;
FRToSI2C::Mem_Read(MMA8652FC_I2C_ADDRESS, OUT_X_MSB_REG, I2C_MEMADD_SIZE_8BIT,
reinterpret_cast<uint8_t*>(sensorData.begin()),
sensorData.size() * sizeof(int16_t));
x = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t*>(&sensorData[0])));
y = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t*>(&sensorData[1])));
z = static_cast<int16_t>(__builtin_bswap16(*reinterpret_cast<uint16_t*>(&sensorData[2])));
}

View File

@@ -11,14 +11,14 @@
#include "Translation.h"
#include "cmsis_os.h"
const uint8_t* OLED::currentFont; // Pointer to the current font used for
const uint8_t *OLED::currentFont; // Pointer to the current font used for
// rendering to the buffer
uint8_t* OLED::firstStripPtr; // Pointers to the strips to allow for buffer
uint8_t *OLED::firstStripPtr; // Pointers to the strips to allow for buffer
// having extra content
uint8_t* OLED::secondStripPtr; // Pointers to the strips
uint8_t *OLED::secondStripPtr; // Pointers to the strips
bool OLED::inLeftHandedMode; // Whether the screen is in left or not (used for
// offsets in GRAM)
bool OLED::displayOnOffState; // If the display is on or not
OLED::DisplayState OLED::displayState;
uint8_t OLED::fontWidth, OLED::fontHeight;
int16_t OLED::cursor_x, OLED::cursor_y;
uint8_t OLED::displayOffset;
@@ -70,16 +70,18 @@ void OLED::initialize() {
secondStripPtr = &screenBuffer[FRAMEBUFFER_START + OLED_WIDTH];
fontHeight = 16;
displayOffset = 0;
displayOnOffState = true;
memcpy(&screenBuffer[0], &REFRESH_COMMANDS[0], sizeof(REFRESH_COMMANDS));
HAL_Delay(50);
HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(50);
// Send the setup settings
FRToSI2C::Transmit(DEVICEADDR_OLED, (uint8_t*) OLED_Setup_Array,
// Set the display to be ON once the settings block is sent and send the
// initialisation data to the OLED.
setDisplayState(DisplayState::ON);
FRToSI2C::Transmit(DEVICEADDR_OLED, &OLED_Setup_Array[0],
sizeof(OLED_Setup_Array));
displayOnOff(true);
}
/*
@@ -96,7 +98,7 @@ void OLED::drawChar(char c) {
return;
}
uint16_t index = c - 2; //First index is \x02
uint8_t* charPointer;
uint8_t *charPointer;
charPointer = ((uint8_t*) currentFont)
+ ((fontWidth * (fontHeight / 8)) * index);
drawArea(cursor_x, cursor_y, fontWidth, fontHeight, charPointer);
@@ -130,7 +132,7 @@ void OLED::setRotation(bool leftHanded) {
}
// print a string to the current cursor location
void OLED::print(const char* str) {
void OLED::print(const char *str) {
while (str[0]) {
drawChar(str[0]);
str++;
@@ -153,9 +155,27 @@ void OLED::setFont(uint8_t fontNumber) {
fontWidth = 12;
}
}
uint8_t OLED::getFont() {
if (currentFont == USER_FONT_6x8)
return 1;
else if (currentFont == ExtraFontChars)
return 2;
else
return 0;
}
inline void stripLeaderZeros(char *buffer, uint8_t places) {
//Removing the leading zero's by swapping them to SymbolSpace
// Stop 1 short so that we dont blank entire number if its zero
for (int i = 0; i < (places-1); i++) {
if (buffer[i] == 2) {
buffer[i] = SymbolSpace[0];
} else {
return;
}
}
}
// maximum places is 5
void OLED::printNumber(uint16_t number, uint8_t places) {
void OLED::printNumber(uint16_t number, uint8_t places, bool noLeaderZeros) {
char buffer[7] = { 0 };
if (places >= 5) {
@@ -183,7 +203,8 @@ void OLED::printNumber(uint16_t number, uint8_t places) {
}
buffer[0] = 2 + number % 10;
number /= 10;
if (noLeaderZeros)
stripLeaderZeros(buffer, places);
print(buffer);
}
@@ -210,7 +231,7 @@ void OLED::drawSymbol(uint8_t symbolID) {
// Draw an area, but y must be aligned on 0/8 offset
void OLED::drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t* ptr) {
const uint8_t *ptr) {
// Splat this from x->x+wide in two strides
if (x <= -wide)
return; // cutoffleft
@@ -241,6 +262,44 @@ void OLED::drawArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
}
}
}
// Draw an area, but y must be aligned on 0/8 offset
// For data which has octets swapped in a 16-bit word.
void OLED::drawAreaSwapped(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t *ptr) {
// Splat this from x->x+wide in two strides
if (x <= -wide)
return; // cutoffleft
if (x > 96)
return; // cutoff right
uint8_t visibleStart = 0;
uint8_t visibleEnd = wide;
// trimming to draw partials
if (x < 0) {
visibleStart -= x; // subtract negative value == add absolute value
}
if (x + wide > 96) {
visibleEnd = 96 - x;
}
if (y == 0) {
// Splat first line of data
for (uint8_t xx = visibleStart; xx < visibleEnd; xx += 2) {
firstStripPtr[xx + x] = ptr[xx + 1];
firstStripPtr[xx + x + 1] = ptr[xx];
}
}
if (y == 8 || height == 16) {
// Splat the second line
for (uint8_t xx = visibleStart; xx < visibleEnd; xx += 2) {
secondStripPtr[x + xx] = ptr[xx + 1 + (height == 16 ? wide : 0)];
secondStripPtr[x + xx + 1] = ptr[xx + (height == 16 ? wide : 0)];
}
}
}
void OLED::fillArea(int16_t x, int8_t y, uint8_t wide, uint8_t height,
const uint8_t value) {
// Splat this from x->x+wide in two strides

View File

@@ -0,0 +1,116 @@
/*
* Settings.c
*
* Created on: 29 Sep 2016
* Author: Ralim
*
* This file holds the users settings and saves / restores them to the
* devices flash
*/
#include "Settings.h"
#include "Setup.h"
#define FLASH_ADDR \
(0x8000000 | \
0xFC00) /*Flash start OR'ed with the maximum amount of flash - 1024 bytes*/
#include "string.h"
volatile systemSettingsType systemSettings;
void saveSettings() {
// First we erase the flash
FLASH_EraseInitTypeDef pEraseInit;
pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES;
pEraseInit.Banks = FLASH_BANK_1;
pEraseInit.NbPages = 1;
pEraseInit.PageAddress = FLASH_ADDR;
uint32_t failingAddress = 0;
HAL_IWDG_Refresh(&hiwdg);
__HAL_FLASH_CLEAR_FLAG(
FLASH_FLAG_EOP | FLASH_FLAG_WRPERR | FLASH_FLAG_PGERR | FLASH_FLAG_BSY);
HAL_FLASH_Unlock();
HAL_Delay(10);
HAL_IWDG_Refresh(&hiwdg);
HAL_FLASHEx_Erase(&pEraseInit, &failingAddress);
//^ Erase the page of flash (1024 bytes on this stm32)
// erased the chunk
// now we program it
uint16_t *data = (uint16_t*) &systemSettings;
HAL_FLASH_Unlock();
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
HAL_IWDG_Refresh(&hiwdg);
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, FLASH_ADDR + (i * 2),
data[i]);
}
HAL_FLASH_Lock();
}
bool restoreSettings() {
// We read the flash
uint16_t *data = (uint16_t*) &systemSettings;
for (uint8_t i = 0; i < (sizeof(systemSettingsType) / 2); i++) {
data[i] = *((uint16_t*) (FLASH_ADDR + (i * 2)));
}
// if the version is correct were done
// if not we reset and save
if (systemSettings.version != SETTINGSVERSION) {
// probably not setup
resetSettings();
return true;
}
return false;
}
// Lookup function for cutoff setting -> X10 voltage
/*
* 0=DC
* 1=3S
* 2=4S
* 3=5S
* 4=6S
*/
uint8_t lookupVoltageLevel(uint8_t level) {
if (level == 0)
return 90; // 9V since iron does not function effectively below this
else
return (level * 33) + (33 * 2);
}
void resetSettings() {
memset((void*) &systemSettings, 0, sizeof(systemSettingsType));
systemSettings.SleepTemp = 150; // Temperature the iron sleeps at - default 150.0 C
systemSettings.SleepTime = 6; // How many seconds/minutes we wait until going
// to sleep - default 1 min
systemSettings.SolderingTemp = 320; // Default soldering temp is 320.0 C
systemSettings.cutoutSetting = 0; // default to no cut-off voltage (or 18W for TS80)
systemSettings.version =
SETTINGSVERSION; // Store the version number to allow for easier upgrades
systemSettings.detailedSoldering = 0; // Detailed soldering screen
systemSettings.detailedIDLE = 0; // Detailed idle screen (off for first time users)
systemSettings.OrientationMode = 2; // Default to automatic
systemSettings.sensitivity = 7; // Default high sensitivity
#ifdef MODEL_TS80
systemSettings.voltageDiv = 780; // Default divider from schematic
#else
systemSettings.voltageDiv = 467; // Default divider from schematic
#endif
systemSettings.ShutdownTime = 10; // How many minutes until the unit turns itself off
systemSettings.boostModeEnabled = 1; // Default to having boost mode on as most people prefer it
systemSettings.BoostTemp = 420; // default to 400C
systemSettings.autoStartMode = 0; // Auto start off for safety
systemSettings.coolingTempBlink = 0; // Blink the temperature on the cooling screen when its > 50C
systemSettings.temperatureInF = 0; // default to 0
systemSettings.descriptionScrollSpeed = 0; // default to slow
systemSettings.powerLimitEnable = 0; // Default to no power limit
#ifdef MODEL_TS100
systemSettings.CalibrationOffset = 900; // the adc offset in uV
systemSettings.pidPowerLimit = 70; // Sets the max pwm power limit
systemSettings.powerLimit = 30; // 30 watts default limit
#endif
#ifdef MODEL_TS80
systemSettings.pidPowerLimit = 24; // Sets the max pwm power limit
systemSettings.CalibrationOffset = 900; // the adc offset in uV
systemSettings.powerLimit = 24; // 24 watts default power limit
#endif
saveSettings(); // Save defaults
}

View File

@@ -136,7 +136,7 @@ static void MX_ADC1_Init(void) {
*/
sConfig.Channel = TMP36_ADC1_CHANNEL;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
/**Configure Regular Channel
@@ -197,11 +197,10 @@ static void MX_ADC2_Init(void) {
*/
sConfig.Channel = TIP_TEMP_ADC2_CHANNEL;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
sConfig.Channel = VIN_ADC2_CHANNEL;
sConfig.Rank = ADC_REGULAR_RANK_2;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
HAL_ADC_ConfigChannel(&hadc2, &sConfig);
/**Configure Injected Channel

View File

@@ -0,0 +1,128 @@
/*
* TipThermoModel.cpp
*
* Created on: 7 Oct 2019
* Author: ralim
*/
#include "TipThermoModel.h"
#include "Settings.h"
#include "hardware.h"
/*
* The hardware is laid out as a non-inverting op-amp
* There is a pullup of 39k(TS100) from the +ve input to 3.9V (1M pulup on TS100)
*
* The simplest case to model this, is to ignore the pullup resistors influence, and assume that its influence is mostly constant
* -> Tip resistance *does* change with temp, but this should be much less than the rest of the system.
*
* When a thermocouple is equal temperature at both sides (hot and cold junction), then the output should be 0uV
* Therefore, by measuring the uV when both are equal, the measured reading is the offset value.
* This is a mix of the pull-up resistor, combined with tip manufacturing differences.
*
* All of the thermocouple readings are based on this expired patent
* - > https://patents.google.com/patent/US6087631A/en
*
* This was bought to my attention by <Kuba Sztandera>
*/
// TIP_GAIN = TIP_GAIN/1000 == uV per deg C constant of the tip
#ifdef MODEL_TS100
#define OP_AMP_Rf 750*1000 /*750 Kilo-ohms -> From schematic, R1*/
#define OP_AMP_Rin 2370 /*2.37 Kilo-ohms -> From schematic, R2*/
#define TIP_GAIN 405
#else
#define OP_AMP_Rf 180*1000 /*180 Kilo-ohms -> From schematic, R6*/
#define OP_AMP_Rin 2000 /*2.0 Kilo-ohms -> From schematic, R3*/
#define TIP_GAIN 115
#endif
#define op_amp_gain_stage (1+(OP_AMP_Rf/OP_AMP_Rin))
uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC) {
// This takes the raw ADC samples, converts these to uV
// Then divides this down by the gain to convert to the uV on the input to the op-amp (A+B terminals)
// Then remove the calibration value that is stored as a tip offset
uint32_t vddRailmVX10 = 33000; //TODO use ADC Vref to calculate this
// 4096 * 8 readings for full scale
// Convert the input ADC reading back into mV times 10 format.
uint32_t rawInputmVX10 = (rawADC * vddRailmVX10) / (4096 * 8);
uint32_t valueuV = rawInputmVX10 * 100; // shift into uV
//Now to divide this down by the gain
valueuV = (valueuV) / op_amp_gain_stage;
//Remove uV tipOffset
if (valueuV >= systemSettings.CalibrationOffset)
valueuV -= systemSettings.CalibrationOffset;
else
valueuV = 0;
return valueuV;
}
uint32_t TipThermoModel::convertTipRawADCToDegC(uint16_t rawADC) {
return convertuVToDegC(convertTipRawADCTouV(rawADC));
}
uint32_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) {
return convertuVToDegF(convertTipRawADCTouV(rawADC));
}
//Table that is designed to be walked to find the best sample for the lookup
//Extrapolate between two points
// [x1, y1] = point 1
// [x2, y2] = point 2
// x = input value
// output is x's extrapolated y value
int32_t LinearInterpolate(int32_t x1, int32_t y1, int32_t x2, int32_t y2,
int32_t x) {
return y1 + (((((x - x1) * 1000) / (x2 - x1)) * (y2 - y1))) / 1000;
}
uint32_t TipThermoModel::convertuVToDegC(uint32_t tipuVDelta) {
//based on new measurements, tip is quite linear at 24.9uV per deg C = 2.49 per 0.1C
//
tipuVDelta *= TIP_GAIN;
tipuVDelta /= 10000;
return tipuVDelta;
}
uint32_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) {
tipuVDelta *= TIP_GAIN;
tipuVDelta /= 1000;
return ((tipuVDelta * 9) / 50) + 32;
//(Y °C × 9/5) + 32 =Y°F
}
uint32_t TipThermoModel::convertCtoF(uint32_t degC) {
//(Y °C × 9/5) + 32 =Y°F
return 32 + ((degC * 9) / 5);
}
uint32_t TipThermoModel::convertFtoC(uint32_t degF) {
//(Y°F 32) × 5/9 = Y°C
if (degF < 32)
return 0;
return ((degF - 32) * 5) / 9;
}
uint32_t TipThermoModel::getTipInC(bool sampleNow) {
uint32_t currentTipTempInC = TipThermoModel::convertTipRawADCToDegC(
getTipRawTemp(sampleNow));
currentTipTempInC += getHandleTemperature() / 10; //Add handle offset
return currentTipTempInC;
}
uint32_t TipThermoModel::getTipInF(bool sampleNow) {
uint32_t currentTipTempInF = TipThermoModel::convertTipRawADCToDegF(
getTipRawTemp(sampleNow));
currentTipTempInF += convertCtoF(getHandleTemperature() / 10); //Add handle offset
return currentTipTempInF;
}
uint32_t TipThermoModel::getTipMaxInC() {
uint32_t maximumTipTemp = TipThermoModel::convertTipRawADCToDegC(
0x7FFF - (80 * 5)); //back off approx 5 deg c from ADC max
maximumTipTemp += getHandleTemperature() / 10; //Add handle offset
return maximumTipTemp - 1;
}

View File

@@ -0,0 +1,33 @@
/*
* TipThermoModel.h
*
* Created on: 7 Oct 2019
* Author: ralim
*/
#ifndef SRC_TIPTHERMOMODEL_H_
#define SRC_TIPTHERMOMODEL_H_
#include "stdint.h"
#include "hardware.h"
class TipThermoModel {
public:
//These are the main two functions
static uint32_t getTipInC(bool sampleNow = false);
static uint32_t getTipInF(bool sampleNow = false);
//Calculates the maximum temperature can can be read by the ADC range
static uint32_t getTipMaxInC();
static uint32_t convertTipRawADCToDegC(uint16_t rawADC);
static uint32_t convertTipRawADCToDegF(uint16_t rawADC);
//Returns the uV of the tip reading before the op-amp compensating for pullups
static uint32_t convertTipRawADCTouV(uint16_t rawADC);
static uint32_t convertCtoF(uint32_t degC);
static uint32_t convertFtoC(uint32_t degF);
private:
static uint32_t convertuVToDegC(uint32_t tipuVDelta);
static uint32_t convertuVToDegF(uint32_t tipuVDelta);
};
#endif /* SRC_TIPTHERMOMODEL_H_ */

Some files were not shown because too many files have changed in this diff Show More