@@ -56,19 +56,22 @@ static const struct ao_transform show_transform = {
56
56
#define LOGO_FONT BenguiatGothicStd_Bold_26_font
57
57
58
58
#define LABEL_Y (int16_t) (SMALL_FONT.ascent)
59
- #define VALUE_Y (int16_t) (LABEL_Y + BIG_FONT.ascent + 5)
60
- #define BOX_X 2
61
- #define PAD_X 90
62
- #define BOX_LABEL_X 26
59
+ #define VALUE_Y (int16_t) (LABEL_Y + 5 + BIG_FONT.ascent)
60
+
61
+ #define SEP_X 82
62
+ #define SEP_WIDTH 2
63
+
64
+ #define BOX_X (SEP_X / 2)
65
+ #define PAD_X ((WIDTH + SEP_X + SEP_WIDTH) / 2)
66
+
63
67
#define VALUE_LABEL_X 64
64
68
#define RSSI_LABEL_X 15
65
- #define PAD_LABEL_X 95
66
- #define SEP_X (PAD_X - 8)
69
+
67
70
#define SCAN_X (WIDTH - 100) / 2
68
71
#define SCAN_Y 50
69
72
#define SCAN_HEIGHT 3
70
73
#define FOUND_Y 63
71
- #define FOUND_X 6
74
+ #define FOUND_X 3
72
75
#define FOUND_WIDTH (WIDTH - 6)
73
76
#define CONTRAST_LABEL_X 37
74
77
#define CONTRAST_WIDTH 100
@@ -95,42 +98,47 @@ static uint8_t ao_lco_select_mode;
95
98
static uint8_t ao_lco_event_debug ;
96
99
97
100
#define PRINTE (...) do { if (!ao_lco_debug && !ao_lco_event_debug) break; printf ("\r%5lu %s: ", (unsigned long) ao_tick_count, __func__); printf(__VA_ARGS__); flush(); } while(0)
98
- #define AO_LCO_SELECT_PAD 0
99
- #define AO_LCO_SELECT_BOX 1
101
+ #define AO_LCO_SELECT_BOX 0
102
+ #define AO_LCO_SELECT_PAD 1
100
103
101
104
static uint8_t ao_lco_display_mutex ;
102
105
106
+ static void
107
+ _ao_center_text (int16_t x , int16_t y , const struct ao_font * font , const char * str )
108
+ {
109
+ int16_t width = ao_text_width (font , str );
110
+ ao_text (& fb , font , x - width /2 , y , str , AO_BLACK , AO_COPY );
111
+ }
112
+
103
113
static void
104
114
_ao_lco_show_pad (int8_t pad )
105
115
{
106
116
char str [5 ];
107
117
118
+ _ao_center_text (PAD_X , LABEL_Y , & SMALL_FONT , "Pad" );
108
119
snprintf (str , sizeof (str ), "%d" , pad );
109
- ao_text (& fb , & BIG_FONT , PAD_X , VALUE_Y , str , AO_BLACK , AO_COPY );
110
- ao_text (& fb , & SMALL_FONT , PAD_LABEL_X , LABEL_Y , "Pad" , AO_BLACK , AO_COPY );
120
+ _ao_center_text (PAD_X , VALUE_Y , & BIG_FONT , str );
111
121
}
112
122
113
123
static void
114
124
_ao_lco_show_box (int16_t box )
115
125
{
116
126
char str [7 ];
117
127
118
- snprintf ( str , sizeof ( str ), "%2d" , box );
119
- ao_text ( & fb , & BIG_FONT , BOX_X , VALUE_Y , str , AO_BLACK , AO_COPY );
120
- ao_text ( & fb , & SMALL_FONT , BOX_LABEL_X , LABEL_Y , "Box" , AO_BLACK , AO_COPY );
128
+ _ao_center_text ( BOX_X , LABEL_Y , & SMALL_FONT , "Bank" );
129
+ snprintf ( str , sizeof ( str ), "%d" , box );
130
+ _ao_center_text ( BOX_X , VALUE_Y , & BIG_FONT , str );
121
131
}
122
132
123
133
static void
124
134
_ao_lco_show_voltage (uint16_t decivolts , const char * label )
125
135
{
126
136
char str [7 ];
127
- int16_t width ;
128
137
129
138
PRINTD ("voltage %d\n" , decivolts );
130
- snprintf (str , sizeof (str ), "%2d.%d" , decivolts / 10 , decivolts % 10 );
131
- ao_text (& fb , & VOLT_FONT , BOX_X , VALUE_Y , str , AO_BLACK , AO_COPY );
132
- width = ao_text_width (& SMALL_FONT , label );
133
- ao_text (& fb , & SMALL_FONT , VALUE_LABEL_X - width /2 , LABEL_Y , label , AO_BLACK , AO_COPY );
139
+ _ao_center_text (WIDTH /2 , LABEL_Y , & SMALL_FONT , label );
140
+ snprintf (str , sizeof (str ), "%d.%d" , decivolts / 10 , decivolts % 10 );
141
+ _ao_center_text (WIDTH /2 , VALUE_Y , & BIG_FONT , str );
134
142
}
135
143
136
144
static void
@@ -151,14 +159,11 @@ _ao_lco_show_contrast(void)
151
159
char buf [8 ];
152
160
uint8_t brightness = ao_st7565_get_brightness ();
153
161
int16_t contrast = (int16_t ) (brightness * CONTRAST_WIDTH / AO_LCO_MAX_CONTRAST );
154
- int16_t width ;
155
162
156
- ao_text ( & fb , & SMALL_FONT , CONTRAST_LABEL_X , LABEL_Y , "Contrast" , AO_BLACK , AO_COPY );
163
+ _ao_center_text ( WIDTH / 2 , LABEL_Y , & SMALL_FONT , "Contrast" );
157
164
ao_rect (& fb , CONTRAST_X , CONTRAST_Y , contrast , CONTRAST_HEIGHT , AO_BLACK , AO_COPY );
158
- /* this "knows" that CONTRAST_WIDTH == 100 */
159
- snprintf (buf , sizeof (buf ), "%d %%" , contrast );
160
- width = ao_text_width (& SMALL_FONT , buf );
161
- ao_text (& fb , & SMALL_FONT , BACKLIGHT_VALUE_X - width / 2 , BACKLIGHT_VALUE_Y , buf , AO_BLACK , AO_COPY );
165
+ snprintf (buf , sizeof (buf ), "%d %%" , brightness * 100 / AO_LCO_MAX_CONTRAST );
166
+ _ao_center_text (WIDTH /2 , CONTRAST_VALUE_Y , & SMALL_FONT , buf );
162
167
}
163
168
164
169
static void
@@ -167,14 +172,11 @@ _ao_lco_show_backlight(void)
167
172
char buf [8 ];
168
173
int32_t backlight = ao_lco_get_backlight ();
169
174
int16_t value = (int16_t ) (backlight * BACKLIGHT_WIDTH / AO_LCO_MAX_BACKLIGHT );
170
- int16_t width ;
171
175
172
- ao_text ( & fb , & SMALL_FONT , BACKLIGHT_LABEL_X , LABEL_Y , "Backlight" , AO_BLACK , AO_COPY );
176
+ _ao_center_text ( WIDTH / 2 , LABEL_Y , & SMALL_FONT , "Backlight" );
173
177
ao_rect (& fb , BACKLIGHT_X , BACKLIGHT_Y , value , BACKLIGHT_HEIGHT , AO_BLACK , AO_COPY );
174
- /* this "knows" that BACKLIGHT_WIDTH == 100 */
175
- snprintf (buf , sizeof (buf ), "%d %%" , value );
176
- width = ao_text_width (& SMALL_FONT , buf );
177
- ao_text (& fb , & SMALL_FONT , BACKLIGHT_VALUE_X - width / 2 , BACKLIGHT_VALUE_Y , buf , AO_BLACK , AO_COPY );
178
+ snprintf (buf , sizeof (buf ), "%ld %%" , backlight * 100 / AO_LCO_MAX_BACKLIGHT );
179
+ _ao_center_text (WIDTH /2 , BACKLIGHT_VALUE_Y , & SMALL_FONT , buf );
178
180
}
179
181
180
182
static int16_t info_y ;
@@ -210,7 +212,7 @@ _ao_lco_show_rssi(void)
210
212
{
211
213
char label [20 ];
212
214
int16_t width ;
213
- snprintf (label , sizeof (label ), "Box %d RSSI" , ao_lco_box );
215
+ snprintf (label , sizeof (label ), "Bank %d RSSI" , ao_lco_box );
214
216
width = ao_text_width (& SMALL_FONT , label );
215
217
ao_text (& fb , & SMALL_FONT , VALUE_LABEL_X - width / 2 , LABEL_Y , label , AO_BLACK , AO_COPY );
216
218
if (!(ao_lco_valid [ao_lco_box ] & AO_LCO_VALID_LAST ))
@@ -225,7 +227,7 @@ static void
225
227
_ao_lco_show_pad_battery (void )
226
228
{
227
229
char label [20 ];
228
- snprintf (label , sizeof (label ), "Box %d Battery" , ao_lco_box );
230
+ snprintf (label , sizeof (label ), "Bank %d Battery" , ao_lco_box );
229
231
_ao_lco_show_voltage (ao_pad_query .battery , label );
230
232
}
231
233
@@ -258,7 +260,7 @@ ao_lco_show(void)
258
260
default :
259
261
_ao_lco_show_pad (ao_lco_pad );
260
262
_ao_lco_show_box (ao_lco_box );
261
- ao_rect (& fb , SEP_X , 0 , 2 , HEIGHT , AO_BLACK , AO_COPY );
263
+ ao_rect (& fb , SEP_X , 0 , SEP_WIDTH , HEIGHT , AO_BLACK , AO_COPY );
262
264
}
263
265
break ;
264
266
}
@@ -420,14 +422,18 @@ static struct ao_task ao_lco_monitor_task;
420
422
static struct ao_task ao_lco_arm_warn_task ;
421
423
static struct ao_task ao_lco_igniter_status_task ;
422
424
423
- static int16_t found_x ;
425
+ static int16_t found_width ;
426
+ #define MAX_FOUND 32
427
+ static int16_t found_boxes [MAX_FOUND ];
428
+ static uint8_t nfound ;
424
429
425
430
void
426
431
ao_lco_search_start (void )
427
432
{
428
433
ao_rect (& fb , 0 , 0 , WIDTH , HEIGHT , AO_WHITE , AO_COPY );
429
434
ao_logo (& fb , & logo_transform , & LOGO_FONT , AO_BLACK , AO_COPY );
430
- found_x = FOUND_X ;
435
+ found_width = 0 ;
436
+ nfound = 0 ;
431
437
}
432
438
433
439
void
@@ -442,11 +448,30 @@ void
442
448
ao_lco_search_box_present (int16_t box )
443
449
{
444
450
char str [8 ];
445
- if (found_x < FOUND_WIDTH )
451
+ int16_t width ;
452
+ int16_t box_top = FOUND_Y - TINY_FONT .ascent ;
453
+ int16_t x ;
454
+ uint8_t n ;
455
+
456
+ snprintf (str , sizeof (str ), "%s%u" , nfound ? ", " : "" , box );
457
+ width = ao_text_width (& TINY_FONT , str );
458
+ while (found_width + width > FOUND_WIDTH || nfound == MAX_FOUND )
446
459
{
447
- snprintf (str , sizeof (str ), "%s%02u" , found_x ? ", " : "" , box );
448
- found_x = ao_text (& fb , & TINY_FONT , found_x , FOUND_Y , str , AO_BLACK , AO_COPY );
460
+ snprintf (str , sizeof (str ), "%u, " , found_boxes [0 ]);
461
+ found_width -= ao_text_width (& TINY_FONT , str );
462
+ memmove (& found_boxes [0 ], & found_boxes [1 ], (nfound - 1 ) * sizeof (int16_t ));
463
+ nfound -- ;
464
+ }
465
+ found_boxes [nfound ++ ] = box ;
466
+
467
+ ao_rect (& fb , FOUND_X , FOUND_Y - TINY_FONT .ascent , FOUND_WIDTH , HEIGHT - box_top , AO_WHITE , AO_COPY );
468
+ x = FOUND_X ;
469
+ for (n = 0 ; n < nfound ; n ++ ) {
470
+ snprintf (str , sizeof (str ), "%s%u" , n ? ", " : "" , found_boxes [n ]);
471
+ int16_t next_x = ao_text (& fb , & TINY_FONT , x , FOUND_Y , str , AO_BLACK , AO_COPY );
472
+ x = next_x ;
449
473
}
474
+ found_width = x - FOUND_X ;
450
475
}
451
476
452
477
void
0 commit comments