1
0
forked from me/IronOS

Merge branch 'master' into master

This commit is contained in:
Ben V. Brown
2022-02-02 22:49:56 +11:00
committed by GitHub
6 changed files with 58 additions and 28 deletions

Binary file not shown.

View File

@@ -1,8 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# coding=utf-8 # coding=utf-8
from __future__ import division from __future__ import division
import os import os, sys, struct, zlib
import sys
try: try:
@@ -13,7 +12,7 @@ except ImportError as error:
"management tool." "management tool."
.format(error, sys.argv[0])) .format(error, sys.argv[0]))
VERSION_STRING = '0.02' VERSION_STRING = '0.03'
LCD_WIDTH = 96 LCD_WIDTH = 96
LCD_HEIGHT = 16 LCD_HEIGHT = 16
@@ -26,12 +25,23 @@ INTELHEX_EXTENDED_LINEAR_ADDRESS_RECORD = 0x04
INTELHEX_BYTES_PER_LINE = 16 INTELHEX_BYTES_PER_LINE = 16
INTELHEX_MINIMUM_SIZE = 4096 INTELHEX_MINIMUM_SIZE = 4096
DFU_PINECIL_ALT = 0
DFU_PINECIL_VENDOR = 0x28e9
DFU_PINECIL_PRODUCT = 0x0189
DFU_LOGO_ADDRESS = 0x0801F800
DFU_TARGET_NAME = b"Pinecil"
DFU_PREFIX_SIZE = 11
DFU_SUFFIX_SIZE = 16
def split16(word): def split16(word):
"""return high and low byte of 16-bit word value as tuple""" """return high and low byte of 16-bit word value as tuple"""
return (word >> 8) & 0xff, word & 0xff return (word >> 8) & 0xff, word & 0xff
def compute_crc(data):
return 0xFFFFFFFF & -zlib.crc32(data) - 1
def intel_hex_line(record_type, offset, data): def intel_hex_line(record_type, offset, data):
"""generate a line of data in Intel hex format""" """generate a line of data in Intel hex format"""
# length, address offset, record type # length, address offset, record type
@@ -82,6 +92,32 @@ def intel_hex(file, bytes_, start_address=0x0):
write(intel_hex_line(INTELHEX_END_OF_FILE_RECORD, 0, ())) write(intel_hex_line(INTELHEX_END_OF_FILE_RECORD, 0, ()))
def build_dfu(file, bytes_):
data = b""
for byte in bytes_:
data += byte.to_bytes(1, byteorder="big")
data = (
struct.pack("<2I", DFU_LOGO_ADDRESS, len(data)) + data
)
data = (
struct.pack(
"<6sBI255s2I", b"Target", DFU_PINECIL_ALT, 1, DFU_TARGET_NAME, len(data), 1
)
+ data
)
data = (
struct.pack(
"<5sBIB", b"DfuSe", 1, DFU_PREFIX_SIZE + len(data) + DFU_SUFFIX_SIZE, 1
)
+ data
)
data += struct.pack("<4H3sB", 0, DFU_PINECIL_PRODUCT, DFU_PINECIL_VENDOR, 0x011A, b"UFD", DFU_SUFFIX_SIZE)
crc = compute_crc(data)
data += struct.pack("<I", crc)
file.write(data)
def img2hex(input_filename, def img2hex(input_filename,
output_file, output_file,
preview_filename=None, preview_filename=None,
@@ -160,8 +196,7 @@ def img2hex(input_filename,
data[4 + ndx + (1 if ndx % 2 == 0 else -1)] = byte data[4 + ndx + (1 if ndx % 2 == 0 else -1)] = byte
if binary: if binary:
for byte in data: build_dfu(output_file, data)
output_file.write(byte.to_bytes(1, byteorder="big"))
else: else:
intel_hex(output_file, data, 0x0800F800) intel_hex(output_file, data, 0x0800F800)
@@ -234,7 +269,7 @@ if __name__ == "__main__":
sys.exit(1) sys.exit(1)
try: try:
if args.output_filename[-4:] == ".bin": if args.output_filename[-4:] == ".dfu":
with open(args.output_filename, 'wb') as output: with open(args.output_filename, 'wb') as output:
img2hex(args.input_filename, img2hex(args.input_filename,
output, output,

View File

@@ -28,10 +28,10 @@ You perform this the same way as if you were flashing a new firmware, and all of
### Pinecil ### Pinecil
For the Pinecil, we require to flash the logo using dfu-util instead, which will only take `.bin` files rather than `.hex`. For the Pinecil, we require to flash the logo using dfu-util instead.
To flash the logo, use the following steps: To flash the logo, use the following steps:
- `python3 img2ts100.py input.png logo.bin` - `python3 img2ts100.py input.png logo.dfu`
- `dfu-util -d 28e9:0189 -a 0 -D logo.bin -s 0x0801F800` - `dfu-util -D logo.dfu`
The converter will create a binary file if the .bin extension is used. Use dfu-util to flash it in the right location. The converter will create a DFU instead of a HEX file if the .dfu extension is used.

View File

@@ -2,44 +2,39 @@
"languageCode": "RU", "languageCode": "RU",
"languageLocalName": "Русский", "languageLocalName": "Русский",
"fonts": ["ascii_basic", "latin_extended", "cyrillic"], "fonts": ["ascii_basic", "latin_extended", "cyrillic"],
"tempUnitFahrenheit": false,
"messages": { "messages": {
"SettingsCalibrationDone": "Калибровка завершена!",
"SettingsCalibrationWarning": "Прежде чем продолжить, пожалуйста, убедитесь, что жало имеет комнатную температуру!", "SettingsCalibrationWarning": "Прежде чем продолжить, пожалуйста, убедитесь, что жало имеет комнатную температуру!",
"SettingsResetWarning": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?", "SettingsResetWarning": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?",
"UVLOWarningString": "НАПРЯЖ--", "UVLOWarningString": "НАПРЯЖ--",
"UndervoltageString": "Низкое напряжение", "UndervoltageString": "Низ. напряжение",
"InputVoltageString": "Питание В: ", "InputVoltageString": "Питание В: ",
"WarningTipTempString": "Темп. жала: ",
"BadTipString": "ЖАЛО--",
"SleepingSimpleString": "Zzzz", "SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Ожидание...", "SleepingAdvancedString": "Ожидание...",
"WarningSimpleString": "ГОРЯЧО!",
"WarningAdvancedString": "!!! ГОРЯЧЕЕ !!!\n!!! ЖАЛО !!!",
"SleepingTipAdvancedString": "Жало:", "SleepingTipAdvancedString": "Жало:",
"IdleTipString": "Жало:", "IdleTipString": "Жало:",
"IdleSetString": " ->", "IdleSetString": " ->",
"TipDisconnectedString": "ЖАЛО ОТСОЕДИНЕНО", "TipDisconnectedString": "ЖАЛО ОТСОЕДИНЕНО",
"SolderingAdvancedPowerPrompt": "Питание: ", "SolderingAdvancedPowerPrompt": "Питание: ",
"OffString": "Выкл.", "OffString": "Вык"
"YourGainMessage": "Прирост:"
}, },
"messagesWarn": { "messagesWarn": {
"ResetOKMessage": "Сброс OK", "ResetOKMessage": "Сброс OK",
"SettingsResetMessage": ["Настройки", "сброшены!"], "SettingsResetMessage": ["Настройки", "сброшены!"],
"NoAccelerometerMessage": ["Не определен", "акселерометр!"], "NoAccelerometerMessage": ["Не определен", "акселерометр!"],
"NoPowerDeliveryMessage": ["No USB-PD IC", "detected!"], "NoPowerDeliveryMessage": ["USB-PD питание", "не обнаружено"],
"LockingKeysString": "LOCKED", "LockingKeysString": "ЗАБЛОК",
"UnlockingKeysString": "UNLOCKED", "UnlockingKeysString": "РАЗБЛОК",
"WarningKeysLockedString": "!LOCKED!", "WarningKeysLockedString": "!ЗАБЛОК!",
"WarningThermalRunaway": ["Thermal", "Runaway"] "WarningThermalRunaway": ["Thermal", "Runaway"]
}, },
"characters": { "characters": {
"SettingRightChar": "П", "SettingRightChar": "П",
"SettingLeftChar": "Л", "SettingLeftChar": "Л",
"SettingAutoChar": "А", "SettingAutoChar": "А",
"SettingOffChar": "O", "SettingOffChar": "О",
"SettingSlowChar": "М", "SettingSlowChar": "М",
"SettingMediumChar": "M", "SettingMediumChar": "С",
"SettingFastChar": "Б", "SettingFastChar": "Б",
"SettingStartNoneChar": "В", "SettingStartNoneChar": "В",
"SettingStartSolderingChar": "П", "SettingStartSolderingChar": "П",
@@ -131,7 +126,7 @@
}, },
"VoltageCalibration": { "VoltageCalibration": {
"text2": ["Калибровка", "напряжения"], "text2": ["Калибровка", "напряжения"],
"desc": "Калибровка входного напряжения (длинное нажатие для выхода)" "desc": "Калибровка входного напряжения (долгое нажатие для выхода)"
}, },
"AdvancedSoldering": { "AdvancedSoldering": {
"text2": ["Подробный", "экран пайки"], "text2": ["Подробный", "экран пайки"],
@@ -170,7 +165,7 @@
"desc": "Сила импульса удерживающего от сна повербанк или другой источник питания" "desc": "Сила импульса удерживающего от сна повербанк или другой источник питания"
}, },
"HallEffSensitivity": { "HallEffSensitivity": {
"text2": ["Эффект Холла", "чувствительность"], "text2": ["Датчик", "Холла"],
"desc": "Уровень чувствительности датчика холла в режиме сна (О=Отключено | Н=Низкий | С=Средний | В=Высокий)" "desc": "Уровень чувствительности датчика холла в режиме сна (О=Отключено | Н=Низкий | С=Средний | В=Высокий)"
}, },
"LockingMode": { "LockingMode": {
@@ -199,7 +194,7 @@
}, },
"LanguageSwitch": { "LanguageSwitch": {
"text2": ["Язык:", " RU Русский"], "text2": ["Язык:", " RU Русский"],
"desc": "" "desc": "Язык прошивки"
}, },
"Brightness": { "Brightness": {
"text2": ["Яркость", "экрана"], "text2": ["Яркость", "экрана"],