first commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Tool to extract 8x8 font data, save to bitmap file, and apply modifications
|
||||
# to source code after editing the bitmap.
|
||||
|
||||
from __future__ import print_function
|
||||
from matplotlib.pyplot import imread, imsave, imshow, show
|
||||
import numpy as np
|
||||
import sys
|
||||
|
||||
# Where to find the font data - may need updated if code has changed.
|
||||
source_file = 'ui_lcd_hy28_fonts.c'
|
||||
start_marker = 'const uint8_t GL_ASCII8x8_Table [] ='
|
||||
start_offset = 2 # Data starts this number of lines after start marker.
|
||||
end_marker = '};' # Indicates end of font data.
|
||||
|
||||
# Image filename used in extract and insert modes.
|
||||
image_file = 'font-8x8.png'
|
||||
|
||||
#mode = None
|
||||
#mode = show
|
||||
mode = extract
|
||||
#mode = insert
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
mode = sys.argv[1]
|
||||
|
||||
if mode not in ('show', 'extract', 'insert'):
|
||||
print("Usage: %s { show | extract | insert }" % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
# Get the literals used to populate the font array in the source file
|
||||
lines = [line.rstrip() for line in open(source_file).readlines()]
|
||||
start = lines.index(start_marker) + start_offset
|
||||
end = start + lines[start:].index(end_marker)
|
||||
data = str.join("", lines[start:end])
|
||||
|
||||
# Eval the literals to get the values into a numpy array
|
||||
packed = eval("np.array([%s], np.uint8)" % data)
|
||||
|
||||
# Reorganise into a monochrome image, with the 96 8 x 8 characters
|
||||
# laid out in 8 rows by 12 columns for easier viewing/editing
|
||||
unpacked = np.unpackbits(packed)
|
||||
bitmaps = unpacked.reshape(96, 8, 8)
|
||||
indices = np.arange(96).reshape(8, 12)
|
||||
image = np.block([[bitmaps[idx] for idx in row] for row in indices])
|
||||
|
||||
if mode == 'show':
|
||||
# Display font image
|
||||
imshow(image, cmap='binary')
|
||||
show()
|
||||
|
||||
elif mode == 'extract':
|
||||
# Save font image
|
||||
imsave(image_file, image, format='png', cmap='binary')
|
||||
|
||||
elif mode == 'insert':
|
||||
# Read in modified font image
|
||||
image = imread(image_file)[:,:,0].astype(bool)
|
||||
|
||||
# Reorganise back to original order
|
||||
bitmaps = np.vstack([np.vstack(np.split(row, 12, 1))
|
||||
for row in np.split(image, 8)])
|
||||
unpacked = bitmaps.reshape(-1)
|
||||
packed = ~np.packbits(unpacked)
|
||||
|
||||
# Replace lines of file in same format as used before
|
||||
grouped = packed.reshape(-1, 8)
|
||||
for i, group in enumerate(grouped):
|
||||
line = (" " + " 0x%02x," * 8) % tuple(group)
|
||||
lines[start + i] = line
|
||||
|
||||
# Write out modified source file
|
||||
open(source_file, 'w').writelines([line + "\n" for line in lines])
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,301 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
/************************************************************************************
|
||||
** **
|
||||
** mcHF QRP Transceiver **
|
||||
** K Atanassov - M0NKA 2014 **
|
||||
** **
|
||||
**---------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: **
|
||||
** Description: **
|
||||
** Last Modified: **
|
||||
** Licence: GNU GPLv3 **
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef __UI_LCD_HY28_H
|
||||
#define __UI_LCD_HY28_H
|
||||
|
||||
#include "uhsdr_types.h"
|
||||
|
||||
|
||||
|
||||
#define RGB(red,green,blue)(uint16_t)(((red>>3)<<11)|((green>>2)<<5)|(blue>> 3))
|
||||
|
||||
// Colors definitions, go to http://www.color-hex.com/
|
||||
// choose a new one and declare here
|
||||
//
|
||||
#define White 0xFFFF
|
||||
#define Black 0x0000
|
||||
|
||||
#ifdef GREY_STYLE
|
||||
#define Grey 0xBDF5 //RGB(0xb8,0xbc,0xa8)
|
||||
#define Blue 0x632C //RGB(0x66,0x66,0x66)
|
||||
#define Blue2 0x4A69 //RGB(0x4C,0x4C,0x4C)
|
||||
#define Blue3 0x1082 //RGB(0x10,0x10,0x10)
|
||||
#define Red 0x8C51 //RGB(0x89,0x89,0x89)
|
||||
#define Red2 0xA534 //RGB(0xA7,0xA7,0xA7)
|
||||
#define Red3 0xD69A //RGB(0xD0,0xD0,0xD0)
|
||||
#define Red4 0x18E3 //RGB(0x1C,0x1C,0x1C)
|
||||
#define Magenta 0x94B2 //RGB(0x95,0x95,0x95)
|
||||
#define Green 0xDEFB //RGB(0xDC,0xDC,0xDC)
|
||||
#define Green2 0x31A6 //RGB(0x36,0x36,0x36)
|
||||
#define Cyan 0xE73C //RGB(0xE5,0xE5,0xE5)
|
||||
#define Yellow 0xF7BE //RGB(0xF7,0xF7,0xF7)
|
||||
#define Orange 0xBDF7 //RGB(0xBC,0xBC,0xBC)
|
||||
#define Cream 0xE73C //RGB(0xE7,0xE7,0xE7)
|
||||
#define Grey1 0x8410 //RGB(0x80,0x80,0x80)
|
||||
#define Grey2 0xC618 //RGB(0xC0,0xC0,0xC0)
|
||||
#define Grey3 0xA555 //RGB(0xA6,0xA8,0xAD)
|
||||
#define Grey4 0x4208 //RGB(0x40,0x40,0x40)
|
||||
#define Grey5 0x630C //RGB(0x60,0x60,0x60)
|
||||
#define Grey6 0x7BCF //RGB(0x78,0x78,0x78)
|
||||
#define Grey7 0x2104 //RGB(0x20,0x20,0x20)
|
||||
#define RX_Grey 0xBED5 //RGB(0xb8,0xdb,0xa8)
|
||||
#define TX_Grey 0xED74 //RGB(0xe8,0xad,0xa0)
|
||||
#define Brown 0x4A49 //RGB(0x4A,0x4A,0x4A)
|
||||
#elif defined(SEPIA_STYLE)
|
||||
#define Grey 0xD5AE //RGB(0xD6,0xB6,0x77)
|
||||
#define Blue 0x7B28 //RGB(0x7A,0x64,0x45)
|
||||
#define Blue2 0x5A46 //RGB(0x5C,0x4B,0x33)
|
||||
#define Blue3 0x1061 //RGB(0x11,0x0E,0x0B)
|
||||
#define Red 0xA42B //RGB(0xA2,0x86,0x5D)
|
||||
#define Red2 0xC50E //RGB(0xC4,0xA2,0x73)
|
||||
#define Red3 0xF651 //RGB(0xF3,0xCA,0x8F)
|
||||
#define Red4 0x20C2 //RGB(0x21,0x1A,0x14)
|
||||
#define Magenta 0xB48C //RGB(0xB1,0x92,0x67)
|
||||
#define Green 0xFEB3 //RGB(0xFF,0xD7,0x9E)
|
||||
#define Green2 0x41A4 //RGB(0x41,0x34,0x24)
|
||||
#define Cyan 0xFFF6 //RGB(0xFF,0xFF,0xB5)
|
||||
#define Yellow 0xFFDD //RGB(0xFF,0xF8,0xEC)
|
||||
#define Orange 0xDDB0 //RGB(0xDC,0xB6,0x81)
|
||||
#define Cream 0xFF37 //RGB(0xFF,0xE4,0xBC)
|
||||
#define Grey1 0x93EA //RGB(0x96,0x7C,0x56)
|
||||
#define Grey2 0xE5F0 //RGB(0xE0,0xBC,0x85)
|
||||
#define Grey3 0xFEB2 //RGB(0xFF,0xD4,0x97)
|
||||
#define Grey4 0x49E5 //RGB(0x4D,0x3E,0x2A)
|
||||
#define Grey5 0x72E8 //RGB(0x72,0x5D,0x40)
|
||||
#define Grey6 0x8BAA //RGB(0x8D,0x74,0x50)
|
||||
#define Grey7 0x20E2 //RGB(0x27,0x1F,0x17)
|
||||
#define RX_Grey 0xDDB0 //RGB(0xDB,0xB5,0x80)
|
||||
#define TX_Grey 0xDDB0 //RGB(0xDB,0xB5,0x80)
|
||||
#define Brown 0x5A46 //RGB(0x59,0x49,0x31)
|
||||
#else
|
||||
#define Grey 0xBDF5 //RGB(0xb8,0xbc,0xa8) //=0xBDF5
|
||||
#define Blue 0x529F //RGB(0x50,0x50,0xFF) // Brighter Blue //Original - 0x001F =#0000FF
|
||||
#define Blue2 0x051F // =#00A0FF
|
||||
#define Blue3 0x000A //RGB(0x00,0x00,0x50)
|
||||
#define Red 0xF9C7 //RGB(0xFF,0x38,0x38) // Brighter (easier to see) Red //Original 0xF800 =#FF0000
|
||||
#define Red2 0xFC10 //RGB(0xFF,0x80,0x80) // Even "brighter" red (almost pink)
|
||||
#define Red3 0xFE18 //RGB(0xFF,0xC0,0xC0) // A sort of pink-ish, pale red
|
||||
#define Red4 0x4000 //RGB(0x40,0x00,0x00)
|
||||
#define Magenta 0xF99F //RGB(0xFF,0x30,0xFF) // Brighter Magenta //Original 0xF81F =#FF00FF
|
||||
#define Green 0x07E0 // =#00FF00
|
||||
#define Green2 0x0200 //RGB(0x00,0x40,0x00)
|
||||
#define Cyan 0x7FFF
|
||||
#define Yellow 0xFFE4 //RGB(0xFF,0xFF,0x20) // "Yellower" and brighter //Original - 0xFFE0 =#FFFF00
|
||||
#define Orange 0xFD44 //RGB(0xFF,0xA8,0x20) //"Orange-er" and brighter //Original - RGB(0xF6,0xA0,0x1A)
|
||||
#define Cream 0xEF3A //RGB(0xED,0xE7,0xD7)
|
||||
#define Grey1 0x8410 //RGB(0x80,0x80,0x80)
|
||||
#define Grey2 0xC618 //RGB(0xC0,0xC0,0xC0)
|
||||
#define Grey3 0xA555 //RGB(0xA6,0xA8,0xAD)
|
||||
#define Grey4 0x4208 //RGB(0x40,0x40,0x40)
|
||||
#define Grey5 0x630C //RGB(0x60,0x60,0x60)
|
||||
#define Grey6 0x7BCF //RGB(0x78,0x78,0x78)
|
||||
#define Grey7 0x2104 //RGB(0x20,0x20,0x20)
|
||||
#define RX_Grey 0xBED5 //RGB(0xb8,0xdb,0xa8) // slightly green grey
|
||||
#define TX_Grey 0xED74 //RGB(0xe8,0xad,0xa0) // slightly red(ish) grey (more magenta, actually...)
|
||||
#define Brown 0x6204 //RGB(0x65,0x43,0x21)
|
||||
#endif
|
||||
|
||||
#define SMALL_FONT_WIDTH 8
|
||||
#define LARGE_FONT_WIDTH 16
|
||||
|
||||
|
||||
#define LCD_DIR_HORIZONTAL 0x0000
|
||||
#define LCD_DIR_VERTICAL 0x0001
|
||||
|
||||
#define GRADIENT_STEP 8
|
||||
|
||||
#define TOUCHSCREEN_NO_MIRROR_NOFLIP 0
|
||||
#define TOUCHSCREEN_X_MIRROR_NOFLIP 1
|
||||
#define TOUCHSCREEN_Y_MIRROR_NOFLIP 2
|
||||
#define TOUCHSCREEN_XY_MIRROR_NOFLIP 3
|
||||
#define TOUCHSCREEN_NO_MIRROR_FLIPXY 4
|
||||
#define TOUCHSCREEN_X_MIRROR_FLIPXY 5
|
||||
#define TOUCHSCREEN_Y_MIRROR_FLIPXY 6
|
||||
#define TOUCHSCREEN_XY_MIRROR_FLIPXY 7
|
||||
|
||||
|
||||
// ----------------------------------------------------------
|
||||
|
||||
typedef enum
|
||||
{
|
||||
DISPLAY_NONE = 0,
|
||||
DISPLAY_HY28A_SPI,
|
||||
DISPLAY_HY28B_SPI,
|
||||
DISPLAY_HY28B_PARALLEL,
|
||||
DISPLAY_RA8875_SPI,
|
||||
DISPLAY_RA8875_PARALLEL,
|
||||
DISPLAY_ILI9486_PARALLEL,
|
||||
DISPLAY_ST7796_PARALLEL,
|
||||
DISPLAY_RPI_SPI,
|
||||
DISPLAY_HY32D_PARALLEL_SSD1289,
|
||||
|
||||
// keep this always at the end of the enum
|
||||
DISPLAY_NUM
|
||||
} mchf_display_types_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t reg;
|
||||
uint16_t val;
|
||||
} RegisterValue_t;
|
||||
|
||||
typedef struct RegisterValueSetInfo_s {
|
||||
const RegisterValue_t* addr;
|
||||
size_t size;
|
||||
} RegisterValueSetInfo_t;
|
||||
|
||||
#define REGVAL_DATA (0xffff) // we indicate that the value is to be written using WriteData instead of WriteReg
|
||||
#define REGVAL_DELAY (0x0000) // we indicate that the value is to be used as delay in ms instead of WriteReg
|
||||
|
||||
typedef struct
|
||||
{
|
||||
mchf_display_types_t display_type;
|
||||
const char* name;
|
||||
uint16_t (*ReadDisplayId)();
|
||||
void (*SetActiveWindow) (uint16_t XLeft, uint16_t XRight, uint16_t YTop, uint16_t YBottom);
|
||||
void (*SetCursorA)( unsigned short Xpos, unsigned short Ypos );
|
||||
void (*WriteRAM_Prepare) ();
|
||||
void (*WriteDataSpiStart_Prepare)();
|
||||
void (*WriteIndexSpi_Prepare)();
|
||||
void (*WriteReg)(unsigned short LCD_Reg, unsigned short LCD_RegValue);
|
||||
uint16_t (*ReadReg)( uint16_t LCD_Reg);
|
||||
void (*DrawStraightLine)(uint16_t x, uint16_t y, uint16_t Length, uint8_t Direction,uint16_t color);
|
||||
void (*DrawFullRect)(uint16_t Xpos, uint16_t Ypos, uint16_t Height, uint16_t Width ,uint16_t color);
|
||||
void (*DrawColorPoint)(uint16_t Xpos, uint16_t Ypos, uint16_t point);
|
||||
GPIO_TypeDef* spi_cs_port;
|
||||
uint16_t spi_cs_pin;
|
||||
uint16_t is_spi:1;
|
||||
uint16_t spi_speed:1;
|
||||
} uhsdr_display_info_t;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t display_type; // existence/identification of display type
|
||||
uint16_t DeviceCode; // LCD ident code
|
||||
bool use_spi;
|
||||
int16_t lcd_cs;
|
||||
uint16_t MAX_X;
|
||||
uint16_t MAX_Y;
|
||||
GPIO_TypeDef* lcd_cs_pio;
|
||||
const RegisterValueSetInfo_t* reg_info;
|
||||
void (*SetActiveWindow) (uint16_t XLeft, uint16_t XRight, uint16_t YTop, uint16_t YBottom);
|
||||
void (*SetCursorA)( unsigned short Xpos, unsigned short Ypos );
|
||||
void (*WriteRAM_Prepare) ();
|
||||
void (*WriteDataSpiStart_Prepare)();
|
||||
void (*WriteIndexSpi_Prepare)();
|
||||
void (*WriteReg)(unsigned short LCD_Reg, unsigned short LCD_RegValue);
|
||||
uint16_t (*ReadReg)( uint16_t LCD_Reg);
|
||||
void (*DrawStraightLine)(uint16_t x, uint16_t y, uint16_t Length, uint8_t Direction,uint16_t color);
|
||||
void (*DrawFullRect)(uint16_t Xpos, uint16_t Ypos, uint16_t Height, uint16_t Width ,uint16_t color);
|
||||
void (*DrawColorPoint)(uint16_t Xpos, uint16_t Ypos, uint16_t point);
|
||||
} mchf_display_t;
|
||||
|
||||
extern mchf_display_t mchf_display;
|
||||
|
||||
const uhsdr_display_info_t* UiLcdHy28_DisplayInfoGet(mchf_display_types_t display_type);
|
||||
|
||||
void UiLcdHy28_LcdClear(ushort Color);
|
||||
|
||||
//uint16_t UiLcdHy28_PrintText(uint16_t Xpos, uint16_t Ypos, const char *str,const uint32_t Color, const uint32_t bkColor, uchar font);
|
||||
uint16_t UiLcdHy28_PrintText(uint16_t Xpos, uint16_t Ypos, const char *str, uint32_t Color, uint32_t bkColor, uchar font);
|
||||
//uint16_t UiLcdHy28_PrintTextRight(uint16_t Xpos, uint16_t Ypos, const char *str,const uint32_t Color, const uint32_t bkColor, uchar font);
|
||||
uint16_t UiLcdHy28_PrintTextRight(uint16_t Xpos, uint16_t Ypos, const char *str, uint32_t Color, uint32_t bkColor, uchar font);
|
||||
uint16_t UiLcdHy28_PrintTextCentered(const uint16_t bbX,const uint16_t bbY,const uint16_t bbW,const char* txt,uint32_t clr_fg,uint32_t clr_bg,uint8_t font);
|
||||
|
||||
//void UiLcdHy28_PrintTextVertLen(uint16_t XposStart, uint16_t YposStart, const char *str, const uint16_t len, const uint32_t clr_fg, const uint32_t clr_bg);
|
||||
void UiLcdHy28_PrintTextVertLen(uint16_t XposStart, uint16_t YposStart, const char *str, const uint16_t len, uint32_t clr_fg, uint32_t clr_bg);
|
||||
|
||||
uint16_t UiLcdHy28_TextWidth(const char *str, uchar font);
|
||||
uint16_t UiLcdHy28_TextHeight(uint8_t font);
|
||||
|
||||
void UiLcdHy28_DrawStraightLine(ushort Xpos, ushort Ypos, ushort Length, uchar Direction,ushort color);
|
||||
void UiLcdHy28_DrawStraightLineDouble(ushort Xpos, ushort Ypos, ushort Length, uchar Direction,ushort color);
|
||||
void UiLcdHy28_DrawStraightLineTriple(ushort Xpos, ushort Ypos, ushort Length, uchar Direction,ushort color);
|
||||
void UiLcdHy28_DrawHorizLineWithGrad(ushort Xpos, ushort Ypos, ushort Length,ushort gradient_start);
|
||||
|
||||
void UiLcdHy28_DrawEmptyRect(ushort Xpos, ushort Ypos, ushort Height, ushort Width, ushort color);
|
||||
void UiLcdHy28_DrawBottomButton(ushort Xpos, ushort Ypos, ushort Height, ushort Width,ushort color);
|
||||
void UiLcdHy28_DrawFullRect (ushort Xpos, ushort Ypos, ushort Height, ushort Width, ushort color);
|
||||
|
||||
void UiLcdHy28_DrawColorPoint(ushort x, ushort y, ushort color);
|
||||
|
||||
void UiLcdHy28_BulkPixel_OpenWrite(ushort x, ushort width, ushort y, ushort height);
|
||||
void UiLcdHy28_BulkPixel_CloseWrite(void);
|
||||
void UiLcdHy28_BulkPixel_Put(uint16_t pixel);
|
||||
void UiLcdHy28_BulkPixel_PutBuffer(uint16_t* pixel_buffer, uint32_t len);
|
||||
void UiLcdHy28_BulkPixel_BufferFlush(void);
|
||||
|
||||
uint8_t UiLcdHy28_Init(void);
|
||||
|
||||
void UiLcdHy28_BacklightEnable(bool on);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t state;
|
||||
|
||||
uint16_t xraw;
|
||||
uint16_t yraw;
|
||||
int16_t xraw_m1;
|
||||
int16_t xraw_m2;
|
||||
int16_t yraw_m1;
|
||||
int16_t yraw_m2;
|
||||
int16_t focus_xprev;
|
||||
int16_t focus_yprev;
|
||||
//int32_t xraw_avgBuff;
|
||||
//int32_t yraw_avgBuff;
|
||||
int16_t hr_x;
|
||||
int16_t hr_y;
|
||||
uint16_t xraw_prev;
|
||||
uint16_t yraw_prev;
|
||||
int32_t cal[6];
|
||||
bool present;
|
||||
|
||||
} mchf_touchscreen_t;
|
||||
|
||||
|
||||
#define TP_DATASETS_VALID 0x04 // number of sets that must be identical for marked as VALID
|
||||
#define TP_DATASETS_WAIT 0x01 // first dataset received
|
||||
#define TP_DATASETS_PROCESSED 0xff
|
||||
#define TP_DATASETS_NONE 0x00
|
||||
|
||||
extern mchf_touchscreen_t mchf_touchscreen;
|
||||
|
||||
void UiLcdHy28_TouchscreenDetectPress(void);
|
||||
void UiLcdHy28_TouchscreenReadCoordinates(void);
|
||||
bool UiLcdHy28_TouchscreenHasProcessableCoordinates(void);
|
||||
void UiLcdHy28_TouchscreenInit(uint8_t mirror);
|
||||
|
||||
|
||||
/*
|
||||
// FIXME: THIS MUST BE HANDLED DIFFERENTLY, IT DOES NOT ALWAYS SEES
|
||||
// THE CONFIGURATION FROM uhsdr_board.h but due to dependency issues, we cannot include
|
||||
// uhsdr_board.h at the top
|
||||
#ifdef USE_DISP_480_320
|
||||
#define MAX_X 480
|
||||
#define MAX_Y 320
|
||||
#elif defined(USE_DISP_800_480)
|
||||
#define MAX_X 800
|
||||
#define MAX_Y 480
|
||||
#else
|
||||
#ifdef Simulate320_240_on_480_320
|
||||
#define MAX_X 480
|
||||
#define MAX_Y 320
|
||||
#else
|
||||
#define MAX_X 320
|
||||
#define MAX_Y 240
|
||||
#endif
|
||||
#endif
|
||||
*/
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
/************************************************************************************
|
||||
** **
|
||||
** mcHF QRP Transceiver **
|
||||
** K Atanassov - M0NKA 2014 **
|
||||
** **
|
||||
**---------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: **
|
||||
** Description: **
|
||||
** Last Modified: **
|
||||
** Licence: GNU GPLv3 **
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef __UI_LCD_HY28_FONTS_H
|
||||
#define __UI_LCD_HY28_FONTS_H
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const uint8_t width;
|
||||
const void* data;
|
||||
} symbolData_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const void *table;
|
||||
uint8_t Width;
|
||||
uint8_t Height;
|
||||
uint16_t maxCode;
|
||||
uint8_t BitCount;
|
||||
uint8_t firstCode;
|
||||
uint8_t Spacing;
|
||||
#ifdef USE_8bit_FONT
|
||||
const uint16_t *offsetTable;
|
||||
const uint8_t *heightTable;
|
||||
const uint8_t *widthTable;
|
||||
#endif
|
||||
} sFONT;
|
||||
|
||||
|
||||
#endif //__UI_LCD_HY28_FONTS_H
|
||||
@@ -0,0 +1,758 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
/************************************************************************************
|
||||
** **
|
||||
** UHSDR **
|
||||
** a powerful firmware for STM32 based SDR transceivers **
|
||||
** **
|
||||
**--------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: ui_lcd_layouts.c **
|
||||
** Description: Layout definitions file **
|
||||
** Licence: GNU GPLv3 **
|
||||
** Author: Slawomir Balon/SP9BSL **
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef BOOTLOADER_BUILD
|
||||
#include "uhsdr_board.h"
|
||||
#include "ui_lcd_layouts.h"
|
||||
#include "ui_driver.h"
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//some local 480x320 calculations to make life easier in case of change something
|
||||
|
||||
#define R480320_TUNE_FREQ_X 280
|
||||
#define R480320_TUNE_FREQ_Y 36
|
||||
#define R480320_TUNE_SPLIT_FREQ_X (R480320_TUNE_FREQ_X+80)//Shift with a small split to the right to close the frequency digits.
|
||||
#define R480320_TUNE_SPLIT_MARKER_X (R480320_TUNE_FREQ_X+40)
|
||||
#define R480320_TUNE_SPLIT_FREQ_Y_TX (R480320_TUNE_FREQ_Y+12)
|
||||
#define R480320_TUNE_SFREQ_X (R480320_TUNE_FREQ_X + 120)// Second frequency display control
|
||||
#define R480320_TUNE_SFREQ_Y (R480320_TUNE_FREQ_Y - 20)
|
||||
|
||||
#define R480320_DisplayDbm_X (R480320_TUNE_FREQ_X+45)
|
||||
#define R480320_DisplayDbm_Y (R480320_TUNE_FREQ_Y-36)
|
||||
|
||||
#define R480320_MEMORYLABEL_X (R480320_TUNE_FREQ_X+45+(SMALL_FONT_WIDTH * 11)+4)
|
||||
#define R480320_MEMORYLABEL_Y (R480320_TUNE_FREQ_Y-36)
|
||||
|
||||
#define R480320_BAND_MODE_X (R480320_TUNE_FREQ_X + 160)
|
||||
#define R480320_BAND_MODE_Y (R480320_TUNE_FREQ_Y + 7)
|
||||
#define R480320_BAND_MODE_MASK_X (R480320_BAND_MODE_X - 1)
|
||||
#define R480320_BAND_MODE_MASK_Y (R480320_BAND_MODE_Y - 1)
|
||||
#define R480320_BAND_MODE_MASK_H 13
|
||||
#define R480320_BAND_MODE_MASK_W 33
|
||||
|
||||
// Demodulator mode control
|
||||
#define R480320_DEMOD_MODE_X (R480320_TUNE_FREQ_X -61)
|
||||
#define R480320_DEMOD_MODE_Y (R480320_TUNE_FREQ_Y - 20)
|
||||
#define R480320_DEMOD_MODE_MASK_X R480320_DEMOD_MODE_X
|
||||
#define R480320_DEMOD_MODE_MASK_Y (R480320_DEMOD_MODE_Y - 1)
|
||||
#define R480320_DEMOD_MODE_MASK_H 13
|
||||
#define R480320_DEMOD_MODE_MASK_W 58 //same as R480320_DIGMODE_IND_W
|
||||
|
||||
// AGC display box
|
||||
//#define R480320_AGC_MASK_X (R480320_DEMOD_MODE_MASK_X-41)
|
||||
#define R480320_AGC_MASK_X (R480320_TUNE_FREQ_X)
|
||||
#define R480320_AGC_MASK_Y R480320_DEMOD_MODE_MASK_Y
|
||||
#define R480320_AGC_MASK_W 41
|
||||
#define R480320_AGC_MASK_H R480320_DEMOD_MODE_MASK_H
|
||||
|
||||
// Tunning step control
|
||||
#define R480320_TUNE_STEP_X (R480320_TUNE_FREQ_X + 45)
|
||||
#define R480320_TUNE_STEP_Y (R480320_TUNE_FREQ_Y - 21)
|
||||
#define R480320_TUNE_STEP_MASK_H 15
|
||||
#define R480320_TUNE_STEP_MASK_W (SMALL_FONT_WIDTH*7)
|
||||
|
||||
#define R480320_PW_IND_X (R480320_TUNE_FREQ_X)
|
||||
#define R480320_PW_IND_Y (R480320_DEMOD_MODE_Y - 16)
|
||||
#define R480320_PW_IND_W 41
|
||||
|
||||
#define R480320_SM_IND_X 0
|
||||
#define R480320_SM_IND_Y 0
|
||||
#define R480320_SM_IND_W (200)
|
||||
#define R480320_SM_IND_H (72 - 14)
|
||||
|
||||
#define R480320_LEFTBOXES_IND_X 0
|
||||
#define R480320_LEFTBOXES_IND_Y 64
|
||||
#define R480320_LEFTBOX_WIDTH 58 // used for the lower left side controls
|
||||
#define R480320_LEFTBOX_ROW_H 31
|
||||
#define R480320_LEFTBOX_ROW_2ND_OFF 15
|
||||
|
||||
#define R480320_ENCODER_IND_X 128
|
||||
#define R480320_ENCODER_IND_Y 64
|
||||
|
||||
#define R480320_DIGMODE_IND_X R480320_DEMOD_MODE_MASK_X // 218
|
||||
#define R480320_DIGMODE_IND_Y 0
|
||||
#define R480320_DIGMODE_IND_W R480320_DEMOD_MODE_MASK_W
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//some local 320x240 calculations to make life easier in case of change something
|
||||
#define R320240_TUNE_FREQ_X 116
|
||||
#define R320240_TUNE_FREQ_Y 100
|
||||
#define R320240_TUNE_SPLIT_FREQ_X (R320240_TUNE_FREQ_X+80)//Shift with a small split to the right to close the frequency digits.
|
||||
#define R320240_TUNE_SPLIT_MARKER_X (R320240_TUNE_FREQ_X+40)
|
||||
#define R320240_TUNE_SPLIT_FREQ_Y_TX (R320240_TUNE_FREQ_Y+12)
|
||||
#define R320240_TUNE_SFREQ_X (R320240_TUNE_FREQ_X + 120)// Second frequency display control
|
||||
#define R320240_TUNE_SFREQ_Y (R320240_TUNE_FREQ_Y - 20)
|
||||
|
||||
#define R320240_DisplayDbm_X (R320240_TUNE_FREQ_X+45)
|
||||
#define R320240_DisplayDbm_Y (R320240_TUNE_FREQ_Y-36)
|
||||
|
||||
#define R320240_MEMORYLABEL_X (R320240_TUNE_FREQ_X+45+(SMALL_FONT_WIDTH * 11)+4)
|
||||
#define R320240_MEMORYLABEL_Y (R320240_TUNE_FREQ_Y-36)
|
||||
|
||||
#define R320240_BAND_MODE_X (R320240_TUNE_FREQ_X + 160)
|
||||
#define R320240_BAND_MODE_Y (R320240_TUNE_FREQ_Y + 7)
|
||||
#define R320240_BAND_MODE_MASK_X (R320240_BAND_MODE_X - 1)
|
||||
#define R320240_BAND_MODE_MASK_Y (R320240_BAND_MODE_Y - 1)
|
||||
#define R320240_BAND_MODE_MASK_H 13
|
||||
#define R320240_BAND_MODE_MASK_W 33
|
||||
|
||||
// Demodulator mode control
|
||||
#define R320240_DEMOD_MODE_X (R320240_TUNE_FREQ_X + 1)
|
||||
#define R320240_DEMOD_MODE_Y (R320240_TUNE_FREQ_Y - 20)
|
||||
#define R320240_DEMOD_MODE_MASK_X (R320240_DEMOD_MODE_X - 1)
|
||||
#define R320240_DEMOD_MODE_MASK_Y (R320240_DEMOD_MODE_Y - 1)
|
||||
#define R320240_DEMOD_MODE_MASK_H 13
|
||||
#define R320240_DEMOD_MODE_MASK_W 41
|
||||
|
||||
// AGC display box
|
||||
#define R320240_AGC_MASK_X (R320240_DEMOD_MODE_MASK_X-41)
|
||||
#define R320240_AGC_MASK_Y R320240_DEMOD_MODE_MASK_Y
|
||||
#define R320240_AGC_MASK_W (R320240_DEMOD_MODE_MASK_W-6)
|
||||
#define R320240_AGC_MASK_H R320240_DEMOD_MODE_MASK_H
|
||||
|
||||
// Tunning step control
|
||||
#define R320240_TUNE_STEP_X (R320240_TUNE_FREQ_X + 45)
|
||||
#define R320240_TUNE_STEP_Y (R320240_TUNE_FREQ_Y - 21)
|
||||
#define R320240_TUNE_STEP_MASK_H 15
|
||||
#define R320240_TUNE_STEP_MASK_W (SMALL_FONT_WIDTH*7)
|
||||
|
||||
#define R320240_PW_IND_X (R320240_DEMOD_MODE_X -1)
|
||||
#define R320240_PW_IND_Y (R320240_DEMOD_MODE_Y - 16)
|
||||
#define R320240_PW_IND_W 41
|
||||
|
||||
#define R320240_SM_IND_X 116
|
||||
#define R320240_SM_IND_Y 0
|
||||
#define R320240_SM_IND_W (200)
|
||||
#define R320240_SM_IND_H (72 - 14)
|
||||
|
||||
#define R320240_LEFTBOXES_IND_X 0
|
||||
#define R320240_LEFTBOXES_IND_Y 130
|
||||
#define R320240_LEFTBOX_WIDTH 58 // used for the lower left side controls
|
||||
#define R320240_LEFTBOX_ROW_H 28
|
||||
#define R320240_LEFTBOX_ROW_2ND_OFF 13
|
||||
|
||||
#define R320240_ENCODER_IND_X 0
|
||||
#define R320240_ENCODER_IND_Y 16
|
||||
|
||||
#define R320240_DIGMODE_IND_X 0
|
||||
#define R320240_DIGMODE_IND_Y 191
|
||||
#define R320240_DIGMODE_IND_W 58
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//Touchscreen definitions for 480x320
|
||||
static const touchaction_descr_t R480320_touchactions_normal[] =
|
||||
{
|
||||
#ifndef SDR_AMBER_480_320
|
||||
#ifndef OVI40_MOD_480_320
|
||||
{ {R480320_SM_IND_X,R480320_SM_IND_Y,R480320_SM_IND_W,R480320_SM_IND_H}, UiAction_ChangeLowerMeterUp, NULL }, // Lower Meter: Meter Toggle
|
||||
{ {0,110,160,16}, UiAction_ToggleWaterfallScopeDisplay, UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {(480/2)-16,110,48,16}, UiAction_ChangeSpectrumZoomLevelDown, UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {(480/2)+100,110,48,16}, UiAction_ChangeSpectrumZoomLevelUp, UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {R480320_TUNE_FREQ_X+16*7,R480320_TUNE_FREQ_Y,16*3,24}, UiAction_ChangeFrequencyToNextKhz, NULL }, // Frequency display, last three digits :Set last 3 digits to zero
|
||||
{ {R480320_TUNE_FREQ_X,R480320_TUNE_FREQ_Y,16*7,24}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band
|
||||
{ {R480320_DEMOD_MODE_X,R480320_DEMOD_MODE_Y,R480320_DEMOD_MODE_MASK_W,R480320_DEMOD_MODE_MASK_H}, UiVk_ModSelVirtualKeys, NULL }, // Demod Mode Box: mode switch
|
||||
{ {R480320_PW_IND_X,R480320_PW_IND_Y,64,30}, UiAction_ChangePowerLevel, NULL }, // Power Box: TX Power Increase
|
||||
{ {R480320_ENCODER_IND_X+ENC_COL_W*5+Xspacing*2,R480320_ENCODER_IND_Y,ENC_COL_W,ENC_ROW_H}, UiAction_ChangeAudioSource, NULL }, // Audio In Box: Switch Source
|
||||
{ {R480320_BAND_MODE_X,R480320_BAND_MODE_Y,R480320_BAND_MODE_MASK_W/2,R480320_BAND_MODE_MASK_H}, UiAction_ChangeBandDownOrUp, NULL }, // Left Part Band Display: Band down
|
||||
{ {R480320_BAND_MODE_X+R480320_BAND_MODE_MASK_W*3/4,R480320_BAND_MODE_Y,R480320_BAND_MODE_MASK_W/2,R480320_BAND_MODE_MASK_H}, UiAction_ChangeBandUpOrDown, NULL }, // Right Part Band Display: Band up
|
||||
{ {R480320_LEFTBOXES_IND_X,R480320_LEFTBOXES_IND_Y,R480320_LEFTBOX_WIDTH,R480320_LEFTBOX_ROW_H}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box: Restart I2S
|
||||
{ {0,110,480,176}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions}, // Scope Draw Area: Tune to Touch
|
||||
{ {R480320_DIGMODE_IND_X,R480320_DIGMODE_IND_Y,R480320_DIGMODE_IND_W,16}, UiVk_ModSelVirtualKeys, NULL }, // Digital Mode Box: Switch Digi Mode
|
||||
{ {R480320_TUNE_STEP_X,R480320_TUNE_STEP_Y,R480320_TUNE_STEP_MASK_W,R480320_TUNE_STEP_MASK_H}, UiAction_ChangeDynamicTuning, NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
{ {R480320_TUNE_STEP_X,R480320_TUNE_STEP_Y,R480320_TUNE_STEP_MASK_W,R480320_TUNE_STEP_MASK_H}, UiAction_ChangeDynamicTuning, NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
#else
|
||||
{ {273,0,203,56}, UiAction_ChangeLowerMeterUp, NULL }, // Lower Meter: Meter Toggle
|
||||
{ {0,124,120,16}, UiAction_ToggleWaterfallScopeDisplay, UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {180,124,120,16}, UiAction_ChangeSpectrumZoomLevelDown, UiAction_ZoomResetToOne }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {360,124,120,16}, UiAction_ChangeSpectrumZoomLevelUp, UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {384,90,37,23}, UiAction_ChangeFrequencyToNextKhz, NULL }, // Frequency display, last three digits :Set last 3 digits to zero
|
||||
{ {276,90,104,23}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band
|
||||
{ {122,0,63,12}, UiVk_ModSelVirtualKeys, UiAction_ChangeDigitalMode }, // Digi Mode Box: mode switch
|
||||
{ {122,30,69,28}, UiVk_ModSelVirtualKeys, UiAction_ChangeDemodModeToAlternativeMode }, // Digi Mode Box: mode switch - double
|
||||
{ {188,0,14,12}, UiAction_ChangeDemodModeToAlternativeMode, NULL }, // Demod Mode Box: sideband switch
|
||||
{ {205,0,56,12}, UiAction_ChangePowerLevel, NULL }, // Power Box: TX Power Increase
|
||||
{ {70,14,42,28}, UiDriver_RIT_Reset,NULL }, // RIT Box: RIT Reset
|
||||
{ {70,45,42,30}, UiAction_ChangeAudioSource, NULL }, // Audio In Box: Switch Source
|
||||
{ {446,88,14,15}, UiAction_ChangeBandDownOrUp, NULL }, // Left Part Band Display: Band down
|
||||
{ {465,88,14,15}, UiAction_ChangeBandUpOrDown, NULL }, // Right Part Band Display: Band up
|
||||
{ {193,30,69,28}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box
|
||||
{ {0,141,480,158}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
{ {205,15,56,13}, UiAction_ChangeDynamicTuning, NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
#endif
|
||||
#else //SDR_AMBER_480_320
|
||||
//X,Y,W,H
|
||||
{ {273,0,203,56}, UiAction_ChangeLowerMeterUp, NULL }, // Lower Meter: Meter Toggle
|
||||
{ {0,124,120,16}, UiAction_ToggleWaterfallScopeDisplay, UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {180,124,120,16}, UiAction_ChangeSpectrumZoomLevelDown, UiAction_ZoomResetToOne }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {360,124,120,16}, UiAction_ChangeSpectrumZoomLevelUp, UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {384,90,37,23}, UiAction_ChangeFrequencyToNextKhz, NULL }, // Frequency display, last three digits :Set last 3 digits to zero
|
||||
{ {276,90,104,23}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band
|
||||
{ {122,0,63,12}, UiVk_ModSelVirtualKeys, UiAction_ChangeDigitalMode }, // Digi Mode Box: mode switch
|
||||
{ {122,30,69,28}, UiVk_ModSelVirtualKeys, UiAction_ChangeDemodModeToAlternativeMode }, // Digi Mode Box: mode switch - double
|
||||
{ {188,0,14,12}, UiAction_ChangeDemodModeToAlternativeMode, NULL }, // Demod Mode Box: sideband switch
|
||||
{ {205,0,56,12}, UiAction_ChangePowerLevel, NULL }, // Power Box: TX Power Increase
|
||||
{ {70,14,42,28}, UiDriver_RIT_Reset,NULL }, // RIT Box: RIT Reset
|
||||
{ {70,45,42,30}, UiAction_ChangeAudioSource, NULL }, // Audio In Box: Switch Source
|
||||
{ {446,88,14,15}, UiAction_ChangeBandDownOrUp, NULL }, // Left Part Band Display: Band down
|
||||
{ {465,88,14,15}, UiAction_ChangeBandUpOrDown, NULL }, // Right Part Band Display: Band up
|
||||
{ {193,30,69,28}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box
|
||||
{ {0,141,480,158}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
{ {205,15,56,13}, UiAction_ChangeDynamicTuning, NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
{ {122,15,40,13}, UiAction_ChangeRXInputStateDown, NULL }, // Amber - Change RX Input State Down
|
||||
{ {162,15,40,13}, UiAction_ChangeRXInputStateUp, NULL }, // Amber - Change RX Input State Up
|
||||
#endif
|
||||
};
|
||||
|
||||
// this is the map for menu mode, right now only used for debugging/experimental purposes
|
||||
static const touchaction_descr_t R480320_touchactions_menu[] =
|
||||
{
|
||||
{ { R480320_SM_IND_X+R480320_SM_IND_W-16,R480320_SM_IND_Y,16,16 }, UiAction_ChangeDebugInfoDisplay, NULL}, // S-Meter db: toggle show tp coordinates
|
||||
};
|
||||
|
||||
static const touchaction_list_descr_t R480320_touch_regions[] =
|
||||
{
|
||||
// ATTENTION: the size calculation only works for true arrays, not for pointers!
|
||||
{ R480320_touchactions_normal, sizeof(R480320_touchactions_normal)/sizeof(*R480320_touchactions_normal) },
|
||||
{ R480320_touchactions_menu, sizeof(R480320_touchactions_menu)/sizeof(*R480320_touchactions_menu) },
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//Touchscreen definitions for 320x240
|
||||
static const touchaction_descr_t R320240_touchactions_normal[] =
|
||||
{
|
||||
{ {R320240_SM_IND_X,R320240_SM_IND_Y,R320240_SM_IND_W,R320240_SM_IND_H},UiAction_ChangeLowerMeterUp,NULL }, // Lower Meter: Meter Toggle
|
||||
// { {64,128,60,16}, UiAction_ToggleWaterfallScopeDisplay,UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {60,128,64,16}, UiAction_ToggleWaterfallScopeDisplay,UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
// { {180,128,40,16}, UiAction_ChangeSpectrumZoomLevelDown,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {156,128,64,16}, UiAction_ChangeSpectrumZoomLevelDown,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
// { {280,128,40,16}, UiAction_ChangeSpectrumZoomLevelUp,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {252,128,64,16}, UiAction_ChangeSpectrumZoomLevelUp,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {R320240_TUNE_FREQ_X+16*7,R320240_TUNE_FREQ_Y,16*3,24},UiAction_ChangeFrequencyToNextKhz,NULL }, // Tune button:Set last 3 digits to zero
|
||||
// { {R320240_TUNE_FREQ_X,R320240_TUNE_FREQ_Y,16*7,24}, UiVk_BndSelVirtualKeys, NULL }, // Frequency display, first digits :Select the band
|
||||
{ {R320240_TUNE_FREQ_X,R320240_TUNE_FREQ_Y,16*7,24}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band/freq
|
||||
// { {R320240_DEMOD_MODE_X,R320240_DEMOD_MODE_Y,R320240_DEMOD_MODE_MASK_W,R320240_DEMOD_MODE_MASK_H}, UiAction_ChangeDemodMode,NULL }, // Demod Mode Box: mode switch
|
||||
{ {R320240_DEMOD_MODE_X,R320240_DEMOD_MODE_Y,R320240_DEMOD_MODE_MASK_W,R320240_DEMOD_MODE_MASK_H}, UiAction_ChangeDemodModeToAlternativeMode,NULL }, // Demod Mode Box: mode switch
|
||||
{ {R320240_PW_IND_X,R320240_PW_IND_Y,64,16},UiAction_ChangePowerLevel,NULL }, // Power Box: TX Power Increase
|
||||
{ {74,14,37,29}, UiDriver_RIT_Reset,NULL }, // RIT Box: RIT Reset
|
||||
{ {R320240_ENCODER_IND_X+ENC_COL_W*2,R320240_ENCODER_IND_Y+ENC_ROW_H,ENC_COL_W,ENC_ROW_H}, UiAction_ChangeAudioSource,NULL }, // Audio In Box: Switch Source
|
||||
{ {R320240_BAND_MODE_X,R320240_BAND_MODE_Y,R320240_BAND_MODE_MASK_W/2,R320240_BAND_MODE_MASK_H}, UiAction_ChangeBandDownOrUp,NULL }, // Left Part Band Display: Band down
|
||||
{ {R320240_BAND_MODE_X+R320240_BAND_MODE_MASK_W*3/4,R320240_BAND_MODE_Y,R320240_BAND_MODE_MASK_W/2,R320240_BAND_MODE_MASK_H}, UiAction_ChangeBandUpOrDown,NULL }, // Right Part Band Display: Band up
|
||||
{ {R320240_LEFTBOXES_IND_X,R320240_LEFTBOXES_IND_Y,R320240_LEFTBOX_WIDTH,R320240_LEFTBOX_ROW_H}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box: Restart I2S
|
||||
// { {60,128,256,90}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
{ {60,146,256,72}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
{ {R320240_DIGMODE_IND_X,R320240_DIGMODE_IND_Y,R320240_DIGMODE_IND_W,16}, UiVk_ModeVirtualKeys,UiAction_ChangeDigitalMode }, // Digital Mode Box: Switch Digi Mode
|
||||
{ {R320240_TUNE_STEP_X,R320240_TUNE_STEP_Y,R320240_TUNE_STEP_MASK_W,R320240_TUNE_STEP_MASK_H}, UiAction_ChangeDynamicTuning,NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
};
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
////Touchscreen definitions for 320x240 Alternative wide spectrum mode
|
||||
static const touchaction_descr_t R320240_touchactions_widespectrum[] =
|
||||
{
|
||||
#ifndef SDR_AMBER // not Amber
|
||||
//{X, Y, W, H}
|
||||
{ {113,0,203,52},UiAction_ChangeLowerMeterUp,NULL }, // Lower Meter: Meter Toggle
|
||||
{ {0,136,80,13}, UiAction_ToggleWaterfallScopeDisplay,UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {120,136,80,13}, UiAction_ChangeSpectrumZoomLevelDown,UiAction_ZoomResetToOne }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {240,136,80,13}, UiAction_ChangeSpectrumZoomLevelUp,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {226,109,48,24},UiAction_ChangeFrequencyToNextKhz,NULL }, // Tune button:Set last 3 digits to zero
|
||||
// { {118,109,105,24}, UiVk_BndSelVirtualKeys, NULL }, // Frequency display, first digits :Select the band
|
||||
{ {118,109,105,24}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band/freq
|
||||
// { {113,87,41,13}, UiAction_ChangeDemodMode,NULL }, // Demod Mode Box: mode switch
|
||||
// { {113,87,41,13}, UiAction_ChangeDemodModeToAlternativeMode,NULL }, // Demod Mode Box: sideband switch
|
||||
{ {138,71,16,12}, UiAction_ChangeDemodModeToAlternativeMode,NULL }, // Demod Mode Box: sideband switch
|
||||
{ {113,56,41,13},UiAction_ChangePowerLevel,NULL }, // Power Box: TX Power Increase
|
||||
{ {74,14,37,26}, UiDriver_RIT_Reset,NULL }, // RIT Box: RIT Reset
|
||||
// { {70,36,41,31}, UiAction_ChangeAudioSource,NULL }, // Audio In Box: Switch Source
|
||||
{ {74,41,37,26}, UiAction_ChangeAudioSource,NULL }, // Audio In Box: Switch Source
|
||||
{ {287,108,15,16}, UiAction_ChangeBandDownOrUp,NULL }, // Left Part Band Display: Band down
|
||||
{ {305,108,15,16}, UiAction_ChangeBandUpOrDown,NULL }, // Right Part Band Display: Band up
|
||||
{ {217,56,58,29}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box: Restart I2S
|
||||
{ {1,152,318,73}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
// { {74,71,80,13}, UiAction_ChangeDigitalMode,UiVk_ModeVirtualKeys }, // Digital Mode Box: Switch Digi Mode
|
||||
{ {74,71,61,13}, UiVk_ModeVirtualKeys,UiAction_ChangeDigitalMode }, // Digital Mode Box: Switch Digi Mode
|
||||
// { {157,87,57,13}, UiAction_ChangeDynamicTuning,NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
{ {113,87,41,13}, UiAction_ChangeDynamicTuning,NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
#else //Amber 320x240
|
||||
//{X, Y, W, H}
|
||||
{ {113,0,203,52}, UiAction_ChangeLowerMeterUp, NULL }, // Lower Meter: Meter Toggle
|
||||
{ {0,136,80,13}, UiAction_ToggleWaterfallScopeDisplay,UiAction_ChangeSpectrumSize }, // Spectrum Bar Left Part: WaterfallScope Toggle
|
||||
{ {120,136,80,13}, UiAction_ChangeSpectrumZoomLevelDown,UiAction_ZoomResetToOne }, // Spectrum Bar Middle Part: Decrease Zoom Level
|
||||
{ {240,136,80,13}, UiAction_ChangeSpectrumZoomLevelUp,UiAction_CheckSpectrumTouchActions }, // Spectrum Bar Right Part: Increase Zoom Level
|
||||
{ {226,109,48,24}, UiAction_ChangeFrequencyToNextKhz, NULL }, // Tune button:Set last 3 digits to zero
|
||||
{ {118,109,105,24}, UiVk_BndSelVirtualKeys, UiVk_BndFreqSetVirtualKeys }, // Frequency display, first digits :Select the band/freq
|
||||
{ {138,71,16,12}, UiAction_ChangeDemodModeToAlternativeMode, NULL }, // Demod Mode Box: sideband switch
|
||||
{ {113,56,41,13}, UiAction_ChangePowerLevel, NULL }, // Power Box: TX Power Increase
|
||||
{ {74,14,37,26}, UiDriver_RIT_Reset,NULL }, // RIT Box: RIT Reset
|
||||
// { {70,36,41,31}, UiAction_ChangeAudioSource, NULL }, // Audio In Box: Switch Source
|
||||
{ {74,41,37,26}, UiAction_ChangeAudioSource,NULL }, // Audio In Box: Switch Source
|
||||
{ {287,108,15,16}, UiAction_ChangeBandDownOrUp, NULL }, // Left Part Band Display: Band down
|
||||
{ {305,108,15,16}, UiAction_ChangeBandUpOrDown, NULL }, // Right Part Band Display: Band up
|
||||
{ {217,56,58,28}, UiVk_DSPVirtualKeys, Codec_RestartI2S }, // DSP Box: Restart I2S
|
||||
{ {1,152,318,73}, UiAction_ChangeFrequencyByTouch, UiAction_CheckSpectrumTouchActions }, // Scope Draw Area: Tune to Touch
|
||||
// { {74,71,61,13}, UiAction_ChangeDigitalMode, UiVk_ModeVirtualKeys }, // Digital Mode Box: Switch Digi Mode
|
||||
{ {74,71,61,13}, UiVk_ModeVirtualKeys, UiAction_ChangeDigitalMode }, // Digital Mode Box: Switch Digi Mode
|
||||
{ {157,56,58,28}, UiVk_ModeVirtualKeys, UiAction_ChangeDigitalMode }, // Digital Mode Box - double touch zone
|
||||
{ {157,86,57,13}, UiAction_ChangeDynamicTuning, NULL }, // Step Box: Dynamic Tuning Toggle
|
||||
{ {74,86,40,13}, UiAction_ChangeRXInputStateDown, NULL }, // Amber - Change RX Input State Down
|
||||
{ {114,86,40,13}, UiAction_ChangeRXInputStateUp, NULL }, // Amber - Change RX Input State Up
|
||||
#endif
|
||||
};
|
||||
|
||||
// this is the map for menu mode, right now only used for debugging/experimental purposes
|
||||
static const touchaction_descr_t R320240_touchactions_menu[] =
|
||||
{
|
||||
{ { R320240_SM_IND_X+R320240_SM_IND_W-16,R320240_SM_IND_Y,16,16 }, UiAction_ChangeDebugInfoDisplay, NULL}, // S-Meter db: toggle show tp coordinates
|
||||
};
|
||||
|
||||
static const touchaction_list_descr_t R320240__touch_regions[] =
|
||||
{
|
||||
// ATTENTION: the size calculation only works for true arrays, not for pointers!
|
||||
{ R320240_touchactions_normal, sizeof(R320240_touchactions_normal)/sizeof(*R320240_touchactions_normal) },
|
||||
{ R320240_touchactions_menu, sizeof(R320240_touchactions_menu)/sizeof(*R320240_touchactions_menu) },
|
||||
};
|
||||
|
||||
static const touchaction_list_descr_t R320240__touch_regions_widespectrum[] =
|
||||
{
|
||||
// ATTENTION: the size calculation only works for true arrays, not for pointers!
|
||||
{ R320240_touchactions_widespectrum, sizeof(R320240_touchactions_widespectrum)/sizeof(*R320240_touchactions_widespectrum) },
|
||||
{ R320240_touchactions_menu, sizeof(R320240_touchactions_menu)/sizeof(*R320240_touchactions_menu) },
|
||||
};
|
||||
//------------------------------------------------------------------------------------------------------------------------------------------
|
||||
const LcdLayout LcdLayouts[LcdLayoutsCount]=
|
||||
{
|
||||
//-----------------------------------------------------------------
|
||||
{ //320x240
|
||||
.Size = { 320, 240 },
|
||||
.StartUpScreen_START = { 0, 10 },
|
||||
.SpectrumWindow = { .x = 58, .y = 128, .w = 260, .h = 94 },
|
||||
|
||||
.SpectrumWindowPadding=2,
|
||||
|
||||
.TUNE_FREQ= { R320240_TUNE_FREQ_X, R320240_TUNE_FREQ_Y },
|
||||
.TUNE_SPLIT_FREQ_X=R320240_TUNE_SPLIT_FREQ_X,
|
||||
.TUNE_SPLIT_MARKER_X=R320240_TUNE_SPLIT_MARKER_X,
|
||||
.TUNE_SPLIT_FREQ_Y_TX=R320240_TUNE_SPLIT_FREQ_Y_TX,
|
||||
.TUNE_SFREQ = { R320240_TUNE_SFREQ_X, R320240_TUNE_SFREQ_Y },
|
||||
.DisplayDbm = { R320240_DisplayDbm_X, R320240_DisplayDbm_Y },
|
||||
.MEMORYLABEL= { R320240_MEMORYLABEL_X, R320240_MEMORYLABEL_Y} ,
|
||||
|
||||
.BAND_MODE = { R320240_BAND_MODE_X, R320240_BAND_MODE_Y},
|
||||
.BAND_MODE_MASK = { .x = R320240_BAND_MODE_MASK_X, .y = R320240_BAND_MODE_MASK_Y, .h = R320240_BAND_MODE_MASK_H, .w = R320240_BAND_MODE_MASK_W },
|
||||
|
||||
.DEMOD_MODE_MASK = { .x = R320240_DEMOD_MODE_MASK_X, .y = R320240_DEMOD_MODE_MASK_Y, .h = R320240_DEMOD_MODE_MASK_H, .w = R320240_DEMOD_MODE_MASK_W},
|
||||
.AGC_MASK = {.x = R320240_AGC_MASK_X, .y = R320240_AGC_MASK_Y, .h = R320240_AGC_MASK_H,
|
||||
.w = R320240_AGC_MASK_W},
|
||||
.TUNE_STEP={.x=R320240_TUNE_STEP_X, .y=R320240_TUNE_STEP_Y, .h=R320240_TUNE_STEP_MASK_H, .w=R320240_TUNE_STEP_MASK_W},
|
||||
|
||||
.ENCODER_IND = { R320240_ENCODER_IND_X, R320240_ENCODER_IND_Y},
|
||||
.ENCODER_MODE=MODE_VERTICAL,
|
||||
|
||||
.DIGMODE={.x=R320240_DIGMODE_IND_X,.y=R320240_DIGMODE_IND_Y,.w=R320240_DIGMODE_IND_W},
|
||||
|
||||
.LEFTBOXES_IND = { .x=R320240_LEFTBOXES_IND_X, .y=R320240_LEFTBOXES_IND_Y, .w=R320240_LEFTBOX_WIDTH, .h=R320240_LEFTBOX_ROW_H},
|
||||
.LEFTBOXES_MODE=MODE_VERTICAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF=R320240_LEFTBOX_ROW_2ND_OFF,
|
||||
|
||||
.PW_IND = { .x=R320240_PW_IND_X, .y=R320240_PW_IND_Y, .w=R320240_PW_IND_W},
|
||||
.TEMP_IND={.x = 0, .y = 0},
|
||||
.RTC_IND={.x= 0, .y = 79},
|
||||
|
||||
.LOADANDDEBUG_Y=95,
|
||||
.DEBUG_X=0,
|
||||
.LOAD_X=280,
|
||||
|
||||
.PWR_NUM_IND = { 1, 80},
|
||||
|
||||
.CW_DECODER_WPM = { 0, 108},
|
||||
|
||||
.SNAP_CARRIER = { 27, 122},
|
||||
|
||||
.TextMsgLine = { 5, 92},
|
||||
.TextMsg_buffer_max=44,
|
||||
.TextMsg_font=4,
|
||||
|
||||
.FREEDV_SNR = { 5, 116},
|
||||
.FREEDV_BER = { 5, 104},
|
||||
.FREEDV_FONT=4,
|
||||
|
||||
.SM_IND={.x=R320240_SM_IND_X,.y=R320240_SM_IND_Y,.h=R320240_SM_IND_H,.w=R320240_SM_IND_W},
|
||||
.PWR_IND={.x = 4, .y = 193+15},
|
||||
|
||||
.BOTTOM_BAR={.x=0,.y=228, .h=16, .w=62},
|
||||
|
||||
.MENUSIZE=7,
|
||||
.MENU_IND = { 60, 128},
|
||||
.MENU_CHANGE_X=244,
|
||||
.MENU_CURSOR_X=311,
|
||||
.MENU_TEXT_SIZE_MAX=34,
|
||||
|
||||
.touchaction_list=R320240__touch_regions
|
||||
},
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
{ //480x320
|
||||
#ifndef SDR_AMBER //OVI40, Sparrow
|
||||
#ifndef OVI40_MOD_480_320
|
||||
.Size = { 480, 320},
|
||||
.StartUpScreen_START ={ 80, 60},
|
||||
.SpectrumWindow={ .x = 0, .y = 110, .w = 480, .h = 176 },
|
||||
.SpectrumWindowPadding=0,
|
||||
|
||||
.TUNE_FREQ= { R480320_TUNE_FREQ_X, R480320_TUNE_FREQ_Y},
|
||||
.TUNE_SPLIT_FREQ_X=R480320_TUNE_SPLIT_FREQ_X,
|
||||
.TUNE_SPLIT_MARKER_X=R480320_TUNE_SPLIT_MARKER_X,
|
||||
.TUNE_SPLIT_FREQ_Y_TX=R480320_TUNE_SPLIT_FREQ_Y_TX,
|
||||
.TUNE_SFREQ = { R480320_TUNE_SFREQ_X, R480320_TUNE_SFREQ_Y},
|
||||
.DisplayDbm = { R480320_DisplayDbm_X, R480320_DisplayDbm_Y},
|
||||
.MEMORYLABEL = { R480320_MEMORYLABEL_X, R480320_MEMORYLABEL_Y},
|
||||
|
||||
.BAND_MODE = { R480320_BAND_MODE_X, R480320_BAND_MODE_Y},
|
||||
.BAND_MODE_MASK = { .x = R480320_BAND_MODE_MASK_X, .y = R480320_BAND_MODE_MASK_Y, .h = R480320_BAND_MODE_MASK_H, .w= R480320_BAND_MODE_MASK_W},
|
||||
|
||||
.DEMOD_MODE_MASK = { .x = R480320_DEMOD_MODE_MASK_X, .y = R480320_DEMOD_MODE_MASK_Y, .h = R480320_DEMOD_MODE_MASK_H,
|
||||
.w = R480320_DEMOD_MODE_MASK_W},
|
||||
.AGC_MASK = {.x = R480320_AGC_MASK_X, .y = R480320_AGC_MASK_Y, .h = R480320_AGC_MASK_H,
|
||||
.w = R480320_AGC_MASK_W},
|
||||
.TUNE_STEP={.x=R480320_TUNE_STEP_X, .y=R480320_TUNE_STEP_Y, .h=R480320_TUNE_STEP_MASK_H, .w=R480320_TUNE_STEP_MASK_W},
|
||||
|
||||
.ENCODER_IND = { R480320_ENCODER_IND_X, R480320_ENCODER_IND_Y},
|
||||
.ENCODER_MODE=MODE_HORIZONTAL,
|
||||
|
||||
.DIGMODE={.x=R480320_DIGMODE_IND_X,.y=R480320_DIGMODE_IND_Y,.w=R480320_DIGMODE_IND_W},
|
||||
|
||||
.LEFTBOXES_IND = { .x=R480320_LEFTBOXES_IND_X, .y=R480320_LEFTBOXES_IND_Y, .w=R480320_LEFTBOX_WIDTH, .h=R480320_LEFTBOX_ROW_H},
|
||||
.LEFTBOXES_MODE=MODE_HORIZONTAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF=R480320_LEFTBOX_ROW_2ND_OFF,
|
||||
|
||||
.PW_IND = { .x=R480320_PW_IND_X, .y=R480320_PW_IND_Y, .w=R480320_PW_IND_W},
|
||||
.TEMP_IND={.x = 370,.y = 64},
|
||||
.RTC_IND={.x = 415,.y = 80},
|
||||
|
||||
.LOADANDDEBUG_Y=96,
|
||||
.DEBUG_X=0,
|
||||
.LOAD_X=280,
|
||||
|
||||
.PWR_NUM_IND ={ 320, 96},
|
||||
|
||||
.CW_DECODER_WPM = { 420, 290},
|
||||
|
||||
.SNAP_CARRIER= { 242, 29},
|
||||
|
||||
.TextMsgLine = { 0, 290 },
|
||||
.TextMsg_buffer_max=50,
|
||||
.TextMsg_font=0,
|
||||
|
||||
//.FREEDV_SNR = { 280, 28},
|
||||
//.FREEDV_BER = {380, 28},
|
||||
.FREEDV_SNR = {410,288},
|
||||
.FREEDV_BER = {410,297},
|
||||
.FREEDV_FONT=4,
|
||||
|
||||
.SM_IND={.x = R480320_SM_IND_X, .y = R480320_SM_IND_Y, .h = R480320_SM_IND_H, .w = R480320_SM_IND_W},
|
||||
.PWR_IND={ .x = 420, .y = 307},
|
||||
|
||||
#ifdef UI_BRD_OVI40
|
||||
.BOTTOM_BAR={.x=0,.y=308, .h=16, .w=74},
|
||||
#else
|
||||
.BOTTOM_BAR={.x=32,.y=308, .h=16, .w=74},
|
||||
#endif
|
||||
.MENUSIZE=14,
|
||||
.MENU_IND = { 80, 110 },
|
||||
.MENU_CHANGE_X=280,
|
||||
.MENU_CURSOR_X=360,
|
||||
.MENU_TEXT_SIZE_MAX=40,
|
||||
|
||||
.touchaction_list=R480320_touch_regions
|
||||
#else
|
||||
.Size = { 480, 320 },
|
||||
.StartUpScreen_START = { 80, 60 },
|
||||
.SpectrumWindow = { .x = 0, .y = 123, .w = 480, .h = 174 },
|
||||
.SpectrumWindowPadding = 0,
|
||||
|
||||
.TUNE_FREQ = { 276, 90 },
|
||||
.TUNE_SPLIT_FREQ_X = 290,
|
||||
.TUNE_SPLIT_MARKER_X = 276,
|
||||
.TUNE_SPLIT_FREQ_Y_TX = 276,
|
||||
.TUNE_SFREQ = { 396, 60 },
|
||||
.DisplayDbm = { 273, 60 },
|
||||
.MEMORYLABEL = { 355, 60 },
|
||||
.BAND_MODE = { 436, 90 },
|
||||
.BAND_MODE_MASK = { .x = 435, .y = 89, .h = 13, .w = 33 },
|
||||
.DEMOD_MODE_MASK = { .x = 186, .y = 0, .h = 13, .w = 16 },
|
||||
.AGC_MASK = {.x = 122, .y = 15, .h = 13, .w = 80 },
|
||||
.TUNE_STEP={.x = 205, .y = 15, .h = 13, .w = 56 },
|
||||
.ENCODER_IND = { 0, 15 },
|
||||
.ENCODER_MODE = MODE_VERTICAL,
|
||||
.DIGMODE={.x = 122, .y = 0, .w = 63},
|
||||
.LEFTBOXES_IND = { .x = 122, .y=30, .w = 69, .h = 28 },
|
||||
.LEFTBOXES_MODE = MODE_HORIZONTAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF = 13,
|
||||
.PW_IND = { .x = 205, .y = 0, .w = 56 },
|
||||
.TEMP_IND = { .x = 0, .y = 0 },
|
||||
.RTC_IND = { .x = 127, .y = 60 },
|
||||
|
||||
.LOADANDDEBUG_Y = 75,
|
||||
.DEBUG_X = 0,
|
||||
.LOAD_X = 440,
|
||||
|
||||
.PWR_NUM_IND = { 320, 99 },
|
||||
|
||||
.CW_DECODER_WPM = { 0, 92 },
|
||||
|
||||
.SNAP_CARRIER = { 27, 107 },
|
||||
.TextMsgLine = { 0, 75 },
|
||||
.TextMsg_buffer_max = 50,
|
||||
.TextMsg_font = 0,
|
||||
|
||||
//.FREEDV_SNR = { 280, 28},
|
||||
//.FREEDV_BER = {380, 28},
|
||||
.FREEDV_SNR = { 0, 90 },
|
||||
.FREEDV_BER = { 0, 102 },
|
||||
.FREEDV_FONT = 4,
|
||||
|
||||
.SM_IND = { .x = 273, .y = 0, .h = 56, .w = 203 },
|
||||
.PWR_IND = { .x = 207, .y = 60 },
|
||||
.BOTTOM_BAR = {.x=0,.y=308, .h=16, .w=79},//.w=74},
|
||||
|
||||
.MENUSIZE = 14,
|
||||
.MENU_IND = { 140, 129 },
|
||||
.MENU_CHANGE_X = 280,
|
||||
.MENU_CURSOR_X = 360,
|
||||
.MENU_TEXT_SIZE_MAX = 40,
|
||||
|
||||
.touchaction_list = R480320_touch_regions
|
||||
#endif
|
||||
#else //Amber_480x320
|
||||
.Size = { 480, 320 },
|
||||
.StartUpScreen_START = { 80, 60 },
|
||||
.SpectrumWindow = { .x = 0, .y = 123, .w = 480, .h = 174 },
|
||||
.SpectrumWindowPadding = 0,
|
||||
|
||||
.TUNE_FREQ = { 276, 90 },
|
||||
.TUNE_SPLIT_FREQ_X = 356,
|
||||
.TUNE_SPLIT_MARKER_X = 316,
|
||||
.TUNE_SPLIT_FREQ_Y_TX = 102,
|
||||
.TUNE_SFREQ = { 396, 60 },
|
||||
.DisplayDbm = { 273, 60 },
|
||||
.MEMORYLABEL = { 355, 60 },
|
||||
.BAND_MODE = { 436, 90 },
|
||||
.BAND_MODE_MASK = { .x = 435, .y = 89, .h = 13, .w = 33 },
|
||||
.DEMOD_MODE_MASK = { .x = 186, .y = 0, .h = 13, .w = 16 },
|
||||
.AGC_MASK = {.x = 122, .y = 15, .h = 13, .w = 80 },
|
||||
.TUNE_STEP={.x = 205, .y = 15, .h = 13, .w = 56 },
|
||||
.ENCODER_IND = { 0, 15 },
|
||||
.ENCODER_MODE = MODE_VERTICAL,
|
||||
.DIGMODE={.x = 122, .y = 0, .w = 63},
|
||||
.LEFTBOXES_IND = { .x = 122, .y=30, .w = 69, .h = 28 },
|
||||
.LEFTBOXES_MODE = MODE_HORIZONTAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF = 13,
|
||||
.PW_IND = { .x = 205, .y = 0, .w = 56 },
|
||||
.TEMP_IND = { .x = 0, .y = 0 },
|
||||
.RTC_IND = { .x = 127, .y = 60 },
|
||||
|
||||
.LOADANDDEBUG_Y = 75,
|
||||
.DEBUG_X = 0,
|
||||
.LOAD_X = 440,
|
||||
|
||||
.PWR_NUM_IND = { 320, 99 },
|
||||
|
||||
.CW_DECODER_WPM = { 0, 92 },
|
||||
|
||||
.SNAP_CARRIER = { 27, 107 },
|
||||
.TextMsgLine = { 0, 75 },
|
||||
.TextMsg_buffer_max = 50,
|
||||
.TextMsg_font = 0,
|
||||
|
||||
//.FREEDV_SNR = { 280, 28},
|
||||
//.FREEDV_BER = {380, 28},
|
||||
.FREEDV_SNR = { 0, 90 },
|
||||
.FREEDV_BER = { 0, 102 },
|
||||
.FREEDV_FONT = 4,
|
||||
|
||||
.SM_IND = { .x = 273, .y = 0, .h = 56, .w = 203 },
|
||||
.PWR_IND = { .x = 207, .y = 60 },
|
||||
#ifndef SDR_AMBER_4INCH
|
||||
.BOTTOM_BAR = {.x=0,.y=308, .h=16, .w=79},//.w=74},
|
||||
#else
|
||||
.BOTTOM_BAR = {.x=2,.y=308, .h=16, .w=67},
|
||||
#endif
|
||||
|
||||
.MENUSIZE = 14,
|
||||
.MENU_IND = { 140, 129 },//{ 80, 130 },
|
||||
.MENU_CHANGE_X = 280,
|
||||
.MENU_CURSOR_X = 430,//360,
|
||||
.MENU_TEXT_SIZE_MAX = 40,
|
||||
|
||||
.touchaction_list = R480320_touch_regions
|
||||
#endif
|
||||
},
|
||||
//-----------------------------------------------------------------
|
||||
{ //800x480
|
||||
.Size = { 800, 480},
|
||||
.StartUpScreen_START ={ 80, 60},
|
||||
.SpectrumWindow={ .x = 0, .y = 110, .w = 480, .h = 176 },
|
||||
.SpectrumWindowPadding=0,
|
||||
|
||||
.TUNE_FREQ= { R480320_TUNE_FREQ_X, R480320_TUNE_FREQ_Y},
|
||||
.TUNE_SPLIT_FREQ_X=R480320_TUNE_SPLIT_FREQ_X,
|
||||
.TUNE_SPLIT_MARKER_X=R480320_TUNE_SPLIT_MARKER_X,
|
||||
.TUNE_SPLIT_FREQ_Y_TX=R480320_TUNE_SPLIT_FREQ_Y_TX,
|
||||
.TUNE_SFREQ = { R480320_TUNE_SFREQ_X, R480320_TUNE_SFREQ_Y},
|
||||
.DisplayDbm = { R480320_DisplayDbm_X, R480320_DisplayDbm_Y},
|
||||
.MEMORYLABEL = { R480320_MEMORYLABEL_X, R480320_MEMORYLABEL_Y},
|
||||
|
||||
.BAND_MODE = { R480320_BAND_MODE_X, R480320_BAND_MODE_Y},
|
||||
.BAND_MODE_MASK = { .x = R480320_BAND_MODE_MASK_X, .y = R480320_BAND_MODE_MASK_Y, .h = R480320_BAND_MODE_MASK_H, .w= R480320_BAND_MODE_MASK_W},
|
||||
|
||||
.DEMOD_MODE_MASK = { .x = R480320_DEMOD_MODE_MASK_X, .y = R480320_DEMOD_MODE_MASK_Y, .h = R480320_DEMOD_MODE_MASK_H,
|
||||
.w = R480320_DEMOD_MODE_MASK_W},
|
||||
.AGC_MASK = {.x = R480320_AGC_MASK_X, .y = R480320_AGC_MASK_Y, .h = R480320_AGC_MASK_H,
|
||||
.w = R480320_AGC_MASK_W},
|
||||
.TUNE_STEP={.x=R480320_TUNE_STEP_X, .y=R480320_TUNE_STEP_Y, .h=R480320_TUNE_STEP_MASK_H, .w=R480320_TUNE_STEP_MASK_W},
|
||||
|
||||
.ENCODER_IND = { R480320_ENCODER_IND_X, R480320_ENCODER_IND_Y},
|
||||
.ENCODER_MODE=MODE_HORIZONTAL,
|
||||
|
||||
.DIGMODE={.x=R480320_DIGMODE_IND_X,.y=R480320_DIGMODE_IND_Y,.w=R480320_DIGMODE_IND_W},
|
||||
|
||||
.LEFTBOXES_IND = { .x=R480320_LEFTBOXES_IND_X, .y=R480320_LEFTBOXES_IND_Y, .w=R480320_LEFTBOX_WIDTH, .h=R480320_LEFTBOX_ROW_H},
|
||||
.LEFTBOXES_MODE=MODE_HORIZONTAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF=R480320_LEFTBOX_ROW_2ND_OFF,
|
||||
|
||||
.PW_IND = { .x=R480320_PW_IND_X, .y=R480320_PW_IND_Y, .w=R480320_PW_IND_W},
|
||||
.TEMP_IND={.x = 370,.y = 64},
|
||||
.RTC_IND={.x = 415,.y = 80},
|
||||
|
||||
.LOADANDDEBUG_Y=96,
|
||||
.DEBUG_X=0,
|
||||
.LOAD_X=280,
|
||||
|
||||
.PWR_NUM_IND ={ 320, 96},
|
||||
|
||||
.CW_DECODER_WPM = { 420, 290},
|
||||
|
||||
.SNAP_CARRIER= { 242, 29},
|
||||
|
||||
.TextMsgLine = { 0, 290 },
|
||||
.TextMsg_buffer_max=50,
|
||||
.TextMsg_font=0,
|
||||
|
||||
//.FREEDV_SNR = { 280, 28},
|
||||
//.FREEDV_BER = {380, 28},
|
||||
.FREEDV_SNR = {410,288},
|
||||
.FREEDV_BER = {410,297},
|
||||
.FREEDV_FONT=4,
|
||||
|
||||
.SM_IND={.x = R480320_SM_IND_X, .y = R480320_SM_IND_Y, .h = R480320_SM_IND_H, .w = R480320_SM_IND_W},
|
||||
.PWR_IND={ .x = 420, .y = 307},
|
||||
|
||||
#ifdef UI_BRD_OVI40
|
||||
.BOTTOM_BAR={.x=0,.y=308, .h=16, .w=74},
|
||||
#else
|
||||
.BOTTOM_BAR={.x=32,.y=308, .h=16, .w=74},
|
||||
#endif
|
||||
.MENUSIZE=14,
|
||||
.MENU_IND = { 80, 110 },
|
||||
.MENU_CHANGE_X=280,
|
||||
.MENU_CURSOR_X=360,
|
||||
.MENU_TEXT_SIZE_MAX=40,
|
||||
|
||||
.touchaction_list=R480320_touch_regions
|
||||
// }
|
||||
},
|
||||
//-----------------------------------------------------------------
|
||||
{ //320x240_wide_spectrum
|
||||
.Size = { 320, 240 },
|
||||
.StartUpScreen_START = { 0, 10 },
|
||||
.SpectrumWindow = { .x = 4, .y = 136, .w = 312, .h = 89 },//x0_w320
|
||||
|
||||
.SpectrumWindowPadding = 0,
|
||||
|
||||
.TUNE_FREQ = { 116, 109 },
|
||||
.TUNE_SPLIT_FREQ_X = 196,
|
||||
.TUNE_SPLIT_MARKER_X = 167,
|
||||
.TUNE_SPLIT_FREQ_Y_TX = 121,
|
||||
.TUNE_SFREQ = { 236, 87 },
|
||||
.DisplayDbm = { 277, 56 },
|
||||
#ifdef SDR_AMBER
|
||||
.MEMORYLABEL= { 64, 123 } ,
|
||||
#else
|
||||
.MEMORYLABEL= { 157, 87 } ,
|
||||
#endif
|
||||
.BAND_MODE = { 276, 112 },
|
||||
.BAND_MODE_MASK = { .x = 275, .y = 111, .h = 13, .w = 33 },
|
||||
.DEMOD_MODE_MASK = { .x = 138, .y = 71, .h = 12, .w = 16 },
|
||||
#ifndef SDR_AMBER
|
||||
// .DEMOD_MODE_MASK = { .x = 113, .y = 86, .h = 13, .w = 41 },
|
||||
.AGC_MASK = { .x = 74, .y = 86, .h = 13, .w = 36 },
|
||||
.TUNE_STEP={ .x = 113, .y = 86, .h = 13, .w = 41 },
|
||||
#else
|
||||
// .DEMOD_MODE_MASK = { .x = 138, .y = 71, .h = 12, .w = 16 },
|
||||
.AGC_MASK = { .x = 74, .y = 86, .h = 13, .w = 80 },
|
||||
.TUNE_STEP={ .x = 157, .y = 86, .h = 13, .w = 57 },
|
||||
#endif
|
||||
// .TUNE_STEP={ .x = 157, .y = 86, .h = 13, .w = 57 },
|
||||
|
||||
.ENCODER_IND = { 0, 15 },
|
||||
.ENCODER_MODE = MODE_VERTICAL,
|
||||
//#ifndef SDR_AMBER
|
||||
// .DIGMODE= { .x = 74, .y = 71, .w = 80 },
|
||||
//#else
|
||||
.DIGMODE= { .x = 74, .y = 71, .w = 63 },
|
||||
//#endif
|
||||
.LEFTBOXES_IND = { .x = 157, .y = 56, .w = 58, .h = 28 },
|
||||
.LEFTBOXES_MODE = MODE_HORIZONTAL,
|
||||
.LEFTBOXES_ROW_2ND_OFF = 13,
|
||||
|
||||
.PW_IND = { .x = 113, .y = 56, .w = 41 },
|
||||
.TEMP_IND={ .x = 0, .y = 0 },
|
||||
// .RTC_IND={ .x= 5, .y = 72 },
|
||||
.RTC_IND={ .x= 5, .y = 86 },
|
||||
|
||||
.LOADANDDEBUG_Y = 100,
|
||||
.DEBUG_X = 0,
|
||||
.LOAD_X = 280,
|
||||
|
||||
.PWR_NUM_IND = { 1, 100 },
|
||||
|
||||
.CW_DECODER_WPM = { 0, 113 },
|
||||
|
||||
.SNAP_CARRIER = { 27, 128 },
|
||||
|
||||
.TextMsgLine = { 5, 99 },
|
||||
.TextMsg_buffer_max = 44,
|
||||
.TextMsg_font = 4,
|
||||
|
||||
.FREEDV_SNR = { 5, 123 },
|
||||
.FREEDV_BER = { 5, 113 },
|
||||
.FREEDV_FONT = 4,
|
||||
|
||||
.SM_IND = { .x = 113, .y = 0, .h = 52, .w = 203 },
|
||||
// .PWR_IND = { .x = 16, .y = 86 },
|
||||
.PWR_IND = { .x = 16, .y = 72 },
|
||||
|
||||
.BOTTOM_BAR = { .x = 2, .y = 231, .h = 13, .w=62 },
|
||||
|
||||
.MENUSIZE = 7,
|
||||
.MENU_IND = { 60, 140 },
|
||||
.MENU_CHANGE_X = 244,
|
||||
// .MENU_CURSOR_X = 311,
|
||||
.MENU_CURSOR_X = 310,
|
||||
.MENU_TEXT_SIZE_MAX = 34,
|
||||
|
||||
.touchaction_list = R320240__touch_regions_widespectrum
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
disp_resolution_t disp_resolution;
|
||||
#endif
|
||||
@@ -0,0 +1,160 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
/************************************************************************************
|
||||
** **
|
||||
** UHSDR **
|
||||
** a powerful firmware for STM32 based SDR transceivers **
|
||||
** **
|
||||
**--------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: ui_lcd_layouts.h **
|
||||
** Description: Layout definitions header file **
|
||||
** Licence: GNU GPLv3 **
|
||||
** Author: Slawomir Balon/SP9BSL **
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef UI_LCD_LAYOUTS_H_
|
||||
#define UI_LCD_LAYOUTS_H_
|
||||
|
||||
|
||||
#define COL_SPECTRUM_GRAD 0x40
|
||||
#define Grid RGB(COL_SPECTRUM_GRAD,COL_SPECTRUM_GRAD,COL_SPECTRUM_GRAD) // COL_SPECTRUM_GRAD = 0x40
|
||||
#define WATERFALL_HEIGHT 70
|
||||
#define SPECTRUM_MAX_MARKER 3
|
||||
#define SPECTRUM_SCOPE_GRID_VERT_COUNT 8
|
||||
#define SPECTRUM_SCOPE_GRID_HORIZ 16
|
||||
|
||||
|
||||
//#define LEFTBOX_WIDTH 58 // used for the lower left side controls
|
||||
//#define LEFTBOX_ROW_H (28)
|
||||
//#define LEFTBOX_ROW_2ND_OFF (13)
|
||||
|
||||
#define ENC_COL_W (37)
|
||||
#define ENC_ROW_H (30)
|
||||
#define ENC_ROW_2ND_OFF (14)
|
||||
#define Xspacing 5
|
||||
#define ui_txt_msg_buffer_size 51 //this defines the buffer size for text line in maximum possible configuration.
|
||||
//Please adjust it to maximum value+1 of ts.Layout->TextMsg_buffer_max
|
||||
typedef enum
|
||||
{
|
||||
RESOLUTION_320_240,
|
||||
RESOLUTION_480_320,
|
||||
RESOLUTION_800_480
|
||||
} disp_resolution_t;
|
||||
|
||||
typedef struct {
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
uint16_t w;
|
||||
uint16_t h;
|
||||
} UiArea_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UiArea_t region;
|
||||
void (*function_short_press)();
|
||||
void (*function_long_press)();
|
||||
} touchaction_descr_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const touchaction_descr_t* actions;
|
||||
int32_t size;
|
||||
} touchaction_list_descr_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
} UiCoord_t ;
|
||||
|
||||
typedef struct {
|
||||
UiCoord_t Size; // Lcd dimension
|
||||
|
||||
UiCoord_t StartUpScreen_START;
|
||||
|
||||
UiArea_t SpectrumWindow; // Definition of spectrum window parameters
|
||||
|
||||
UiCoord_t TUNE_FREQ; // Frequency display control
|
||||
|
||||
uint16_t TUNE_SPLIT_FREQ_X; //Shift with a small split to the right to close the frequency digits
|
||||
uint16_t TUNE_SPLIT_MARKER_X;
|
||||
uint16_t TUNE_SPLIT_FREQ_Y_TX;
|
||||
|
||||
UiCoord_t TUNE_SFREQ; // Second frequency display control
|
||||
|
||||
UiCoord_t BAND_MODE; // Band selection control
|
||||
UiArea_t BAND_MODE_MASK;
|
||||
|
||||
UiArea_t DEMOD_MODE_MASK; // Demodulator mode control
|
||||
|
||||
UiArea_t AGC_MASK; //AGC display mask
|
||||
|
||||
UiArea_t TUNE_STEP; // Tunning step control
|
||||
|
||||
UiArea_t BOTTOM_BAR; // Bottom bar
|
||||
|
||||
UiCoord_t ENCODER_IND; // Encoder controls indicator
|
||||
uint8_t ENCODER_MODE; //horizontal/vertical draw order
|
||||
|
||||
UiArea_t LEFTBOXES_IND; // Lower DSP box
|
||||
uint16_t LEFTBOXES_ROW_2ND_OFF;
|
||||
uint8_t LEFTBOXES_MODE;
|
||||
|
||||
UiArea_t PW_IND; // Power level
|
||||
|
||||
UiArea_t DIGMODE; // Digimode item
|
||||
UiArea_t SM_IND; // S meter position
|
||||
UiCoord_t PWR_IND; // Supply Voltage indicator
|
||||
UiCoord_t TEMP_IND; // Temperature Indicator
|
||||
UiCoord_t RTC_IND; // RTC
|
||||
|
||||
UiCoord_t CW_DECODER_WPM;
|
||||
|
||||
UiCoord_t TextMsgLine; // coordinates for text line (CW decoder or freedv output)
|
||||
uint16_t TextMsg_buffer_max; // Text message buffer size
|
||||
uint8_t TextMsg_font;
|
||||
|
||||
UiCoord_t SNAP_CARRIER; // central position of variable freq marker
|
||||
|
||||
UiCoord_t PWR_NUM_IND; // Location of numerical FWD/REV power indicator
|
||||
|
||||
UiCoord_t FREEDV_SNR; //freeDV coordinates for status display
|
||||
UiCoord_t FREEDV_BER;
|
||||
uint16_t FREEDV_FONT;
|
||||
|
||||
UiCoord_t DisplayDbm;
|
||||
|
||||
UiCoord_t MEMORYLABEL;
|
||||
|
||||
uint16_t LOADANDDEBUG_Y;
|
||||
uint16_t DEBUG_X;
|
||||
uint16_t LOAD_X;
|
||||
uint16_t SpectrumWindowPadding;
|
||||
|
||||
uint16_t MENUSIZE; // number of menu items per page/screen
|
||||
|
||||
UiCoord_t MENU_IND; // X position of description of menu item being changed
|
||||
uint16_t MENU_CHANGE_X; // Position of variable being changed
|
||||
uint16_t MENU_CURSOR_X; // Position of cursor used to indicate selected item
|
||||
uint8_t MENU_TEXT_SIZE_MAX; // One line maximum length
|
||||
|
||||
const touchaction_list_descr_t* touchaction_list;
|
||||
} LcdLayout;
|
||||
|
||||
enum MODE_{
|
||||
MODE_VERTICAL=0,
|
||||
MODE_HORIZONTAL
|
||||
};
|
||||
|
||||
enum LcdLayout_{
|
||||
LcdLayout_320x240=0,
|
||||
LcdLayout_480x320,
|
||||
LcdLayout_800x480,
|
||||
LcdLayout_320x240_ws, // full wide panoram
|
||||
LcdLayoutsCount //this is last position enumerated used for layout array definition. Insert new layout name before this one
|
||||
};
|
||||
|
||||
extern const LcdLayout LcdLayouts[LcdLayoutsCount];
|
||||
extern disp_resolution_t disp_resolution;
|
||||
|
||||
#endif /* UI_LCD_LAYOUTS_H_ */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,287 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
#ifndef __UI_SPECTRUM_H
|
||||
#define __UI_SPECTRUM_H
|
||||
/************************************************************************************
|
||||
** **
|
||||
** mcHF QRP Transceiver **
|
||||
** K Atanassov - M0NKA 2014 **
|
||||
** **
|
||||
**---------------------------------------------------------------------------------**
|
||||
** **
|
||||
** File name: **
|
||||
** Description: **
|
||||
** Last Modified: **
|
||||
** Licence: GNU GPLv3 **
|
||||
************************************************************************************/
|
||||
|
||||
#include "uhsdr_board.h"
|
||||
#include "uhsdr_types.h"
|
||||
#include "audio_driver.h"
|
||||
#include "arm_const_structs.h"
|
||||
#include "ui_lcd_layouts.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
UiArea_t full;
|
||||
UiArea_t draw;
|
||||
UiArea_t title;
|
||||
UiArea_t scope;
|
||||
UiArea_t graticule;
|
||||
UiArea_t wfall;
|
||||
} SpectrumAreas_t;
|
||||
|
||||
|
||||
void UiSpectrum_Init(void);
|
||||
void UiSpectrum_Clear(void);
|
||||
void UiSpectrum_Redraw(void);
|
||||
void UiSpectrum_WaterfallClearData(void);
|
||||
void UiSpectrum_CalculateDisplayFilterBW(float32_t* width_pixel_, float32_t* left_filter_border_pos_);
|
||||
void UiSpectrum_DisplayFilterBW(void);
|
||||
|
||||
void UiSpectrum_InitCwSnapDisplay (bool visible);
|
||||
void UiSpectrum_ResetSpectrum(void);
|
||||
uint16_t UiSprectrum_CheckNewGraticulePos(uint16_t new_y);
|
||||
|
||||
// Settings for dB/division for spectrum display
|
||||
enum
|
||||
{
|
||||
DB_DIV_UNUSED = 0,
|
||||
DB_DIV_5,
|
||||
DB_DIV_7,
|
||||
DB_DIV_10,
|
||||
DB_DIV_15,
|
||||
DB_DIV_20,
|
||||
S_1_DIV,
|
||||
S_2_DIV,
|
||||
S_3_DIV,
|
||||
SCOPE_SCALE_NUM
|
||||
};
|
||||
|
||||
#define DB_DIV_ADJUST_MIN DB_DIV_5
|
||||
#define DB_DIV_ADJUST_MAX S_3_DIV
|
||||
#define DB_DIV_ADJUST_DEFAULT DB_DIV_10
|
||||
|
||||
|
||||
// Enumeration to select which waterfall palette to use
|
||||
enum
|
||||
{
|
||||
WFALL_GRAY = 0,
|
||||
WFALL_HOT_COLD,
|
||||
WFALL_RAINBOW,
|
||||
WFALL_BLUE,
|
||||
WFALL_GRAY_INVERSE,
|
||||
WFALL_FLAME,
|
||||
WFALL_SUNSET,
|
||||
WFALL_MATRIX,
|
||||
WFALL_COLOR_NUM
|
||||
};
|
||||
//
|
||||
#define WATERFALL_COLOR_MIN 0
|
||||
#define WATERFALL_COLOR_MAX (WFALL_COLOR_NUM-1)
|
||||
#define WATERFALL_COLOR_DEFAULT WFALL_GRAY
|
||||
//
|
||||
#define WATERFALL_STEP_SIZE_MIN 1
|
||||
#define WATERFALL_STEP_SIZE_MAX 5
|
||||
#define WATERFALL_STEP_SIZE_DEFAULT 2
|
||||
//
|
||||
#define WATERFALL_OFFSET_MIN 60
|
||||
#define WATERFALL_OFFSET_MAX 140
|
||||
#define WATERFALL_OFFSET_DEFAULT 100
|
||||
//
|
||||
#define WATERFALL_CONTRAST_MIN 10
|
||||
#define WATERFALL_CONTRAST_MAX 225
|
||||
#define WATERFALL_CONTRAST_DEFAULT 120
|
||||
//
|
||||
#define WATERFALL_SPEED_MIN 0
|
||||
#define WATERFALL_SPEED_MAX 30
|
||||
#define WATERFALL_SPEED_DEFAULT 10
|
||||
//
|
||||
#define WATERFALL_NOSIG_ADJUST_MIN 10
|
||||
#define WATERFALL_NOSIG_ADJUST_MAX 30
|
||||
#define WATERFALL_NOSIG_ADJUST_DEFAULT 20
|
||||
|
||||
//
|
||||
#define WATERFALL_SPEED_WARN 1//5
|
||||
#define WATERFALL_SPEED_WARN1 3//9
|
||||
//
|
||||
// Constants for waterfall size settings
|
||||
//
|
||||
enum
|
||||
{
|
||||
SPECTRUM_NORMAL=0,
|
||||
SPECTRUM_BIG
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
FFT_WINDOW_RECTANGULAR=0,
|
||||
FFT_WINDOW_COSINE,
|
||||
FFT_WINDOW_BARTLETT,
|
||||
FFT_WINDOW_WELCH,
|
||||
FFT_WINDOW_HANN,
|
||||
FFT_WINDOW_HAMMING,
|
||||
FFT_WINDOW_BLACKMAN,
|
||||
FFT_WINDOW_NUTTALL,
|
||||
FFT_WINDOW_MAX
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
Redraw_SCOPE=1,
|
||||
Redraw_WATERFALL=2
|
||||
};
|
||||
|
||||
|
||||
//#define FFT_WINDOW_DEFAULT FFT_WINDOW_BLACKMAN
|
||||
|
||||
#define SPECTRUM_SIZE_DEFAULT SPECTRUM_NORMAL
|
||||
|
||||
|
||||
// Spectrum scope operational constants
|
||||
|
||||
#define SPECTRUM_SCOPE_SPEED_MIN 0 // minimum spectrum scope speed
|
||||
#define SPECTRUM_SCOPE_SPEED_MAX 30 // maximum spectrum scope speed
|
||||
#define SPECTRUM_SCOPE_SPEED_DEFAULT 5
|
||||
//
|
||||
#define SPECTRUM_FILTER_MIN 1 // minimum filter setting
|
||||
#define SPECTRUM_FILTER_MAX 20 // maximum filter setting
|
||||
#define SPECTRUM_FILTER_DEFAULT 4 // default filter setting
|
||||
//
|
||||
#define SPECTRUM_SCOPE_AGC_MIN 1 // minimum spectrum scope AGC rate setting
|
||||
#define SPECTRUM_SCOPE_AGC_MAX 50 // maximum spectrum scope AGC rate setting
|
||||
#define SPECTRUM_SCOPE_AGC_DEFAULT 25 // default spectrum scope AGC rate setting
|
||||
//
|
||||
#define SPECTRUM_SCOPE_NOSIG_ADJUST_MIN 10
|
||||
#define SPECTRUM_SCOPE_NOSIG_ADJUST_MAX 30
|
||||
#define SPECTRUM_SCOPE_NOSIG_ADJUST_DEFAULT 20
|
||||
|
||||
|
||||
#define SPECTRUM_AGC_SCALING 25 // scaling factor by which the on-screen Spec. AGC Adj. is divided for adjustment.
|
||||
|
||||
#define SCOPE_PREAMP_GAIN 1000//200 // amount of "amplification" in front of the FFT used for the Spectrum Scope and Waterfall used to overcome mathematical "noise floor"
|
||||
|
||||
#define INIT_SPEC_AGC_LEVEL -80 // Initial offset for AGC level for spectrum/waterfall display
|
||||
|
||||
#define NUMBER_WATERFALL_COLOURS 64 // number of colors in the waterfall table
|
||||
|
||||
|
||||
#ifdef USE_DISP_320_240
|
||||
#define WATERFALL_MAX_LINES WATERFALL_MAX_SIZE
|
||||
#endif
|
||||
|
||||
#ifdef USE_DISP_480_320
|
||||
#ifdef STM32F7
|
||||
#define WATERFALL_MAX_LINES WATERFALL_HEIGHT
|
||||
#endif
|
||||
#ifdef STM32F4
|
||||
#define WATERFALL_MAX_LINES (WATERFALL_HEIGHT/2)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// FIXME: This is a temporary hack
|
||||
// this needs to be as long at the longest scope width (in case of multiple resolutions)
|
||||
// list highest resolution first
|
||||
|
||||
#ifdef USE_DISP_480_320
|
||||
#define SPECTRUM_WIDTH_MAX 480
|
||||
#elif defined(USE_DISP_320_240)
|
||||
#define SPECTRUM_WIDTH_MAX 480
|
||||
#endif
|
||||
|
||||
// Spectrum display
|
||||
typedef struct SpectrumDisplay
|
||||
{
|
||||
// Samples buffer
|
||||
float32_t FFT_RingBuffer[FFT_IQ_BUFF_LEN];
|
||||
float32_t FFT_Samples[FFT_IQ_BUFF_LEN];
|
||||
float32_t FFT_MagData[SPEC_BUFF_LEN];
|
||||
float32_t FFT_AVGData[SPEC_BUFF_LEN]; // IIR low-pass filtered FFT buffer data
|
||||
uint32_t FFT_frequency; // center frequency of stored FFT
|
||||
// scope pixel data
|
||||
uint16_t Old_PosData[SPECTRUM_WIDTH_MAX];
|
||||
|
||||
// Current data ptr
|
||||
uint32_t samp_ptr;
|
||||
volatile bool reading_ringbuffer;
|
||||
// if the user level code wants to read the ring buffer
|
||||
// simply set this, and the audio driver will stop writing
|
||||
// to the buffer. This means we loose some samples here but this is not a problem I would think.
|
||||
// if we don't want or should do this,
|
||||
// we have to add a little extra space to the ringbuffer (one audio driver sample block), which gives sufficient
|
||||
// space to add data to while we are reading.
|
||||
|
||||
|
||||
// Addresses of vertical grid lines on x axis
|
||||
ushort vert_grid_id[SPECTRUM_SCOPE_GRID_VERT_COUNT-1];
|
||||
uint16_t vert_grid; // distance between vert grid lines
|
||||
|
||||
// Addresses of horizontal grid lines on x axis
|
||||
ushort horz_grid_id[16];
|
||||
uint8_t upper_horiz_gridline; // how many grid lines to use
|
||||
|
||||
// State machine current state
|
||||
uchar state;
|
||||
|
||||
// Init done flag
|
||||
uchar enabled;
|
||||
|
||||
// Variables used in spectrum display AGC
|
||||
uint8_t magnify; // 2^magnify == zoom factor, max is 5
|
||||
|
||||
uint16_t spec_len;
|
||||
uint16_t fft_iq_len;
|
||||
const arm_cfft_instance_f32 * cfft_instance;
|
||||
|
||||
float display_offset; // "vertical" offset for spectral scope, gain adjust for waterfall
|
||||
float agc_rate; // this holds AGC rate for the Spectrum Display
|
||||
float db_scale; // scaling factor for dB/division
|
||||
|
||||
ushort wfall_line_update; // used to set the number of lines per update on the waterfall
|
||||
float wfall_contrast; // used to adjust the contrast of the waterfall display
|
||||
|
||||
uint16_t waterfall_colours[NUMBER_WATERFALL_COLOURS+1]; // palette of colors for waterfall data
|
||||
// uint8_t (*waterfall)[SPECTRUM_WIDTH]; //pointer to waterfall memory
|
||||
uint8_t repeatWaterfallLine; //line repeating count for waterfall size grater than number of data lines in waterfall array
|
||||
// uint8_t waterfall[WATERFALL_MAX_LINES*SPECTRUM_WIDTH]; // circular buffer used for storing waterfall data - remember to increase this if the waterfall is made larger!
|
||||
uint8_t waterfall[(WATERFALL_HEIGHT+10)*256]; // circular buffer used for storing waterfall data - remember to increase this if the waterfall is made larger!
|
||||
uint32_t waterfall_frequencies[(WATERFALL_HEIGHT+10)]; // we reserve hopefully enough frequency stores here. We store for each line in waterfall the center frequency of it.
|
||||
//uint8_t wfall_DrawDirection; //0=upward (water fountain), 1=downward (real waterfall)
|
||||
uint32_t wfall_line; // pointer to current line of waterfall data
|
||||
uint32_t wfall_size; // vertical size of the waterfall data (number of stored fft results)
|
||||
//uint16_t wfall_disp_lines; // vertical size of the waterfall on display
|
||||
uint32_t wfall_ystart;
|
||||
|
||||
uint32_t scope_size;
|
||||
uint32_t scope_ystart;
|
||||
|
||||
float32_t hz_per_pixel; // how many Hertz is one pixel in the spectrum
|
||||
float32_t rx_carrier_pos; // where is the current receiving frequency carrier (in pixels)
|
||||
float32_t marker_offset[SPECTRUM_MAX_MARKER]; // how is the current transmitting frequency carrier offset from rx carrier (in pixels)
|
||||
|
||||
float32_t marker_pos[SPECTRUM_MAX_MARKER]; // where is the current transmitting frequency carrier (in pixels)
|
||||
uint16_t marker_line_pos_prev[SPECTRUM_MAX_MARKER]; // previous x-axis location of carrier line in screen coordinates, 0xffff indicates off screen
|
||||
uint16_t marker_num; // how many marker lines we have right now
|
||||
uint16_t marker_num_prev; // how many marker lines we had last time
|
||||
|
||||
uint32_t scope_centre_grid_colour_active; // active colour of the spectrum scope center grid line
|
||||
uint32_t scope_grid_colour_active; // active color of spectrum scope grid;
|
||||
|
||||
uint32_t boxes_colour; // screen boxes colour
|
||||
uint32_t txtline_colour; // ticker colour
|
||||
|
||||
uint16_t old_left_filter_border_pos; //previous BW highlight left border
|
||||
uint16_t old_right_filter_border_pos; //previous BW highlight right border
|
||||
uint8_t RedrawType;
|
||||
SpectrumAreas_t* Slayout;
|
||||
|
||||
} SpectrumDisplay;
|
||||
|
||||
// Spectrum display
|
||||
extern SpectrumDisplay sd;
|
||||
|
||||
//#define MinimumScopeSize 24
|
||||
#define MinimumScopeSize 46
|
||||
#define MinimumWaterfallSize 16
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,586 @@
|
||||
/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */
|
||||
#ifndef __WATERFALL_COLOURS_H
|
||||
#define __WATERFALL_COLOURS_H
|
||||
|
||||
// Color palattes for waterfall displays
|
||||
//
|
||||
// Derived with the help of: http://www.perbang.dk/rgbgradient/ (Using the "gradient maker")
|
||||
//
|
||||
// NOTES:
|
||||
//
|
||||
// - The waterfall palettes range from [0] = weakest signal to [63] for the strongest signal
|
||||
//
|
||||
// - The last entry [64] (the 65th) is always reserved for the vertical line color. It is included in the table as a placeholder, but its value will always be overwritten.
|
||||
//
|
||||
// - The LCD uses a 16 bit (5,6,5) RGB palette where there are 5 Blue, 6 Green and 5 Red bits of color resolution, produced by the macro "RGB", below
|
||||
//
|
||||
//
|
||||
#define RGB(red,green,blue)(uint16_t)(((red>>3)<<11)|((green>>2)<<5)|(blue>> 3))
|
||||
//
|
||||
//
|
||||
// Waterfall Gray Colors: Weak = dark, strongest = white
|
||||
//
|
||||
const uint16_t waterfall_grey[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x04,0x04,0x04),
|
||||
RGB(0x08,0x08,0x08),
|
||||
RGB(0x0c,0x0c,0x0c),
|
||||
RGB(0x10,0x10,0x10),
|
||||
RGB(0x14,0x14,0x14),
|
||||
RGB(0x18,0x18,0x18),
|
||||
RGB(0x1c,0x1c,0x1c),
|
||||
RGB(0x20,0x20,0x20),
|
||||
RGB(0x24,0x24,0x24),
|
||||
RGB(0x28,0x28,0x28),
|
||||
RGB(0x2c,0x2c,0x2c),
|
||||
RGB(0x30,0x30,0x30),
|
||||
RGB(0x34,0x34,0x34),
|
||||
RGB(0x38,0x38,0x38),
|
||||
RGB(0x3c,0x3c,0x3c),
|
||||
RGB(0x40,0x40,0x40),
|
||||
RGB(0x44,0x44,0x44),
|
||||
RGB(0x48,0x48,0x48),
|
||||
RGB(0x4c,0x4c,0x4c),
|
||||
RGB(0x50,0x50,0x50),
|
||||
RGB(0x54,0x54,0x54),
|
||||
RGB(0x59,0x59,0x59),
|
||||
RGB(0x5d,0x5d,0x5d),
|
||||
RGB(0x61,0x61,0x61),
|
||||
RGB(0x65,0x65,0x65),
|
||||
RGB(0x69,0x69,0x69),
|
||||
RGB(0x6d,0x6d,0x6d),
|
||||
RGB(0x71,0x71,0x71),
|
||||
RGB(0x75,0x75,0x75),
|
||||
RGB(0x79,0x79,0x79),
|
||||
RGB(0x7d,0x7d,0x7d),
|
||||
RGB(0x81,0x81,0x81),
|
||||
RGB(0x85,0x85,0x85),
|
||||
RGB(0x89,0x89,0x89),
|
||||
RGB(0x8d,0x8d,0x8d),
|
||||
RGB(0x91,0x91,0x91),
|
||||
RGB(0x95,0x95,0x95),
|
||||
RGB(0x99,0x99,0x99),
|
||||
RGB(0x9d,0x9d,0x9d),
|
||||
RGB(0xa1,0xa1,0xa1),
|
||||
RGB(0xa5,0xa5,0xa5),
|
||||
RGB(0xa9,0xa9,0xa9),
|
||||
RGB(0xae,0xae,0xae),
|
||||
RGB(0xb2,0xb2,0xb2),
|
||||
RGB(0xb6,0xb6,0xb6),
|
||||
RGB(0xba,0xba,0xba),
|
||||
RGB(0xbe,0xbe,0xbe),
|
||||
RGB(0xc2,0xc2,0xc2),
|
||||
RGB(0xc6,0xc6,0xc6),
|
||||
RGB(0xca,0xca,0xca),
|
||||
RGB(0xce,0xce,0xce),
|
||||
RGB(0xd2,0xd2,0xd2),
|
||||
RGB(0xd6,0xd6,0xd6),
|
||||
RGB(0xda,0xda,0xda),
|
||||
RGB(0xde,0xde,0xde),
|
||||
RGB(0xe2,0xe2,0xe2),
|
||||
RGB(0xe6,0xe6,0xe6),
|
||||
RGB(0xea,0xea,0xea),
|
||||
RGB(0xee,0xee,0xee),
|
||||
RGB(0xf2,0xf2,0xf2),
|
||||
RGB(0xf6,0xf6,0xf6),
|
||||
RGB(0xfa,0xfa,0xfa),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
|
||||
// Waterfall Gray Colors - inverse (weak = light, strong = dark)
|
||||
//
|
||||
const uint16_t waterfall_grey_inverse[] =
|
||||
{
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xfa,0xfa,0xfa),
|
||||
RGB(0xf6,0xf6,0xf6),
|
||||
RGB(0xf2,0xf2,0xf2),
|
||||
RGB(0xee,0xee,0xee),
|
||||
RGB(0xea,0xea,0xea),
|
||||
RGB(0xe6,0xe6,0xe6),
|
||||
RGB(0xe2,0xe2,0xe2),
|
||||
RGB(0xde,0xde,0xde),
|
||||
RGB(0xda,0xda,0xda),
|
||||
RGB(0xd6,0xd6,0xd6),
|
||||
RGB(0xd2,0xd2,0xd2),
|
||||
RGB(0xce,0xce,0xce),
|
||||
RGB(0xca,0xca,0xca),
|
||||
RGB(0xc6,0xc6,0xc6),
|
||||
RGB(0xc2,0xc2,0xc2),
|
||||
RGB(0xbe,0xbe,0xbe),
|
||||
RGB(0xba,0xba,0xba),
|
||||
RGB(0xb6,0xb6,0xb6),
|
||||
RGB(0xb2,0xb2,0xb2),
|
||||
RGB(0xae,0xae,0xae),
|
||||
RGB(0xa9,0xa9,0xa9),
|
||||
RGB(0xa5,0xa5,0xa5),
|
||||
RGB(0xa1,0xa1,0xa1),
|
||||
RGB(0x9d,0x9d,0x9d),
|
||||
RGB(0x99,0x99,0x99),
|
||||
RGB(0x95,0x95,0x95),
|
||||
RGB(0x91,0x91,0x91),
|
||||
RGB(0x8d,0x8d,0x8d),
|
||||
RGB(0x89,0x89,0x89),
|
||||
RGB(0x85,0x85,0x85),
|
||||
RGB(0x81,0x81,0x81),
|
||||
RGB(0x7d,0x7d,0x7d),
|
||||
RGB(0x79,0x79,0x79),
|
||||
RGB(0x75,0x75,0x75),
|
||||
RGB(0x71,0x71,0x71),
|
||||
RGB(0x6d,0x6d,0x6d),
|
||||
RGB(0x69,0x69,0x69),
|
||||
RGB(0x65,0x65,0x65),
|
||||
RGB(0x61,0x61,0x61),
|
||||
RGB(0x5d,0x5d,0x5d),
|
||||
RGB(0x59,0x59,0x59),
|
||||
RGB(0x54,0x54,0x54),
|
||||
RGB(0x50,0x50,0x50),
|
||||
RGB(0x4c,0x4c,0x4c),
|
||||
RGB(0x48,0x48,0x48),
|
||||
RGB(0x44,0x44,0x44),
|
||||
RGB(0x40,0x40,0x40),
|
||||
RGB(0x3c,0x3c,0x3c),
|
||||
RGB(0x38,0x38,0x38),
|
||||
RGB(0x34,0x34,0x34),
|
||||
RGB(0x30,0x30,0x30),
|
||||
RGB(0x2c,0x2c,0x2c),
|
||||
RGB(0x28,0x28,0x28),
|
||||
RGB(0x24,0x24,0x24),
|
||||
RGB(0x20,0x20,0x20),
|
||||
RGB(0x1c,0x1c,0x1c),
|
||||
RGB(0x18,0x18,0x18),
|
||||
RGB(0x14,0x14,0x14),
|
||||
RGB(0x10,0x10,0x10),
|
||||
RGB(0x0c,0x0c,0x0c),
|
||||
RGB(0x08,0x08,0x08),
|
||||
RGB(0x04,0x04,0x04),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
|
||||
|
||||
// This palette has weak signals as "cold" (blue) and strong signals as hot (red)
|
||||
//
|
||||
const uint16_t waterfall_cold_hot[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x22), //div 4 RGB(0x00,0x02,0x8a), - make the first few colors darker/"redder"
|
||||
RGB(0x01,0x00,0x23), //div 3.8 RGB(0x04,0x02,0x87),
|
||||
RGB(0x02,0x00,0x25), //div 3.6 RGB(0x08,0x02,0x85),
|
||||
RGB(0x04,0x00,0x27), //div 3.4 RGB(0x0c,0x02,0x83),
|
||||
RGB(0x05,0x00,0x28), //div 3.2 RGB(0x10,0x02,0x81),
|
||||
RGB(0x07,0x00,0x2a), //div 3.0 RGB(0x14,0x02,0x7f),
|
||||
RGB(0x09,0x01,0x2d), //div 2.8 RGB(0x18,0x03,0x7d),
|
||||
RGB(0x0a,0x01,0x2f), //div 2.6 RGB(0x1c,0x03,0x7b),
|
||||
RGB(0x0d,0x01,0x32), //div 2.4 RGB(0x20,0x03,0x79),
|
||||
RGB(0x10,0x02,0x36), //div 2.2 RGB(0x24,0x03,0x77),
|
||||
RGB(0x14,0x02,0x3b), //div 2.0 RGB(0x28,0x03,0x75),
|
||||
RGB(0x18,0x02,0x40), //div 1.8 RGB(0x2c,0x04,0x73),
|
||||
RGB(0x1e,0x02,0x47), //div 1.6 RGB(0x30,0x04,0x71),
|
||||
RGB(0x25,0x02,0x4f), //div 1.4 RGB(0x34,0x04,0x6f),
|
||||
RGB(0x2f,0x03,0x5b), //div 1.2 RGB(0x38,0x04,0x6d),
|
||||
RGB(0x3c,0x04,0x6b),
|
||||
RGB(0x40,0x05,0x69),
|
||||
RGB(0x44,0x05,0x67),
|
||||
RGB(0x48,0x05,0x65),
|
||||
RGB(0x4c,0x05,0x63),
|
||||
RGB(0x50,0x05,0x61),
|
||||
RGB(0x55,0x06,0x5f),
|
||||
RGB(0x59,0x06,0x5d),
|
||||
RGB(0x5d,0x06,0x5b),
|
||||
RGB(0x61,0x06,0x59),
|
||||
RGB(0x65,0x06,0x57),
|
||||
RGB(0x69,0x06,0x55),
|
||||
RGB(0x6d,0x07,0x53),
|
||||
RGB(0x71,0x07,0x51),
|
||||
RGB(0x75,0x07,0x4f),
|
||||
RGB(0x79,0x07,0x4d),
|
||||
RGB(0x7d,0x07,0x4b),
|
||||
RGB(0x81,0x08,0x48),
|
||||
RGB(0x85,0x08,0x46),
|
||||
RGB(0x89,0x08,0x44),
|
||||
RGB(0x8d,0x08,0x42),
|
||||
RGB(0x91,0x08,0x40),
|
||||
RGB(0x95,0x09,0x3d),
|
||||
RGB(0x99,0x09,0x3c),
|
||||
RGB(0x9d,0x09,0x3a),
|
||||
RGB(0xa1,0x09,0x38),
|
||||
RGB(0xa5,0x09,0x36),
|
||||
RGB(0xaa,0x0a,0x34),
|
||||
RGB(0xae,0x0a,0x32),
|
||||
RGB(0xb2,0x0a,0x30),
|
||||
RGB(0xb6,0x0a,0x2e),
|
||||
RGB(0xba,0x0a,0x2c),
|
||||
RGB(0xbe,0x0a,0x2a),
|
||||
RGB(0xc2,0x0b,0x28),
|
||||
RGB(0xc6,0x0b,0x26),
|
||||
RGB(0xca,0x0b,0x24),
|
||||
RGB(0xce,0x0b,0x22),
|
||||
RGB(0xd2,0x0b,0x20),
|
||||
RGB(0xd6,0x0c,0x1e),
|
||||
RGB(0xda,0x0c,0x1c),
|
||||
RGB(0xde,0x0c,0x1a),
|
||||
RGB(0xe2,0x0c,0x18),
|
||||
RGB(0xe6,0x0c,0x16),
|
||||
RGB(0xea,0x0d,0x14),
|
||||
RGB(0xee,0x0d,0x12),
|
||||
RGB(0xf2,0x0d,0x10),
|
||||
RGB(0xf6,0x0d,0x0e),
|
||||
RGB(0xfa,0x0d,0x0c),
|
||||
RGB(0xff,0x0d,0x0a),
|
||||
RGB(0xff,0xff,0xff),
|
||||
};
|
||||
//
|
||||
// Waterfall Blue Colors: Weak = dark, strongest = white
|
||||
//
|
||||
const uint16_t waterfall_blue[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x2e),
|
||||
RGB(0x02,0x02,0x31),
|
||||
RGB(0x05,0x05,0x34),
|
||||
RGB(0x07,0x08,0x37),
|
||||
RGB(0x0a,0x0b,0x3b),
|
||||
RGB(0x0c,0x0d,0x3e),
|
||||
RGB(0x0f,0x10,0x41),
|
||||
RGB(0x12,0x13,0x45),
|
||||
RGB(0x14,0x16,0x48),
|
||||
RGB(0x17,0x19,0x4b),
|
||||
RGB(0x19,0x1b,0x4f),
|
||||
RGB(0x1c,0x1e,0x52),
|
||||
RGB(0x1f,0x21,0x55),
|
||||
RGB(0x21,0x24,0x59),
|
||||
RGB(0x24,0x27,0x5c),
|
||||
RGB(0x26,0x29,0x5f),
|
||||
RGB(0x29,0x2c,0x63),
|
||||
RGB(0x2b,0x2f,0x66),
|
||||
RGB(0x2e,0x32,0x69),
|
||||
RGB(0x31,0x35,0x6d),
|
||||
RGB(0x33,0x37,0x70),
|
||||
RGB(0x36,0x3a,0x73),
|
||||
RGB(0x38,0x3d,0x76),
|
||||
RGB(0x3b,0x40,0x7a),
|
||||
RGB(0x3e,0x43,0x7d),
|
||||
RGB(0x40,0x45,0x80),
|
||||
RGB(0x43,0x48,0x84),
|
||||
RGB(0x45,0x4b,0x87),
|
||||
RGB(0x48,0x4e,0x8a),
|
||||
RGB(0x4b,0x51,0x8e),
|
||||
RGB(0x4d,0x53,0x91),
|
||||
RGB(0x50,0x56,0x94),
|
||||
RGB(0x52,0x59,0x98),
|
||||
RGB(0x55,0x5c,0x9b),
|
||||
RGB(0x57,0x5e,0x9e),
|
||||
RGB(0x5a,0x61,0xa2),
|
||||
RGB(0x5d,0x64,0xa5),
|
||||
RGB(0x5f,0x67,0xa8),
|
||||
RGB(0x62,0x6a,0xac),
|
||||
RGB(0x64,0x6c,0xaf),
|
||||
RGB(0x67,0x6f,0xb2),
|
||||
RGB(0x6a,0x72,0xb6),
|
||||
RGB(0x6c,0x75,0xb9),
|
||||
RGB(0x6f,0x78,0xbc),
|
||||
RGB(0x71,0x7a,0xbf),
|
||||
RGB(0x74,0x7d,0xc3),
|
||||
RGB(0x77,0x80,0xc6),
|
||||
RGB(0x79,0x83,0xc9),
|
||||
RGB(0x7c,0x86,0xcd),
|
||||
RGB(0x7e,0x88,0xd0),
|
||||
RGB(0x81,0x8d,0xd3),
|
||||
RGB(0x83,0x8e,0xd7),
|
||||
RGB(0x86,0x91,0xda),
|
||||
RGB(0x89,0x94,0xdd),
|
||||
RGB(0x8b,0x96,0xe1),
|
||||
RGB(0x8e,0x99,0xe4),
|
||||
RGB(0x90,0x9c,0xe7),
|
||||
RGB(0x93,0x9f,0xeb),
|
||||
RGB(0x96,0xa2,0xee),
|
||||
RGB(0x98,0xa4,0xf1),
|
||||
RGB(0x9b,0xa7,0xf5),
|
||||
RGB(0x9d,0xda,0xf8),
|
||||
RGB(0xa0,0xdf,0xfb),
|
||||
RGB(0xa3,0xe5,0xff),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
const uint16_t waterfall_rainbow[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x0b), //div 4.0 RGB(0x00,0x01,0x2d), // Make the first few colors "bluer"
|
||||
RGB(0x00,0x01,0x0d), //div 3.8 RGB(0x00,0x04,0x30),
|
||||
RGB(0x00,0x02,0x0e), //div 3.6 RGB(0x00,0x07,0x33),
|
||||
RGB(0x00,0x03,0x10), //div 3.4 RGB(0x00,0x0b,0x37),
|
||||
RGB(0x00,0x05,0x12), //div 3.2 RGB(0x00,0x10,0x3a),
|
||||
RGB(0x00,0x07,0x14), //div 3.0 RGB(0x00,0x14,0x3d),
|
||||
RGB(0x00,0x09,0x1b), //div 2.8 RGB(0x00,0x1a,0x4a),
|
||||
RGB(0x00,0x0c,0x1a), //div 2.6 RGB(0x00,0x1f,0x44),
|
||||
RGB(0x00,0x0f,0x1e), //div 2.4 RGB(0x00,0x25,0x47),
|
||||
RGB(0x00,0x14,0x22), //div 2.2 RGB(0x00,0x2c,0x4b),
|
||||
RGB(0x00,0x1a,0x27), //div 2.0 RGB(0x00,0x33,0x4e),
|
||||
RGB(0x00,0x20,0x2d), //div 1.8 RGB(0x00,0x3a,0x51),
|
||||
RGB(0x00,0x29,0x35), //div 1.6 RGB(0x00,0x42,0x54),
|
||||
RGB(0x00,0x35,0x3f), //div 1.4 RGB(0x00,0x4a,0x58),
|
||||
RGB(0x00,0x44,0x4c), //div 1.2 RGB(0x00,0x52,0x5b),
|
||||
RGB(0x00,0x5b,0x5e),
|
||||
RGB(0x00,0x62,0x5f),
|
||||
RGB(0x01,0x65,0x5c),
|
||||
RGB(0x01,0x68,0x59),
|
||||
RGB(0x01,0x6c,0x55),
|
||||
RGB(0x01,0x6f,0x50),
|
||||
RGB(0x01,0x72,0x4c),
|
||||
RGB(0x01,0x76,0x46),
|
||||
RGB(0x01,0x79,0x41),
|
||||
RGB(0x01,0x7c,0x3b),
|
||||
RGB(0x01,0x80,0x35),
|
||||
RGB(0x02,0x83,0x2e),
|
||||
RGB(0x02,0x87,0x27),
|
||||
RGB(0x02,0x8a,0x1f),
|
||||
RGB(0x02,0x8d,0x18),
|
||||
RGB(0x02,0x91,0x0f),
|
||||
RGB(0x02,0x94,0x07),
|
||||
RGB(0x08,0x97,0x03),
|
||||
RGB(0x11,0x9b,0x03),
|
||||
RGB(0x1c,0x9e,0x03),
|
||||
RGB(0x26,0xa1,0x03),
|
||||
RGB(0x31,0xa4,0x03),
|
||||
RGB(0x3d,0xa8,0x03),
|
||||
RGB(0x49,0xab,0x04),
|
||||
RGB(0x55,0xaf,0x04),
|
||||
RGB(0x61,0xb2,0x04),
|
||||
RGB(0x6e,0xb5,0x04),
|
||||
RGB(0x7c,0xb8,0x04),
|
||||
RGB(0x8a,0xbc,0x05),
|
||||
RGB(0x98,0xbf,0x05),
|
||||
RGB(0xa6,0xc3,0x05),
|
||||
RGB(0xb5,0xc6,0x05),
|
||||
RGB(0xc5,0xc9,0x05),
|
||||
RGB(0xcc,0xc4,0x06),
|
||||
RGB(0xd0,0xbb,0x06),
|
||||
RGB(0xd3,0xb1,0x06),
|
||||
RGB(0xd7,0xa7,0x06),
|
||||
RGB(0xda,0x9c,0x07),
|
||||
RGB(0xdd,0x91,0x07),
|
||||
RGB(0xe0,0x86,0x07),
|
||||
RGB(0xe4,0x7a,0x07),
|
||||
RGB(0xe7,0x6e,0x08),
|
||||
RGB(0xeb,0x61,0x08),
|
||||
RGB(0xee,0x54,0x08),
|
||||
RGB(0xf1,0x47,0x08),
|
||||
RGB(0xf4,0x39,0x09),
|
||||
RGB(0xf8,0x2b,0x09),
|
||||
RGB(0xfb,0x1c,0x09),
|
||||
RGB(0xff,0x0e,0x09),
|
||||
RGB(0xff,0xff,0xff),
|
||||
};
|
||||
//
|
||||
// Waterfall Flame: Weak = dark blue -> light blue -> red -> yellow, strongest = white
|
||||
//
|
||||
const uint16_t waterfall_flame[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x22),
|
||||
RGB(0x01,0x00,0x23),
|
||||
RGB(0x02,0x00,0x25),
|
||||
RGB(0x04,0x00,0x27),
|
||||
RGB(0x05,0x00,0x28),
|
||||
RGB(0x07,0x00,0x2a),
|
||||
RGB(0x09,0x01,0x2d),
|
||||
RGB(0x0a,0x01,0x2f),
|
||||
RGB(0x0d,0x01,0x32),
|
||||
RGB(0x10,0x02,0x36),
|
||||
RGB(0x14,0x02,0x3b),
|
||||
RGB(0x18,0x02,0x40),
|
||||
RGB(0x3f,0x00,0x00),
|
||||
RGB(0x4d,0x00,0x00),
|
||||
RGB(0x3f,0x00,0x00),
|
||||
RGB(0x5a,0x00,0x00),
|
||||
RGB(0x64,0x00,0x00),
|
||||
RGB(0x6e,0x00,0x00),
|
||||
RGB(0x78,0x00,0x00),
|
||||
RGB(0x82,0x00,0x00),
|
||||
RGB(0x97,0x00,0x00),
|
||||
RGB(0xa1,0x00,0x00),
|
||||
RGB(0xab,0x00,0x00),
|
||||
RGB(0xb7,0x00,0x00),
|
||||
RGB(0xc2,0x00,0x00),
|
||||
RGB(0xcd,0x00,0x00),
|
||||
RGB(0xd9,0x00,0x00),
|
||||
RGB(0xe4,0x00,0x00),
|
||||
RGB(0xef,0x00,0x00),
|
||||
RGB(0xfa,0x00,0x00),
|
||||
RGB(0xfa,0x18,0x00),
|
||||
RGB(0xfa,0x2b,0x00),
|
||||
RGB(0xfa,0x3c,0x00),
|
||||
RGB(0xfa,0x4b,0x00),
|
||||
RGB(0xfa,0x57,0x00),
|
||||
RGB(0xfa,0x62,0x00),
|
||||
RGB(0xfa,0x6d,0x00),
|
||||
RGB(0xfa,0x76,0x00),
|
||||
RGB(0xfa,0x7e,0x00),
|
||||
RGB(0xfa,0x86,0x00),
|
||||
RGB(0xfa,0x8d,0x00),
|
||||
RGB(0xfa,0x94,0x00),
|
||||
RGB(0xfa,0x9b,0x00),
|
||||
RGB(0xfa,0xa1,0x00),
|
||||
RGB(0xfa,0xa7,0x00),
|
||||
RGB(0xfa,0xac,0x00),
|
||||
RGB(0xfa,0xb2,0x00),
|
||||
RGB(0xfa,0xb7,0x00),
|
||||
RGB(0xfa,0xbe,0x00),
|
||||
RGB(0xfa,0xc5,0x00),
|
||||
RGB(0xfa,0xcb,0x00),
|
||||
RGB(0xfa,0xd2,0x00),
|
||||
RGB(0xfa,0xd8,0x00),
|
||||
RGB(0xfa,0xdf,0x00),
|
||||
RGB(0xfa,0xe6,0x00),
|
||||
RGB(0xfa,0xee,0x00),
|
||||
RGB(0xfa,0xf7,0x00),
|
||||
RGB(0xfa,0xfa,0x2d),
|
||||
RGB(0xfa,0xf8,0x51),
|
||||
RGB(0xfa,0xf8,0x76),
|
||||
RGB(0xfa,0xf8,0x9a),
|
||||
RGB(0xfa,0xfa,0xbf),
|
||||
RGB(0xfa,0xfa,0xe1),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
//
|
||||
// Waterfall Sunset: sunset colours
|
||||
//
|
||||
const uint16_t waterfall_sunset[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x02,0x0f),
|
||||
RGB(0x00,0x03,0x1f),
|
||||
RGB(0x00,0x05,0x2f),
|
||||
RGB(0x00,0x06,0x3e),
|
||||
RGB(0x00,0x09,0x4e),
|
||||
RGB(0x00,0x0a,0x5e),
|
||||
RGB(0x00,0x0c,0x6d),
|
||||
RGB(0x00,0x0d,0x7d),
|
||||
RGB(0x00,0x0f,0x8c),
|
||||
RGB(0x00,0x11,0x9d),
|
||||
RGB(0x00,0x13,0xae),
|
||||
RGB(0x00,0x15,0xbf),
|
||||
RGB(0x00,0x16,0xd0),
|
||||
RGB(0x00,0x18,0xe0),
|
||||
RGB(0x00,0x1a,0xf1),
|
||||
RGB(0x03,0x1c,0xfc),
|
||||
RGB(0x14,0x1a,0xec),
|
||||
RGB(0x24,0x18,0xdb),
|
||||
RGB(0x34,0x16,0xca),
|
||||
RGB(0x45,0x15,0xba),
|
||||
RGB(0x56,0x12,0xa9),
|
||||
RGB(0x66,0x11,0x99),
|
||||
RGB(0x77,0x0e,0x87),
|
||||
RGB(0x88,0x0d,0x77),
|
||||
RGB(0x98,0x0c,0x67),
|
||||
RGB(0xa8,0x0a,0x57),
|
||||
RGB(0xb9,0x08,0x47),
|
||||
RGB(0xc8,0x06,0x36),
|
||||
RGB(0xd9,0x04,0x26),
|
||||
RGB(0xe9,0x03,0x15),
|
||||
RGB(0xfa,0x01,0x06),
|
||||
RGB(0xff,0x06,0x00),
|
||||
RGB(0xff,0x16,0x00),
|
||||
RGB(0xff,0x26,0x00),
|
||||
RGB(0xff,0x35,0x00),
|
||||
RGB(0xff,0x45,0x00),
|
||||
RGB(0xff,0x53,0x00),
|
||||
RGB(0xff,0x63,0x00),
|
||||
RGB(0xff,0x72,0x00),
|
||||
RGB(0xff,0x81,0x00),
|
||||
RGB(0xff,0x90,0x00),
|
||||
RGB(0xff,0x9f,0x00),
|
||||
RGB(0xff,0xad,0x00),
|
||||
RGB(0xff,0xbc,0x00),
|
||||
RGB(0xff,0xca,0x00),
|
||||
RGB(0xff,0xd9,0x00),
|
||||
RGB(0xff,0xe7,0x00),
|
||||
RGB(0xff,0xf3,0x05),
|
||||
RGB(0xff,0xf3,0x14),
|
||||
RGB(0xff,0xf4,0x24),
|
||||
RGB(0xff,0xf5,0x34),
|
||||
RGB(0xff,0xf5,0x43),
|
||||
RGB(0xff,0xf6,0x53),
|
||||
RGB(0xff,0xf7,0x63),
|
||||
RGB(0xff,0xf7,0x73),
|
||||
RGB(0xff,0xf9,0x83),
|
||||
RGB(0xff,0xf9,0x95),
|
||||
RGB(0xff,0xfa,0xa6),
|
||||
RGB(0xff,0xfb,0xb8),
|
||||
RGB(0xff,0xfc,0xca),
|
||||
RGB(0xff,0xfd,0xdc),
|
||||
RGB(0xff,0xfe,0xed),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
//
|
||||
// Waterfall Matrix: black-green-white
|
||||
//
|
||||
const uint16_t waterfall_matrix[] =
|
||||
{
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x00,0x00,0x00),
|
||||
RGB(0x0f,0x66,0x01),
|
||||
RGB(0x0f,0x66,0x01),
|
||||
RGB(0x0f,0x66,0x01),
|
||||
RGB(0x0f,0x66,0x01),
|
||||
RGB(0x14,0x86,0x01),
|
||||
RGB(0x14,0x86,0x01),
|
||||
RGB(0x14,0x86,0x01),
|
||||
RGB(0x14,0x86,0x01),
|
||||
RGB(0x19,0xa7,0x01),
|
||||
RGB(0x19,0xa7,0x01),
|
||||
RGB(0x19,0xa7,0x01),
|
||||
RGB(0x19,0xa7,0x01),
|
||||
RGB(0x21,0xc3,0x07),
|
||||
RGB(0x21,0xc3,0x07),
|
||||
RGB(0x21,0xc3,0x07),
|
||||
RGB(0x21,0xc3,0x07),
|
||||
RGB(0x30,0xdd,0x13),
|
||||
RGB(0x30,0xdd,0x13),
|
||||
RGB(0x30,0xdd,0x13),
|
||||
RGB(0x30,0xdd,0x13),
|
||||
RGB(0x45,0xf0,0x29),
|
||||
RGB(0x45,0xf0,0x29),
|
||||
RGB(0x45,0xf0,0x29),
|
||||
RGB(0x45,0xf0,0x29),
|
||||
RGB(0xa0,0xfd,0x91),
|
||||
RGB(0xa0,0xfd,0x91),
|
||||
RGB(0xa0,0xfd,0x91),
|
||||
RGB(0xa0,0xfd,0x91),
|
||||
RGB(0xb3,0xfe,0xa6),
|
||||
RGB(0xb3,0xfe,0xa6),
|
||||
RGB(0xb3,0xfe,0xa6),
|
||||
RGB(0xb3,0xfe,0xa6),
|
||||
RGB(0xc3,0xfe,0xb9),
|
||||
RGB(0xc3,0xfe,0xb9),
|
||||
RGB(0xc3,0xfe,0xb9),
|
||||
RGB(0xc3,0xfe,0xb9),
|
||||
RGB(0xd3,0xfe,0xcc),
|
||||
RGB(0xd3,0xfe,0xcc),
|
||||
RGB(0xd3,0xfe,0xcc),
|
||||
RGB(0xd3,0xfe,0xcc),
|
||||
RGB(0xdf,0xfe,0xda),
|
||||
RGB(0xdf,0xfe,0xda),
|
||||
RGB(0xdf,0xfe,0xda),
|
||||
RGB(0xdf,0xfe,0xda),
|
||||
RGB(0xef,0xfd,0xec),
|
||||
RGB(0xef,0xfd,0xec),
|
||||
RGB(0xef,0xfd,0xec),
|
||||
RGB(0xef,0xfd,0xec),
|
||||
RGB(0xef,0xfd,0xec),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff),
|
||||
RGB(0xff,0xff,0xff)
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user