Add debug view

This commit is contained in:
Jasper Blanckenburg 2023-03-21 18:37:50 +01:00
parent 629fcb9098
commit ff37c8503d
49 changed files with 1603 additions and 289 deletions

View File

@ -350,10 +350,13 @@ TouchGFX/generated/fonts/src/Table_verdana_20_4bpp.cpp \
TouchGFX/generated/fonts/src/UnmappedDataFont.cpp \
TouchGFX/generated/gui_generated/src/ami_screen/AMIViewBase.cpp \
TouchGFX/generated/gui_generated/src/common/FrontendApplicationBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DebugViewItemBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DebugViewLineBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DriverViewFieldBase.cpp \
TouchGFX/generated/gui_generated/src/containers/DriverViewFieldSelectionBase.cpp \
TouchGFX/generated/gui_generated/src/containers/MissionSelectElementBase.cpp \
TouchGFX/generated/gui_generated/src/containers/TireTempBase.cpp \
TouchGFX/generated/gui_generated/src/debugview_screen/DebugViewViewBase.cpp \
TouchGFX/generated/gui_generated/src/driverview_screen/DriverViewViewBase.cpp \
TouchGFX/generated/gui_generated/src/missionselect_screen/MissionSelectViewBase.cpp \
TouchGFX/generated/images/src/BitmapDatabase.cpp \
@ -372,10 +375,14 @@ TouchGFX/gui/src/ami_screen/AMIPresenter.cpp \
TouchGFX/gui/src/ami_screen/AMIView.cpp \
TouchGFX/gui/src/common/DataField.cpp \
TouchGFX/gui/src/common/FrontendApplication.cpp \
TouchGFX/gui/src/containers/DebugViewItem.cpp \
TouchGFX/gui/src/containers/DebugViewLine.cpp \
TouchGFX/gui/src/containers/DriverViewField.cpp \
TouchGFX/gui/src/containers/DriverViewFieldSelection.cpp \
TouchGFX/gui/src/containers/MissionSelectElement.cpp \
TouchGFX/gui/src/containers/TireTemp.cpp \
TouchGFX/gui/src/debugview_screen/DebugViewPresenter.cpp \
TouchGFX/gui/src/debugview_screen/DebugViewView.cpp \
TouchGFX/gui/src/driverview_screen/DriverViewPresenter.cpp \
TouchGFX/gui/src/driverview_screen/DriverViewView.cpp \
TouchGFX/gui/src/missionselect_screen/MissionSelectPresenter.cpp \

View File

@ -4,7 +4,13 @@
<Language Id="GB" />
</Languages>
<Texts>
<TextGroup Id="DriverViewFields">
<TextGroup Id="DataFields">
<Text Id="DebugViewField_Title" Alignment="Left" TypographyId="Default">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="DriverViewField_Title" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="Field_BBal" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">BBAL</Translation>
</Text>
@ -68,7 +74,10 @@
<Text Id="NumberWildcard" Alignment="Center" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="DefaultWildcard" Alignment="Center" TypographyId="Default">
<Text Id="DefaultWildcard_Centered" Alignment="Center" TypographyId="Default">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="DefaultWildcard_RightAligned" Alignment="Right" TypographyId="Default">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="Field_TSCurrent" Alignment="Center" TypographyId="Chinat_Small">
@ -128,12 +137,6 @@
</Text>
</TextGroup>
<TextGroup Id="Unsorted">
<Text Id="__SingleUse_PNKR" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">????</Translation>
</Text>
<Text Id="__SingleUse_0FBJ" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">FIELD</Translation>
</Text>
<Text Id="__SingleUse_4OBM" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">LV</Translation>
</Text>
@ -160,7 +163,7 @@
<Typographies>
<Typography Id="Default" Font="verdana.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="! &quot;" WildcardCharacterRanges="#-~" />
<Typography Id="Chinat_Large" Font="CHINN___.ttf" Size="30" Bpp="4" Direction="LTR" FallbackCharacter="?" />
<Typography Id="Chinat_Small" Font="CHINN___.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" />
<Typography Id="Chinat_Small" Font="CHINN___.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="_ ." WildcardCharacterRanges="0-9,a-z,A-Z" />
<Typography Id="Chinat_Huge" Font="CHINN___.ttf" Size="40" Bpp="4" Direction="LTR" FallbackCharacter="?" />
<Typography Id="Numbers" Font="lucon.TTF" Size="50" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=". ," WildcardCharacterRanges="0-9" />
</Typographies>

View File

@ -1,5 +1,15 @@
32
46
48
49
50
51
52
53
54
55
56
57
63
65
66
@ -10,30 +20,47 @@
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
95
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
118
119
120
121
122

View File

@ -1,6 +1,16 @@
AH:0 BA:1 FC:63 EC:0 FF:0 CF:1
32
46
48
49
50
51
52
53
54
55
56
57
63
65
66
@ -11,30 +21,47 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:1
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
95
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

View File

@ -4,6 +4,24 @@ FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
// Unicode: [0x0020, space]
// (Has no glyph data)
// Unicode: [0x002E, period]
0xD6, 0xDD, 0x07, 0xF7, 0xFF, 0x08, 0xF7, 0xFF, 0x08, 0xF7, 0xFF, 0x08,
// Unicode: [0x0030, zero]
0x00, 0xB4, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x3A, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xEF, 0x04, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xF6, 0xFF,
0x33, 0x33, 0x33, 0x33, 0x33, 0x53, 0xFF, 0x2F, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
0xFF, 0x3F, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0xF7, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0x4F,
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0x3F, 0xF5, 0xFF, 0x55, 0x55, 0x55, 0x55,
0x55, 0x75, 0xFF, 0x2F, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0x50, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xA3, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x3B, 0x00,
// Unicode: [0x0031, one]
0x00, 0x40, 0xFB, 0x8D, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x09, 0x70, 0xFF, 0xFF, 0xFF, 0x1F, 0xC1,
0xFF, 0xAF, 0xFF, 0x3F, 0x10, 0xFC, 0x36, 0xFF, 0x4F, 0x00, 0x51, 0x30, 0xFF, 0x4F, 0x00, 0x00,
0x30, 0xFF, 0x4F, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0x00, 0x00, 0x30,
0xFF, 0x4F, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0x00, 0x00, 0x30, 0xFF,
0x4F,
// Unicode: [0x0032, two]
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x32, 0x33,
@ -14,6 +32,76 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x33, 0x33, 0x33, 0x03, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF6, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x0F,
// Unicode: [0x0033, three]
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x3A, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x05, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0x32, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x63, 0xFF, 0x3F, 0x53, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x75,
0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xF8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0x4F, 0x42, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x74, 0xFF, 0x3F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x3B, 0x00,
// Unicode: [0x0034, four]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFB, 0xCF, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xCF, 0x00, 0xF6, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0xF2, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
0x00, 0xD6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x32, 0x44, 0x44, 0x44,
0x44, 0xFC, 0xCF, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xCF, 0x00,
// Unicode: [0x0035, five]
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x07, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF7, 0xFF,
0x34, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x01, 0xF7, 0xFF, 0x77, 0x77, 0x77, 0x77, 0x77, 0x67,
0x02, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x3F, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x52, 0xFF, 0x3F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE,
0x17, 0x00,
// Unicode: [0x0036, six]
0x00, 0xB4, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x09, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0xF6, 0xEF,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x02, 0xF7, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x00, 0xF8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E,
0xF7, 0xFF, 0x66, 0x66, 0x66, 0x66, 0x66, 0x86, 0xFF, 0x4F, 0xF6, 0xEF, 0x33, 0x33, 0x33, 0x33,
0x33, 0x53, 0xFF, 0x4F, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0x70, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xD6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x3B, 0x00,
// Unicode: [0x0037, seven]
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0A, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x31, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0xB4, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFD,
0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xF9, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0xD4, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xFF, 0xFF, 0x7E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xFD, 0xFF, 0xBF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFA, 0xFF, 0xEF,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xFF, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1,
0xFF, 0xFF, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFE, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x0038, eight]
0x00, 0xB4, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x4B, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x06, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E, 0xF6, 0xFF,
0x34, 0x33, 0x33, 0x33, 0x33, 0x73, 0xFF, 0x3F, 0xF5, 0xFF, 0x78, 0x77, 0x77, 0x77, 0x77, 0xA7,
0xFF, 0x1F, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xB0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E,
0xF6, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x3F, 0xF6, 0xFF, 0x46, 0x44, 0x44, 0x44,
0x44, 0x84, 0xFF, 0x3F, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0x50, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x04, 0x00, 0x92, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0x29, 0x00,
// Unicode: [0x0039, nine]
0x00, 0xC4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x3B, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x04, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xF6, 0xFF,
0x33, 0x33, 0x33, 0x33, 0x33, 0x53, 0xFF, 0x3F, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
0xFF, 0x4F, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0xC0, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x20, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F,
0x00, 0x40, 0x66, 0x66, 0x66, 0x66, 0x66, 0x86, 0xFF, 0x4F, 0x20, 0x33, 0x33, 0x33, 0x33, 0x33,
0x33, 0x53, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xC0, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x3A, 0x00,
// Unicode: [0x003F, question]
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x44, 0x44,
@ -107,6 +195,26 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
// Unicode: [0x0049, I]
0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF,
0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF,
// Unicode: [0x004A, J]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF,
0x82, 0x88, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0xF2, 0xFF, 0x49, 0x44, 0x44, 0x44,
0x44, 0x44, 0xFC, 0xBF, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x20, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0xA2, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x01,
// Unicode: [0x004B, K]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x50, 0xFD, 0xFF, 0xFF, 0x2A, 0xF7, 0xFF, 0x00, 0x00, 0x40, 0xFC,
0xFF, 0xFF, 0x3B, 0x00, 0xF7, 0xFF, 0x00, 0x20, 0xFA, 0xFF, 0xFF, 0x5D, 0x00, 0x00, 0xF7, 0xFF,
0x00, 0xF8, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xC1, 0xFF, 0xFF, 0x9F, 0x01, 0x00,
0x00, 0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0xAF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFA, 0xFF, 0x9F, 0x02, 0x00, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xD2, 0xFF, 0xFF, 0x8E, 0x01, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x10, 0xFA, 0xFF, 0xFF,
0x6E, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x30, 0xFB, 0xFF, 0xFF, 0x5D, 0x00, 0x00, 0xF7, 0xFF,
0x00, 0x00, 0x40, 0xFC, 0xFF, 0xFF, 0x3C, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x60, 0xFD, 0xFF,
0xFF, 0x2A,
// Unicode: [0x004C, L]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
@ -157,6 +265,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x03, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0051, Q]
0x00, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x3A, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E,
0x00, 0xF6, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0xFF, 0x3F, 0x00, 0xF7, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF,
0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0xFF, 0x4F, 0x00, 0xF6, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0xFF, 0x6F, 0x02, 0xF3, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0xC5, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A,
// Unicode: [0x0052, R]
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x06, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF7, 0xFF,
@ -187,6 +305,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF6, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x01, 0x00,
0x00, 0x00,
// Unicode: [0x0055, U]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF,
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF5, 0xFF, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0xFA, 0xEF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x50, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0xB4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x01,
// Unicode: [0x0056, V]
0xF2, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0x1E, 0x90, 0xFF, 0x5F, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0x06, 0x10, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xDF, 0x00, 0x00, 0xF7,
@ -197,6 +325,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC1, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xE9, 0x7D, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x0057, W]
0xFE, 0x8F, 0x00, 0x80, 0xED, 0x5C, 0x00, 0xD0, 0xFF, 0x0A, 0xFC, 0xBF, 0x00, 0xF9, 0xFF, 0xFF,
0x05, 0xF0, 0xFF, 0x08, 0xFA, 0xDF, 0x20, 0xFF, 0xFF, 0xFF, 0x0C, 0xF2, 0xFF, 0x06, 0xF8, 0xFF,
0x50, 0xFF, 0xEF, 0xFF, 0x1F, 0xF4, 0xFF, 0x04, 0xF6, 0xFF, 0x82, 0xFF, 0x8F, 0xFF, 0x4F, 0xF6,
0xFF, 0x01, 0xF4, 0xFF, 0xB4, 0xFF, 0x3E, 0xFF, 0x6F, 0xF8, 0xEF, 0x00, 0xF2, 0xFF, 0xD6, 0xFF,
0x0B, 0xFF, 0x9F, 0xFA, 0xCF, 0x00, 0xF0, 0xFF, 0xF9, 0xFF, 0x08, 0xFC, 0xCF, 0xFC, 0xAF, 0x00,
0xD0, 0xFF, 0xFD, 0xFF, 0x05, 0xF9, 0xEF, 0xFE, 0x8F, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x02, 0xF5,
0xFF, 0xFF, 0x6F, 0x00, 0x60, 0xFF, 0xFF, 0xCF, 0x00, 0xF1, 0xFF, 0xFF, 0x2F, 0x00, 0x10, 0xFD,
0xFF, 0x5F, 0x00, 0x80, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xB2, 0xDF, 0x06, 0x00, 0x00, 0xE8, 0x9E,
0x01, 0x00,
// Unicode: [0x0058, X]
0xFA, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0x06, 0xB0, 0xFF, 0xBF, 0x00, 0x00, 0x00,
0xE2, 0xFF, 0x6F, 0x00, 0x00, 0xFB, 0xFF, 0x09, 0x00, 0x10, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xC1,
@ -217,6 +355,18 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x005A, Z]
0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x3F, 0x41, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x96, 0xFC, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x10, 0x84, 0xEB, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x41, 0xA7, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x08, 0x10, 0xC8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x4A, 0x00, 0xD1, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0x59, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xBE, 0x47, 0x01, 0x00,
0x00, 0x00, 0x00, 0xFB, 0xFF, 0xDF, 0x69, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x03, 0xF8, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0B, 0x10, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B,
// Unicode: [0x005F, underscore]
0x55, 0x55, 0x55, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
// Unicode: [0x0061, a]
0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0x01, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0B, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x40, 0x44,
@ -227,6 +377,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x44, 0x44, 0xFC, 0xCF, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xA0, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF,
// Unicode: [0x0062, b]
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x8C, 0x01, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1D, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xF7, 0xFF,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xFD, 0xBF, 0xF7, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xFD, 0xAF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF,
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xEF, 0xF7, 0xFF, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0xFB, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2E, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x02,
// Unicode: [0x0063, c]
0x00, 0xB5, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xF5, 0xFF,
@ -257,6 +417,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x44, 0x44, 0x44, 0x14, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x70, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xC4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x3F,
// Unicode: [0x0066, f]
0x00, 0xA4, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF6, 0xFF,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x04, 0xF7, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x04, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x0067, g]
0x00, 0x93, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xF6, 0xFF,
@ -267,9 +437,29 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x44, 0x44, 0xFC, 0xAF, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6F, 0x50, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0xA3, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x6C, 0x00,
// Unicode: [0x0068, h]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0xFB, 0xDF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF9, 0xDF,
// Unicode: [0x0069, i]
0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF,
0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF, 0xF7, 0xFF,
// Unicode: [0x006A, j]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF,
0x82, 0x88, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xBF, 0xF2, 0xFF, 0x49, 0x44, 0x44, 0x44,
0x44, 0x44, 0xFC, 0xBF, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x20, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0xA2, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x01,
// Unicode: [0x006B, k]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x50, 0xFD, 0xFF, 0xFF, 0x2A, 0xF7, 0xFF, 0x00, 0x00, 0x40, 0xFC,
0xFF, 0xFF, 0x3B, 0x00, 0xF7, 0xFF, 0x00, 0x20, 0xFA, 0xFF, 0xFF, 0x5D, 0x00, 0x00, 0xF7, 0xFF,
@ -288,6 +478,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x01,
0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0xA3, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
// Unicode: [0x006D, m]
0x10, 0xE9, 0xAE, 0x01, 0x00, 0x00, 0x40, 0xEB, 0x7D, 0x00, 0xC0, 0xFF, 0xFF, 0x1D, 0x00, 0x00,
0xF3, 0xFF, 0xFF, 0x07, 0xF4, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x0E, 0xF7, 0xFF,
0xFF, 0xCF, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x2F, 0xF7, 0xFF, 0xFC, 0xFF, 0x02, 0x70, 0xFF, 0xBF,
0xFF, 0x2F, 0xF7, 0xFF, 0xF6, 0xFF, 0x07, 0xC0, 0xFF, 0x6F, 0xFF, 0x2F, 0xF7, 0xFF, 0xE1, 0xFF,
0x0C, 0xF2, 0xFF, 0x5A, 0xFF, 0x2F, 0xF7, 0xFF, 0xA0, 0xFF, 0x2F, 0xF7, 0xFF, 0x55, 0xFF, 0x2F,
0xF7, 0xFF, 0x40, 0xFF, 0x6F, 0xFC, 0xEF, 0x50, 0xFF, 0x2F, 0xF7, 0xFF, 0x00, 0xFD, 0xDF, 0xFF,
0x9F, 0x50, 0xFF, 0x2F, 0xF7, 0xFF, 0x00, 0xF7, 0xFF, 0xFF, 0x3F, 0x50, 0xFF, 0x2F, 0xF7, 0xFF,
0x00, 0xC1, 0xFF, 0xFF, 0x09, 0x50, 0xFF, 0x2F, 0xF7, 0xFF, 0x00, 0x10, 0xEA, 0x8E, 0x00, 0x50,
0xFF, 0x2F,
// Unicode: [0x006E, n]
0x20, 0xEA, 0x9E, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xE1, 0xFF, 0xFF, 0x2D, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x7F, 0xF6, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xF7, 0xFF,
@ -318,6 +518,16 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x44, 0x34, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x0071, q]
0x00, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x3A, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E,
0x00, 0xF6, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0xFF, 0x3F, 0x00, 0xF7, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF,
0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x4F, 0x00, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0xFF, 0x4F, 0x00, 0xF6, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x64, 0xFF, 0x6F, 0x02, 0xF3, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0xC5, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A,
// Unicode: [0x0072, r]
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7D, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0A, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0xF7, 0xFF,
@ -367,5 +577,45 @@ KEEP extern const uint8_t unicodes_CHINN____20_4bpp_0[] FONT_GLYPH_LOCATION_FLAS
0x00, 0x00, 0xB0, 0xFF, 0x3F, 0xF7, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xCF, 0xFE,
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC1, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xE9, 0x7D, 0x00, 0x00,
0x00, 0x00
0x00, 0x00,
// Unicode: [0x0077, w]
0xFE, 0xAF, 0x00, 0x00, 0x91, 0xEE, 0x1A, 0x00, 0x00, 0xF9, 0xCF, 0xFB, 0xDF, 0x00, 0x00, 0xFC,
0xFF, 0xDF, 0x00, 0x00, 0xFC, 0x9F, 0xF8, 0xFF, 0x01, 0x40, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xFF,
0x6F, 0xF5, 0xFF, 0x04, 0xA0, 0xFF, 0xEF, 0xFF, 0x0A, 0x30, 0xFF, 0x3F, 0xF2, 0xFF, 0x07, 0xE0,
0xFF, 0x9B, 0xFF, 0x1E, 0x60, 0xFF, 0x1F, 0xE0, 0xFF, 0x0A, 0xF4, 0xFF, 0x56, 0xFF, 0x5F, 0x90,
0xFF, 0x0C, 0xB0, 0xFF, 0x0C, 0xF9, 0xFF, 0x11, 0xFF, 0xAF, 0xD0, 0xFF, 0x09, 0x80, 0xFF, 0x1F,
0xFE, 0xBF, 0x00, 0xFB, 0xEF, 0xF1, 0xFF, 0x06, 0x50, 0xFF, 0x7F, 0xFF, 0x7F, 0x00, 0xF6, 0xFF,
0xF8, 0xFF, 0x03, 0x20, 0xFF, 0xEF, 0xFF, 0x2F, 0x00, 0xF2, 0xFF, 0xFE, 0xFF, 0x01, 0x00, 0xFD,
0xFF, 0xFF, 0x0C, 0x00, 0xC0, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x04, 0x00, 0x40,
0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x60, 0xED, 0x5C, 0x00, 0x00, 0x00, 0xC5, 0xCE, 0x05, 0x00,
// Unicode: [0x0078, x]
0xFA, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0x06, 0xB0, 0xFF, 0xBF, 0x00, 0x00, 0x00,
0xE2, 0xFF, 0x6F, 0x00, 0x00, 0xFB, 0xFF, 0x09, 0x00, 0x10, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xC1,
0xFF, 0x8F, 0x00, 0xC1, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0x06, 0xFA, 0xFF, 0x09,
0x00, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0x9F, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF,
0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0x9F, 0xFF, 0xAF, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFC, 0xFF, 0x07, 0xFB, 0xFF, 0x09, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0x9F, 0x00, 0xD1,
0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x0B, 0x00, 0x20, 0xFE, 0xFF, 0x05, 0x00, 0x80, 0xFF,
0xDF, 0x01, 0x00, 0x00, 0xF4, 0xFF, 0x4F, 0x00, 0xF6, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x50, 0xFF,
0xEF, 0x03,
// Unicode: [0x0079, y]
0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF7, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0xF6, 0xFF, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0xFA, 0xEF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x70, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0x42, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0xFA, 0xDF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xF7, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x8D, 0x01,
// Unicode: [0x007A, z]
0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x3F, 0x41, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x96, 0xFC, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x10, 0x84, 0xEB, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x41, 0xA7, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x08, 0x10, 0xC8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x4A, 0x00, 0xD1, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0x59, 0x02, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xBE, 0x47, 0x01, 0x00,
0x00, 0x00, 0x00, 0xFB, 0xFF, 0xDF, 0x69, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x03, 0xF8, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0B, 0x10, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B
};

View File

@ -5,44 +5,71 @@
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_CHINN____20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0x0020, 0, 0, 0, 0, 5, 0, 0, 0x00 }, // space
{ 0, 0x0032, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // two
{ 130, 0x003F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // question
{ 260, 0x0041, 20, 13, 13, -1, 18, 0, 0, 0x00 }, // A
{ 390, 0x0042, 20, 13, 13, 0, 21, 0, 0, 0x00 }, // B
{ 520, 0x0043, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // C
{ 650, 0x0044, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // D
{ 780, 0x0045, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // E
{ 910, 0x0046, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // F
{ 1040, 0x0047, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // G
{ 1170, 0x0048, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // H
{ 1300, 0x0049, 4, 13, 13, 0, 5, 0, 0, 0x00 }, // I
{ 1326, 0x004C, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // L
{ 1456, 0x004D, 21, 13, 13, 0, 21, 0, 0, 0x00 }, // M
{ 1599, 0x004E, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // N
{ 1729, 0x004F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // O
{ 1859, 0x0050, 21, 13, 13, 0, 20, 0, 0, 0x00 }, // P
{ 2002, 0x0052, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // R
{ 2132, 0x0053, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // S
{ 2275, 0x0054, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // T
{ 2405, 0x0056, 20, 13, 13, -1, 18, 0, 0, 0x00 }, // V
{ 2535, 0x0058, 19, 13, 13, 0, 19, 0, 0, 0x00 }, // X
{ 2665, 0x0059, 19, 13, 13, -1, 18, 0, 0, 0x00 }, // Y
{ 2795, 0x0061, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // a
{ 2925, 0x0063, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // c
{ 3055, 0x0064, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // d
{ 3185, 0x0065, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // e
{ 3315, 0x0067, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // g
{ 3445, 0x0069, 4, 13, 13, 0, 5, 0, 0, 0x00 }, // i
{ 3471, 0x006B, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // k
{ 3601, 0x006C, 15, 13, 13, 0, 14, 0, 0, 0x00 }, // l
{ 3705, 0x006E, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // n
{ 3835, 0x006F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // o
{ 3965, 0x0070, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // p
{ 4095, 0x0072, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // r
{ 4225, 0x0073, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // s
{ 4368, 0x0074, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // t
{ 4498, 0x0075, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // u
{ 4628, 0x0076, 20, 13, 13, -1, 18, 0, 0, 0x00 } // v
{ 0, 0x002E, 5, 4, 4, 0, 5, 0, 0, 0x00 }, // period
{ 12, 0x0030, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // zero
{ 142, 0x0031, 10, 13, 13, 3, 20, 0, 0, 0x00 }, // one
{ 207, 0x0032, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // two
{ 337, 0x0033, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // three
{ 467, 0x0034, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // four
{ 597, 0x0035, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // five
{ 727, 0x0036, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // six
{ 857, 0x0037, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // seven
{ 987, 0x0038, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // eight
{ 1117, 0x0039, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // nine
{ 1247, 0x003F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // question
{ 1377, 0x0041, 20, 13, 13, -1, 18, 0, 0, 0x00 }, // A
{ 1507, 0x0042, 20, 13, 13, 0, 21, 0, 0, 0x00 }, // B
{ 1637, 0x0043, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // C
{ 1767, 0x0044, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // D
{ 1897, 0x0045, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // E
{ 2027, 0x0046, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // F
{ 2157, 0x0047, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // G
{ 2287, 0x0048, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // H
{ 2417, 0x0049, 4, 13, 13, 0, 5, 0, 0, 0x00 }, // I
{ 2443, 0x004A, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // J
{ 2573, 0x004B, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // K
{ 2703, 0x004C, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // L
{ 2833, 0x004D, 21, 13, 13, 0, 21, 0, 0, 0x00 }, // M
{ 2976, 0x004E, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // N
{ 3106, 0x004F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // O
{ 3236, 0x0050, 21, 13, 13, 0, 20, 0, 0, 0x00 }, // P
{ 3379, 0x0051, 21, 13, 13, 0, 20, 0, 0, 0x00 }, // Q
{ 3522, 0x0052, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // R
{ 3652, 0x0053, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // S
{ 3795, 0x0054, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // T
{ 3925, 0x0055, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // U
{ 4055, 0x0056, 20, 13, 13, -1, 18, 0, 0, 0x00 }, // V
{ 4185, 0x0057, 19, 13, 13, 0, 19, 0, 0, 0x00 }, // W
{ 4315, 0x0058, 19, 13, 13, 0, 19, 0, 0, 0x00 }, // X
{ 4445, 0x0059, 19, 13, 13, -1, 18, 0, 0, 0x00 }, // Y
{ 4575, 0x005A, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // Z
{ 4718, 0x005F, 10, 3, 255, 0, 10, 0, 0, 0x60 }, // underscore
{ 4733, 0x0061, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // a
{ 4863, 0x0062, 20, 13, 13, 0, 21, 0, 0, 0x00 }, // b
{ 4993, 0x0063, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // c
{ 5123, 0x0064, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // d
{ 5253, 0x0065, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // e
{ 5383, 0x0066, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // f
{ 5513, 0x0067, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // g
{ 5643, 0x0068, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // h
{ 5773, 0x0069, 4, 13, 13, 0, 5, 0, 0, 0x00 }, // i
{ 5799, 0x006A, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // j
{ 5929, 0x006B, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // k
{ 6059, 0x006C, 15, 13, 13, 0, 14, 0, 0, 0x00 }, // l
{ 6163, 0x006D, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // m
{ 6293, 0x006E, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // n
{ 6423, 0x006F, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // o
{ 6553, 0x0070, 20, 13, 13, 0, 19, 0, 0, 0x00 }, // p
{ 6683, 0x0071, 21, 13, 13, 0, 20, 0, 0, 0x00 }, // q
{ 6826, 0x0072, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // r
{ 6956, 0x0073, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // s
{ 7099, 0x0074, 20, 13, 13, -1, 19, 0, 0, 0x00 }, // t
{ 7229, 0x0075, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // u
{ 7359, 0x0076, 20, 13, 13, -1, 18, 0, 0, 0x00 }, // v
{ 7489, 0x0077, 22, 13, 13, 0, 22, 0, 0, 0x00 }, // w
{ 7632, 0x0078, 19, 13, 13, 0, 19, 0, 0, 0x00 }, // x
{ 7762, 0x0079, 20, 13, 13, 0, 20, 0, 0, 0x00 }, // y
{ 7892, 0x007A, 22, 13, 13, 0, 22, 0, 0, 0x00 } // z
};
// CHINN____20_4bpp
@ -60,6 +87,6 @@ touchgfx::GeneratedFont& getFont_CHINN____20_4bpp();
touchgfx::GeneratedFont& getFont_CHINN____20_4bpp()
{
static touchgfx::GeneratedFont CHINN____20_4bpp(glyphs_CHINN____20_4bpp, 39, 20, 20, 0, 0, 4, 1, 1, 1, unicodes_CHINN____20_4bpp, kerning_CHINN____20_4bpp, 63, 0, 0, 0);
static touchgfx::GeneratedFont CHINN____20_4bpp(glyphs_CHINN____20_4bpp, 66, 24, 20, 0, 0, 4, 1, 1, 1, unicodes_CHINN____20_4bpp, kerning_CHINN____20_4bpp, 63, 0, 0, 0);
return CHINN____20_4bpp;
}

View File

@ -17,25 +17,37 @@ public:
virtual void changeToStartScreen()
{
gotoDriverViewScreenNoTransition();
gotoMissionSelectScreenNoTransition();
}
// MissionSelect
void gotoMissionSelectScreenNoTransition();
// AMI
void gotoAMIScreenNoTransition();
// DriverView
void gotoDriverViewScreenNoTransition();
// DebugView
void gotoDebugViewScreenNoTransition();
protected:
touchgfx::Callback<FrontendApplicationBase> transitionCallback;
FrontendHeap& frontendHeap;
Model& model;
// MissionSelect
void gotoMissionSelectScreenNoTransitionImpl();
// AMI
void gotoAMIScreenNoTransitionImpl();
// DriverView
void gotoDriverViewScreenNoTransitionImpl();
// DebugView
void gotoDebugViewScreenNoTransitionImpl();
};
#endif // FRONTENDAPPLICATIONBASE_HPP

View File

@ -18,6 +18,8 @@
#include <gui/ami_screen/AMIPresenter.hpp>
#include <gui/driverview_screen/DriverViewView.hpp>
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui/debugview_screen/DebugViewView.hpp>
#include <gui/debugview_screen/DebugViewPresenter.hpp>
/**
@ -43,7 +45,8 @@ public:
typedef touchgfx::meta::TypeList< MissionSelectView,
touchgfx::meta::TypeList< AMIView,
touchgfx::meta::TypeList< DriverViewView,
touchgfx::meta::Nil > >
touchgfx::meta::TypeList< DebugViewView,
touchgfx::meta::Nil > > >
> GeneratedViewTypes;
/**
@ -58,7 +61,8 @@ public:
typedef touchgfx::meta::TypeList< MissionSelectPresenter,
touchgfx::meta::TypeList< AMIPresenter,
touchgfx::meta::TypeList< DriverViewPresenter,
touchgfx::meta::Nil > >
touchgfx::meta::TypeList< DebugViewPresenter,
touchgfx::meta::Nil > > >
> GeneratedPresenterTypes;
/**
@ -81,7 +85,7 @@ public:
virtual void gotoStartScreen(FrontendApplication& app)
{
app.gotoDriverViewScreenNoTransition();
app.gotoMissionSelectScreenNoTransition();
}
protected:
FrontendHeapBase(touchgfx::AbstractPartition& presenters, touchgfx::AbstractPartition& views, touchgfx::AbstractPartition& transitions, FrontendApplication& app)

View File

@ -0,0 +1,33 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef DEBUGVIEWITEMBASE_HPP
#define DEBUGVIEWITEMBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
class DebugViewItemBase : public touchgfx::Container
{
public:
DebugViewItemBase();
virtual ~DebugViewItemBase();
virtual void initialize();
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::TextAreaWithOneWildcard label;
touchgfx::TextAreaWithOneWildcard value;
private:
};
#endif // DEBUGVIEWITEMBASE_HPP

View File

@ -0,0 +1,41 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef DEBUGVIEWLINEBASE_HPP
#define DEBUGVIEWLINEBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/canvas/Line.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
#include <gui/containers/DebugViewItem.hpp>
class DebugViewLineBase : public touchgfx::Container
{
public:
DebugViewLineBase();
virtual ~DebugViewLineBase();
virtual void initialize();
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box bg;
touchgfx::Line line1;
touchgfx::PainterRGB565 line1Painter;
touchgfx::Line line2;
touchgfx::PainterRGB565 line2Painter;
DebugViewItem item1;
DebugViewItem item2;
private:
};
#endif // DEBUGVIEWLINEBASE_HPP

View File

@ -7,7 +7,6 @@
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/BoxWithBorder.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
class DriverViewFieldBase : public touchgfx::Container
@ -26,7 +25,7 @@ protected:
* Member Declarations
*/
touchgfx::BoxWithBorder box;
touchgfx::TextArea title;
touchgfx::TextAreaWithOneWildcard title;
touchgfx::TextAreaWithOneWildcard value;
private:

View File

@ -7,7 +7,7 @@
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <touchgfx/widgets/canvas/Line.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
@ -27,7 +27,7 @@ protected:
* Member Declarations
*/
touchgfx::Box bg;
touchgfx::TextArea name;
touchgfx::TextAreaWithOneWildcard name;
touchgfx::Line line1;
touchgfx::PainterRGB565 line1Painter;
touchgfx::Line line2;

View File

@ -0,0 +1,62 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef DEBUGVIEWVIEWBASE_HPP
#define DEBUGVIEWVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/debugview_screen/DebugViewPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/containers/scrollers/ScrollList.hpp>
#include <gui/containers/DebugViewLine.hpp>
#include <touchgfx/widgets/canvas/Line.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
class DebugViewViewBase : public touchgfx::View<DebugViewPresenter>
{
public:
DebugViewViewBase();
virtual ~DebugViewViewBase();
virtual void setupScreen();
virtual void listUpdateItem(DebugViewLine& item, int16_t itemIndex)
{
// Override and implement this function in DebugView
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::ScrollList list;
touchgfx::DrawableListItems<DebugViewLine, 13> listListItems;
touchgfx::Line line1;
touchgfx::PainterRGB565 line1Painter;
private:
/*
* Canvas Buffer Size
*/
static const uint32_t CANVAS_BUFFER_SIZE = 7200;
uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
/*
* Callback Declarations
*/
touchgfx::Callback<DebugViewViewBase, touchgfx::DrawableListItemsInterface*, int16_t, int16_t> updateItemCallback;
/*
* Callback Handler Declarations
*/
void updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex);
};
#endif // DEBUGVIEWVIEWBASE_HPP

View File

@ -15,6 +15,8 @@
#include <gui/ami_screen/AMIPresenter.hpp>
#include <gui/driverview_screen/DriverViewView.hpp>
#include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui/debugview_screen/DebugViewView.hpp>
#include <gui/debugview_screen/DebugViewPresenter.hpp>
using namespace touchgfx;
@ -33,6 +35,19 @@ FrontendApplicationBase::FrontendApplicationBase(Model& m, FrontendHeap& heap)
* Screen Transition Declarations
*/
// MissionSelect
void FrontendApplicationBase::gotoMissionSelectScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplication::gotoMissionSelectScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoMissionSelectScreenNoTransitionImpl()
{
touchgfx::makeTransition<MissionSelectView, MissionSelectPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// AMI
void FrontendApplicationBase::gotoAMIScreenNoTransition()
@ -58,3 +73,16 @@ void FrontendApplicationBase::gotoDriverViewScreenNoTransitionImpl()
{
touchgfx::makeTransition<DriverViewView, DriverViewPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// DebugView
void FrontendApplicationBase::gotoDebugViewScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplication::gotoDebugViewScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoDebugViewScreenNoTransitionImpl()
{
touchgfx::makeTransition<DebugViewView, DebugViewPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}

View File

@ -0,0 +1,33 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/containers/DebugViewItemBase.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <touchgfx/Color.hpp>
DebugViewItemBase::DebugViewItemBase()
{
setWidth(240);
setHeight(26);
label.setPosition(5, 0, 105, 25);
label.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
label.setLinespacing(0);
label.setTypedText(touchgfx::TypedText(T_DEBUGVIEWFIELD_TITLE));
add(label);
value.setPosition(110, 0, 125, 25);
value.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
value.setLinespacing(0);
value.setTypedText(touchgfx::TypedText(T_DEFAULTWILDCARD_RIGHTALIGNED));
add(value);
}
DebugViewItemBase::~DebugViewItemBase()
{
}
void DebugViewItemBase::initialize()
{
}

View File

@ -0,0 +1,49 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/containers/DebugViewLineBase.hpp>
#include <touchgfx/Color.hpp>
DebugViewLineBase::DebugViewLineBase()
{
setWidth(480);
setHeight(26);
bg.setPosition(0, 0, 480, 26);
bg.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(bg);
line1.setPosition(240, 0, 1, 26);
line1Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line1.setPainter(line1Painter);
line1.setStart(0, 0);
line1.setEnd(0, 26);
line1.setLineWidth(10);
line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING);
add(line1);
line2.setPosition(0, 25, 480, 1);
line2Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line2.setPainter(line2Painter);
line2.setStart(0, 0);
line2.setEnd(480, 0);
line2.setLineWidth(10);
line2.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING);
add(line2);
item1.setXY(0, 0);
add(item1);
item2.setXY(240, 0);
add(item2);
}
DebugViewLineBase::~DebugViewLineBase()
{
}
void DebugViewLineBase::initialize()
{
item1.initialize();
item2.initialize();
}

View File

@ -18,7 +18,7 @@ DriverViewFieldBase::DriverViewFieldBase()
title.setPosition(0, 0, 160, 25);
title.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
title.setLinespacing(0);
title.setTypedText(touchgfx::TypedText(T___SINGLEUSE_0FBJ));
title.setTypedText(touchgfx::TypedText(T_DRIVERVIEWFIELD_TITLE));
add(title);
value.setPosition(0, 20, 160, 57);

View File

@ -16,7 +16,7 @@ DriverViewFieldSelectionBase::DriverViewFieldSelectionBase()
name.setPosition(0, 0, 160, 25);
name.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
name.setLinespacing(0);
name.setTypedText(touchgfx::TypedText(T___SINGLEUSE_PNKR));
name.setTypedText(touchgfx::TypedText(T_DRIVERVIEWFIELD_TITLE));
add(name);
line1.setPosition(0, 25, 160, 1);

View File

@ -0,0 +1,62 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/debugview_screen/DebugViewViewBase.hpp>
#include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
#include <touchgfx/Color.hpp>
DebugViewViewBase::DebugViewViewBase() :
updateItemCallback(this, &DebugViewViewBase::updateItemCallbackHandler)
{
touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
list.setPosition(0, 4, 480, 312);
list.setHorizontal(false);
list.setCircular(true);
list.setEasingEquation(touchgfx::EasingEquations::backEaseOut);
list.setSwipeAcceleration(10);
list.setDragAcceleration(10);
list.setNumberOfItems(1);
list.setPadding(0, 0);
list.setSnapping(false);
list.setDrawableSize(26, 0);
list.setDrawables(listListItems, updateItemCallback);
add(list);
line1.setPosition(0, 3, 480, 1);
line1Painter.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
line1.setPainter(line1Painter);
line1.setStart(0, 0);
line1.setEnd(480, 0);
line1.setLineWidth(10);
line1.setLineEndingStyle(touchgfx::Line::ROUND_CAP_ENDING);
add(line1);
}
DebugViewViewBase::~DebugViewViewBase()
{
touchgfx::CanvasWidgetRenderer::resetBuffer();
}
void DebugViewViewBase::setupScreen()
{
list.initialize();
for (int i = 0; i < listListItems.getNumberOfDrawables(); i++)
{
listListItems[i].initialize();
}
}
void DebugViewViewBase::updateItemCallbackHandler(touchgfx::DrawableListItemsInterface* items, int16_t containerIndex, int16_t itemIndex)
{
if (items == &listListItems)
{
touchgfx::Drawable* d = items->getDrawable(containerIndex);
DebugViewLine* cc = (DebugViewLine*)d;
listUpdateItem(*cc, itemIndex);
}
}

View File

@ -117,4 +117,13 @@ void MissionSelectViewBase::handleKeyEvent(uint8_t key)
application().gotoDriverViewScreenNoTransition();
}
if(252 == key)
{
//DummyChangeDebugView
//When hardware button 252 clicked change screen to DebugView
//Go to DebugView with no screen transition
application().gotoDebugViewScreenNoTransition();
}
}

View File

@ -1 +1 @@
{"remap":"yes","language":"GB","language_index":0,"indices":[["257","T_FIELD_BBAL"],["209","T_FIELD_TSVOLTVEH"],["202","T_FIELD_TSVOLTBAT"],["228","T_FIELD_LVSOC"],["246","T_FIELD_TSSOC"],["267","T_FIELD_MAXCELLTEMP"],["272","T_FIELD_TIREFL"],["277","T_FIELD_TIREFR"],["282","T_FIELD_TIRERL"],["287","T_FIELD_TIRERR"],["262","T_FIELD_LAPCOUNT"],["146","T_FIELD_INICHKSTATE"],["216","T_FIELD_ERR"],["301","T_FIELD_SDC"],["162","T_FIELD_INVRREADY"],["154","T_FIELD_INVLREADY"],["178","T_FIELD_R2DPROGRESS"],["170","T_FIELD_ACTIVEMISSION"],["138","T_FIELD_ASSTATE"],["194","T_FIELD_TSSTATE"],["136","T_NUMBERWILDCARD"],["136","T_DEFAULTWILDCARD"],["297","T_FIELD_TSCURRENT"],["292","T_FIELD_MINCELLVOLT"],["234","T_FIELD_SPEED"],["95","T_INSPECTION_HUGE"],["127","T_EBS_HUGE"],["106","T_TRACKDRIVE_HUGE"],["117","T_AUTOX_HUGE"],["186","T_SKIDPAD_HUGE"],["82","T_ACCEL_HUGE"],["34","T_INVALID_HUGE"],["67","T_MANUAL"],["95","T_INSPECTION"],["127","T_EBS"],["106","T_TRACKDRIVE"],["117","T_AUTOX"],["186","T_SKIDPAD"],["82","T_ACCEL"],["252","T___SINGLEUSE_PNKR"],["222","T___SINGLEUSE_0FBJ"],["305","T___SINGLEUSE_4OBM"],["298","T___SINGLEUSE_PHFD"],["240","T___SINGLEUSE_H6UX"],["136","T___SINGLEUSE_20H3"],["17","T___SINGLEUSE_SDGP"],["51","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]}
{"remap":"yes","language":"GB","language_index":0,"indices":[["136","T_DEBUGVIEWFIELD_TITLE"],["136","T_DRIVERVIEWFIELD_TITLE"],["246","T_FIELD_BBAL"],["209","T_FIELD_TSVOLTVEH"],["202","T_FIELD_TSVOLTBAT"],["222","T_FIELD_LVSOC"],["240","T_FIELD_TSSOC"],["256","T_FIELD_MAXCELLTEMP"],["261","T_FIELD_TIREFL"],["266","T_FIELD_TIREFR"],["271","T_FIELD_TIRERL"],["276","T_FIELD_TIRERR"],["251","T_FIELD_LAPCOUNT"],["146","T_FIELD_INICHKSTATE"],["216","T_FIELD_ERR"],["290","T_FIELD_SDC"],["162","T_FIELD_INVRREADY"],["154","T_FIELD_INVLREADY"],["178","T_FIELD_R2DPROGRESS"],["170","T_FIELD_ACTIVEMISSION"],["138","T_FIELD_ASSTATE"],["194","T_FIELD_TSSTATE"],["136","T_NUMBERWILDCARD"],["136","T_DEFAULTWILDCARD_CENTERED"],["136","T_DEFAULTWILDCARD_RIGHTALIGNED"],["286","T_FIELD_TSCURRENT"],["281","T_FIELD_MINCELLVOLT"],["228","T_FIELD_SPEED"],["95","T_INSPECTION_HUGE"],["127","T_EBS_HUGE"],["106","T_TRACKDRIVE_HUGE"],["117","T_AUTOX_HUGE"],["186","T_SKIDPAD_HUGE"],["82","T_ACCEL_HUGE"],["34","T_INVALID_HUGE"],["67","T_MANUAL"],["95","T_INSPECTION"],["127","T_EBS"],["106","T_TRACKDRIVE"],["117","T_AUTOX"],["186","T_SKIDPAD"],["82","T_ACCEL"],["294","T___SINGLEUSE_4OBM"],["287","T___SINGLEUSE_PHFD"],["234","T___SINGLEUSE_H6UX"],["136","T___SINGLEUSE_20H3"],["17","T___SINGLEUSE_SDGP"],["51","T___SINGLEUSE_M5X7"],["0","T___SINGLEUSE_6GPV"]]}

View File

@ -1 +1 @@
{"languages":["GB"],"textids":["T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_PNKR","T___SINGLEUSE_0FBJ","T___SINGLEUSE_4OBM","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_SDGP","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}
{"languages":["GB"],"textids":["T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_4OBM","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_SDGP","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}

View File

@ -1 +1 @@
{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,67,117,114,114,101,110,116,32,77,105,115,115,105,111,110,58,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,84,114,97,99,107,100,114,105,118,101,0,65,117,116,111,99,114,111,115,115,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,69,82,82,79,82,0,70,73,69,76,68,0,76,86,83,79,67,0,83,80,69,69,68,0,84,73,82,69,83,0,84,83,83,79,67,0,63,63,63,63,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,73,84,83,0,83,68,67,0,76,86,0]}
{"remap":"yes","languages":["Gb"],"characters":[67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,67,117,114,114,101,110,116,32,77,105,115,115,105,111,110,58,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,65,99,99,101,108,101,114,97,116,105,111,110,0,73,110,115,112,101,99,116,105,111,110,0,84,114,97,99,107,100,114,105,118,101,0,65,117,116,111,99,114,111,115,115,0,69,66,83,32,84,101,115,116,0,2,0,65,83,83,84,65,84,69,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,69,82,82,79,82,0,76,86,83,79,67,0,83,80,69,69,68,0,84,73,82,69,83,0,84,83,83,79,67,0,66,66,65,76,0,76,65,80,83,0,84,77,65,88,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,73,84,83,0,83,68,67,0,76,86,0]}

View File

@ -1 +1 @@
{"databases":{"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["DEFAULT"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4},"generate_font_format":"0"}
{"databases":{"DEFAULT":[[0,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["DEFAULT"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4},"generate_font_format":"0"}

View File

@ -12,6 +12,8 @@ enum LANGUAGES
enum TEXTS
{
T_DEBUGVIEWFIELD_TITLE,
T_DRIVERVIEWFIELD_TITLE,
T_FIELD_BBAL,
T_FIELD_TSVOLTVEH,
T_FIELD_TSVOLTBAT,
@ -33,7 +35,8 @@ enum TEXTS
T_FIELD_ASSTATE,
T_FIELD_TSSTATE,
T_NUMBERWILDCARD,
T_DEFAULTWILDCARD,
T_DEFAULTWILDCARD_CENTERED,
T_DEFAULTWILDCARD_RIGHTALIGNED,
T_FIELD_TSCURRENT,
T_FIELD_MINCELLVOLT,
T_FIELD_SPEED,
@ -51,8 +54,6 @@ enum TEXTS
T_AUTOX,
T_SKIDPAD,
T_ACCEL,
T___SINGLEUSE_PNKR,
T___SINGLEUSE_0FBJ,
T___SINGLEUSE_4OBM,
T___SINGLEUSE_PHFD,
T___SINGLEUSE_H6UX,

View File

@ -10,20 +10,22 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
// Remap all strings
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
257, // T_FIELD_BBAL: "BBAL"
136, // T_DEBUGVIEWFIELD_TITLE: "<>"
136, // T_DRIVERVIEWFIELD_TITLE: "<>"
246, // T_FIELD_BBAL: "BBAL"
209, // T_FIELD_TSVOLTVEH: "TSVVEH"
202, // T_FIELD_TSVOLTBAT: "TSVBAT"
228, // T_FIELD_LVSOC: "LVSOC"
246, // T_FIELD_TSSOC: "TSSOC"
267, // T_FIELD_MAXCELLTEMP: "TMAX"
272, // T_FIELD_TIREFL: "TTFL"
277, // T_FIELD_TIREFR: "TTFR"
282, // T_FIELD_TIRERL: "TTRL"
287, // T_FIELD_TIRERR: "TTRR"
262, // T_FIELD_LAPCOUNT: "LAPS"
222, // T_FIELD_LVSOC: "LVSOC"
240, // T_FIELD_TSSOC: "TSSOC"
256, // T_FIELD_MAXCELLTEMP: "TMAX"
261, // T_FIELD_TIREFL: "TTFL"
266, // T_FIELD_TIREFR: "TTFR"
271, // T_FIELD_TIRERL: "TTRL"
276, // T_FIELD_TIRERR: "TTRR"
251, // T_FIELD_LAPCOUNT: "LAPS"
146, // T_FIELD_INICHKSTATE: "ICSTATE"
216, // T_FIELD_ERR: "ERROR"
301, // T_FIELD_SDC: "SDC"
290, // T_FIELD_SDC: "SDC"
162, // T_FIELD_INVRREADY: "INVRRDY"
154, // T_FIELD_INVLREADY: "INVLRDY"
178, // T_FIELD_R2DPROGRESS: "R2DPROG"
@ -31,10 +33,11 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
138, // T_FIELD_ASSTATE: "ASSTATE"
194, // T_FIELD_TSSTATE: "TSSTATE"
136, // T_NUMBERWILDCARD: "<>"
136, // T_DEFAULTWILDCARD: "<>"
297, // T_FIELD_TSCURRENT: "ITS"
292, // T_FIELD_MINCELLVOLT: "VMIN"
234, // T_FIELD_SPEED: "SPEED"
136, // T_DEFAULTWILDCARD_CENTERED: "<>"
136, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
286, // T_FIELD_TSCURRENT: "ITS"
281, // T_FIELD_MINCELLVOLT: "VMIN"
228, // T_FIELD_SPEED: "SPEED"
95, // T_INSPECTION_HUGE: "Inspection"
127, // T_EBS_HUGE: "EBS Test"
106, // T_TRACKDRIVE_HUGE: "Trackdrive"
@ -49,11 +52,9 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
117, // T_AUTOX: "Autocross"
186, // T_SKIDPAD: "Skidpad"
82, // T_ACCEL: "Acceleration"
252, // T___SINGLEUSE_PNKR: "????"
222, // T___SINGLEUSE_0FBJ: "FIELD"
305, // T___SINGLEUSE_4OBM: "LV"
298, // T___SINGLEUSE_PHFD: "TS"
240, // T___SINGLEUSE_H6UX: "TIRES"
294, // T___SINGLEUSE_4OBM: "LV"
287, // T___SINGLEUSE_PHFD: "TS"
234, // T___SINGLEUSE_H6UX: "TIRES"
136, // T___SINGLEUSE_20H3: "<>"
17, // T___SINGLEUSE_SDGP: "Current Mission:"
51, // T___SINGLEUSE_M5X7: "Invalid Mission"

View File

@ -82,23 +82,21 @@ KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCA
0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @202 "TSVBAT"
0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @209 "TSVVEH"
0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @216 "ERROR"
0x46, 0x49, 0x45, 0x4c, 0x44, 0x0, // @222 "FIELD"
0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @228 "LVSOC"
0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @234 "SPEED"
0x54, 0x49, 0x52, 0x45, 0x53, 0x0, // @240 "TIRES"
0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @246 "TSSOC"
0x3f, 0x3f, 0x3f, 0x3f, 0x0, // @252 "????"
0x42, 0x42, 0x41, 0x4c, 0x0, // @257 "BBAL"
0x4c, 0x41, 0x50, 0x53, 0x0, // @262 "LAPS"
0x54, 0x4d, 0x41, 0x58, 0x0, // @267 "TMAX"
0x54, 0x54, 0x46, 0x4c, 0x0, // @272 "TTFL"
0x54, 0x54, 0x46, 0x52, 0x0, // @277 "TTFR"
0x54, 0x54, 0x52, 0x4c, 0x0, // @282 "TTRL"
0x54, 0x54, 0x52, 0x52, 0x0, // @287 "TTRR"
0x56, 0x4d, 0x49, 0x4e, 0x0, // @292 "VMIN"
0x49, 0x54, 0x53, 0x0, // @297 "ITS"
0x53, 0x44, 0x43, 0x0, // @301 "SDC"
0x4c, 0x56, 0x0 // @305 "LV"
0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @222 "LVSOC"
0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @228 "SPEED"
0x54, 0x49, 0x52, 0x45, 0x53, 0x0, // @234 "TIRES"
0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @240 "TSSOC"
0x42, 0x42, 0x41, 0x4c, 0x0, // @246 "BBAL"
0x4c, 0x41, 0x50, 0x53, 0x0, // @251 "LAPS"
0x54, 0x4d, 0x41, 0x58, 0x0, // @256 "TMAX"
0x54, 0x54, 0x46, 0x4c, 0x0, // @261 "TTFL"
0x54, 0x54, 0x46, 0x52, 0x0, // @266 "TTFR"
0x54, 0x54, 0x52, 0x4c, 0x0, // @271 "TTRL"
0x54, 0x54, 0x52, 0x52, 0x0, // @276 "TTRR"
0x56, 0x4d, 0x49, 0x4e, 0x0, // @281 "VMIN"
0x49, 0x54, 0x53, 0x0, // @286 "ITS"
0x53, 0x44, 0x43, 0x0, // @290 "SDC"
0x4c, 0x56, 0x0 // @294 "LV"
};
TEXT_LOCATION_FLASH_PRAGMA

View File

@ -24,6 +24,8 @@ extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
TEXT_LOCATION_FLASH_PRAGMA
const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
{ 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -46,6 +48,7 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -66,8 +69,6 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },

View File

@ -2,6 +2,7 @@
#define DATAFIELD_HPP
#include "touchgfx/TypedText.hpp"
#include "touchgfx/Unicode.hpp"
#include <stddef.h>
#include <stdint.h>
@ -20,17 +21,51 @@ CountedEnum(DataFieldType, size_t, DF_TSState, DF_ASState, DF_ActiveMission,
DF_TSSoC, DF_LVSoC, DF_TSCurrent, DF_TSVoltageBat, DF_TSVoltageVeh,
DF_Speed, DF_BBal);
enum class DataFieldKind { Numeric, Bool, Text };
enum class DataFieldKind { Float, Bool, Text, Int };
struct DataFieldDescription {
DataFieldKind kind;
touchgfx::TypedText title;
const char *title;
size_t int_digits;
size_t decimal_digits;
void* (*getValue)(void);
void *(*getValue)(void);
};
extern DataFieldDescription dataFieldDescs[];
class DataField {
public:
virtual ~DataField() {}
void setType(DataFieldType type);
DataFieldType getType();
virtual void updateValue();
protected:
touchgfx::Unicode::UnicodeChar titleBuffer[16];
touchgfx::Unicode::UnicodeChar valueBuffer[16];
DataFieldType type;
const DataFieldDescription *desc;
union {
float f;
int b;
int i;
} fieldValue;
virtual void typeUpdated() = 0;
virtual void titleBufferUpdated() = 0;
virtual void valueBufferUpdated() = 0;
private:
void setFloatValue(float floatValue);
void setBoolValue(int boolValue);
void setIntValue(int intValue);
void setStrValue(const char *strValue);
void updateValueBuffer();
};
#endif // DATAFIELD_HPP

View File

@ -0,0 +1,20 @@
#ifndef DEBUGVIEWITEM_HPP
#define DEBUGVIEWITEM_HPP
#include "gui/common/DataField.hpp"
#include <gui_generated/containers/DebugViewItemBase.hpp>
class DebugViewItem : public DebugViewItemBase, public DataField {
public:
DebugViewItem();
virtual ~DebugViewItem() {}
virtual void initialize() override;
protected:
virtual void typeUpdated() override;
virtual void titleBufferUpdated() override;
virtual void valueBufferUpdated() override;
};
#endif // DEBUGVIEWITEM_HPP

View File

@ -0,0 +1,27 @@
#ifndef DEBUGVIEWLINE_HPP
#define DEBUGVIEWLINE_HPP
#include "gui/common/DataField.hpp"
#include "gui/containers/DebugViewItem.hpp"
#include <gui_generated/containers/DebugViewLineBase.hpp>
class DebugViewLine : public DebugViewLineBase {
public:
DebugViewLine();
virtual ~DebugViewLine() {}
virtual void initialize();
void setFieldType(size_t i, DataFieldType type);
void setFieldVisible(size_t i, int visible);
void updateFieldValues();
void setLightBG(int light);
static constexpr size_t NUM_FIELDS = 2;
protected:
private:
DebugViewItem *fields[NUM_FIELDS];
};
#endif // DEBUGVIEWLINE_HPP

View File

@ -7,31 +7,20 @@
#include "gui/common/DataField.hpp"
class DriverViewField : public DriverViewFieldBase {
class DriverViewField : public DriverViewFieldBase, public DataField {
public:
DriverViewField();
virtual ~DriverViewField() {}
virtual void initialize();
void setType(const DataFieldDescription &desc);
void setValue(float newValue);
void setValue(const char *str);
void setValue(int boolValue);
virtual void initialize() override;
void setSelected(int selected);
protected:
private:
Unicode::UnicodeChar valueBuffer[16];
DataFieldKind fieldKind;
size_t intDigits;
size_t decimalDigits;
float floatValue;
int boolValue;
void updateValueBuffer();
virtual void typeUpdated() override;
virtual void titleBufferUpdated() override;
virtual void valueBufferUpdated() override;
};
#endif // DRIVERVIEWFIELD_HPP

View File

@ -2,6 +2,7 @@
#define DRIVERVIEWFIELDSELECTION_HPP
#include "touchgfx/TypedText.hpp"
#include "touchgfx/Unicode.hpp"
#include <gui_generated/containers/DriverViewFieldSelectionBase.hpp>
class DriverViewFieldSelection : public DriverViewFieldSelectionBase {
@ -11,10 +12,12 @@ public:
virtual void initialize();
void setName(const touchgfx::TypedText &name);
void setName(const char *name);
void setSelected(int selected);
protected:
private:
Unicode::UnicodeChar nameBuffer[16];
};
#endif // DRIVERVIEWFIELDSELECTION_HPP

View File

@ -0,0 +1,38 @@
#ifndef DEBUGVIEWPRESENTER_HPP
#define DEBUGVIEWPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class DebugViewView;
class DebugViewPresenter : public touchgfx::Presenter, public ModelListener {
public:
DebugViewPresenter(DebugViewView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~DebugViewPresenter(){};
virtual void vehicleStateUpdated() override;
private:
DebugViewPresenter();
DebugViewView &view;
};
#endif // DEBUGVIEWPRESENTER_HPP

View File

@ -0,0 +1,21 @@
#ifndef DEBUGVIEWVIEW_HPP
#define DEBUGVIEWVIEW_HPP
#include <gui/debugview_screen/DebugViewPresenter.hpp>
#include <gui_generated/debugview_screen/DebugViewViewBase.hpp>
class DebugViewView : public DebugViewViewBase {
public:
DebugViewView();
virtual ~DebugViewView() {}
virtual void setupScreen() override;
virtual void tearDownScreen() override;
virtual void listUpdateItem(DebugViewLine &line, int16_t itemIndex) override;
void updateFieldValues();
protected:
};
#endif // DEBUGVIEWVIEW_HPP

View File

@ -18,19 +18,21 @@ public:
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate();
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate();
virtual void deactivate() override;
virtual ~DriverViewPresenter(){};
void vehicleStateUpdated() override;
void setFieldType(size_t i, DataFieldType type);
private:
DriverViewPresenter();

View File

@ -12,16 +12,14 @@ class DriverViewView : public DriverViewViewBase {
public:
DriverViewView();
virtual ~DriverViewView() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void setupScreen() override;
virtual void tearDownScreen() override;
void fieldTypeSelectionUpdateItem(DriverViewFieldSelection &item,
int16_t itemIndex) override;
void setFieldType(size_t i, const DataFieldDescription &desc);
void setFieldValue(size_t i, float value);
void setFieldValue(size_t i, const char *value);
void setFieldValue(size_t i, int value);
void setFieldType(size_t i, DataFieldType type);
void updateFieldValues();
void setTireTemps(const TireTemps &temps);
void setTSSoC(uint8_t soc);
@ -37,7 +35,6 @@ public:
protected:
private:
DriverViewField &getField(size_t i);
DriverViewFieldSelection *getFieldType(size_t i);
void updateSelectedField(size_t select);
void updateSelectedFieldType(size_t select);

View File

@ -1,6 +1,7 @@
#include "gui/common/DataField.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Unicode.hpp"
#include "vehicle.h"
#define VEH_FIELD(FIELD) []() { return (void *)&vehicle_state.FIELD; }
@ -11,50 +12,219 @@
return (void *)&x; \
}
void *get_sdc_text() {
if (vehicle_state.errors.sdc_bfl) {
return (void *)"BFL";
} else if (vehicle_state.errors.sdc_brl) {
return (void *)"BRL";
} else if (vehicle_state.errors.sdc_acc) {
return (void *)"ACC";
} else if (vehicle_state.errors.sdc_hvb) {
return (void *)"HVB";
} else {
return (void *)"CLOSED";
void *get_tsstate_text() {
const char *text;
switch (vehicle_state.ts_state) {
case TS_INACTIVE:
text = "INACT";
break;
case TS_ACTIVE:
text = "ACT";
break;
case TS_PRECHARGE:
text = "PRECH";
break;
case TS_DISCHARGE:
text = "DISCH";
break;
case TS_ERROR:
text = "ERROR";
break;
case TS_CHARGING_CHECK:
text = "CH_CHK";
break;
case TS_CHARGING:
text = "CH";
break;
default:
text = "UNKNOWN";
}
return (void *)text;
}
void *get_asstate_text() {
const char *text;
switch (vehicle_state.as_state) {
case AS_OFF:
text = "OFF";
break;
case AS_MANUAL:
text = "MAN";
break;
case AS_READY:
text = "RDY";
break;
case AS_DRIVING:
text = "DRIVE";
break;
case AS_FINISHED:
text = "FIN";
break;
case AS_EMERGENCY:
text = "EMERG";
break;
default:
text = "UNKNOWN";
}
return (void *)text;
}
void *get_mission_text() {
const char *text;
switch (vehicle_state.active_mission) {
case MISSION_NONE:
text = "NONE";
break;
case MISSION_ACCEL:
text = "ACCEL";
break;
case MISSION_SKIDPAD:
text = "SKIDPAD";
break;
case MISSION_AUTOX:
text = "AUTOX";
break;
case MISSION_TRACKDRIVE:
text = "TRACK";
break;
case MISSION_EBS:
text = "EBS";
break;
case MISSION_INSPECTION:
text = "INSPECT";
break;
case MISSION_MANUAL:
text = "MAN";
break;
default:
text = "UNKNOWN";
}
return (void *)text;
}
void *get_r2dprog_text() {
const char *text;
switch (vehicle_state.r2d_progress) {
case R2D_NONE:
text = "NONE";
break;
case R2D_TSMS:
text = "TSMS";
break;
case R2D_TSACTIVE:
text = "TSACT";
break;
case R2D_RESETTING_NODES:
text = "RST NODE";
break;
case R2D_RESETTING_COMMS:
text = "RST COM";
break;
case R2D_WAITING_INIT:
text = "WAIT INIT";
break;
case R2D_INIT_STAGE1:
text = "INIT S1";
break;
case R2D_INIT_STAGE2:
text = "INIT S2";
break;
case R2D_INIT_SUCCESS:
text = "INIT SUCC";
break;
default:
text = "UNKNOWN";
}
return (void *)text;
}
void *get_inichk_text() {
const char *text;
switch (vehicle_state.ini_chk_state) {
case INICHK_START:
text = "START";
break;
case INICHK_WD_CHECK:
text = "WD CHK";
break;
case INICHK_WD_OK:
text = "WD OK";
break;
case INICHK_ASB_CHECK_1:
text = "ASB CHK1";
break;
case INICHK_ASB_CHECK_2:
text = "ASB CHK2";
break;
case INICHK_WAIT_TS:
text = "WAIT TS";
break;
case INICHK_EBS_CHECK_A:
text = "EBS CHKA";
break;
case INICHK_EBS_CHECK_B:
text = "EBS CHKB";
break;
case INICHK_DONE:
text = "DONE";
break;
case INICHK_ERROR:
text = "ERROR";
break;
default:
text = "UNKNOWN";
}
return (void *)text;
}
void *get_sdc_text() {
const char *text;
if (vehicle_state.errors.sdc_bfl) {
text = "BFL";
} else if (vehicle_state.errors.sdc_brl) {
text = "BRL";
} else if (vehicle_state.errors.sdc_acc) {
text = "ACC";
} else if (vehicle_state.errors.sdc_hvb) {
text = "HVB";
} else {
text = "CLOSED";
}
return (void *)text;
}
void *get_err_text() {
const char *text;
if (vehicle_state.errors.err_sdc) {
return (void *)"SDC";
text = "SDC";
} else if (vehicle_state.errors.err_ams) {
return (void *)"AMS";
text = "AMS";
} else if (vehicle_state.errors.err_pdu) {
return (void *)"PDU";
text = "PDU";
} else if (vehicle_state.errors.err_ini_chk) {
return (void *)"IniChk";
text = "IniChk";
} else if (vehicle_state.errors.err_con_mon) {
return (void *)"ConMon";
text = "ConMon";
} else if (vehicle_state.errors.err_scs) {
return (void *)"SCS";
text = "SCS";
} else if (vehicle_state.errors.err_sbspd) {
return (void *)"sBSPD";
text = "sBSPD";
} else if (vehicle_state.errors.err_appsp) {
return (void *)"APPSp";
text = "APPSp";
} else if (vehicle_state.errors.err_as) {
return (void *)"AS";
text = "AS";
} else if (vehicle_state.errors.err_ros) {
return (void *)"ROS";
text = "ROS";
} else if (vehicle_state.errors.err_res) {
return (void *)"RES";
text = "RES";
} else if (vehicle_state.errors.err_invl) {
return (void *)"INVL";
text = "INVL";
} else if (vehicle_state.errors.err_invr) {
return (void *)"INVR";
text = "INVR";
} else {
return (void *)"NONE";
text = "NONE";
}
return (void *)text;
}
void *get_zero() {
@ -63,48 +233,124 @@ void *get_zero() {
}
DataFieldDescription dataFieldDescs[] = {
[DF_TSState] = {DataFieldKind::Numeric, T_FIELD_TSSTATE, 1, 0,
VEH_FIELD(ts_state)},
[DF_ASState] = {DataFieldKind::Numeric, T_FIELD_ASSTATE, 1, 0,
VEH_FIELD(as_state)},
[DF_ActiveMission] = {DataFieldKind::Numeric, T_FIELD_ACTIVEMISSION, 1, 0,
VEH_FIELD(active_mission)},
[DF_R2DProgress] = {DataFieldKind::Numeric, T_FIELD_R2DPROGRESS, 1, 0,
VEH_FIELD(r2d_progress)},
[DF_INVLReady] = {DataFieldKind::Bool, T_FIELD_INVLREADY, 0, 0,
[DF_TSState] = {DataFieldKind::Text, "TSSTATE", 1, 0, get_tsstate_text},
[DF_ASState] = {DataFieldKind::Text, "ASSTATE", 1, 0, get_asstate_text},
[DF_ActiveMission] = {DataFieldKind::Text, "MISSION", 1, 0,
get_mission_text},
[DF_R2DProgress] = {DataFieldKind::Text, "R2DPROG", 1, 0, get_r2dprog_text},
[DF_INVLReady] = {DataFieldKind::Bool, "INVLRDY", 0, 0,
VEH_BIT_FIELD(errors.invl_ready)},
[DF_INVRReady] = {DataFieldKind::Bool, T_FIELD_INVRREADY, 0, 0,
[DF_INVRReady] = {DataFieldKind::Bool, "INVRRDY", 0, 0,
VEH_BIT_FIELD(errors.invr_ready)},
[DF_SDC] = {DataFieldKind::Text, T_FIELD_SDC, 0, 0, get_sdc_text},
[DF_ERR] = {DataFieldKind::Text, T_FIELD_ERR, 0, 0, get_err_text},
[DF_IniChkState] = {DataFieldKind::Numeric, T_FIELD_INICHKSTATE, 1, 0,
VEH_FIELD(ini_chk_state)},
[DF_LapCount] = {DataFieldKind::Numeric, T_FIELD_LAPCOUNT, 3, 0,
VEH_FIELD(lap_count)},
[DF_TireTempFL] = {DataFieldKind::Numeric, T_FIELD_TIREFL, 2, 1,
[DF_SDC] = {DataFieldKind::Text, "SDC", 0, 0, get_sdc_text},
[DF_ERR] = {DataFieldKind::Text, "ERROR", 0, 0, get_err_text},
[DF_IniChkState] = {DataFieldKind::Text, "ICSTATE", 1, 0, get_inichk_text},
[DF_LapCount] = {DataFieldKind::Int, "LAPS", 3, 0, VEH_FIELD(lap_count)},
[DF_TireTempFL] = {DataFieldKind::Float, "TTFL", 2, 1,
VEH_FIELD(tire_temps.fl)},
[DF_TireTempFR] = {DataFieldKind::Numeric, T_FIELD_TIREFR, 2, 1,
[DF_TireTempFR] = {DataFieldKind::Float, "TTFR", 2, 1,
VEH_FIELD(tire_temps.fr)},
[DF_TireTempRL] = {DataFieldKind::Numeric, T_FIELD_TIRERL, 2, 1,
[DF_TireTempRL] = {DataFieldKind::Float, "TTRL", 2, 1,
VEH_FIELD(tire_temps.rl)},
[DF_TireTempRR] = {DataFieldKind::Numeric, T_FIELD_TIRERR, 2, 1,
[DF_TireTempRR] = {DataFieldKind::Float, "TTRR", 2, 1,
VEH_FIELD(tire_temps.rr)},
[DF_MinCellVolt] = {DataFieldKind::Numeric, T_FIELD_MINCELLVOLT, 1, 2,
[DF_MinCellVolt] = {DataFieldKind::Float, "VMIN", 1, 2,
VEH_FIELD(min_cell_volt)},
[DF_MaxCellTemp] = {DataFieldKind::Numeric, T_FIELD_MAXCELLTEMP, 2, 1,
[DF_MaxCellTemp] = {DataFieldKind::Float, "TMAX", 2, 1,
VEH_FIELD(max_cell_temp)},
[DF_TSSoC] = {DataFieldKind::Numeric, T_FIELD_TSSOC, 3, 0, VEH_FIELD(soc)},
[DF_LVSoC] = {DataFieldKind::Numeric, T_FIELD_LVSOC, 3, 0, get_zero},
[DF_TSCurrent] = {DataFieldKind::Numeric, T_FIELD_TSCURRENT, 3, 0,
VEH_FIELD(ts_current)},
[DF_TSVoltageBat] = {DataFieldKind::Numeric, T_FIELD_TSVOLTBAT, 3, 1,
[DF_TSSoC] = {DataFieldKind::Int, "TSSOC", 3, 0, VEH_FIELD(soc)},
[DF_LVSoC] = {DataFieldKind::Float, "LVSOC", 3, 0, get_zero},
[DF_TSCurrent] = {DataFieldKind::Float, "ITS", 3, 0, VEH_FIELD(ts_current)},
[DF_TSVoltageBat] = {DataFieldKind::Float, "TSVBAT", 3, 1,
VEH_FIELD(ts_voltage_bat)},
[DF_TSVoltageVeh] = {DataFieldKind::Numeric, T_FIELD_TSVOLTVEH, 3, 1,
[DF_TSVoltageVeh] = {DataFieldKind::Float, "TSVVEH", 3, 1,
VEH_FIELD(ts_voltage_veh)},
[DF_Speed] = {DataFieldKind::Numeric, T_FIELD_SPEED, 3, 0, get_zero},
[DF_BBal] = {DataFieldKind::Numeric, T_FIELD_BBAL, 3, 1, get_zero},
[DF_Speed] = {DataFieldKind::Float, "SPEED", 3, 0, get_zero},
[DF_BBal] = {DataFieldKind::Float, "BBAL", 3, 1, get_zero},
};
static_assert(sizeof(dataFieldDescs) / sizeof(dataFieldDescs[0]) ==
DataFieldType_COUNT,
"Incorrect number of data field descriptions");
void DataField::setType(DataFieldType type) {
this->type = type;
desc = &dataFieldDescs[type];
touchgfx::Unicode::strncpy(titleBuffer, desc->title,
sizeof(titleBuffer) / sizeof(*titleBuffer));
titleBufferUpdated();
typeUpdated();
updateValue();
}
void DataField::updateValue() {
void *val = desc->getValue();
switch (desc->kind) {
case DataFieldKind::Float:
setFloatValue(*static_cast<float *>(val));
break;
case DataFieldKind::Bool:
setBoolValue(*static_cast<int *>(val));
break;
case DataFieldKind::Text:
setStrValue(static_cast<const char *>(val));
break;
case DataFieldKind::Int:
setIntValue(*static_cast<int *>(val));
break;
}
}
void DataField::setFloatValue(float floatValue) {
fieldValue.f = floatValue;
updateValueBuffer();
}
void DataField::setBoolValue(int boolValue) {
fieldValue.b = boolValue;
updateValueBuffer();
}
void DataField::setIntValue(int intValue) {
fieldValue.i = intValue;
updateValueBuffer();
}
void DataField::setStrValue(const char *strValue) {
touchgfx::Unicode::strncpy(valueBuffer, strValue,
sizeof(valueBuffer) / sizeof(*valueBuffer));
updateValueBuffer();
}
void DataField::updateValueBuffer() {
switch (desc->kind) {
case DataFieldKind::Float: {
size_t width = desc->int_digits;
if (desc->decimal_digits != 0) {
width += desc->decimal_digits + 1; // 1 digit for the decimal point
}
float params[3] = {(float)width, (float)desc->decimal_digits, fieldValue.f};
touchgfx::Unicode::snprintfFloats(
valueBuffer, sizeof(valueBuffer) / sizeof(*valueBuffer), "%*.*f",
params);
break;
}
case DataFieldKind::Bool: {
const char *str = fieldValue.b ? "YES" : "NO";
touchgfx::Unicode::strncpy(valueBuffer, str,
sizeof(valueBuffer) / sizeof(*valueBuffer));
break;
}
case DataFieldKind::Text:
// This is handled by the child class in setValue()
break;
case DataFieldKind::Int:
touchgfx::Unicode::snprintf(valueBuffer,
sizeof(valueBuffer) / sizeof(*valueBuffer),
"%*d", desc->int_digits, fieldValue.i);
break;
}
valueBufferUpdated();
}

View File

@ -0,0 +1,19 @@
#include <gui/containers/DebugViewItem.hpp>
DebugViewItem::DebugViewItem() {}
void DebugViewItem::initialize() { DebugViewItemBase::initialize(); }
void DebugViewItem::typeUpdated() {
// We don't really need to do anything
}
void DebugViewItem::titleBufferUpdated() {
label.setWildcard(titleBuffer);
label.invalidate();
}
void DebugViewItem::valueBufferUpdated() {
value.setWildcard(valueBuffer);
value.invalidate();
}

View File

@ -0,0 +1,29 @@
#include "gui/common/DataField.hpp"
#include "touchgfx/Color.hpp"
#include <gui/containers/DebugViewLine.hpp>
DebugViewLine::DebugViewLine() : fields{&item1, &item2} {}
void DebugViewLine::initialize() { DebugViewLineBase::initialize(); }
void DebugViewLine::setFieldType(size_t i, DataFieldType type) {
assert(i < NUM_FIELDS);
fields[i]->setType(type);
}
void DebugViewLine::setFieldVisible(size_t i, int visible) {
fields[i]->setVisible(visible);
fields[i]->invalidate();
}
void DebugViewLine::updateFieldValues() {
for (size_t i = 0; i < NUM_FIELDS; i++) {
fields[i]->updateValue();
}
}
void DebugViewLine::setLightBG(int light) {
uint8_t val = light ? 0x33 : 0x00;
bg.setColor(Color::getColorFromRGB(val, val, val));
bg.invalidate();
}

View File

@ -1,79 +1,40 @@
#include "gui/common/DataField.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Color.hpp"
#include "touchgfx/TypedText.hpp"
#include "touchgfx/Unicode.hpp"
#include <gui/containers/DriverViewField.hpp>
DriverViewField::DriverViewField()
: intDigits{0}, decimalDigits{0}, floatValue{0}, boolValue{0} {}
DriverViewField::DriverViewField() {}
void DriverViewField::initialize() { DriverViewFieldBase::initialize(); }
void DriverViewField::setType(const DataFieldDescription &desc) {
title.setTypedText(desc.title);
title.invalidate();
fieldKind = desc.kind;
switch (desc.kind) {
case DataFieldKind::Numeric:
value.setTypedText(T_NUMBERWILDCARD);
break;
case DataFieldKind::Bool:
case DataFieldKind::Text:
value.setTypedText(T_DEFAULTWILDCARD);
break;
}
intDigits = desc.int_digits;
decimalDigits = desc.decimal_digits;
updateValueBuffer();
}
void DriverViewField::setValue(float newValue) {
floatValue = newValue;
updateValueBuffer();
}
void DriverViewField::setValue(const char *str) {
Unicode::strncpy(valueBuffer, str,
sizeof(valueBuffer) / sizeof(Unicode::UnicodeChar));
value.setWildcard(valueBuffer);
value.invalidate();
}
void DriverViewField::setValue(int boolValue) {
this->boolValue = boolValue;
updateValueBuffer();
}
void DriverViewField::setSelected(int selected) {
uint8_t v = selected ? 0x44 : 0x00;
box.setColor(touchgfx::Color::getColorFromRGB(v, v, v));
box.invalidate();
}
void DriverViewField::updateValueBuffer() {
switch (fieldKind) {
case DataFieldKind::Numeric: {
size_t width = intDigits;
if (decimalDigits != 0) {
width += decimalDigits + 1; // 1 digit for the decimal point
}
float params[3] = {(float)width, (float)decimalDigits, floatValue};
Unicode::snprintfFloats(valueBuffer,
sizeof(valueBuffer) / sizeof(Unicode::UnicodeChar),
"%*.*f", params);
value.setWildcard(valueBuffer);
void DriverViewField::typeUpdated() {
switch (desc->kind) {
case DataFieldKind::Float:
case DataFieldKind::Int:
value.setTypedText(T_NUMBERWILDCARD);
break;
}
case DataFieldKind::Bool: {
const char *str = boolValue ? "YES" : "NO";
Unicode::strncpy(valueBuffer, str,
sizeof(valueBuffer) / sizeof(valueBuffer[0]));
value.setWildcard(valueBuffer);
break;
}
case DataFieldKind::Bool:
case DataFieldKind::Text:
// This is updated directly in setValue()
value.setTypedText(T_DEFAULTWILDCARD_CENTERED);
break;
}
value.invalidate();
}
void DriverViewField::titleBufferUpdated() {
title.setWildcard(titleBuffer);
title.invalidate();
}
void DriverViewField::valueBufferUpdated() {
value.setWildcard(valueBuffer);
value.invalidate();
}

View File

@ -1,4 +1,5 @@
#include "touchgfx/Color.hpp"
#include "touchgfx/Unicode.hpp"
#include <gui/containers/DriverViewFieldSelection.hpp>
DriverViewFieldSelection::DriverViewFieldSelection() {}
@ -7,8 +8,10 @@ void DriverViewFieldSelection::initialize() {
DriverViewFieldSelectionBase::initialize();
}
void DriverViewFieldSelection::setName(const touchgfx::TypedText &name) {
this->name.setTypedText(name);
void DriverViewFieldSelection::setName(const char *name) {
Unicode::strncpy(nameBuffer, name, sizeof(nameBuffer) / sizeof(*nameBuffer));
this->name.setWildcard(nameBuffer);
this->name.invalidate();
}
void DriverViewFieldSelection::setSelected(int selected) {

View File

@ -0,0 +1,11 @@
#include <gui/debugview_screen/DebugViewPresenter.hpp>
#include <gui/debugview_screen/DebugViewView.hpp>
DebugViewPresenter::DebugViewPresenter(DebugViewView &v) : view(v) {}
void DebugViewPresenter::activate() {}
void DebugViewPresenter::deactivate() {}
void DebugViewPresenter::vehicleStateUpdated() { view.updateFieldValues(); }

View File

@ -0,0 +1,34 @@
#include "gui/common/DataField.hpp"
#include <gui/debugview_screen/DebugViewView.hpp>
DebugViewView::DebugViewView() {}
void DebugViewView::setupScreen() {
DebugViewViewBase::setupScreen();
size_t numItems = DataFieldType_COUNT / 2;
if (DataFieldType_COUNT % 2 == 1) {
numItems++;
}
list.setNumberOfItems(numItems);
}
void DebugViewView::tearDownScreen() { DebugViewViewBase::tearDownScreen(); }
void DebugViewView::listUpdateItem(DebugViewLine &line, int16_t itemIndex) {
size_t idx = itemIndex * 2;
line.setFieldType(0, static_cast<DataFieldType>(idx));
idx++;
if (idx < DataFieldType_COUNT) {
line.setFieldType(1, static_cast<DataFieldType>(idx));
line.setFieldVisible(1, true);
} else {
line.setFieldVisible(1, false);
}
line.setLightBG(itemIndex % 2 == 1);
}
void DebugViewView::updateFieldValues() {
for (DebugViewLine &el : listListItems.element) {
el.updateFieldValues();
}
}

View File

@ -9,7 +9,7 @@ DriverViewPresenter::DriverViewPresenter(DriverViewView &v)
void DriverViewPresenter::activate() {
for (size_t i = 0; i < 3; i++) {
view.setFieldType(i, dataFieldDescs[fields[i]]);
view.setFieldType(i, fields[i]);
}
}
@ -19,19 +19,10 @@ void DriverViewPresenter::vehicleStateUpdated() {
view.setTireTemps(vehicle_state.tire_temps);
view.setTSSoC(vehicle_state.soc);
for (size_t i = 0; i < 3; i++) {
DataFieldType field = fields[i];
// void *val = dataFieldDescs[field].getValue();
// switch (dataFieldDescs[field].kind) {
// case DataFieldKind::Numeric:
// view.setFieldValue(i, *((float *)val));
// break;
// case DataFieldKind::Bool:
// view.setFieldValue(i, *((int *)val));
// break;
// case DataFieldKind::Text:
// view.setFieldValue(i, (const char *)val);
// break;
// }
}
view.updateFieldValues();
}
void DriverViewPresenter::setFieldType(size_t i, DataFieldType type) {
fields[i] = type;
view.setFieldType(i, type);
}

View File

@ -1,7 +1,9 @@
#include "gui/common/DataField.hpp"
#include "gui/containers/DriverViewField.hpp"
#include "gui/driverview_screen/DriverViewPresenter.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include <gui/driverview_screen/DriverViewView.hpp>
#include <stddef.h>
DriverViewView::DriverViewView()
: fieldTypes{DF_MinCellVolt, DF_Speed, DF_TSCurrent} {}
@ -9,7 +11,7 @@ DriverViewView::DriverViewView()
void DriverViewView::setupScreen() {
DriverViewViewBase::setupScreen();
for (size_t i = 0; i < NUM_FIELDS; i++) {
getField(i).setType(dataFieldDescs[fieldTypes[i]]);
getField(i).setType(fieldTypes[i]);
}
fieldTypeSelection.setNumberOfItems(DataFieldType_COUNT);
}
@ -22,20 +24,14 @@ void DriverViewView::fieldTypeSelectionUpdateItem(
item.setSelected(itemIndex == selectedFieldType);
}
void DriverViewView::setFieldType(size_t i, const DataFieldDescription &desc) {
getField(i).setType(desc);
void DriverViewView::setFieldType(size_t i, DataFieldType type) {
getField(i).setType(type);
}
void DriverViewView::setFieldValue(size_t i, float value) {
getField(i).setValue(value);
}
void DriverViewView::setFieldValue(size_t i, const char *value) {
getField(i).setValue(value);
}
void DriverViewView::setFieldValue(size_t i, int value) {
getField(i).setValue(value);
void DriverViewView::updateFieldValues() {
for (size_t i = 0; i < NUM_FIELDS; i++) {
getField(i).updateValue();
}
}
void DriverViewView::setTireTemps(const TireTemps &temps) {
@ -53,6 +49,7 @@ void DriverViewView::setTSSoC(uint8_t soc) {
void DriverViewView::selectNextField() {
if (!fieldTypeSelection.isVisible()) {
fieldTypeSelection.setVisible(true);
fieldTypeSelection.invalidate();
updateSelectedField(0);
} else {
updateSelectedField((selectedField + 1) % NUM_FIELDS);
@ -62,6 +59,7 @@ void DriverViewView::selectNextField() {
void DriverViewView::selectPrevField() {
if (!fieldTypeSelection.isVisible()) {
fieldTypeSelection.setVisible(true);
fieldTypeSelection.invalidate();
updateSelectedField(NUM_FIELDS - 1);
} else {
if (selectedField == 0) {
@ -98,10 +96,12 @@ void DriverViewView::confirmFieldType() {
}
DriverViewField &field = getField(selectedField);
field.setType(dataFieldDescs[selectedFieldType]);
presenter->setFieldType(selectedField,
static_cast<DataFieldType>(selectedFieldType));
field.setSelected(false);
fieldTypes[selectedField] = static_cast<DataFieldType>(selectedFieldType);
fieldTypeSelection.setVisible(false);
fieldTypeSelection.invalidate();
}
DriverViewField &DriverViewView::getField(size_t i) {
@ -115,11 +115,6 @@ DriverViewField &DriverViewView::getField(size_t i) {
}
}
DriverViewFieldSelection *DriverViewView::getFieldType(size_t i) {
return static_cast<DriverViewFieldSelection *>(
fieldTypeSelectionListItems.getDrawable(i));
}
void DriverViewView::updateSelectedField(size_t selected) {
getField(selectedField).setSelected(false);
DriverViewField &field = getField(selected);

View File

@ -39,6 +39,13 @@
<ClCompile Include="..\..\gui\src\common\DataField.cpp"/>
<ClCompile Include="..\..\gui\src\containers\DriverViewFieldSelection.cpp"/>
<ClCompile Include="..\..\generated\gui_generated\src\containers\DriverViewFieldSelectionBase.cpp"/>
<ClCompile Include="..\..\gui\src\containers\DebugViewItem.cpp"/>
<ClCompile Include="..\..\generated\gui_generated\src\containers\DebugViewItemBase.cpp"/>
<ClCompile Include="..\..\gui\src\debugview_screen\DebugViewPresenter.cpp"/>
<ClCompile Include="..\..\gui\src\debugview_screen\DebugViewView.cpp"/>
<ClCompile Include="..\..\generated\gui_generated\src\debugview_screen\DebugViewViewBase.cpp"/>
<ClCompile Include="..\..\gui\src\containers\DebugViewLine.cpp"/>
<ClCompile Include="..\..\generated\gui_generated\src\containers\DebugViewLineBase.cpp"/>
</ItemGroup>
<ItemGroup>
<None Include="$(ApplicationRoot)\assets\texts\texts.xml"/>
@ -207,6 +214,13 @@
<ClInclude Include="..\..\gui\include\gui\common\DataField.hpp"/>
<ClInclude Include="..\..\gui\include\gui\containers\DriverViewFieldSelection.hpp"/>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DriverViewFieldSelectionBase.hpp"/>
<ClInclude Include="..\..\gui\include\gui\containers\DebugViewItem.hpp"/>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DebugViewItemBase.hpp"/>
<ClInclude Include="..\..\gui\include\gui\debugview_screen\DebugViewPresenter.hpp"/>
<ClInclude Include="..\..\gui\include\gui\debugview_screen\DebugViewView.hpp"/>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\debugview_screen\DebugViewViewBase.hpp"/>
<ClInclude Include="..\..\gui\include\gui\containers\DebugViewLine.hpp"/>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DebugViewLineBase.hpp"/>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="$(ApplicationRoot)\generated\simulator\touchgfx.rc"/>

View File

@ -220,6 +220,18 @@
<Filter Include="Source Files\generated\gui_generated\driverview_screen">
<UniqueIdentifier>B2E02187-8256-B0BB-0B38-41E0CEB82DC4</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\gui\debugview_screen">
<UniqueIdentifier>9C41F5A3-1862-77F5-FFA6-73C00C1091C0</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\gui\debugview_screen">
<UniqueIdentifier>6BEE44E9-1803-AA97-5B96-A16955B2A089</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\generated\gui_generated\debugview_screen">
<UniqueIdentifier>1B9E4F5D-C4C8-78A8-AA28-0515479B020E</UniqueIdentifier>
</Filter>
<Filter Include="Header Files\generated\gui_generated\debugview_screen">
<UniqueIdentifier>3CC29751-0B47-BADD-4836-593204B16ED3</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="$(TouchGFXReleasePath)\framework\source\platform\driver\touch\SDL2TouchController.cpp">
@ -306,6 +318,27 @@
<ClCompile Include="..\..\generated\gui_generated\src\containers\DriverViewFieldSelectionBase.cpp">
<Filter>Source Files\generated\gui_generated\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\gui\src\containers\DebugViewItem.cpp">
<Filter>Source Files\gui\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\generated\gui_generated\src\containers\DebugViewItemBase.cpp">
<Filter>Source Files\generated\gui_generated\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\gui\src\debugview_screen\DebugViewPresenter.cpp">
<Filter>Source Files\gui\debugview_screen</Filter>
</ClCompile>
<ClCompile Include="..\..\gui\src\debugview_screen\DebugViewView.cpp">
<Filter>Source Files\gui\debugview_screen</Filter>
</ClCompile>
<ClCompile Include="..\..\generated\gui_generated\src\debugview_screen\DebugViewViewBase.cpp">
<Filter>Source Files\generated\gui_generated\debugview_screen</Filter>
</ClCompile>
<ClCompile Include="..\..\gui\src\containers\DebugViewLine.cpp">
<Filter>Source Files\gui\containers</Filter>
</ClCompile>
<ClCompile Include="..\..\generated\gui_generated\src\containers\DebugViewLineBase.cpp">
<Filter>Source Files\generated\gui_generated\containers</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="$(ApplicationRoot)\assets\texts\texts.xml">
@ -802,6 +835,27 @@
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DriverViewFieldSelectionBase.hpp">
<Filter>Header Files\generated\gui_generated\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\gui\include\gui\containers\DebugViewItem.hpp">
<Filter>Header Files\gui\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DebugViewItemBase.hpp">
<Filter>Header Files\generated\gui_generated\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\gui\include\gui\debugview_screen\DebugViewPresenter.hpp">
<Filter>Header Files\gui\debugview_screen</Filter>
</ClInclude>
<ClInclude Include="..\..\gui\include\gui\debugview_screen\DebugViewView.hpp">
<Filter>Header Files\gui\debugview_screen</Filter>
</ClInclude>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\debugview_screen\DebugViewViewBase.hpp">
<Filter>Header Files\generated\gui_generated\debugview_screen</Filter>
</ClInclude>
<ClInclude Include="..\..\gui\include\gui\containers\DebugViewLine.hpp">
<Filter>Header Files\gui\containers</Filter>
</ClInclude>
<ClInclude Include="..\..\generated\gui_generated\include\gui_generated\containers\DebugViewLineBase.hpp">
<Filter>Header Files\generated\gui_generated\containers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="$(ApplicationRoot)\generated\simulator\touchgfx.rc">

View File

@ -167,6 +167,18 @@
"ScreenTransitionType": "ScreenTransitionNone",
"ActionComponent": "DriverView"
}
},
{
"InteractionName": "DummyChangeDebugView",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 252
},
"Action": {
"Type": "ActionGotoScreen",
"ScreenTransitionType": "ScreenTransitionNone",
"ActionComponent": "DebugView"
}
}
]
},
@ -478,6 +490,42 @@
}
}
]
},
{
"Name": "DebugView",
"CanvasBufferSize": 7200,
"Components": [
{
"Type": "ScrollList",
"Name": "list",
"Y": 4,
"Width": 480,
"Height": 312,
"IsCircular": true,
"ItemTemplateName": "DebugViewLine",
"NumberofItems": 1,
"Easing": "Back",
"EasingOption": "Out",
"SwipeAcceleration": 1.0,
"DragAcceleration": 1.0
},
{
"Type": "Line",
"Name": "line1",
"Y": 3,
"Width": 480,
"Height": 1,
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"EndX": 480.0,
"LineWidth": 10.0,
"LineEndingStyle": "Round"
}
],
"Interactions": []
}
],
"CustomContainerDefinitions": [
@ -584,13 +632,14 @@
"Name": "title",
"Width": 160,
"Height": 25,
"TextId": "__SingleUse_0FBJ",
"TextId": "DriverViewField_Title",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
"Wildcard1": {}
},
{
"Type": "TextArea",
@ -633,13 +682,14 @@
"Name": "name",
"Width": 160,
"Height": 25,
"TextId": "__SingleUse_PNKR",
"TextId": "DriverViewField_Title",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
"Wildcard1": {}
},
{
"Type": "Line",
@ -687,6 +737,107 @@
}
],
"Interactions": []
},
{
"Name": "DebugViewLine",
"X": -80,
"Y": 80,
"Width": 480,
"Height": 26,
"Components": [
{
"Type": "Box",
"Name": "bg",
"Width": 480,
"Height": 26
},
{
"Type": "Line",
"Name": "line1",
"X": 240,
"Width": 1,
"Height": 26,
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"EndY": 26.0,
"LineWidth": 10.0,
"LineEndingStyle": "Round"
},
{
"Type": "Line",
"Name": "line2",
"Y": 25,
"Width": 480,
"Height": 1,
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"EndX": 480.0,
"LineWidth": 10.0,
"LineEndingStyle": "Round"
},
{
"Type": "CustomContainerInstance",
"Name": "item1",
"Width": 240,
"Height": 26,
"CustomContainerDefinitionName": "DebugViewItem"
},
{
"Type": "CustomContainerInstance",
"Name": "item2",
"X": 240,
"Width": 240,
"Height": 26,
"CustomContainerDefinitionName": "DebugViewItem"
}
],
"Interactions": []
},
{
"Name": "DebugViewItem",
"X": 40,
"Y": 227,
"Width": 240,
"Height": 26,
"Components": [
{
"Type": "TextArea",
"Name": "label",
"X": 5,
"Width": 105,
"Height": 25,
"TextId": "DebugViewField_Title",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "value",
"X": 110,
"Width": 125,
"Height": 25,
"TextId": "DefaultWildcard_RightAligned",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
}
],
"Interactions": []
}
],
"Name": "MyApplication",
@ -695,7 +846,7 @@
"Height": 480
},
"SelectedColorDepth": 16,
"StartupScreenName": "DriverView",
"StartupScreenName": "MissionSelect",
"SelectedStartupLanguage": "GB",
"TouchGfxPath": "../Middlewares/ST/touchgfx",
"UIPath": ".",