Skip to content

Commit 287399f

Browse files
authored
Navigation app: reduce memory usage (#362)
* Navigation app: - Renaming and reformatting according to coding conventions - declare iconMap as constexpr and use char* instead of std::string This reduces the flash usage from 424644B to 419344B (-5300B)!
1 parent f88c0f4 commit 287399f

2 files changed

Lines changed: 118 additions & 120 deletions

File tree

src/displayapp/screens/Navigation.cpp

Lines changed: 114 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,106 @@ using namespace Pinetime::Applications::Screens;
2424

2525
LV_FONT_DECLARE(lv_font_navi_80)
2626

27+
namespace {
28+
constexpr std::array<std::pair<const char*, const char*>, 86> m_iconMap = {{
29+
{"arrive-left", "\xEE\xA4\x81"},
30+
{"arrive-right", "\xEE\xA4\x82"},
31+
{"arrive-straight", "\xEE\xA4\x80"},
32+
{"arrive", "\xEE\xA4\x80"},
33+
{"close", "\xEE\xA4\x83"},
34+
{"continue-left", "\xEE\xA4\x85"},
35+
{"continue-right", "\xEE\xA4\x86"},
36+
{"continue-slight-left", "\xEE\xA4\x87"},
37+
{"continue-slight-right", "\xEE\xA4\x88"},
38+
{"continue-straight", "\xEE\xA4\x84"},
39+
{"continue-uturn", "\xEE\xA4\x89"},
40+
{"continue", "\xEE\xA4\x84"},
41+
{"depart-left", "\xEE\xA4\x8B"},
42+
{"depart-right", "\xEE\xA4\x8C"},
43+
{"depart-straight", "\xEE\xA4\x8A"},
44+
{"end-of-road-left", "\xEE\xA4\x8D"},
45+
{"end-of-road-right", "\xEE\xA4\x8E"},
46+
{"ferry", "\xEE\xA4\x8F"},
47+
{"flag", "\xEE\xA4\x90"},
48+
{"fork-left", "\xEE\xA4\x92"},
49+
{"fork-right", "\xEE\xA4\x93"},
50+
{"fork-slight-left", "\xEE\xA4\x94"},
51+
{"fork-slight-right", "\xEE\xA4\x95"},
52+
{"fork-straight", "\xEE\xA4\x96"},
53+
{"invalid", "\xEE\xA4\x84"},
54+
{"invalid-left", "\xEE\xA4\x85"},
55+
{"invalid-right", "\xEE\xA4\x86"},
56+
{"invalid-slight-left", "\xEE\xA4\x87"},
57+
{"invalid-slight-right", "\xEE\xA4\x88"},
58+
{"invalid-straight", "\xEE\xA4\x84"},
59+
{"invalid-uturn", "\xEE\xA4\x89"},
60+
{"merge-left", "\xEE\xA4\x97"},
61+
{"merge-right", "\xEE\xA4\x98"},
62+
{"merge-slight-left", "\xEE\xA4\x99"},
63+
{"merge-slight-right", "\xEE\xA4\x9A"},
64+
{"merge-straight", "\xEE\xA4\x84"},
65+
{"new-name-left", "\xEE\xA4\x85"},
66+
{"new-name-right", "\xEE\xA4\x86"},
67+
{"new-name-sharp-left", "\xEE\xA4\x9B"},
68+
{"new-name-sharp-right", "\xEE\xA4\x9C"},
69+
{"new-name-slight-left", "\xEE\xA4\x87"},
70+
{"new-name-slight-right", "\xEE\xA4\x88"},
71+
{"new-name-straight", "\xEE\xA4\x84"},
72+
{"notification-left", "\xEE\xA4\x85"},
73+
{"notification-right", "\xEE\xA4\x86"},
74+
{"notification-sharp-left", "\xEE\xA4\x9B"},
75+
{"notification-sharp-right", "\xEE\xA4\xA5"},
76+
{"notification-slight-left", "\xEE\xA4\x87"},
77+
{"notification-slight-right", "\xEE\xA4\x88"},
78+
{"notification-straight", "\xEE\xA4\x84"},
79+
{"off-ramp-left", "\xEE\xA4\x9D"},
80+
{"off-ramp-right", "\xEE\xA4\x9E"},
81+
{"off-ramp-slight-left", "\xEE\xA4\x9F"},
82+
{"off-ramp-slight-right", "\xEE\xA4\xA0"},
83+
{"on-ramp-left", "\xEE\xA4\x85"},
84+
{"on-ramp-right", "\xEE\xA4\x86"},
85+
{"on-ramp-sharp-left", "\xEE\xA4\x9B"},
86+
{"on-ramp-sharp-right", "\xEE\xA4\xA5"},
87+
{"on-ramp-slight-left", "\xEE\xA4\x87"},
88+
{"on-ramp-slight-right", "\xEE\xA4\x88"},
89+
{"on-ramp-straight", "\xEE\xA4\x84"},
90+
{"rotary", "\xEE\xA4\xA1"},
91+
{"rotary-left", "\xEE\xA4\xA2"},
92+
{"rotary-right", "\xEE\xA4\xA3"},
93+
{"rotary-sharp-left", "\xEE\xA4\xA4"},
94+
{"rotary-sharp-right", "\xEE\xA4\xA5"},
95+
{"rotary-slight-left", "\xEE\xA4\xA6"},
96+
{"rotary-slight-right", "\xEE\xA4\xA7"},
97+
{"rotary-straight", "\xEE\xA4\xA8"},
98+
{"roundabout", "\xEE\xA4\xA1"},
99+
{"roundabout-left", "\xEE\xA4\xA2"},
100+
{"roundabout-right", "\xEE\xA4\xA3"},
101+
{"roundabout-sharp-left", "\xEE\xA4\xA4"},
102+
{"roundabout-sharp-right", "\xEE\xA4\xA5"},
103+
{"roundabout-slight-left", "\xEE\xA4\xA6"},
104+
{"roundabout-slight-right", "\xEE\xA4\xA7"},
105+
{"roundabout-straight", "\xEE\xA4\xA8"},
106+
{"turn-left", "\xEE\xA4\x85"},
107+
{"turn-right", "\xEE\xA4\x86"},
108+
{"turn-sharp-left", "\xEE\xA4\x9B"},
109+
{"turn-sharp-right", "\xEE\xA4\xA5"},
110+
{"turn-slight-left", "\xEE\xA4\x87"},
111+
{"turn-slight-right", "\xEE\xA4\x88"},
112+
{"turn-straight", "\xEE\xA4\x84"},
113+
{"updown", "\xEE\xA4\xA9"},
114+
{"uturn", "\xEE\xA4\x89"},
115+
}};
116+
117+
const char* iconForName(const std::string& icon) {
118+
for (auto iter : m_iconMap) {
119+
if (iter.first == icon) {
120+
return iter.second;
121+
}
122+
}
123+
return "\xEE\xA4\x90";
124+
}
125+
}
126+
27127
/**
28128
* Navigation watchapp
29129
*
@@ -68,27 +168,25 @@ Navigation::~Navigation() {
68168
}
69169

70170
bool Navigation::Refresh() {
71-
72-
if (m_flag != navService.getFlag()) {
73-
m_flag = navService.getFlag();
74-
lv_label_set_text(imgFlag, iconForName(m_flag));
75-
// lv_img_set_src_arr(imgFlag, iconForName(m_flag));
171+
if (flag != navService.getFlag()) {
172+
flag = navService.getFlag();
173+
lv_label_set_text(imgFlag, iconForName(flag));
76174
}
77175

78-
if (m_narrative != navService.getNarrative()) {
79-
m_narrative = navService.getNarrative();
80-
lv_label_set_text(txtNarrative, m_narrative.data());
176+
if (narrative != navService.getNarrative()) {
177+
narrative = navService.getNarrative();
178+
lv_label_set_text(txtNarrative, narrative.data());
81179
}
82180

83-
if (m_manDist != navService.getManDist()) {
84-
m_manDist = navService.getManDist();
85-
lv_label_set_text(txtManDist, m_manDist.data());
181+
if (manDist != navService.getManDist()) {
182+
manDist = navService.getManDist();
183+
lv_label_set_text(txtManDist, manDist.data());
86184
}
87185

88-
if (m_progress != navService.getProgress()) {
89-
m_progress = navService.getProgress();
90-
lv_bar_set_value(barProgress, m_progress, LV_ANIM_OFF);
91-
if (m_progress > 90) {
186+
if (progress != navService.getProgress()) {
187+
progress = navService.getProgress();
188+
lv_bar_set_value(barProgress, progress, LV_ANIM_OFF);
189+
if (progress > 90) {
92190
lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED);
93191
} else {
94192
lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_ORANGE);
@@ -98,11 +196,4 @@ bool Navigation::Refresh() {
98196
return running;
99197
}
100198

101-
const char* Navigation::iconForName(std::string icon) {
102-
for (auto iter : m_iconMap) {
103-
if (iter.first == icon) {
104-
return iter.second;
105-
}
106-
}
107-
return "\xEE\xA4\x90";
108-
}
199+

src/displayapp/screens/Navigation.h

Lines changed: 4 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -45,103 +45,10 @@ namespace Pinetime {
4545

4646
Pinetime::Controllers::NavigationService& navService;
4747

48-
std::string m_flag;
49-
std::string m_narrative;
50-
std::string m_manDist;
51-
int m_progress;
52-
53-
/** Watchapp */
54-
55-
const char* iconForName(std::string icon);
56-
57-
std::array<std::pair<std::string, const char*>, 89> m_iconMap = {{
58-
{"arrive-left", "\xEE\xA4\x81"},
59-
{"arrive-right", "\xEE\xA4\x82"},
60-
{"arrive-straight", "\xEE\xA4\x80"},
61-
{"arrive", "\xEE\xA4\x80"},
62-
{"close", "\xEE\xA4\x83"},
63-
{"continue-left", "\xEE\xA4\x85"},
64-
{"continue-right", "\xEE\xA4\x86"},
65-
{"continue-slight-left", "\xEE\xA4\x87"},
66-
{"continue-slight-right", "\xEE\xA4\x88"},
67-
{"continue-straight", "\xEE\xA4\x84"},
68-
{"continue-uturn", "\xEE\xA4\x89"},
69-
{"continue", "\xEE\xA4\x84"},
70-
{"depart-left", "\xEE\xA4\x8B"},
71-
{"depart-right", "\xEE\xA4\x8C"},
72-
{"depart-straight", "\xEE\xA4\x8A"},
73-
{"end-of-road-left", "\xEE\xA4\x8D"},
74-
{"end-of-road-right", "\xEE\xA4\x8E"},
75-
{"ferry", "\xEE\xA4\x8F"},
76-
{"flag", "\xEE\xA4\x90"},
77-
{"fork-left", "\xEE\xA4\x92"},
78-
{"fork-right", "\xEE\xA4\x93"},
79-
{"fork-slight-left", "\xEE\xA4\x94"},
80-
{"fork-slight-right", "\xEE\xA4\x95"},
81-
{"fork-straight", "\xEE\xA4\x96"},
82-
{"invalid", "\xEE\xA4\x84"},
83-
{"invalid-left", "\xEE\xA4\x85"},
84-
{"invalid-right", "\xEE\xA4\x86"},
85-
{"invalid-slight-left", "\xEE\xA4\x87"},
86-
{"invalid-slight-right", "\xEE\xA4\x88"},
87-
{"invalid-straight", "\xEE\xA4\x84"},
88-
{"invalid-uturn", "\xEE\xA4\x89"},
89-
{"merge-left", "\xEE\xA4\x97"},
90-
{"merge-right", "\xEE\xA4\x98"},
91-
{"merge-slight-left", "\xEE\xA4\x99"},
92-
{"merge-slight-right", "\xEE\xA4\x9A"},
93-
{"merge-straight", "\xEE\xA4\x84"},
94-
{"new-name-left", "\xEE\xA4\x85"},
95-
{"new-name-right", "\xEE\xA4\x86"},
96-
{"new-name-sharp-left", "\xEE\xA4\x9B"},
97-
{"new-name-sharp-right", "\xEE\xA4\x9C"},
98-
{"new-name-slight-left", "\xEE\xA4\x87"},
99-
{"new-name-slight-right", "\xEE\xA4\x88"},
100-
{"new-name-straight", "\xEE\xA4\x84"},
101-
{"notification-left", "\xEE\xA4\x85"},
102-
{"notification-right", "\xEE\xA4\x86"},
103-
{"notification-sharp-left", "\xEE\xA4\x9B"},
104-
{"notification-sharp-right", "\xEE\xA4\xA5"},
105-
{"notification-slight-left", "\xEE\xA4\x87"},
106-
{"notification-slight-right", "\xEE\xA4\x88"},
107-
{"notification-straight", "\xEE\xA4\x84"},
108-
{"off-ramp-left", "\xEE\xA4\x9D"},
109-
{"off-ramp-right", "\xEE\xA4\x9E"},
110-
{"off-ramp-slight-left", "\xEE\xA4\x9F"},
111-
{"off-ramp-slight-right", "\xEE\xA4\xA0"},
112-
{"on-ramp-left", "\xEE\xA4\x85"},
113-
{"on-ramp-right", "\xEE\xA4\x86"},
114-
{"on-ramp-sharp-left", "\xEE\xA4\x9B"},
115-
{"on-ramp-sharp-right", "\xEE\xA4\xA5"},
116-
{"on-ramp-slight-left", "\xEE\xA4\x87"},
117-
{"on-ramp-slight-right", "\xEE\xA4\x88"},
118-
{"on-ramp-straight", "\xEE\xA4\x84"},
119-
{"rotary", "\xEE\xA4\xA1"},
120-
{"rotary-left", "\xEE\xA4\xA2"},
121-
{"rotary-right", "\xEE\xA4\xA3"},
122-
{"rotary-sharp-left", "\xEE\xA4\xA4"},
123-
{"rotary-sharp-right", "\xEE\xA4\xA5"},
124-
{"rotary-slight-left", "\xEE\xA4\xA6"},
125-
{"rotary-slight-right", "\xEE\xA4\xA7"},
126-
{"rotary-straight", "\xEE\xA4\xA8"},
127-
{"roundabout", "\xEE\xA4\xA1"},
128-
{"roundabout-left", "\xEE\xA4\xA2"},
129-
{"roundabout-right", "\xEE\xA4\xA3"},
130-
{"roundabout-sharp-left", "\xEE\xA4\xA4"},
131-
{"roundabout-sharp-right", "\xEE\xA4\xA5"},
132-
{"roundabout-slight-left", "\xEE\xA4\xA6"},
133-
{"roundabout-slight-right", "\xEE\xA4\xA7"},
134-
{"roundabout-straight", "\xEE\xA4\xA8"},
135-
{"turn-left", "\xEE\xA4\x85"},
136-
{"turn-right", "\xEE\xA4\x86"},
137-
{"turn-sharp-left", "\xEE\xA4\x9B"},
138-
{"turn-sharp-right", "\xEE\xA4\xA5"},
139-
{"turn-slight-left", "\xEE\xA4\x87"},
140-
{"turn-slight-right", "\xEE\xA4\x88"},
141-
{"turn-straight", "\xEE\xA4\x84"},
142-
{"updown", "\xEE\xA4\xA9"},
143-
{"uturn", "\xEE\xA4\x89"},
144-
}};
48+
std::string flag;
49+
std::string narrative;
50+
std::string manDist;
51+
int progress;
14552
};
14653
}
14754
}

0 commit comments

Comments
 (0)