mirror of
https://github.com/kamilsss655/uv-k5-firmware-custom
synced 2024-11-21 17:57:59 +00:00
Added menu battery calibration from egzumer (hidden menu option)
This commit is contained in:
parent
a9aa37e043
commit
4333fdeb3a
3
Makefile
3
Makefile
@ -163,7 +163,8 @@ CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delet
|
||||
#CFLAGS = -Os -Wall -Werror -mcpu=cortex-m0 -fno-builtin -fshort-enums -fno-delete-null-pointer-checks -std=gnu11 -MMD
|
||||
|
||||
ifeq ($(ENABLE_LTO),1)
|
||||
CFLAGS += -flto
|
||||
# CFLAGS += -flto
|
||||
CFLAGS += -flto=2
|
||||
endif
|
||||
|
||||
CFLAGS += -DPRINTF_INCLUDE_CONFIG_H
|
||||
|
@ -2434,8 +2434,8 @@ Skip:
|
||||
|
||||
if (gFlagRefreshSetting)
|
||||
{
|
||||
MENU_ShowCurrentSetting();
|
||||
gFlagRefreshSetting = false;
|
||||
MENU_ShowCurrentSetting();
|
||||
}
|
||||
|
||||
if (gFlagStartScan)
|
||||
|
@ -596,8 +596,11 @@ static void MAIN_Key_MENU(const bool bKeyPressed, const bool bKeyHeld)
|
||||
|
||||
if (bFlag)
|
||||
{
|
||||
gFlagRefreshSetting = true;
|
||||
gFlagRefreshSetting = true;
|
||||
gFlagBackupSetting = true;
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_MENU;
|
||||
|
||||
#ifdef ENABLE_VOICE
|
||||
gAnotherVoiceID = VOICE_ID_MENU;
|
||||
#endif
|
||||
|
116
app/menu.c
116
app/menu.c
@ -32,6 +32,7 @@
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/keyboard.h"
|
||||
#include "frequencies.h"
|
||||
#include "helper/battery.h"
|
||||
#include "misc.h"
|
||||
#include "settings.h"
|
||||
#if defined(ENABLE_OVERLAY)
|
||||
@ -46,6 +47,27 @@
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
|
||||
#endif
|
||||
|
||||
void writeXtalFreqCal(const int32_t value)
|
||||
{
|
||||
struct
|
||||
{
|
||||
int16_t BK4819_XtalFreqLow;
|
||||
uint16_t EEPROM_1F8A;
|
||||
uint16_t EEPROM_1F8C;
|
||||
uint8_t VOLUME_GAIN;
|
||||
uint8_t DAC_GAIN;
|
||||
} __attribute__((packed)) Misc;
|
||||
|
||||
gEeprom.BK4819_XTAL_FREQ_LOW = value;
|
||||
BK4819_WriteRegister(BK4819_REG_3B, 22656 + gEeprom.BK4819_XTAL_FREQ_LOW);
|
||||
|
||||
// radio 1 .. 04 00 46 00 50 00 2C 0E
|
||||
// radio 2 .. 05 00 46 00 50 00 2C 0E
|
||||
EEPROM_ReadBuffer(0x1F88, &Misc, 8);
|
||||
Misc.BK4819_XtalFreqLow = gEeprom.BK4819_XTAL_FREQ_LOW;
|
||||
EEPROM_WriteBuffer(0x1F88, &Misc);
|
||||
}
|
||||
|
||||
void MENU_StartCssScan(int8_t Direction)
|
||||
{
|
||||
gCssScanMode = CSS_SCAN_MODE_SCANNING;
|
||||
@ -268,6 +290,11 @@ int MENU_GetLimits(uint8_t Cursor, int32_t *pMin, int32_t *pMax)
|
||||
*pMax = ARRAY_SIZE(gSubMenu_PTT_ID) - 1;
|
||||
break;
|
||||
|
||||
case MENU_VOL:
|
||||
*pMin = 1760; // 0
|
||||
*pMax = 2000; // 2300
|
||||
break;
|
||||
|
||||
case MENU_BAT_TXT:
|
||||
*pMin = 0;
|
||||
*pMax = ARRAY_SIZE(gSubMenu_BAT_TXT) - 1;
|
||||
@ -546,7 +573,7 @@ void MENU_AcceptSetting(void)
|
||||
gSetting_mic_bar = gSubMenuSelection;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ENABLE_COMPANDER
|
||||
case MENU_COMPAND:
|
||||
gTxVfo->Compander = gSubMenuSelection;
|
||||
@ -589,6 +616,11 @@ void MENU_AcceptSetting(void)
|
||||
gRequestSaveChannel = 1;
|
||||
return;
|
||||
|
||||
case MENU_VOL:
|
||||
if (gF_LOCK)
|
||||
EEPROM_WriteBuffer(0x1F40, gBatteryCalibration);
|
||||
break;
|
||||
|
||||
case MENU_BAT_TXT:
|
||||
gSetting_battery_text = gSubMenuSelection;
|
||||
break;
|
||||
@ -699,24 +731,8 @@ void MENU_AcceptSetting(void)
|
||||
break;
|
||||
|
||||
case MENU_F_CALI:
|
||||
gEeprom.BK4819_XTAL_FREQ_LOW = gSubMenuSelection;
|
||||
BK4819_WriteRegister(BK4819_REG_3B, 22656 + gEeprom.BK4819_XTAL_FREQ_LOW);
|
||||
{
|
||||
struct
|
||||
{
|
||||
int16_t BK4819_XtalFreqLow;
|
||||
uint16_t EEPROM_1F8A;
|
||||
uint16_t EEPROM_1F8C;
|
||||
uint8_t VOLUME_GAIN;
|
||||
uint8_t DAC_GAIN;
|
||||
} __attribute__((packed)) Misc;
|
||||
|
||||
// radio 1 .. 04 00 46 00 50 00 2C 0E
|
||||
// radio 2 .. 05 00 46 00 50 00 2C 0E
|
||||
EEPROM_ReadBuffer(0x1F88, &Misc, 8);
|
||||
Misc.BK4819_XtalFreqLow = gEeprom.BK4819_XTAL_FREQ_LOW;
|
||||
EEPROM_WriteBuffer(0x1F88, &Misc);
|
||||
}
|
||||
if (gF_LOCK)
|
||||
writeXtalFreqCal(gSubMenuSelection);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -944,7 +960,7 @@ void MENU_ShowCurrentSetting(void)
|
||||
gSubMenuSelection = gSetting_mic_bar;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ENABLE_COMPANDER
|
||||
case MENU_COMPAND:
|
||||
gSubMenuSelection = gTxVfo->Compander;
|
||||
@ -993,6 +1009,10 @@ void MENU_ShowCurrentSetting(void)
|
||||
gSubMenuSelection = gTxVfo->DTMF_PTT_ID_TX_MODE;
|
||||
break;
|
||||
|
||||
case MENU_VOL:
|
||||
gSubMenuSelection = gBatteryCalibration[3];
|
||||
return;
|
||||
|
||||
case MENU_BAT_TXT:
|
||||
gSubMenuSelection = gSetting_battery_text;
|
||||
return;
|
||||
@ -1026,7 +1046,7 @@ void MENU_ShowCurrentSetting(void)
|
||||
gSubMenuSelection = gSetting_AM_fix;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef ENABLE_AM_FIX_TEST1
|
||||
case MENU_AM_FIX_TEST1:
|
||||
gSubMenuSelection = gSetting_AM_fix_test1;
|
||||
@ -1079,6 +1099,12 @@ void MENU_ShowCurrentSetting(void)
|
||||
gSubMenuSelection = gEeprom.BK4819_XTAL_FREQ_LOW;
|
||||
break;
|
||||
}
|
||||
|
||||
// if (gFlagBackupSetting)
|
||||
{ // save a copy incase the user wants to back out
|
||||
// gFlagBackupSetting = false;
|
||||
gSubMenuSelection_original = gSubMenuSelection;
|
||||
}
|
||||
}
|
||||
|
||||
static void MENU_Key_0_to_9(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
@ -1127,11 +1153,12 @@ static void MENU_Key_0_to_9(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
gInputBoxIndex = 0;
|
||||
|
||||
Value = (gInputBox[0] * 10) + gInputBox[1];
|
||||
|
||||
|
||||
if (Value > 0 && Value <= gMenuListCount)
|
||||
{
|
||||
gMenuCursor = Value - 1;
|
||||
gFlagRefreshSetting = true;
|
||||
gFlagBackupSetting = true;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1140,13 +1167,14 @@ static void MENU_Key_0_to_9(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld)
|
||||
|
||||
gInputBox[0] = gInputBox[1];
|
||||
gInputBoxIndex = 1;
|
||||
|
||||
|
||||
case 1:
|
||||
Value = gInputBox[0];
|
||||
if (Value > 0 && Value <= gMenuListCount)
|
||||
{
|
||||
gMenuCursor = Value - 1;
|
||||
gFlagRefreshSetting = true;
|
||||
gFlagBackupSetting = true;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
@ -1255,6 +1283,29 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
{
|
||||
if (gIsInSubMenu)
|
||||
{
|
||||
// ***********************
|
||||
// restore original value
|
||||
|
||||
if (gMenuCursor == MENU_VOL)
|
||||
{
|
||||
if (gF_LOCK)
|
||||
{
|
||||
EEPROM_ReadBuffer(0x1F40, gBatteryCalibration, 8);
|
||||
|
||||
// gBatteryCalibration[3] = gSubMenuSelection_original;
|
||||
|
||||
BATTERY_GetReadings(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
if (gMenuCursor == MENU_F_CALI)
|
||||
{
|
||||
// if (gF_LOCK)
|
||||
// writeXtalFreqCal(gSubMenuSelection_original);
|
||||
}
|
||||
|
||||
// ***********************
|
||||
|
||||
if (gInputBoxIndex == 0 || gMenuCursor != MENU_OFFSET)
|
||||
{
|
||||
gAskForConfirmation = 0;
|
||||
@ -1269,6 +1320,8 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
else
|
||||
gInputBox[--gInputBoxIndex] = 10;
|
||||
|
||||
// ***********************
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_MENU;
|
||||
return;
|
||||
}
|
||||
@ -1278,7 +1331,7 @@ static void MENU_Key_EXIT(bool bKeyPressed, bool bKeyHeld)
|
||||
#endif
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_MAIN;
|
||||
|
||||
|
||||
if (gEeprom.BACKLIGHT == 0)
|
||||
{
|
||||
gBacklightCountdown = 0;
|
||||
@ -1322,13 +1375,13 @@ static void MENU_Key_MENU(const bool bKeyPressed, const bool bKeyHeld)
|
||||
|
||||
gAskForConfirmation = 0;
|
||||
gIsInSubMenu = true;
|
||||
|
||||
|
||||
// if (gMenuCursor != MENU_D_LIST)
|
||||
{
|
||||
gInputBoxIndex = 0;
|
||||
edit_index = -1;
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1554,8 +1607,11 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
||||
|
||||
if (!gIsInSubMenu)
|
||||
{
|
||||
gMenuCursor = NUMBER_AddWithWraparound(gMenuCursor, -Direction, 0, gMenuListCount - 1);
|
||||
gFlagRefreshSetting = true;
|
||||
gMenuCursor = NUMBER_AddWithWraparound(gMenuCursor, -Direction, 0, gMenuListCount - 1);
|
||||
|
||||
gFlagRefreshSetting = true;
|
||||
gFlagBackupSetting = true;
|
||||
|
||||
gRequestDisplayScreen = DISPLAY_MENU;
|
||||
|
||||
if (gMenuCursor != MENU_ABR && gEeprom.BACKLIGHT == 0)
|
||||
@ -1563,7 +1619,7 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
||||
gBacklightCountdown = 0;
|
||||
GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BACKLIGHT); // turn the backlight OFF
|
||||
}
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1599,7 +1655,7 @@ static void MENU_Key_UP_DOWN(bool bKeyPressed, bool bKeyHeld, int8_t Direction)
|
||||
bCheckScanList = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
MENU_ClampSelection(Direction);
|
||||
gRequestDisplayScreen = DISPLAY_MENU;
|
||||
return;
|
||||
|
BIN
firmware.bin
BIN
firmware.bin
Binary file not shown.
Binary file not shown.
@ -40,9 +40,7 @@ BOOT_Mode_t BOOT_GetMode(void)
|
||||
{
|
||||
if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT))
|
||||
return BOOT_MODE_NORMAL; // PTT not pressed
|
||||
|
||||
Keys[i] = KEYBOARD_Poll();
|
||||
|
||||
SYSTEM_DelayMs(20);
|
||||
}
|
||||
|
||||
|
33
main.c
33
main.c
@ -103,25 +103,21 @@ void Main(void)
|
||||
#endif
|
||||
|
||||
BootMode = BOOT_GetMode();
|
||||
if (BootMode == BOOT_MODE_F_LOCK)
|
||||
{ // enable all the menu items
|
||||
gMenuListCount = 0;
|
||||
while (MenuList[gMenuListCount].name[0] != '\0')
|
||||
gMenuListCount++;
|
||||
|
||||
gSubMenuSelection = gSetting_350TX;
|
||||
gMenuCursor = MENU_350TX;
|
||||
}
|
||||
else
|
||||
{ // hide the hidden menu items
|
||||
gMenuListCount = 0;
|
||||
while (MenuList[gMenuListCount].name[0] != '\0')
|
||||
gMenuListCount++;
|
||||
gMenuListCount -= 8; // disable the last 'n' items
|
||||
}
|
||||
// count the number of menu items
|
||||
gMenuListCount = 0;
|
||||
while (MenuList[gMenuListCount].name[0] != '\0')
|
||||
gMenuListCount++;
|
||||
|
||||
// wait for user to release all keys/butts before moving on
|
||||
if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || KEYBOARD_Poll() != KEY_INVALID)
|
||||
if (BootMode == BOOT_MODE_F_LOCK)
|
||||
gF_LOCK = true; // flag to say use the hidden menu items
|
||||
else
|
||||
gMenuListCount -= 8; // hide the last few menu items
|
||||
|
||||
// wait for user to release all butts before moving on
|
||||
if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) ||
|
||||
KEYBOARD_Poll() != KEY_INVALID ||
|
||||
BootMode != BOOT_MODE_NORMAL)
|
||||
{ // keys are pressed
|
||||
UI_DisplayReleaseKeys();
|
||||
BACKLIGHT_TurnOn();
|
||||
@ -131,6 +127,9 @@ void Main(void)
|
||||
i = (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && KEYBOARD_Poll() == KEY_INVALID) ? i + 1 : 0;
|
||||
SYSTEM_DelayMs(10);
|
||||
}
|
||||
gKeyReading0 = KEY_INVALID;
|
||||
gKeyReading1 = KEY_INVALID;
|
||||
gDebounceCounter = 0;
|
||||
}
|
||||
|
||||
if (!gChargingWithTypeC && !gBatteryDisplayLevel)
|
||||
|
5
misc.c
5
misc.c
@ -166,8 +166,11 @@ bool gRequestSaveSettings;
|
||||
bool gRequestSaveFM;
|
||||
#endif
|
||||
bool gFlagPrepareTX;
|
||||
|
||||
bool gFlagAcceptSetting;
|
||||
bool gFlagRefreshSetting;
|
||||
bool gFlagBackupSetting;
|
||||
|
||||
bool gFlagSaveVfo;
|
||||
bool gFlagSaveSettings;
|
||||
bool gFlagSaveChannel;
|
||||
@ -217,6 +220,8 @@ uint8_t gNeverUsed;
|
||||
|
||||
bool gUpdateDisplay;
|
||||
|
||||
bool gF_LOCK = false;
|
||||
|
||||
uint8_t gShowChPrefix;
|
||||
|
||||
volatile bool gNextTimeslice;
|
||||
|
8
misc.h
8
misc.h
@ -230,8 +230,11 @@ extern bool gRequestSaveSettings;
|
||||
#endif
|
||||
extern uint8_t gKeypadLocked;
|
||||
extern bool gFlagPrepareTX;
|
||||
extern bool gFlagAcceptSetting;
|
||||
extern bool gFlagRefreshSetting;
|
||||
|
||||
extern bool gFlagAcceptSetting; // accept menu setting
|
||||
extern bool gFlagRefreshSetting; // refresh menu display
|
||||
extern bool gFlagBackupSetting; // save a copy of the current menu setting
|
||||
|
||||
extern bool gFlagSaveVfo;
|
||||
extern bool gFlagSaveSettings;
|
||||
extern bool gFlagSaveChannel;
|
||||
@ -277,6 +280,7 @@ extern uint8_t gNeverUsed;
|
||||
#endif
|
||||
extern volatile bool gNextTimeslice;
|
||||
extern bool gUpdateDisplay;
|
||||
extern bool gF_LOCK;
|
||||
#ifdef ENABLE_FMRADIO
|
||||
extern uint8_t gFM_ChannelPosition;
|
||||
#endif
|
||||
|
59
ui/menu.c
59
ui/menu.c
@ -206,9 +206,12 @@ const char gSubMenu_XB[3][10] =
|
||||
|
||||
const char gSubMenu_SC_REV[3][13] =
|
||||
{
|
||||
"TIME\nOPER",
|
||||
"CARRIER\nOPER",
|
||||
"SEARCH\nOPER"
|
||||
// "TIME\nOPER",
|
||||
// "CARRIER\nOPER",
|
||||
// "SEARCH\nOPER"
|
||||
"TIME",
|
||||
"CARRIER",
|
||||
"SEARCH"
|
||||
};
|
||||
|
||||
const char gSubMenu_MDF[4][15] =
|
||||
@ -332,9 +335,10 @@ bool gIsInSubMenu;
|
||||
uint8_t gMenuCursor;
|
||||
int8_t gMenuScrollDirection;
|
||||
int32_t gSubMenuSelection;
|
||||
int32_t gSubMenuSelection_original = 0; // copy of the original value
|
||||
|
||||
// edit box
|
||||
char edit_original[17]; // a copy of the text before editing so that we can easily test for changes/difference
|
||||
char edit_original[17] = {0}; // a copy of the text before editing so that we can easily test for changes/difference
|
||||
char edit[17];
|
||||
int edit_index;
|
||||
|
||||
@ -344,7 +348,7 @@ void UI_DisplayMenu(void)
|
||||
const unsigned int menu_item_x1 = (8 * menu_list_width) + 2;
|
||||
const unsigned int menu_item_x2 = LCD_WIDTH - 1;
|
||||
unsigned int i;
|
||||
char String[16];
|
||||
char String[64];
|
||||
char Contact[16];
|
||||
|
||||
// clear the screen
|
||||
@ -728,21 +732,21 @@ void UI_DisplayMenu(void)
|
||||
break;
|
||||
|
||||
case MENU_VOL:
|
||||
// 1st text line
|
||||
sprintf(String, "%u.%02uV", gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100);
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 1, 8);
|
||||
|
||||
{ // 2nd text line .. percentage
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 1, 8);
|
||||
sprintf(String, "%u%%", BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 3, 8);
|
||||
#if 0
|
||||
sprintf(String, "Curr %u", gBatteryCurrent); // needs scaling into mA
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 5, 8);
|
||||
#endif
|
||||
if (gF_LOCK)
|
||||
{
|
||||
gBatteryCalibration[3] = gSubMenuSelection;
|
||||
BATTERY_GetReadings(true);
|
||||
sprintf(String, "%u.%02uV\n%u%%\n%u",
|
||||
gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100,
|
||||
BATTERY_VoltsToPercent(gBatteryVoltageAverage),
|
||||
gSubMenuSelection);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(String, "%u.%02uV\n%u%%",
|
||||
gBatteryVoltageAverage / 100, gBatteryVoltageAverage % 100,
|
||||
BATTERY_VoltsToPercent(gBatteryVoltageAverage));
|
||||
}
|
||||
|
||||
already_printed = true;
|
||||
break;
|
||||
|
||||
case MENU_RESET:
|
||||
@ -755,20 +759,15 @@ void UI_DisplayMenu(void)
|
||||
|
||||
case MENU_F_CALI:
|
||||
{
|
||||
const uint32_t value = 22656 + gSubMenuSelection;
|
||||
const uint32_t value = 22656 + gSubMenuSelection;
|
||||
const uint32_t xtal_Hz = (0x4f0000u + value) * 5;
|
||||
|
||||
//gEeprom.BK4819_XTAL_FREQ_LOW = gSubMenuSelection; // already set when the user was adjusting the value
|
||||
BK4819_WriteRegister(BK4819_REG_3B, value);
|
||||
|
||||
sprintf(String, "%d", gSubMenuSelection);
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 0, 8);
|
||||
|
||||
const uint32_t xtal_Hz = (0x4f0000u + value) * 5;
|
||||
sprintf(String, "%u.%06u", xtal_Hz / 1000000, xtal_Hz % 1000000);
|
||||
UI_PrintString(String, menu_item_x1, menu_item_x2, 2, 8);
|
||||
|
||||
UI_PrintString("MHz", menu_item_x1, menu_item_x2, 4, 8);
|
||||
|
||||
already_printed = true;
|
||||
sprintf(String, "%d\n%u.%06u\nMHz",
|
||||
gSubMenuSelection,
|
||||
xtal_Hz / 1000000, xtal_Hz % 1000000);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user