Modified displaying of little sbar

This commit is contained in:
Krzysiek Egzmont
2023-10-27 18:35:45 +02:00
parent 8739996668
commit f6791395cc
3 changed files with 89 additions and 237 deletions

View File

@@ -270,48 +270,6 @@ const uint8_t BITMAP_Antenna[5] =
0b00000011 0b00000011
}; };
const uint8_t BITMAP_AntennaLevel1[3] =
{
0b01100000,
0b01100000,
0b00000000
};
const uint8_t BITMAP_AntennaLevel2[3] =
{
0b01110000,
0b01110000,
0b00000000
};
const uint8_t BITMAP_AntennaLevel3[3] =
{
0b01111000,
0b01111000,
0b00000000
};
const uint8_t BITMAP_AntennaLevel4[3] =
{
0b01111100,
0b01111100,
0b00000000
};
const uint8_t BITMAP_AntennaLevel5[3] =
{
0b01111110,
0b01111110,
0b00000000
};
const uint8_t BITMAP_AntennaLevel6[3] =
{
0b01111111,
0b01111111,
0b00000000
};
const uint8_t BITMAP_MARKER[8] = const uint8_t BITMAP_MARKER[8] =
{ {
0b11111111, 0b11111111,

View File

@@ -39,12 +39,6 @@ extern const uint8_t BITMAP_TDR2[9];
#endif #endif
extern const uint8_t BITMAP_Antenna[5]; extern const uint8_t BITMAP_Antenna[5];
extern const uint8_t BITMAP_AntennaLevel1[3];
extern const uint8_t BITMAP_AntennaLevel2[3];
extern const uint8_t BITMAP_AntennaLevel3[3];
extern const uint8_t BITMAP_AntennaLevel4[3];
extern const uint8_t BITMAP_AntennaLevel5[3];
extern const uint8_t BITMAP_AntennaLevel6[3];
extern const uint8_t BITMAP_MARKER[8]; extern const uint8_t BITMAP_MARKER[8];

182
ui/main.c
View File

@@ -40,19 +40,16 @@ center_line_t center_line = CENTER_LINE_NONE;
// *************************************************************************** // ***************************************************************************
void UI_drawBars(uint8_t *p, const unsigned int level) static void DrawBars(uint8_t *p, unsigned int level)
{ {
switch (level) if(level>6)
{ level = 6;
default:
case 7: memmove(p + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6)); [[fallthrough]]; memcpy(p, BITMAP_Antenna, ARRAY_SIZE(BITMAP_Antenna));
case 6: memmove(p + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5)); [[fallthrough]];
case 5: memmove(p + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4)); [[fallthrough]]; for(uint8_t i = 1; i <= level; i++) {
case 4: memmove(p + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3)); [[fallthrough]]; char bar = (0xff << (6-i)) & 0x7F;
case 3: memmove(p + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2)); [[fallthrough]]; memset(p + 2 + i*3, bar, 2);
case 2: memmove(p + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1)); [[fallthrough]];
case 1: memmove(p + 0, BITMAP_Antenna, sizeof(BITMAP_Antenna)); break;
case 0: memset( p + 0, 0, sizeof(BITMAP_Antenna)); break;
} }
} }
@@ -115,13 +112,13 @@ void UI_DisplayAudioBar(void)
} }
#endif #endif
#if defined(ENABLE_RSSI_BAR)
static void DisplayRSSIBar(const int16_t rssi, const bool now) static void DisplayRSSIBar(const int16_t rssi, const bool now)
{ {
const int16_t s0_dBm = -147; // S0 .. base level #if defined(ENABLE_RSSI_BAR)
if (center_line == CENTER_LINE_RSSI) {
const unsigned int txt_width = 7 * 8; // 8 text chars const unsigned int txt_width = 7 * 8; // 8 text chars
const unsigned int bar_x = 2 + txt_width + 4; // X coord of bar graph const unsigned int bar_x = 2 + txt_width + 4; // X coord of bar graph
const int16_t rssi_dBm = (rssi / 2) - 160;
const unsigned int line = 3; const unsigned int line = 3;
uint8_t *p_line = gFrameBuffer[line]; uint8_t *p_line = gFrameBuffer[line];
@@ -155,6 +152,9 @@ static void DisplayRSSIBar(const int16_t rssi, const bool now)
if (now) if (now)
memset(p_line, 0, LCD_WIDTH); memset(p_line, 0, LCD_WIDTH);
const int16_t s0_dBm = -147; // S0 .. base level
const int16_t rssi_dBm = (rssi / 2) - 160;
const uint8_t s_level = MIN(MAX((rssi_dBm - s0_dBm) / 6, 0), 9); const uint8_t s_level = MIN(MAX((rssi_dBm - s0_dBm) / 6, 0), 9);
uint8_t overS9Bars = MAX(0, 73 + rssi_dBm)/10; uint8_t overS9Bars = MAX(0, 73 + rssi_dBm)/10;
@@ -176,66 +176,8 @@ static void DisplayRSSIBar(const int16_t rssi, const bool now)
for(uint8_t i = 0; i < overS9Bars; i++) { // +10 hollow bars for(uint8_t i = 0; i < overS9Bars; i++) { // +10 hollow bars
memcpy(p_line + (bar_x + (i + 9) * 5), &hollowBar, ARRAY_SIZE(hollowBar)); memcpy(p_line + (bar_x + (i + 9) * 5), &hollowBar, ARRAY_SIZE(hollowBar));
} }
if (now)
ST7565_BlitFullScreen();
}
#endif
static void RenderSmallSbar(uint8_t RssiLevel, uint8_t VFO)
{
uint8_t *pLine;
uint8_t Line;
if (VFO == 0) {
pLine = gFrameBuffer[2];
Line = 3;
} else {
pLine = gFrameBuffer[6];
Line = 7;
} }
#else
memset(pLine, 0, 23);
memcpy(pLine, BITMAP_Antenna, 5);
if (RssiLevel >= 1) {
memcpy(pLine + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1));
}
if (RssiLevel >= 2) {
memcpy(pLine + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2));
}
if (RssiLevel >= 3) {
memcpy(pLine + 11, BITMAP_AntennaLevel3, sizeof(BITMAP_AntennaLevel3));
}
if (RssiLevel >= 4) {
memcpy(pLine + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4));
}
if (RssiLevel >= 5) {
memcpy(pLine + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5));
}
if (RssiLevel >= 6) {
memcpy(pLine + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6));
}
ST7565_DrawLine(0, Line, 23 , pLine);
}
void UI_UpdateRSSI(const int16_t rssi, const int vfo)
{
#ifdef ENABLE_RSSI_BAR
(void)vfo; // unused
// optional larger RSSI dBm, S-point and bar level
if (gCurrentFunction == FUNCTION_RECEIVE ||
gCurrentFunction == FUNCTION_MONITOR ||
gCurrentFunction == FUNCTION_INCOMING)
{
if (center_line == CENTER_LINE_RSSI)
DisplayRSSIBar(rssi, true);
uint8_t Level; uint8_t Level;
@@ -251,73 +193,31 @@ void UI_UpdateRSSI(const int16_t rssi, const int vfo)
Level = 0; Level = 0;
} }
RenderSmallSbar(Level, vfo); uint8_t *pLine = (gEeprom.RX_VFO == 0)? gFrameBuffer[2] : gFrameBuffer[6];
if (now)
memset(pLine, 0, 23);
DrawBars(pLine, Level);
#endif
if (now)
ST7565_BlitFullScreen();
}
void UI_UpdateRSSI(const int16_t rssi, const int vfo)
{
(void)vfo; // unused
// optional larger RSSI dBm, S-point and bar level
if (gCurrentFunction == FUNCTION_RECEIVE ||
gCurrentFunction == FUNCTION_MONITOR ||
gCurrentFunction == FUNCTION_INCOMING)
{
DisplayRSSIBar(rssi, true);
} }
#else
// original little RS bars
// const int16_t dBm = (rssi / 2) - 160;
const uint8_t Line = (vfo == 0) ? 3 : 7;
uint8_t *p_line = gFrameBuffer[Line - 1];
const unsigned int band = gRxVfo->Band;
const int16_t level0 = gEEPROM_RSSI_CALIB[band][0];
const int16_t level1 = gEEPROM_RSSI_CALIB[band][1];
const int16_t level2 = gEEPROM_RSSI_CALIB[band][2];
const int16_t level3 = gEEPROM_RSSI_CALIB[band][3];
const int16_t level01 = (level0 + level1) / 2;
const int16_t level12 = (level1 + level2) / 2;
const int16_t level23 = (level2 + level3) / 2;
gVFO_RSSI[vfo] = rssi;
uint8_t rssi_level = 0;
if (rssi >= level3) rssi_level = 7;
else
if (rssi >= level23) rssi_level = 6;
else
if (rssi >= level2) rssi_level = 5;
else
if (rssi >= level12) rssi_level = 4;
else
if (rssi >= level1) rssi_level = 3;
else
if (rssi >= level01) rssi_level = 2;
else
if (rssi >= level0) rssi_level = 1;
if (gVFO_RSSI_bar_level[vfo] == rssi_level)
return;
gVFO_RSSI_bar_level[vfo] = rssi_level;
// **********************************************************
if (gEeprom.KEY_LOCK && gKeypadLocked > 0)
return; // display is in use
if (gCurrentFunction == FUNCTION_TRANSMIT || gScreenToDisplay != DISPLAY_MAIN)
return; // display is in use
p_line = gFrameBuffer[Line - 1];
memset(p_line, 0, 23);
// untested !!!
if (rssi_level == 0)
p_line = NULL;
else
UI_drawBars(p_line, rssi_level);
ST7565_DrawLine(0, Line, 23, p_line);
#endif
} }
// *************************************************************************** // ***************************************************************************
@@ -649,8 +549,8 @@ void UI_DisplayMain(void)
Level = gVFO_RSSI_bar_level[vfo_num]; Level = gVFO_RSSI_bar_level[vfo_num];
#endif #endif
} }
if(Level)
UI_drawBars(p_line1 + LCD_WIDTH, Level); DrawBars(p_line1 + LCD_WIDTH, Level);
} }
// ************ // ************