mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-05-01 07:41:26 +03:00
Slight menu style change
This commit is contained in:
parent
9131d75cb5
commit
a5ed0671c8
@ -25,7 +25,7 @@ To enable the custom option just uncomment the line by removing the starting '#'
|
||||
Battery voltage boot screen now includes the percentage (as well as voltage).
|
||||
|
||||
* "STEP" menu, added 1.25kHz option, removed 5kHz option
|
||||
* "ABR" menu, shows extended backlight times
|
||||
* "ABR" menu, renamed to "BAK-LT", shows extended backlight times
|
||||
* "MIC" menu, shows mic gain in dB's, now includes the max mic gain possible (+15.5dB)
|
||||
* "VOL" menu, renamed to "BATVOL", shows voltage and percentage
|
||||
* "AM" menu, renamed to "MODE", shows modulation mode
|
||||
|
@ -33,21 +33,25 @@ void ST7565_DrawLine(uint8_t Column, uint8_t Line, uint16_t Size, const uint8_t
|
||||
ST7565_SelectColumnAndLine(Column + 4U, Line);
|
||||
GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
|
||||
if (!bIsClearMode) {
|
||||
for (i = 0; i < Size; i++) {
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
if (!bIsClearMode)
|
||||
{
|
||||
for (i = 0; i < Size; i++)
|
||||
{
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = pBitmap[i];
|
||||
}
|
||||
} else {
|
||||
for (i = 0; i < Size; i++) {
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < Size; i++)
|
||||
{
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = 0;
|
||||
}
|
||||
}
|
||||
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
}
|
||||
|
||||
@ -57,52 +61,67 @@ void ST7565_BlitFullScreen(void)
|
||||
uint8_t Column;
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
|
||||
ST7565_WriteByte(0x40);
|
||||
|
||||
for (Line = 0; Line < 7; Line++) {
|
||||
ST7565_SelectColumnAndLine(4U, Line + 1U);
|
||||
for (Line = 0; Line < 7; Line++)
|
||||
{
|
||||
ST7565_SelectColumnAndLine(4, Line + 1);
|
||||
GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
for (Column = 0; Column < 128; Column++) {
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
for (Column = 0; Column < 128; Column++)
|
||||
{
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = gFrameBuffer[Line][Column];
|
||||
}
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
}
|
||||
|
||||
SYSTEM_DelayMs(20);
|
||||
#if 0
|
||||
// whats the delay for I wonder ? .. it slows down scanning :(
|
||||
SYSTEM_DelayMs(20);
|
||||
#else
|
||||
SYSTEM_DelayMs(1);
|
||||
#endif
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
}
|
||||
|
||||
void ST7565_BlitStatusLine(void)
|
||||
{
|
||||
uint8_t i;
|
||||
unsigned int i;
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
|
||||
ST7565_WriteByte(0x40);
|
||||
|
||||
ST7565_SelectColumnAndLine(4, 0);
|
||||
|
||||
GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
|
||||
for (i = 0; i < 0x80; i++) {
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
for (i = 0; i < sizeof(gStatusLine); i++)
|
||||
{
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = gStatusLine[i];
|
||||
}
|
||||
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
}
|
||||
|
||||
void ST7565_FillScreen(uint8_t Value)
|
||||
{
|
||||
uint8_t i, j;
|
||||
unsigned int i;
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
unsigned int j;
|
||||
ST7565_SelectColumnAndLine(0, i);
|
||||
GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
for (j = 0; j < 132; j++) {
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
for (j = 0; j < 132; j++)
|
||||
{
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = Value;
|
||||
}
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
@ -113,10 +132,16 @@ void ST7565_FillScreen(uint8_t Value)
|
||||
void ST7565_Init(void)
|
||||
{
|
||||
SPI0_Init();
|
||||
|
||||
ST7565_Configure_GPIO_B11();
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, false);
|
||||
|
||||
// RESET command
|
||||
ST7565_WriteByte(0xE2);
|
||||
SYSTEM_DelayMs(0x78);
|
||||
|
||||
SYSTEM_DelayMs(120);
|
||||
|
||||
ST7565_WriteByte(0xA2);
|
||||
ST7565_WriteByte(0xC0);
|
||||
ST7565_WriteByte(0xA1);
|
||||
@ -126,18 +151,27 @@ void ST7565_Init(void)
|
||||
ST7565_WriteByte(0x81);
|
||||
ST7565_WriteByte(0x1F);
|
||||
ST7565_WriteByte(0x2B);
|
||||
|
||||
SYSTEM_DelayMs(1);
|
||||
|
||||
ST7565_WriteByte(0x2E);
|
||||
|
||||
SYSTEM_DelayMs(1);
|
||||
|
||||
ST7565_WriteByte(0x2F);
|
||||
ST7565_WriteByte(0x2F);
|
||||
ST7565_WriteByte(0x2F);
|
||||
ST7565_WriteByte(0x2F);
|
||||
SYSTEM_DelayMs(0x28);
|
||||
|
||||
SYSTEM_DelayMs(40);
|
||||
|
||||
ST7565_WriteByte(0x40);
|
||||
ST7565_WriteByte(0xAF);
|
||||
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
|
||||
SPI_ToggleMasterMode(&SPI0->CR, true);
|
||||
|
||||
ST7565_FillScreen(0x00);
|
||||
}
|
||||
|
||||
@ -154,14 +188,11 @@ void ST7565_Configure_GPIO_B11(void)
|
||||
void ST7565_SelectColumnAndLine(uint8_t Column, uint8_t Line)
|
||||
{
|
||||
GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
SPI0->WDR = Line + 0xB0;
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = Line + 176;
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = ((Column >> 4) & 0x0F) | 0x10;
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = ((Column >> 0) & 0x0F);
|
||||
SPI_WaitForUndocumentedTxFifoStatusBit();
|
||||
}
|
||||
@ -169,8 +200,6 @@ void ST7565_SelectColumnAndLine(uint8_t Column, uint8_t Line)
|
||||
void ST7565_WriteByte(uint8_t Value)
|
||||
{
|
||||
GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_ST7565_A0);
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {
|
||||
}
|
||||
while ((SPI0->FIFOST & SPI_FIFOST_TFF_MASK) != SPI_FIFOST_TFF_BITS_NOT_FULL) {}
|
||||
SPI0->WDR = Value;
|
||||
}
|
||||
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -28,8 +28,8 @@
|
||||
|
||||
static void Render(void)
|
||||
{
|
||||
char String[7];
|
||||
unsigned int i;
|
||||
char String[7];
|
||||
|
||||
memset(gStatusLine, 0, sizeof(gStatusLine));
|
||||
memset(gFrameBuffer, 0, sizeof(gFrameBuffer));
|
||||
@ -39,7 +39,6 @@ static void Render(void)
|
||||
for (i = 0; i < 6; i++)
|
||||
String[i] = (gInputBox[i] == 10) ? '-' : '*';
|
||||
String[6] = 0;
|
||||
|
||||
UI_PrintString(String, 0, 127, 3, 12, true);
|
||||
|
||||
ST7565_BlitStatusLine();
|
||||
|
26
ui/menu.c
26
ui/menu.c
@ -49,7 +49,7 @@ static const char MenuList[][7] =
|
||||
"MEM-CH",
|
||||
"SAVE",
|
||||
"VOX",
|
||||
"ABR",
|
||||
"BAK-LT",
|
||||
// 16
|
||||
"TDR",
|
||||
"WX",
|
||||
@ -275,14 +275,21 @@ void UI_DisplayMenu(void)
|
||||
gFrameBuffer[3][i] ^= 0xFF;
|
||||
}
|
||||
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
gFrameBuffer[i][48] = 0xFF;
|
||||
gFrameBuffer[i][49] = 0xFF;
|
||||
}
|
||||
|
||||
// draw vertical separating line
|
||||
#if 0
|
||||
// original thick line
|
||||
for (i = 0; i < 7; i++)
|
||||
{
|
||||
gFrameBuffer[i][48] = 0xFF;
|
||||
gFrameBuffer[i][49] = 0xFF;
|
||||
}
|
||||
#else
|
||||
// a nicer less intense thinner dotted line
|
||||
for (i = 0; i < 6; i++)
|
||||
gFrameBuffer[i][49] = 0xAA;
|
||||
#endif
|
||||
|
||||
NUMBER_ToDigits(gMenuCursor + 1, String);
|
||||
|
||||
UI_DisplaySmallDigits(2, String + 6, 33, 6);
|
||||
|
||||
if (gIsInSubMenu)
|
||||
@ -515,7 +522,7 @@ void UI_DisplayMenu(void)
|
||||
UI_PrintString(String, 50, 127, 2, 8, true);
|
||||
|
||||
if (gMenuCursor == MENU_VOL)
|
||||
{ // 2nd text line
|
||||
{ // 2nd text line .. percentage
|
||||
const uint16_t volts = (gBatteryVoltageAverage < gMin_bat_v) ? gMin_bat_v :
|
||||
(gBatteryVoltageAverage > gMax_bat_v) ? gMax_bat_v :
|
||||
gBatteryVoltageAverage;
|
||||
@ -596,4 +603,3 @@ void UI_DisplayMenu(void)
|
||||
|
||||
ST7565_BlitFullScreen();
|
||||
}
|
||||
|
||||
|
66
ui/rssi.c
66
ui/rssi.c
@ -26,43 +26,45 @@
|
||||
static void Render(uint8_t RssiLevel, uint8_t VFO)
|
||||
{
|
||||
uint8_t *pLine;
|
||||
uint8_t Line;
|
||||
bool bIsClearMode;
|
||||
uint8_t Line;
|
||||
bool bIsClearMode;
|
||||
|
||||
if (gCurrentFunction == FUNCTION_TRANSMIT || gScreenToDisplay != DISPLAY_MAIN) {
|
||||
if (gCurrentFunction == FUNCTION_TRANSMIT || gScreenToDisplay != DISPLAY_MAIN)
|
||||
return;
|
||||
}
|
||||
|
||||
if (VFO == 0) {
|
||||
if (VFO == 0)
|
||||
{
|
||||
pLine = gFrameBuffer[2];
|
||||
Line = 3;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
pLine = gFrameBuffer[6];
|
||||
Line = 7;
|
||||
}
|
||||
|
||||
memset(pLine, 0, 23);
|
||||
if (RssiLevel == 0) {
|
||||
pLine = NULL;
|
||||
|
||||
if (RssiLevel == 0)
|
||||
{
|
||||
pLine = NULL;
|
||||
bIsClearMode = true;
|
||||
} else {
|
||||
memcpy(pLine, BITMAP_Antenna, 5);
|
||||
memcpy(pLine + 5, BITMAP_AntennaLevel1, sizeof(BITMAP_AntennaLevel1));
|
||||
if (RssiLevel >= 2) {
|
||||
memcpy(pLine + 8, BITMAP_AntennaLevel2, sizeof(BITMAP_AntennaLevel2));
|
||||
}
|
||||
if (RssiLevel >= 3) {
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(pLine, BITMAP_Antenna, 5);
|
||||
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) {
|
||||
if (RssiLevel >= 4)
|
||||
memcpy(pLine + 14, BITMAP_AntennaLevel4, sizeof(BITMAP_AntennaLevel4));
|
||||
}
|
||||
if (RssiLevel >= 5) {
|
||||
if (RssiLevel >= 5)
|
||||
memcpy(pLine + 17, BITMAP_AntennaLevel5, sizeof(BITMAP_AntennaLevel5));
|
||||
}
|
||||
if (RssiLevel >= 6) {
|
||||
if (RssiLevel >= 6)
|
||||
memcpy(pLine + 20, BITMAP_AntennaLevel6, sizeof(BITMAP_AntennaLevel6));
|
||||
}
|
||||
|
||||
bIsClearMode = false;
|
||||
}
|
||||
|
||||
@ -71,23 +73,23 @@ static void Render(uint8_t RssiLevel, uint8_t VFO)
|
||||
|
||||
void UI_UpdateRSSI(uint16_t RSSI)
|
||||
{
|
||||
uint8_t Level;
|
||||
uint8_t Level = 0;
|
||||
|
||||
if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][3]) {
|
||||
if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][3])
|
||||
Level = 6;
|
||||
} else if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][2]) {
|
||||
else
|
||||
if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][2])
|
||||
Level = 4;
|
||||
} else if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][1]) {
|
||||
else
|
||||
if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][1])
|
||||
Level = 2;
|
||||
} else if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][0]) {
|
||||
else
|
||||
if (RSSI >= gEEPROM_RSSI_CALIB[gRxVfo->Band][0])
|
||||
Level = 1;
|
||||
} else {
|
||||
Level = 0;
|
||||
}
|
||||
|
||||
if (gVFO_RSSI_Level[gEeprom.RX_CHANNEL] != Level) {
|
||||
if (gVFO_RSSI_Level[gEeprom.RX_CHANNEL] != Level)
|
||||
{
|
||||
gVFO_RSSI_Level[gEeprom.RX_CHANNEL] = Level;
|
||||
Render(Level, gEeprom.RX_CHANNEL);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user