1
0
forked from me/IronOS

Merge branch 'master' into ci-newer-ubuntu

This commit is contained in:
Ben V. Brown
2021-03-14 09:11:34 +11:00
committed by GitHub
47 changed files with 988 additions and 644 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -10,8 +10,6 @@ def getFontMap():
"&": "0x00,0x00,0x00,0xB8,0xFC,0xC6,0xE2,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x31,0x21,0x37,0x1E,0x1C,0x36,0x22,0x00,", "&": "0x00,0x00,0x00,0xB8,0xFC,0xC6,0xE2,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x31,0x21,0x37,0x1E,0x1C,0x36,0x22,0x00,",
"'": "0x00,0x00,0x00,0x00,0x27,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "'": "0x00,0x00,0x00,0x00,0x27,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"(": "0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00,", "(": "0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00,",
"(": "0x00,0x00,0x00,0xF0,0xFC,0xFE,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x38,0x20,0x20,0x00,0x00,0x00,",
")": "0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00,",
")": "0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00,", ")": "0x00,0x00,0x00,0x01,0x01,0x07,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x38,0x1F,0x0F,0x03,0x00,0x00,0x00,",
"*": "0x00,0x00,0x98,0xB8,0xE0,0xF8,0xF8,0xE0,0xB8,0x98,0x00,0x00,0x00,0x00,0x0C,0x0E,0x03,0x0F,0x0F,0x03,0x0E,0x0C,0x00,0x00,", "*": "0x00,0x00,0x98,0xB8,0xE0,0xF8,0xF8,0xE0,0xB8,0x98,0x00,0x00,0x00,0x00,0x0C,0x0E,0x03,0x0F,0x0F,0x03,0x0E,0x0C,0x00,0x00,",
"+": "0x00,0x00,0x80,0x80,0x80,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x0F,0x01,0x01,0x01,0x00,0x00,", "+": "0x00,0x00,0x80,0x80,0x80,0xF0,0xF0,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x0F,0x01,0x01,0x01,0x00,0x00,",
@@ -23,7 +21,6 @@ def getFontMap():
"1": "0x00,0x00,0x00,0x0C,0x0C,0x0E,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x3F,0x3F,0x30,0x30,0x30,0x00,", "1": "0x00,0x00,0x00,0x0C,0x0C,0x0E,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x3F,0x3F,0x30,0x30,0x30,0x00,",
"2": "0x00,0x1C,0x1E,0x07,0x03,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x30,", "2": "0x00,0x1C,0x1E,0x07,0x03,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x30,0x38,0x3C,0x3E,0x37,0x33,0x31,0x30,0x30,0x30,0x30,",
"3": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,", "3": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,",
"З": "0x00,0x0C,0x0E,0x07,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,",
"4": "0x00,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x03,0x03,", "4": "0x00,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x3F,0x3F,0x03,0x03,",
"5": "0x00,0x3F,0x7F,0x63,0x63,0x63,0x63,0x63,0x63,0xE3,0xC3,0x83,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,", "5": "0x00,0x3F,0x7F,0x63,0x63,0x63,0x63,0x63,0x63,0xE3,0xC3,0x83,0x00,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x38,0x1F,0x0F,",
"6": "0x00,0xC0,0xF0,0xF8,0xDC,0xCE,0xC7,0xC3,0xC3,0xC3,0x80,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,", "6": "0x00,0xC0,0xF0,0xF8,0xDC,0xCE,0xC7,0xC3,0xC3,0xC3,0x80,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,",
@@ -31,7 +28,6 @@ def getFontMap():
"8": "0x00,0x00,0xBC,0xFE,0xE7,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,", "8": "0x00,0x00,0xBC,0xFE,0xE7,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x0F,0x1F,0x39,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,",
"9": "0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xFC,0x00,0x00,0x00,0x30,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x00,", "9": "0x00,0x3C,0x7E,0xE7,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xFC,0x00,0x00,0x00,0x30,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x00,",
":": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,", ":": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,",
":": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,",
";": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,", ";": "0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,",
"<": "0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,0x00,", "<": "0x00,0x00,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,0x00,",
"=": "0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,", "=": "0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,",
@@ -39,12 +35,10 @@ def getFontMap():
"?": "0x00,0x1C,0x1E,0x07,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,0x00,0x00,", "?": "0x00,0x1C,0x1E,0x07,0x03,0x83,0xC3,0xE3,0x77,0x3E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,0x00,0x00,0x00,0x00,",
"@": "0x00,0xF8,0xFE,0x07,0xF3,0xFB,0x1B,0xFB,0xFB,0x07,0xFE,0xF8,0x00,0x0F,0x1F,0x18,0x33,0x37,0x36,0x37,0x37,0x36,0x03,0x01,", "@": "0x00,0xF8,0xFE,0x07,0xF3,0xFB,0x1B,0xFB,0xFB,0x07,0xFE,0xF8,0x00,0x0F,0x1F,0x18,0x33,0x37,0x36,0x37,0x37,0x36,0x03,0x01,",
"A": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,", "A": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,",
"А": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,",
"B": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", "B": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,",
"C": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,", "C": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0x03,0x03,0x07,0x0E,0x0C,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x38,0x1C,0x0C,0x00,",
"D": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,", "D": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x07,0x0E,0xFC,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x38,0x1C,0x0F,0x03,0x00,",
"E": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", "E": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,",
"E": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,",
"F": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "F": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"G": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,", "G": "0x00,0xF0,0xFC,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC7,0xC6,0x00,0x00,0x03,0x0F,0x1C,0x38,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,",
"H": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,", "H": "0x00,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,",
@@ -67,10 +61,8 @@ def getFontMap():
"X": "0x00,0x03,0x0F,0x1C,0x30,0xE0,0xE0,0x30,0x1C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0E,0x03,0x01,0x01,0x03,0x0E,0x3C,0x30,0x00,", "X": "0x00,0x03,0x0F,0x1C,0x30,0xE0,0xE0,0x30,0x1C,0x0F,0x03,0x00,0x00,0x30,0x3C,0x0E,0x03,0x01,0x01,0x03,0x0E,0x3C,0x30,0x00,",
"Y": "0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", "Y": "0x00,0x03,0x0F,0x3C,0xF0,0xC0,0xC0,0xF0,0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,",
"Z": "0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00,", "Z": "0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00,",
"Z": "0x00,0x03,0x03,0x03,0x03,0xC3,0xE3,0x33,0x1F,0x0F,0x03,0x00,0x00,0x30,0x3C,0x3E,0x33,0x31,0x30,0x30,0x30,0x30,0x30,0x00,",
"[": "0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00,", "[": "0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00,0x00,0x00,",
"\\": "0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,", "\\": "0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,",
"\\": "0x00,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x18,",
"]": "0x00,0x00,0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,", "]": "0x00,0x00,0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,",
"^": "0x00,0x60,0x70,0x38,0x1C,0x0E,0x07,0x0E,0x1C,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "^": "0x00,0x60,0x70,0x38,0x1C,0x0E,0x07,0x0E,0x1C,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"_": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,", "_": "0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,",
@@ -101,7 +93,6 @@ def getFontMap():
"x": "0x00,0x60,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x0F,0x1D,0x38,0x30,0x00,0x00,", "x": "0x00,0x60,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0x60,0x00,0x00,0x00,0x30,0x38,0x1D,0x0F,0x07,0x0F,0x1D,0x38,0x30,0x00,0x00,",
"y": "0x00,0x00,0x60,0xE0,0x80,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,", "y": "0x00,0x00,0x60,0xE0,0x80,0x00,0x00,0x80,0xE0,0x60,0x00,0x00,0x00,0x00,0x00,0x81,0xE7,0x7E,0x1E,0x07,0x01,0x00,0x00,0x00,",
"z": "0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,", "z": "0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,",
"z": "0x00,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0x60,0x20,0x00,0x00,0x00,0x30,0x38,0x3C,0x36,0x33,0x31,0x30,0x30,0x30,0x00,0x00,",
"{": "0x00,0x00,0x80,0xC0,0xFC,0x7E,0x07,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x3F,0x70,0x60,0x60,0x60,0x00,0x00,", "{": "0x00,0x00,0x80,0xC0,0xFC,0x7E,0x07,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x3F,0x70,0x60,0x60,0x60,0x00,0x00,",
"|": "0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,", "|": "0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,",
"}": "0x00,0x00,0x03,0x03,0x03,0x07,0x7E,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x70,0x3F,0x1F,0x01,0x00,0x00,0x00,", "}": "0x00,0x00,0x03,0x03,0x03,0x07,0x7E,0xFC,0xC0,0x80,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x70,0x3F,0x1F,0x01,0x00,0x00,0x00,",
@@ -209,15 +200,15 @@ def getFontMap():
"Ѝ": "0x00,0xFF,0xFF,0x00,0x01,0xC3,0xF2,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", "Ѝ": "0x00,0xFF,0xFF,0x00,0x01,0xC3,0xF2,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,",
"Ў": "0x00,0x07,0x1F,0x7C,0xF1,0xC1,0xC1,0xF1,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,", "Ў": "0x00,0x07,0x1F,0x7C,0xF1,0xC1,0xC1,0xF1,0x7C,0x1F,0x07,0x00,0x00,0x00,0x30,0x30,0x3C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,",
"Џ": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x78,0x78,0x18,0x18,0x1F,0x1F,0x00,", "Џ": "0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x1F,0x1F,0x18,0x18,0x78,0x78,0x18,0x18,0x1F,0x1F,0x00,",
# "A":"0x00,0x80,0xE0,0x78,0x1E,0x07,0x07,0x1E,0x78,0xE0,0x80,0x00,0x00,0x3F,0x3F,0x06,0x06,0x06,0x06,0x06,0x06,0x3F,0x3F,0x00," , "А": "0x00,0x00,0x00,0xE0,0xFC,0x1F,0x1F,0xFC,0xE0,0x00,0x00,0x00,0x00,0x38,0x3F,0x07,0x06,0x06,0x06,0x06,0x07,0x3F,0x38,0x00,",
"Б": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", "Б": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,",
"В": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,", "В": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xE7,0xFE,0xBC,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0F,0x00,",
"Г": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "Г": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"Г": "0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "Ґ": "0x00,0xFC,0xFC,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0F,0x0F,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"Д": "0x00,0x00,0xF8,0xFE,0x0F,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x70,0x7F,0x1F,0x18,0x18,0x18,0x18,0x1F,0x7F,0x70,0x00,", "Д": "0x00,0x00,0xF8,0xFE,0x0F,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x70,0x7F,0x1F,0x18,0x18,0x18,0x18,0x1F,0x7F,0x70,0x00,",
"Е": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,", "Е": "0x00,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,",
"Ж": "0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00,", "Ж": "0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00,",
"Ж": "0x00,0x03,0x0F,0xFC,0xE0,0xFF,0xFF,0xE0,0xFC,0x0F,0x03,0x00,0x00,0x38,0x3F,0x07,0x00,0x3F,0x3F,0x00,0x07,0x3F,0x38,0x00,", "З": "0x0C,0x0E,0x07,0x03,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0x7E,0x3C,0x0C,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x39,0x1F,0x0E,",
"И": "0x00,0xFF,0xFF,0x00,0x00,0xC0,0xF0,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", "И": "0x00,0xFF,0xFF,0x00,0x00,0xC0,0xF0,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,",
"Й": "0x00,0xFF,0xFF,0x00,0x02,0xC3,0xF1,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,", "Й": "0x00,0xFF,0xFF,0x00,0x02,0xC3,0xF1,0x38,0x0E,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x1C,0x07,0x03,0x00,0x00,0x00,0x3F,0x3F,0x00,",
"К": "0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,", "К": "0x00,0xFF,0xFF,0xC0,0xE0,0xF0,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00,0x3F,0x3F,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x30,0x00,",
@@ -246,11 +237,11 @@ def getFontMap():
"б": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,", "б": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,",
"в": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x00,0x3F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,", "в": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x00,0x3F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x1E,0x00,",
"г": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,", "г": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"ґ": "0x00,0xF0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x3C,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,",
"д": "0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x60,0x7F,0x3F,0x30,0x30,0x30,0x30,0x3F,0x7F,0x60,0x00,", "д": "0x00,0x00,0xC0,0xE0,0x70,0x30,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x60,0x7F,0x3F,0x30,0x30,0x30,0x30,0x3F,0x7F,0x60,0x00,",
"е": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,", "е": "0x00,0xE0,0xF0,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x1F,0x3F,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,",
"ж": "0x00,0x30,0xF0,0xC0,0x00,0xF0,0xF0,0x00,0xC0,0xF0,0x30,0x00,0x00,0x30,0x3C,0x0F,0x03,0x3F,0x3F,0x03,0x0F,0x3C,0x30,0x00,", "ж": "0x00,0x30,0xF0,0xC0,0x00,0xF0,0xF0,0x00,0xC0,0xF0,0x30,0x00,0x00,0x30,0x3C,0x0F,0x03,0x3F,0x3F,0x03,0x0F,0x3C,0x30,0x00,",
"з": "0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00,", "з": "0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00,",
"З": "0x00,0x60,0x70,0x30,0x30,0x30,0x30,0x30,0x30,0xF0,0xE0,0x00,0x00,0x18,0x38,0x30,0x33,0x33,0x33,0x33,0x33,0x3F,0x1D,0x00,",
"и": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,", "и": "0x00,0xF0,0xF0,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,",
"й": "0x00,0xF0,0xF0,0x00,0x04,0x08,0x88,0xC4,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,", "й": "0x00,0xF0,0xF0,0x00,0x04,0x08,0x88,0xC4,0xE0,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x3F,0x3F,0x00,",
"к": "0x00,0xF0,0xF0,0x80,0x80,0xC0,0xE0,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00,", "к": "0x00,0xF0,0xF0,0x80,0x80,0xC0,0xE0,0x70,0x30,0x10,0x00,0x00,0x00,0x3F,0x3F,0x03,0x03,0x07,0x0E,0x1C,0x38,0x30,0x20,0x00,",
@@ -520,7 +511,6 @@ def getSmallFontMap():
"|": "0x00, 0x00, 0x77, 0x00, 0x00, 0x00,", "|": "0x00, 0x00, 0x77, 0x00, 0x00, 0x00,",
"}": "0x00, 0x00, 0x41, 0x36, 0x08, 0x00,", "}": "0x00, 0x00, 0x41, 0x36, 0x08, 0x00,",
"~": "0x02, 0x01, 0x02, 0x04, 0x02, 0x00,", "~": "0x02, 0x01, 0x02, 0x04, 0x02, 0x00,",
"^": "0x04, 0x02, 0x01, 0x02, 0x04, 0x00,",
"¡": "0x00, 0x00, 0x79, 0x00, 0x00, 0x00,", "¡": "0x00, 0x00, 0x79, 0x00, 0x00, 0x00,",
"¢": "0x1c, 0x22, 0x7f, 0x22, 0x10, 0x00,", "¢": "0x1c, 0x22, 0x7f, 0x22, 0x10, 0x00,",
"£": "0x50, 0x7e, 0x51, 0x41, 0x42, 0x00,", "£": "0x50, 0x7e, 0x51, 0x41, 0x42, 0x00,",
@@ -635,6 +625,7 @@ def getSmallFontMap():
"Б": "0x7f, 0x49, 0x49, 0x49, 0x31, 0x00,", "Б": "0x7f, 0x49, 0x49, 0x49, 0x31, 0x00,",
"В": "0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,", "В": "0x7f, 0x49, 0x49, 0x49, 0x36, 0x00,",
"Г": "0x7f, 0x01, 0x01, 0x01, 0x01, 0x00,", "Г": "0x7f, 0x01, 0x01, 0x01, 0x01, 0x00,",
"Ґ": "0x7E, 0x02, 0x02, 0x02, 0x03, 0x00,",
"Д": "0x60, 0x3f, 0x21, 0x3f, 0x60, 0x00,", "Д": "0x60, 0x3f, 0x21, 0x3f, 0x60, 0x00,",
"Е": "0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,", "Е": "0x7f, 0x49, 0x49, 0x49, 0x41, 0x00,",
"Ж": "0x77, 0x08, 0x7f, 0x08, 0x77, 0x00,", "Ж": "0x77, 0x08, 0x7f, 0x08, 0x77, 0x00,",
@@ -655,8 +646,8 @@ def getSmallFontMap():
"Х": "0x63, 0x14, 0x08, 0x14, 0x63, 0x00,", "Х": "0x63, 0x14, 0x08, 0x14, 0x63, 0x00,",
"Ц": "0x3f, 0x20, 0x20, 0x3f, 0x60, 0x00,", "Ц": "0x3f, 0x20, 0x20, 0x3f, 0x60, 0x00,",
"Ч": "0x07, 0x08, 0x08, 0x08, 0x7f, 0x00,", "Ч": "0x07, 0x08, 0x08, 0x08, 0x7f, 0x00,",
"Ш": "0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x00,", "Ш": "0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x00,",
"Щ": "0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x60,", "Щ": "0x7F, 0x40, 0x7F, 0x40, 0x7F, 0xC0,",
"Ъ": "0x01, 0x7f, 0x48, 0x48, 0x30, 0x00,", "Ъ": "0x01, 0x7f, 0x48, 0x48, 0x30, 0x00,",
"Ы": "0x7f, 0x48, 0x30, 0x00, 0x7f, 0x00,", "Ы": "0x7f, 0x48, 0x30, 0x00, 0x7f, 0x00,",
"Ь": "0x00, 0x7f, 0x48, 0x48, 0x30, 0x00,", "Ь": "0x00, 0x7f, 0x48, 0x48, 0x30, 0x00,",
@@ -667,6 +658,7 @@ def getSmallFontMap():
"б": "0x3c, 0x4a, 0x4a, 0x4a, 0x30, 0x00,", "б": "0x3c, 0x4a, 0x4a, 0x4a, 0x30, 0x00,",
"в": "0x7c, 0x54, 0x54, 0x54, 0x28, 0x00,", "в": "0x7c, 0x54, 0x54, 0x54, 0x28, 0x00,",
"г": "0x7c, 0x04, 0x04, 0x04, 0x04, 0x00,", "г": "0x7c, 0x04, 0x04, 0x04, 0x04, 0x00,",
"ґ": "0x7C, 0x04, 0x04, 0x04, 0x06, 0x00,",
"д": "0x40, 0x3c, 0x24, 0x3c, 0x60, 0x00,", "д": "0x40, 0x3c, 0x24, 0x3c, 0x60, 0x00,",
"е": "0x38, 0x54, 0x54, 0x54, 0x18, 0x00,", "е": "0x38, 0x54, 0x54, 0x54, 0x18, 0x00,",
"ж": "0x6c, 0x10, 0x7c, 0x10, 0x6c, 0x00,", "ж": "0x6c, 0x10, 0x7c, 0x10, 0x6c, 0x00,",
@@ -687,8 +679,8 @@ def getSmallFontMap():
"х": "0x44, 0x28, 0x10, 0x28, 0x44, 0x00,", "х": "0x44, 0x28, 0x10, 0x28, 0x44, 0x00,",
"ц": "0x3c, 0x20, 0x20, 0x3c, 0x60, 0x00,", "ц": "0x3c, 0x20, 0x20, 0x3c, 0x60, 0x00,",
"ч": "0x0c, 0x10, 0x10, 0x10, 0x7c, 0x00,", "ч": "0x0c, 0x10, 0x10, 0x10, 0x7c, 0x00,",
"ш": "0x3c, 0x20, 0x3c, 0x20, 0x3c, 0x00,", "ш": "0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x00,",
"щ": "0x3c, 0x20, 0x3c, 0x20, 0x7c, 0x00,", "щ": "0x7C, 0x40, 0x7C, 0x40, 0xFC, 0x00,",
"ъ": "0x04, 0x7c, 0x50, 0x20, 0x00, 0x00,", "ъ": "0x04, 0x7c, 0x50, 0x20, 0x00, 0x00,",
"ы": "0x7c, 0x50, 0x20, 0x00, 0x7c, 0x00,", "ы": "0x7c, 0x50, 0x20, 0x00, 0x7c, 0x00,",
"ь": "0x00, 0x7c, 0x50, 0x20, 0x00, 0x00,", "ь": "0x00, 0x7c, 0x50, 0x20, 0x00, 0x00,",

View File

@@ -5,12 +5,12 @@ import argparse
import json import json
import os import os
import io import io
import functools
from datetime import datetime from datetime import datetime
import sys import sys
import fontTables import fontTables
import re import re
import subprocess import subprocess
from bdflib import reader as bdfreader
HERE = os.path.dirname(__file__) HERE = os.path.dirname(__file__)
@@ -20,8 +20,11 @@ except NameError:
to_unicode = str to_unicode = str
with open(os.path.join(HERE, "wqy-bitmapsong/wenquanyi_9pt.bdf"), "rb") as handle: @functools.lru_cache(maxsize=None)
cjkFont = bdfreader.read_bdf(handle) def cjkFont():
from bdflib import reader as bdfreader
with open(os.path.join(HERE, "wqy-bitmapsong/wenquanyi_9pt.bdf"), "rb") as f:
return bdfreader.read_bdf(f)
def log(message): def log(message):
@@ -184,7 +187,7 @@ def getLetterCounts(defs, lang):
def getCJKGlyph(sym): def getCJKGlyph(sym):
from bdflib.model import Glyph from bdflib.model import Glyph
try: try:
glyph: Glyph = cjkFont[ord(sym)] glyph: Glyph = cjkFont()[ord(sym)]
except: except:
return None return None
data = glyph.data data = glyph.data

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Поялник", "Поялник",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Pájecí", "Pájecí",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Soldering", "Soldering",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -14,7 +14,7 @@
"BadTipString": "Spitze Defekt", "BadTipString": "Spitze Defekt",
"SleepingSimpleString": "Zzz ", "SleepingSimpleString": "Zzz ",
"SleepingAdvancedString": "Ruhemodus...", "SleepingAdvancedString": "Ruhemodus...",
"WarningSimpleString": "HEIß!", "WarningSimpleString": "HEISS!",
"WarningAdvancedString": "! Achtung Heiß !", "WarningAdvancedString": "! Achtung Heiß !",
"SleepingTipAdvancedString": "Temp:", "SleepingTipAdvancedString": "Temp:",
"IdleTipString": "Ist:", "IdleTipString": "Ist:",
@@ -47,9 +47,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "V" "SettingLockFullChar": "V",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Löt-", "Löt-",
@@ -99,14 +107,14 @@
"Ruhever-", "Ruhever-",
"zögerung" "zögerung"
], ],
"desc": "System wechselt in Ruhemodus, wenn innerhalb dieser Dauer nicht bewegt <S=Sekunden | M=Minuten>" "desc": "Dauer vor Übergang in den Ruhemodus <S=Sekunden | M=Minuten>"
}, },
"ShutdownTimeout": { "ShutdownTimeout": {
"text2": [ "text2": [
"Abschalt-", "Abschalt-",
"zeit" "zeit"
], ],
"desc": "System schaltet ab, wenn innerhalb dieser Dauer nicht bewegt <M=Minuten>" "desc": "Dauer vor automatischer Abschaltung <M=Minuten>"
}, },
"MotionSensitivity": { "MotionSensitivity": {
"text2": [ "text2": [
@@ -148,7 +156,7 @@
"Start im", "Start im",
"Lötmodus" "Lötmodus"
], ],
"desc": "Bestimmt das Heizverhalten beim Einschalten der Spannungsversorgung <A=aus | L=Lötmodus | R=Ruhemodus | K=Ruhemodus mit klater Spitze>" "desc": "Heizverhalten beim Einschalten der Spannungsversorgung <A=aus | L=Lötmodus | R=Ruhemodus | K=Ruhemodus mit kalter Spitze>"
}, },
"CooldownBlink": { "CooldownBlink": {
"text2": [ "text2": [
@@ -169,14 +177,14 @@
"Einstellungen", "Einstellungen",
"zurücksetzen?" "zurücksetzen?"
], ],
"desc": "Werte werden auf Werkseinstellungen zurückgesetzt!" "desc": "Werte auf Werkseinstellungen zurücksetzen"
}, },
"VoltageCalibration": { "VoltageCalibration": {
"text2": [ "text2": [
"Eingangsspannung", "Eingangsspannung",
"kalibrieren?" "kalibrieren?"
], ],
"desc": "Kalibrierung der Eingangsspannung. Kurzer Tastendruck zum Einstellen, langer Tastendruck zum Verlassen." "desc": "Kalibrierung der Eingangsspannung <Langer Tastendruck zum Verlassen>"
}, },
"AdvancedSoldering": { "AdvancedSoldering": {
"text2": [ "text2": [
@@ -204,14 +212,14 @@
"Einfache", "Einfache",
"Kalibrierung" "Kalibrierung"
], ],
"desc": "Einfache Kalibrierung mittels heißen Wassers" "desc": "Einfache Kalibrierung mit heißem Wasser"
}, },
"AdvancedCalibrationMode": { "AdvancedCalibrationMode": {
"text2": [ "text2": [
"Erweiterte", "Erweiterte",
"Kalibrierung" "Kalibrierung"
], ],
"desc": "Erweiterte Kalibrierung mittels eines Thermoelements an der Lötspitze" "desc": "Erweiterte Kalibrierung mit Thermoelement an der Lötspitze"
}, },
"QCMaxVoltage": { "QCMaxVoltage": {
"text2": [ "text2": [
@@ -253,28 +261,35 @@
"Leistungs-", "Leistungs-",
"impuls" "impuls"
], ],
"desc": "Powerbank wird mittels eines Impulses wach gehalten <Watt>" "desc": "Powerbank mit einem Impuls wach halten <Watt>"
}, },
"TipGain": { "TipGain": {
"text2": [ "text2": [
"Ändere", "Ändere",
"Spitzen Faktor" "Spitzen-Faktor"
], ],
"desc": "Spitzen Faktor" "desc": "Spitzen-Faktor"
}, },
"HallEffSensitivity": { "HallEffSensitivity": {
"text2": [ "text2": [
"Hall Sensor", "Hall-Sonde",
"Empfindlichkeit" "Empfindlichkeit"
], ],
"desc": "Empfindlichkeit des Hall Effekt Sensors beim Erkennen des Ruhemodus <A=aus | N=niedrig | M=mittel | H=hoch>" "desc": "Empfindlichkeit der Hall-Sonde beim Erkennen des Ruhemodus <A=aus | N=niedrig | M=mittel | H=hoch>"
}, },
"LockingMode": { "LockingMode": {
"text2": [ "text2": [
"Knopf-", "Tasten-",
"sperre" "sperre"
], ],
"desc": "Langes drücken beider Knöpfe im Lötmodus, sperrt diese <D=deaktiviert | B=nur Boost | V=vollständig gesperrt>" "desc": "Langes drücken beider Tasten im Lötmodus sperrt diese <D=deaktiviert | B=nur Boost | V=vollständig>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -47,9 +47,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Soldering", "Soldering",
@@ -275,6 +283,13 @@
"buttons" "buttons"
], ],
"desc": "When soldering, long press both buttons, to lock them <D=disable | B=\"boost mode\" only | F=full locking>" "desc": "When soldering, long press both buttons, to lock them <D=disable | B=\"boost mode\" only | F=full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Ajustes de", "Ajustes de",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Juotos-", "Juotos-",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "V" "SettingLockFullChar": "V",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Paramètres", "Paramètres",
@@ -274,6 +282,13 @@
"capteur effet hall" "capteur effet hall"
], ],
"desc": "Sensibilité du capteur à effet Hall lors de la détection de mise en veille <D=désactivé | B=basse | M=moyenne | H=haute>" "desc": "Sensibilité du capteur à effet Hall lors de la détection de mise en veille <D=désactivé | B=basse | M=moyenne | H=haute>"
},
"MinVolCell": {
"text2": [
"Tension",
"minimale"
],
"desc": "Tension minimale autorisée par cellule"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Postavke", "Postavke",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "M", "SettingSensitivityHigh": "M",
"SettingLockDisableChar": "K", "SettingLockDisableChar": "K",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "T" "SettingLockFullChar": "T",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Forrasztási", "Forrasztási",
@@ -274,6 +282,13 @@
"enged." "enged."
], ],
"desc": "Forrasztás közben mindkét gombot hosszan lenyomva rögzíti a hőmérsékletet (K=ki B=csak \"boost\" mód T=teljes lezárás)" "desc": "Forrasztás közben mindkét gombot hosszan lenyomva rögzíti a hőmérsékletet (K=ki B=csak \"boost\" mód T=teljes lezárás)"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "A", "SettingSensitivityHigh": "A",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "T", "SettingLockBoostChar": "T",
"SettingLockFullChar": "C" "SettingLockFullChar": "C",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Opzioni", "Opzioni",
@@ -274,6 +282,13 @@
"tasti" "tasti"
], ],
"desc": "Blocca i tasti durante la modalità Saldatura; tieni premuto entrambi per bloccare/sbloccare <D: disattiva; T: blocca «Turbo»; C: blocco completo>" "desc": "Blocca i tasti durante la modalità Saldatura; tieni premuto entrambi per bloccare/sbloccare <D: disattiva; T: blocca «Turbo»; C: blocco completo>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "A", "SettingSensitivityHigh": "A",
"SettingLockDisableChar": "I", "SettingLockDisableChar": "I",
"SettingLockBoostChar": "T", "SettingLockBoostChar": "T",
"SettingLockFullChar": "V" "SettingLockFullChar": "V",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Litavimo", "Litavimo",
@@ -274,6 +282,13 @@
"užraktas" "užraktas"
], ],
"desc": "Lituodami, ilgai paspauskite abu mygtukus, kad juos užrakintumėte <I=Išjungta, T=Tik turbo režimas, V=Visiškas užrakinimas>" "desc": "Lituodami, ilgai paspauskite abu mygtukus, kad juos užrakintumėte <I=Išjungta, T=Tik turbo režimas, V=Visiškas užrakinimas>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityOff": "O", "SettingSensitivityOff": "O",
"SettingSensitivityLow": "L", "SettingSensitivityLow": "L",
"SettingSensitivityMedium": "M", "SettingSensitivityMedium": "M",
"SettingSensitivityHigh": "H" "SettingSensitivityHigh": "H",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Soldeer", "Soldeer",
@@ -274,6 +282,13 @@
"knoppen" "knoppen"
], ],
"desc": "Tijdens solderen lang op beide knoppen drukken, blokkeert ze. <U=Uit, B=Alleen boost, V=Volledig blokkeren>" "desc": "Tijdens solderen lang op beide knoppen drukken, blokkeert ze. <U=Uit, B=Alleen boost, V=Volledig blokkeren>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Soldeer", "Soldeer",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Lodde-", "Lodde-",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -47,9 +47,17 @@
"SettingSensitivityHigh": "W", "SettingSensitivityHigh": "W",
"SettingLockDisableChar": "W", "SettingLockDisableChar": "W",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "P" "SettingLockFullChar": "P",
"SettingNAChar": "N/D"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Ustawienia",
"zasilania"
],
"desc": "Zasilanie i minimalne napięcie na komórkę"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Lutowanie", "Lutowanie",
@@ -275,6 +283,13 @@
"przycisków" "przycisków"
], ],
"desc": "W trybie lutowania, wciśnij oba przyciski aby je zablokować <O-Wyłączona, B-tylko Boost, P-pełna blokada>" "desc": "W trybie lutowania, wciśnij oba przyciski aby je zablokować <O-Wyłączona, B-tylko Boost, P-pełna blokada>"
},
"MinVolCell": {
"text2": [
"Minimalne",
"napięcie"
],
"desc": "Minimalne dozwolone napięcie na komórkę <W woltach> <3S — 3.0V - 3.7V, 4/5/6S — 2.4V - 3.7V>"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Configurações", "Configurações",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -7,14 +7,14 @@
"SettingsCalibrationWarning": "Прежде чем продолжить, пожалуйста, убедитесь, что жало имеет комнатную температуру!", "SettingsCalibrationWarning": "Прежде чем продолжить, пожалуйста, убедитесь, что жало имеет комнатную температуру!",
"SettingsResetWarning": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?", "SettingsResetWarning": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?",
"UVLOWarningString": "НАПРЯЖ--", "UVLOWarningString": "НАПРЯЖ--",
"UndervoltageString": "Низк. напряжение", "UndervoltageString": "Низкое напряжение",
"InputVoltageString": "Питание В: ", "InputVoltageString": "Питание В: ",
"WarningTipTempString": "Темп. жала: ", "WarningTipTempString": "Темп. жала: ",
"BadTipString": "ЖАЛО--", "BadTipString": "ЖАЛО--",
"SleepingSimpleString": "Zzzz", "SleepingSimpleString": "Zzzz",
"SleepingAdvancedString": "Ожидание...", "SleepingAdvancedString": "Ожидание...",
"WarningSimpleString": "ГОРЯЧО!", "WarningSimpleString": "ГОРЯЧО!",
"WarningAdvancedString": "!!! ГОРЯЧЕЕ ЖАЛО !!!", "WarningAdvancedString": "!!! ГОРЯЧЕЕ !!!\n!!! ЖАЛО !!!",
"SleepingTipAdvancedString": "Жало:", "SleepingTipAdvancedString": "Жало:",
"IdleTipString": "Жало:", "IdleTipString": "Жало:",
"IdleSetString": " ->", "IdleSetString": " ->",
@@ -23,7 +23,7 @@
"OffString": "Выкл.", "OffString": "Выкл.",
"ResetOKMessage": "Сброс OK", "ResetOKMessage": "Сброс OK",
"YourGainMessage": "Прирост:", "YourGainMessage": "Прирост:",
"SettingsResetMessage": "Настройки сброшены!", "SettingsResetMessage": "Настройки\nсброшены!",
"NoAccelerometerMessage": "Не определен\nакселерометр!", "NoAccelerometerMessage": "Не определен\nакселерометр!",
"NoPowerDeliveryMessage": "No USB-PD IC\ndetected!", "NoPowerDeliveryMessage": "No USB-PD IC\ndetected!",
"LockingKeysString": " LOCKED", "LockingKeysString": " LOCKED",
@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "В", "SettingSensitivityHigh": "В",
"SettingLockDisableChar": "О", "SettingLockDisableChar": "О",
"SettingLockBoostChar": "Т", "SettingLockBoostChar": "Т",
"SettingLockFullChar": "П" "SettingLockFullChar": "П",
"SettingNAChar": "Н/Д"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Параметры",
"питания"
],
"desc": "Источник питания и минимальное напряжение на ячейку"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Параметры", "Параметры",
@@ -274,6 +282,13 @@
"блок. кнопок" "блок. кнопок"
], ],
"desc": "При работе длинное нажатие обеих кнопок блокирует их <О=Отключено, Т=Только турбо, П=Полная блокировка>" "desc": "При работе длинное нажатие обеих кнопок блокирует их <О=Отключено, Т=Только турбо, П=Полная блокировка>"
},
"MinVolCell": {
"text2": [
"Мин.",
"напр."
],
"desc": "Минимальное разрешенное напряжение на ячейку <В вольтах> <3S — 3.0V - 3.7V, 4/5/6S — 2.4V - 3.7V>"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "V", "SettingSensitivityHigh": "V",
"SettingLockDisableChar": "Z", "SettingLockDisableChar": "Z",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "P" "SettingLockFullChar": "P",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Nastavenie", "Nastavenie",
@@ -274,6 +282,13 @@
"tlačidiel" "tlačidiel"
], ],
"desc": "Zamknutie tlačidiel - dlhé stlačenie oboch naraz počas spájkovania <Z=Zakázať, B=Okrem boost, P=Plné zamknutie>" "desc": "Zamknutie tlačidiel - dlhé stlačenie oboch naraz počas spájkovania <Z=Zakázať, B=Okrem boost, P=Plné zamknutie>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "V", "SettingSensitivityHigh": "V",
"SettingLockDisableChar": "O", "SettingLockDisableChar": "O",
"SettingLockBoostChar": "L", "SettingLockBoostChar": "L",
"SettingLockFullChar": "P" "SettingLockFullChar": "P",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Nastavitve", "Nastavitve",
@@ -274,6 +282,13 @@
"zaklep gumbov" "zaklep gumbov"
], ],
"desc": "Za zaklep med spajkanjem drži oba gumba <O=onemogoči | L=le pospešeno | P=polno>" "desc": "Za zaklep med spajkanjem drži oba gumba <O=onemogoči | L=le pospešeno | P=polno>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Поставке", "Поставке",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Postavke", "Postavke",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -46,9 +46,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Lödnings-", "Lödnings-",
@@ -274,6 +282,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -43,9 +43,17 @@
"SettingSensitivityHigh": "H", "SettingSensitivityHigh": "H",
"SettingLockDisableChar": "D", "SettingLockDisableChar": "D",
"SettingLockBoostChar": "B", "SettingLockBoostChar": "B",
"SettingLockFullChar": "F" "SettingLockFullChar": "F",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Lehimleme", "Lehimleme",
@@ -292,6 +300,13 @@
"locking" "locking"
], ],
"desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>" "desc": "When soldering, long press on both buttons lock them <D=Disable, B=Boost only, F=Full locking>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -7,28 +7,28 @@
"SettingsCalibrationWarning": "Переконайтеся, що жало охололо до кімнатної температури, перш ніж продовжувати!", "SettingsCalibrationWarning": "Переконайтеся, що жало охололо до кімнатної температури, перш ніж продовжувати!",
"SettingsResetWarning": "Ви дійсно хочете скинути налаштування до значень за замовчуванням? <A - Так, В - Ні>", "SettingsResetWarning": "Ви дійсно хочете скинути налаштування до значень за замовчуванням? <A - Так, В - Ні>",
"UVLOWarningString": "АККУМ--", "UVLOWarningString": "АККУМ--",
"UndervoltageString": "Низ. напруга", "UndervoltageString": "Низька напруга",
"InputVoltageString": "Жив.(B): ", "InputVoltageString": "Жив.(B): ",
"WarningTipTempString": "Жало t°: ", "WarningTipTempString": "Жало t°: ",
"BadTipString": "ЖАЛО--", "BadTipString": "ЖАЛО--",
"SleepingSimpleString": "ZzZzz", "SleepingSimpleString": "ZzZzz",
"SleepingAdvancedString": "Очікування...", "SleepingAdvancedString": "Очікування...",
"WarningSimpleString": "ГАРЯЧЕ!", "WarningSimpleString": "ГАРЯЧЕ!",
"WarningAdvancedString": "!!! ГАРЯЧЕ ЖАЛО !!!", "WarningAdvancedString": "!!! ГАРЯЧЕ !!!\n!!! ЖАЛО !!!",
"SleepingTipAdvancedString": "Жало:", "SleepingTipAdvancedString": "Жало:",
"IdleTipString": "Жало:", "IdleTipString": "Жало:",
"IdleSetString": " ->", "IdleSetString": " ->",
"TipDisconnectedString": "Жало вимкнено!", "TipDisconnectedString": "Жало вимкнено!",
"SolderingAdvancedPowerPrompt": "Живлення: ", "SolderingAdvancedPowerPrompt": "Живлення: ",
"OffString": "Вимк", "OffString": "Вимк",
"ResetOKMessage": "Скидання OK", "ResetOKMessage": "Скид. OK",
"YourGainMessage": "Приріст:", "YourGainMessage": "Приріст:",
"SettingsResetMessage": "Налаштування скинуті!", "SettingsResetMessage": "Налаштування\nскинуті!",
"NoAccelerometerMessage": "Акселерометр\nне виявлено!", "NoAccelerometerMessage": "Акселерометр\nне виявлено!",
"NoPowerDeliveryMessage": "USB-PD IC\nне виявлено!", "NoPowerDeliveryMessage": "USB-PD IC\nне виявлено!",
"LockingKeysString": " ЗАБЛОКОВАНО", "LockingKeysString": " ЗАБЛОК.",
"UnlockingKeysString": "РОЗБЛОКОВАНО", "UnlockingKeysString": "РОЗБЛОК.",
"WarningKeysLockedString": "!ЗАБЛОКОВАНО!" "WarningKeysLockedString": "!ЗАБЛОК!"
}, },
"characters": { "characters": {
"SettingRightChar": "П", "SettingRightChar": "П",
@@ -46,15 +46,23 @@
"SettingSensitivityHigh": "М", "SettingSensitivityHigh": "М",
"SettingLockDisableChar": "В", "SettingLockDisableChar": "В",
"SettingLockBoostChar": "Т", "SettingLockBoostChar": "Т",
"SettingLockFullChar": "П" "SettingLockFullChar": "П",
"SettingNAChar": "Н/Д"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Параметри",
"живлення"
],
"desc": "Джерело живлення, та мінамільна напруга на комірку"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"Параметри", "Параметри",
"пайки" "пайки"
], ],
"desc": "Налаштування для режиму пайки. Діють при включеному жалі." "desc": "Налаштування для режиму пайки. Діють при увімкненому жалі."
}, },
"PowerSavingMenu": { "PowerSavingMenu": {
"text2": [ "text2": [
@@ -65,8 +73,8 @@
}, },
"UIMenu": { "UIMenu": {
"text2": [ "text2": [
"Інтерфейс", "Параметри",
"" "інтерфейсу"
], ],
"desc": "Параметри користувальницького інтерфейсу." "desc": "Параметри користувальницького інтерфейсу."
}, },
@@ -84,7 +92,7 @@
"Джерело", "Джерело",
"живлення" "живлення"
], ],
"desc": "Встановлення напруги відключення. <DC - 10V, 3S - 9.9V, 4S - 13.2V, 5S - 16.5V, 6S - 19.8V>" "desc": "Встановлює напругу відсічки. <DC - 10V, 3S - 9.9V, 4S - 13.2V, 5S - 16.5V, 6S - 19.8V>"
}, },
"SleepTemperature": { "SleepTemperature": {
"text2": [ "text2": [
@@ -105,12 +113,12 @@
"Часу до", "Часу до",
"вимкнення" "вимкнення"
], ],
"desc": "Час до відключення <Хвилини>" "desc": "Час до вимкнення <Хвилини>"
}, },
"MotionSensitivity": { "MotionSensitivity": {
"text2": [ "text2": [
"Чутл. сенсо-", "Чутливість",
"ру руху" "сенсору руху"
], ],
"desc": "Акселерометр <0 - Вимк. 1 - мін. чутливості 9 - макс. чутливості>" "desc": "Акселерометр <0 - Вимк. 1 - мін. чутливості 9 - макс. чутливості>"
}, },
@@ -140,25 +148,25 @@
"Темпер.", "Темпер.",
"Турбо" "Турбо"
], ],
"desc": "Температура в Турбо-режимі" "desc": "Температура в \"Турбо\" режимі"
}, },
"AutoStart": { "AutoStart": {
"text2": [ "text2": [
"Гарячий", "Гарячий",
"старт" "старт"
], ],
"desc": "Режим з яким запускається паяльник при подачі живлення <П=Пайка, О=Очікування, К=Очікування при кімн. темп., В=Вимк.>" "desc": "Режим в якому запускається паяльник при ввімкненні <П=Пайка, О=Очікування, К=Очікування при кімн. темп., В=Вимк.>"
}, },
"CooldownBlink": { "CooldownBlink": {
"text2": [ "text2": [
"Показ t° при", "Показ t° при",
"охолодж." "охолодженні"
], ],
"desc": "Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран моргає" "desc": "Показувати температуру на екрані охолодження, поки жало залишається гарячим, при цьому екран моргає"
}, },
"TemperatureCalibration": { "TemperatureCalibration": {
"text2": [ "text2": [
"Калібровка", "Калібрування",
"температури" "температури"
], ],
"desc": "Калібрування температурного датчика." "desc": "Калібрування температурного датчика."
@@ -179,8 +187,8 @@
}, },
"AdvancedSoldering": { "AdvancedSoldering": {
"text2": [ "text2": [
"Детальний ре-", "Детальний",
"жим пайки" "режим пайки"
], ],
"desc": "Показувати детальну інформацію при пайці." "desc": "Показувати детальну інформацію при пайці."
}, },
@@ -194,7 +202,7 @@
"TipModel": { "TipModel": {
"text2": [ "text2": [
"Модель", "Модель",
"Жало" "жала"
], ],
"desc": "Вибір моделі жала" "desc": "Вибір моделі жала"
}, },
@@ -215,7 +223,7 @@
"QCMaxVoltage": { "QCMaxVoltage": {
"text2": [ "text2": [
"Потужність", "Потужність",
"дж. живл." "дж. живлення"
], ],
"desc": "Потужність джерела живлення в Ватах" "desc": "Потужність джерела живлення в Ватах"
}, },
@@ -235,14 +243,14 @@
}, },
"TempChangeShortStep": { "TempChangeShortStep": {
"text2": [ "text2": [
"Зм. темп.", "Зміна темп.",
"коротко?" "коротко?"
], ],
"desc": "Змінювати температуру при короткому натисканні!" "desc": "Змінювати температуру при короткому натисканні!"
}, },
"TempChangeLongStep": { "TempChangeLongStep": {
"text2": [ "text2": [
"Зм. темп.", "Зміна темп.",
"довго?" "довго?"
], ],
"desc": "Змінювати температуру при довгому натисканні!" "desc": "Змінювати температуру при довгому натисканні!"
@@ -252,14 +260,14 @@
"Пульс.", "Пульс.",
"Навантаж." "Навантаж."
], ],
"desc": "Деякі PowerBank-и з часом вимк. живлення, якщо пристрій споживає дуже мало енергії (це потрібно щоб паяльник не вимкнувся з часом)" "desc": "Деякі PowerBank-и з часом вимк. живлення, якщо пристрій споживає дуже мало енергії)"
}, },
"TipGain": { "TipGain": {
"text2": [ "text2": [
"Modify", "Змінити",
"tip gain" "підсил. жала"
], ],
"desc": "Tip gain" "desc": "Підсилення жала"
}, },
"HallEffSensitivity": { "HallEffSensitivity": {
"text2": [ "text2": [
@@ -271,9 +279,16 @@
"LockingMode": { "LockingMode": {
"text2": [ "text2": [
"Дозволити", "Дозволити",
"блокування кнопок" "блок. кнопок"
], ],
"desc": "Під час пайки тривале натискання обох кнопок заблокує їх <В=Вимк, Т=Тільки турбо, П=Повне>" "desc": "Під час пайки тривале натискання обох кнопок заблокує їх <В=Вимк, Т=Тільки турбо, П=Повне>"
},
"MinVolCell": {
"text2": [
"Мін.",
"напруга"
],
"desc": "Мінімальна дозволена напруга на комірку <В вольтах> <3S — 3.0V - 3.7V, 4/5/6S — 2.4V - 3.7V>"
} }
} }
} }

View File

@@ -47,9 +47,17 @@
"SettingSensitivityHigh": "高", "SettingSensitivityHigh": "高",
"SettingLockDisableChar": "無", "SettingLockDisableChar": "無",
"SettingLockBoostChar": "增", "SettingLockBoostChar": "增",
"SettingLockFullChar": "全" "SettingLockFullChar": "全",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"", "",
@@ -275,6 +283,13 @@
"撳掣鎖定" "撳掣鎖定"
], ],
"desc": "喺焊接模式時,同時長撳兩粒掣啓用撳掣鎖定 <無=停用 | 增=只鎖定增熱模式 | 全=鎖定全部>" "desc": "喺焊接模式時,同時長撳兩粒掣啓用撳掣鎖定 <無=停用 | 增=只鎖定增熱模式 | 全=鎖定全部>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -47,9 +47,17 @@
"SettingSensitivityHigh": "高", "SettingSensitivityHigh": "高",
"SettingLockDisableChar": "無", "SettingLockDisableChar": "無",
"SettingLockBoostChar": "增", "SettingLockBoostChar": "增",
"SettingLockFullChar": "全" "SettingLockFullChar": "全",
"SettingNAChar": "N/A"
}, },
"menuGroups": { "menuGroups": {
"PowerMenu": {
"text2": [
"Power",
"settings"
],
"desc": "Power settings"
},
"SolderingMenu": { "SolderingMenu": {
"text2": [ "text2": [
"", "",
@@ -275,6 +283,13 @@
"按鍵鎖定" "按鍵鎖定"
], ],
"desc": "於焊接模式時,同時長按兩個按鍵啟用按鍵鎖定 <無=停用 | 增=只鎖定增熱模式 | 全=鎖定全部>" "desc": "於焊接模式時,同時長按兩個按鍵啟用按鍵鎖定 <無=停用 | 增=只鎖定增熱模式 | 全=鎖定全部>"
},
"MinVolCell": {
"text2": [
"Minimum",
"voltage"
],
"desc": "Minimum allowed voltage per cell"
} }
} }
} }

View File

@@ -173,7 +173,8 @@ var def =
{ {
"id": "SettingSensitivityHigh", "id": "SettingSensitivityHigh",
"len": 1 "len": 1
}, { },
{
"id": "SettingLockDisableChar", "id": "SettingLockDisableChar",
"len": 1, "len": 1,
"default": "D" "default": "D"
@@ -187,9 +188,18 @@ var def =
"id": "SettingLockFullChar", "id": "SettingLockFullChar",
"len": 1, "len": 1,
"default": "F" "default": "F"
},
{
"id": "SettingNAChar",
"len": 3,
"default": "N/A"
} }
], ],
"menuGroups": [ "menuGroups": [
{
"id": "PowerMenu",
"maxLen": 11
},
{ {
"id": "SolderingMenu", "id": "SolderingMenu",
"maxLen": 11 "maxLen": 11
@@ -342,10 +352,16 @@ var def =
"id": "HallEffSensitivity", "id": "HallEffSensitivity",
"maxLen": 6, "maxLen": 6,
"maxLen2": 8 "maxLen2": 8
}, { },
{
"id": "LockingMode", "id": "LockingMode",
"maxLen": 6, "maxLen": 6,
"maxLen2": 13 "maxLen2": 13
},
{
"id": "MinVolCell",
"maxLen": 4,
"maxLen2": 9
} }
] ]
} }

View File

@@ -7,5 +7,5 @@ services:
context: . context: .
command: /bin/bash command: /bin/bash
volumes: volumes:
- ./ci:/build/ci - ./ci:/build/ci:Z
- ./:/build/source - ./:/build/source:Z

View File

@@ -88,7 +88,8 @@ uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
void unstick_I2C() { void unstick_I2C() {
/* configure SDA/SCL for GPIO */ /* configure SDA/SCL for GPIO */
GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin; GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin;
gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin); gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);
for (int i = 0; i < 8; i++) {
asm("nop"); asm("nop");
asm("nop"); asm("nop");
asm("nop"); asm("nop");
@@ -100,7 +101,8 @@ void unstick_I2C() {
asm("nop"); asm("nop");
asm("nop"); asm("nop");
asm("nop"); asm("nop");
GPIO_BOP(GPIOB) |= SDA_Pin; GPIO_BOP(GPIOB) &= SCL_Pin;
}
/* connect PB6 to I2C0_SCL */ /* connect PB6 to I2C0_SCL */
/* connect PB7 to I2C0_SDA */ /* connect PB7 to I2C0_SDA */
gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin); gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);

View File

@@ -15,11 +15,12 @@ const uint16_t USB_PD_Desired_Levels[] = {
// mV desired input, mA minimum required current // mV desired input, mA minimum required current
// Tip is ~ 7.5 ohms // Tip is ~ 7.5 ohms
20000, 2666, // 20V, 2.6A 20000, 2666, // 20V, 2.6A
18000, 2400, // 18V, 2.4A
15000, 2000, // 15V 2A 15000, 2000, // 15V 2A
12000, 1600, // 12V @ 1.6A 12000, 1600, // 12V @ 1.6A
9000, 1200, // 9V @ 1.2A 9000, 1200, // 9V @ 1.2A
5000, 100, // 5V @ whatever 5000, 100, // 5V @ whatever
}; };
const uint8_t USB_PD_Desired_Levels_Len = 5; const uint8_t USB_PD_Desired_Levels_Len = 6;
#endif #endif

View File

@@ -23,353 +23,281 @@ uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {
return temp; return temp;
} }
bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) { enum i2c_step {
if (!lock()) // Write+read steps
return false; Write_start, // Sending start on bus
i2c_interrupt_disable(I2C0, I2C_INT_ERR); Write_device_address, // start sent, send device address
i2c_interrupt_disable(I2C0, I2C_INT_BUF); Write_device_memory_address, // device address sent, write the memory location
i2c_interrupt_disable(I2C0, I2C_INT_EV); Write_device_data_start, // Write all of the remaining data using DMA
dma_parameter_struct dma_init_struct; Write_device_data_finish, // Write all of the remaining data using DMA
uint8_t state = I2C_START; Read_start, // second read
uint8_t in_rx_cycle = 0; Read_device_address, // Send device address again for the read
uint16_t timeout = 0; Read_device_data_start, // read device data via DMA
uint8_t tries = 0; Read_device_data_finish, // read device data via DMA
uint8_t i2c_timeout_flag = 0; Send_stop, // send the stop at the end of the transaction
while (!(i2c_timeout_flag)) { Wait_stop, // Wait for stop to send and we are done
switch (state) { Done, // Finished
case I2C_START: Error_occured, // Error occured on the bus
tries++;
if (tries > 64) { };
struct i2c_state {
i2c_step currentStep;
bool isMemoryWrite;
bool wakePart;
uint8_t deviceAddress;
uint8_t memoryAddress;
uint8_t * buffer;
uint16_t numberOfBytes;
dma_parameter_struct dma_init_struct;
};
volatile i2c_state currentState;
void perform_i2c_step() {
// Performs next step of the i2c state machine
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
// Arb error - we lost the bus / nacked
currentState.currentStep = Error_occured;
} else if (i2c_flag_get(I2C0, I2C_FLAG_BERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_BERR);
// Bus Error
currentState.currentStep = Error_occured;
} else if (i2c_flag_get(I2C0, I2C_FLAG_LOSTARB)) {
i2c_flag_clear(I2C0, I2C_FLAG_LOSTARB);
// Bus Error
currentState.currentStep = Error_occured;
} else if (i2c_flag_get(I2C0, I2C_FLAG_PECERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_PECERR);
// Bus Error
currentState.currentStep = Error_occured;
}
switch (currentState.currentStep) {
case Error_occured:
i2c_stop_on_bus(I2C0); i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */ break;
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) { case Write_start:
timeout++;
}
unlock();
return false;
}
if (0 == in_rx_cycle) {
/* disable I2C0 */
i2c_disable(I2C0);
/* enable I2C0 */
i2c_enable(I2C0);
/* enable acknowledge */ /* enable acknowledge */
i2c_ack_config(I2C0, I2C_ACK_ENABLE); i2c_ack_config(I2C0, I2C_ACK_ENABLE);
/* i2c master sends start signal only when the bus is idle */ /* i2c master sends start signal only when the bus is idle */
while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT)) { if (!i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
/* send the start signal */ /* send the start signal */
i2c_start_on_bus(I2C0); i2c_start_on_bus(I2C0);
timeout = 0; currentState.currentStep = Write_device_address;
state = I2C_SEND_ADDRESS;
} else {
I2C_Unstick();
timeout = 0;
state = I2C_START;
}
} else {
i2c_start_on_bus(I2C0);
timeout = 0;
state = I2C_SEND_ADDRESS;
} }
break; break;
case I2C_SEND_ADDRESS:
case Write_device_address:
/* i2c master sends START signal successfully */ /* i2c master sends START signal successfully */
while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT)) { if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
if (RESET == in_rx_cycle) {
i2c_master_addressing(I2C0, DevAddress, I2C_TRANSMITTER);
state = I2C_CLEAR_ADDRESS_FLAG;
} else {
i2c_master_addressing(I2C0, DevAddress, I2C_RECEIVER);
state = I2C_CLEAR_ADDRESS_FLAG;
}
timeout = 0;
} else {
timeout = 0;
state = I2C_START;
in_rx_cycle = 0;
}
break;
case I2C_CLEAR_ADDRESS_FLAG:
/* address flag set means i2c slave sends ACK */
while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT)) {
timeout++;
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
// Address NACK'd
unlock();
return false;
}
}
if (timeout < I2C_TIME_OUT) {
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
timeout = 0; i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_TRANSMITTER);
state = I2C_TRANSMIT_DATA; currentState.currentStep = Write_device_memory_address;
} else {
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
// Address NACK'd
unlock();
return false;
} }
break; break;
case I2C_TRANSMIT_DATA: case Write_device_memory_address:
if (0 == in_rx_cycle) { // Send the device memory location
/* wait until the transmit data buffer is empty */
while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) && (timeout < I2C_TIME_OUT)) { if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent
timeout++; i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
}
if (timeout < I2C_TIME_OUT) { if (i2c_flag_get(I2C0, I2C_FLAG_BERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_BERR);
// Bus Error
currentState.currentStep = Error_occured;
} else if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
// Arb error - we lost the bus / nacked
currentState.currentStep = Error_occured;
} else if (currentState.wakePart) {
// We are stopping here
currentState.currentStep = Send_stop;
} else if (i2c_flag_get(I2C0, I2C_FLAG_TBE)) {
// Write out the 8 byte address // Write out the 8 byte address
i2c_data_transmit(I2C0, read_address); i2c_data_transmit(I2C0, currentState.memoryAddress);
timeout = 0;
if (currentState.isMemoryWrite) {
currentState.currentStep = Write_device_data_start;
} else { } else {
timeout = 0; currentState.currentStep = Read_start;
state = I2C_START;
in_rx_cycle = 0;
} }
}
}
break;
case Write_device_data_start:
/* wait until BTC bit is set */ /* wait until BTC bit is set */
while ((!i2c_flag_get(I2C0, I2C_FLAG_BTC)) && (timeout < I2C_TIME_OUT)) { if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
timeout++; /* enable I2C0 DMA */
i2c_dma_enable(I2C0, I2C_DMA_ON);
/* enable DMA0 channel5 */
dma_channel_enable(DMA0, DMA_CH5);
currentState.currentStep = Write_device_data_finish;
} }
if (timeout < I2C_TIME_OUT) { break;
timeout = 0;
state = I2C_START; case Write_device_data_finish: // Wait for complete then goto stop
in_rx_cycle = 1; /* wait until BTC bit is set */
} else { if (dma_flag_get(DMA0, DMA_CH5, DMA_FLAG_FTF)) {
timeout = 0; /* wait until BTC bit is set */
state = I2C_START; if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
in_rx_cycle = 0; currentState.currentStep = Send_stop;
}
}
break;
case Read_start:
/* wait until BTC bit is set */
if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
i2c_start_on_bus(I2C0);
currentState.currentStep = Read_device_address;
}
break;
case Read_device_address:
if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);
currentState.currentStep = Read_device_data_start;
}
break;
case Read_device_data_start:
if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
// Arb error - we lost the bus / nacked
currentState.currentStep = Error_occured;
} }
} else {
/* one byte master reception procedure (polling) */ /* one byte master reception procedure (polling) */
if (number_of_byte < 2) { if (currentState.numberOfBytes == 0) {
currentState.currentStep = Send_stop;
} else if (currentState.numberOfBytes == 1) {
/* disable acknowledge */ /* disable acknowledge */
i2c_ack_config(I2C0, I2C_ACK_DISABLE); i2c_ack_config(I2C0, I2C_ACK_DISABLE);
/* clear ADDSEND register by reading I2C_STAT0 then I2C_STAT1 register /* clear ADDSEND register by reading I2C_STAT0 then I2C_STAT1 register
* (I2C_STAT0 has already been read) */ * (I2C_STAT0 has already been read) */
i2c_flag_get(I2C0, I2C_FLAG_ADDSEND); i2c_flag_get(I2C0, I2C_FLAG_ADDSEND); // sat0
i2c_flag_get(I2C0, I2C_FLAG_I2CBSY); // sat1
/* send a stop condition to I2C bus*/ /* send a stop condition to I2C bus*/
i2c_stop_on_bus(I2C0); i2c_stop_on_bus(I2C0);
/* wait for the byte to be received */ /* wait for the byte to be received */
while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE))
; ;
/* read the byte received from the EEPROM */ /* read the byte received from the EEPROM */
*p_buffer = i2c_data_receive(I2C0); *currentState.buffer = i2c_data_receive(I2C0);
/* decrement the read bytes counter */ currentState.currentStep = Wait_stop;
number_of_byte--;
timeout = 0;
} else { /* more than one byte master reception procedure (DMA) */ } else { /* more than one byte master reception procedure (DMA) */
dma_deinit(DMA0, DMA_CH6);
dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init_struct.memory_addr = (uint32_t)p_buffer;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
dma_init_struct.number = number_of_byte;
dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_init(DMA0, DMA_CH6, &dma_init_struct);
i2c_dma_last_transfer_config(I2C0, I2C_DMALST_ON);
/* enable I2C0 DMA */ /* enable I2C0 DMA */
i2c_dma_enable(I2C0, I2C_DMA_ON); i2c_dma_enable(I2C0, I2C_DMA_ON);
/* enable DMA0 channel5 */ /* enable DMA0 channel5 */
dma_channel_enable(DMA0, DMA_CH6); dma_channel_enable(DMA0, DMA_CH6);
/* wait until BTC bit is set */ currentState.currentStep = Read_device_data_finish;
while (!dma_flag_get(DMA0, DMA_CH6, DMA_FLAG_FTF)) {}
/* send a stop condition to I2C bus*/
i2c_stop_on_bus(I2C0);
} }
timeout = 0;
state = I2C_STOP;
} }
break; break;
case I2C_STOP: case Read_device_data_finish: // Wait for complete then goto stop
/* i2c master sends STOP signal successfully */ /* wait until BTC bit is set */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) { if (dma_flag_get(DMA0, DMA_CH6, DMA_FLAG_FTF)) {
timeout++; currentState.currentStep = Send_stop;
} }
if (timeout < I2C_TIME_OUT) {
timeout = 0; break;
state = I2C_END; case Send_stop:
i2c_timeout_flag = I2C_OK; /* send a stop condition to I2C bus*/
} else { i2c_stop_on_bus(I2C0);
timeout = 0; currentState.currentStep = Wait_stop;
state = I2C_START; break;
in_rx_cycle = 0; case Wait_stop:
/* i2c master sends STOP signal successfully */
if ((I2C_CTL0(I2C0) & 0x0200) != 0x0200) {
currentState.currentStep = Done;
} }
break; break;
default: default:
state = I2C_START; // If we get here something is amiss
in_rx_cycle = 0; return;
i2c_timeout_flag = I2C_OK;
timeout = 0;
break;
} }
} }
bool perform_i2c_transaction(uint16_t DevAddress, uint16_t memory_address, uint8_t *p_buffer, uint16_t number_of_byte, bool isWrite, bool isWakeOnly) {
{
// TODO is this required
/* disable I2C0 */
i2c_disable(I2C0);
/* enable I2C0 */
i2c_enable(I2C0);
}
i2c_interrupt_disable(I2C0, I2C_INT_ERR);
i2c_interrupt_disable(I2C0, I2C_INT_BUF);
i2c_interrupt_disable(I2C0, I2C_INT_EV);
currentState.isMemoryWrite = isWrite;
currentState.wakePart = isWakeOnly;
currentState.deviceAddress = DevAddress;
currentState.memoryAddress = memory_address;
currentState.numberOfBytes = number_of_byte;
currentState.buffer = p_buffer;
if (!isWakeOnly) {
// Setup DMA
currentState.dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
currentState.dma_init_struct.memory_addr = (uint32_t)p_buffer;
currentState.dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
currentState.dma_init_struct.number = number_of_byte;
currentState.dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);
currentState.dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
currentState.dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
currentState.dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
if (currentState.isMemoryWrite) {
dma_deinit(DMA0, DMA_CH5);
currentState.dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
dma_init(DMA0, DMA_CH5, (dma_parameter_struct *)&currentState.dma_init_struct);
} else {
dma_deinit(DMA0, DMA_CH6);
currentState.dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_init(DMA0, DMA_CH6, (dma_parameter_struct *)&currentState.dma_init_struct);
}
if (!currentState.isMemoryWrite) {
i2c_dma_last_transfer_config(I2C0, I2C_DMALST_ON);
}
}
// Clear flags
I2C_STAT0(I2C0) = 0;
I2C_STAT1(I2C0) = 0;
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
currentState.currentStep = Write_start; // Always start in write mode
TickType_t timeout = xTaskGetTickCount() + TICKS_SECOND;
while ((currentState.currentStep != Done) && (currentState.currentStep != Error_occured)) {
if (xTaskGetTickCount() > timeout) {
i2c_stop_on_bus(I2C0);
return false;
}
perform_i2c_step();
}
return currentState.currentStep == Done;
}
bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) {
if (!lock())
return false;
bool res = perform_i2c_transaction(DevAddress, read_address, p_buffer, number_of_byte, false, false);
if (!res) {
I2C_Unstick();
}
unlock(); unlock();
return true; return res;
} }
bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) { bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) {
if (!lock()) if (!lock())
return false; return false;
bool res = perform_i2c_transaction(DevAddress, MemAddress, p_buffer, number_of_byte, true, false);
i2c_interrupt_disable(I2C0, I2C_INT_ERR); if (!res) {
i2c_interrupt_disable(I2C0, I2C_INT_EV);
i2c_interrupt_disable(I2C0, I2C_INT_BUF);
dma_parameter_struct dma_init_struct;
uint8_t state = I2C_START;
uint16_t timeout = 0;
bool done = false;
bool timedout = false;
while (!(done || timedout)) {
switch (state) {
case I2C_START:
/* i2c master sends start signal only when the bus is idle */
while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
i2c_start_on_bus(I2C0);
timeout = 0;
state = I2C_SEND_ADDRESS;
} else {
I2C_Unstick(); I2C_Unstick();
timeout = 0;
state = I2C_START;
}
break;
case I2C_SEND_ADDRESS:
/* i2c master sends START signal successfully */
while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
i2c_master_addressing(I2C0, DevAddress, I2C_TRANSMITTER);
timeout = 0;
state = I2C_CLEAR_ADDRESS_FLAG;
} else {
timedout = true;
done = true;
timeout = 0;
state = I2C_START;
}
break;
case I2C_CLEAR_ADDRESS_FLAG:
/* address flag set means i2c slave sends ACK */
while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT)) {
timeout++;
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
// Address NACK'd
unlock();
return false;
}
}
timeout = 0;
if (timeout < I2C_TIME_OUT) {
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
state = I2C_TRANSMIT_DATA;
} else {
// Dont retry as this means a NAK
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
} }
unlock(); unlock();
return false; return res;
}
break;
case I2C_TRANSMIT_DATA:
/* wait until the transmit data buffer is empty */
while ((!i2c_flag_get(I2C0, I2C_FLAG_TBE)) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
/* send the EEPROM's internal address to write to : only one byte
* address */
i2c_data_transmit(I2C0, MemAddress);
timeout = 0;
} else {
timedout = true;
timeout = 0;
state = I2C_START;
}
/* wait until BTC bit is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_BTC))
;
dma_deinit(DMA0, DMA_CH5);
dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
dma_init_struct.memory_addr = (uint32_t)p_buffer;
dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
dma_init_struct.number = number_of_byte;
dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);
dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
dma_init(DMA0, DMA_CH5, &dma_init_struct);
/* enable I2C0 DMA */
i2c_dma_enable(I2C0, I2C_DMA_ON);
/* enable DMA0 channel5 */
dma_channel_enable(DMA0, DMA_CH5);
/* wait until BTC bit is set */
while (!dma_flag_get(DMA0, DMA_CH5, DMA_FLAG_FTF)) {}
/* wait until BTC bit is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_BTC)) {}
state = I2C_STOP;
break;
case I2C_STOP:
/* send a stop condition to I2C bus */
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
timeout = 0;
state = I2C_END;
done = true;
} else {
timedout = true;
done = true;
timeout = 0;
state = I2C_START;
}
break;
default:
state = I2C_START;
timeout = 0;
break;
}
}
unlock();
return timedout == false;
} }
bool FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) { return Mem_Write(DevAddress, pData[0], pData + 1, Size - 1); } bool FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) { return Mem_Write(DevAddress, pData[0], pData + 1, Size - 1); }
@@ -406,104 +334,15 @@ bool FRToSI2C::wakePart(uint16_t DevAddress) {
// wakepart is a special case where only the device address is sent // wakepart is a special case where only the device address is sent
if (!lock()) if (!lock())
return false; return false;
bool res = perform_i2c_transaction(DevAddress, 0, NULL, 0, false, true);
i2c_interrupt_disable(I2C0, I2C_INT_ERR); if (!res) {
i2c_interrupt_disable(I2C0, I2C_INT_EV);
i2c_interrupt_disable(I2C0, I2C_INT_BUF);
uint8_t state = I2C_START;
uint16_t timeout = 0;
bool done = false;
bool timedout = false;
while (!(done || timedout)) {
switch (state) {
case I2C_START:
/* i2c master sends start signal only when the bus is idle */
while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
i2c_start_on_bus(I2C0);
timeout = 0;
state = I2C_SEND_ADDRESS;
} else {
I2C_Unstick(); I2C_Unstick();
timeout = 0;
state = I2C_START;
}
break;
case I2C_SEND_ADDRESS:
/* i2c master sends START signal successfully */
while ((!i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
i2c_master_addressing(I2C0, DevAddress, I2C_TRANSMITTER);
timeout = 0;
state = I2C_CLEAR_ADDRESS_FLAG;
} else {
timedout = true;
done = true;
timeout = 0;
state = I2C_START;
}
break;
case I2C_CLEAR_ADDRESS_FLAG:
/* address flag set means i2c slave sends ACK */
while ((!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) && (timeout < I2C_TIME_OUT)) {
timeout++;
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
// Address NACK'd
unlock();
return false;
}
}
if (timeout < I2C_TIME_OUT) {
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
timeout = 0;
state = I2C_STOP;
} else {
// Dont retry as this means a NAK
i2c_stop_on_bus(I2C0);
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
} }
unlock(); unlock();
return false; return res;
} }
break;
case I2C_STOP: void I2C_EV_IRQ() {}
/* send a stop condition to I2C bus */ void I2C_ER_IRQ() {
i2c_stop_on_bus(I2C0); // Error callbacks
/* i2c master sends STOP signal successfully */
while ((I2C_CTL0(I2C0) & 0x0200) && (timeout < I2C_TIME_OUT)) {
timeout++;
}
if (timeout < I2C_TIME_OUT) {
timeout = 0;
state = I2C_END;
done = true;
} else {
timedout = true;
done = true;
timeout = 0;
state = I2C_START;
}
break;
default:
state = I2C_START;
timeout = 0;
break;
}
}
unlock();
return timedout == false;
} }

View File

@@ -411,10 +411,9 @@ PolicyEngine::policy_engine_state PolicyEngine::pe_sink_ready() {
return PESinkSendSoftReset; return PESinkSendSoftReset;
} }
/* If we got an unknown message, send a soft reset ??? */
} else { } else {
/* if we get an unknown message code, silently ignore it*/
return PESinkSendSoftReset; return PESinkReady;
} }
} }
} }

View File

@@ -150,6 +150,42 @@ const uint8_t disconnectedTipIcon[] = {
* */ * */
const uint8_t SettingsMenuIcons[] = { const uint8_t SettingsMenuIcons[] = {
// Power
// width = 16
// height = 16
0xC0,
0xB0,
0x8C,
0x83,
0x01,
0x01,
0x21,
0x31,
0xA9,
0x65,
0x03,
0x42,
0x62,
0x52,
0xCA,
0x06,
0x60,
0x58,
0x26,
0x11,
0x08,
0xC4,
0xB2,
0x4D,
0x23,
0x10,
0x08,
0x04,
0x02,
0x01,
0x00,
0x00,
// Soldering // Soldering
// width = 16 // width = 16
// height = 16 // height = 16

View File

@@ -10,7 +10,7 @@
#ifndef SETTINGS_H_ #ifndef SETTINGS_H_
#define SETTINGS_H_ #define SETTINGS_H_
#include <stdint.h> #include <stdint.h>
#define SETTINGSVERSION (0x25) #define SETTINGSVERSION (0x26)
/*Change this if you change the struct below to prevent people getting \ /*Change this if you change the struct below to prevent people getting \
out of sync*/ out of sync*/
@@ -25,6 +25,7 @@ typedef struct {
uint16_t SleepTemp; // temp to drop to in sleep uint16_t SleepTemp; // temp to drop to in sleep
uint8_t SleepTime; // minutes timeout to sleep uint8_t SleepTime; // minutes timeout to sleep
uint8_t minDCVoltageCells; // The voltage we cut out at for under voltage when powered by DC jack uint8_t minDCVoltageCells; // The voltage we cut out at for under voltage when powered by DC jack
uint8_t minVoltageCells; // Minimum allowed voltage per cell <3S - 3.0V (30)> <4S - 2.4V (24)> <...> (Minimum recommended 2.7V)
uint8_t QCIdealVoltage; // Desired QC3.0 voltage (9,12,20V) uint8_t QCIdealVoltage; // Desired QC3.0 voltage (9,12,20V)
uint8_t OrientationMode : 2; // Selects between Auto,Right and left handed layouts uint8_t OrientationMode : 2; // Selects between Auto,Right and left handed layouts
uint8_t sensitivity : 4; // Sensitivity of accelerometer (5 bits) uint8_t sensitivity : 4; // Sensitivity of accelerometer (5 bits)

View File

@@ -14,7 +14,7 @@ extern const bool HasFahrenheit;
extern const char *SettingsShortNames[29][2]; extern const char *SettingsShortNames[29][2];
extern const char *SettingsDescriptions[29]; extern const char *SettingsDescriptions[29];
extern const char *SettingsMenuEntries[4]; extern const char *SettingsMenuEntries[5];
extern const char *SettingsCalibrationDone; extern const char *SettingsCalibrationDone;
extern const char *SettingsCalibrationWarning; extern const char *SettingsCalibrationWarning;
@@ -60,6 +60,7 @@ extern const char *SettingSensitivityHigh;
extern const char *SettingLockDisableChar; extern const char *SettingLockDisableChar;
extern const char *SettingLockBoostChar; extern const char *SettingLockBoostChar;
extern const char *SettingLockFullChar; extern const char *SettingLockFullChar;
extern const char *SettingNAChar;
extern const char *SettingFastChar; extern const char *SettingFastChar;
extern const char *SettingSlowChar; extern const char *SettingSlowChar;

View File

@@ -46,7 +46,7 @@ uint8_t lookupVoltageLevel() {
if (systemSettings.minDCVoltageCells == 0) if (systemSettings.minDCVoltageCells == 0)
return 90; // 9V since iron does not function effectively below this return 90; // 9V since iron does not function effectively below this
else else
return (systemSettings.minDCVoltageCells * 33) + (33 * 2); return (systemSettings.minDCVoltageCells * systemSettings.minVoltageCells) + (systemSettings.minVoltageCells * 2);
} }
void resetSettings() { void resetSettings() {
memset((void *)&systemSettings, 0, sizeof(systemSettingsType)); memset((void *)&systemSettings, 0, sizeof(systemSettingsType));
@@ -55,6 +55,7 @@ void resetSettings() {
// to sleep - default 1 min // to sleep - default 1 min
systemSettings.SolderingTemp = SOLDERING_TEMP; // Default soldering temp is 320.0 C systemSettings.SolderingTemp = SOLDERING_TEMP; // Default soldering temp is 320.0 C
systemSettings.minDCVoltageCells = CUT_OUT_SETTING; // default to no cut-off voltage systemSettings.minDCVoltageCells = CUT_OUT_SETTING; // default to no cut-off voltage
systemSettings.minVoltageCells = RECOM_VOL_CELL; // Minimum voltage per cell (Recommended 3.3V (33))
systemSettings.QCIdealVoltage = 0; // Default to 9V for QC3.0 Voltage systemSettings.QCIdealVoltage = 0; // Default to 9V for QC3.0 Voltage
systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades systemSettings.version = SETTINGSVERSION; // Store the version number to allow for easier upgrades
systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen systemSettings.detailedSoldering = DETAILED_SOLDERING; // Detailed soldering screen

View File

@@ -19,6 +19,8 @@ void gui_Menu(const menuitem *menu);
#ifdef POW_DC #ifdef POW_DC
static bool settings_setInputVRange(void); static bool settings_setInputVRange(void);
static void settings_displayInputVRange(void); static void settings_displayInputVRange(void);
static bool settings_setInputMinVRange(void);
static void settings_displayInputMinVRange(void);
#endif #endif
#ifdef POW_QC #ifdef POW_QC
static bool settings_setQCInputV(void); static bool settings_setQCInputV(void);
@@ -73,10 +75,12 @@ static void settings_displayHallEffect(void);
static bool settings_setHallEffect(void); static bool settings_setHallEffect(void);
#endif #endif
// Menu functions // Menu functions
static void settings_displaySolderingMenu(void);
static bool settings_enterSolderingMenu(void);
static void settings_displayPowerMenu(void); static void settings_displayPowerMenu(void);
static bool settings_enterPowerMenu(void); static bool settings_enterPowerMenu(void);
static void settings_displaySolderingMenu(void);
static bool settings_enterSolderingMenu(void);
static void settings_displayPowerSavingMenu(void);
static bool settings_enterPowerSavingMenu(void);
static void settings_displayUIMenu(void); static void settings_displayUIMenu(void);
static bool settings_enterUIMenu(void); static bool settings_enterUIMenu(void);
static void settings_displayAdvancedMenu(void); static void settings_displayAdvancedMenu(void);
@@ -84,7 +88,9 @@ static bool settings_enterAdvancedMenu(void);
/* /*
* Root Settings Menu * Root Settings Menu
* *
* Power Menu
* Power Source * Power Source
*
* Soldering * Soldering
* Boost Mode Enabled * Boost Mode Enabled
* Boost Mode Temp * Boost Mode Temp
@@ -121,26 +127,34 @@ static bool settings_enterAdvancedMenu(void);
*/ */
const menuitem rootSettingsMenu[]{ const menuitem rootSettingsMenu[]{
/* /*
* Power Source * Power Menu
* Soldering Menu * Soldering Menu
* Power Saving Menu * Power Saving Menu
* UI Menu * UI Menu
* Advanced Menu * Advanced Menu
* Exit * Exit
*/ */
#ifdef POW_DC {(const char *)NULL, settings_enterPowerMenu, settings_displayPowerMenu}, /*Power*/
{(const char *)SettingsDescriptions[0], settings_setInputVRange, settings_displayInputVRange}, /*Voltage input*/
#endif
#ifdef POW_QC
{(const char *)SettingsDescriptions[19], settings_setQCInputV, settings_displayQCInputV}, /*Voltage input*/
#endif
{(const char *)NULL, settings_enterSolderingMenu, settings_displaySolderingMenu}, /*Soldering*/ {(const char *)NULL, settings_enterSolderingMenu, settings_displaySolderingMenu}, /*Soldering*/
{(const char *)NULL, settings_enterPowerMenu, settings_displayPowerMenu}, /*Sleep Options Menu*/ {(const char *)NULL, settings_enterPowerSavingMenu, settings_displayPowerSavingMenu}, /*Sleep Options Menu*/
{(const char *)NULL, settings_enterUIMenu, settings_displayUIMenu}, /*UI Menu*/ {(const char *)NULL, settings_enterUIMenu, settings_displayUIMenu}, /*UI Menu*/
{(const char *)NULL, settings_enterAdvancedMenu, settings_displayAdvancedMenu}, /*Advanced Menu*/ {(const char *)NULL, settings_enterAdvancedMenu, settings_displayAdvancedMenu}, /*Advanced Menu*/
{NULL, NULL, NULL} // end of menu marker. DO NOT REMOVE {NULL, NULL, NULL} // end of menu marker. DO NOT REMOVE
}; };
const menuitem powerMenu[] = {
/*
* Power Source
*/
#ifdef POW_DC
{(const char *)SettingsDescriptions[0], settings_setInputVRange, settings_displayInputVRange}, /*Voltage input*/
{(const char *)SettingsDescriptions[28], settings_setInputMinVRange, settings_displayInputMinVRange}, /*Minimum voltage input*/
#endif
#ifdef POW_QC
{(const char *)SettingsDescriptions[19], settings_setQCInputV, settings_displayQCInputV}, /*Voltage input*/
#endif
{NULL, NULL, NULL} // end of menu marker. DO NOT REMOVE
};
const menuitem solderingMenu[] = { const menuitem solderingMenu[] = {
/* /*
* Boost Mode Enabled * Boost Mode Enabled
@@ -165,14 +179,15 @@ const menuitem UIMenu[] = {
* Cooldown blink * Cooldown blink
* Reverse Temp change buttons + - * Reverse Temp change buttons + -
*/ */
{(const char *)SettingsDescriptions[5], settings_setTempF, settings_displayTempF}, /* Temperature units, this has to be the first element in the array to work with the logic in settings_enterUIMenu() */ {(const char *)SettingsDescriptions[5], settings_setTempF,
settings_displayTempF}, /* Temperature units, this has to be the first element in the array to work with the logic in settings_enterUIMenu() */
{(const char *)SettingsDescriptions[7], settings_setDisplayRotation, settings_displayDisplayRotation}, /*Display Rotation*/ {(const char *)SettingsDescriptions[7], settings_setDisplayRotation, settings_displayDisplayRotation}, /*Display Rotation*/
{(const char *)SettingsDescriptions[10], settings_setCoolingBlinkEnabled, settings_displayCoolingBlinkEnabled}, /*Cooling blink warning*/ {(const char *)SettingsDescriptions[10], settings_setCoolingBlinkEnabled, settings_displayCoolingBlinkEnabled}, /*Cooling blink warning*/
{(const char *)SettingsDescriptions[15], settings_setScrollSpeed, settings_displayScrollSpeed}, /*Scroll Speed for descriptions*/ {(const char *)SettingsDescriptions[15], settings_setScrollSpeed, settings_displayScrollSpeed}, /*Scroll Speed for descriptions*/
{(const char *)SettingsDescriptions[21], settings_setReverseButtonTempChangeEnabled, settings_displayReverseButtonTempChangeEnabled}, /* Reverse Temp change buttons + - */ {(const char *)SettingsDescriptions[21], settings_setReverseButtonTempChangeEnabled, settings_displayReverseButtonTempChangeEnabled}, /* Reverse Temp change buttons + - */
{NULL, NULL, NULL} // end of menu marker. DO NOT REMOVE {NULL, NULL, NULL} // end of menu marker. DO NOT REMOVE
}; };
const menuitem PowerMenu[] = { const menuitem PowerSavingMenu[] = {
/* /*
* Sleep Temp * Sleep Temp
* Sleep Time * Sleep Time
@@ -293,6 +308,8 @@ static int userConfirmation(const char *message) {
#ifdef POW_DC #ifdef POW_DC
static bool settings_setInputVRange(void) { static bool settings_setInputVRange(void) {
systemSettings.minDCVoltageCells = (systemSettings.minDCVoltageCells + 1) % 5; systemSettings.minDCVoltageCells = (systemSettings.minDCVoltageCells + 1) % 5;
if (systemSettings.minDCVoltageCells == 1 && systemSettings.minVoltageCells < 30)
systemSettings.minVoltageCells = 30;
return systemSettings.minDCVoltageCells == 4; return systemSettings.minDCVoltageCells == 4;
} }
@@ -306,6 +323,27 @@ static void settings_displayInputVRange(void) {
OLED::print(SymbolDC); OLED::print(SymbolDC);
} }
} }
static bool settings_setInputMinVRange(void) {
systemSettings.minVoltageCells = (systemSettings.minVoltageCells + 1) % 38;
if (systemSettings.minDCVoltageCells == 1 && systemSettings.minVoltageCells < 30)
systemSettings.minVoltageCells = 30;
else if(systemSettings.minVoltageCells < 24)
systemSettings.minVoltageCells = 24;
return systemSettings.minVoltageCells == 37;
}
static void settings_displayInputMinVRange(void) {
if (systemSettings.minDCVoltageCells) {
printShortDescription(28, 4);
OLED::printNumber(systemSettings.minVoltageCells / 10, 2);
OLED::print(SymbolDot);
OLED::printNumber(systemSettings.minVoltageCells % 10, 1);
} else {
printShortDescription(28, 5);
OLED::print(SettingNAChar);
}
}
#endif #endif
#ifdef POW_QC #ifdef POW_QC
static bool settings_setQCInputV(void) { static bool settings_setQCInputV(void) {
@@ -822,9 +860,15 @@ static void settings_displayTempChangeShortStep(void) {
} }
static bool settings_setTempChangeLongStep(void) { static bool settings_setTempChangeLongStep(void) {
if (systemSettings.TempChangeLongStep == TEMP_CHANGE_SHORT_STEP) {
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP / 2;
} else if (systemSettings.TempChangeLongStep == TEMP_CHANGE_LONG_STEP / 2) {
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP;
} else {
systemSettings.TempChangeLongStep += TEMP_CHANGE_LONG_STEP; systemSettings.TempChangeLongStep += TEMP_CHANGE_LONG_STEP;
}
if (systemSettings.TempChangeLongStep > TEMP_CHANGE_LONG_STEP_MAX) { if (systemSettings.TempChangeLongStep > TEMP_CHANGE_LONG_STEP_MAX) {
systemSettings.TempChangeLongStep = TEMP_CHANGE_LONG_STEP; // loop back at TEMP_CHANGE_LONG_STEP_MAX systemSettings.TempChangeLongStep = TEMP_CHANGE_SHORT_STEP; // loop back at TEMP_CHANGE_LONG_STEP_MAX
} }
return systemSettings.TempChangeLongStep == TEMP_CHANGE_LONG_STEP_MAX; return systemSettings.TempChangeLongStep == TEMP_CHANGE_LONG_STEP_MAX;
} }
@@ -897,22 +941,27 @@ static void displayMenu(size_t index) {
} }
static void settings_displayCalibrateVIN(void) { printShortDescription(13, 5); } static void settings_displayCalibrateVIN(void) { printShortDescription(13, 5); }
static void settings_displaySolderingMenu(void) { displayMenu(0); } static void settings_displayPowerMenu(void) { displayMenu(0); }
static bool settings_enterPowerMenu(void) {
gui_Menu(powerMenu);
return false;
}
static void settings_displaySolderingMenu(void) { displayMenu(1); }
static bool settings_enterSolderingMenu(void) { static bool settings_enterSolderingMenu(void) {
gui_Menu(solderingMenu); gui_Menu(solderingMenu);
return false; return false;
} }
static void settings_displayPowerMenu(void) { displayMenu(1); } static void settings_displayPowerSavingMenu(void) { displayMenu(2); }
static bool settings_enterPowerMenu(void) { static bool settings_enterPowerSavingMenu(void) {
gui_Menu(PowerMenu); gui_Menu(PowerSavingMenu);
return false; return false;
} }
static void settings_displayUIMenu(void) { displayMenu(2); } static void settings_displayUIMenu(void) { displayMenu(3); }
static bool settings_enterUIMenu(void) { static bool settings_enterUIMenu(void) {
gui_Menu(HasFahrenheit ? UIMenu : UIMenu + 1); gui_Menu(HasFahrenheit ? UIMenu : UIMenu + 1);
return false; return false;
} }
static void settings_displayAdvancedMenu(void) { displayMenu(3); } static void settings_displayAdvancedMenu(void) { displayMenu(4); }
static bool settings_enterAdvancedMenu(void) { static bool settings_enterAdvancedMenu(void) {
gui_Menu(advancedMenu); gui_Menu(advancedMenu);
return false; return false;

View File

@@ -70,8 +70,7 @@ void gui_drawTipTemp(bool symbol) {
uint32_t Temp = 0; uint32_t Temp = 0;
if (systemSettings.temperatureInF) { if (systemSettings.temperatureInF) {
Temp = TipThermoModel::getTipInF(); Temp = TipThermoModel::getTipInF();
} else } else {
{
Temp = TipThermoModel::getTipInC(); Temp = TipThermoModel::getTipInC();
} }
@@ -160,10 +159,10 @@ static void gui_drawBatteryIcon() {
uint8_t cellCount = systemSettings.minDCVoltageCells + 2; uint8_t cellCount = systemSettings.minDCVoltageCells + 2;
uint32_t cellV = getInputVoltageX10(systemSettings.voltageDiv, 0) / cellCount; uint32_t cellV = getInputVoltageX10(systemSettings.voltageDiv, 0) / cellCount;
// Should give us approx cell voltage X10 // Should give us approx cell voltage X10
// Range is 42 -> 33 = 9 steps therefore we will use battery 0-9 // Range is 42 -> Minimum voltage setting (systemSettings.minVoltageCells) = 9 steps therefore we will use battery 0-9
if (cellV < 33) if (cellV < systemSettings.minVoltageCells)
cellV = 33; cellV = systemSettings.minVoltageCells;
cellV -= 33; // Should leave us a number of 0-9 cellV -= systemSettings.minVoltageCells; // Should leave us a number of 0-9
if (cellV > 9) if (cellV > 9)
cellV = 9; cellV = 9;
OLED::drawBattery(cellV + 1); OLED::drawBattery(cellV + 1);
@@ -274,8 +273,7 @@ static void gui_solderingTempAdjust() {
OLED::printNumber(systemSettings.SolderingTemp, 3); OLED::printNumber(systemSettings.SolderingTemp, 3);
if (systemSettings.temperatureInF) if (systemSettings.temperatureInF)
OLED::drawSymbol(0); OLED::drawSymbol(0);
else else {
{
OLED::drawSymbol(1); OLED::drawSymbol(1);
} }
OLED::print(SymbolSpace); OLED::print(SymbolSpace);
@@ -410,7 +408,7 @@ static bool shouldBeSleeping(bool inAutoStart) {
} }
} }
if (lastMovementTime > 0 || lastButtonTime > 0) { if (lastMovementTime > 0 || lastButtonTime > 0) {
if ((xTaskGetTickCount() - lastMovementTime) > getSleepTimeout() && (xTaskGetTickCount() - lastButtonTime) > getSleepTimeout()) { if (((xTaskGetTickCount() - lastMovementTime) > getSleepTimeout()) && ((xTaskGetTickCount() - lastButtonTime) > getSleepTimeout())) {
return true; return true;
} }
} }
@@ -419,7 +417,7 @@ static bool shouldBeSleeping(bool inAutoStart) {
#ifdef HALL_SENSOR #ifdef HALL_SENSOR
// If the hall effect sensor is enabled in the build, check if its over // If the hall effect sensor is enabled in the build, check if its over
// threshold, and if so then we force sleep // threshold, and if so then we force sleep
if (lookupHallEffectThreshold()) { if (getHallSensorFitted() && lookupHallEffectThreshold()) {
int16_t hallEffectStrength = getRawHallEffect(); int16_t hallEffectStrength = getRawHallEffect();
if (hallEffectStrength < 0) if (hallEffectStrength < 0)
hallEffectStrength = -hallEffectStrength; hallEffectStrength = -hallEffectStrength;

View File

@@ -319,7 +319,7 @@ $(OUT_OBJS_S): $(OUTPUT_DIR)/%.o: %.S Makefile
@echo 'Building file: $<' @echo 'Building file: $<'
@$(AS) -c $(AFLAGS) $< -o $@ @$(AS) -c $(AFLAGS) $< -o $@
Core/Gen/Translation.%.cpp: ../Translations/translation_%.json Makefile ../Translations/make_translation.py ../Translations/translations_commons.js Core/Gen/Translation.%.cpp: ../Translations/translation_%.json Makefile ../Translations/make_translation.py ../Translations/translations_commons.js ../Translations/fontTables.py ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf
@test -d $(@D) || mkdir -p $(@D) @test -d $(@D) || mkdir -p $(@D)
@echo 'Generating translations for language $*' @echo 'Generating translations for language $*'
@python3 ../Translations/make_translation.py -o $(PWD)/$@ $* @python3 ../Translations/make_translation.py -o $(PWD)/$@ $*

View File

@@ -89,6 +89,7 @@
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0 #define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
#define CUT_OUT_SETTING 0 // default to no cut-off voltage #define CUT_OUT_SETTING 0 // default to no cut-off voltage
#define RECOM_VOL_CELL 33 // Minimum voltage per cell (Recommended 3.3V (33))
#define TEMPERATURE_INF 0 // default to 0 #define TEMPERATURE_INF 0 // default to 0
#define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow #define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow

View File

@@ -4,4 +4,4 @@
* i.e.: BUILD_VERSION = 'Rel. v2.08' --> Will generated to: 'v2.08.1a2b3c4' * i.e.: BUILD_VERSION = 'Rel. v2.08' --> Will generated to: 'v2.08.1a2b3c4'
*/ */
#define BUILD_VERSION "v2.14" #define BUILD_VERSION "v2.15"