0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-04-28 14:21:25 +03:00

Compander setting now saved into each channel

This commit is contained in:
OneOfEleven 2023-09-19 17:30:12 +01:00
parent 30d6f3b371
commit 737e5ac8e2
12 changed files with 89 additions and 43 deletions

View File

@ -27,7 +27,7 @@ ENABLE_TX_WHEN_AM := 0 allow TX (always FM) when RX is set to
ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method ENABLE_CTCSS_TAIL_PHASE_SHIFT := 1 standard CTCSS tail phase shift rather than QS's own 55Hz tone method
ENABLE_MAIN_KEY_HOLD := 1 initial F-key press not needed, instead hold down keys 0-9 to access the functions ENABLE_MAIN_KEY_HOLD := 1 initial F-key press not needed, instead hold down keys 0-9 to access the functions
ENABLE_BOOT_BEEPS := 0 give user audio feedback on volume knob position at boot-up ENABLE_BOOT_BEEPS := 0 give user audio feedback on volume knob position at boot-up
ENABLE_COMPANDER := 1 compander option - setting not yet saved (per channel) ENABLE_COMPANDER := 1 compander option (per channel)
ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge ENABLE_SHOW_CHARGE_LEVEL := 1 show the charge level when the radio is on charge
ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right) ENABLE_REVERSE_BAT_SYMBOL := 1 mirror the battery symbol on the status bar (+ pole on the right)
ENABLE_STATUSBAR_VOLTAGE := 0 show the battery voltage on the top status bar - when possible ENABLE_STATUSBAR_VOLTAGE := 0 show the battery voltage on the top status bar - when possible

View File

@ -578,7 +578,7 @@ void MENU_AcceptSetting(void)
#ifdef ENABLE_COMPANDER #ifdef ENABLE_COMPANDER
case MENU_COMPAND: case MENU_COMPAND:
gTxVfo->Compander = gSubMenuSelection; gTxVfo->Compander = gSubMenuSelection;
//gRequestSaveChannel = 2; gRequestSaveChannel = 2;
return; return;
#endif #endif

View File

@ -539,7 +539,7 @@ const uint8_t BITMAP_ScanList[6] =
}; };
*/ */
const uint8_t BITMAP_ScanList1[6] = const uint8_t BITMAP_ScanList1[6] =
{ // 1 symbol { // 'I' symbol
0b00000000, 0b00000000,
0b00000000, 0b00000000,
0b01000010, 0b01000010,
@ -549,7 +549,7 @@ const uint8_t BITMAP_ScanList1[6] =
}; };
const uint8_t BITMAP_ScanList2[6] = const uint8_t BITMAP_ScanList2[6] =
{ // 2 symbol { // 'II' symbol
0b00000000, 0b00000000,
0b01000010, 0b01000010,
0b01111110, 0b01111110,
@ -557,3 +557,15 @@ const uint8_t BITMAP_ScanList2[6] =
0b01111110, 0b01111110,
0b01000010 0b01000010
}; };
#ifdef ENABLE_COMPANDER
const uint8_t BITMAP_compand[6] =
{
0b00000000,
0b00111100,
0b01000010,
0b01000010,
0b01000010,
0b00100100
};
#endif

View File

@ -60,5 +60,9 @@ extern const uint8_t BITMAP_VFO_NotDefault[8];
extern const uint8_t BITMAP_ScanList1[6]; extern const uint8_t BITMAP_ScanList1[6];
extern const uint8_t BITMAP_ScanList2[6]; extern const uint8_t BITMAP_ScanList2[6];
#ifdef ENABLE_COMPANDER
extern const uint8_t BITMAP_compand[6];
#endif
#endif #endif

BIN
firmware

Binary file not shown.

Binary file not shown.

Binary file not shown.

20
radio.c
View File

@ -48,7 +48,8 @@ STEP_Setting_t gStepSetting;
VfoState_t VfoState[2]; VfoState_t VfoState[2];
bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO) bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
{ { // return true if the channel appears valid
uint8_t Attributes; uint8_t Attributes;
uint8_t PriorityCh1; uint8_t PriorityCh1;
uint8_t PriorityCh2; uint8_t PriorityCh2;
@ -56,8 +57,8 @@ bool RADIO_CheckValidChannel(uint16_t Channel, bool bCheckScanList, uint8_t VFO)
if (!IS_MR_CHANNEL(Channel)) if (!IS_MR_CHANNEL(Channel))
return false; return false;
// Check channel is valid
Attributes = gMR_ChannelAttributes[Channel]; Attributes = gMR_ChannelAttributes[Channel];
if ((Attributes & MR_CH_BAND_MASK) > BAND7_470MHz) if ((Attributes & MR_CH_BAND_MASK) > BAND7_470MHz)
return false; return false;
@ -177,8 +178,9 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
if (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF) if (gEeprom.CROSS_BAND_RX_TX == CROSS_BAND_OFF)
return; return;
gUpdateStatus = true;
gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF; gEeprom.CROSS_BAND_RX_TX = CROSS_BAND_OFF;
gUpdateStatus = true;
return; return;
} }
#endif #endif
@ -203,7 +205,8 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
Attributes = gMR_ChannelAttributes[Channel]; Attributes = gMR_ChannelAttributes[Channel];
if (Attributes == 0xFF) if (Attributes == 0xFF)
{ { // invalid/unused channel
uint8_t Index; uint8_t Index;
if (IS_MR_CHANNEL(Channel)) if (IS_MR_CHANNEL(Channel))
@ -220,7 +223,10 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
Band = Attributes & MR_CH_BAND_MASK; Band = Attributes & MR_CH_BAND_MASK;
if (Band > BAND7_470MHz) if (Band > BAND7_470MHz)
Band = BAND6_400MHz; {
// Band = BAND6_400MHz;
Band = FREQUENCY_GetBand(gEeprom.ScreenChannel[VFO]); // 111 bug fix, or have I broke it ?
}
if (IS_MR_CHANNEL(Channel)) if (IS_MR_CHANNEL(Channel))
{ {
@ -349,7 +355,9 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
} __attribute__((packed)) Info; } __attribute__((packed)) Info;
EEPROM_ReadBuffer(Base, &Info, sizeof(Info)); EEPROM_ReadBuffer(Base, &Info, sizeof(Info));
pRadio->ConfigRX.Frequency = Info.Frequency; pRadio->ConfigRX.Frequency = Info.Frequency;
if (Info.Offset >= 100000000) if (Info.Offset >= 100000000)
Info.Offset = 1000000; Info.Offset = 1000000;
gEeprom.VfoInfo[VFO].TX_OFFSET_FREQUENCY = Info.Offset; gEeprom.VfoInfo[VFO].TX_OFFSET_FREQUENCY = Info.Offset;
@ -418,7 +426,7 @@ void RADIO_ConfigureChannel(uint8_t VFO, uint32_t Arg)
gEeprom.VfoInfo[VFO].IsAM = false; gEeprom.VfoInfo[VFO].IsAM = false;
#ifdef ENABLE_COMPANDER #ifdef ENABLE_COMPANDER
gEeprom.VfoInfo[VFO].Compander = 0; // off gEeprom.VfoInfo[VFO].Compander = (Attributes & MR_CH_COMPAND) >> 4;
#endif #endif
RADIO_ConfigureSquelchAndOutputPower(pRadio); RADIO_ConfigureSquelchAndOutputPower(pRadio);

View File

@ -23,9 +23,12 @@
#include "dcs.h" #include "dcs.h"
enum { enum {
MR_CH_SCANLIST1 = (1u << 7), MR_CH_BAND_MASK = 0x0F << 0,
MR_CH_SCANLIST2 = (1u << 6), #ifdef ENABLE_COMPANDER
MR_CH_BAND_MASK = 0x0Fu MR_CH_COMPAND = 3u << 4, // new
#endif
MR_CH_SCANLIST2 = 1u << 6,
MR_CH_SCANLIST1 = 1u << 7
}; };
enum { enum {

View File

@ -229,7 +229,7 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO,
} }
} }
void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool bUpdate) void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep)
{ {
UART_LogSend("svalid\r\n", 8); UART_LogSend("svalid\r\n", 8);
@ -238,32 +238,39 @@ void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool bUpdat
#endif #endif
{ {
uint8_t State[8]; uint8_t State[8];
uint8_t Attributes = 0xFF; uint8_t Attributes = 0xFF; // default attributes
uint16_t Offset = 0x0D60 + (Channel & ~7U); #ifdef ENABLE_COMPANDER
Attributes &= ~MR_CH_COMPAND; // default to '0' = compander disabled
#endif
uint16_t Offset = 0x0D60 + (Channel & ~7u);
EEPROM_ReadBuffer(Offset, State, sizeof(State)); EEPROM_ReadBuffer(Offset, State, sizeof(State));
if (bUpdate) if (keep)
{ {
#ifdef ENABLE_COMPANDER
Attributes = (pVFO->SCANLIST1_PARTICIPATION << 7) | (pVFO->SCANLIST2_PARTICIPATION << 6) | (pVFO->Compander << 4) | (pVFO->Band << 0);
#else
Attributes = (pVFO->SCANLIST1_PARTICIPATION << 7) | (pVFO->SCANLIST2_PARTICIPATION << 6) | (pVFO->Band << 0); Attributes = (pVFO->SCANLIST1_PARTICIPATION << 7) | (pVFO->SCANLIST2_PARTICIPATION << 6) | (pVFO->Band << 0);
if (State[Channel & 7U] == Attributes) #endif
return; if (State[Channel & 7u] == Attributes)
return; // no change in the attributes
} }
State[Channel & 7U] = Attributes; State[Channel & 7u] = Attributes;
EEPROM_WriteBuffer(Offset, State); EEPROM_WriteBuffer(Offset, State);
gMR_ChannelAttributes[Channel] = Attributes; gMR_ChannelAttributes[Channel] = Attributes;
#ifndef KEEP_MEM_NAME // #ifndef KEEP_MEM_NAME
if (IS_MR_CHANNEL(Channel)) if (IS_MR_CHANNEL(Channel) && !keep)
{ // clear/reset the channel name { // clear/reset the channel name
const uint16_t OffsetMR = Channel * 16; const uint16_t OffsetMR = Channel * 16;
memset(&State, 0xFF, sizeof(State)); memset(&State, 0xFF, sizeof(State));
EEPROM_WriteBuffer(0x0F50 + OffsetMR, State); EEPROM_WriteBuffer(0x0F50 + OffsetMR, State);
EEPROM_WriteBuffer(0x0F58 + OffsetMR, State); EEPROM_WriteBuffer(0x0F58 + OffsetMR, State);
} }
#endif // #endif
} }
} }

View File

@ -235,6 +235,6 @@ extern EEPROM_Config_t gEeprom;
void SETTINGS_SaveVfoIndices(void); void SETTINGS_SaveVfoIndices(void);
void SETTINGS_SaveSettings(void); void SETTINGS_SaveSettings(void);
void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode); void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, uint8_t Mode);
void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool bUpdate); void SETTINGS_UpdateChannel(uint8_t Channel, const VFO_Info_t *pVFO, bool keep);
#endif #endif

View File

@ -244,21 +244,18 @@ void UI_DisplayMain(void)
if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num])) if (IS_MR_CHANNEL(gEeprom.ScreenChannel[vfo_num]))
{ // channel mode { // channel mode
// show the scanlist symbols // show the channel symbols
const uint8_t Attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]]; const uint8_t attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]];
// #ifdef ENABLE_BIG_FREQ if (attributes & MR_CH_SCANLIST1)
// side-by-side
if (Attributes & MR_CH_SCANLIST1)
memmove(pLine0 + 113, BITMAP_ScanList1, sizeof(BITMAP_ScanList1)); memmove(pLine0 + 113, BITMAP_ScanList1, sizeof(BITMAP_ScanList1));
if (Attributes & MR_CH_SCANLIST2) if (attributes & MR_CH_SCANLIST2)
memmove(pLine0 + 120, BITMAP_ScanList2, sizeof(BITMAP_ScanList2)); memmove(pLine0 + 120, BITMAP_ScanList2, sizeof(BITMAP_ScanList2));
// #else #ifndef ENABLE_BIG_FREQ
// // top-bottom .. makes room for full 10 characters of channel name #ifdef ENABLE_COMPANDER
// if (Attributes & MR_CH_SCANLIST1) if ((attributes & MR_CH_COMPAND) > 0)
// memmove(pLine0 + 120, BITMAP_ScanList1, sizeof(BITMAP_ScanList1)); memmove(pLine0 + 120 + LCD_WIDTH, BITMAP_compand, sizeof(BITMAP_compand));
// if (Attributes & MR_CH_SCANLIST2) #endif
// memmove(pLine0 + 120 + LCD_WIDTH, BITMAP_ScanList2, sizeof(BITMAP_ScanList2)); #endif
// #endif
switch (gEeprom.CHANNEL_DISPLAY_MODE) switch (gEeprom.CHANNEL_DISPLAY_MODE)
{ {
@ -327,6 +324,21 @@ void UI_DisplayMain(void)
sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000); sprintf(String, "%03u.%05u", frequency / 100000, frequency % 100000);
UI_PrintString(String, 32, 0, Line, 8); UI_PrintString(String, 32, 0, Line, 8);
#endif #endif
// show the channel symbols
const uint8_t attributes = gMR_ChannelAttributes[gEeprom.ScreenChannel[vfo_num]];
(void)attributes; // stop compiler warning/error
#ifdef ENABLE_BIG_FREQ
#ifdef ENABLE_COMPANDER
if ((attributes & MR_CH_COMPAND) > 0)
memmove(pLine0 + 120, BITMAP_compand, sizeof(BITMAP_compand));
#endif
#else
#ifdef ENABLE_COMPANDER
if ((attributes & MR_CH_COMPAND) > 0)
memmove(pLine0 + 120 + LCD_WIDTH, BITMAP_compand, sizeof(BITMAP_compand));
#endif
#endif
} }
} }