From 449b9aae2c163a729a2abb1ecc80068467c97134 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 18:33:32 +0300 Subject: [PATCH 01/12] Cleanup, allow update only one button on slider --- nanovna.h | 1 + ui.c | 43 ++++++++++++++++++++++++------------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/nanovna.h b/nanovna.h index 647fa53..a71cb8e 100644 --- a/nanovna.h +++ b/nanovna.h @@ -1197,6 +1197,7 @@ void menu_push_lowoutput(void); void menu_push_highoutput(void); void menu_move_top(void); void draw_menu(void); +void draw_menu_mask(uint32_t mask); void refres_sweep_menu(void); int check_touched(void); int invoke_quick_menu(int); diff --git a/ui.c b/ui.c index 93facb1..437d071 100644 --- a/ui.c +++ b/ui.c @@ -22,6 +22,7 @@ #include "chprintf.h" #include "nanovna.h" #include +#include #include #pragma GCC push_options @@ -230,8 +231,8 @@ static int btn_wait_release(void) //******************************************************************************* #ifdef SOFTWARE_TOUCH // ADC read count for measure X and Y (2^N count) -#define TOUCH_X_N 2 -#define TOUCH_Y_N 2 +#define TOUCH_X_N 3 +#define TOUCH_Y_N 3 static int touch_measure_y(void) { @@ -1163,7 +1164,7 @@ static const uint8_t check_box[] = { #endif static void -draw_menu_buttons(const menuitem_t *menu, int only) +draw_menu_buttons(const menuitem_t *menu, uint32_t mask) { int i = 0; int y = 0; @@ -1174,12 +1175,12 @@ draw_menu_buttons(const menuitem_t *menu, int only) if (menuDisabled(menu[i].type)) //not applicable to mode continue; #ifdef __SWEEP_RESTART__ - if (only != -1 && only != i) { + if ((mask&(1< BUTTON_DOWN_LONG_TICKS) { + if (dt > wait) { +// wait = MS2ST(100); prev_touch_time = ticks; touch_position(&touch_x, &touch_y); - if (touch_x != prev_touch_x /* - 1 || prev_touch_x + 1 < touch_x */ ) { + if (abs(touch_x - prev_touch_x) > 1) { fetch_numeric_target(keypad); int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) @@ -1362,7 +1362,7 @@ menu_select_touch(int i, int pos) if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ #define TOUCH_DEAD_ZONE 40 if (mode == SL_UNKNOWN ) { - if (setting.slider_position - TOUCH_DEAD_ZONE < new_slider && new_slider < setting.slider_position + TOUCH_DEAD_ZONE) { // Pick up slider + if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) { // Pick up slider mode = SL_MOVE; } else { mode = SL_SPAN; @@ -1383,7 +1383,7 @@ menu_select_touch(int i, int pos) set_keypad_value(keypad); dirty = false; perform(false, 0, uistat.freq_value, false); - draw_menu(); + draw_menu_mask(1< Date: Sun, 30 May 2021 20:30:20 +0300 Subject: [PATCH 02/12] slider ui fix --- ui.c | 263 +++++++++++++++++++++++++++-------------------------------- 1 file changed, 119 insertions(+), 144 deletions(-) diff --git a/ui.c b/ui.c index 437d071..6a953cb 100644 --- a/ui.c +++ b/ui.c @@ -358,16 +358,6 @@ touch_check(void) } #endif } - #if 0 // Long press detection - systime_t ticks = chVTGetSystemTimeX(); - - if (stat && !last_touch_status) { // new button, initialize - prev_touch_time = ticks; - } - dt = ticks - prev_touch_time; - - if (stat && stat == last_touch_status && dt > BUTTON_DOWN_LONG_TICKS) {return EVT_TOUCH_LONGPRESS;} -#endif if (stat != last_touch_status) { last_touch_status = stat; return stat ? EVT_TOUCH_PRESSED : EVT_TOUCH_RELEASED; @@ -1326,138 +1316,120 @@ void check_frequency_slider(freq_t slider_freq) } } +#define TOUCH_DEAD_ZONE 40 static void menu_select_touch(int i, int pos) { long_t step = 0; int do_exit = false; selection = i; - draw_menu(); + draw_menu_mask(1< wait) { -// wait = MS2ST(100); prev_touch_time = ticks; - touch_position(&touch_x, &touch_y); - if (abs(touch_x - prev_touch_x) > 1) { - fetch_numeric_target(keypad); - int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome - if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) - new_slider = -(MENU_FORM_WIDTH-8)/2 - 1; - if (new_slider > (MENU_FORM_WIDTH-8)/2 + 1) - new_slider = (MENU_FORM_WIDTH-8)/2 + 1; - if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER){ -#define TOUCH_DEAD_ZONE 40 - if (mode == SL_UNKNOWN ) { - if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) { // Pick up slider - mode = SL_MOVE; - } else { - mode = SL_SPAN; - goto first_span; - } + systime_t dt = 0; + int mode = SL_UNKNOWN; + + systime_t ticks = chVTGetSystemTimeX(); + while (touch_check() != EVT_TOUCH_NONE){ + dt = chVTGetSystemTimeX() - ticks; + if (dt > BUTTON_DOWN_LONG_TICKS) break; + } + + if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && dt >= BUTTON_DOWN_LONG_TICKS){ + // Wait release touch and process it + while (touch_check() != EVT_TOUCH_NONE){ + touch_position(&touch_x, &touch_y); + if (abs(touch_x - prev_touch_x) < 2) continue; + + fetch_numeric_target(keypad); + int new_slider = touch_x - LCD_WIDTH/2; // Can have negative outcome + if (new_slider < - (MENU_FORM_WIDTH-8)/2 - 1) + new_slider = -(MENU_FORM_WIDTH-8)/2 - 1; + if (new_slider > (MENU_FORM_WIDTH-8)/2 + 1) + new_slider = (MENU_FORM_WIDTH-8)/2 + 1; + if (keypad == KM_CENTER) { + if (mode == SL_UNKNOWN ) { + if (abs(setting.slider_position - new_slider) < TOUCH_DEAD_ZONE) // Pick up slider + mode = SL_MOVE; + else + mode = SL_SPAN; + } + if (mode == SL_MOVE ) { + long_t freq_delta = (setting.slider_span/(MENU_FORM_WIDTH-8))*(new_slider - setting.slider_position); + if (freq_delta < 0 && uistat.freq_value < (freq_t)(-freq_delta)) + uistat.freq_value = 0; + else + uistat.freq_value+= freq_delta; + if (uistat.freq_value < minFreq) + uistat.freq_value = minFreq; + if (uistat.freq_value > maxFreq) + uistat.freq_value = maxFreq; + setting.slider_position = new_slider; + set_keypad_value(keypad); + dirty = false; + perform(false, 0, uistat.freq_value, false); + draw_menu_mask(1<0) { + setting.slider_span += setting.slider_span; + pw -= 12; + if (pw <=0) + break; + setting.slider_span += setting.slider_span + (setting.slider_span >>1); + pw -= 12; + if (pw<=0) + break; + setting.slider_span *= 2; + pw -= 12; } - if (mode == SL_MOVE ) { - long_t freq_delta = (setting.slider_span/(MENU_FORM_WIDTH-8))*(new_slider - setting.slider_position); - if (freq_delta < 0 && uistat.freq_value < (freq_t)(-freq_delta)) - uistat.freq_value = 0; - else - uistat.freq_value+= freq_delta; - if (uistat.freq_value < minFreq) - uistat.freq_value = minFreq; - if (uistat.freq_value > maxFreq) - uistat.freq_value = maxFreq; - setting.slider_position = new_slider; - set_keypad_value(keypad); - dirty = false; - perform(false, 0, uistat.freq_value, false); - draw_menu_mask(1<0) { - setting.slider_span += setting.slider_span; - pw -= 12; - if (pw <=0) - break; - setting.slider_span += setting.slider_span + (setting.slider_span >>1); - pw -= 12; - if (pw<=0) - break; - setting.slider_span *= 2; - pw -= 12; - } - if ((freq_t)setting.slider_span > (maxFreq - minFreq)) - setting.slider_span = (maxFreq - minFreq); - freq_t old_minFreq = minFreq; // Save when in high mode - minFreq = 0; // And set minFreq to 0 for span display - uistat.freq_value = setting.slider_span; - set_keypad_value(keypad); -#if 1 - plot_printf(center_text, sizeof center_text, "RANGE: %%s"); -#else - center_text[0] = 'S'; - center_text[1] = 'P'; - center_text[2] = 'A'; - center_text[3] = 'N'; -#endif - draw_menu_mask(1< (maxFreq - minFreq)) + setting.slider_span = (maxFreq - minFreq); + freq_t old_minFreq = minFreq; // Save when in high mode + minFreq = 0; // And set minFreq to 0 for span display + uistat.freq_value = setting.slider_span; + set_keypad_value(keypad); + plot_printf(center_text, sizeof center_text, "RANGE: %%s"); + draw_menu_mask(1< BUTTON_DOWN_LONG_TICKS || do_exit) { - selection = -1; - draw_menu(); -// redraw_request = 0; // reset all (not need update after) - return; - } - if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { - switch (pos) { + keypad_mode = old_keypad_mode; + selection = -1; + draw_menu(); + return; + } +// Wait touch release + touch_wait_release(); + if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { + switch (pos) { case 0: step = -10; break; @@ -1472,12 +1444,11 @@ menu_select_touch(int i, int pos) case 4: step = +10; break; - } - uistat.value = setting.external_gain + get_level() + step; - do_exit = true; - goto apply_step; - } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER) { - switch (pos) { + } + uistat.value = setting.external_gain + get_level() + step; + do_exit = true; + } else if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_CENTER) { + switch (pos) { case 0: step = setting.slider_span; step =-step; @@ -1494,21 +1465,25 @@ menu_select_touch(int i, int pos) case 4: step = setting.slider_span; break; - } - if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) - uistat.freq_value = 0; - else - uistat.freq_value = get_sweep_frequency(ST_CENTER) + step; - do_exit = true; - setting.slider_position = 0; // reset slider after step - check_frequency_slider(uistat.freq_value); - goto apply_step; } - + if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) + uistat.freq_value = 0; + else + uistat.freq_value = get_sweep_frequency(ST_CENTER) + step; + do_exit = true; + setting.slider_position = 0; // reset slider after step + check_frequency_slider(uistat.freq_value); + } + if (do_exit){ + set_keypad_value(keypad); + perform(false, 0, get_sweep_frequency(ST_CENTER), false); + selection = -1; + draw_menu(); + return; + } nogo: - setting.slider_position = 0; // Reset slider when entering frequency + setting.slider_position = 0; // Reset slider when entering frequency #endif - // touch_wait_release(); selection = -1; menu_invoke(i); From 2c25764e71bde16f3bd2a40d9576fbfd13d99704 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 20:33:40 +0300 Subject: [PATCH 03/12] Update --- ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui.c b/ui.c index 6a953cb..c89f04b 100644 --- a/ui.c +++ b/ui.c @@ -1427,7 +1427,7 @@ menu_select_touch(int i, int pos) return; } // Wait touch release - touch_wait_release(); +// touch_wait_release(); if (menu_is_form(menu) && MT_MASK(menu[i].type) == MT_KEYPAD && keypad == KM_LOWOUTLEVEL) { switch (pos) { case 0: From 8cc8e509d6c786eeb23bf48e347723b79e34391f Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 20:51:44 +0300 Subject: [PATCH 04/12] Cleanup, more smooth update --- ui.c | 91 +++++++++++++++++++++++------------------------------------- 1 file changed, 35 insertions(+), 56 deletions(-) diff --git a/ui.c b/ui.c index c89f04b..0a0ef6d 100644 --- a/ui.c +++ b/ui.c @@ -1321,12 +1321,10 @@ static void menu_select_touch(int i, int pos) { long_t step = 0; - int do_exit = false; selection = i; draw_menu_mask(1< Date: Sun, 30 May 2021 21:01:37 +0300 Subject: [PATCH 05/12] More smooth menu update on leveler/touch --- ui.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ui.c b/ui.c index 0a0ef6d..99c34a5 100644 --- a/ui.c +++ b/ui.c @@ -1321,13 +1321,14 @@ static void menu_select_touch(int i, int pos) { long_t step = 0; + uint32_t mask = (1<=0) mask|=1<=0) mask|=1<=0) mask|=1< Date: Sun, 30 May 2021 21:06:22 +0300 Subject: [PATCH 06/12] revert --- ui.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ui.c b/ui.c index 99c34a5..d3b3139 100644 --- a/ui.c +++ b/ui.c @@ -1439,11 +1439,11 @@ menu_select_touch(int i, int pos) } else if (keypad == KM_CENTER) { switch (pos) { - case 0: step = -setting.slider_span; break; - case 1: step = -setting.slider_span/10;break; + case 0: step = setting.slider_span; step=-step; break; + case 1: step = setting.slider_span/10;step=-step; break; case 2: goto nogo; - case 3: step = setting.slider_span/10;break; - case 4: step = setting.slider_span; break; + case 3: step = setting.slider_span/10;break; + case 4: step = setting.slider_span; break; } if (step < 0 && get_sweep_frequency(ST_CENTER) < (freq_t)(-step)) uistat.freq_value = 0; From f5f073a15b0d9b4b00c3093618634dd3f2912989 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 21:22:56 +0300 Subject: [PATCH 07/12] Code style, remove goto --- ui.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/ui.c b/ui.c index d3b3139..7f31679 100644 --- a/ui.c +++ b/ui.c @@ -1229,10 +1229,9 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) ili9341_blitBitmap(button_start+MENU_FORM_WIDTH- FORM_ICON_WIDTH-8,y+(button_height-FORM_ICON_HEIGHT)/2,FORM_ICON_WIDTH,FORM_ICON_HEIGHT,&right_icons[((menu[i].data >>0)&0xf)*2*FORM_ICON_HEIGHT]); } #endif - int local_slider_positions = 0; int local_text_shift = 0; if (MT_MASK(menu[i].type) == MT_KEYPAD) { - local_text_shift = 2; + int local_slider_positions = 0; if (menu[i].data == KM_CENTER) { local_slider_positions = LCD_WIDTH/2+setting.slider_position; lcd_printf(button_start+12 + 0 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", -(float)setting.slider_span); @@ -1240,7 +1239,6 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) lcd_printf(button_start+12 + 2 * MENU_FORM_WIDTH/5, y+button_height-9, "Set"); lcd_printf(button_start+12 + 3 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", (float)setting.slider_span/10); lcd_printf(button_start+12 + 4 * MENU_FORM_WIDTH/5, y+button_height-9, "%+3.0FHz", (float)setting.slider_span); - goto draw_divider; } else if (menu[i].data == KM_LOWOUTLEVEL) { local_slider_positions = ((get_level() - level_min()) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; lcd_printf(button_start+12 + 0 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", -10); @@ -1248,17 +1246,18 @@ draw_menu_buttons(const menuitem_t *menu, uint32_t mask) lcd_printf(button_start+12 + 2 * MENU_FORM_WIDTH/5, y+button_height-9, "Set"); lcd_printf(button_start+12 + 3 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", 1); lcd_printf(button_start+12 + 4 * MENU_FORM_WIDTH/5, y+button_height-9, "%+ddB", 10); - draw_divider: - for (int i = 1; i <= 4; i++) { - ili9341_line(button_start + i * MENU_FORM_WIDTH/5, y+button_height-9, button_start + i * MENU_FORM_WIDTH/5, y+button_height); - } - draw_slider: + } else if (menu[i].data == KM_HIGHOUTLEVEL) { + local_slider_positions = ((get_level() - level_min() ) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; + } + if (local_slider_positions){ if (local_slider_positions < button_start) local_slider_positions = button_start; + // Shift down text if slider present + local_text_shift = 2; ili9341_blitBitmap(local_slider_positions - 4, y, 7, 5, slider_bitmap); - } else if (menu[i].data == KM_HIGHOUTLEVEL) { - local_slider_positions = ((get_level() - level_min() ) * (MENU_FORM_WIDTH-8)) / level_range() + OFFSETX+4; - goto draw_slider; + // Draw divider for sliders + for (int i = 1; i <= 4; i++) + ili9341_line(button_start + i * MENU_FORM_WIDTH/5, y+button_height-9, button_start + i * MENU_FORM_WIDTH/5, y+button_height); } } // ili9341_drawstring_size(text, text_offs, y+(button_height-2*FONT_GET_HEIGHT)/2-local_text_shift, 2); From e9aba6d561b1e58ba66c56f512c4066331a9f840 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 30 May 2021 21:28:27 +0300 Subject: [PATCH 08/12] Redraw menu before perform --- ui.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui.c b/ui.c index 7f31679..f9eff22 100644 --- a/ui.c +++ b/ui.c @@ -1409,12 +1409,12 @@ menu_select_touch(int i, int pos) } else if (keypad == KM_LOWOUTLEVEL) { uistat.value = setting.external_gain + ((touch_x - OFFSETX+4) * level_range() ) / (MENU_FORM_WIDTH-8) + level_min() ; set_keypad_value(keypad); - perform(false, 0, get_sweep_frequency(ST_CENTER), false); draw_menu_mask(1< Date: Sun, 30 May 2021 21:54:26 +0300 Subject: [PATCH 09/12] Less size --- ui.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/ui.c b/ui.c index f9eff22..d5bc809 100644 --- a/ui.c +++ b/ui.c @@ -1319,9 +1319,7 @@ void check_frequency_slider(freq_t slider_freq) static void menu_select_touch(int i, int pos) { - long_t step = 0; - uint32_t mask = (1<=0) mask|=1<=0) mask|=1<=0) mask|=1< Date: Sun, 30 May 2021 22:06:24 +0300 Subject: [PATCH 10/12] Smooth keyboard update --- ui.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/ui.c b/ui.c index d5bc809..d87cfb4 100644 --- a/ui.c +++ b/ui.c @@ -961,12 +961,13 @@ void drawMessageBox(char *header, char *text, uint32_t delay){ } static void -draw_keypad(void) +draw_keypad(uint32_t mask) { - int i = 0; + int i; ui_button_t button; button.fg = LCD_MENU_TEXT_COLOR; - while (keypads[i].c >= 0) { + for(i = 0; keypads[i].c >= 0; i++) { + if ((mask&(1< keypads_last_index) selection = 0; - draw_keypad(); - s = btn_wait_release(); - } while (s != 0); + draw_keypad(mask|(1< Date: Sun, 30 May 2021 22:26:47 +0300 Subject: [PATCH 11/12] warning fix --- ui_sa.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui_sa.c b/ui_sa.c index 23c9c30..4bab9ed 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -790,6 +790,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_store_preset_acb) UI_FUNCTION_CALLBACK(menu_load_config_cb) { (void)item; + (void)data; sd_card_load_config("config.ini"); ui_mode_normal(); } From 645c536f0395979470279c0961165a231f638e4c Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 1 Jun 2021 22:14:38 +0300 Subject: [PATCH 12/12] Use black border for big markers --- plot.c | 252 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 130 insertions(+), 122 deletions(-) diff --git a/plot.c b/plot.c index 1eb69ce..e08a70a 100644 --- a/plot.c +++ b/plot.c @@ -735,153 +735,161 @@ static const uint8_t marker_bitmap[]={ #endif }; - #elif _MARKER_SIZE_ == 1 -#define MARKER_WIDTH 10 -#define MARKER_HEIGHT 13 -#define X_MARKER_OFFSET 4 -#define Y_MARKER_OFFSET 13 +#define MARKER_WIDTH 11 +#define MARKER_HEIGHT 14 +#define X_MARKER_OFFSET 5 +#define Y_MARKER_OFFSET 14 #define MARKER_BITMAP(i) (&marker_bitmap[(i)*2*MARKER_HEIGHT]) static const uint8_t marker_bitmap[]={ // Marker Back plate - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b1111111110000000), - _BMP16(0b0111111100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0001110000000000), - _BMP16(0b0000100000000000), - // Marker 1 - _BMP16(0b0000000000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0001110000000000), - _BMP16(0b0010110000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0001111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), _BMP16(0b0000000000000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0111111111000000), + _BMP16(0b0011111110000000), + _BMP16(0b0001111100000000), + _BMP16(0b0000111000000000), + _BMP16(0b0000010000000000), + // Marker 1 + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000111000100000), + _BMP16(0b1001011000100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000011000100000), + _BMP16(0b0100111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #if MARKERS_MAX >=2 // Marker 2 - _BMP16(0b0000000000000000), - _BMP16(0b0001111000000000), - _BMP16(0b0011001100000000), - _BMP16(0b0011001100000000), - _BMP16(0b0000001100000000), - _BMP16(0b0000011000000000), - _BMP16(0b0001110000000000), - _BMP16(0b0011000000000000), - _BMP16(0b0011000000000000), - _BMP16(0b0011111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1000111100100000), + _BMP16(0b1001100110100000), + _BMP16(0b1001100110100000), + _BMP16(0b1000000110100000), + _BMP16(0b1000001100100000), + _BMP16(0b1000111000100000), + _BMP16(0b1001100000100000), + _BMP16(0b1001100000100000), + _BMP16(0b0101111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=3 // Marker 3 - _BMP16(0b0000000000000000), - _BMP16(0b0011111000000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0000001100000000), - _BMP16(0b0000111000000000), - _BMP16(0b0000001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1001111100100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1000000110100000), + _BMP16(0b1000011100100000), + _BMP16(0b1000000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b0101111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=4 // Marker 4 - _BMP16(0b0000000000000000), - _BMP16(0b0000011000000000), - _BMP16(0b0000111000000000), - _BMP16(0b0001111000000000), - _BMP16(0b0011011000000000), - _BMP16(0b0110011000000000), - _BMP16(0b0110011000000000), - _BMP16(0b0111111100000000), - _BMP16(0b0000011000000000), - _BMP16(0b0000011000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1000001100100000), + _BMP16(0b1000011100100000), + _BMP16(0b1000111100100000), + _BMP16(0b1001101100100000), + _BMP16(0b1011001100100000), + _BMP16(0b1011001100100000), + _BMP16(0b1011111110100000), + _BMP16(0b1000001100100000), + _BMP16(0b0100001101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=5 // Marker 5 - _BMP16(0b0000000000000000), - _BMP16(0b0111111100000000), - _BMP16(0b0110000000000000), - _BMP16(0b0110000000000000), - _BMP16(0b0111111000000000), - _BMP16(0b0110001100000000), - _BMP16(0b0000001100000000), - _BMP16(0b0000001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1011111110100000), + _BMP16(0b1011000000100000), + _BMP16(0b1011000000100000), + _BMP16(0b1011111100100000), + _BMP16(0b1011000110100000), + _BMP16(0b1000000110100000), + _BMP16(0b1000000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b0101111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=6 // Marker 6 - _BMP16(0b0000000000000000), - _BMP16(0b0011111000000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110000000000000), - _BMP16(0b0110111000000000), - _BMP16(0b0111001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1001111100100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000000100000), + _BMP16(0b1011011100100000), + _BMP16(0b1011100110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b0101111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=7 // Marker 7 - _BMP16(0b0000000000000000), - _BMP16(0b0111111100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0000001100000000), - _BMP16(0b0000011000000000), - _BMP16(0b0000110000000000), - _BMP16(0b0001100000000000), - _BMP16(0b0001100000000000), - _BMP16(0b0001100000000000), - _BMP16(0b0001100000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1011111110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1000000110100000), + _BMP16(0b1000001100100000), + _BMP16(0b1000011000100000), + _BMP16(0b1000110000100000), + _BMP16(0b1000110000100000), + _BMP16(0b1000110000100000), + _BMP16(0b0100110001000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif #if MARKERS_MAX >=8 // Marker 8 - _BMP16(0b0000000000000000), - _BMP16(0b0011111000000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0110001100000000), - _BMP16(0b0011111000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), - _BMP16(0b0000000000000000), + _BMP16(0b1111111111100000), + _BMP16(0b1000000000100000), + _BMP16(0b1001111100100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1001111100100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b1011000110100000), + _BMP16(0b0101111101000000), + _BMP16(0b0010000010000000), + _BMP16(0b0001000100000000), + _BMP16(0b0000101000000000), #endif }; #endif