Change Font size (more readable)

Rework display spi driver:
 use DMA for read, write
 add blitBitmap functions
 Use DMA for color fill
 More correct SPI bus control
Move color definitions to nanovna.h
Some code optimization for speed and size (save about 3k bytes)
Change grid Y resolution to 10
Fix convert from float to int (fix some rounding errors on plot)
Disable unused HAL serial
Change battery icon
This commit is contained in:
ВшЫдщкв 2020-01-19 11:16:18 +03:00
parent 18a1ca4e6e
commit 6f666cf31b
9 changed files with 4027 additions and 3938 deletions

4820
Font5x7.c

File diff suppressed because it is too large Load diff

View file

@ -132,7 +132,7 @@
* @brief Enables the SERIAL subsystem.
*/
#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
#define HAL_USE_SERIAL TRUE
#define HAL_USE_SERIAL FALSE
#endif
/**

966
ili9341.c

File diff suppressed because it is too large Load diff

53
main.c
View file

@ -533,32 +533,21 @@ static void cmd_dump(BaseSequentialStream *chp, int argc, char *argv[])
static void cmd_capture(BaseSequentialStream *chp, int argc, char *argv[])
{
// read pixel count at one time (PART*2 bytes required for read buffer)
#define PART 320
(void)argc;
(void)argv;
chMtxLock(&mutex);
// use uint16_t spi_buffer[1024] (defined in ili9341) for read buffer
uint16_t *buf = &spi_buffer[0];
int len = 320 * 240;
int i;
ili9341_read_memory(0, 0, 320, 240, PART, buf);
for (i = 0; i < PART; i++) {
streamPut(chp, buf[i] >> 8);
streamPut(chp, buf[i] & 0xff);
}
len -= PART;
while (len > 0) {
ili9341_read_memory_continue(PART, buf);
for (i = 0; i < PART; i++) {
streamPut(chp, buf[i] >> 8);
streamPut(chp, buf[i] & 0xff);
// read 2 row pixel time (read buffer limit by 2/3 + 1 from spi_buffer size)
for (int y=0; y < 240; y+=2)
{
// use uint16_t spi_buffer[1024] (defined in ili9341) for read buffer
uint8_t *buf = (uint8_t *)spi_buffer;
ili9341_read_memory(0, y, 320, 2, 2*320, spi_buffer);
for (int i = 0; i < 4*320; i++) {
streamPut(chp, *buf++);
}
len -= PART;
}
//*/
chMtxUnlock(&mutex);
}
@ -602,10 +591,10 @@ static void cmd_sample(BaseSequentialStream *chp, int argc, char *argv[])
config_t config = {
.magic = CONFIG_MAGIC,
.dac_value = 1922,
.grid_color = 0x1084,
.menu_normal_color = 0xffff,
.menu_active_color = 0x7777,
.trace_color = { RGB565(0,255,255), RGB565(255,0,40), RGB565(0,0,255), RGB565(50,255,0) },
.grid_color = DEFAULT_GRID_COLOR,
.menu_normal_color = DEFAULT_MENU_COLOR,
.menu_active_color = DEFAULT_MENU_ACTIVE_COLOR,
.trace_color = { DEFAULT_TRACE_1_COLOR, DEFAULT_TRACE_2_COLOR, DEFAULT_TRACE_3_COLOR, DEFAULT_TRACE_4_COLOR },
// .touch_cal = { 693, 605, 124, 171 }, // 2.4 inch LCD panel
.touch_cal = { 338, 522, 153, 192 }, // 2.8 inch LCD panel
.default_loadcal = 0,
@ -618,10 +607,10 @@ properties_t current_props = {
._frequency1 = 900000000, // end = 900MHz
._sweep_points = 101,
._trace = {/*enable, type, channel, polar, scale, refpos*/
{ 1, TRC_LOGMAG, 0, 0, 1.0, 7.0 },
{ 1, TRC_LOGMAG, 1, 0, 1.0, 7.0 },
{ 1, TRC_LOGMAG, 0, 0, 1.0, 9.0 },
{ 1, TRC_LOGMAG, 1, 0, 1.0, 9.0 },
{ 1, TRC_SMITH, 0, 1, 1.0, 0.0 },
{ 1, TRC_PHASE, 1, 0, 1.0, 4.0 }
{ 1, TRC_PHASE, 1, 0, 1.0, 5.0 }
},
._markers = {
{ 1, 30, 0 }, { 0, 40, 0 }, { 0, 60, 0 }, { 0, 80, 0 }
@ -1431,17 +1420,17 @@ const struct {
uint16_t refpos;
float scale_unit;
} trace_info[] = {
{ "LOGMAG", 7, 10 },
{ "PHASE", 4, 90 },
{ "DELAY", 4, 1e-9 },
{ "LOGMAG", 9, 10 },
{ "PHASE", 5, 90 },
{ "DELAY", 5, 1e-9 },
{ "SMITH", 0, 1 },
{ "POLAR", 0, 1 },
{ "LINEAR", 0, 0.125 },
{ "SWR", 0, 1 },
{ "REAL", 4, 0.25 },
{ "IMAG", 4, 0.25 },
{ "REAL", 5, 0.25 },
{ "IMAG", 5, 0.25 },
{ "R", 0, 100 },
{ "X", 4, 100 }
{ "X", 5, 100 }
};
const char * const trc_channel_name[] = {

View file

@ -117,7 +117,9 @@
#define STM32_I2C_BUSY_TIMEOUT 50
#define STM32_I2C_I2C1_IRQ_PRIORITY 3
#define STM32_I2C_I2C2_IRQ_PRIORITY 3
#define STM32_I2C_USE_DMA TRUE
// I2C1 rx operation use DMA3, some as SPI1 DMA Tx used by LCD
#define STM32_I2C_USE_DMA FALSE
#define STM32_I2C_I2C1_DMA_PRIORITY 1
#define STM32_I2C_I2C2_DMA_PRIORITY 1
#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)

View file

@ -19,6 +19,9 @@
*/
#include "ch.h"
// Need enable HAL_USE_SPI in halconf.h
#define __USE_DISPLAY_DMA__
/*
* main.c
*/
@ -129,7 +132,12 @@ extern void tlv320aic3204_select(int channel);
#define OFFSETX 15
#define OFFSETY 0
#define WIDTH 291
#define HEIGHT 233
#define HEIGHT 230
// Smith/polar chart
#define P_CENTER_X 145
#define P_CENTER_Y 115
#define P_RADIUS 115
#define CELLOFFSETX 5
#define AREA_WIDTH_NORMAL (WIDTH + CELLOFFSETX*2)
@ -137,21 +145,29 @@ extern void tlv320aic3204_select(int channel);
extern int area_width;
extern int area_height;
#define GRIDY 29
#define GRIDY 23
// font
extern const uint8_t x5x7_bits [];
extern const uint8_t numfont20x22[][22 * 3];
#define FONT_GET_DATA(ch) (&x5x7_bits[ch*7])
#define FONT_GET_WIDTH(ch) (7-(x5x7_bits[ch*7]&3))
#define FONT_GET_HEIGHT 7
extern const uint16_t numfont16x22[];
#define NUM_FONT_GET_DATA(ch) (&numfont16x22[ch*22])
#define NUM_FONT_GET_WIDTH 16
#define NUM_FONT_GET_HEIGHT 22
#define S_DELTA "\004"
#define S_DEGREE "\037"
#define S_SARROW "\030"
#define S_INFINITY "\031"
#define S_LARROW "\032"
#define S_RARROW "\033"
#define S_PI "\034"
#define S_MICRO "\035"
#define S_OHM "\036"
#define S_DEGREE "\037"
#define S_LARROW "\032"
#define S_RARROW "\033"
// trace
#define TRACES_MAX 4
@ -261,8 +277,34 @@ extern int16_t vbat;
/*
* ili9341.c
*/
#define RGB565(b,r,g) ( (((b)<<8)&0xfc00) | (((r)<<2)&0x03e0) | (((g)>>3)&0x001f) )
// SPI bus revert byte order
//gggBBBbb RRRrrGGG
#define RGB565(r,g,b) ( (((g)&0x1c)<<11) | (((b)&0xf8)<<5) | ((r)&0xf8) | (((g)&0xe0)>>5) )
#define RGBHEX(hex) ( (((hex)&0x001c00)<<3) | (((hex)&0x0000f8)<<5) | (((hex)&0xf80000)>>16) | (((hex)&0x00e000)>>13) )
#define DEFAULT_FG_COLOR RGB565(255,255,255)
#define DEFAULT_BG_COLOR RGB565( 0, 0, 0)
#define DEFAULT_GRID_COLOR RGB565(128,128,128)
#define DEFAULT_MENU_COLOR RGB565(255,255,255)
#define DEFAULT_MENU_TEXT_COLOR RGB565( 0, 0, 0)
#define DEFAULT_MENU_ACTIVE_COLOR RGB565(180,255,180)
#define DEFAULT_TRACE_1_COLOR RGB565( 0,255,255)
#define DEFAULT_TRACE_2_COLOR RGB565(255, 0, 40)
#define DEFAULT_TRACE_3_COLOR RGB565( 0, 0,255)
#define DEFAULT_TRACE_4_COLOR RGB565( 50,255, 0)
/*
#define DEFAULT_FG_COLOR RGB565( 0, 0, 0)
#define DEFAULT_BG_COLOR RGB565(255,255,255)
#define DEFAULT_GRID_COLOR RGB565(150,150,150)
#define DEFAULT_MENU_TEXT_COLOR RGB565( 0, 0, 0)
#define DEFAULT_MENU_COLOR RGB565(180,180,180)
#define DEFAULT_MENU_ACTIVE_COLOR RGB565(180,255,180)
#define DEFAULT_TRACE_1_COLOR RGB565( 0,255,255)
#define DEFAULT_TRACE_2_COLOR RGB565(255, 0, 40)
#define DEFAULT_TRACE_3_COLOR RGB565( 0, 0,255)
#define DEFAULT_TRACE_4_COLOR RGB565( 50,255, 0)
*/
typedef struct {
uint16_t width;
uint16_t height;
@ -271,23 +313,30 @@ typedef struct {
const uint8_t *bitmap;
} font_t;
extern const font_t NF20x22;
extern uint16_t foreground_color;
extern uint16_t background_color;
extern uint16_t spi_buffer[1024];
void ili9341_init(void);
//void ili9341_setRotation(uint8_t r);
void ili9341_test(int mode);
void ili9341_bulk(int x, int y, int w, int h);
void ili9341_fill(int x, int y, int w, int h, int color);
void ili9341_drawchar_5x7(uint8_t ch, int x, int y, uint16_t fg, uint16_t bg);
void ili9341_drawstring_5x7(const char *str, int x, int y, uint16_t fg, uint16_t bg);
void ili9341_drawstring_5x7_inv(const char *str, int x, int y, uint16_t fg, uint16_t bg, bool inv);
void ili9341_drawchar_size(uint8_t ch, int x, int y, uint16_t fg, uint16_t bg, uint8_t size);
void ili9341_drawstring_size(const char *str, int x, int y, uint16_t fg, uint16_t bg, uint8_t size);
void ili9341_drawfont(uint8_t ch, const font_t *font, int x, int y, uint16_t fg, uint16_t bg);
void setForegroundColor(uint16_t fg);
void setBackgroundColor(uint16_t fg);
void blit8BitWidthBitmap(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *bitmap);
void blit16BitWidthBitmap(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint16_t *bitmap);
void ili9341_drawchar(uint8_t ch, int x, int y);
void ili9341_drawstring(const char *str, int x, int y);
void ili9341_drawstringV(const char *str, int x, int y);
int ili9341_drawchar_size(uint8_t ch, int x, int y, uint8_t size);
void ili9341_drawstring_size(const char *str, int x, int y, uint8_t size);
void ili9341_drawfont(uint8_t ch, int x, int y);
void ili9341_read_memory(int x, int y, int w, int h, int len, uint16_t* out);
void ili9341_read_memory_continue(int len, uint16_t* out);
void ili9341_line(int x0, int y0, int x1, int y1);
void show_version(void);
void show_logo(void);
/*
* flash.c
@ -404,14 +453,4 @@ int16_t adc_vbat_read(ADC_TypeDef *adc);
*/
#define PULSE do { palClearPad(GPIOC, GPIOC_LED); palSetPad(GPIOC, GPIOC_LED);} while(0)
// convert vbat [mV] to battery indicator
static inline uint8_t vbat2bati(int16_t vbat)
{
if (vbat < 3200) return 0;
if (vbat < 3450) return 25;
if (vbat < 3700) return 50;
if (vbat < 4100) return 75;
return 100;
}
/*EOF*/

File diff suppressed because it is too large Load diff

764
plot.c

File diff suppressed because it is too large Load diff

177
ui.c
View file

@ -305,7 +305,7 @@ void touch_wait_release(void)
} while(status != EVT_TOUCH_RELEASED);
}
extern void ili9341_line(int, int, int, int, int);
extern void ili9341_line(int, int, int, int);
void
touch_cal_exec(void)
@ -314,11 +314,12 @@ touch_cal_exec(void)
int x1, x2, y1, y2;
adc_stop(ADC1);
ili9341_fill(0, 0, 320, 240, 0);
ili9341_line(0, 0, 0, 32, 0xffff);
ili9341_line(0, 0, 32, 0, 0xffff);
ili9341_drawstring_5x7("TOUCH UPPER LEFT", 10, 10, 0xffff, 0x0000);
setForegroundColor(DEFAULT_FG_COLOR);
setBackgroundColor(DEFAULT_BG_COLOR);
ili9341_fill(0, 0, 320, 240, DEFAULT_BG_COLOR);
ili9341_line(0, 0, 0, 32);
ili9341_line(0, 0, 32, 0);
ili9341_drawstring("TOUCH UPPER LEFT", 10, 10);
do {
status = touch_check();
@ -326,10 +327,10 @@ touch_cal_exec(void)
x1 = last_touch_x;
y1 = last_touch_y;
ili9341_fill(0, 0, 320, 240, 0);
ili9341_line(320-1, 240-1, 320-1, 240-32, 0xffff);
ili9341_line(320-1, 240-1, 320-32, 240-1, 0xffff);
ili9341_drawstring_5x7("TOUCH LOWER RIGHT", 230, 220, 0xffff, 0x0000);
ili9341_fill(0, 0, 320, 240, DEFAULT_BG_COLOR);
ili9341_line(320-1, 240-1, 320-1, 240-32);
ili9341_line(320-1, 240-1, 320-32, 240-1);
ili9341_drawstring("TOUCH LOWER RIGHT", 230, 220);
do {
status = touch_check();
@ -355,8 +356,10 @@ touch_draw_test(void)
adc_stop(ADC1);
ili9341_fill(0, 0, 320, 240, 0);
ili9341_drawstring_5x7("TOUCH TEST: DRAG PANEL", OFFSETX, 233, 0xffff, 0x0000);
ili9341_fill(0, 0, 320, 240, DEFAULT_BG_COLOR);
setForegroundColor(DEFAULT_FG_COLOR);
setBackgroundColor(DEFAULT_BG_COLOR);
ili9341_drawstring("TOUCH TEST: DRAG PANEL", OFFSETX, 233);
do {
status = touch_check();
@ -366,7 +369,7 @@ touch_draw_test(void)
do {
status = touch_check();
touch_position(&x1, &y1);
ili9341_line(x0, y0, x1, y1, 0xffff);
ili9341_line(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
chThdSleepMilliseconds(50);
@ -390,21 +393,23 @@ show_version(void)
int x = 5, y = 5;
adc_stop(ADC1);
ili9341_fill(0, 0, 320, 240, 0);
ili9341_fill(0, 0, 320, 240, DEFAULT_BG_COLOR);
ili9341_drawstring_size(BOARD_NAME, x, y, 0xffff, 0x0000, 4);
setForegroundColor(DEFAULT_FG_COLOR);
setBackgroundColor(DEFAULT_BG_COLOR);
ili9341_drawstring_size(BOARD_NAME, x, y, 4);
y += 25;
ili9341_drawstring_5x7("2016-2019 Copyright @edy555", x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Licensed under GPL. See: https://github.com/ttrftech/NanoVNA", x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Version: " VERSION, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Build Time: " __DATE__ " - " __TIME__, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring("2016-2019 Copyright @edy555", x, y += 10);
ili9341_drawstring("Licensed under GPL. See: https://github.com/ttrftech/NanoVNA", x, y += 10);
ili9341_drawstring("Version: " VERSION, x, y += 10);
ili9341_drawstring("Build Time: " __DATE__ " - " __TIME__, x, y += 10);
y += 5;
ili9341_drawstring_5x7("Kernel: " CH_KERNEL_VERSION, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Compiler: " PORT_COMPILER_NAME, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Architecture: " PORT_ARCHITECTURE_NAME " Core Variant: " PORT_CORE_VARIANT_NAME, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Port Info: " PORT_INFO, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("Platform: " PLATFORM_NAME, x, y += 10, 0xffff, 0x0000);
ili9341_drawstring("Kernel: " CH_KERNEL_VERSION, x, y += 10);
ili9341_drawstring("Compiler: " PORT_COMPILER_NAME, x, y += 10);
ili9341_drawstring("Architecture: " PORT_ARCHITECTURE_NAME " Core Variant: " PORT_CORE_VARIANT_NAME, x, y += 10);
ili9341_drawstring("Port Info: " PORT_INFO, x, y += 10);
ili9341_drawstring("Platform: " PLATFORM_NAME, x, y += 10);
while (true) {
if (touch_check() == EVT_TOUCH_PRESSED)
@ -422,11 +427,12 @@ enter_dfu(void)
adc_stop(ADC1);
int x = 5, y = 5;
setForegroundColor(DEFAULT_FG_COLOR);
setBackgroundColor(DEFAULT_BG_COLOR);
// leave a last message
ili9341_fill(0, 0, 320, 240, 0);
ili9341_drawstring_5x7("DFU: Device Firmware Update Mode", x, y += 10, 0xffff, 0x0000);
ili9341_drawstring_5x7("To exit DFU mode, please reset device yourself.", x, y += 10, 0xffff, 0x0000);
ili9341_fill(0, 0, 320, 240, DEFAULT_BG_COLOR);
ili9341_drawstring("DFU: Device Firmware Update Mode", x, y += 10);
ili9341_drawstring("To exit DFU mode, please reset device yourself.", x, y += 10);
// see __early_init in ./NANOVNA_STM32_F072/board.c
*((unsigned long *)BOOT_FROM_SYTEM_MEMORY_MAGIC_ADDRESS) = BOOT_FROM_SYTEM_MEMORY_MAGIC;
@ -453,6 +459,11 @@ static void menu_move_back(void);
static void
menu_calop_cb(int item)
{
static const uint8_t cal_type[]={CAL_OPEN, CAL_SHORT, CAL_LOAD, CAL_ISOLN, CAL_THRU};
if (item < 0 && item >= sizeof(cal_type))
return;
cal_collect(cal_type[item]);
/*
switch (item) {
case 0: // OPEN
cal_collect(CAL_OPEN);
@ -469,7 +480,7 @@ menu_calop_cb(int item)
case 4: // THRU
cal_collect(CAL_THRU);
break;
}
}*/
selection = item+1;
draw_cal_status();
draw_menu();
@ -607,6 +618,11 @@ menu_trace_cb(int item)
static void
menu_format_cb(int item)
{
static const uint8_t types[]={TRC_LOGMAG, TRC_PHASE, TRC_DELAY, TRC_SMITH, TRC_SWR};
if (item < 0 && item >= sizeof(types))
return;
set_trace_type(uistat.current_trace, types[item]);
/*
switch (item) {
case 0:
set_trace_type(uistat.current_trace, TRC_LOGMAG);
@ -623,7 +639,7 @@ menu_format_cb(int item)
case 4:
set_trace_type(uistat.current_trace, TRC_SWR);
break;
}
}*/
request_to_redraw_grid();
ui_mode_normal();
@ -633,6 +649,11 @@ menu_format_cb(int item)
static void
menu_format2_cb(int item)
{
static const uint8_t types[]={TRC_POLAR, TRC_LINEAR, TRC_REAL, TRC_IMAG, TRC_R, TRC_X};
if (item < 0 && item >= sizeof(types))
return;
set_trace_type(uistat.current_trace, types[item]);
/*
switch (item) {
case 0:
set_trace_type(uistat.current_trace, TRC_POLAR);
@ -652,7 +673,7 @@ menu_format2_cb(int item)
case 5:
set_trace_type(uistat.current_trace, TRC_X);
break;
}
}*/
request_to_redraw_grid();
ui_mode_normal();
@ -1335,8 +1356,10 @@ draw_keypad(void)
uint16_t bg = config.menu_normal_color;
if (i == selection)
bg = config.menu_active_color;
setForegroundColor(DEFAULT_MENU_TEXT_COLOR);
setBackgroundColor(bg);
ili9341_fill(keypads[i].x, keypads[i].y, 44, 44, bg);
ili9341_drawfont(keypads[i].c, &NF20x22, keypads[i].x+12, keypads[i].y+10, 0x0000, bg);
ili9341_drawfont(keypads[i].c, keypads[i].x+14, keypads[i].y+10);
i++;
}
}
@ -1344,9 +1367,11 @@ draw_keypad(void)
void
draw_numeric_area_frame(void)
{
ili9341_fill(0, 208, 320, 32, 0xffff);
ili9341_drawstring_5x7(keypad_mode_label[keypad_mode], 10, 220, 0x0000, 0xffff);
//ili9341_drawfont(KP_KEYPAD, &NF20x22, 300, 216, 0x0000, 0xffff);
ili9341_fill(0, 208, 320, 32, DEFAULT_MENU_COLOR);
setForegroundColor(DEFAULT_MENU_TEXT_COLOR);
setBackgroundColor(DEFAULT_MENU_COLOR);
ili9341_drawstring(keypad_mode_label[keypad_mode], 10, 220);
//ili9341_drawfont(KP_KEYPAD, 300, 216);
}
void
@ -1355,10 +1380,11 @@ draw_numeric_input(const char *buf)
int i = 0;
int x = 64;
int focused = FALSE;
const uint16_t xsim[] = { 0, 0, 8, 0, 0, 8, 0, 0, 0, 0 };
for (i = 0; i < 10 && buf[i]; i++) {
uint16_t fg = 0x0000;
uint16_t bg = 0xffff;
uint16_t xsim = 0b0010010000000000;
for (i = 0; i < 10 && buf[i]; i++, xsim<<=1) {
uint16_t fg = DEFAULT_MENU_TEXT_COLOR;
uint16_t bg = DEFAULT_MENU_COLOR;
int c = buf[i];
if (c == '.')
c = KP_PERIOD;
@ -1373,24 +1399,21 @@ draw_numeric_input(const char *buf)
fg = RGB565(128,255,128);
focused = TRUE;
if (uistat.digit_mode)
bg = 0x0000;
bg = DEFAULT_MENU_COLOR;
}
setForegroundColor(fg);
setBackgroundColor(bg);
if (c >= 0)
ili9341_drawfont(c, &NF20x22, x, 208+4, fg, bg);
ili9341_drawfont(c, x, 208+4);
else if (focused)
ili9341_drawfont(0, &NF20x22, x, 208+4, fg, bg);
ili9341_drawfont(0, x, 208+4);
else
ili9341_fill(x, 208+4, 20, 24, bg);
x += 20;
if (xsim[i] > 0) {
//ili9341_fill(x, 208+4, xsim[i], 20, bg);
x += xsim[i];
}
x += xsim&0x8000 ? 18+8 : 18;
}
if (i < 10) {
ili9341_fill(x, 208+4, 20*(10-i), 24, 0xffff);
ili9341_fill(x, 208+4, 20*(10-i), 24, DEFAULT_MENU_COLOR);
}
}
@ -1415,24 +1438,25 @@ menu_item_modify_attribute(const menuitem_t *menu, int item,
} else if (menu == menu_marker_sel) {
if (item < 4) {
if (markers[item].enabled) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (item == 5) {
if (uistat.marker_delta) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
}
} else if (menu == menu_marker_search) {
if (item == 4 && marker_tracking) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_marker_smith) {
if (marker_smith_format == item) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_calop) {
if ((item == 0 && (cal_status & CALSTAT_OPEN))
@ -1441,18 +1465,18 @@ menu_item_modify_attribute(const menuitem_t *menu, int item,
|| (item == 3 && (cal_status & CALSTAT_ISOLN))
|| (item == 4 && (cal_status & CALSTAT_THRU))) {
domain_mode = (domain_mode & ~DOMAIN_MODE) | DOMAIN_FREQ;
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_stimulus) {
if (item == 5 /* PAUSE */ && !sweep_enabled) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_cal) {
if (item == 3 /* CORRECTION */ && (cal_status & CALSTAT_APPLY)) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_transform) {
if ((item == 0 && (domain_mode & DOMAIN_MODE) == DOMAIN_TIME)
@ -1460,16 +1484,16 @@ menu_item_modify_attribute(const menuitem_t *menu, int item,
|| (item == 2 && (domain_mode & TD_FUNC) == TD_FUNC_LOWPASS_STEP)
|| (item == 3 && (domain_mode & TD_FUNC) == TD_FUNC_BANDPASS)
) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
} else if (menu == menu_transform_window) {
if ((item == 0 && (domain_mode & TD_WINDOW) == TD_WINDOW_MINIMUM)
|| (item == 1 && (domain_mode & TD_WINDOW) == TD_WINDOW_NORMAL)
|| (item == 2 && (domain_mode & TD_WINDOW) == TD_WINDOW_MAXIMUM)
) {
*bg = 0x0000;
*fg = 0xffff;
*bg = DEFAULT_MENU_TEXT_COLOR;
*fg = config.menu_normal_color;
}
}
}
@ -1486,18 +1510,22 @@ draw_menu_buttons(const menuitem_t *menu)
continue;
int y = 32*i;
uint16_t bg = config.menu_normal_color;
uint16_t fg = 0x0000;
uint16_t fg = DEFAULT_MENU_TEXT_COLOR;
// focus only in MENU mode but not in KEYPAD mode
if (ui_mode == UI_MENU && i == selection)
bg = config.menu_active_color;
ili9341_fill(320-60, y, 60, 30, bg);
menu_item_modify_attribute(menu, i, &fg, &bg);
setForegroundColor(fg);
setBackgroundColor(bg);
if (menu_is_multiline(menu[i].label, &l1, &l2)) {
ili9341_drawstring_5x7(l1, 320-54, y+8, fg, bg);
ili9341_drawstring_5x7(l2, 320-54, y+15, fg, bg);
ili9341_fill(320-57, y+6, 54, 19, bg);
ili9341_drawstring(l1, 320-55, y+8);
ili9341_drawstring(l2, 320-55, y+16);
} else {
ili9341_drawstring_5x7(menu[i].label, 320-54, y+12, fg, bg);
ili9341_fill(320-57, y+10, 54, 11, bg);
ili9341_drawstring(menu[i].label, 320-55, y+12);
}
}
}
@ -1546,8 +1574,7 @@ draw_menu(void)
void
erase_menu_buttons(void)
{
uint16_t bg = 0;
ili9341_fill(320-60, 0, 60, 32*7, bg);
ili9341_fill(320-60, 0, 60, 32*7, DEFAULT_BG_COLOR);
}
void
@ -1667,7 +1694,7 @@ ui_mode_menu(void)
ui_mode = UI_MENU;
/* narrowen plotting area */
area_width = AREA_WIDTH_NORMAL - (64-8);
area_height = HEIGHT;
area_height = HEIGHT+1;
ensure_selection();
draw_menu();
}
@ -1721,7 +1748,7 @@ ui_mode_normal(void)
return;
area_width = AREA_WIDTH_NORMAL;
area_height = HEIGHT;
area_height = HEIGHT+1;
leave_ui_mode();
ui_mode = UI_NORMAL;
}