From 8e48a5f4c56a5637a8382b390ea5380edaa538b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Ryb=C3=A1rsky?= Date: Tue, 3 Jun 2025 22:17:31 +0200 Subject: [PATCH] Testing --- Makefile | 2 +- app/app.c | 2 +- app/fm.c | 303 ++++++++++++++++++++++++++++--------------------- app/fskmodem.c | 4 +- radio.c | 14 +-- settings.c | 4 +- ui/status.c | 14 +++ 7 files changed, 201 insertions(+), 142 deletions(-) diff --git a/Makefile b/Makefile index 3e084eb..ec36f25 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ ENABLE_ALARM ?= 0 ENABLE_TX1750 ?= 0 ENABLE_PWRON_PASSWORD ?= 0 ENABLE_DTMF_CALLING ?= 0 -ENABLE_FLASHLIGHT ?= 1 +ENABLE_FLASHLIGHT ?= 0 # ---- CUSTOM MODS ---- ENABLE_SPECTRUM ?= 1 diff --git a/app/app.c b/app/app.c index 9d87e5a..ccde46e 100644 --- a/app/app.c +++ b/app/app.c @@ -29,10 +29,10 @@ #include "app/chFrScanner.h" #include "app/dtmf.h" +#include "../ui/fmradio.h" #ifdef ENABLE_FLASHLIGHT #include "app/flashlight.h" -#include "../ui/fmradio.h" #endif #ifdef ENABLE_FMRADIO diff --git a/app/fm.c b/app/fm.c index 2a48ed0..2d43939 100644 --- a/app/fm.c +++ b/app/fm.c @@ -31,22 +31,22 @@ #include "settings.h" #include "ui/inputbox.h" #include "ui/ui.h" +#include "driver/systick.h" #ifndef ARRAY_SIZE - #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif -uint16_t gFM_Channels[20]; -bool gFmRadioMode; -uint8_t gFmRadioCountdown_500ms; +uint16_t gFM_Channels[20]; +bool gFmRadioMode; +uint8_t gFmRadioCountdown_500ms; volatile uint16_t gFmPlayCountdown_10ms; -volatile int8_t gFM_ScanState; -bool gFM_AutoScan; -uint8_t gFM_ChannelPosition; -bool gFM_FoundFrequency; -bool gFM_AutoScan; -uint16_t gFM_RestoreCountdown_10ms; - +volatile int8_t gFM_ScanState; +bool gFM_AutoScan; +uint8_t gFM_ChannelPosition; +bool gFM_FoundFrequency; +bool gFM_AutoScan; +uint16_t gFM_RestoreCountdown_10ms; const uint8_t BUTTON_STATE_PRESSED = 1 << 0; @@ -54,21 +54,19 @@ const uint8_t BUTTON_STATE_HELD = 1 << 1; const uint8_t BUTTON_EVENT_PRESSED = BUTTON_STATE_PRESSED; const uint8_t BUTTON_EVENT_HELD = BUTTON_STATE_PRESSED | BUTTON_STATE_HELD; -const uint8_t BUTTON_EVENT_SHORT = 0; -const uint8_t BUTTON_EVENT_LONG = BUTTON_STATE_HELD; +const uint8_t BUTTON_EVENT_SHORT = 0; +const uint8_t BUTTON_EVENT_LONG = BUTTON_STATE_HELD; static void Key_FUNC(KEY_Code_t Key, uint8_t state); -bool FM_CheckValidChannel(uint8_t Channel) -{ - return Channel < ARRAY_SIZE(gFM_Channels) && - gFM_Channels[Channel] >= BK1080_GetFreqLoLimit(gEeprom.FM_Band) && - gFM_Channels[Channel] < BK1080_GetFreqHiLimit(gEeprom.FM_Band); +bool FM_CheckValidChannel(uint8_t Channel) { + return Channel < ARRAY_SIZE(gFM_Channels) && + gFM_Channels[Channel] >= BK1080_GetFreqLoLimit(gEeprom.FM_Band) && + gFM_Channels[Channel] < BK1080_GetFreqHiLimit(gEeprom.FM_Band); } -uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) -{ +uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) { for (unsigned i = 0; i < ARRAY_SIZE(gFM_Channels); i++) { if (Channel == 0xFF) Channel = ARRAY_SIZE(gFM_Channels) - 1; @@ -82,8 +80,7 @@ uint8_t FM_FindNextChannel(uint8_t Channel, uint8_t Direction) return 0xFF; } -int FM_ConfigureChannelState(void) -{ +int FM_ConfigureChannelState(void) { gEeprom.FM_FrequencyPlaying = gEeprom.FM_SelectedFrequency; if (gEeprom.FM_IsMrMode) { @@ -92,17 +89,16 @@ int FM_ConfigureChannelState(void) gEeprom.FM_IsMrMode = false; return -1; } - gEeprom.FM_SelectedChannel = Channel; + gEeprom.FM_SelectedChannel = Channel; gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; } return 0; } -void FM_TurnOff(void) -{ - gFmRadioMode = false; - gFM_ScanState = FM_SCAN_OFF; +void FM_TurnOff(void) { + gFmRadioMode = false; + gFM_ScanState = FM_SCAN_OFF; gFM_RestoreCountdown_10ms = 0; AUDIO_AudioPathOff(); @@ -110,17 +106,16 @@ void FM_TurnOff(void) BK1080_Init0(); - gUpdateStatus = true; + gUpdateStatus = true; - #ifdef ENABLE_FEAT_F4HWN_RESUME_STATE - gEeprom.CURRENT_STATE = 0; - SETTINGS_WriteCurrentState(); - #endif +#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE + gEeprom.CURRENT_STATE = 0; + SETTINGS_WriteCurrentState(); +#endif } -void FM_EraseChannels(void) -{ - uint8_t Template[8]; +void FM_EraseChannels(void) { + uint8_t Template[8]; memset(Template, 0xFF, sizeof(Template)); for (unsigned i = 0; i < 5; i++) @@ -129,18 +124,18 @@ void FM_EraseChannels(void) memset(gFM_Channels, 0xFF, sizeof(gFM_Channels)); } -void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) -{ +void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) { AUDIO_AudioPathOff(); gEnableSpeaker = false; - gFmPlayCountdown_10ms = (gFM_ScanState == FM_SCAN_OFF) ? fm_play_countdown_noscan_10ms : fm_play_countdown_scan_10ms; + gFmPlayCountdown_10ms = (gFM_ScanState == FM_SCAN_OFF) ? fm_play_countdown_noscan_10ms + : fm_play_countdown_scan_10ms; - gScheduleFM = false; - gFM_FoundFrequency = false; - gAskToSave = false; - gAskToDelete = false; + gScheduleFM = false; + gFM_FoundFrequency = false; + gAskToSave = false; + gAskToDelete = false; gEeprom.FM_FrequencyPlaying = Frequency; if (!bFlag) { @@ -158,12 +153,11 @@ void FM_Tune(uint16_t Frequency, int8_t Step, bool bFlag) BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying, gEeprom.FM_Band/*, gEeprom.FM_Space*/); } -void FM_PlayAndUpdate(void) -{ +void FM_PlayAndUpdate(void) { gFM_ScanState = FM_SCAN_OFF; if (gFM_AutoScan) { - gEeprom.FM_IsMrMode = true; + gEeprom.FM_IsMrMode = true; gEeprom.FM_SelectedChannel = 0; } @@ -172,16 +166,15 @@ void FM_PlayAndUpdate(void) SETTINGS_SaveFM(); gFmPlayCountdown_10ms = 0; - gScheduleFM = false; - gAskToSave = false; + gScheduleFM = false; + gAskToSave = false; AUDIO_AudioPathOn(); - gEnableSpeaker = true; + gEnableSpeaker = true; } -int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) -{ +int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) { int ret = -1; const uint16_t Test2 = BK1080_ReadRegister(BK1080_REG_07_TEST1); @@ -191,7 +184,7 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) if (BK1080_REG_07_GET_SNR(Test2) <= 2) { BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } @@ -200,7 +193,7 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) if ((Status & BK1080_REG_10_MASK_AFCRL) != BK1080_REG_10_AFCRL_NOT_RAILED || BK1080_REG_10_GET_RSSI(Status) < 10) { BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } @@ -208,17 +201,16 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) //if (Deviation > -281 && Deviation < 280) if (Deviation >= 280 && Deviation <= 3815) { BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } // not BLE(less than or equal) if (Frequency > LowerLimit && (Frequency - BK1080_BaseFrequency) == 1) { - if (BK1080_FrequencyDeviation & 0x800 || (BK1080_FrequencyDeviation < 20)) - { + if (BK1080_FrequencyDeviation & 0x800 || (BK1080_FrequencyDeviation < 20)) { BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } @@ -227,10 +219,9 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) // not BLT(less than) if (Frequency >= LowerLimit && (BK1080_BaseFrequency - Frequency) == 1) { - if ((BK1080_FrequencyDeviation & 0x800) == 0 || (BK1080_FrequencyDeviation > 4075)) - { + if ((BK1080_FrequencyDeviation & 0x800) == 0 || (BK1080_FrequencyDeviation > 4075)) { BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } @@ -238,14 +229,15 @@ int FM_CheckFrequencyLock(uint16_t Frequency, uint16_t LowerLimit) ret = 0; BK1080_FrequencyDeviation = Deviation; - BK1080_BaseFrequency = Frequency; + BK1080_BaseFrequency = Frequency; return ret; } -static void Key_DIGITS(KEY_Code_t Key, uint8_t state) -{ - enum { STATE_FREQ_MODE, STATE_MR_MODE, STATE_SAVE }; +static void Key_DIGITS(KEY_Code_t Key, uint8_t state) { + enum { + STATE_FREQ_MODE, STATE_MR_MODE, STATE_SAVE + }; if (state == BUTTON_EVENT_SHORT && !gWasFKeyPressed) { uint8_t State; @@ -257,8 +249,7 @@ static void Key_DIGITS(KEY_Code_t Key, uint8_t state) if (gAskToSave) { State = STATE_SAVE; - } - else { + } else { if (gFM_ScanState != FM_SCAN_OFF) { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; return; @@ -278,20 +269,20 @@ static void Key_DIGITS(KEY_Code_t Key, uint8_t state) gInputBox[0] = 0; gInputBoxIndex = 2; } - } - else if (gInputBoxIndex > 3) { + } else if (gInputBoxIndex > 3) { uint32_t Frequency; gInputBoxIndex = 0; Frequency = StrToUL(INPUTBOX_GetAscii()); - if (Frequency < BK1080_GetFreqLoLimit(gEeprom.FM_Band) || BK1080_GetFreqHiLimit(gEeprom.FM_Band) < Frequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + if (Frequency < BK1080_GetFreqLoLimit(gEeprom.FM_Band) || + BK1080_GetFreqHiLimit(gEeprom.FM_Band) < Frequency) { + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gRequestDisplayScreen = DISPLAY_FM; return; } - gEeprom.FM_SelectedFrequency = (uint16_t)Frequency; + gEeprom.FM_SelectedFrequency = (uint16_t) Frequency; #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif @@ -300,8 +291,7 @@ static void Key_DIGITS(KEY_Code_t Key, uint8_t state) gRequestSaveFM = true; return; } - } - else if (gInputBoxIndex == 2) { + } else if (gInputBoxIndex == 2) { uint8_t Channel; gInputBoxIndex = 0; @@ -318,8 +308,7 @@ static void Key_DIGITS(KEY_Code_t Key, uint8_t state) gRequestSaveFM = true; return; } - } - else if (Channel < 20) { + } else if (Channel < 20) { #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif @@ -336,19 +325,17 @@ static void Key_DIGITS(KEY_Code_t Key, uint8_t state) #ifdef ENABLE_VOICE gAnotherVoiceID = (VOICE_ID_t)Key; #endif - } - else + } else Key_FUNC(Key, state); } -static void Key_FUNC(KEY_Code_t Key, uint8_t state) -{ +static void Key_FUNC(KEY_Code_t Key, uint8_t state) { if (state == BUTTON_EVENT_SHORT || state == BUTTON_EVENT_HELD) { bool autoScan = gWasFKeyPressed || (state == BUTTON_EVENT_HELD); - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - gWasFKeyPressed = false; - gUpdateStatus = true; + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gWasFKeyPressed = false; + gUpdateStatus = true; gRequestDisplayScreen = DISPLAY_FM; switch (Key) { @@ -361,10 +348,10 @@ static void Key_FUNC(KEY_Code_t Key, uint8_t state) gRequestSaveFM = true; break; - // case KEY_2: - // gEeprom.FM_Space = (gEeprom.FM_Space + 1) % 3; - // gRequestSaveFM = true; - // break; + // case KEY_2: + // gEeprom.FM_Space = (gEeprom.FM_Space + 1) % 3; + // gRequestSaveFM = true; + // break; case KEY_3: gEeprom.FM_IsMrMode = !gEeprom.FM_IsMrMode; @@ -372,32 +359,99 @@ static void Key_FUNC(KEY_Code_t Key, uint8_t state) if (!FM_ConfigureChannelState()) { BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying, gEeprom.FM_Band/*, gEeprom.FM_Space*/); gRequestSaveFM = true; - } - else + } else gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; break; - case KEY_4: + case KEY_4: gEeprom.BK1080_AGC_ENABLED = !gEeprom.BK1080_AGC_ENABLED; BK1080_UpdateSysconf(); gRequestSaveSettings = true; gRequestSaveFM = true; break; - case KEY_5: + case KEY_5: gEeprom.BK1080_DEEMPHASIS_CONFIG++; BK1080_UpdateSysconf(); gRequestSaveSettings = true; gRequestSaveFM = true; break; - case KEY_6: + case KEY_6: gEeprom.BK1080_BLEND_CONFIG++; BK1080_UpdateSysconf(); gRequestSaveSettings = true; gRequestSaveFM = true; break; + case KEY_7: + BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2_GREEN, true); + + // mask just in case + uint32_t id24 = 0x00A38C; + uint8_t btn = 0x04; + uint8_t out[10]; + + // 3-byte big-endian ID + out[0] = (id24 >> 16) & 0xFF; + out[1] = (id24 >> 8) & 0xFF; + out[2] = (id24 >> 0) & 0xFF; + + // first nibble�\redundancy copy: 0xBB if btn=0xB + out[3] = (btn << 4) | 0x04; + + // second copy with MSB flipped (btn ^ 0x8) in the high nibble + out[4] = ((btn ^ 0x8) << 4); + + BK4819_EnterTxMute(); + RADIO_SetTxParameters(); + + BK4819_WriteRegister(BK4819_REG_70, BK4819_REG_70_ENABLE_TONE1 | + ((127 & 0x7f) << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)); + uint16_t datX = BK4819_REG_30_ENABLE_VCO_CALIB | + BK4819_REG_30_ENABLE_UNKNOWN | + BK4819_REG_30_DISABLE_RX_LINK | + BK4819_REG_30_DISABLE_AF_DAC | + BK4819_REG_30_ENABLE_DISC_MODE | + BK4819_REG_30_ENABLE_PLL_VCO | + BK4819_REG_30_ENABLE_PA_GAIN | + BK4819_REG_30_DISABLE_MIC_ADC | + BK4819_REG_30_ENABLE_TX_DSP | + BK4819_REG_30_DISABLE_RX_DSP; + BK4819_WriteRegister(BK4819_REG_30, + datX); + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, false); + SYSTEM_DelayMs(20); + + for (unsigned int x = 0; x < 24; x++) { + for (unsigned int y = 0; y < sizeof(out); y++) { + for (unsigned char i = 7; i < 8; i--) { + if ((out[y] >> i) & 1) { +// datX |= BK4819_REG_30_ENABLE_PA_GAIN; + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, true); + SYSTICK_DelayUs(400 * 3 - 350); + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, false); +// datX &= ~BK4819_REG_30_ENABLE_PA_GAIN; + SYSTICK_DelayUs(400 * 1 - 350); + } else { + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, true); +// datX |= BK4819_REG_30_ENABLE_PA_GAIN; + SYSTICK_DelayUs(400 * 1 - 350); + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, false); +// datX &= ~BK4819_REG_30_ENABLE_PA_GAIN; + SYSTICK_DelayUs(400 * 3 - 350); + } + } + } + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, false); + SYSTEM_DelayMs(3); + } + BK4819_ToggleGpioOut(BK4819_GPIO1_PIN29_PA_ENABLE, false); + SYSTEM_DelayMs(100); + BK4819_WriteRegister(BK4819_REG_30, 0xC1FE); + BK4819_ToggleGpioOut(BK4819_GPIO6_PIN2_GREEN, false); + break; + case KEY_STAR: ACTION_Scan(autoScan); break; @@ -409,8 +463,7 @@ static void Key_FUNC(KEY_Code_t Key, uint8_t state) } } -static void Key_EXIT(uint8_t state) -{ +static void Key_EXIT(uint8_t state) { gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; if (state == BUTTON_EVENT_SHORT) { @@ -424,10 +477,9 @@ static void Key_EXIT(uint8_t state) return; } - gAskToSave = false; + gAskToSave = false; gAskToDelete = false; - } - else { + } else { gInputBox[--gInputBoxIndex] = 10; if (gInputBoxIndex) { @@ -447,8 +499,7 @@ static void Key_EXIT(uint8_t state) #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_CANCEL; #endif - } - else { + } else { FM_PlayAndUpdate(); #ifdef ENABLE_VOICE gAnotherVoiceID = VOICE_ID_SCANNING_STOP; @@ -458,14 +509,13 @@ static void Key_EXIT(uint8_t state) gRequestDisplayScreen = DISPLAY_FM; } -static void Key_MENU(uint8_t state) -{ +static void Key_MENU(uint8_t state) { if (state != BUTTON_EVENT_SHORT) return; gRequestDisplayScreen = DISPLAY_FM; - gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; + gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; if (gFM_ScanState == FM_SCAN_OFF) { if (!gEeprom.FM_IsMrMode) { @@ -474,8 +524,7 @@ static void Key_MENU(uint8_t state) gRequestSaveFM = true; } gAskToSave = !gAskToSave; - } - else { + } else { if (gAskToDelete) { gFM_Channels[gEeprom.FM_SelectedChannel] = 0xFFFF; @@ -486,10 +535,9 @@ static void Key_MENU(uint8_t state) } gAskToDelete = !gAskToDelete; } - } - else { + } else { if (gFM_AutoScan || !gFM_FoundFrequency) { - gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; + gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; gInputBoxIndex = 0; return; } @@ -502,8 +550,7 @@ static void Key_MENU(uint8_t state) } } -static void Key_UP_DOWN(uint8_t state, int8_t Step) -{ +static void Key_UP_DOWN(uint8_t state, int8_t Step) { if (state == BUTTON_EVENT_PRESSED) { if (gInputBoxIndex) { gBeepToPlay = BEEP_500HZ_60MS_DOUBLE_BEEP_OPTIONAL; @@ -511,13 +558,13 @@ static void Key_UP_DOWN(uint8_t state, int8_t Step) } gBeepToPlay = BEEP_1KHZ_60MS_OPTIONAL; - } else if (gInputBoxIndex || state!=BUTTON_EVENT_HELD) { + } else if (gInputBoxIndex || state != BUTTON_EVENT_HELD) { return; } if (gAskToSave) { gRequestDisplayScreen = DISPLAY_FM; - gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); + gFM_ChannelPosition = NUMBER_AddWithWraparound(gFM_ChannelPosition, Step, 0, 19); return; } @@ -537,10 +584,9 @@ static void Key_UP_DOWN(uint8_t state, int8_t Step) if (Channel == 0xFF || gEeprom.FM_SelectedChannel == Channel) goto Bail; - gEeprom.FM_SelectedChannel = Channel; + gEeprom.FM_SelectedChannel = Channel; gEeprom.FM_FrequencyPlaying = gFM_Channels[Channel]; - } - else { + } else { uint16_t Frequency = gEeprom.FM_SelectedFrequency + Step; if (Frequency < BK1080_GetFreqLoLimit(gEeprom.FM_Band)) @@ -548,20 +594,19 @@ static void Key_UP_DOWN(uint8_t state, int8_t Step) else if (Frequency > BK1080_GetFreqHiLimit(gEeprom.FM_Band)) Frequency = BK1080_GetFreqLoLimit(gEeprom.FM_Band); - gEeprom.FM_FrequencyPlaying = Frequency; + gEeprom.FM_FrequencyPlaying = Frequency; gEeprom.FM_SelectedFrequency = gEeprom.FM_FrequencyPlaying; } gRequestSaveFM = true; -Bail: + Bail: BK1080_SetFrequency(gEeprom.FM_FrequencyPlaying, gEeprom.FM_Band/*, gEeprom.FM_Space*/); gRequestDisplayScreen = DISPLAY_FM; } -void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) -{ +void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) { uint8_t state = bKeyPressed + 2 * bKeyHeld; switch (Key) { @@ -597,12 +642,11 @@ void FM_ProcessKeys(KEY_Code_t Key, bool bKeyPressed, bool bKeyHeld) GUI_DisplayScreen(); } -void FM_Play(void) -{ +void FM_Play(void) { if (!FM_CheckFrequencyLock(gEeprom.FM_FrequencyPlaying, BK1080_GetFreqLoLimit(gEeprom.FM_Band))) { if (!gFM_AutoScan) { gFmPlayCountdown_10ms = 0; - gFM_FoundFrequency = true; + gFM_FoundFrequency = true; if (!gEeprom.FM_IsMrMode) gEeprom.FM_SelectedFrequency = gEeprom.FM_FrequencyPlaying; @@ -632,24 +676,23 @@ void FM_Play(void) GUI_SelectNextDisplay(DISPLAY_FM); } -void FM_Start(void) -{ - gDualWatchActive = false; - gFmRadioMode = true; - gFM_ScanState = FM_SCAN_OFF; +void FM_Start(void) { + gDualWatchActive = false; + gFmRadioMode = true; + gFM_ScanState = FM_SCAN_OFF; gFM_RestoreCountdown_10ms = 0; BK1080_Init(gEeprom.FM_FrequencyPlaying, gEeprom.FM_Band/*, gEeprom.FM_Space*/); AUDIO_AudioPathOn(); - gEnableSpeaker = true; - gUpdateStatus = true; + gEnableSpeaker = true; + gUpdateStatus = true; - #ifdef ENABLE_FEAT_F4HWN_RESUME_STATE - gEeprom.CURRENT_STATE = 3; - SETTINGS_WriteCurrentState(); - #endif +#ifdef ENABLE_FEAT_F4HWN_RESUME_STATE + gEeprom.CURRENT_STATE = 3; + SETTINGS_WriteCurrentState(); +#endif } #endif diff --git a/app/fskmodem.c b/app/fskmodem.c index 33ee79f..5dcf647 100644 --- a/app/fskmodem.c +++ b/app/fskmodem.c @@ -30,8 +30,10 @@ typedef enum { RXState rxState = Ready; + uint8_t SMSResponseCounterTarget = 6; + void FSKModem_TimeSlice500ms(void) { - if (SMSResponseCounter && SMSResponseCounter++ > 6) { + if (SMSResponseCounter && FUNCTION_IsRx() && SMSResponseCounter++ > SMSResponseCounterTarget) { switch (gSMSResponseState) { case SMS_RESPONSE_ACK: MSG_FSKSendData(&inBoundPacket); diff --git a/radio.c b/radio.c index 39fb877..60089b6 100644 --- a/radio.c +++ b/radio.c @@ -235,7 +235,7 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure if (configure == VFO_CONFIGURE_RELOAD || IS_FREQ_CHANNEL(channel)) { uint8_t tmp; - uint8_t data[10]; + uint8_t data[8]; // *************** @@ -256,12 +256,6 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure pVfo->STEP_SETTING = tmp; pVfo->StepFrequency = gStepFrequencyTable[tmp]; - tmp = data[8]; - pVfo->SCRAMBLING_TYPE = tmp ; - tmp = data[9]; - pVfo->SCRAMBLING_TYPE |= tmp << 8; - //pVfo->SCRAMBLING_TYPE = 0; - pVfo->freq_config_RX.CodeType = (data[2] >> 0) & 0x0F; pVfo->freq_config_TX.CodeType = (data[2] >> 4) & 0x0F; @@ -335,6 +329,12 @@ void RADIO_ConfigureChannel(const unsigned int VFO, const unsigned int configure // *************** + EEPROM_ReadBuffer(base + 16, data, sizeof(data)); + + uint16_t * data16 = (uint16_t *)data; + + pVfo->SCRAMBLING_TYPE = data16[0]; + struct { uint32_t Frequency; uint32_t Offset; diff --git a/settings.c b/settings.c index 5f2a50c..2ef9f40 100644 --- a/settings.c +++ b/settings.c @@ -798,12 +798,12 @@ void SETTINGS_SaveChannel(uint8_t Channel, uint8_t VFO, const VFO_Info_t *pVFO, #endif ; State._8[6] = pVFO->STEP_SETTING; + EEPROM_WriteBuffer(OffsetVFO + sizeof (State._32), State._8); State._16[0] = pVFO->SCRAMBLING_TYPE; - - EEPROM_WriteBuffer(OffsetVFO + sizeof (State._32), State._8); EEPROM_WriteBuffer(OffsetVFO + sizeof (State._32) + sizeof (State._8), State._16); + SETTINGS_UpdateChannel(Channel, pVFO, true, true, true); if (IS_MR_CHANNEL(Channel)) { diff --git a/ui/status.c b/ui/status.c index bd264a3..7fe86e5 100644 --- a/ui/status.c +++ b/ui/status.c @@ -54,6 +54,17 @@ static void convertTime(uint8_t *line, uint8_t type) #endif #endif +//static const char* const FunctionStrings[] = { +// [FUNCTION_FOREGROUND] = "FG", +// [FUNCTION_TRANSMIT] = "TX", +// [FUNCTION_MONITOR] = "MON", +// [FUNCTION_INCOMING] = "INC", +// [FUNCTION_RECEIVE] = "RX", +// [FUNCTION_POWER_SAVE] = "PWS", +// [FUNCTION_BAND_SCOPE] = "BS", +// [FUNCTION_N_ELEM] = "NE" +//}; + void UI_DisplayStatus() { char str[8] = ""; @@ -276,5 +287,8 @@ void UI_DisplayStatus() // ************** +// x2 -= (7 * strlen(str)); +// UI_PrintStringSmallBufferNormal(FunctionStrings[gCurrentFunction], line + x2 - 20); + ST7565_BlitStatusLine(); }