mirror of
https://github.com/Ralim/IronOS.git
synced 2025-07-23 20:30:38 +02:00
Compare commits
105 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dda6a82647 | ||
|
b4bb6d5488 | ||
|
580bc4f70d | ||
|
c00df49708 | ||
|
009aa10a53 | ||
|
260891b00b | ||
|
bc6d5d16d5 | ||
|
985075afdf | ||
|
1184163cde | ||
|
0813b38f61 | ||
|
0f3e03e7cf | ||
|
6b20522a8a | ||
|
8d40afcaa1 | ||
|
3d331aa094 | ||
|
ab6657c75b | ||
|
ac080eb909 | ||
|
6de9dd860f | ||
|
bd15926e6a | ||
|
d3bc0fd332 | ||
|
61f5211d3a | ||
|
a66dbeb12b | ||
|
24ffc3eb8c | ||
|
1a673b8b91 | ||
|
ccda1713c1 | ||
|
ce3fea8176 | ||
|
03ec177058 | ||
|
c698c58e3a | ||
|
42aeee1c0b | ||
|
11d9f1ab1d | ||
|
7dbc55fa2b | ||
|
83aa1b6425 | ||
|
5e8ab27958 | ||
|
51afcbd733 | ||
|
5041326335 | ||
|
7de5698abb | ||
|
c6bdc28081 | ||
|
0e044cf108 | ||
|
d775036c9e | ||
|
08002e0d33 | ||
|
7ec1ece1a2 | ||
|
6e724b99d0 | ||
|
c9a74cbbff | ||
|
40655a9501 | ||
|
3a6a22c351 | ||
|
dd6c71a385 | ||
|
e8db6d5f4d | ||
|
f026e513fd | ||
|
3e453f1363 | ||
|
2794547817 | ||
|
7eee1b74d7 | ||
|
5feefc5b89 | ||
|
0ed2d84fca | ||
|
622d8aac07 | ||
|
4087fc60ed | ||
|
c4df679b21 | ||
|
166339e74d | ||
|
786a0a41e5 | ||
|
5c7cfe2e19 | ||
|
48b28123a6 | ||
|
c2ec65cafb | ||
|
53982efa14 | ||
|
be1536b82f | ||
|
05158321ba | ||
|
f810921b0c | ||
|
2b8568ce37 | ||
|
d122a9fb52 | ||
|
57c8a35041 | ||
|
3ed86d2acf | ||
|
7c6ce812f6 | ||
|
c92bf89296 | ||
|
8a392b5364 | ||
|
68aac2847b | ||
|
dc2b91c879 | ||
|
ebdff59293 | ||
|
08ff68cd4f | ||
|
4ce63fab47 | ||
|
02bc98e41e | ||
|
f01ab47647 | ||
|
c7b029482e | ||
|
e2c4ea4589 | ||
|
5797d5a68b | ||
|
ab1fa24863 | ||
|
22d0676a5c | ||
|
aa0784d34c | ||
|
f67cc25acc | ||
|
dfddd5916a | ||
|
fd91cf9f35 | ||
|
b401dc8264 | ||
|
a3082c389e | ||
|
42fb9e1105 | ||
|
169d9e6956 | ||
|
000eba7b8c | ||
|
5cf9d5bfff | ||
|
5347385b28 | ||
|
1e285a6a5c | ||
|
989a2cf2d5 | ||
|
ee6aff54b3 | ||
|
6cf9916a6e | ||
|
5f38e1812c | ||
|
0a63b6b5df | ||
|
71a1e2a367 | ||
|
37efde3d15 | ||
|
d899dc7433 | ||
|
a9e899c1ec | ||
|
1d9b16e963 |
2
.github/workflows/docs.yml
vendored
2
.github/workflows/docs.yml
vendored
@@ -24,6 +24,8 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12.3'
|
||||
|
||||
- run: |
|
||||
pip install --upgrade pip &&
|
||||
|
43
.github/workflows/push.yml
vendored
43
.github/workflows/push.yml
vendored
@@ -10,9 +10,9 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
strategy:
|
||||
matrix:
|
||||
model:
|
||||
@@ -70,9 +70,9 @@ jobs:
|
||||
if-no-files-found: error
|
||||
|
||||
build_multi-lang:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
strategy:
|
||||
matrix:
|
||||
model: ["Pinecil", "Pinecilv2"]
|
||||
@@ -118,7 +118,7 @@ jobs:
|
||||
|
||||
upload_metadata:
|
||||
needs: [build, build_multi-lang]
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
steps:
|
||||
- name: Download all prebuilts
|
||||
@@ -136,9 +136,9 @@ jobs:
|
||||
if-no-files-found: error
|
||||
|
||||
tests:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
|
||||
steps:
|
||||
- name: Install dependencies (apk)
|
||||
@@ -158,9 +158,9 @@ jobs:
|
||||
run: make -C source/ Objects/host/brieflz/libbrieflz.so && ./Translations/brieflz_test.py
|
||||
|
||||
check_c-cpp:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
|
||||
steps:
|
||||
- name: Install dependencies (apk)
|
||||
@@ -173,10 +173,19 @@ jobs:
|
||||
- name: Check format style with clang-format
|
||||
run: make clean check-style
|
||||
|
||||
check-settings-docs:
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Run the menu docs generator
|
||||
run: python Translations/gen_menu_docs.py
|
||||
- name: Check that Documentation/Settings.md didn't change
|
||||
run: git diff --exit-code
|
||||
|
||||
check_python:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
|
||||
steps:
|
||||
- name: Install dependencies (apk)
|
||||
@@ -190,14 +199,14 @@ jobs:
|
||||
run: python3 -m pip install --break-system-packages bdflib flake8
|
||||
|
||||
- name: Check python formatting with black
|
||||
run: black --check Translations
|
||||
run: black --diff --check Translations
|
||||
|
||||
- name: Check python with flake8
|
||||
run: flake8 Translations
|
||||
|
||||
check_shell:
|
||||
name: check_shell
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: ubuntu-24.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: shellcheck
|
||||
@@ -209,13 +218,13 @@ jobs:
|
||||
check_all_files_with_shebangs: "false" # Optional.
|
||||
|
||||
check_docs:
|
||||
runs-on: ubuntu-22.04
|
||||
runs-on: ubuntu-24.04
|
||||
container:
|
||||
image: alpine:3.19
|
||||
image: alpine:3.21
|
||||
|
||||
steps:
|
||||
- name: Install dependencies (apk)
|
||||
run: apk add --no-cache git
|
||||
run: apk add --no-cache git bash grep
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -227,4 +236,4 @@ jobs:
|
||||
run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE"
|
||||
|
||||
- name: Check and verify documentation
|
||||
run: /bin/sh ./scripts/deploy.sh docs
|
||||
run: ./scripts/deploy.sh docs
|
||||
|
@@ -40,9 +40,9 @@ I.e.:
|
||||
|
||||
**Additional scroll-able items appear in this order**:
|
||||
|
||||
### Date
|
||||
### Timestamp
|
||||
|
||||
- This is a date of firmware compilation and it has the following format: `DD-MM-YY` (i.e., `01-07-23` means it has been built in July, 1st, 2023)
|
||||
- This is a timestamp of firmware compilation and it has the following format: `YYYYMMDD HHMMSS` (i.e., `20230701 213456` means it has been built in July, 1st, 2023 at 9:34:56 pm)
|
||||
|
||||
### ID
|
||||
|
||||
|
61
Documentation/DebuggingPD.md
Normal file
61
Documentation/DebuggingPD.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Debugging PD
|
||||
|
||||
When using many of these soldering irons, the recommended power source is to use a USB-PD power supply.
|
||||
|
||||
Occasionally, issues are run into where the iron reboots or appears to not boot when connected to this supply.
|
||||
|
||||
There are generally a few different reasons for this to occur, the first is of course a bug or incompatibility in the IronOS PD-stack / firmware, but there are also power adapters that either have issues or try to be _smart_ to the detriment of compatibility.
|
||||
|
||||
It also helps to remember that driving a soldering iron is not like a normal load that these power supplies are designed for. Normally a laptop or phone will gently ramp the power draw up and down. Where as the soldering iron will rapidly go from 0 to full power, and then back to 0 again. This can cause issues with some power supplies tripping out.
|
||||
|
||||
In general, a normal, boring 60-100W PD supply is recommended. Watch out for adapters with multiple ports that are used by marketing to advertise a higher number. It's somewhat common to see 65W adapters being pushed that have two ports, one of which is 45W and one that is 20W. These cannot support 65W output on one typically.
|
||||
|
||||
Smarter chargers that try to implement every known protocol can come with quirks. Often slight shortcuts are taken in the PD implementation that can cause hard to debug issues.
|
||||
|
||||
|
||||
## If the unit doesn't power up at all
|
||||
|
||||
This can be the most frustrating one to diagnose.
|
||||
|
||||
First, test the device powers up when powered by a USB-A -> USB-C cable. Or a DC power supply. This can rule out other issues that cause the device to appear off (bad flashing).
|
||||
|
||||
### No power
|
||||
If your device won't power up on any other supply type, look into if you can boot into the bootloader. This is usually done by holding down a button while connecting it to a computer and then checking if it's detected.
|
||||
|
||||
If the device shows up to a computer, but doesn't operate when powered up normally, the two most likely causes are a bad flash/firmware OR a non-functioning display.
|
||||
|
||||
Testing alternative firmware builds or trying to heat the unit (pressing the front button) can be ways to test this.
|
||||
|
||||
### Powers up on other supplies
|
||||
|
||||
If the device powers up on other supplies, but not on the USB-PD supply, it could be a problem with the USB-PD supply itself. Try using a different USB-PD supply to see if the issue persists.
|
||||
|
||||
If the unit does not power on any PD supplies it could be damage to the PD PHY or the USB connector. USB-PD uses the CC pins on the connector, which are not used for normal data so a USB-A adapter for example doesn't use these at all.
|
||||
|
||||
## If the unit powers up but keeps rebooting
|
||||
|
||||
There are two causes of this:
|
||||
1. If the reboot occurs when the unit starts to heat up, then it is the power supply being unable to supply the power requested.
|
||||
2. The unit reboots frequently even without any buttons being pressed.
|
||||
|
||||
If this is the issue that you are seeing, then the problem is that something during the PD initialisation is failing.
|
||||
|
||||
The _best_ way to resolve this is to be able to capture the USB PD traffic. This is the only way to know what is **really** going on and why the two devices can't negotiate.
|
||||
|
||||
To capture PD traffic requires a device that can capture this data. A logic analyser can be used on the CC pins, though note that the signalling voltage is < 3.3V so it will require a logic analyser that can handle this or buffering.
|
||||
|
||||
Alternatively, a lot of the higher-end USB power meter units can capture the packets. It doesn't matter if it only shows these on screen or if it can save these out to a file (ideally a file though).
|
||||
|
||||
**Without a traffic capture, all debugging is guessing**
|
||||
|
||||
On firmwares 2.23+ there is a toggle in advanced settings to change the PD mode. This will adjust how the firmware negotiates with the PD supply slightly. This can enable/disable the PPS and EPR modes (dynamic voltage negotiation).
|
||||
|
||||
PPS is known to be incorrectly implemented on some supplies, so turning off these features can improve compatibility.
|
||||
|
||||
If the device is _sometimes_ stable, you can on Pinecil devices boot while holding the front button to enter the PD debug menu. This will show what voltages & power levels are being advertised by the device. This can be used to cross-check with what is printed on the adapter. Take into consideration that non e-marked cables will be limited to 3A and that EPR requires specifically marked cables.
|
||||
|
||||
If you take the tip out of the iron, it will result in most devices not negotiating a PD profile (the irons wait to know what kind of tip is installed). This can be used to stop the failing negotiations in some situations to allow viewing this menu.
|
||||
|
||||
|
||||
Before filing a support request, please try testing other power adapters & cables to try and narrow down the possibilities of the issue being a one-off.
|
||||
If you have the capability to capture the PD traffic, that makes the problem exponentially easier to rectify.
|
@@ -14,6 +14,42 @@ You will need to update the build settings for include paths and point to the ne
|
||||
In the `source` folder there is a `Makefile` that can be used to build the repository using command line tools.
|
||||
When running the `make` command, specify which model of the device and the language(s) you would like to use.
|
||||
|
||||
### Windows (MSYS2 environment)
|
||||
|
||||
1. Download `msys2` install package from the [official website](https://msys2.org) and install it according to the instruction there;
|
||||
2. Install requried packages (here and for the future commands use **`mingw64.exe`** terminal):
|
||||
```
|
||||
$ pacman -S mingw-w64-x86_64-arm-none-eabi-gcc mingw-w64-x86_64-libwinpthread-git python3 python3-pip make unzip git
|
||||
```
|
||||
3. Download _3rd party RISC-V toolchain_ `xpack-riscv-none-elf-gcc-...-win32-x64.zip` from [this repository](https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases);
|
||||
4. Move downloaded `xpack-riscv-none-elf-gcc-...-win32-x64.zip` to `msys64` _Windows_ directory (e.g., `C:\msys64\`);
|
||||
5. Extract files from `xpack-riscv-none-elf-gcc-...-win32-x64.zip` and go back to _home_ directory:
|
||||
```
|
||||
$ cd /
|
||||
$ unzip xpack-riscv-none-elf-gcc-...-win32-x64.zip
|
||||
$ cd ~
|
||||
```
|
||||
6. Permanently set `PATH` environment variable, so all required toolchains could be available for `make` and for other build scripts:
|
||||
```
|
||||
$ echo 'export PATH=/xpack-riscv-none-elf-gcc-.../bin:${PATH}' >> ~/.bashrc
|
||||
$ source ~/.bashrc
|
||||
```
|
||||
7. Additionally, `OpenOCD` and/or `ST-Link` can be installed as well to help with flashing:
|
||||
```
|
||||
$ pacman -S mingw-w64-x86_64-openocd
|
||||
$ pacman -S mingw-w64-x86_64-stlink
|
||||
```
|
||||
8. Clone _IronOS_ repo:
|
||||
```
|
||||
$ git clone --recursive https://github.com/Ralim/IronOS.git
|
||||
$ cd IronOS
|
||||
```
|
||||
9. Follow steps _4-8_ from [macOS section](#macos);
|
||||
10. `pip` can be updated inside `venv` only:
|
||||
```
|
||||
$ python3 -m pip install --upgrade pip
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
Use the following steps to set up a build environment for IronOS on the command line (in Terminal).
|
||||
|
@@ -24,7 +24,7 @@ In general you probably want `master`.
|
||||
Once you click on a run, scroll down to the "Artifacts" section and then click on your device model name to download a zip file.
|
||||
Then this works the same as a production release (use the correct file).
|
||||
|
||||
# Pinecil V2
|
||||
## Pinecil V2
|
||||
|
||||
- The MCU in Pinecil V2 is Bouffalo BL706 and does _not_ use usb-dfu for flashing as the previous Pinecil V1 MCU did.
|
||||
- See the Pinecil Wiki page [here](https://wiki.pine64.org/wiki/Pinecil#Firmware_&_Updates) for instructions.
|
||||
@@ -34,3 +34,16 @@ Then this works the same as a production release (use the correct file).
|
||||
- One advantage of Pinecil is that you cannot permanently damage it doing a firmware update (because BIN is in ROM); an update could render Pinecil temporarily inoperable if you flash an invalid firmware. But no worries, simply re-flashing with a working firmware copy will fix everything.
|
||||
- USB-C cable is required to do an update. Generally, all USB controllers work, but some hubs have issues, so it is preferred to avoid USB hubs for updates.
|
||||
- Background on the [BL706 chipset](https://lupyuen.github.io/articles/bl706)
|
||||
|
||||
### Troubleshooting
|
||||
|
||||
If you are running into issues such as timeouts during the programming or bootloader errors, the BL702 has a not-amazing USB PHY built in. This can cause problems on cheap cables (especially "thin" ones that tend not to have shielding). One of the authors (Ralim) has found this especially common on the cables supplied with Apple chargers when used with newer Ryzen processor ports.
|
||||
|
||||
It is _strongly_ reccomended to use a good quality cable, ideally _short_.
|
||||
Also try other USB ports, as on some devices they can use different hub's or lengths of signalling, and this can fix the issue.
|
||||
|
||||
By the PinecilV2's design, by default some of the internal buses are exposed on the USB3 pins, to enable hacking/debugging/mods. This is suspected it _may_ play poorly on some chipsets. Try using a USB2.0 cable. Others have had luck with chaining USB-C->USB-A->USB-C. This may be due to this, as a lot of these adaptors are USB2 or only USB3 5gbps (half USB3 pins).
|
||||
|
||||
Another workaround is to put a USB hub somewhere in the chain, as these will re-form the signal and can work around the issue.
|
||||
|
||||
_Finally_, some users have reported issues under Windows that were fixed by changing OS (Typically to a Linux live cd).
|
||||
|
@@ -26,11 +26,13 @@ It is easiest if you copy your logo file to be converted into this folder too, i
|
||||
|
||||
The image can be in color and any size, but it will be resized and converted to 1-bit color. However, it looks best if you create a 96x16 image (`png` or `bmp`) in any image editor and color the pixels black & white manually. The thresholding used for converting colour to B&W may not always work as well as one would hope.
|
||||
|
||||
The converter requires at least Python3 and Pillow apps. Follow online instructions for installing Python and Pillow on your machine. Any reasonably recent version should work well.
|
||||
The converter requires at least Python3 and Pillow apps as well as the IntelHex library for Python. Follow online instructions for installing Python, Pillow, and IntelHex on your machine. Any reasonably recent version should work well.
|
||||
|
||||
When running the script on the Windows operating system; it is recommended to use `Powershell` rather than the old `Command Prompt`.
|
||||
When running the script on the Windows operating system it is recommended to use `Powershell` rather than the old `Command Prompt`.
|
||||
|
||||
For installing pillow; you can install it via your package manager (Debian and similar distros) or via pip. To install via pip the command should be `python -m pip install pillow`.
|
||||
For installing pillow, you can install it via your package manager (Debian and similar distros) or via pip. To install via pip the command should be `python -m pip install pillow`.
|
||||
|
||||
For installing IntelHex you can use the same pip command as above but replace `pillow` with `intelhex` so that it becomes `python -m pip install intelhex`.
|
||||
|
||||
In your shell you can now execute `python img2logo.py input.png out -m ${model}` to convert the file `input.png` and create output files in the folder `out`.
|
||||
The model should be replaced by one of the following options:
|
||||
@@ -39,7 +41,7 @@ The model should be replaced by one of the following options:
|
||||
- `pinecilv1` for the Pinecil V1
|
||||
- `pinecilv2` for the Pinecil V2
|
||||
- `ts101` for the Miniware TS101 [^1] [^2]
|
||||
- `s60` for the Squire S60 [^1]
|
||||
- `s60` for the Sequre S60 [^1]
|
||||
- `mhp30` for the Miniware MHP30
|
||||
|
||||
Different models are used for different flash locations for the image storage.
|
||||
@@ -98,4 +100,4 @@ For these flash as per usual using the `.dfu` file. Afterwards power cycle and t
|
||||
|
||||
### Upload via blisp (PinecilV2)
|
||||
|
||||
For the PinecilV2 we suggest `blisp` as the command line tool to use if you are not using a GUI tool. `blsip` has been updated to accept `.dfu` files as well as the `.bin` files it historically used. As such you use the `.dfu` file for the logo and flash as per normal otherwise and it will work and reboot at the end. It should show you your new logo after flashing.
|
||||
For the PinecilV2 we suggest `blisp` as the command line tool to use if you are not using a GUI tool. `blisp` has been updated to accept `.dfu` files as well as the `.bin` files it historically used. As such you use the `.dfu` file for the logo and flash as per normal otherwise and it will work and reboot at the end. It should show you your new logo after flashing.
|
||||
|
@@ -21,13 +21,15 @@
|
||||
- [Temperature](../Documentation/Temperature.md)
|
||||
- [Startup Logo](../Documentation/Logo.md)
|
||||
- Hardware
|
||||
- [Hall Sensor (Pinecil)](../Documentation/HallSensor.md)
|
||||
- [Bluetooth (Pinecil V2)](../Documentation/Bluetooth.md)
|
||||
- [Debugging USB-PD](../Documentation/DebuggingPD.md)
|
||||
- [Hall Sensor (Pinecil)](../Documentation/HallSensor.md)
|
||||
- [Hardware Notes](../Documentation/Hardware.md)
|
||||
- [Troubleshooting](../Documentation/Troubleshooting.md)
|
||||
- [Known Hardware Issues](../Documentation/HardwareIssues.md)
|
||||
- [Power sources](../Documentation/PowerSources.md)
|
||||
- [New Hardware Requirements](../Documentation/PortingToNewDevice.md)
|
||||
- [Power sources](../Documentation/PowerSources.md)
|
||||
- [Troubleshooting](../Documentation/Troubleshooting.md)
|
||||
- [WS2812B RGB Modding (Pinecil V2)](../Documentation/WS2812BModding.md)
|
||||
- [Translations](../Documentation/Translation.md)
|
||||
- [Development](../Documentation/Development.md)
|
||||
- [Changelog](../Documentation/History.md)
|
||||
|
@@ -43,7 +43,199 @@ When the device is powered by a battery, this adjusts the low voltage threshold
|
||||
|
||||
On device help text:
|
||||
|
||||
Set cutoff voltage to prevent battery over-drain. (DC 10V) (S=3.3V per cell, disable PWR limit)
|
||||
Set cutoff voltage to prevent battery overdischarge (DC=10V) (S=3.3V per cell, disable PWR limit)
|
||||
|
||||
### Setting: Minimum voltage
|
||||
|
||||
When powered by a battery, this adjusts the minimum voltage per cell before shutdown. (This is multiplied by the cell count.)
|
||||
|
||||
On device help text:
|
||||
|
||||
Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)
|
||||
|
||||
### Setting: QC voltage
|
||||
|
||||
This adjusts the maximum voltage the QC negotiation will adjust to. Does NOT affect USB-PD. Should be set safely based on the current rating of your power supply.
|
||||
|
||||
On device help text:
|
||||
|
||||
Max QC voltage the iron should negotiate for
|
||||
|
||||
### Setting: PD timeout
|
||||
|
||||
How long until firmware stops trying to negotiate for USB-PD and tries QC instead. Longer times may help dodgy / old PD adapters, faster times move onto PD quickly. Units of 100ms. Recommended to keep small values.
|
||||
|
||||
On device help text:
|
||||
|
||||
PD negotiation timeout in 100ms steps for compatibility with some QC chargers
|
||||
|
||||
### Setting: PD Mode
|
||||
|
||||
Adjusts how the USB-PD Logic selects the voltage. No Dynamic disables EPR & PPS protocols, Safe mode does not use padding resistance (will select a slightly lower voltage).
|
||||
|
||||
On device help text:
|
||||
|
||||
No Dynamic disables EPR & PPS, Safe mode does not use padding resistance
|
||||
|
||||
### Setting: Boost temp
|
||||
|
||||
When the unit is in soldering mode. You can hold down the button at the front of the device to temporarily override the soldering temperature to this value. This SETS the temperature, it does not ADD to it.
|
||||
|
||||
On device help text:
|
||||
|
||||
Tip temperature used in "boost mode"
|
||||
|
||||
### Setting: Start-up behavior
|
||||
|
||||
When the device powers up, should it enter into a special mode. These settings set it to either start into soldering mode, sleeping mode or auto mode (Enters into soldering mode on the first movement).
|
||||
|
||||
On device help text:
|
||||
|
||||
S=heat to soldering temp | Z=standby at sleep temp until moved | R=standby without heating until moved
|
||||
|
||||
### Setting: Temp change short
|
||||
|
||||
Factor by which the temperature is changed with a quick press of the buttons.
|
||||
|
||||
On device help text:
|
||||
|
||||
Temperature-change-increment on short button press
|
||||
|
||||
### Setting: Temp change long
|
||||
|
||||
Factor by which the temperature is changed with a hold of the buttons.
|
||||
|
||||
On device help text:
|
||||
|
||||
Temperature-change-increment on long button press
|
||||
|
||||
### Setting: Allow locking buttons
|
||||
|
||||
If locking the buttons against accidental presses is enabled.
|
||||
|
||||
On device help text:
|
||||
|
||||
While soldering, hold down both buttons to toggle locking them (B=boost mode only | F=full locking)
|
||||
|
||||
### Setting: Profile Phases
|
||||
|
||||
set the number of phases for profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Number of phases in profile mode
|
||||
|
||||
### Setting: Preheat Temp
|
||||
|
||||
Preheat to this temperature at the start of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Preheat to this temperature at the start of profile mode
|
||||
|
||||
### Setting: Preheat Speed
|
||||
|
||||
How fast the temperature is allowed to rise during the preheat phase at the start of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Preheat at this rate (degrees per second)
|
||||
|
||||
### Setting: Phase 1 Temp
|
||||
|
||||
Target temperature for the end of phase 1 of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Target temperature for the end of this phase
|
||||
|
||||
### Setting: Phase 1 Duration
|
||||
|
||||
Duration of phase 1 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.
|
||||
|
||||
On device help text:
|
||||
|
||||
Target duration of this phase (seconds)
|
||||
|
||||
### Setting: Phase 2 Temp
|
||||
|
||||
Target temperature for the end of phase 2 of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 2 Duration
|
||||
|
||||
Duration of phase 2 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 3 Temp
|
||||
|
||||
Target temperature for the end of phase 3 of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 3 Duration
|
||||
|
||||
Duration of phase 3 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 4 Temp
|
||||
|
||||
Target temperature for the end of phase 5 of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 4 Duration
|
||||
|
||||
Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 5 Temp
|
||||
|
||||
Target temperature for the end of phase 5 of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Phase 5 Duration
|
||||
|
||||
Duration of phase 5 of profile mode. The phase might actually take longer if it takes longer to reach the target temperature.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Cooldown Speed
|
||||
|
||||
How fast the temperature is allowed to drop during the cooldown phase at the end of profile mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Cooldown at this rate at the end of profile mode (degrees per second)
|
||||
|
||||
### Setting: Motion sensitivity
|
||||
|
||||
Scale of how sensitive the device is to movement. Higher numbers == more sensitive. 0 == motion detection turned off.
|
||||
|
||||
On device help text:
|
||||
|
||||
1=least sensitive | ... | 9=most sensitive
|
||||
|
||||
### Setting: Sleep temp
|
||||
|
||||
@@ -69,13 +261,21 @@ On device help text:
|
||||
|
||||
Interval before the iron shuts down (m=minutes)
|
||||
|
||||
### Setting: Motion sensitivity
|
||||
### Setting: Hall sensor sensitivity
|
||||
|
||||
Scale of how sensitive the device is to movement. Higher numbers == more sensitive. 0 == motion detection turned off.
|
||||
If the unit has a hall effect sensor (Pinecil), this adjusts how sensitive it is at detecting a magnet to put the device into sleep mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
0=off | 1=least sensitive | ... | 9=most sensitive
|
||||
Sensitivity to magnets (1=least sensitive | ... | 9=most sensitive)
|
||||
|
||||
### Setting: HallSensor SleepTime
|
||||
|
||||
If the unit has a hall effect sensor (Pinecil), this adjusts how long the device takes before it drops down to the sleep temperature when hall sensor is over threshold.
|
||||
|
||||
On device help text:
|
||||
|
||||
Interval before "sleep mode" starts when hall effect is above threshold
|
||||
|
||||
### Setting: Temperature unit
|
||||
|
||||
@@ -83,15 +283,7 @@ If the device shows temperatures in °C or °F.
|
||||
|
||||
On device help text:
|
||||
|
||||
C=Celsius | F=Fahrenheit
|
||||
|
||||
### Setting: Detailed idle screen
|
||||
|
||||
Should the device show an 'advanced' view on the idle screen. The advanced view uses text to show more details than the typical icons.
|
||||
|
||||
On device help text:
|
||||
|
||||
Display detailed info in a smaller font on idle screen
|
||||
C=°Celsius | F=°Fahrenheit
|
||||
|
||||
### Setting: Display orientation
|
||||
|
||||
@@ -101,72 +293,13 @@ On device help text:
|
||||
|
||||
R=right-handed | L=left-handed | A=automatic
|
||||
|
||||
### Setting: Boost temp
|
||||
|
||||
When the unit is in soldering mode. You can hold down the button at the front of the device to temporarily override the soldering temperature to this value. This SETS the temperature, it does not ADD to it.
|
||||
|
||||
On device help text:
|
||||
|
||||
Tip temperature used in "boost mode"
|
||||
|
||||
### Setting: Start-up behavior
|
||||
|
||||
When the device powers up, should it enter into a special mode. These settings set it to either start into soldering mode, sleeping mode or auto mode (Enters into soldering mode on the first movement).
|
||||
|
||||
On device help text:
|
||||
|
||||
O=off | S=heat to soldering temp | Z=standby at sleep temp until moved | R=standby, heat-off until moved
|
||||
|
||||
### Setting: Cooldown flashing
|
||||
|
||||
If the idle screen should blink the tip temperature for attention while the tip is over 50°C. Intended as a 'tip is still hot' warning.
|
||||
|
||||
On device help text:
|
||||
|
||||
Flash temperature reading at idle if tip is hot
|
||||
|
||||
### Setting: Calibrate CJC at next boot
|
||||
|
||||
Note:
|
||||
If the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**.
|
||||
|
||||
This is used to calibrate the offset between ADC and Op-amp of the tip **at next boot** (Ideally it has to be done at boot, before internal components get warm.). If the checkbox is set, the calibration will only be performed at the next boot. After a successful calibration the checkbox will be unchecked again! If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, ideally while it sits on the desk.
|
||||
|
||||
Also, the calibration will only take place if both of the following conditions are met:
|
||||
- The tip must be installed.
|
||||
- The temperature difference between tip and handle must be less than 10°C. (~ ambient / room temperature)
|
||||
|
||||
Otherwise, the calibration will be performed the next time the device is started and both conditions are met, unless the corresponding checkbox is unchecked.
|
||||
|
||||
Hence, never repeat the calibration in quick succession!
|
||||
|
||||
On device help text:
|
||||
|
||||
Calibrate tip Cold Junction Compensation at the next boot (not required if Delta T is < 5°C)
|
||||
|
||||
### Setting: Restore default settings
|
||||
|
||||
Resets all settings and calibrations to factory defaults. Does NOT erase custom user boot up logo's.
|
||||
|
||||
On device help text:
|
||||
|
||||
Reset default settings for this firmware ver.
|
||||
|
||||
### Setting: Calibrate input voltage
|
||||
|
||||
Enters an adjustment mode where you can gradually adjust the measured voltage to compensate for any unit-to-unit variance in the voltage sense resistors.
|
||||
|
||||
On device help text:
|
||||
|
||||
Start VIN calibration (long press to exit)
|
||||
|
||||
### Setting: Detailed solder screen
|
||||
|
||||
Should the device show an 'advanced' soldering view. This is a text-based view that shows more information at the cost of no nice graphics.
|
||||
|
||||
On device help text:
|
||||
|
||||
Display detailed info in a smaller font on soldering screen
|
||||
Flash temp reading at idle while tip is hot
|
||||
|
||||
### Setting: Scrolling speed
|
||||
|
||||
@@ -174,31 +307,7 @@ How fast the description text scrolls when hovering on a menu. Faster speeds may
|
||||
|
||||
On device help text:
|
||||
|
||||
Speed info text scrolls past at (S=slow | F=fast)
|
||||
|
||||
### Setting: QC voltage
|
||||
|
||||
This adjusts the maximum voltage the QC negotiation will adjust to. Does NOT affect USB-PD. Should be set safely based on the current rating of your power supply.
|
||||
|
||||
On device help text:
|
||||
|
||||
Max QC voltage the iron should negotiate for
|
||||
|
||||
### Setting: PD timeout
|
||||
|
||||
How long until firmware stops trying to negotiate for USB-PD and tries QC instead. Longer times may help dodgy / old PD adapters, faster times move onto PD quickly. Units of 100ms. Recommended to keep small values.
|
||||
|
||||
On device help text:
|
||||
|
||||
PD negotiation timeout in 100ms steps for compatibility with some QC chargers
|
||||
|
||||
### Setting: Power limit
|
||||
|
||||
Allows setting a custom wattage for the device to aim to keep the AVERAGE power below. The unit can't control its peak power no matter how you set this. (Except for MHP30 which will regulate nicely to this). If USB-PD is in use, the limit will be set to the lower of this and the supplies advertised wattage.
|
||||
|
||||
On device help text:
|
||||
|
||||
Maximum power the iron can use (W=watt)
|
||||
Scrolling speed of info text (S=slow | F=fast)
|
||||
|
||||
### Setting: Swap + - keys
|
||||
|
||||
@@ -208,53 +317,21 @@ On device help text:
|
||||
|
||||
Reverse assignment of buttons for temperature adjustment
|
||||
|
||||
### Setting: Temp change short
|
||||
### Setting: Swap A B keys
|
||||
|
||||
Factor by which the temperature is changed with a quick press of the buttons.
|
||||
Swaps which button is used as Enter/Change and as Scroll/Back in Settings menu.
|
||||
|
||||
On device help text:
|
||||
|
||||
Temperature-change-increment on short button press
|
||||
Reverse assignment of buttons for Settings menu
|
||||
|
||||
### Setting: Temp change long
|
||||
### Setting: Anim. speed
|
||||
|
||||
Factor by which the temperature is changed with a hold of the buttons.
|
||||
How fast should the menu animations loop, or if they should not loop at all.
|
||||
|
||||
On device help text:
|
||||
|
||||
Temperature-change-increment on long button press
|
||||
|
||||
### Setting: Power pulse
|
||||
|
||||
Enables and sets the wattage of the power pulse. Power pulse causes the device to briefly turn on the heater to draw power to avoid power banks going to sleep.
|
||||
|
||||
On device help text:
|
||||
|
||||
Intensity of power of keep-awake-pulse (watt)
|
||||
|
||||
### Setting: Hall sensor sensitivity
|
||||
|
||||
If the unit has a hall effect sensor (Pinecil), this adjusts how sensitive it is at detecting a magnet to put the device into sleep mode.
|
||||
|
||||
On device help text:
|
||||
|
||||
Sensitivity to magnets (0=off | 1=least sensitive | ... | 9=most sensitive)
|
||||
|
||||
### Setting: Allow locking buttons
|
||||
|
||||
If locking the buttons against accidental presses is enabled.
|
||||
|
||||
On device help text:
|
||||
|
||||
While soldering, hold down both buttons to toggle locking them (D=disable | B=boost mode only | F=full locking)
|
||||
|
||||
### Setting: Minimum voltage
|
||||
|
||||
When powered by a battery, this adjusts the minimum voltage per cell before shutdown. (This is multiplied by the cell count.)
|
||||
|
||||
On device help text:
|
||||
|
||||
Minimum allowed voltage per battery cell (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)
|
||||
Pace of icon animations in menu (S=slow | M=medium | F=fast)
|
||||
|
||||
### Setting: Anim. loop
|
||||
|
||||
@@ -264,38 +341,6 @@ On device help text:
|
||||
|
||||
Loop icon animations in main menu
|
||||
|
||||
### Setting: Anim. speed
|
||||
|
||||
How fast should the menu animations loop, or if they should not loop at all.
|
||||
|
||||
On device help text:
|
||||
|
||||
Pace of icon animations in menu (O=off | S=slow | M=medium | F=fast)
|
||||
|
||||
### Setting: Power pulse delay
|
||||
|
||||
Adjusts the time interval between power pulses. Longer gaps reduce undesired heating of the tip, but needs to be fast enough to keep your power bank awake.
|
||||
|
||||
On device help text:
|
||||
|
||||
Delay before keep-awake-pulse is triggered (x 2.5s)
|
||||
|
||||
### Setting: Power pulse duration
|
||||
|
||||
How long should the power pulse go for. Some power banks require seeing the power draw be sustained for a certain duration to keep awake. Should be kept as short as possible to avoid wasting power / undesired heating of the tip.
|
||||
|
||||
On device help text:
|
||||
|
||||
Keep-awake-pulse duration (x 250ms)
|
||||
|
||||
### Setting: Language: EN English
|
||||
|
||||
Changes the device language on multi-lingual builds.
|
||||
|
||||
On device help text:
|
||||
|
||||
Current firmware language
|
||||
|
||||
### Setting: Screen brightness
|
||||
|
||||
Display brightness. Higher values age the OLED faster due to burn-in. (However, it is notable that most of these screens die from other causes first.)
|
||||
@@ -318,4 +363,111 @@ Sets the duration for the boot logo (s=seconds).
|
||||
|
||||
On device help text:
|
||||
|
||||
Set Boot logo duration (off | s=seconds | infinity)
|
||||
Set boot logo duration (s=seconds)
|
||||
|
||||
### Setting: Detailed idle screen
|
||||
|
||||
Should the device show an 'advanced' view on the idle screen. The advanced view uses text to show more details than the typical icons.
|
||||
|
||||
On device help text:
|
||||
|
||||
Display detailed info in a smaller font on idle screen
|
||||
|
||||
### Setting: Detailed solder screen
|
||||
|
||||
Should the device show an 'advanced' soldering view. This is a text-based view that shows more information at the cost of no nice graphics.
|
||||
|
||||
On device help text:
|
||||
|
||||
Display detailed info in a smaller font on soldering screen
|
||||
|
||||
### Setting: Bluetooth
|
||||
|
||||
Should BLE be enabled at boot time.
|
||||
|
||||
On device help text:
|
||||
|
||||
Enables BLE
|
||||
|
||||
### Setting: Power limit
|
||||
|
||||
Allows setting a custom wattage for the device to aim to keep the AVERAGE power below. The unit can't control its peak power no matter how you set this. (Except for MHP30 which will regulate nicely to this). If USB-PD is in use, the limit will be set to the lower of this and the supplies advertised wattage.
|
||||
|
||||
On device help text:
|
||||
|
||||
Average maximum power the iron can use (W=watt)
|
||||
|
||||
### Setting: Calibrate CJC at next boot
|
||||
|
||||
Note:
|
||||
If the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**.
|
||||
|
||||
This is used to calibrate the offset between ADC and Op-amp of the tip **at next boot** (Ideally it has to be done at boot, before internal components get warm.). If the checkbox is set, the calibration will only be performed at the next boot. After a successful calibration the checkbox will be unchecked again! If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, ideally while it sits on the desk.
|
||||
|
||||
|
||||
Also, the calibration will only take place if both of the following conditions are met:
|
||||
- The tip must be installed.
|
||||
- The temperature difference between tip and handle must be less than 10°C. (~ ambient / room temperature)
|
||||
|
||||
Otherwise, the calibration will be performed the next time the device is started and both conditions are met, unless the corresponding checkbox is unchecked.
|
||||
Hence, never repeat the calibration in quick succession!
|
||||
|
||||
On device help text:
|
||||
|
||||
Calibrate Cold Junction Compensation at next boot (not required if Delta T is < 5°C)
|
||||
|
||||
### Setting: Calibrate input voltage
|
||||
|
||||
Enters an adjustment mode where you can gradually adjust the measured voltage to compensate for any unit-to-unit variance in the voltage sense resistors.
|
||||
|
||||
On device help text:
|
||||
|
||||
Start VIN calibration (long press to exit)
|
||||
|
||||
### Setting: Power pulse
|
||||
|
||||
Enables and sets the wattage of the power pulse. Power pulse causes the device to briefly turn on the heater to draw power to avoid power banks going to sleep.
|
||||
|
||||
On device help text:
|
||||
|
||||
Intensity of power of keep-awake-pulse (W=watt)
|
||||
|
||||
### Setting: Power pulse delay
|
||||
|
||||
Adjusts the time interval between power pulses. Longer gaps reduce undesired heating of the tip, but needs to be fast enough to keep your power bank awake.
|
||||
|
||||
On device help text:
|
||||
|
||||
Delay before keep-awake-pulse is triggered (x 2.5s)
|
||||
|
||||
### Setting: Power pulse duration
|
||||
|
||||
How long should the power pulse go for. Some power banks require seeing the power draw be sustained for a certain duration to keep awake. Should be kept as short as possible to avoid wasting power / undesired heating of the tip.
|
||||
|
||||
On device help text:
|
||||
|
||||
Keep-awake-pulse duration (x 250ms)
|
||||
|
||||
### Setting: Restore default settings
|
||||
|
||||
Resets all settings and calibrations to factory defaults. Does NOT erase custom user boot up logo's.
|
||||
|
||||
On device help text:
|
||||
|
||||
Reset all settings to default
|
||||
|
||||
### Setting: Language: EN English
|
||||
|
||||
Changes the device language on multi-lingual builds.
|
||||
|
||||
On device help text:
|
||||
|
||||
|
||||
|
||||
### Setting: Soldering Tip Type
|
||||
|
||||
For manually selecting the type of tip fitted
|
||||
|
||||
On device help text:
|
||||
|
||||
Select the tip type fitted
|
||||
|
33
Documentation/WS2812BModding.md
Normal file
33
Documentation/WS2812BModding.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WS2812B RGB Modding (Pinecil V2)
|
||||
|
||||
## What is it?
|
||||
|
||||
The idea of this mod is to bring the RGB feature of the MHP30 to the Pinecil V2.
|
||||
Use a transparent shell for a better effect.
|
||||
|
||||
Pinecil V2 has a free GPIO_12 accessible through TP10, which is along the screen, cf [Pinecil PCB placement v2.0](https://files.pine64.org/doc/Pinecil/Pinecil_PCB_placement_v2.0_20220608.pdf) page 3. (TP9 (GPIO_14) is also available but hidden below the screen. If you want to use it, change `WS2812B_Pin` in `source/Core/BSP/Pinecilv2/Pins.h`.)
|
||||
|
||||
We'll using it to drive a WS2812B and let the color logic already present for the MHP30 do its magic:
|
||||
|
||||
- green when temperature is safe (< 55°C)
|
||||
- pulsing red when heating
|
||||
- solid red when desired temperature is reached
|
||||
- orange when cooling down
|
||||
|
||||
## Electrical considerations
|
||||
|
||||
WS2812B requires a Vdd between 3.5 and 5.3V and Vih (high level of input signal) must be at least 0.7*Vdd.
|
||||
Pinecil V2 GPIO levels are 3.3V and the 5V rail is actually max 4.6V.
|
||||
So we can directly power the WS2812B on the 5V rail and command it with the GPIO without need for a level shifter, or for a Zener diode to clamp Vdd.
|
||||
|
||||
## How to wire it?
|
||||
|
||||
- WS2812B pin 1 (Vdd) is connected to the "5V" rail, e.g. on the C8 capacitor as illustrated [here](https://github.com/Ralim/IronOS/issues/1410#issuecomment-1296064392).
|
||||
- WS2812B pin 3 (Vss) is connected to the Pinecil GND, e.g. on the U10 pad at the back of the PCB, below R35, as illustrated [here](https://github.com/Ralim/IronOS/issues/1410#issuecomment-1296064392).
|
||||
- WS2812B pin 4 (Din) is connected to TP10.
|
||||
|
||||
You can use e.g. 0.1-mm enameled wire and isolate connections with UV glue to avoid any shortcut.
|
||||
|
||||
## How to enable it in the code?
|
||||
|
||||
`make firmware-EN model=Pinecilv2 ws2812b_enable=1`
|
@@ -15,7 +15,7 @@ _This firmware does **NOT** support the USB port while running for changing sett
|
||||
| Device | DC | QC | PD | EPR | BLE | Battery | Recommended |
|
||||
| :--------: | :-: | :-: | :-: | :-: | :-: | :-----: | :---------: |
|
||||
| MHP30 | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ |
|
||||
| Pinecil V1 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ✔️ |
|
||||
| Pinecil V1 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ |
|
||||
| Pinecil V2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
|
||||
| TS80P | ❌ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ✔️ |
|
||||
| TS100 | ✔️ | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ |
|
||||
|
4
Makefile
4
Makefile
@@ -149,7 +149,7 @@ test-md:
|
||||
@echo ""
|
||||
@echo "---- Checking documentation... ----"
|
||||
@echo ""
|
||||
@/bin/sh ./scripts/deploy.sh docs
|
||||
@./scripts/deploy.sh docs
|
||||
|
||||
# shell style & linter check (github CI version of shellcheck is more recent than alpine one so the latter may not catch some policies)
|
||||
test-sh:
|
||||
@@ -164,7 +164,7 @@ test-py:
|
||||
@echo "---- Checking python code... ----"
|
||||
@echo ""
|
||||
flake8 Translations
|
||||
black --check Translations
|
||||
black --diff --check Translations
|
||||
@$(MAKE) -C source/ Objects/host/brieflz/libbrieflz.so
|
||||
./Translations/brieflz_test.py
|
||||
./Translations/make_translation_test.py
|
||||
|
27
README.md
27
README.md
@@ -23,12 +23,12 @@ _This firmware does **NOT** support the USB port while running for changing sett
|
||||
|
||||
## Supported Hardware
|
||||
|
||||
| Device | DC | QC | PD | EPR | BLE | Tip Sense | Recommended Purchase | Notes |
|
||||
| Device | DC | QC | PD | EPR\*\*\*\* | BLE | Tip Sense | Recommended Purchase | Notes |
|
||||
| :------------: | :-: | :-: | :-: | :-: | :-: | :-------: | :------------------: | :-------------------------------------: |
|
||||
| Miniware MHP30 | ❌ | ❌ | ✔️ | ❌ | ❌ | ✔️ | ✔️ | |
|
||||
| Pinecil V1 | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ❌ | ❌ \* | |
|
||||
| Pinecil V2 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
|
||||
| Miniware TS101 | ✔️ | ❌ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ | Full OLED resolution not yet supported. |
|
||||
| Miniware TS101 | ✔️ | ❌ | ✔️ | ✔️ | ❌ | ✔️ | ✔️ \*\*\*\*\* | Full OLED resolution not yet supported. |
|
||||
| Sequre S60 | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. |
|
||||
| Sequre S60P | ❌ | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | Full OLED resolution not yet supported. |
|
||||
| Sequre T55 | ❌ | ❌ | ✔️ | ❌ | ❌ | N/A | ✔️ | Full OLED resolution not yet supported. |
|
||||
@@ -48,6 +48,11 @@ The _TS101_ & _S60(P)_ irons and _MHP30_ & _T55_ plates feature a higher resolut
|
||||
|
||||
\*\*\* _TS80_ is replaced by _TS80P_. Production ramped down a long time ago and it's just existing stock clearing the system. It's marked not recommended being optimistic that people might pause and buy the far superior _TS80P_ instead. This is the main reason why the _TS80_ is **_no longer recommended_**.
|
||||
|
||||
\*\*\*\* **EPR/PPS with 28V support** is _**disabled by default**_ due to [safety concerns](https://github.com/Ralim/IronOS/pull/2073), but to turn it back on set
|
||||
_PD Mode_ option in _Power settings_ submenu to _Safe_ or _Default_.
|
||||
|
||||
\*\*\*\*\* Some users confirm that there is a version of newer _TS101_ revision with another OLED screen model, which is not supported yet at all by _IronOS_ unfortunately. See [this bug report](https://github.com/Ralim/IronOS/issues/2063) for more information.
|
||||
|
||||
## Getting Started
|
||||
|
||||
To get started with _IronOS firmware_, please jump to [Getting Started Guide](https://ralim.github.io/IronOS/GettingStarted/).
|
||||
@@ -139,6 +144,22 @@ After powering on the device for the first time with _IronOS_ installed and havi
|
||||
|
||||
Additional details are described in the [menu information](https://ralim.github.io/IronOS/Menu/).
|
||||
|
||||
## Remote Control
|
||||
|
||||
### Pinecil V2 only
|
||||
|
||||
Pinecil V2 has [_Bluetooth Low Energy_ module](https://ralim.github.io/IronOS/Bluetooth), which is supported by _IronOS_ since `2.21` release to control some of the settings using additional tools like [PineSAM](https://github.com/builder555/PineSAM) or [PineTool](https://github.com/lachlanbell/PineTool). In `2.21` and `2.22` releases the module was _on_ by default. However, **_Bluetooth_ is turned off in the settings by default in current `dev` builds and for the next releases** [due to security concerns](#1856).[^ble]
|
||||
|
||||
To enable _Bluetooth_ back:
|
||||
- go to _Settings_ menu;
|
||||
- press `-/B` button four times to scroll the menu for `Advanced settings`;
|
||||
- press `+/A` button to open submenu;
|
||||
- press `+/A` button to toggle/enable _Bluetooth_ feature;
|
||||
- press `-/B` **and hold it** for just more than five seconds to exit from the _Settings_ menu.
|
||||
|
||||
[^ble]:
|
||||
This is related only to situations when a user restores default settings using menu, or when _IronOS_ update is taking place on a new device or on a device with a previous firmware version.
|
||||
|
||||
## Translations
|
||||
|
||||
Is your preferred language missing localisation of some of the text?
|
||||
@@ -175,6 +196,6 @@ Other components such as _FreeRTOS_ and _USB-PD_ have their own licenses.
|
||||
|
||||
## Commercial Use
|
||||
|
||||
This software is provided "AS IS", so I cannot provide any commercial support for the firmware.
|
||||
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 hardware with this firmware.
|
||||
**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**.
|
||||
|
@@ -51,7 +51,7 @@ In the menu there are a few main categories that are used to keep the list manag
|
||||
for menu in defs.get("menuGroups", {}):
|
||||
menu_id = menu.get("id", "")
|
||||
entry = translation_data.get("menuGroups", {}).get(menu_id, "")
|
||||
name = " ".join(entry.get("text2", []))
|
||||
name = " ".join(entry.get("displayText").split("\n"))
|
||||
desc = menu.get("description", "")
|
||||
section = f"""
|
||||
### Category: {name}
|
||||
@@ -80,9 +80,9 @@ This is the "on device help text".
|
||||
for menu in defs.get("menuOptions", {}):
|
||||
menu_id = menu.get("id", "")
|
||||
entry = translation_data.get("menuOptions", {}).get(menu_id, "")
|
||||
name = " ".join(entry.get("text2", []))
|
||||
name = " ".join(entry.get("displayText").split("\n"))
|
||||
desc = menu.get("description", "")
|
||||
on_device_desc = entry.get("desc", "")
|
||||
on_device_desc = entry.get("description", "")
|
||||
section = f"""
|
||||
### Setting: {name}
|
||||
|
||||
@@ -99,8 +99,8 @@ def main() -> None:
|
||||
json_dir = HERE
|
||||
print(json_dir)
|
||||
logging.info("Loading translation definitions")
|
||||
defs = load_json(TRANSLATION_DEFS_PATH)
|
||||
eng_translation = load_json(ENGLISH_TRANSLATION_PATH)
|
||||
defs = load_json(TRANSLATION_DEFS_PATH, False)
|
||||
eng_translation = load_json(ENGLISH_TRANSLATION_PATH, False)
|
||||
with open(MENU_DOCS_FILE_PATH, "w") as outputf:
|
||||
write_header(outputf)
|
||||
write_menu_categories(outputf, defs, eng_translation)
|
||||
|
@@ -10,7 +10,7 @@ import pickle
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
from datetime import datetime
|
||||
import time
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional, TextIO, Tuple, Union
|
||||
from dataclasses import dataclass
|
||||
@@ -152,7 +152,10 @@ def get_constants() -> List[Tuple[str, str]]:
|
||||
|
||||
def get_debug_menu() -> List[str]:
|
||||
return [
|
||||
datetime.today().strftime("%Y-%m-%d"),
|
||||
time.strftime(
|
||||
"%Y%m%d %H%M%S",
|
||||
time.gmtime(int(os.environ.get("SOURCE_DATE_EPOCH", time.time()))),
|
||||
),
|
||||
"ID ",
|
||||
"ACC ",
|
||||
"PWR ",
|
||||
@@ -629,7 +632,7 @@ def make_font_table_named_cpp(
|
||||
if name:
|
||||
output_table = f"const uint8_t {name}[] = {{\n"
|
||||
for i, sym in enumerate(sym_list):
|
||||
output_table += f"{bytes_to_c_hex(font_map[sym])}//0x{i+2:X} -> {sym}\n"
|
||||
output_table += f"{bytes_to_c_hex(font_map[sym])}//0x{i + 2:X} -> {sym}\n"
|
||||
if name:
|
||||
output_table += f"}}; // {name}\n"
|
||||
return output_table
|
||||
@@ -643,7 +646,7 @@ def make_font_table_06_cpp(sym_list: List[str], font_map: FontMapsPerFont) -> st
|
||||
font_line = bytes_to_c_hex(font_bytes)
|
||||
else:
|
||||
font_line = "// " # placeholder
|
||||
output_table += f"{font_line}//0x{i+2:X} -> {sym}\n"
|
||||
output_table += f"{font_line}//0x{i + 2:X} -> {sym}\n"
|
||||
output_table += "};\n"
|
||||
return output_table
|
||||
|
||||
@@ -995,7 +998,7 @@ def write_languages(
|
||||
f.write("};\n")
|
||||
f.write(
|
||||
"const uint8_t LanguageCount = sizeof(LanguageMetas) / sizeof(LanguageMetas[0]);\n\n"
|
||||
f"alignas(TranslationData) uint8_t translation_data_out_buffer[{max_decompressed_translation_size }];\n"
|
||||
f"alignas(TranslationData) uint8_t translation_data_out_buffer[{max_decompressed_translation_size}];\n"
|
||||
"const uint16_t translation_data_out_buffer_size = sizeof(translation_data_out_buffer);\n\n"
|
||||
)
|
||||
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Інвертаваць\nкнопкі",
|
||||
"description": "Інвертаваць кнопкі вымярэння тэмпературы"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Хуткасць\nанімацыі",
|
||||
"description": "Хуткасць анімацыі гузікаў у галоўным меню (Мілісекунды) (Н=Нізкая | С=Сярэдняя | В=Высокая)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Размяна\nбутони +/-",
|
||||
"description": "Обръщане на бутоните + и - за промяна на температурата на човка на поялника"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Скорост на\nанимацията",
|
||||
"description": "Скорост на анимация на иконата в главното меню (Н=Ниска | C=Средна | B=Висока)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Prohodit\ntl. +-?",
|
||||
"description": "Prohodit tlačítka pro změnu teploty"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nrychlost",
|
||||
"description": "Tempo animace ikon v menu (P=pomalu | S=středně | R=rychle)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Skift\n+ - tasterne",
|
||||
"description": "Skift tildeling af knapper til temperaturjustering"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nHastighed",
|
||||
"description": "Hastigheden for ikonanimationer i menuen (S=langsomt | M=medium | F=hurtigt)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "+- Tasten\numkehren",
|
||||
"description": "Tastenbelegung zur Temperaturänderung umkehren"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "A B Tasten\nvertauschen",
|
||||
"description": "Umgekehrte Belegung der Tasten für das Einstellungsmenü"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nGeschw.",
|
||||
"description": "Geschwindigkeit der Icon-Animationen im Menü (L=langsam | M=mittel | S=schnell)"
|
||||
@@ -340,8 +344,8 @@
|
||||
"description": ""
|
||||
},
|
||||
"SolderingTipType": {
|
||||
"displayText": "Soldering\nTip Type",
|
||||
"description": "Select the tip type fitted"
|
||||
"displayText": "Löt-\nspitzentyp",
|
||||
"description": "Wählen Sie den Typ der eingesetzten Spitze"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Αντιστροφή\nπλήκτρων + -",
|
||||
"description": "Αντιστροφή διάταξης πλήκτρων στη ρύθμιση θερμοκρασίας"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Ταχύτητα\nκιν. εικονιδ.",
|
||||
"description": "Ρυθμός κίνησης εικονιδίων στο μενού (Α=αργός | Μ=μέτριος | Γ=γρήγορος)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Swap\n+ - keys",
|
||||
"description": "Reverse assignment of buttons for temperature adjustment"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nspeed",
|
||||
"description": "Pace of icon animations in menu (S=slow | M=medium | F=fast)"
|
||||
|
@@ -31,7 +31,7 @@
|
||||
"message": "Térmico\nFuera de control"
|
||||
},
|
||||
"WarningTipShorted": {
|
||||
"message": "¡Punta en Corto!"
|
||||
"message": "¡Punta en cortocircuito!"
|
||||
},
|
||||
"SettingsCalibrationWarning": {
|
||||
"message": "¡Antes de reiniciar, asegúrese de que la punta y el mango estén a temperatura ambiente!"
|
||||
@@ -145,11 +145,11 @@
|
||||
},
|
||||
"QCMaxVoltage": {
|
||||
"displayText": "Potencia de\nentrada",
|
||||
"description": "Potencia en Watts del adaptador de corriente utilizado"
|
||||
"description": "Potencia en vatios del adaptador de corriente utilizado"
|
||||
},
|
||||
"PDNegTimeout": {
|
||||
"displayText": "PD\ntiempo de espera",
|
||||
"description": "Timeout de negociación de PD en pasos de 100ms para compatibilidad con algunos cargadores QC (0: apagado)"
|
||||
"description": "Tiempo de espera de negociación de PD en pasos de 100ms para compatibilidad con algunos cargadores QC (0: apagado)"
|
||||
},
|
||||
"USBPDMode": {
|
||||
"displayText": "PD\nMode",
|
||||
@@ -253,7 +253,7 @@
|
||||
},
|
||||
"HallEffSleepTimeout": {
|
||||
"displayText": "Tiempo reposo\nSensor Hall",
|
||||
"description": "Intervalo antes de que \"sleep mode\" empiece cuando sensorhall supera límite"
|
||||
"description": "Intervalo antes de que \"modo resposo\" empiece cuando sensorhall supera límite"
|
||||
},
|
||||
"TemperatureUnit": {
|
||||
"displayText": "Unidad de\ntemperatura",
|
||||
@@ -275,6 +275,10 @@
|
||||
"displayText": "Invertir\nbotones +/-",
|
||||
"description": "Invertir botones de ajuste de temperatura"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Cambiar\nteclas A B",
|
||||
"description": "Asignación inversa de botonos para el menú de configuración"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nvelocidad",
|
||||
"description": "Velocidad de animaciones de iconos en el menú (L=baja | M=media | R=alta)"
|
||||
@@ -309,11 +313,11 @@
|
||||
},
|
||||
"PowerLimit": {
|
||||
"displayText": "Potencia\nlímite",
|
||||
"description": "Elige el límite de potencia máxima del soldador (en Watts)"
|
||||
"description": "Elige el límite de potencia máxima del soldador (en vatios)"
|
||||
},
|
||||
"CalibrateCJC": {
|
||||
"displayText": "Calibrar CJC\nen el próximo inicio",
|
||||
"description": "Al siguinte inicio el Cold Junction Compensation sera calibrado (no requerido si el Delta T es < 5°C)"
|
||||
"description": "Al siguinte inicio la compensación de referencia será calibrada (no requerido si el Delta T es < 5°C)"
|
||||
},
|
||||
"VoltageCalibration": {
|
||||
"displayText": "Calibrar voltaje\nde entrada",
|
||||
@@ -321,7 +325,7 @@
|
||||
},
|
||||
"PowerPulsePower": {
|
||||
"displayText": "Pulsos bat.\nconstantes",
|
||||
"description": "Intensidad de la potencia del pulso para mantener encendido (W=Watt)"
|
||||
"description": "Intensidad de la potencia del pulso para mantener encendido (W=Vatio)"
|
||||
},
|
||||
"PowerPulseWait": {
|
||||
"displayText": "Tiempor entre\n pulso de energia",
|
||||
@@ -340,8 +344,8 @@
|
||||
"description": ""
|
||||
},
|
||||
"SolderingTipType": {
|
||||
"displayText": "Soldering\nTip Type",
|
||||
"description": "Select the tip type fitted"
|
||||
"displayText": "Tipo de\nTpunta",
|
||||
"description": "Selecciona la punta montada"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Vaheta\n+ - nupud",
|
||||
"description": "Temperatuurinuppude asukohtade vahetus"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nkiirus",
|
||||
"description": "Menüüikoonide animatsiooni kiirus (A=aeglane | K=keskmine | T=tempokas)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Suunnanvaihto\n+ - näppäimille",
|
||||
"description": "Lämpötilapainikkeiden suunnan vaihtaminen"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Animaation\nnopeus",
|
||||
"description": "Animaatioiden nopeus valikossa (A=alhainen | K=keskiverto | S=suuri)"
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"tempUnitFahrenheit": false,
|
||||
"messagesWarn": {
|
||||
"CalibrationDone": {
|
||||
"message": "Étalonnage\nterminé!"
|
||||
"message": "Étalonnage\nterminé !"
|
||||
},
|
||||
"ResetOKMessage": {
|
||||
"message": "Reset OK"
|
||||
@@ -19,55 +19,55 @@
|
||||
"message": "USB-PD\nnon détecté !"
|
||||
},
|
||||
"LockingKeysString": {
|
||||
"message": "VERROUIL"
|
||||
"message": "VEROUILLÉ"
|
||||
},
|
||||
"UnlockingKeysString": {
|
||||
"message": "DEVERROU"
|
||||
"message": "DÉVÉROUILLÉ"
|
||||
},
|
||||
"WarningKeysLockedString": {
|
||||
"message": "! VERR. !"
|
||||
},
|
||||
"WarningThermalRunaway": {
|
||||
"message": "Emballement\nthermique"
|
||||
"message": "Surchauffe\ncritique"
|
||||
},
|
||||
"WarningTipShorted": {
|
||||
"message": "!Tip Shorted!"
|
||||
"message": "!Court-circuit Panne!"
|
||||
},
|
||||
"SettingsCalibrationWarning": {
|
||||
"message": "Avant de redémarrer, assurez-vous que la panne et la poignée sont à température ambiante !"
|
||||
},
|
||||
"CJCCalibrating": {
|
||||
"message": "Etalonnage\n"
|
||||
"message": "Étalonnage\n"
|
||||
},
|
||||
"SettingsResetWarning": {
|
||||
"message": "Voulez-vous vraiment réinitialiser les paramètres aux valeurs par défaut ?"
|
||||
},
|
||||
"UVLOWarningString": {
|
||||
"message": "DC FAIBL"
|
||||
"message": "DC FAIBLE"
|
||||
},
|
||||
"UndervoltageString": {
|
||||
"message": "Sous-tension\n"
|
||||
},
|
||||
"InputVoltageString": {
|
||||
"message": "V d'entrée: \n"
|
||||
"message": "Tension:\n"
|
||||
},
|
||||
"SleepingAdvancedString": {
|
||||
"message": "En veille...\n"
|
||||
},
|
||||
"SleepingTipAdvancedString": {
|
||||
"message": "Panne: \n"
|
||||
"message": "Panne:\n"
|
||||
},
|
||||
"ProfilePreheatString": {
|
||||
"message": "Preheat\n"
|
||||
"message": "Préchauffage\n"
|
||||
},
|
||||
"ProfileCooldownString": {
|
||||
"message": "Cooldown\n"
|
||||
"message": "Refroidissement\n"
|
||||
},
|
||||
"DeviceFailedValidationWarning": {
|
||||
"message": "Votre appareil semble être une contrefaçon !"
|
||||
},
|
||||
"TooHotToStartProfileWarning": {
|
||||
"message": "Too hot to\nstart profile"
|
||||
"message": "Trop chaud pour\nactiver le profile"
|
||||
}
|
||||
},
|
||||
"characters": {
|
||||
@@ -107,22 +107,22 @@
|
||||
},
|
||||
"menuValues": {
|
||||
"USBPDModeDefault": {
|
||||
"displayText": "Default\nMode"
|
||||
"displayText": "Mode\npar Défaut"
|
||||
},
|
||||
"USBPDModeNoDynamic": {
|
||||
"displayText": "No\nDynamic"
|
||||
"displayText": "Non\nDynamique"
|
||||
},
|
||||
"USBPDModeSafe": {
|
||||
"displayText": "Safe\nMode"
|
||||
"displayText": "Mode\nSafe"
|
||||
},
|
||||
"TipTypeAuto": {
|
||||
"displayText": "Auto\nSense"
|
||||
"displayText": "Détéction\nAuto."
|
||||
},
|
||||
"TipTypeT12Long": {
|
||||
"displayText": "TS100\nLong"
|
||||
},
|
||||
"TipTypeT12Short": {
|
||||
"displayText": "Pine\nShort"
|
||||
"displayText": "Pine\nCourt"
|
||||
},
|
||||
"TipTypeT12PTS": {
|
||||
"displayText": "PTS\n200"
|
||||
@@ -137,11 +137,11 @@
|
||||
"menuOptions": {
|
||||
"DCInCutoff": {
|
||||
"displayText": "Source\nd'alim.",
|
||||
"description": "Source d'alimentation. Règle la tension de coupure (DC 10V) (S 3.3V par cellules, désactive la limite de puissance)"
|
||||
"description": "Source d'alimentation. Définit la tension de coupure (DC 10V) (S 3.3V par cellule, désactive la limite de puissance)"
|
||||
},
|
||||
"MinVolCell": {
|
||||
"displayText": "Tension\nminimale",
|
||||
"description": "Tension minimale autorisée par cellule (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)"
|
||||
"description": "Tension minimale autorisée par cellule (3S : 3 - 3.7V | 4-6S : 2.4 - 3.7V)"
|
||||
},
|
||||
"QCMaxVoltage": {
|
||||
"displayText": "Tension\nQC",
|
||||
@@ -149,18 +149,18 @@
|
||||
},
|
||||
"PDNegTimeout": {
|
||||
"displayText": "Délai\nexpir. PD",
|
||||
"description": "Délai de la negociation PD par étapes de 100ms pour la compatiblité avec certains chargeurs QC"
|
||||
"description": "Délai de négociation PD par paliers de 100ms pour la compatibilité avec certains chargeurs QC"
|
||||
},
|
||||
"USBPDMode": {
|
||||
"displayText": "PD\nMode",
|
||||
"description": "No Dynamic disables EPR & PPS, Safe mode does not use padding resistance"
|
||||
"displayText": "Mode\nPD",
|
||||
"description": "Aucune dynamique ne désactive EPR & PPS, le mode sécurisé n'utilise pas de résistance de protection"
|
||||
},
|
||||
"BoostTemperature": {
|
||||
"displayText": "Temp.\nboost",
|
||||
"description": "Température utilisée en \"mode boost\""
|
||||
},
|
||||
"AutoStart": {
|
||||
"displayText": "Chauffer au\ndémarrage",
|
||||
"displayText": "Chauffer\nau démarrage",
|
||||
"description": "A=activé | V=mode veille | O=mode veille à température ambiante"
|
||||
},
|
||||
"TempChangeShortStep": {
|
||||
@@ -177,23 +177,23 @@
|
||||
},
|
||||
"ProfilePhases": {
|
||||
"displayText": "Profile\nPhases",
|
||||
"description": "Number of phases in profile mode"
|
||||
"description": "Nombre de phases dans le mode de profile"
|
||||
},
|
||||
"ProfilePreheatTemp": {
|
||||
"displayText": "Preheat\nTemp",
|
||||
"description": "Preheat to this temperature at the start of profile mode"
|
||||
"displayText": "Temp.\nPréchauffage",
|
||||
"description": "Préchauffer à cette température au début du mode de profile"
|
||||
},
|
||||
"ProfilePreheatSpeed": {
|
||||
"displayText": "Preheat\nSpeed",
|
||||
"description": "Preheat at this rate (degrees per second)"
|
||||
"displayText": "Vitesse\nPréchauffage",
|
||||
"description": "Préchauffer à cette vitesse (degrés par seconde)"
|
||||
},
|
||||
"ProfilePhase1Temp": {
|
||||
"displayText": "Phase 1\nTemp",
|
||||
"description": "Target temperature for the end of this phase"
|
||||
"displayText": "Temp.\nPhase 1",
|
||||
"description": "Température séléctionnée pour la fin de cette phase"
|
||||
},
|
||||
"ProfilePhase1Duration": {
|
||||
"displayText": "Phase 1\nDuration",
|
||||
"description": "Target duration of this phase (seconds)"
|
||||
"displayText": "Durée\nPhase 1",
|
||||
"description": "Durée séléctionnée pour cette phase (secondes)"
|
||||
},
|
||||
"ProfilePhase2Temp": {
|
||||
"displayText": "Phase 2\nTemp",
|
||||
@@ -228,12 +228,12 @@
|
||||
"description": ""
|
||||
},
|
||||
"ProfileCooldownSpeed": {
|
||||
"displayText": "Cooldown\nSpeed",
|
||||
"description": "Cooldown at this rate at the end of profile mode (degrees per second)"
|
||||
"displayText": "Vitesse de\nRefroidissement",
|
||||
"description": "Refroidissement à ce rythme à la fin du mode profil (degrés par seconde)"
|
||||
},
|
||||
"MotionSensitivity": {
|
||||
"displayText": "Sensibilité\nau mouvement",
|
||||
"description": "1=peu sensible | ... | 9=très sensible"
|
||||
"description": "1=très peu sensible | ... | 9=extrêmement sensible"
|
||||
},
|
||||
"SleepTemperature": {
|
||||
"displayText": "Temp.\nveille",
|
||||
@@ -248,11 +248,11 @@
|
||||
"description": "Délai avant l'arrêt du fer à souder (m=minutes)"
|
||||
},
|
||||
"HallEffSensitivity": {
|
||||
"displayText": "Sensibilité\ncapteur effet hall",
|
||||
"displayText": "Sensibilité capteur\neffet hall",
|
||||
"description": "Sensibilité du capteur à effet Hall pour la mise en veille (1=peu sensible | ... | 9=très sensible)"
|
||||
},
|
||||
"HallEffSleepTimeout": {
|
||||
"displayText": "HallSensor\nSleepTime",
|
||||
"displayText": "Temps de veille\ncapteur effet hall",
|
||||
"description": "Intervalle avant le démarrage du \"mode veille\" lorsque l'effet Hall est supérieur au seuil"
|
||||
},
|
||||
"TemperatureUnit": {
|
||||
@@ -268,13 +268,17 @@
|
||||
"description": "Faire clignoter la température lors du refroidissement tant que la panne est chaude"
|
||||
},
|
||||
"ScrollingSpeed": {
|
||||
"displayText": "Vitesse de\ndéfilement",
|
||||
"displayText": "Vitesse\nde défilement",
|
||||
"description": "Vitesse de défilement du texte (R=rapide | L=lent)"
|
||||
},
|
||||
"ReverseButtonTempChange": {
|
||||
"displayText": "Inverser les\ntouches + -",
|
||||
"description": "Inverser les boutons d'ajustement de température"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Vitesse\nanim. icônes",
|
||||
"description": "Vitesse des animations des icônes dans le menu (L=lente | M=moyenne | R=rapide)"
|
||||
@@ -312,7 +316,7 @@
|
||||
"description": "Puissance maximale utilisable (W=watts)"
|
||||
},
|
||||
"CalibrateCJC": {
|
||||
"displayText": "Étalonner CJC\nau prochain démarrage",
|
||||
"displayText": "Étalonner CJC\nau reboot",
|
||||
"description": "Au prochain démarrage, la compensation de soudure froide sera calibrée (non nécessaire si Delta T est < 5°C)."
|
||||
},
|
||||
"VoltageCalibration": {
|
||||
@@ -340,8 +344,8 @@
|
||||
"description": ""
|
||||
},
|
||||
"SolderingTipType": {
|
||||
"displayText": "Soldering\nTip Type",
|
||||
"description": "Select the tip type fitted"
|
||||
"displayText": "Soudure\nType de panne",
|
||||
"description": "Séléctionner le type de panne utilisé"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Zamjena\n+ - tipki",
|
||||
"description": "Zamjenjuje funkciju gornje i donje tipke za podešavanje temperature"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Brzina\nanimacije",
|
||||
"description": "Brzina animacije ikona u menijima (S=sporo | M=srednje | B=brzo)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "+/- gomb\nmegfordítása",
|
||||
"description": "Forrasztó hegy hőmérsékletállító gombok felcserélése"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Animáció\nsebessége",
|
||||
"description": "Menüikonok animációjának sebessége (L=lassú | K=közepes | Gy=gyors)"
|
||||
|
@@ -152,11 +152,11 @@
|
||||
"description": "Imposta il tempo di negoziazione del protocollo USB Power Delivery con alimentatori compatibili [0: disattiva; multipli di 100 ms]"
|
||||
},
|
||||
"USBPDMode": {
|
||||
"displayText": "PD\nMode",
|
||||
"displayText": "Modalità\nUSB PD",
|
||||
"description": "Abilita le modalità Power Delivery PPS ed EPR"
|
||||
},
|
||||
"BoostTemperature": {
|
||||
"displayText": "Temp\nTurbo",
|
||||
"displayText": "Temp\nturbo",
|
||||
"description": "Imposta la temperatura della funzione turbo [°C/°F]"
|
||||
},
|
||||
"AutoStart": {
|
||||
@@ -252,7 +252,7 @@
|
||||
"description": "Regola la sensibilità del sensore ad effetto Hall per entrare in modalità riposo [1: minima; 9: massima]"
|
||||
},
|
||||
"HallEffSleepTimeout": {
|
||||
"displayText": "Timer\nriposoHall",
|
||||
"displayText": "Timer\nHall",
|
||||
"description": "Imposta un timer per entrare in modalità riposo quando il sensore ad effetto Hall è al di sopra della soglia di attivazione [secondi]"
|
||||
},
|
||||
"TemperatureUnit": {
|
||||
@@ -275,6 +275,10 @@
|
||||
"displayText": "Inversione\ntasti",
|
||||
"description": "Inverti i tasti per aumentare o diminuire la temperatura della punta"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Inversione\ntasti A/B",
|
||||
"description": "Inverti il funzionamento dei tasti del saldatore all'interno del menù principale"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Velocità\nanimazioni",
|
||||
"description": "Imposta la velocità di riproduzione delle animazioni del menù principale [L: lenta; M: media; V: veloce]"
|
||||
@@ -321,15 +325,15 @@
|
||||
},
|
||||
"PowerPulsePower": {
|
||||
"displayText": "Potenza\nimpulso",
|
||||
"description": "Regola la potenza di un \"impulso sveglia\" atto a prevenire lo standby eventuale dell'alimentatore [watt]"
|
||||
"description": "Regola la potenza di un segnale di attività per prevenire lo standby eventuale dell'alimentatore [watt]"
|
||||
},
|
||||
"PowerPulseWait": {
|
||||
"displayText": "Distanza\nimpulsi",
|
||||
"description": "Imposta il tempo che deve intercorrere tra due \"impulsi sveglia\" [multipli di 2,5 s]"
|
||||
"description": "Imposta il tempo che deve intercorrere tra un segnale di attività e il successivo [multipli di 2,5 s]"
|
||||
},
|
||||
"PowerPulseDuration": {
|
||||
"displayText": "Durata\nimpulso",
|
||||
"description": "Regola la durata dell'«impulso sveglia» [multipli di 250 ms]"
|
||||
"description": "Regola la durata del segnale di attività [multipli di 250 ms]"
|
||||
},
|
||||
"SettingsReset": {
|
||||
"displayText": "Ripristino\nimpostazioni",
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "キー入れ替え",
|
||||
"description": "温度設定時に+ボタンと-ボタンを入れ替える"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "動画の速度",
|
||||
"description": "メニューアイコンのアニメーションの速さ <遅=低速 | 中=中速 | 速=高速>"
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"tempUnitFahrenheit": false,
|
||||
"messagesWarn": {
|
||||
"CalibrationDone": {
|
||||
"message": "Calibration\ndone!"
|
||||
"message": "Kalibravimas\natliktas!"
|
||||
},
|
||||
"ResetOKMessage": {
|
||||
"message": "Atstatyta"
|
||||
@@ -37,7 +37,7 @@
|
||||
"message": "Before rebooting, make sure tip & handle are at room temperature!"
|
||||
},
|
||||
"CJCCalibrating": {
|
||||
"message": "calibrating\n"
|
||||
"message": "Kalibruojama\n"
|
||||
},
|
||||
"SettingsResetWarning": {
|
||||
"message": "Ar norite atstatyti nustatymus į numatytas reikšmes?"
|
||||
@@ -275,6 +275,10 @@
|
||||
"displayText": "Sukeisti + -\nmygtukus?",
|
||||
"description": "Sukeisti + - temperatūros keitimo mygtukus vietomis"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Sukeisti A B\nmygtukus?",
|
||||
"description": "Sukeisti nustatymų meniu mygtukus vietomis"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Animacijų\ngreitis",
|
||||
"description": "Paveiksliukų animacijų greitis meniu punktuose (L=Lėtas | V=Vidutinis | G=Greitas)"
|
||||
@@ -292,8 +296,8 @@
|
||||
"description": "Invertuoja OLED ekrano spalvas"
|
||||
},
|
||||
"LOGOTime": {
|
||||
"displayText": "Boot logo\nduration",
|
||||
"description": "Set boot logo duration (s=seconds)"
|
||||
"displayText": "Įkrovos logotipo\ntrukmė",
|
||||
"description": "Nustatykite įkrovos logotipo trukmę (s=sekundės)"
|
||||
},
|
||||
"AdvancedIdle": {
|
||||
"displayText": "Detalus lau-\nkimo ekranas",
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Bytt\n+ - kn.",
|
||||
"description": "Bytt om på knappene for å stille temperatur"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nhastighet",
|
||||
"description": "Hastigheten til animasjonene i menyen (S=slow | M=medium | F=fast)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Wissel\n+ - knoppen",
|
||||
"description": "Wissel de knoppen voor temperatuur controle om"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nsnelheid",
|
||||
"description": "Snelheid van de icoon animaties in het menu (Langzaam | Middel | Snel)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Wissel\n+ - knoppen",
|
||||
"description": "Wissel de knoppen voor temperatuur controle"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nsnelheid",
|
||||
"description": "Snelheid van de icoon animaties in het menu (T=sloom | M=middel | S=snel)"
|
||||
|
@@ -4,7 +4,7 @@
|
||||
"tempUnitFahrenheit": false,
|
||||
"messagesWarn": {
|
||||
"CalibrationDone": {
|
||||
"message": "Kalibracja\nwykonana!"
|
||||
"message": "Skalibrowano!"
|
||||
},
|
||||
"ResetOKMessage": {
|
||||
"message": "Reset OK"
|
||||
@@ -19,7 +19,7 @@
|
||||
"message": "Nie rozpoznano\nkont. USB-PD IC!"
|
||||
},
|
||||
"LockingKeysString": {
|
||||
"message": " ZABLOK."
|
||||
"message": "ZABLOK."
|
||||
},
|
||||
"UnlockingKeysString": {
|
||||
"message": "ODBLOK."
|
||||
@@ -31,7 +31,7 @@
|
||||
"message": "Ucieczka\ntermiczna"
|
||||
},
|
||||
"WarningTipShorted": {
|
||||
"message": "!Tip Shorted!"
|
||||
"message": "!Zwarty grot!"
|
||||
},
|
||||
"SettingsCalibrationWarning": {
|
||||
"message": "Upewnij się, że końcówka i uchwyt mają temperaturę pokojową podczas następnego rozruchu!"
|
||||
@@ -58,16 +58,16 @@
|
||||
"message": "Grot: \n"
|
||||
},
|
||||
"ProfilePreheatString": {
|
||||
"message": "Preheat\n"
|
||||
"message": "Rozgrzewanie\n"
|
||||
},
|
||||
"ProfileCooldownString": {
|
||||
"message": "Cooldown\n"
|
||||
"message": "Schładzanie\n"
|
||||
},
|
||||
"DeviceFailedValidationWarning": {
|
||||
"message": "Twoje urządzenie jest najprawdopodobniej podróbką!"
|
||||
},
|
||||
"TooHotToStartProfileWarning": {
|
||||
"message": "Too hot to\nstart profile"
|
||||
"message": "Zbyt gorące, aby\nuruchomić profil"
|
||||
}
|
||||
},
|
||||
"characters": {
|
||||
@@ -107,22 +107,22 @@
|
||||
},
|
||||
"menuValues": {
|
||||
"USBPDModeDefault": {
|
||||
"displayText": "Default\nMode"
|
||||
"displayText": "Tryb\ndomyślny"
|
||||
},
|
||||
"USBPDModeNoDynamic": {
|
||||
"displayText": "No\nDynamic"
|
||||
"displayText": "Nie\ndynamiczny"
|
||||
},
|
||||
"USBPDModeSafe": {
|
||||
"displayText": "Safe\nMode"
|
||||
"displayText": "Tryb\nbezpieczny"
|
||||
},
|
||||
"TipTypeAuto": {
|
||||
"displayText": "Auto\nSense"
|
||||
"displayText": "Auto\nwykrycie"
|
||||
},
|
||||
"TipTypeT12Long": {
|
||||
"displayText": "TS100\nLong"
|
||||
"displayText": "Długi\nTS100"
|
||||
},
|
||||
"TipTypeT12Short": {
|
||||
"displayText": "Pine\nShort"
|
||||
"displayText": "Krótki\nPine"
|
||||
},
|
||||
"TipTypeT12PTS": {
|
||||
"displayText": "PTS\n200"
|
||||
@@ -137,27 +137,27 @@
|
||||
"menuOptions": {
|
||||
"DCInCutoff": {
|
||||
"displayText": "Źródło\nzasilania",
|
||||
"description": "Źródło zasilania. Ustaw napięcie odcięcia. (DC 10V) (S 3.3V dla ogniw Li, wyłącz limit mocy)"
|
||||
"description": "Źródło zasilania. Ustaw napięcie odcięcia. (DC 10V) (S=3.3V dla ogniw Li, wyłącz limit mocy)"
|
||||
},
|
||||
"MinVolCell": {
|
||||
"displayText": "Minimalne\nnapięcie",
|
||||
"description": "Minimalne dozwolone napięcie na komórkę (3S: 3 - 3,7V | 4-6S: 2,4 - 3,7V)"
|
||||
},
|
||||
"QCMaxVoltage": {
|
||||
"displayText": "QC\nnapięcie",
|
||||
"displayText": "Napięcie QC",
|
||||
"description": "Maksymalne napięcie, które lutownica będzie próbowała wynegocjować z ładowarką Quick Charge (V)"
|
||||
},
|
||||
"PDNegTimeout": {
|
||||
"displayText": "Limit czasu\nPD",
|
||||
"description": "Limit czasu negocjacji PD w krokach co 100 ms dla zgodności z niektórymi ładowarkami QC (0: wyłączone)"
|
||||
"description": "Limit czasu negocjacji PD w krokach co 100ms dla zgodności z niektórymi ładowarkami QC (0: wyłączone)"
|
||||
},
|
||||
"USBPDMode": {
|
||||
"displayText": "PD\nMode",
|
||||
"displayText": "Tryb PD",
|
||||
"description": "Włącza tryby PPS & EPR."
|
||||
},
|
||||
"BoostTemperature": {
|
||||
"displayText": "Temp.\nboost",
|
||||
"description": "Temperatura w trybie \"boost\" "
|
||||
"description": "Temp. w trybie \"boost\" "
|
||||
},
|
||||
"AutoStart": {
|
||||
"displayText": "Aut. uruch.\ntr. lutowania",
|
||||
@@ -176,60 +176,60 @@
|
||||
"description": "W trybie lutowania, wciśnij oba przyciski aby je zablokować (B=tylko Boost | P=pełna blokada)"
|
||||
},
|
||||
"ProfilePhases": {
|
||||
"displayText": "Profile\nPhases",
|
||||
"description": "Number of phases in profile mode"
|
||||
"displayText": "Fazy\nprofilu",
|
||||
"description": "Liczba faz w trybie profilu"
|
||||
},
|
||||
"ProfilePreheatTemp": {
|
||||
"displayText": "Preheat\nTemp",
|
||||
"description": "Preheat to this temperature at the start of profile mode"
|
||||
"displayText": "Temp.\nrozgrzewania",
|
||||
"description": "Rozgrzanie do tej temp. na początku trybu profilu"
|
||||
},
|
||||
"ProfilePreheatSpeed": {
|
||||
"displayText": "Preheat\nSpeed",
|
||||
"description": "Preheat at this rate (degrees per second)"
|
||||
"displayText": "Prędk.\nrozgrzewania",
|
||||
"description": "Tempo rozgrzewania (stopnie na sekundę)"
|
||||
},
|
||||
"ProfilePhase1Temp": {
|
||||
"displayText": "Phase 1\nTemp",
|
||||
"description": "Target temperature for the end of this phase"
|
||||
"displayText": "Temp.\nfazy 1",
|
||||
"description": "Docelowa temp. na koniec tej fazy"
|
||||
},
|
||||
"ProfilePhase1Duration": {
|
||||
"displayText": "Phase 1\nDuration",
|
||||
"description": "Target duration of this phase (seconds)"
|
||||
"displayText": "Dług.\nfazy 1",
|
||||
"description": "Docelowy czas trwania tej fazy (sekundy)"
|
||||
},
|
||||
"ProfilePhase2Temp": {
|
||||
"displayText": "Phase 2\nTemp",
|
||||
"displayText": "Temp.\nfazy 2",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase2Duration": {
|
||||
"displayText": "Phase 2\nDuration",
|
||||
"displayText": "Dług.\nfazy 2",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase3Temp": {
|
||||
"displayText": "Phase 3\nTemp",
|
||||
"displayText": "Temp.\nfazy 3",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase3Duration": {
|
||||
"displayText": "Phase 3\nDuration",
|
||||
"displayText": "Dług.\nfazy 3",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase4Temp": {
|
||||
"displayText": "Phase 4\nTemp",
|
||||
"displayText": "Temp.\nfazy 4",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase4Duration": {
|
||||
"displayText": "Phase 4\nDuration",
|
||||
"displayText": "Dług.\nfazy 4",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase5Temp": {
|
||||
"displayText": "Phase 5\nTemp",
|
||||
"displayText": "Temp.\nfazy 5",
|
||||
"description": ""
|
||||
},
|
||||
"ProfilePhase5Duration": {
|
||||
"displayText": "Phase 5\nDuration",
|
||||
"displayText": "Dług.\nfazy 5",
|
||||
"description": ""
|
||||
},
|
||||
"ProfileCooldownSpeed": {
|
||||
"displayText": "Cooldown\nSpeed",
|
||||
"description": "Cooldown at this rate at the end of profile mode (degrees per second)"
|
||||
"displayText": "Prędk.\nschładzania",
|
||||
"description": "Tempo schładzania na koniec trybu profilu (stopnie na sekundę)"
|
||||
},
|
||||
"MotionSensitivity": {
|
||||
"displayText": "Czułość\nwykr. ruchu",
|
||||
@@ -264,8 +264,8 @@
|
||||
"description": "Obrót ekranu (P: dla praworęcznych | L: dla leworęcznych | A: automatycznie)"
|
||||
},
|
||||
"CooldownBlink": {
|
||||
"displayText": "Mig. podczas\nwychładzania",
|
||||
"description": "Temperatura miga podczas wychładzania, gdy grot jest wciąż gorący"
|
||||
"displayText": "Mig. podczas\nschładzania",
|
||||
"description": "Temperatura miga podczas schładzania, gdy grot jest wciąż gorący"
|
||||
},
|
||||
"ScrollingSpeed": {
|
||||
"displayText": "Sz. przew.\ntekstu",
|
||||
@@ -275,6 +275,10 @@
|
||||
"displayText": "Zamień przyc.\n+ -",
|
||||
"description": "Zamienia działanie przycisków zmiany temperatury grotu"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Prędkosć\nanimacji",
|
||||
"description": "Prędkość animacji ikon w menu (W: mała | M: średnia | S: duża)"
|
||||
@@ -296,7 +300,7 @@
|
||||
"description": "Ustawia czas wyświetlania loga podczas uruchamiania (s=sekund)"
|
||||
},
|
||||
"AdvancedIdle": {
|
||||
"displayText": "Szeczegółowy\nekran bezczy.",
|
||||
"displayText": "Szczegółowy\nekran bezczyn.",
|
||||
"description": "Wyświetla szczegółowe informacje za pomocą mniejszej czcionki na ekranie bezczynności"
|
||||
},
|
||||
"AdvancedSoldering": {
|
||||
@@ -305,7 +309,7 @@
|
||||
},
|
||||
"BluetoothLE": {
|
||||
"displayText": "Bluetooth\n",
|
||||
"description": "Enables BLE"
|
||||
"description": "Włącza Bluetooth Low Energy"
|
||||
},
|
||||
"PowerLimit": {
|
||||
"displayText": "Ogr.\nmocy",
|
||||
@@ -340,8 +344,8 @@
|
||||
"description": ""
|
||||
},
|
||||
"SolderingTipType": {
|
||||
"displayText": "Soldering\nTip Type",
|
||||
"description": "Select the tip type fitted"
|
||||
"displayText": "Typ grotu",
|
||||
"description": "Wybierz typ zamontowanego grotu"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Trocar\nbotões + -",
|
||||
"description": "Inverte o funcionamento dos botões de ajuste da temperatura"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Velocidade\nde animação",
|
||||
"description": "Velocidade das animações no menu (S=lenta | M=média | F=rápida)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Inversare\n+ - butoane",
|
||||
"description": "Inversarea butoanelor de reglare a temperaturii"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Animaţii\nviteză",
|
||||
"description": "Ritmul animaţiilor pictogramei din meniu (Î=încet | M=mediu | R=rapid)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Поменять\nкнопки +/-",
|
||||
"description": "Поменять кнопки изменения температуры"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Поменять\nкнопки A/B",
|
||||
"description": "Поменять назначение кнопок A/B в меню настроек"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Скорость\nанимации",
|
||||
"description": "Скорость анимации иконок в главном меню (М=Медленная| С=Средняя | Б=Быстрая)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Otočenie\ntlačidiel +/-",
|
||||
"description": "Prehodenie tlačidiel na nastavovanie teploty"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Rýchlosť\nanimácií",
|
||||
"description": "Rýchlosť animácií ikoniek v menu (P=pomaly | S=stredne | R=rýchlo)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Obrni\ntipki + -?",
|
||||
"description": "Zamenjaj funkciji gumbov."
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nspeed",
|
||||
"description": "Pace of icon animations in menu (P=slow | M=medium | H=fast)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Swap\n+ - keys",
|
||||
"description": "Reverse assignment of buttons for temperature adjustment"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nspeed",
|
||||
"description": "Pace of icon animations in menu (С=slow | M=medium | Б=fast)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Swap\n+ - keys",
|
||||
"description": "Reverse assignment of buttons for temperature adjustment"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\nspeed",
|
||||
"description": "Pace of icon animations in menu (S=slow | M=medium | B=fast)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Omvända\n+- knappar",
|
||||
"description": "Omvänd ordning för temperaturjustering via plus/minus knapparna"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.-\nhastighet",
|
||||
"description": "Animationshastighet för ikoner i menyer (L=långsam | M=medel | S=snabb)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Düğme Yerleri\nRotasyonu",
|
||||
"description": "\"Düğme Yerleri Rotasyonu\" Sıcaklık ayar düğmelerinin yerini değiştirin"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Animasyon\nHızı",
|
||||
"description": "Menüdeki simge animasyonlarının hızı (Y=Yavaş | O=Orta | H=Hızlı)"
|
||||
|
@@ -52,7 +52,7 @@
|
||||
"message": "Жив.(B): \n"
|
||||
},
|
||||
"SleepingAdvancedString": {
|
||||
"message": "Очікування...\n"
|
||||
"message": "Сон...\n"
|
||||
},
|
||||
"SleepingTipAdvancedString": {
|
||||
"message": "Жало: \n"
|
||||
@@ -78,7 +78,7 @@
|
||||
"SettingMediumChar": "С",
|
||||
"SettingFastChar": "М",
|
||||
"SettingStartSolderingChar": "П",
|
||||
"SettingStartSleepChar": "О",
|
||||
"SettingStartSleepChar": "С",
|
||||
"SettingStartSleepOffChar": "К",
|
||||
"SettingLockBoostChar": "Т",
|
||||
"SettingLockFullChar": "П"
|
||||
@@ -93,7 +93,7 @@
|
||||
"description": ""
|
||||
},
|
||||
"PowerSavingMenu": {
|
||||
"displayText": "Режим\nсну",
|
||||
"displayText": "Режим сну\n",
|
||||
"description": ""
|
||||
},
|
||||
"UIMenu": {
|
||||
@@ -116,13 +116,13 @@
|
||||
"displayText": "Безпечний\nРежим"
|
||||
},
|
||||
"TipTypeAuto": {
|
||||
"displayText": "Auto\nSense"
|
||||
"displayText": "Авто\nВизначення"
|
||||
},
|
||||
"TipTypeT12Long": {
|
||||
"displayText": "TS100\nLong"
|
||||
"displayText": "TS100\nДовге"
|
||||
},
|
||||
"TipTypeT12Short": {
|
||||
"displayText": "Pine\nShort"
|
||||
"displayText": "Pine\nКоротке"
|
||||
},
|
||||
"TipTypeT12PTS": {
|
||||
"displayText": "PTS\n200"
|
||||
@@ -145,31 +145,31 @@
|
||||
},
|
||||
"QCMaxVoltage": {
|
||||
"displayText": "Потужність\nдж. живлення",
|
||||
"description": "Потужність джерела живлення в Ватах"
|
||||
"description": "Потужність ДЖ в Ватах"
|
||||
},
|
||||
"PDNegTimeout": {
|
||||
"displayText": "PD\nзатримка",
|
||||
"description": "Затримка у 100мс інкрементах для PD для сумісності з деякими QC зарядними пристроями (0: вимкнено)"
|
||||
"displayText": "PD\nЗатримка",
|
||||
"description": "Затримка у 100мс інкрементах для PD для сумісності з деякими версіями QC (0: вимкнена)"
|
||||
},
|
||||
"USBPDMode": {
|
||||
"displayText": "PD\nMode",
|
||||
"displayText": "PD\nРежим",
|
||||
"description": "Вмикає режими PPS & EPR."
|
||||
},
|
||||
"BoostTemperature": {
|
||||
"displayText": "Темпер.\nТурбо",
|
||||
"description": "Температура в \"Турбо\" режимі"
|
||||
"description": "Температура \"Турбо\" режиму"
|
||||
},
|
||||
"AutoStart": {
|
||||
"displayText": "Гарячий\nстарт",
|
||||
"description": "Режим в якому запускається паяльник при ввімкненні (П=Пайка | О=Очікування | К=Очікування при кімн. темп.)"
|
||||
"description": "Режим запуску паяльника (П=Пайка | С=Сон | К=Сон при кімн. темп.)"
|
||||
},
|
||||
"TempChangeShortStep": {
|
||||
"displayText": "Зміна темп.\nкоротко?",
|
||||
"description": "Змінювати температуру при короткому натисканні!"
|
||||
"displayText": "Зміна темп.\nкоротким",
|
||||
"description": "Зміна температуру при короткому натисканні!"
|
||||
},
|
||||
"TempChangeLongStep": {
|
||||
"displayText": "Зміна темп.\nдовго?",
|
||||
"description": "Змінювати температуру при довгому натисканні!"
|
||||
"displayText": "Зміна темп.\nдовгим",
|
||||
"description": "Зміна температуру при довгому натисканні!"
|
||||
},
|
||||
"LockingMode": {
|
||||
"displayText": "Дозволити\nблок. кнопок",
|
||||
@@ -185,15 +185,15 @@
|
||||
},
|
||||
"ProfilePreheatSpeed": {
|
||||
"displayText": "Швидкість\nПоп.Розігріву",
|
||||
"description": "Розігрівати з такою швидкістю (градусів в секунду)"
|
||||
"description": "Розігрівати з швидкістю (t° у сек)"
|
||||
},
|
||||
"ProfilePhase1Temp": {
|
||||
"displayText": "Етап 1\nТемпература",
|
||||
"description": "Температура в кінці цього етапу"
|
||||
"description": "Температура на кінці цього етапу"
|
||||
},
|
||||
"ProfilePhase1Duration": {
|
||||
"displayText": "Етап 1\nТривалість",
|
||||
"description": "Тривалість цього етапу (секунд)"
|
||||
"description": "Тривалість цього етапу (сек)"
|
||||
},
|
||||
"ProfilePhase2Temp": {
|
||||
"displayText": "Етап 2\nТемпература",
|
||||
@@ -229,43 +229,43 @@
|
||||
},
|
||||
"ProfileCooldownSpeed": {
|
||||
"displayText": "Швидкість\nОхолодження",
|
||||
"description": "Швидкість охолодження в кінці режиму профілів (градусів в секунду)"
|
||||
"description": "Швидкість охолодження на кінці режиму профілів (t° у сек)"
|
||||
},
|
||||
"MotionSensitivity": {
|
||||
"displayText": "Чутливість\nсенсору руху",
|
||||
"description": "Акселерометр (1=мін. чутливості | ... | 9=макс. чутливості)"
|
||||
"displayText": "Чутливість\nдатчику руху",
|
||||
"description": "Акселерометр (1=мін. чутливості | ... | 9=макс. чутливість)"
|
||||
},
|
||||
"SleepTemperature": {
|
||||
"displayText": "Темпер.\nсну",
|
||||
"description": "Температура режиму очікування (C° | F°)"
|
||||
"description": "Температура режиму сну (C° | F°)"
|
||||
},
|
||||
"SleepTimeout": {
|
||||
"displayText": "Тайм-аут\nсну",
|
||||
"description": "Час до переходу в режим очікування (Хвилини | Секунди)"
|
||||
"description": "Час до переходу до сну (Хв | Сек)"
|
||||
},
|
||||
"ShutdownTimeout": {
|
||||
"displayText": "Часу до\nвимкнення",
|
||||
"description": "Час до вимкнення (Хвилини)"
|
||||
"description": "Час до вимкнення (Хв)"
|
||||
},
|
||||
"HallEffSensitivity": {
|
||||
"displayText": "Чутливість\nЕфекту Холла",
|
||||
"description": "Чутливість датчика ефекту Холла при виявленні сну (1=мін. чутливості | ... | 9=макс. чутливості)"
|
||||
"displayText": "Чутливість\nДатчику Холла",
|
||||
"description": "Чутливість датчика Холла при виявленні сну (1=мін. чутливість | ... | 9=макс. чутливість)"
|
||||
},
|
||||
"HallEffSleepTimeout": {
|
||||
"displayText": "Сенсор Холла\nЧас очікування",
|
||||
"description": "Проміжок часу до \"часу очікування\" за умови спрацювання датчику ефекту Холла"
|
||||
"displayText": "Датчик Холла\nЧас сну",
|
||||
"description": "Проміжок часу до \"часу сну\" за умови спрацювання датчику Холла"
|
||||
},
|
||||
"TemperatureUnit": {
|
||||
"displayText": "Формат темпе-\nратури(C°/F°)",
|
||||
"description": "Одиниця виміру температури (C=Цельсій | F=Фаренгейт)"
|
||||
},
|
||||
"DisplayRotation": {
|
||||
"displayText": "Автоповорот\nекрану",
|
||||
"description": "Орієнтація дисплея (П=Правша | Л=Лівша | A=Автоповорот)"
|
||||
"displayText": "Обертання\nекрану",
|
||||
"description": "Орієнтація екрану (П=Правша | Л=Лівша | A=Автооберт.)"
|
||||
},
|
||||
"CooldownBlink": {
|
||||
"displayText": "Показ t° при\nохолодженні",
|
||||
"description": "Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран моргає"
|
||||
"description": "Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран мерехтить"
|
||||
},
|
||||
"ScrollingSpeed": {
|
||||
"displayText": "Швидкість\nтексту",
|
||||
@@ -275,13 +275,17 @@
|
||||
"displayText": "Інвертувати\nкнопки +-?",
|
||||
"description": "Інвертувати кнопки зміни температури."
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Швидкість\nанімації",
|
||||
"description": "Швидкість анімації іконок у головному меню (Н=Низькa | С=Середня | М=Максимальна)"
|
||||
"description": "Швидкість анімації іконок у меню (Н=Низькa | С=Середня | М=Максимальна)"
|
||||
},
|
||||
"AnimLoop": {
|
||||
"displayText": "Циклічна\nанімація",
|
||||
"description": "Циклічна анімація іконок в головному меню"
|
||||
"description": "Циклічна анімація іконок у меню"
|
||||
},
|
||||
"Brightness": {
|
||||
"displayText": "Яскравість\nекрану",
|
||||
@@ -292,8 +296,8 @@
|
||||
"description": "Інвертувати кольори на OLED екрані"
|
||||
},
|
||||
"LOGOTime": {
|
||||
"displayText": "Тривалість\nлоготипу завантаження",
|
||||
"description": "Встановити тривалість показу лого при завантаженні (с=секунд)"
|
||||
"displayText": "Тривалість\nлоготипу при запуску",
|
||||
"description": "Поточна тривалість показу лого при запуску (сек)"
|
||||
},
|
||||
"AdvancedIdle": {
|
||||
"displayText": "Детальний ре-\nжим очікуван.",
|
||||
@@ -309,11 +313,11 @@
|
||||
},
|
||||
"PowerLimit": {
|
||||
"displayText": "Макс.\nпотуж.",
|
||||
"description": "Макс. потужність, яку може використовувати паяльник (Ват)"
|
||||
"description": "Макс. потужність, яку може використовувати паяльник (Ватт)"
|
||||
},
|
||||
"CalibrateCJC": {
|
||||
"displayText": "Калібрувати КХС\nпри наступному завантаженні",
|
||||
"description": "При наступному завантаження буде відкалібровано Компенсацію Холодного Спаю жала (непотрібне при різниці температур < 5°C)"
|
||||
"displayText": "Калібрувати КХС\nпри наступному запуску",
|
||||
"description": "При наступному запуску буде відкалібровано Компенсацію Холодного Спаю жала (непотрібне при різниці температур < 5°C)"
|
||||
},
|
||||
"VoltageCalibration": {
|
||||
"displayText": "Калібрування\nнапруги",
|
||||
@@ -340,8 +344,8 @@
|
||||
"description": ""
|
||||
},
|
||||
"SolderingTipType": {
|
||||
"displayText": "Soldering\nTip Type",
|
||||
"description": "Select the tip type fitted"
|
||||
"displayText": "Тип Жала",
|
||||
"description": "Оберіть відповідний тип жала"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -137,7 +137,7 @@
|
||||
"menuOptions": {
|
||||
"DCInCutoff": {
|
||||
"displayText": "Quvvat\nmanbai",
|
||||
"description": "Batareya haddan tashqari zaryadsizlanishini oldini olish uchun kuchlanish chegarasini o'rnatish (DC 10V) (S=3.3V har bir yacheyka uchun, quvvat PWR chegarasini o'chirish)"
|
||||
"description": "Batareya haddan tashqari zaryadsizlanishini oldini olish uchun kuchlanish chegarasini o'rnatish (DC 10V) (S=3.3V har bir yacheyka uchun, quvvat PWR chegarasini o'chirish)"
|
||||
},
|
||||
"MinVolCell": {
|
||||
"displayText": "Minimal\nkuchlanish",
|
||||
@@ -275,6 +275,10 @@
|
||||
"displayText": "(+) va (-) tugmalarni\nalmashtirish",
|
||||
"description": "Harorat o'zgarishi uchun tugmachalarni vazifasini almashish"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Anim.\ntezligi",
|
||||
"description": "Menyudagi ikonka animatsiyalari tezligini sozlash (S=sekin | O=o'rtacha | T=tez)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "Đao nguoc\nnút + -",
|
||||
"description": "Đao nguoc chuc năng các nút đieu chinh nhiet đo"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "Toc đo\nhoat anh",
|
||||
"description": "Toc đo cua hoat anh menu (S=cham | M=trung bình | F=nhanh)"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "反轉加減掣",
|
||||
"description": "反轉調校温度時加減掣嘅方向"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "動畫速度",
|
||||
"description": "功能表圖示動畫嘅速度 <慢=慢速 | 中=中速 | 快=快速>"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "调换加减键",
|
||||
"description": "调校温度时更换加减键的方向"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "动画速度",
|
||||
"description": "主菜单中功能图标动画的播放速度 <慢=慢速 | 中=中速 | 快=快速>"
|
||||
|
@@ -275,6 +275,10 @@
|
||||
"displayText": "調換加減鍵",
|
||||
"description": "調校溫度時調換加減鍵的方向"
|
||||
},
|
||||
"ReverseButtonSettings": {
|
||||
"displayText": "Swap\nA B keys",
|
||||
"description": "Reverse assignment of buttons for Settings menu"
|
||||
},
|
||||
"AnimSpeed": {
|
||||
"displayText": "動畫速度",
|
||||
"description": "功能表圖示動畫的速度 <慢=慢速 | 中=中速 | 快=快速>"
|
||||
|
@@ -172,7 +172,7 @@
|
||||
"id": "PowerMenu",
|
||||
"maxLen": 5,
|
||||
"maxLen2": 11,
|
||||
"include": ["POW_DC", "POW_QC"],
|
||||
"include": ["POW_DC", "POW_PD", "POW_QC"],
|
||||
"description": "Menu for settings related to power. Main settings to do with the input voltage."
|
||||
},
|
||||
{
|
||||
@@ -272,7 +272,7 @@
|
||||
"maxLen": 7,
|
||||
"maxLen2": 15,
|
||||
"include": ["POW_PD"],
|
||||
"description": "No Dynamic disables EPR & PPS, Safe mode does not use padding resistance"
|
||||
"description": "Adjusts how the USB-PD Logic selects the voltage. No Dynamic disables EPR & PPS protocols, Safe mode does not use padding resistance (will select a slightly lower voltage)."
|
||||
},
|
||||
{
|
||||
"id": "BoostTemperature",
|
||||
@@ -473,6 +473,12 @@
|
||||
"maxLen2": 15,
|
||||
"description": "Swaps which button increments and decrements on temperature change screens."
|
||||
},
|
||||
{
|
||||
"id": "ReverseButtonSettings",
|
||||
"maxLen": 6,
|
||||
"maxLen2": 15,
|
||||
"description": "Swaps which button is used as Enter/Change and as Scroll/Back in Settings menu."
|
||||
},
|
||||
{
|
||||
"id": "AnimSpeed",
|
||||
"maxLen": 6,
|
||||
@@ -532,7 +538,7 @@
|
||||
"id": "CalibrateCJC",
|
||||
"maxLen": 8,
|
||||
"maxLen2": 15,
|
||||
"description": "Used to calibrate the ADC+Op-amp offsets for the tip. This calibration must be performed when the tip temperature and the handle temperature are equal. Generally not required unless your device is reading more than 5°C off target."
|
||||
"description": "Note:\r\nIf the difference between the target temperature and the measured temperature is less than 5°C, **calibration is NOT required at all**.\r\n\r\nThis is used to calibrate the offset between ADC and Op-amp of the tip **at next boot** (Ideally it has to be done at boot, before internal components get warm.). If the checkbox is set, the calibration will only be performed at the next boot. After a successful calibration the checkbox will be unchecked again! If you need to repeat the calibration however, you have to set the checkbox *again*, unplug your device and let it cool down to room/ambient temperature & power it up, ideally while it sits on the desk.\r\n\r\n\r\nAlso, the calibration will only take place if both of the following conditions are met:\r\n- The tip must be installed.\r\n- The temperature difference between tip and handle must be less than 10°C. (~ ambient / room temperature)\r\n\r\nOtherwise, the calibration will be performed the next time the device is started and both conditions are met, unless the corresponding checkbox is unchecked.\r\nHence, never repeat the calibration in quick succession!"
|
||||
},
|
||||
{
|
||||
"id": "VoltageCalibration",
|
||||
|
@@ -35,13 +35,15 @@ nav:
|
||||
- Temperature: Temperature.md
|
||||
- Startup Logo: Logo.md
|
||||
- Hardware:
|
||||
- Hall Sensor (Pinecil): HallSensor.md
|
||||
- Bluetooth (Pinecil V2): Bluetooth.md
|
||||
- Debugging USB-PD: DebuggingPD.md
|
||||
- Hall Sensor (Pinecil): HallSensor.md
|
||||
- Hardware Notes: Hardware.md
|
||||
- Troubleshooting: Troubleshooting.md
|
||||
- Known Hardware Issues: HardwareIssues.md
|
||||
- Power sources: PowerSources.md
|
||||
- New Hardware Requirements: PortingToNewDevice.md
|
||||
- Power sources: PowerSources.md
|
||||
- Troubleshooting: Troubleshooting.md
|
||||
- WS2812B RGB Modding (Pinecil V2): WS2812BModding.md
|
||||
- Translations: Translation.md
|
||||
- Development: Development.md
|
||||
- Changelog: History.md
|
||||
|
@@ -1,7 +1,7 @@
|
||||
# Default Reference Distro for development env & deploy:
|
||||
# * Alpine Linux, version 3.19 *
|
||||
# * Alpine Linux, version 3.21 *
|
||||
|
||||
FROM alpine:3.19
|
||||
FROM alpine:3.21
|
||||
LABEL maintainer="Ben V. Brown <ralim@ralimtek.com>"
|
||||
|
||||
# Default current dir when container starts
|
||||
|
@@ -95,9 +95,10 @@ docs_links()
|
||||
{
|
||||
ver_git="$(git tag -l | sort | grep -e "^v" | grep -v "rc" | tail -1)"
|
||||
md="README.md"
|
||||
test -f "${md}" || (echo "deploy.sh: docs_links: ERROR with the project directory structure!" && exit 1)
|
||||
ver_md="$(grep -c "${ver_git}" "${md}")"
|
||||
ret=0
|
||||
if [ "${ver_md}" -ne 0 ]; then
|
||||
if [ "${ver_md}" -eq 0 ]; then
|
||||
ret=1
|
||||
echo "Please, update mention & links in ${md} inside Builds section for release builds with version ${ver_git}."
|
||||
fi;
|
||||
@@ -108,16 +109,38 @@ docs_links()
|
||||
build_langs()
|
||||
{
|
||||
mk="../source/Makefile"
|
||||
cd Translations/ || exit 1
|
||||
cd Translations/ || (echo "deploy.sh: build_langs: ERROR with the project directory structure!" && exit 1)
|
||||
langs="$(echo "$(find ./*.json | sed -ne 's,^\./translation_,,; s,\.json$,,; /[A-Z]/p' ; sed -ne 's/^ALL_LANGUAGES=//p;' "${mk}")" | sed 's, ,\n,g; s,\r,,g' | sort | uniq -u)"
|
||||
ret=0
|
||||
if [ -n "${langs}" ]; then
|
||||
ret=1
|
||||
echo "It seems there is mismatch between supported languages and enabled builds."
|
||||
echo "Please, check files in Translations/ and ALL_LANGUAGES variable in source/Makefile for:"
|
||||
echo "${langs}"
|
||||
return 1
|
||||
fi;
|
||||
return "${ret}"
|
||||
cd ..
|
||||
|
||||
echo -ne "\n"
|
||||
grep -nH $'\11' Translations/translation*.json
|
||||
ret="${?}"
|
||||
if [ "${ret}" -eq 0 ]; then
|
||||
echo -ne "\t^^^^\t^^^^\n"
|
||||
echo "Please, remove any tabs as indention from json file(s) in Translations/ directory (see the exact files & lines in the list above)."
|
||||
echo "Use spaces only to indent in the future, please."
|
||||
echo -ne "\n"
|
||||
return 1
|
||||
fi;
|
||||
|
||||
grep -nEH -e "^( {1}| {3}| {5}| {7}| {9}| {11})[^ ]" Translations/translation*.json
|
||||
ret="${?}"
|
||||
if [ "${ret}" -eq 0 ]; then
|
||||
echo -ne "\t^^^^\t^^^^\n"
|
||||
echo "Please, remove any odd amount of extra spaces as indention from json file(s) in Translations/ directory (see the exact files & lines in the list above)."
|
||||
echo "Use even amount of spaces to indent in the future, please (two actual spaces per one indent, not tab)."
|
||||
echo -ne "\n"
|
||||
return 1
|
||||
fi;
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# Helper function to check code style using clang-format & grep/sed custom parsers:
|
||||
|
@@ -1,19 +1,21 @@
|
||||
#!/bin/bash
|
||||
# TS100 Flasher for Linux by Alex Wigen (https://github.com/awigen)
|
||||
# Jan 2021 - Update by Ysard (https://github.com/ysard)
|
||||
# Jul 2025 - Update by Karakurt
|
||||
|
||||
DIR_TMP="/tmp/ts100"
|
||||
DIR_TMP="/tmp/ironos"
|
||||
HEX_FIRMWARE="$DIR_TMP/ts100.hex"
|
||||
MAX_TRIES=5
|
||||
|
||||
usage() {
|
||||
echo
|
||||
echo "#################"
|
||||
echo "# TS100 Flasher #"
|
||||
echo "#################"
|
||||
echo "#######################"
|
||||
echo "# TS100/TS101 Flasher #"
|
||||
echo "#######################"
|
||||
echo
|
||||
echo " Usage: $0 <HEXFILE>"
|
||||
echo
|
||||
echo "This script has been tested to work on Fedora."
|
||||
echo "This script has been tested to work on Fedora and Arch Linux."
|
||||
echo "If you experience any issues please open a ticket at:"
|
||||
echo "https://github.com/Ralim/IronOS/issues/new"
|
||||
echo
|
||||
@@ -44,12 +46,12 @@ is_attached() {
|
||||
}
|
||||
|
||||
instructions="not printed"
|
||||
wait_for_ts100() {
|
||||
wait_for_iron() {
|
||||
while ! is_attached; do
|
||||
if [ "$instructions" = "not printed" ]; then
|
||||
echo
|
||||
echo "#####################################################"
|
||||
echo "# Waiting for TS100 config disk device to appear #"
|
||||
echo "# Waiting for config disk device to appear #"
|
||||
echo "# #"
|
||||
echo "# Connect the soldering iron with a USB cable while #"
|
||||
echo "# holding the button closest to the tip pressed #"
|
||||
@@ -61,7 +63,7 @@ wait_for_ts100() {
|
||||
done
|
||||
}
|
||||
|
||||
mount_ts100() {
|
||||
mount_iron() {
|
||||
mkdir -p "$DIR_TMP"
|
||||
user="${UID:-$(id -u)}"
|
||||
if ! sudo mount -t msdos -o uid=$user "$DEVICE" "$DIR_TMP"; then
|
||||
@@ -70,11 +72,12 @@ mount_ts100() {
|
||||
fi
|
||||
}
|
||||
|
||||
umount_ts100() {
|
||||
umount_iron() {
|
||||
if ! (mountpoint "$DIR_TMP" > /dev/null && sudo umount "$DIR_TMP"); then
|
||||
echo "Failed to unmount $DIR_TMP"
|
||||
exit 1
|
||||
fi
|
||||
sleep 1
|
||||
sudo rmdir "$DIR_TMP"
|
||||
}
|
||||
|
||||
@@ -84,19 +87,22 @@ check_flash() {
|
||||
if [ -f "$RDY_FIRMWARE" ]; then
|
||||
echo -e "\e[92mFlash is done\e[0m"
|
||||
echo "Disconnect the USB and power up the iron. You're good to go."
|
||||
return 0
|
||||
elif [ -f "$ERR_FIRMWARE" ]; then
|
||||
echo -e "\e[91mFlash error; Please retry!\e[0m"
|
||||
return 1
|
||||
else
|
||||
echo -e "\e[91mUNKNOWN error\e[0m"
|
||||
echo "Flash result: "
|
||||
ls "$DIR_TMP"/ts100*
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
enable_gautomount
|
||||
if [ -d "$DIR_TMP" ]; then
|
||||
umount_ts100
|
||||
umount_iron
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT
|
||||
@@ -121,19 +127,28 @@ fi
|
||||
|
||||
disable_gautomount
|
||||
|
||||
wait_for_ts100
|
||||
echo "Found TS100 config disk device on $DEVICE"
|
||||
TRIES=0
|
||||
while [ $TRIES -lt $MAX_TRIES ]; do
|
||||
wait_for_iron
|
||||
NAME=$(sudo fatlabel "$DEVICE" 2>/dev/null)
|
||||
echo "Found $NAME config disk device on $DEVICE"
|
||||
|
||||
mount_ts100
|
||||
echo "Mounted config disk drive, flashing..."
|
||||
dd if="$1" of="$HEX_FIRMWARE" oflag=direct
|
||||
umount_ts100
|
||||
mount_iron
|
||||
echo "Mounted config disk drive, flashing..."
|
||||
dd if="$1" of="$HEX_FIRMWARE" oflag=direct
|
||||
umount_iron
|
||||
|
||||
echo "Waiting for TS100 to flash"
|
||||
sleep 5
|
||||
echo "Waiting for $NAME to flash"
|
||||
sleep 5
|
||||
|
||||
echo "Remounting config disk drive"
|
||||
wait_for_ts100
|
||||
mount_ts100
|
||||
check_flash
|
||||
echo "Remounting config disk drive"
|
||||
wait_for_iron
|
||||
mount_iron
|
||||
check_flash && exit 0
|
||||
|
||||
echo "Retrying automatically..."
|
||||
TRIES=$((TRIES + 1))
|
||||
done
|
||||
echo -e "\e[91mMax retries reached.\e[0m"
|
||||
exit 1
|
||||
|
@@ -6,7 +6,7 @@
|
||||
#include "Pins.h"
|
||||
#include "Setup.h"
|
||||
#include "TipThermoModel.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "WS2812.h"
|
||||
#include "configuration.h"
|
||||
#include "history.hpp"
|
||||
|
@@ -101,16 +101,16 @@ extern uint32_t SystemCoreClock;
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCPU_CLOCK_HZ (SystemCoreClock)
|
||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||
#define configMAX_PRIORITIES (6)
|
||||
#define configMAX_PRIORITIES (7)
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)1024 * 14) /*Currently use about 9000*/
|
||||
#define configMAX_TASK_NAME_LEN (32)
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
#define configUSE_TIMERS 0
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2 /*Bump this to 2 during development and bug hunting*/
|
||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
@@ -156,11 +156,11 @@ extern uint32_t SystemCoreClock;
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */
|
||||
/* USER CODE BEGIN 1 */
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
}
|
||||
/* USER CODE END 1 */
|
||||
|
||||
|
@@ -7,7 +7,7 @@
|
||||
#include "Setup.h"
|
||||
#include "TipThermoModel.h"
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
extern uint16_t tipSenseResistancex10Ohms;
|
||||
|
@@ -182,7 +182,7 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {
|
||||
tmp = hdma->Instance->CCR;
|
||||
|
||||
/* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */
|
||||
tmp &= ((uint32_t) ~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
|
||||
/* Prepare the DMA Channel configuration */
|
||||
tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#include "Pins.h"
|
||||
#include "Setup.h"
|
||||
#include "stm32f1xx_hal.h"
|
||||
#include "string.h"
|
||||
/**
|
||||
* Initializes the Global MSP.
|
||||
*/
|
||||
@@ -29,6 +30,7 @@ void HAL_MspInit(void) {
|
||||
void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStruct;
|
||||
memset(&GPIO_InitStruct, 0, sizeof(GPIO_InitStruct));
|
||||
if (hadc->Instance == ADC1) {
|
||||
__HAL_RCC_ADC1_CLK_ENABLE();
|
||||
|
||||
@@ -51,6 +53,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {
|
||||
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
|
||||
} else {
|
||||
__HAL_RCC_ADC2_CLK_ENABLE();
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
|
||||
/**ADC2 GPIO Configuration
|
||||
PB0 ------> ADC2_IN8
|
||||
@@ -59,9 +62,11 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) {
|
||||
GPIO_InitStruct.Pin = TIP_TEMP_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(TIP_TEMP_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = TMP36_INPUT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||
HAL_GPIO_Init(TMP36_INPUT_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = VIN_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
|
||||
HAL_GPIO_Init(VIN_GPIO_Port, &GPIO_InitStruct);
|
||||
|
@@ -101,16 +101,16 @@ extern uint32_t SystemCoreClock;
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCPU_CLOCK_HZ (SystemCoreClock)
|
||||
#define configTICK_RATE_HZ (1000)
|
||||
#define configMAX_PRIORITIES (6)
|
||||
#define configMAX_PRIORITIES (7)
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)1024 * 14) /*Currently use about 9000*/
|
||||
#define configMAX_TASK_NAME_LEN (32)
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
#define configUSE_TIMERS 0
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2 /*Bump this to 2 during development and bug hunting*/
|
||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
@@ -156,11 +156,11 @@ extern uint32_t SystemCoreClock;
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */
|
||||
/* USER CODE BEGIN 1 */
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
}
|
||||
/* USER CODE END 1 */
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Author: Ralim
|
||||
*/
|
||||
#include "TipThermoModel.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
#ifdef TEMP_uV_LOOKUP_HAKKO
|
||||
|
@@ -198,7 +198,7 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {
|
||||
tmp = hdma->Instance->CCR;
|
||||
|
||||
/* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */
|
||||
tmp &= ((uint32_t) ~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
|
||||
/* Prepare the DMA Channel configuration */
|
||||
tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;
|
||||
|
@@ -218,6 +218,7 @@
|
||||
#define TEMP_NTC 1
|
||||
#define ACCEL_I2CBB1 1
|
||||
#define POW_EPR 1
|
||||
#define TIP_TYPE_SUPPORT 1 // Support for tips of different types, i.e. resistance
|
||||
#define AUTO_TIP_SELECTION 1 // Can auto-select the tip
|
||||
#define TIPTYPE_T12 1 // Can manually pick a T12 tip
|
||||
#define HAS_POWER_DEBUG_MENU
|
||||
|
@@ -8,10 +8,9 @@
|
||||
#define configCPU_CLOCK_HZ ((uint32_t)SystemCoreClock)
|
||||
#define configRTC_CLOCK_HZ ((uint32_t)32768)
|
||||
#define configTICK_RATE_HZ ((TickType_t)1000)
|
||||
#define configMAX_PRIORITIES (4)
|
||||
#define configMAX_PRIORITIES (7)
|
||||
#define configMINIMAL_STACK_SIZE ((unsigned short)128)
|
||||
#define configMAX_TASK_NAME_LEN 24
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 0
|
||||
#define configUSE_TASK_NOTIFICATIONS 1
|
||||
#define configUSE_MUTEXES 1
|
||||
@@ -22,6 +21,7 @@
|
||||
#define configUSE_TIME_SLICING 1
|
||||
#define configUSE_NEWLIB_REENTRANT 0
|
||||
#define configENABLE_BACKWARD_COMPATIBILITY 0
|
||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||
|
||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||
#define INCLUDE_xTaskGetSchedulerState 1
|
||||
@@ -62,11 +62,11 @@
|
||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
|
||||
|
||||
/* Define to trap errors during development. */
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
}
|
||||
|
||||
#define INCLUDE_vTaskPrioritySet 1
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Author: Ralim
|
||||
*/
|
||||
#include "TipThermoModel.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
#ifdef TEMP_uV_LOOKUP_HAKKO
|
||||
|
@@ -632,7 +632,7 @@ uint32_t adc_sync_mode_convert_value_read(void) {
|
||||
\retval none
|
||||
*/
|
||||
void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel) {
|
||||
ADC_CTL0(adc_periph) &= (uint32_t) ~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL);
|
||||
ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL);
|
||||
/* analog watchdog channel select */
|
||||
ADC_CTL0(adc_periph) |= (uint32_t)adc_channel;
|
||||
ADC_CTL0(adc_periph) |= (uint32_t)(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC);
|
||||
@@ -650,7 +650,7 @@ void adc_watchdog_single_channel_enable(uint32_t adc_periph, uint8_t adc_channel
|
||||
\retval none
|
||||
*/
|
||||
void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_group) {
|
||||
ADC_CTL0(adc_periph) &= (uint32_t) ~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC);
|
||||
ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC);
|
||||
/* select the group */
|
||||
switch (adc_channel_group) {
|
||||
case ADC_REGULAR_CHANNEL:
|
||||
@@ -676,7 +676,7 @@ void adc_watchdog_group_channel_enable(uint32_t adc_periph, uint8_t adc_channel_
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void adc_watchdog_disable(uint32_t adc_periph) { ADC_CTL0(adc_periph) &= (uint32_t) ~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); }
|
||||
void adc_watchdog_disable(uint32_t adc_periph) { ADC_CTL0(adc_periph) &= (uint32_t)~(ADC_CTL0_RWDEN | ADC_CTL0_IWDEN | ADC_CTL0_WDSC | ADC_CTL0_WDCHSEL); }
|
||||
|
||||
/*!
|
||||
\brief configure ADC analog watchdog threshold
|
||||
|
@@ -45,8 +45,7 @@ OF SUCH DAMAGE.
|
||||
\param[out] none
|
||||
\retval none
|
||||
*/
|
||||
void bkp_deinit(void) { /* reset BKP domain register*/
|
||||
}
|
||||
void bkp_deinit(void) { /* reset BKP domain register*/ }
|
||||
|
||||
/*!
|
||||
\brief write BKP data register
|
||||
|
@@ -112,7 +112,7 @@ void exmc_norsram_init(exmc_norsram_parameter_struct *exmc_norsram_init_struct)
|
||||
snctl = EXMC_SNCTL(exmc_norsram_init_struct->norsram_region);
|
||||
|
||||
/* clear relative bits */
|
||||
snctl &= ((uint32_t) ~(EXMC_SNCTL_NREN | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_ASYNCWAIT | EXMC_SNCTL_NRMUX));
|
||||
snctl &= ((uint32_t)~(EXMC_SNCTL_NREN | EXMC_SNCTL_NRTP | EXMC_SNCTL_NRW | EXMC_SNCTL_NRWTPOL | EXMC_SNCTL_WREN | EXMC_SNCTL_NRWTEN | EXMC_SNCTL_ASYNCWAIT | EXMC_SNCTL_NRMUX));
|
||||
|
||||
snctl |= (uint32_t)((uint32_t)exmc_norsram_init_struct->address_data_mux << SNCTL_NRMUX_OFFSET) | exmc_norsram_init_struct->memory_type | exmc_norsram_init_struct->databus_width |
|
||||
exmc_norsram_init_struct->nwait_polarity | ((uint32_t)exmc_norsram_init_struct->memory_write << SNCTL_WREN_OFFSET) |
|
||||
|
@@ -519,8 +519,7 @@ void _premain_init(void) {
|
||||
* by __libc_fini_array function, so we defined a new function
|
||||
* to do initialization
|
||||
*/
|
||||
void _postmain_fini(int status) { /* TODO: Add your own finishing code here, called after main */
|
||||
}
|
||||
void _postmain_fini(int status) { /* TODO: Add your own finishing code here, called after main */ }
|
||||
|
||||
/**
|
||||
* \brief _init function called in __libc_init_array()
|
||||
@@ -531,8 +530,7 @@ void _postmain_fini(int status) { /* TODO: Add your own finishing code here, cal
|
||||
* \note
|
||||
* Please use \ref _premain_init function now
|
||||
*/
|
||||
void _init(void) { /* Don't put any code here, please use _premain_init now */
|
||||
}
|
||||
void _init(void) { /* Don't put any code here, please use _premain_init now */ }
|
||||
|
||||
/**
|
||||
* \brief _fini function called in __libc_fini_array()
|
||||
@@ -543,7 +541,6 @@ void _init(void) { /* Don't put any code here, please use _premain_init now */
|
||||
* \note
|
||||
* Please use \ref _postmain_fini function now
|
||||
*/
|
||||
void _fini(void) { /* Don't put any code here, please use _postmain_fini now */
|
||||
}
|
||||
void _fini(void) { /* Don't put any code here, please use _postmain_fini now */ }
|
||||
|
||||
/** @} */ /* End of Doxygen Group NMSIS_Core_SystemAndClock */
|
||||
|
@@ -7,9 +7,13 @@
|
||||
#include "Pins.h"
|
||||
#include "Settings.h"
|
||||
#include "Setup.h"
|
||||
#if defined(WS2812B_ENABLE)
|
||||
#include "WS2812B.h"
|
||||
#endif
|
||||
#include "TipThermoModel.h"
|
||||
#include "USBPD.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "bflb_platform.h"
|
||||
#include "bl702_adc.h"
|
||||
#include "configuration.h"
|
||||
#include "crc32.h"
|
||||
@@ -26,6 +30,10 @@ uint8_t tempMeasureTicks = 25;
|
||||
|
||||
uint16_t totalPWM = 255; // Total length of the cycle's ticks
|
||||
|
||||
#if defined(WS2812B_ENABLE)
|
||||
WS2812B<WS2812B_Pin, 1> ws2812b;
|
||||
#endif
|
||||
|
||||
void resetWatchdog() {
|
||||
// #TODO
|
||||
}
|
||||
@@ -123,6 +131,12 @@ uint8_t getButtonB() {
|
||||
return val;
|
||||
}
|
||||
|
||||
void BSPInit(void) {
|
||||
#if defined(WS2812B_ENABLE)
|
||||
ws2812b.init();
|
||||
#endif
|
||||
}
|
||||
|
||||
void reboot() { hal_system_reset(); }
|
||||
|
||||
void delay_ms(uint16_t count) {
|
||||
@@ -142,7 +156,33 @@ bool isTipDisconnected() {
|
||||
}
|
||||
|
||||
void setStatusLED(const enum StatusLED state) {
|
||||
// Dont have one
|
||||
#if defined(WS2812B_ENABLE)
|
||||
static enum StatusLED lastState = LED_UNKNOWN;
|
||||
|
||||
if (lastState != state || state == LED_HEATING) {
|
||||
switch (state) {
|
||||
default:
|
||||
case LED_UNKNOWN:
|
||||
case LED_OFF:
|
||||
ws2812b.led_set_color(0, 0, 0, 0);
|
||||
break;
|
||||
case LED_STANDBY:
|
||||
ws2812b.led_set_color(0, 0, 0xFF, 0); // green
|
||||
break;
|
||||
case LED_HEATING: {
|
||||
ws2812b.led_set_color(0, ((xTaskGetTickCount() / 4) % 192) + 64, 0, 0); // Red fade
|
||||
} break;
|
||||
case LED_HOT:
|
||||
ws2812b.led_set_color(0, 0xFF, 0, 0); // red
|
||||
break;
|
||||
case LED_COOLING_STILL_HOT:
|
||||
ws2812b.led_set_color(0, 0xFF, 0x20, 0x00); // Orange
|
||||
break;
|
||||
}
|
||||
ws2812b.led_update();
|
||||
lastState = state;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
void setBuzzer(bool on) {}
|
||||
|
||||
@@ -277,21 +317,8 @@ uint8_t getDeviceValidationStatus() {
|
||||
}
|
||||
|
||||
void showBootLogo(void) {
|
||||
uint8_t scratch[1024];
|
||||
alignas(uint32_t) uint8_t scratch[1024];
|
||||
flash_read(FLASH_LOGOADDR - 0x23000000, scratch, 1024);
|
||||
|
||||
BootLogo::handleShowingLogo(scratch);
|
||||
}
|
||||
|
||||
TemperatureType_t getCustomTipMaxInC() {
|
||||
// have to lookup the max temp while being aware of the coe scaling value
|
||||
float max_reading = ADC_MAX_READING - 1.0;
|
||||
|
||||
if (adcGainCoeffCal.adcGainCoeffEnable) {
|
||||
max_reading /= adcGainCoeffCal.coe;
|
||||
}
|
||||
|
||||
TemperatureType_t maximumTipTemp = TipThermoModel::convertTipRawADCToDegC(max_reading);
|
||||
maximumTipTemp += getHandleTemperature(0) / 10; // Add handle offset
|
||||
return maximumTipTemp - 1;
|
||||
}
|
||||
|
@@ -17,7 +17,6 @@
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)1024 * 8)
|
||||
#define configMAX_TASK_NAME_LEN (24)
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
@@ -30,6 +29,9 @@
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
|
||||
#define configUSE_TICKLESS_IDLE 0
|
||||
#define configTASK_NOTIFICATION_ARRAY_ENTRIES 2
|
||||
#define configUSE_TASK_NOTIFICATIONS 1
|
||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
|
@@ -7,17 +7,126 @@
|
||||
#include "BSP.h"
|
||||
#include "IRQ.h"
|
||||
#include "Setup.h"
|
||||
#include "bl_mcu_sdk/drivers/bl702_driver/std_drv/inc/bl702_dma.h"
|
||||
extern "C" {
|
||||
#include "bflb_platform.h"
|
||||
#include "bl702_dma.h"
|
||||
#include "bl702_glb.h"
|
||||
#include "bl702_i2c.h"
|
||||
}
|
||||
#include <I2C_Wrapper.hpp>
|
||||
|
||||
// Semaphore for locking users of I2C
|
||||
SemaphoreHandle_t FRToSI2C::I2CSemaphore = nullptr;
|
||||
StaticSemaphore_t FRToSI2C::xSemaphoreBuffer;
|
||||
#define I2C_TIME_OUT (uint16_t)(12000)
|
||||
void FRToSI2C::CpltCallback() {} // Not used
|
||||
#define I2C_TIME_OUT (uint16_t)(12000)
|
||||
#define I2C_NOTIFY_INDEX 1
|
||||
#define I2C_TX_FIFO_ADDR (0x4000A300 + 0x88)
|
||||
#define I2C_RX_FIFO_ADDR (0x4000A300 + 0x8C)
|
||||
|
||||
// Used by the irq handler
|
||||
|
||||
volatile uint8_t *IRQDataPointer;
|
||||
volatile uint8_t IRQDataSizeLeft;
|
||||
volatile bool IRQFailureMarker;
|
||||
volatile TaskHandle_t IRQTaskWaitingHandle = NULL;
|
||||
/****** IRQ Handlers ******/
|
||||
void i2c_irq_tx_fifo_low() {
|
||||
// Filling tx fifo
|
||||
// Fifo is 32 bit, LSB sent first
|
||||
// FiFo can store up to 2, 32-bit words
|
||||
// So we fill it until it has no free room (or we run out of data)
|
||||
|
||||
while (IRQDataSizeLeft > 0 && I2C_GetTXFIFOAvailable() > 0) {
|
||||
// Can put in at least 1 byte
|
||||
|
||||
// Build a 32-bit word from bytes
|
||||
uint32_t value = 0;
|
||||
int packing = IRQDataSizeLeft >= 4 ? 0 : 4 - IRQDataSizeLeft;
|
||||
for (int i = 0; i < 4 && IRQDataSizeLeft > 0; i++) {
|
||||
value >>= 8;
|
||||
value |= (*IRQDataPointer) << 24; // Shift to the left, adding new data to the higher byte
|
||||
IRQDataPointer++; // Shift to next byte
|
||||
IRQDataSizeLeft--;
|
||||
}
|
||||
// Handle shunting remaining bytes if not a full 4 to send
|
||||
for (int i = 0; i < packing; i++) {
|
||||
value >>= 8;
|
||||
}
|
||||
// Push the new value to the fifo
|
||||
*((volatile uint32_t *)I2C_TX_FIFO_ADDR) = value;
|
||||
}
|
||||
if (IRQDataSizeLeft == 0) {
|
||||
// Disable IRQ, were done
|
||||
I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, MASK);
|
||||
}
|
||||
}
|
||||
|
||||
void i2c_rx_pop_fifo() {
|
||||
// Pop one word from the fifo and store it
|
||||
uint32_t value = *((uint32_t *)I2C_RX_FIFO_ADDR);
|
||||
|
||||
for (int i = 0; i < 4 && IRQDataSizeLeft > 0; i++) {
|
||||
*IRQDataPointer = value & 0xFF;
|
||||
IRQDataPointer++;
|
||||
IRQDataSizeLeft--;
|
||||
value >>= 8;
|
||||
}
|
||||
}
|
||||
|
||||
void i2c_irq_rx_fifo_ready() {
|
||||
// Draining the Rx FiFo
|
||||
while (I2C_GetRXFIFOAvailable() > 0) {
|
||||
i2c_rx_pop_fifo();
|
||||
}
|
||||
|
||||
if (IRQDataSizeLeft == 0) {
|
||||
// Disable IRQ, were done
|
||||
I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, MASK);
|
||||
}
|
||||
}
|
||||
|
||||
void i2c_irq_done_read() {
|
||||
IRQFailureMarker = false;
|
||||
// If there was a non multiple of 4 bytes to be read, they are pushed to the fifo now (end of transfer interrupt)
|
||||
// So we catch them here
|
||||
while (I2C_GetRXFIFOAvailable() > 0) {
|
||||
i2c_rx_pop_fifo();
|
||||
}
|
||||
|
||||
// Mask IRQ's back off
|
||||
FRToSI2C::CpltCallback(); // Causes the lock to be released
|
||||
}
|
||||
void i2c_irq_done() {
|
||||
IRQFailureMarker = false;
|
||||
// Mask IRQ's back off
|
||||
FRToSI2C::CpltCallback(); // Causes the lock to be released
|
||||
}
|
||||
void i2c_irq_nack() {
|
||||
IRQFailureMarker = true;
|
||||
// Mask IRQ's back off
|
||||
FRToSI2C::CpltCallback(); // Causes the lock to be released
|
||||
}
|
||||
|
||||
/****** END IRQ Handlers ******/
|
||||
void FRToSI2C::CpltCallback() {
|
||||
// This is only triggered from IRQ context
|
||||
I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, MASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, MASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, MASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, MASK);
|
||||
|
||||
CPU_Interrupt_Disable(I2C_IRQn); // Disable IRQ's
|
||||
|
||||
I2C_Disable(I2C0_ID); // Disable I2C to tidy up
|
||||
|
||||
// Unlock the semaphore && allow task switch if desired by RTOS
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken);
|
||||
xTaskNotifyIndexedFromISR(IRQTaskWaitingHandle, I2C_NOTIFY_INDEX, IRQFailureMarker ? 2 : 1, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
bool FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) { return Mem_Write(address, reg, &data, 1); }
|
||||
|
||||
@@ -40,22 +149,41 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_b
|
||||
i2cCfg.data = p_buffer;
|
||||
i2cCfg.subAddrSize = 1; // one byte address
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
/* --------------- */
|
||||
err = I2C_MasterReceiveBlocking(I2C0_ID, &i2cCfg);
|
||||
taskEXIT_CRITICAL();
|
||||
bool res = err == SUCCESS;
|
||||
if (!res) {
|
||||
I2C_Unstick();
|
||||
}
|
||||
unlock();
|
||||
return res;
|
||||
// Store handles for IRQ
|
||||
IRQDataPointer = p_buffer;
|
||||
IRQDataSizeLeft = number_of_byte;
|
||||
IRQTaskWaitingHandle = xTaskGetCurrentTaskHandle();
|
||||
IRQFailureMarker = false;
|
||||
|
||||
I2C_Disable(I2C0_ID);
|
||||
// Setup and run
|
||||
I2C_Init(I2C0_ID, I2C_READ, &i2cCfg); // Setup hardware for the I2C init header with the device address
|
||||
I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_RX_FIFO_READY_INT, UNMASK);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_TRANS_END_INT, i2c_irq_done_read);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_NACK_RECV_INT, i2c_irq_nack);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_RX_FIFO_READY_INT, i2c_irq_rx_fifo_ready);
|
||||
CPU_Interrupt_Enable(I2C_IRQn);
|
||||
|
||||
CPU_Interrupt_Disable(BLE_IRQn);
|
||||
// Start
|
||||
I2C_Enable(I2C0_ID);
|
||||
|
||||
// Wait for transfer in background
|
||||
uint32_t result = 0;
|
||||
xTaskNotifyWaitIndexed(I2C_NOTIFY_INDEX, 0xFFFFFFFF, 0xFFFFFFFF, &result, 0xFFFFFFFF);
|
||||
CPU_Interrupt_Enable(BLE_IRQn);
|
||||
|
||||
return result == 1;
|
||||
}
|
||||
|
||||
bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) {
|
||||
|
||||
if (!lock()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
I2C_Transfer_Cfg i2cCfg = {0, DISABLE, 0, 0, 0, 0};
|
||||
BL_Err_Type err = ERROR;
|
||||
i2cCfg.slaveAddr = DevAddress >> 1;
|
||||
@@ -65,16 +193,34 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_bu
|
||||
i2cCfg.data = p_buffer;
|
||||
i2cCfg.subAddrSize = 1; // one byte address
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
/* --------------- */
|
||||
err = I2C_MasterSendBlocking(I2C0_ID, &i2cCfg);
|
||||
taskEXIT_CRITICAL();
|
||||
bool res = err == SUCCESS;
|
||||
if (!res) {
|
||||
I2C_Unstick();
|
||||
}
|
||||
unlock();
|
||||
return res;
|
||||
// Store handles for IRQ
|
||||
IRQDataPointer = p_buffer;
|
||||
IRQDataSizeLeft = number_of_byte;
|
||||
IRQTaskWaitingHandle = xTaskGetCurrentTaskHandle();
|
||||
IRQFailureMarker = false;
|
||||
|
||||
// Setup and run
|
||||
I2C_Init(I2C0_ID, I2C_WRITE, &i2cCfg); // Setup hardware for the I2C init header with the device address
|
||||
I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK);
|
||||
I2C_IntMask(I2C0_ID, I2C_TX_FIFO_READY_INT, UNMASK);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_TRANS_END_INT, i2c_irq_done);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_NACK_RECV_INT, i2c_irq_nack);
|
||||
I2C_Int_Callback_Install(I2C0_ID, I2C_TX_FIFO_READY_INT, i2c_irq_tx_fifo_low);
|
||||
CPU_Interrupt_Enable(I2C_IRQn);
|
||||
|
||||
i2c_irq_tx_fifo_low();
|
||||
|
||||
CPU_Interrupt_Disable(BLE_IRQn); // Shut up BLE while we do the transfer
|
||||
// Start
|
||||
I2C_Enable(I2C0_ID);
|
||||
|
||||
// Wait for transfer in background
|
||||
uint32_t result = 0;
|
||||
xTaskNotifyWaitIndexed(I2C_NOTIFY_INDEX, 0xFFFFFFFF, 0xFFFFFFFF, &result, 0xFFFFFFFF);
|
||||
CPU_Interrupt_Enable(BLE_IRQn); // Now BLE can run
|
||||
|
||||
return result == 1;
|
||||
}
|
||||
|
||||
bool FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) { return Mem_Write(DevAddress, pData[0], pData + 1, Size - 1); }
|
||||
|
@@ -41,4 +41,11 @@
|
||||
#define UART_TX_Pin GPIO_PIN_22
|
||||
#define UART_RX_Pin GPIO_PIN_23
|
||||
|
||||
#if defined(WS2812B_ENABLE)
|
||||
// WS2812B mod using TP10
|
||||
#define WS2812B_Pin GPIO_PIN_12
|
||||
// WS2812B mod using TP9 is doable too, but harder to reach. Thanks @t3chguy
|
||||
//#define WS2812B_Pin GPIO_PIN_14
|
||||
#endif
|
||||
|
||||
#endif /* BSP_PINE64_PINS_H_ */
|
||||
|
@@ -10,6 +10,7 @@
|
||||
#include "FreeRTOSConfig.h"
|
||||
#include "IRQ.h"
|
||||
#include "Pins.h"
|
||||
#include "bl702_dma.h"
|
||||
#include "bl702_sec_eng.h"
|
||||
#include "history.hpp"
|
||||
#include <string.h>
|
||||
@@ -66,7 +67,9 @@ void hardware_init() {
|
||||
I2C_SetDeglitchCount(I2C0_ID, 1); // Turn on de-glitch
|
||||
// Note on I2C clock rate @ 100Khz the screen update == 20ms which is too long for USB-PD to work
|
||||
// 200kHz and above works
|
||||
|
||||
I2C_ClockSet(I2C0_ID, 300000); // Sets clock to around 25 kHz less than set here
|
||||
|
||||
TIMER_SetCompValue(TIMER_CH0, TIMER_COMP_ID_0, 0);
|
||||
}
|
||||
void setup_pwm(void) {
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Author: Ralim
|
||||
*/
|
||||
#include "TipThermoModel.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
#ifdef TEMP_uV_LOOKUP_HAKKO
|
||||
|
@@ -343,8 +343,7 @@ static u8_t *fixed_data_alloc(struct net_buf *buf, size_t *size, s32_t timeout)
|
||||
return fixed->data_pool + fixed->data_size * net_buf_id(buf);
|
||||
}
|
||||
|
||||
static void fixed_data_unref(struct net_buf *buf, u8_t *data) { /* Nothing needed for fixed-size data pools */
|
||||
}
|
||||
static void fixed_data_unref(struct net_buf *buf, u8_t *data) { /* Nothing needed for fixed-size data pools */ }
|
||||
|
||||
const struct net_buf_data_cb net_buf_fixed_cb = {
|
||||
.alloc = fixed_data_alloc,
|
||||
|
@@ -100,7 +100,8 @@ static void bits2int(uECC_word_t *native, const uint8_t *bits, unsigned bits_siz
|
||||
int uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, uECC_word_t *k, uint8_t *signature, uECC_Curve curve) {
|
||||
uECC_word_t tmp[NUM_ECC_WORDS];
|
||||
uECC_word_t s[NUM_ECC_WORDS];
|
||||
uECC_word_t *k2[2] = {tmp, s};
|
||||
uECC_word_t *k2[2] = {tmp, s};
|
||||
uECC_word_t *initial_Z = 0;
|
||||
uECC_word_t p[NUM_ECC_WORDS * 2];
|
||||
uECC_word_t carry;
|
||||
wordcount_t num_words = curve->num_words;
|
||||
@@ -113,7 +114,15 @@ int uECC_sign_with_k(const uint8_t *private_key, const uint8_t *message_hash, un
|
||||
}
|
||||
|
||||
carry = regularize_k(k, tmp, s, curve);
|
||||
EccPoint_mult(p, curve->G, k2[!carry], 0, num_n_bits + 1, curve);
|
||||
/* If an RNG function was specified, try to get a random initial Z value to improve
|
||||
protection against side-channel attacks. */
|
||||
if (g_rng_function) {
|
||||
if (!uECC_generate_random_int(k2[carry], curve->p, num_words)) {
|
||||
return 0;
|
||||
}
|
||||
initial_Z = k2[carry];
|
||||
}
|
||||
EccPoint_mult(p, curve->G, k2[!carry], initial_Z, num_n_bits + 1, curve);
|
||||
if (uECC_vli_isZero(p, num_words)) {
|
||||
return 0;
|
||||
}
|
||||
|
@@ -2059,14 +2059,14 @@ void bt_att_mtu_changed(struct bt_l2cap_chan *chan, u16_t mtu) { bt_gatt_mtu_cha
|
||||
static int bt_att_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan) {
|
||||
int i;
|
||||
static struct bt_l2cap_chan_ops ops = {
|
||||
.connected = bt_att_connected,
|
||||
.disconnected = bt_att_disconnected,
|
||||
.recv = bt_att_recv,
|
||||
.connected = bt_att_connected,
|
||||
.disconnected = bt_att_disconnected,
|
||||
.recv = bt_att_recv,
|
||||
#if defined(CONFIG_BT_SMP)
|
||||
.encrypt_change = bt_att_encrypt_change,
|
||||
.encrypt_change = bt_att_encrypt_change,
|
||||
#endif /* CONFIG_BT_SMP */
|
||||
#if defined(BFLB_BLE_MTU_CHANGE_CB)
|
||||
.mtu_changed = bt_att_mtu_changed,
|
||||
.mtu_changed = bt_att_mtu_changed,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -260,7 +260,11 @@ struct event_handler {
|
||||
};
|
||||
|
||||
#define EVENT_HANDLER(_evt, _handler, _min_len) \
|
||||
{ .event = _evt, .handler = _handler, .min_len = _min_len, }
|
||||
{ \
|
||||
.event = _evt, \
|
||||
.handler = _handler, \
|
||||
.min_len = _min_len, \
|
||||
}
|
||||
|
||||
static inline void handle_event(u8_t event, struct net_buf *buf, const struct event_handler *handlers, size_t num_handlers) {
|
||||
size_t i;
|
||||
@@ -5240,11 +5244,11 @@ int bt_recv(struct net_buf *buf) {
|
||||
}
|
||||
|
||||
static const struct event_handler prio_events[] = {
|
||||
EVENT_HANDLER(BT_HCI_EVT_CMD_COMPLETE, hci_cmd_complete, sizeof(struct bt_hci_evt_cmd_complete)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_CMD_STATUS, hci_cmd_status, sizeof(struct bt_hci_evt_cmd_status)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_CMD_COMPLETE, hci_cmd_complete, sizeof(struct bt_hci_evt_cmd_complete)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_CMD_STATUS, hci_cmd_status, sizeof(struct bt_hci_evt_cmd_status)),
|
||||
#if defined(CONFIG_BT_CONN)
|
||||
EVENT_HANDLER(BT_HCI_EVT_DATA_BUF_OVERFLOW, hci_data_buf_overflow, sizeof(struct bt_hci_evt_data_buf_overflow)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_NUM_COMPLETED_PACKETS, hci_num_completed_packets, sizeof(struct bt_hci_evt_num_completed_packets)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_DATA_BUF_OVERFLOW, hci_data_buf_overflow, sizeof(struct bt_hci_evt_data_buf_overflow)),
|
||||
EVENT_HANDLER(BT_HCI_EVT_NUM_COMPLETED_PACKETS, hci_num_completed_packets, sizeof(struct bt_hci_evt_num_completed_packets)),
|
||||
#endif /* CONFIG_BT_CONN */
|
||||
};
|
||||
|
||||
@@ -5618,7 +5622,7 @@ extern struct net_buf_pool prep_pool;
|
||||
#if defined(CONFIG_BT_BREDR)
|
||||
extern struct net_buf_pool br_sig_pool;
|
||||
extern struct net_buf_pool sdp_pool;
|
||||
#if defined CONFIG_BT_HFP
|
||||
#if defined CONFIG_BT_HFP
|
||||
extern struct net_buf_pool hf_pool;
|
||||
extern struct net_buf_pool dummy_pool;
|
||||
#endif
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "types.h"
|
||||
#include <zephyr/types.h>
|
||||
#include "bl_port.h"
|
||||
|
||||
#define BT_UINT_MAX 0xffffffff
|
||||
|
@@ -92,8 +92,8 @@ int dma_open(struct device *dev, uint16_t oflag) {
|
||||
chCfg.dstPeriph = dma_device->dst_req;
|
||||
chCfg.srcAddrInc = dma_device->src_addr_inc;
|
||||
chCfg.destAddrInc = dma_device->dst_addr_inc;
|
||||
chCfg.srcBurstSzie = dma_device->src_burst_size;
|
||||
chCfg.dstBurstSzie = dma_device->dst_burst_size;
|
||||
chCfg.srcBurstSize = dma_device->src_burst_size;
|
||||
chCfg.dstBurstSize = dma_device->dst_burst_size;
|
||||
chCfg.srcTransfWidth = dma_device->src_width;
|
||||
chCfg.dstTransfWidth = dma_device->dst_width;
|
||||
DMA_Channel_Init(&chCfg);
|
||||
|
@@ -39,6 +39,10 @@
|
||||
#include "dma_reg.h"
|
||||
#include "bl702_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** @addtogroup BL702_Peripheral_Driver
|
||||
* @{
|
||||
*/
|
||||
@@ -168,9 +172,9 @@ typedef struct
|
||||
DMA_Chan_Type ch; /*!< Channel select 0-7 */
|
||||
DMA_Trans_Width_Type srcTransfWidth; /*!< Transfer width. 0: 8 bits, 1: 16 bits, 2: 32 bits */
|
||||
DMA_Trans_Width_Type dstTransfWidth; /*!< Transfer width. 0: 8 bits, 1: 16 bits, 2: 32 bits */
|
||||
DMA_Burst_Size_Type srcBurstSzie; /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.
|
||||
DMA_Burst_Size_Type srcBurstSize; /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.
|
||||
0: 1 item, 1: 4 items, 2: 8 items, 3: 16 items */
|
||||
DMA_Burst_Size_Type dstBurstSzie; /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.
|
||||
DMA_Burst_Size_Type dstBurstSize; /*!< Number of data items for burst transaction length. Each item width is as same as tansfer width.
|
||||
0: 1 item, 1: 4 items, 2: 8 items, 3: 16 items */
|
||||
BL_Fun_Type dstAddMode; /*!< */
|
||||
BL_Fun_Type dstMinMode; /*!< */
|
||||
@@ -181,16 +185,6 @@ typedef struct
|
||||
DMA_Periph_Req_Type dstPeriph; /*!< Destination peripheral select */
|
||||
} DMA_Channel_Cfg_Type;
|
||||
|
||||
/**
|
||||
* @brief DMA LLI control structure type definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t srcDmaAddr; /*!< Source address of DMA transfer */
|
||||
uint32_t destDmaAddr; /*!< Destination address of DMA transfer */
|
||||
uint32_t nextLLI; /*!< Next LLI address */
|
||||
struct DMA_Control_Reg dmaCtrl; /*!< DMA transaction control */
|
||||
} DMA_LLI_Ctrl_Type;
|
||||
|
||||
/**
|
||||
* @brief DMA LLI configuration structure type definition
|
||||
@@ -202,31 +196,6 @@ typedef struct
|
||||
DMA_Periph_Req_Type dstPeriph; /*!< Destination peripheral select */
|
||||
} DMA_LLI_Cfg_Type;
|
||||
|
||||
/**
|
||||
* @brief DMA LLI Ping-Pong Buf definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t idleIndex; /*!< Index Idle lliListHeader */
|
||||
uint8_t dmaChan; /*!< DMA LLI Channel used */
|
||||
DMA_LLI_Ctrl_Type *lliListHeader[2]; /*!< Ping-Pong BUf List Header */
|
||||
void (*onTransCompleted)(DMA_LLI_Ctrl_Type *); /*!< Completed Transmit One List Callback Function */
|
||||
} DMA_LLI_PP_Buf;
|
||||
|
||||
/**
|
||||
* @brief DMA LLI Ping-Pong Structure definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t trans_index; /*!< Ping or Pong Trigger TC */
|
||||
uint8_t dmaChan; /*!< DMA LLI Channel used */
|
||||
struct DMA_Control_Reg dmaCtrlRegVal; /*!< DMA Basic Pararmeter */
|
||||
DMA_LLI_Cfg_Type *DMA_LLI_Cfg; /*!< LLI Config parameter */
|
||||
uint32_t operatePeriphAddr; /*!< Operate Peripheral register address */
|
||||
uint32_t chache_buf_addr[2]; /*!< Ping-Pong structure chache */
|
||||
BL_Fun_Type is_single_mode; /*!< is Ping-pong running forever or single mode ,if is single mode ping-pong will run only once
|
||||
after one start */
|
||||
} DMA_LLI_PP_Struct;
|
||||
|
||||
/*@} end of group DMA_Public_Types */
|
||||
|
||||
@@ -346,16 +315,7 @@ void DMA_Channel_Disable(uint8_t ch);
|
||||
void DMA_LLI_Init(uint8_t ch, DMA_LLI_Cfg_Type *lliCfg);
|
||||
void DMA_LLI_Update(uint8_t ch, uint32_t LLI);
|
||||
void DMA_IntMask(uint8_t ch, DMA_INT_Type intType, BL_Mask_Type intMask);
|
||||
void DMA_LLI_PpBuf_Start_New_Transmit(DMA_LLI_PP_Buf *dmaPpBuf);
|
||||
DMA_LLI_Ctrl_Type *DMA_LLI_PpBuf_Remove_Completed_List(DMA_LLI_PP_Buf *dmaPpBuf);
|
||||
void DMA_LLI_PpBuf_Append(DMA_LLI_PP_Buf *dmaPpBuf, DMA_LLI_Ctrl_Type *dmaLliList);
|
||||
void DMA_LLI_PpBuf_Destroy(DMA_LLI_PP_Buf *dmaPpBuf);
|
||||
void DMA_Int_Callback_Install(DMA_Chan_Type dmaChan, DMA_INT_Type intType, intCallback_Type *cbFun);
|
||||
void DMA_LLI_PpStruct_Start(DMA_LLI_PP_Struct *dmaPpStruct);
|
||||
void DMA_LLI_PpStruct_Stop(DMA_LLI_PP_Struct *dmaPpStruct);
|
||||
BL_Err_Type DMA_LLI_PpStruct_Init(DMA_LLI_PP_Struct *dmaPpStruct);
|
||||
BL_Err_Type DMA_LLI_PpStruct_Set_Transfer_Len(DMA_LLI_PP_Struct *dmaPpStruct,
|
||||
uint16_t Ping_Transfer_len, uint16_t Pong_Transfer_len);
|
||||
|
||||
/*@} end of group DMA_Public_Functions */
|
||||
|
||||
@@ -363,4 +323,8 @@ BL_Err_Type DMA_LLI_PpStruct_Set_Transfer_Len(DMA_LLI_PP_Struct *dmaPpStruct,
|
||||
|
||||
/*@} end of group BL702_Peripheral_Driver */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __BL702_DMA_H__ */
|
||||
|
@@ -1,43 +1,43 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file bl702_i2c.h
|
||||
* @version V1.0
|
||||
* @date
|
||||
* @brief This file is the standard driver header file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Bouffalo Lab nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
******************************************************************************
|
||||
* @file bl702_i2c.h
|
||||
* @version V1.0
|
||||
* @date
|
||||
* @brief This file is the standard driver header file
|
||||
******************************************************************************
|
||||
* @attention
|
||||
*
|
||||
* <h2><center>© COPYRIGHT(c) 2020 Bouffalo Lab</center></h2>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of Bouffalo Lab nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
#ifndef __BL702_I2C_H__
|
||||
#define __BL702_I2C_H__
|
||||
|
||||
#include "i2c_reg.h"
|
||||
#include "bl702_common.h"
|
||||
#include "i2c_reg.h"
|
||||
|
||||
/** @addtogroup BL702_Peripheral_Driver
|
||||
* @{
|
||||
@@ -55,75 +55,71 @@
|
||||
* @brief I2C No. type definition
|
||||
*/
|
||||
typedef enum {
|
||||
I2C0_ID = 0, /*!< I2C0 define */
|
||||
I2C_ID_MAX, /*!< I2C max define */
|
||||
I2C0_ID = 0, /*!< I2C0 define */
|
||||
I2C_ID_MAX, /*!< I2C max define */
|
||||
} I2C_ID_Type;
|
||||
|
||||
/**
|
||||
* @brief I2C read/write type definition
|
||||
*/
|
||||
typedef enum {
|
||||
I2C_WRITE = 0, /*!< I2C write direction */
|
||||
I2C_READ, /*!< I2C read direction */
|
||||
I2C_WRITE = 0, /*!< I2C write direction */
|
||||
I2C_READ, /*!< I2C read direction */
|
||||
} I2C_Direction_Type;
|
||||
|
||||
/**
|
||||
* @brief I2C interrupt type definition
|
||||
*/
|
||||
typedef enum {
|
||||
I2C_TRANS_END_INT, /*!< I2C transfer end interrupt */
|
||||
I2C_TX_FIFO_READY_INT, /*!< I2C TX fifo ready interrupt */
|
||||
I2C_RX_FIFO_READY_INT, /*!< I2C RX fifo ready interrupt */
|
||||
I2C_NACK_RECV_INT, /*!< I2C nack received interrupt */
|
||||
I2C_ARB_LOST_INT, /*!< I2C arbitration lost interrupt */
|
||||
I2C_FIFO_ERR_INT, /*!< I2C TX/RX FIFO error interrupt */
|
||||
I2C_INT_ALL, /*!< I2C interrupt all type */
|
||||
I2C_TRANS_END_INT, /*!< I2C transfer end interrupt */
|
||||
I2C_TX_FIFO_READY_INT, /*!< I2C TX fifo ready interrupt */
|
||||
I2C_RX_FIFO_READY_INT, /*!< I2C RX fifo ready interrupt */
|
||||
I2C_NACK_RECV_INT, /*!< I2C nack received interrupt */
|
||||
I2C_ARB_LOST_INT, /*!< I2C arbitration lost interrupt */
|
||||
I2C_FIFO_ERR_INT, /*!< I2C TX/RX FIFO error interrupt */
|
||||
I2C_INT_ALL, /*!< I2C interrupt all type */
|
||||
} I2C_INT_Type;
|
||||
|
||||
/**
|
||||
* @brief I2S start condition phase structure type definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t len0; /*!< Length of START condition phase 0 */
|
||||
uint8_t len1; /*!< Length of START condition phase 1 */
|
||||
uint8_t len2; /*!< Length of START condition phase 2 */
|
||||
uint8_t len3; /*!< Length of START condition phase 3 */
|
||||
typedef struct {
|
||||
uint8_t len0; /*!< Length of START condition phase 0 */
|
||||
uint8_t len1; /*!< Length of START condition phase 1 */
|
||||
uint8_t len2; /*!< Length of START condition phase 2 */
|
||||
uint8_t len3; /*!< Length of START condition phase 3 */
|
||||
} I2C_Start_Condition_Phase_Type;
|
||||
|
||||
/**
|
||||
* @brief I2S stop condition phase structure type definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t len0; /*!< Length of STOP condition phase 0 */
|
||||
uint8_t len1; /*!< Length of STOP condition phase 1 */
|
||||
uint8_t len2; /*!< Length of STOP condition phase 2 */
|
||||
uint8_t len3; /*!< Length of STOP condition phase 3 */
|
||||
typedef struct {
|
||||
uint8_t len0; /*!< Length of STOP condition phase 0 */
|
||||
uint8_t len1; /*!< Length of STOP condition phase 1 */
|
||||
uint8_t len2; /*!< Length of STOP condition phase 2 */
|
||||
uint8_t len3; /*!< Length of STOP condition phase 3 */
|
||||
} I2C_Stop_Condition_Phase_Type;
|
||||
|
||||
/**
|
||||
* @brief I2S data phase structure type definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t len0; /*!< Length of DATA phase 0 */
|
||||
uint8_t len1; /*!< Length of DATA phase 1 */
|
||||
uint8_t len2; /*!< Length of DATA phase 2 */
|
||||
uint8_t len3; /*!< Length of DATA phase 3 */
|
||||
typedef struct {
|
||||
uint8_t len0; /*!< Length of DATA phase 0 */
|
||||
uint8_t len1; /*!< Length of DATA phase 1 */
|
||||
uint8_t len2; /*!< Length of DATA phase 2 */
|
||||
uint8_t len3; /*!< Length of DATA phase 3 */
|
||||
} I2C_Data_Phase_Type;
|
||||
|
||||
/**
|
||||
* @brief I2S transfer structure type definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint8_t slaveAddr; /*!< I2C slave address */
|
||||
BL_Fun_Type stopEveryByte; /*!< I2C all data byte with stop bit */
|
||||
uint8_t subAddrSize; /*!< Specifies the size of I2C sub address section */
|
||||
uint32_t subAddr; /*!< I2C sub address */
|
||||
uint16_t dataSize; /*!< Specifies the size of I2C data section */
|
||||
uint8_t *data; /*!< Specifies the pointer of I2C R/W data */
|
||||
typedef struct {
|
||||
uint8_t slaveAddr; /*!< I2C slave address */
|
||||
BL_Fun_Type stopEveryByte; /*!< I2C all data byte with stop bit */
|
||||
uint8_t subAddrSize; /*!< Specifies the size of I2C sub address section */
|
||||
uint32_t subAddr; /*!< I2C sub address */
|
||||
uint16_t dataSize; /*!< Specifies the size of I2C data section */
|
||||
uint8_t *data; /*!< Specifies the pointer of I2C R/W data */
|
||||
} I2C_Transfer_Cfg;
|
||||
|
||||
/*@} end of group I2C_Public_Types */
|
||||
@@ -135,25 +131,19 @@ typedef struct
|
||||
/** @defgroup I2C_ID_TYPE
|
||||
* @{
|
||||
*/
|
||||
#define IS_I2C_ID_TYPE(type) (((type) == I2C0_ID) || \
|
||||
((type) == I2C_ID_MAX))
|
||||
#define IS_I2C_ID_TYPE(type) (((type) == I2C0_ID) || ((type) == I2C_ID_MAX))
|
||||
|
||||
/** @defgroup I2C_DIRECTION_TYPE
|
||||
* @{
|
||||
*/
|
||||
#define IS_I2C_DIRECTION_TYPE(type) (((type) == I2C_WRITE) || \
|
||||
((type) == I2C_READ))
|
||||
#define IS_I2C_DIRECTION_TYPE(type) (((type) == I2C_WRITE) || ((type) == I2C_READ))
|
||||
|
||||
/** @defgroup I2C_INT_TYPE
|
||||
* @{
|
||||
*/
|
||||
#define IS_I2C_INT_TYPE(type) (((type) == I2C_TRANS_END_INT) || \
|
||||
((type) == I2C_TX_FIFO_READY_INT) || \
|
||||
((type) == I2C_RX_FIFO_READY_INT) || \
|
||||
((type) == I2C_NACK_RECV_INT) || \
|
||||
((type) == I2C_ARB_LOST_INT) || \
|
||||
((type) == I2C_FIFO_ERR_INT) || \
|
||||
((type) == I2C_INT_ALL))
|
||||
#define IS_I2C_INT_TYPE(type) \
|
||||
(((type) == I2C_TRANS_END_INT) || ((type) == I2C_TX_FIFO_READY_INT) || ((type) == I2C_RX_FIFO_READY_INT) || ((type) == I2C_NACK_RECV_INT) || ((type) == I2C_ARB_LOST_INT) || \
|
||||
((type) == I2C_FIFO_ERR_INT) || ((type) == I2C_INT_ALL))
|
||||
|
||||
/*@} end of group I2C_Public_Constants */
|
||||
|
||||
@@ -173,22 +163,26 @@ typedef struct
|
||||
#ifndef BFLB_USE_HAL_DRIVER
|
||||
void I2C_IRQHandler(void);
|
||||
#endif
|
||||
void I2C_SendWord(I2C_ID_Type i2cNo, uint32_t data);
|
||||
uint32_t I2C_RecieveWord(I2C_ID_Type i2cNo);
|
||||
void I2C_Enable(I2C_ID_Type i2cNo);
|
||||
void I2C_Disable(I2C_ID_Type i2cNo);
|
||||
void I2C_SendWord(I2C_ID_Type i2cNo, uint32_t data);
|
||||
uint32_t I2C_RecieveWord(I2C_ID_Type i2cNo);
|
||||
void I2C_Enable(I2C_ID_Type i2cNo);
|
||||
void I2C_Disable(I2C_ID_Type i2cNo);
|
||||
BL_Err_Type I2C_SetDeglitchCount(I2C_ID_Type i2cNo, uint8_t cnt);
|
||||
BL_Err_Type I2C_Reset(I2C_ID_Type i2cNo);
|
||||
void I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase);
|
||||
void I2C_ClockSet(I2C_ID_Type i2cNo, uint32_t clk);
|
||||
void I2C_SetSclSync(I2C_ID_Type i2cNo, uint8_t enable);
|
||||
void I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cfg);
|
||||
uint8_t I2C_GetTXFIFOAvailable();
|
||||
uint8_t I2C_GetRXFIFOAvailable();
|
||||
void I2C_DMATxEnable();
|
||||
void I2C_DMATxDisable();
|
||||
void I2C_SetPrd(I2C_ID_Type i2cNo, uint8_t phase);
|
||||
void I2C_ClockSet(I2C_ID_Type i2cNo, uint32_t clk);
|
||||
void I2C_SetSclSync(I2C_ID_Type i2cNo, uint8_t enable);
|
||||
void I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cfg);
|
||||
BL_Sts_Type I2C_IsBusy(I2C_ID_Type i2cNo);
|
||||
BL_Sts_Type I2C_TransferEndStatus(I2C_ID_Type i2cNo);
|
||||
BL_Err_Type I2C_MasterSendBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg);
|
||||
BL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg);
|
||||
void I2C_IntMask(I2C_ID_Type i2cNo, I2C_INT_Type intType, BL_Mask_Type intMask);
|
||||
void I2C_Int_Callback_Install(I2C_ID_Type i2cNo, I2C_INT_Type intType, intCallback_Type *cbFun);
|
||||
void I2C_IntMask(I2C_ID_Type i2cNo, I2C_INT_Type intType, BL_Mask_Type intMask);
|
||||
void I2C_Int_Callback_Install(I2C_ID_Type i2cNo, I2C_INT_Type intType, intCallback_Type *cbFun);
|
||||
|
||||
/*@} end of group I2C_Public_Functions */
|
||||
|
||||
|
@@ -55,8 +55,9 @@
|
||||
#ifndef __GNUC__
|
||||
__WEAK
|
||||
__ASM void ATTR_TCM_SECTION ASM_Delay_Us(uint32_t core, uint32_t cnt){
|
||||
lsrs r0, #0x10 muls r0, r1, r0 mov r2, r0 lsrs r2, #0x04 lsrs r2, #0x03 cmp r2, #0x01 beq end cmp r2, #0x00 beq end loop mov r0, r0 mov r0, r0 mov r0,
|
||||
r0 mov r0, r0 mov r0, r0 subs r2, r2, #0x01 cmp r2, #0x00 bne loop end bx lr}
|
||||
lsrs r0, #0x10 muls r0, r1, r0 mov r2, r0 lsrs r2, #0x04 lsrs r2, #0x03 cmp r2, #0x01 beq end cmp r2, #0x00 beq end loop mov r0, r0 mov r0, r0 mov r0, r0 mov r0, r0 mov r0, r0 subs r2, r2,
|
||||
# 0x01 cmp r2, #0x00 bne loop end bx lr
|
||||
}
|
||||
#else
|
||||
__WEAK
|
||||
void ATTR_TCM_SECTION ASM_Delay_Us(uint32_t core, uint32_t cnt) {
|
||||
|
@@ -58,7 +58,7 @@ static intCallback_Type *dmaIntCbfArra[DMA_CH_MAX][DMA_INT_ALL] = {
|
||||
{NULL, NULL},
|
||||
{NULL, NULL}
|
||||
};
|
||||
static DMA_LLI_Ctrl_Type PingPongListArra[DMA_CH_MAX][2];
|
||||
// static DMA_LLI_Ctrl_Type PingPongListArra[DMA_CH_MAX][2];
|
||||
|
||||
/*@} end of group DMA_Private_Macros */
|
||||
|
||||
@@ -90,14 +90,14 @@ static DMA_LLI_Ctrl_Type PingPongListArra[DMA_CH_MAX][2];
|
||||
* @{
|
||||
*/
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA interrupt handler
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA interrupt handler
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
#ifndef BFLB_USE_HAL_DRIVER
|
||||
void DMA_ALL_IRQHandler(void) {
|
||||
uint32_t tmpVal;
|
||||
@@ -150,14 +150,14 @@ void DMA_ALL_IRQHandler(void) {
|
||||
* @{
|
||||
*/
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA enable
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA enable
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Enable(void) {
|
||||
uint32_t tmpVal;
|
||||
/* Get DMA register */
|
||||
@@ -171,14 +171,14 @@ void DMA_Enable(void) {
|
||||
#endif
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA disable
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA disable
|
||||
*
|
||||
* @param None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Disable(void) {
|
||||
uint32_t tmpVal;
|
||||
/* Get DMA register */
|
||||
@@ -189,14 +189,14 @@ void DMA_Disable(void) {
|
||||
BL_WR_REG(DMAChs, DMA_TOP_CONFIG, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA channel init
|
||||
*
|
||||
* @param chCfg: DMA configuration
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA channel init
|
||||
*
|
||||
* @param chCfg: DMA configuration
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -206,13 +206,14 @@ void DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg) {
|
||||
CHECK_PARAM(IS_DMA_CHAN_TYPE(chCfg->ch));
|
||||
CHECK_PARAM(IS_DMA_TRANS_WIDTH_TYPE(chCfg->srcTransfWidth));
|
||||
CHECK_PARAM(IS_DMA_TRANS_WIDTH_TYPE(chCfg->dstTransfWidth));
|
||||
CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->srcBurstSzie));
|
||||
CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->dstBurstSzie));
|
||||
CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->srcBurstSize));
|
||||
CHECK_PARAM(IS_DMA_BURST_SIZE_TYPE(chCfg->dstBurstSize));
|
||||
CHECK_PARAM(IS_DMA_TRANS_DIR_TYPE(chCfg->dir));
|
||||
CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(chCfg->dstPeriph));
|
||||
CHECK_PARAM(IS_DMA_PERIPH_REQ_TYPE(chCfg->srcPeriph));
|
||||
|
||||
/* Disable clock gate */
|
||||
// Turns on clock
|
||||
GLB_AHB_Slave1_Clock_Gate(DISABLE, BL_AHB_SLAVE1_DMA);
|
||||
|
||||
/* Config channel config */
|
||||
@@ -223,15 +224,15 @@ void DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg) {
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_TRANSFERSIZE, chCfg->transfLength);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SWIDTH, chCfg->srcTransfWidth);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DWIDTH, chCfg->dstTransfWidth);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SBSIZE, chCfg->srcBurstSzie);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DBSIZE, chCfg->dstBurstSzie);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SBSIZE, chCfg->srcBurstSize);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DBSIZE, chCfg->dstBurstSize);
|
||||
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DST_ADD_MODE, chCfg->dstAddMode);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DST_MIN_MODE, chCfg->dstMinMode);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_FIX_CNT, chCfg->fixCnt);
|
||||
|
||||
/* FIXME: how to deal with SLargerD */
|
||||
tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_SLARGERD);
|
||||
tmpVal = BL_CLR_REG_BIT(tmpVal, DMA_SLARGERD); // Reserved bit 25
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SI, chCfg->srcAddrInc);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DI, chCfg->destAddrInc);
|
||||
BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);
|
||||
@@ -241,18 +242,21 @@ void DMA_Channel_Init(DMA_Channel_Cfg_Type *chCfg) {
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_DSTPERIPHERAL, chCfg->dstPeriph);
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, DMA_SRCPERIPHERAL, chCfg->srcPeriph);
|
||||
BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);
|
||||
// Clear interrupts
|
||||
*((uint32_t *)0x4000c008) = 1 << (chCfg->ch); // Clear transfer complete
|
||||
*((uint32_t *)0x4000c010) = 1 << (chCfg->ch); // Clear Error
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA channel update source memory address and len
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
* @param memAddr: source memoty address
|
||||
* @param len: source memory data length
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA channel update source memory address and len
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
* @param memAddr: source memoty address
|
||||
* @param len: source memory data length
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Channel_Update_SrcMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -268,16 +272,16 @@ void DMA_Channel_Update_SrcMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {
|
||||
BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA channel update destination memory address and len
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
* @param memAddr: destination memoty address
|
||||
* @param len: destination memory data length
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA channel update destination memory address and len
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
* @param memAddr: destination memoty address
|
||||
* @param len: destination memory data length
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Channel_Update_DstMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -293,14 +297,14 @@ void DMA_Channel_Update_DstMemcfg(uint8_t ch, uint32_t memAddr, uint32_t len) {
|
||||
BL_WR_REG(DMAChs, DMA_CONTROL, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief Get DMA channel tranfersize
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
*
|
||||
* @return tranfersize size
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief Get DMA channel tranfersize
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
*
|
||||
* @return tranfersize size
|
||||
*
|
||||
*******************************************************************************/
|
||||
uint32_t DMA_Channel_TranferSize(uint8_t ch) {
|
||||
/* Get channel register */
|
||||
uint32_t DMAChs = DMA_Get_Channel(ch);
|
||||
@@ -311,14 +315,14 @@ uint32_t DMA_Channel_TranferSize(uint8_t ch) {
|
||||
return BL_GET_REG_BITS_VAL(BL_RD_REG(DMAChs, DMA_CONTROL), DMA_TRANSFERSIZE);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief Get DMA channel busy status
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
*
|
||||
* @return SET or RESET
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief Get DMA channel busy status
|
||||
*
|
||||
* @param ch: DMA channel
|
||||
*
|
||||
* @return SET or RESET
|
||||
*
|
||||
*******************************************************************************/
|
||||
BL_Sts_Type DMA_Channel_Is_Busy(uint8_t ch) {
|
||||
/* Get channel register */
|
||||
uint32_t DMAChs = DMA_Get_Channel(ch);
|
||||
@@ -329,14 +333,14 @@ BL_Sts_Type DMA_Channel_Is_Busy(uint8_t ch) {
|
||||
return BL_IS_REG_BIT_SET(BL_RD_REG(DMAChs, DMA_CONFIG), DMA_E) == 1 ? SET : RESET;
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA enable
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA enable
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Channel_Enable(uint8_t ch) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -350,14 +354,14 @@ void DMA_Channel_Enable(uint8_t ch) {
|
||||
BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA disable
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA disable
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Channel_Disable(uint8_t ch) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -371,15 +375,15 @@ void DMA_Channel_Disable(uint8_t ch) {
|
||||
BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA init LLI transfer
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param lliCfg: LLI configuration
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA init LLI transfer
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param lliCfg: LLI configuration
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_Init(uint8_t ch, DMA_LLI_Cfg_Type *lliCfg) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -401,15 +405,15 @@ void DMA_LLI_Init(uint8_t ch, DMA_LLI_Cfg_Type *lliCfg) {
|
||||
BL_WR_REG(DMAChs, DMA_CONFIG, tmpVal);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA channel update LLI
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param LLI: LLI addr
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief DMA channel update LLI
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param LLI: LLI addr
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_Update(uint8_t ch, uint32_t LLI) {
|
||||
/* Get channel register */
|
||||
uint32_t DMAChs = DMA_Get_Channel(ch);
|
||||
@@ -422,152 +426,16 @@ void DMA_LLI_Update(uint8_t ch, uint32_t LLI) {
|
||||
BL702_MemCpy4((uint32_t *)DMAChs, (uint32_t *)LLI, 4);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI PingPong Structure Start
|
||||
*
|
||||
* @param dmaPpStruct: dma pp struct pointer
|
||||
* @param Ping_Transfer_len: ping len
|
||||
* @param Pong_Transfer_len: pong len
|
||||
*
|
||||
* @return Succrss or not
|
||||
*
|
||||
*******************************************************************************/
|
||||
BL_Err_Type DMA_LLI_PpStruct_Set_Transfer_Len(DMA_LLI_PP_Struct *dmaPpStruct, uint16_t Ping_Transfer_len, uint16_t Pong_Transfer_len) {
|
||||
struct DMA_Control_Reg dmaCtrlRegVal_temp;
|
||||
|
||||
if (Ping_Transfer_len > 4096 || Pong_Transfer_len > 4096) {
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
dmaCtrlRegVal_temp = PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].dmaCtrl;
|
||||
dmaCtrlRegVal_temp.TransferSize = Ping_Transfer_len;
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].dmaCtrl = dmaCtrlRegVal_temp;
|
||||
|
||||
dmaCtrlRegVal_temp = PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].dmaCtrl;
|
||||
dmaCtrlRegVal_temp.TransferSize = Pong_Transfer_len;
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].dmaCtrl = dmaCtrlRegVal_temp;
|
||||
|
||||
DMA_LLI_Init(dmaPpStruct->dmaChan, dmaPpStruct->DMA_LLI_Cfg);
|
||||
DMA_LLI_Update(dmaPpStruct->dmaChan, (uint32_t)&PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX]);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI Start New Transmit for Ping-Pong Buf
|
||||
*
|
||||
* @param dmaPpBuf: DMA LLI Ping-Pong Buf
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_PpBuf_Start_New_Transmit(DMA_LLI_PP_Buf *dmaPpBuf) {
|
||||
CPU_Interrupt_Disable(DMA_ALL_IRQn);
|
||||
|
||||
if (dmaPpBuf->lliListHeader[dmaPpBuf->idleIndex] != NULL) {
|
||||
DMA_LLI_Update(dmaPpBuf->dmaChan, (uint32_t)dmaPpBuf->lliListHeader[dmaPpBuf->idleIndex]);
|
||||
DMA_Channel_Enable(dmaPpBuf->dmaChan);
|
||||
dmaPpBuf->idleIndex = (dmaPpBuf->idleIndex == 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
CPU_Interrupt_Enable(DMA_ALL_IRQn);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI Remove Completed Ping-Pong Buf List
|
||||
*
|
||||
* @param dmaPpBuf: DMA LLI Ping-Pong Buf
|
||||
*
|
||||
* @return Next Ping-Pong Buf List Header
|
||||
*
|
||||
*******************************************************************************/
|
||||
DMA_LLI_Ctrl_Type *DMA_LLI_PpBuf_Remove_Completed_List(DMA_LLI_PP_Buf *dmaPpBuf) {
|
||||
CPU_Interrupt_Disable(DMA_ALL_IRQn);
|
||||
|
||||
dmaPpBuf->lliListHeader[!dmaPpBuf->idleIndex] = NULL;
|
||||
CPU_Interrupt_Enable(DMA_ALL_IRQn);
|
||||
return dmaPpBuf->lliListHeader[!dmaPpBuf->idleIndex];
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI Append Buf to List
|
||||
*
|
||||
* @param dmaPpBuf: DMA LLI Ping-Pong Buf
|
||||
* @param dmaLliList: New LLI Buf to Append
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_PpBuf_Append(DMA_LLI_PP_Buf *dmaPpBuf, DMA_LLI_Ctrl_Type *dmaLliList) {
|
||||
DMA_LLI_Ctrl_Type *pLliList = NULL;
|
||||
CPU_Interrupt_Disable(DMA_ALL_IRQn);
|
||||
|
||||
pLliList = dmaPpBuf->lliListHeader[dmaPpBuf->idleIndex];
|
||||
|
||||
if (pLliList == NULL) {
|
||||
dmaLliList->nextLLI = 0;
|
||||
dmaLliList->dmaCtrl.I = 1;
|
||||
dmaPpBuf->lliListHeader[dmaPpBuf->idleIndex] = dmaLliList;
|
||||
} else {
|
||||
/*Append to last */
|
||||
while (pLliList->nextLLI != 0) {
|
||||
pLliList = (DMA_LLI_Ctrl_Type *)pLliList->nextLLI;
|
||||
}
|
||||
|
||||
pLliList->nextLLI = (uint32_t)dmaLliList;
|
||||
pLliList->dmaCtrl.I = 0;
|
||||
dmaLliList->nextLLI = 0;
|
||||
dmaLliList->dmaCtrl.I = 1;
|
||||
}
|
||||
|
||||
if (DMA_Channel_Is_Busy(dmaPpBuf->dmaChan) == RESET) {
|
||||
/* DMA stopped: maybe stop just a few minutes ago(not enter INT due to CPU_Interrupt_Disable)
|
||||
or has already stopped before this function is called */
|
||||
if (dmaPpBuf->lliListHeader[!dmaPpBuf->idleIndex] == NULL) {
|
||||
/* DMA has already stopped before this function is called */
|
||||
DMA_LLI_PpBuf_Start_New_Transmit(dmaPpBuf);
|
||||
}
|
||||
}
|
||||
|
||||
CPU_Interrupt_Enable(DMA_ALL_IRQn);
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLi Destroy Ping-Pong Buf
|
||||
*
|
||||
* @param dmaPpBuf: DMA LLI Ping-Pong Buf
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_PpBuf_Destroy(DMA_LLI_PP_Buf *dmaPpBuf) {
|
||||
/* DMA LLI Disable */
|
||||
DMA_Channel_Disable(dmaPpBuf->dmaChan);
|
||||
|
||||
if (dmaPpBuf->lliListHeader[0] != NULL && dmaPpBuf->onTransCompleted != NULL) {
|
||||
dmaPpBuf->onTransCompleted(dmaPpBuf->lliListHeader[0]);
|
||||
}
|
||||
|
||||
dmaPpBuf->lliListHeader[0] = NULL;
|
||||
|
||||
if (dmaPpBuf->lliListHeader[1] != NULL && dmaPpBuf->onTransCompleted != NULL) {
|
||||
dmaPpBuf->onTransCompleted(dmaPpBuf->lliListHeader[1]);
|
||||
}
|
||||
|
||||
dmaPpBuf->lliListHeader[1] = NULL;
|
||||
dmaPpBuf->idleIndex = 0;
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief Mask/Unmask the DMA interrupt
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param intType: Specifies the interrupt type
|
||||
* @param intMask: Enable/Disable Specified interrupt type
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief Mask/Unmask the DMA interrupt
|
||||
*
|
||||
* @param ch: DMA channel number
|
||||
* @param intType: Specifies the interrupt type
|
||||
* @param intMask: Enable/Disable Specified interrupt type
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_IntMask(uint8_t ch, DMA_INT_Type intType, BL_Mask_Type intMask) {
|
||||
uint32_t tmpVal;
|
||||
/* Get channel register */
|
||||
@@ -636,16 +504,16 @@ void DMA_IntMask(uint8_t ch, DMA_INT_Type intType, BL_Mask_Type intMask) {
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief Install DMA interrupt callback function
|
||||
*
|
||||
* @param dmaChan: DMA Channel type
|
||||
* @param intType: DMA interrupt type
|
||||
* @param cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
/**
|
||||
* @brief Install DMA interrupt callback function
|
||||
*
|
||||
* @param dmaChan: DMA Channel type
|
||||
* @param intType: DMA interrupt type
|
||||
* @param cbFun: Pointer to interrupt callback function. The type should be void (*fn)(void)
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_Int_Callback_Install(DMA_Chan_Type dmaChan, DMA_INT_Type intType, intCallback_Type *cbFun) {
|
||||
/* Check the parameters */
|
||||
CHECK_PARAM(IS_DMA_CHAN_TYPE(dmaChan));
|
||||
@@ -654,69 +522,6 @@ void DMA_Int_Callback_Install(DMA_Chan_Type dmaChan, DMA_INT_Type intType, intCa
|
||||
dmaIntCbfArra[dmaChan][intType] = cbFun;
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI PingPong Structure Initial
|
||||
*
|
||||
* @param dmaPpStruct: DMA LLI PingPong Config Parameter
|
||||
*
|
||||
* @return start success or not
|
||||
*
|
||||
*******************************************************************************/
|
||||
BL_Err_Type DMA_LLI_PpStruct_Init(DMA_LLI_PP_Struct *dmaPpStruct) {
|
||||
// setup lliList
|
||||
dmaPpStruct->dmaCtrlRegVal.I = 1;
|
||||
dmaPpStruct->trans_index = 0;
|
||||
|
||||
if (dmaPpStruct->DMA_LLI_Cfg->dir == DMA_TRNS_M2P) {
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].srcDmaAddr = dmaPpStruct->chache_buf_addr[0];
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].destDmaAddr = dmaPpStruct->operatePeriphAddr;
|
||||
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].srcDmaAddr = dmaPpStruct->chache_buf_addr[1];
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].destDmaAddr = dmaPpStruct->operatePeriphAddr;
|
||||
} else if (dmaPpStruct->DMA_LLI_Cfg->dir == DMA_TRNS_P2M) {
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].srcDmaAddr = dmaPpStruct->operatePeriphAddr;
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].destDmaAddr = dmaPpStruct->chache_buf_addr[0];
|
||||
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].srcDmaAddr = dmaPpStruct->operatePeriphAddr;
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].destDmaAddr = dmaPpStruct->chache_buf_addr[1];
|
||||
} else {
|
||||
return ERROR;
|
||||
/*V1.0 version DMA LLI Ping-Pong structure not support P2P & M2M MODE*/
|
||||
}
|
||||
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].nextLLI = (uint32_t)&PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX];
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX].dmaCtrl = dmaPpStruct->dmaCtrlRegVal;
|
||||
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].nextLLI = (uint32_t)&PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX];
|
||||
PingPongListArra[dmaPpStruct->dmaChan][PONG_INDEX].dmaCtrl = dmaPpStruct->dmaCtrlRegVal;
|
||||
|
||||
DMA_LLI_Init(dmaPpStruct->dmaChan, dmaPpStruct->DMA_LLI_Cfg);
|
||||
|
||||
DMA_LLI_Update(dmaPpStruct->dmaChan, (uint32_t)&PingPongListArra[dmaPpStruct->dmaChan][PING_INDEX]);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI PingPong Structure Start
|
||||
*
|
||||
* @param dmaPpStruct: None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_PpStruct_Start(DMA_LLI_PP_Struct *dmaPpStruct) { DMA_Channel_Enable(dmaPpStruct->dmaChan); }
|
||||
|
||||
/****************************************************************************/ /**
|
||||
* @brief DMA LLI PingPong Structure Stop
|
||||
*
|
||||
* @param dmaPpStruct: None
|
||||
*
|
||||
* @return None
|
||||
*
|
||||
*******************************************************************************/
|
||||
void DMA_LLI_PpStruct_Stop(DMA_LLI_PP_Struct *dmaPpStruct) { DMA_Channel_Disable(dmaPpStruct->dmaChan); }
|
||||
|
||||
/*@} end of group DMA_Public_Functions */
|
||||
|
||||
/*@} end of group DMA */
|
||||
|
@@ -205,11 +205,67 @@ void I2C_Enable(I2C_ID_Type i2cNo) {
|
||||
/* Check the parameters */
|
||||
CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));
|
||||
|
||||
// Set the M_EN bit
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_CONFIG);
|
||||
tmpVal = BL_SET_REG_BIT(tmpVal, I2C_CR_I2C_M_EN);
|
||||
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
||||
}
|
||||
|
||||
uint8_t I2C_GetTXFIFOAvailable() {
|
||||
|
||||
volatile uint32_t tmpVal;
|
||||
uint32_t I2Cx = I2C_BASE;
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);
|
||||
return tmpVal & 0b11; // Lowest two bits
|
||||
}
|
||||
|
||||
uint8_t I2C_GetRXFIFOAvailable() {
|
||||
|
||||
volatile uint32_t tmpVal;
|
||||
uint32_t I2Cx = I2C_BASE;
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);
|
||||
return (tmpVal >> 8) & 0b11; // Lowest two bits of byte 2
|
||||
}
|
||||
|
||||
void I2C_DMATxEnable() {
|
||||
uint32_t tmpVal;
|
||||
uint32_t I2Cx = I2C_BASE;
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_0);
|
||||
tmpVal = BL_SET_REG_BIT(tmpVal, I2C_DMA_TX_EN);
|
||||
tmpVal = BL_SET_REG_BIT(tmpVal, I2C_TX_FIFO_CLR);
|
||||
tmpVal = BL_SET_REG_BIT(tmpVal, I2C_RX_FIFO_CLR);
|
||||
|
||||
// tmpVal = BL_SET_REG_BIT(tmpVal, I2C_DMA_RX_EN);
|
||||
|
||||
BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_0, tmpVal);
|
||||
|
||||
// Ensure fifo setpoint is as we expect
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);
|
||||
tmpVal &= I2C_TX_FIFO_CNT_UMSK;
|
||||
tmpVal |= 1;
|
||||
|
||||
BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_1, tmpVal);
|
||||
}
|
||||
void I2C_DMATxDisable() {
|
||||
uint32_t tmpVal;
|
||||
uint32_t I2Cx = I2C_BASE;
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_0);
|
||||
tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_DMA_TX_EN);
|
||||
// tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_DMA_RX_EN);
|
||||
BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_0, tmpVal);
|
||||
|
||||
tmpVal = BL_RD_REG(I2Cx, I2C_FIFO_CONFIG_1);
|
||||
tmpVal &= I2C_TX_FIFO_CNT_UMSK;
|
||||
tmpVal |= 1;
|
||||
|
||||
BL_WR_REG(I2Cx, I2C_FIFO_CONFIG_1, tmpVal);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C disable
|
||||
*
|
||||
@@ -297,15 +353,15 @@ void I2C_Init(I2C_ID_Type i2cNo, I2C_Direction_Type direct, I2C_Transfer_Cfg *cf
|
||||
tmpVal = BL_CLR_REG_BIT(tmpVal, I2C_CR_I2C_SUB_ADDR_EN);
|
||||
}
|
||||
|
||||
// Packet length <=256 bytes per transaction
|
||||
|
||||
tmpVal = BL_SET_REG_BITS_VAL(tmpVal, I2C_CR_I2C_PKT_LEN, cfg->dataSize - 1);
|
||||
BL_WR_REG(I2Cx, I2C_CONFIG, tmpVal);
|
||||
|
||||
/* Set sub address */
|
||||
BL_WR_REG(I2Cx, I2C_SUB_ADDR, cfg->subAddr);
|
||||
|
||||
#ifndef BFLB_USE_HAL_DRIVER
|
||||
Interrupt_Handler_Register(I2C_IRQn, I2C_IRQHandler);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -491,6 +547,8 @@ BL_Err_Type I2C_MasterSendBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg) {
|
||||
uint32_t timeOut = 0;
|
||||
uint32_t temp = 0;
|
||||
uint32_t I2Cx = I2C_BASE;
|
||||
I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK); // This function needs to be able to use the irq status bits
|
||||
I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK); // This function needs to be able to use the irq status bits
|
||||
|
||||
/* Check the parameters */
|
||||
CHECK_PARAM(IS_I2C_ID_TYPE(i2cNo));
|
||||
@@ -571,6 +629,9 @@ BL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg)
|
||||
I2C_Disable(i2cNo);
|
||||
I2C_Init(i2cNo, I2C_READ, cfg);
|
||||
I2C_Enable(i2cNo);
|
||||
I2C_IntMask(I2C0_ID, I2C_TRANS_END_INT, UNMASK); // This function needs to be able to use the irq status bits
|
||||
I2C_IntMask(I2C0_ID, I2C_NACK_RECV_INT, UNMASK); // This function needs to be able to use the irq status bits
|
||||
|
||||
timeOut = I2C_FIFO_STATUS_TIMEOUT;
|
||||
if (cfg->dataSize == 0 && cfg->subAddrSize == 0) {
|
||||
while (BL_RD_REG(I2C_BASE, I2C_BUS_BUSY)) {
|
||||
@@ -589,6 +650,7 @@ BL_Err_Type I2C_MasterReceiveBlocking(I2C_ID_Type i2cNo, I2C_Transfer_Cfg *cfg)
|
||||
return TIMEOUT;
|
||||
}
|
||||
}
|
||||
|
||||
/* Read I2C data */
|
||||
while (cfg->dataSize - i >= 4) {
|
||||
timeOut = I2C_FIFO_STATUS_TIMEOUT;
|
||||
|
@@ -1404,8 +1404,7 @@ BL_Sts_Type ATTR_TCM_SECTION SF_Ctrl_GetBusyState(void) {
|
||||
*
|
||||
*******************************************************************************/
|
||||
#ifndef BFLB_USE_HAL_DRIVER
|
||||
void SF_Ctrl_IRQHandler(void) { /* TODO: Not implemented */
|
||||
}
|
||||
void SF_Ctrl_IRQHandler(void) { /* TODO: Not implemented */ }
|
||||
#endif
|
||||
|
||||
/*@} end of group SF_CTRL_Public_Functions */
|
||||
|
@@ -90,4 +90,6 @@
|
||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_36 BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70024, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))
|
||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_37 BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70025, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))
|
||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_38 BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70026, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))
|
||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_53 BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70035, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))
|
||||
#define BT_UUID_CHAR_BLE_SETTINGS_VALUE_54 BT_UUID_DECLARE_128(BT_UUID_128_ENCODE(0xf6d70036, 0x5a10, 0x4eba, 0xAA55, 0x33e27f9bc533))
|
||||
#endif
|
||||
|
@@ -133,6 +133,8 @@ int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_att
|
||||
memcpy(buf, &temp, sizeof(temp));
|
||||
return sizeof(temp);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
MSG((char *)"Unhandled attr read %d | %d\n", (uint32_t)attr->uuid, uuid_value);
|
||||
return 0;
|
||||
@@ -150,7 +152,7 @@ int ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt
|
||||
// Bulk data
|
||||
{
|
||||
uint32_t bulkData[] = {
|
||||
TipThermoModel::getTipInC(), // 0 - Current temp
|
||||
(uint32_t)TipThermoModel::getTipInC(), // 0 - Current temp
|
||||
getSettingValue(SettingsOptions::SolderingTemp), // 1 - Setpoint
|
||||
getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0), // 2 - Input voltage
|
||||
getHandleTemperature(0), // 3 - Handle X10 Temp in C
|
||||
@@ -159,9 +161,9 @@ int ble_char_read_bulk_value_callback(struct bt_conn *conn, const struct bt_gatt
|
||||
getTipResistanceX10(), // 6 - Tip resistance
|
||||
xTaskGetTickCount() / TICKS_100MS, // 7 - uptime in deciseconds
|
||||
lastMovementTime / TICKS_100MS, // 8 - last movement time (deciseconds)
|
||||
TipThermoModel::getTipMaxInC(), // 9 - max temp
|
||||
(uint32_t)TipThermoModel::getTipMaxInC(), // 9 - max temp
|
||||
TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true), // 10 - Raw tip in μV
|
||||
abs(getRawHallEffect()), // 11 - hall sensor
|
||||
(uint32_t)abs(getRawHallEffect()), // 11 - hall sensor
|
||||
(uint32_t)currentOperatingMode, // 12 - Operating mode
|
||||
x10WattHistory.average(), // 13 - Estimated Wattage *10
|
||||
};
|
||||
|
@@ -246,6 +246,12 @@ static struct bt_gatt_attr ble_attrs_declaration[] = {
|
||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_38, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_53, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_54, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||
|
||||
/* Save & reset */
|
||||
BT_GATT_CHARACTERISTIC(BT_UUID_CHAR_BLE_SETTINGS_VALUE_SAVE, BT_GATT_CHRC_READ | BT_GATT_CHRC_WRITE | BT_GATT_CHRC_WRITE_WITHOUT_RESP, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE,
|
||||
ble_char_read_setting_value_callback, ble_char_write_setting_value_callback, NULL),
|
||||
|
||||
|
@@ -10,7 +10,7 @@ NOTES
|
||||
#ifndef _BLE_TP_SVC_H_
|
||||
#define _BLE_TP_SVC_H_
|
||||
|
||||
#include "types.h"
|
||||
#include <zephyr/types.h>
|
||||
#include "ble_config.h"
|
||||
|
||||
// read value handle offset 2
|
||||
|
@@ -154,13 +154,13 @@
|
||||
#define POW_EPR 1
|
||||
#define ENABLE_QC2 1
|
||||
#define MAG_SLEEP_SUPPORT 1
|
||||
#define TIP_TYPE_SUPPORT 1 // Support for tips of different types, i.e. resistance
|
||||
#define AUTO_TIP_SELECTION 1 // Can auto-select the tip
|
||||
#define TIPTYPE_T12 1 // Can manually pick a T12 tip
|
||||
#define DEVICE_HAS_VALIDATION_SUPPORT
|
||||
#define OLED_96x16 1
|
||||
#define TEMP_NTC
|
||||
#define ACCEL_BMA
|
||||
#define CUSTOM_MAX_TEMP_C 1 // Uses custom max temp lookup
|
||||
#define ACCEL_SC7
|
||||
#define HALL_SENSOR
|
||||
#define HALL_SI7210
|
||||
|
@@ -20,5 +20,6 @@ void preRToSInit() {
|
||||
gpio_write(OLED_RESET_Pin, 0);
|
||||
delay_ms(10);
|
||||
gpio_write(OLED_RESET_Pin, 1);
|
||||
BSPInit();
|
||||
FRToSI2C::FRToSInit();
|
||||
}
|
||||
|
@@ -101,16 +101,16 @@ extern uint32_t SystemCoreClock;
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#define configCPU_CLOCK_HZ (SystemCoreClock)
|
||||
#define configTICK_RATE_HZ (1000)
|
||||
#define configMAX_PRIORITIES (6)
|
||||
#define configMAX_PRIORITIES (7)
|
||||
#define configMINIMAL_STACK_SIZE ((uint16_t)256)
|
||||
#define configTOTAL_HEAP_SIZE ((size_t)1024 * 14) /*Currently use about 9000*/
|
||||
#define configMAX_TASK_NAME_LEN (32)
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 8
|
||||
#define configUSE_TIMERS 0
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 2 /*Bump this to 2 during development and bug hunting*/
|
||||
#define configTICK_TYPE_WIDTH_IN_BITS TICK_TYPE_WIDTH_32_BITS
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
@@ -156,11 +156,11 @@ extern uint32_t SystemCoreClock;
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */
|
||||
/* USER CODE BEGIN 1 */
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
#define configASSERT(x) \
|
||||
if ((x) == 0) { \
|
||||
taskDISABLE_INTERRUPTS(); \
|
||||
for (;;) \
|
||||
; \
|
||||
}
|
||||
/* USER CODE END 1 */
|
||||
|
||||
|
@@ -319,6 +319,9 @@ static void MX_TIM2_Init(void) {
|
||||
TIM_ClockConfigTypeDef sClockSourceConfig;
|
||||
TIM_MasterConfigTypeDef sMasterConfig;
|
||||
TIM_OC_InitTypeDef sConfigOC;
|
||||
memset(&sConfigOC, 0, sizeof(sConfigOC));
|
||||
memset(&sClockSourceConfig, 0, sizeof(sClockSourceConfig));
|
||||
memset(&sMasterConfig, 0, sizeof(sMasterConfig));
|
||||
|
||||
// Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC
|
||||
// in the PWM off time.
|
||||
|
@@ -5,7 +5,7 @@
|
||||
* Author: Ralim
|
||||
*/
|
||||
#include "TipThermoModel.h"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
#ifdef TEMP_uV_LOOKUP_PT1000
|
||||
|
@@ -198,7 +198,7 @@ HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma) {
|
||||
tmp = hdma->Instance->CCR;
|
||||
|
||||
/* Clear PL, MSIZE, PSIZE, MINC, PINC, CIRC and DIR bits */
|
||||
tmp &= ((uint32_t) ~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
tmp &= ((uint32_t)~(DMA_CCR_PL | DMA_CCR_MSIZE | DMA_CCR_PSIZE | DMA_CCR_MINC | DMA_CCR_PINC | DMA_CCR_CIRC | DMA_CCR_DIR));
|
||||
|
||||
/* Prepare the DMA Channel configuration */
|
||||
tmp |= hdma->Init.Direction | hdma->Init.PeriphInc | hdma->Init.MemInc | hdma->Init.PeriphDataAlignment | hdma->Init.MemDataAlignment | hdma->Init.Mode | hdma->Init.Priority;
|
||||
|
@@ -22,8 +22,8 @@ bool BMA223::detect() {
|
||||
}
|
||||
|
||||
static const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
{ BMA223_PMU_RANGE, 0b00000011, 0}, // 2G range
|
||||
{ BMA223_PMU_BW, 0b00001101, 0}, // 250Hz filter
|
||||
{ BMA223_PMU_LPW, 0b00000000, 0}, // Full power
|
||||
@@ -33,7 +33,7 @@ static const ACCEL_I2C_CLASS::I2C_REG i2c_registers[] = {
|
||||
{ BMA223_INT_EN_0, 0b01000000, 0}, // Enable orientation
|
||||
{ BMA223_INT_A, 0b00100111, 0}, // Setup orientation detection
|
||||
|
||||
//
|
||||
//
|
||||
};
|
||||
bool BMA223::initalize() {
|
||||
// Setup acceleration readings
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#include "HUB238.hpp"
|
||||
#include "I2CBB2.hpp"
|
||||
#include "Utils.h"
|
||||
#include "Utils.hpp"
|
||||
#include "configuration.h"
|
||||
|
||||
#if POW_PD_EXT == 1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user