mirror of
https://github.com/losehu/uv-k5-firmware-custom.git
synced 2025-10-23 14:05:35 +08:00
优化4732调度与显示逻辑
This commit is contained in:
196
app/si.c
196
app/si.c
@ -71,7 +71,7 @@ static const char SI47XX_MODE_NAMES[5][4] = {
|
||||
static SI47XX_FilterBW bw = SI47XX_BW_6_kHz;
|
||||
static SI47XX_SsbFilterBW ssbBw = SI47XX_SSB_BW_3_kHz;
|
||||
static int8_t currentBandIndex = -1;
|
||||
bool SNR_flag=true;
|
||||
bool SNR_flag = true;
|
||||
bool SI_run = true;
|
||||
typedef struct // Band data
|
||||
{
|
||||
@ -160,8 +160,8 @@ static void light_open() {
|
||||
light_time = LIGHT_TIME_SET[gEeprom.BACKLIGHT_TIME];
|
||||
BACKLIGHT_TurnOn();
|
||||
}
|
||||
void WaitDisplay()
|
||||
{
|
||||
|
||||
void WaitDisplay() {
|
||||
UI_DisplayClear();
|
||||
memset(gStatusLine, 0, sizeof(gStatusLine));
|
||||
UI_PrintStringSmall("SI4732 Wait...", 0, 127, 3);
|
||||
@ -169,6 +169,7 @@ void WaitDisplay()
|
||||
ST7565_BlitFullScreen();
|
||||
|
||||
}
|
||||
|
||||
static void tune(uint32_t f) {
|
||||
if (si4732mode == SI47XX_FM) {
|
||||
if (f < 6400000 || f > 10800000) {
|
||||
@ -179,7 +180,7 @@ static void tune(uint32_t f) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
EEPROM_WriteBuffer(SI4732_FREQ_ADD + si4732mode * 4, (uint8_t *) &f, 4);
|
||||
EEPROM_WriteBuffer(SI4732_FREQ_ADD + si4732mode * 4, (uint8_t * ) & f, 4);
|
||||
|
||||
f /= divider;
|
||||
if (si4732mode == SI47XX_FM) {
|
||||
@ -189,7 +190,7 @@ static void tune(uint32_t f) {
|
||||
SI47XX_ClearRDS();
|
||||
|
||||
SI47XX_SetFreq(f);
|
||||
SI47XX_SetAutomaticGainControl(att>0,att);
|
||||
SI47XX_SetAutomaticGainControl(att > 0, att);
|
||||
currentBandIndex = getCurrentBandIndex();
|
||||
}
|
||||
|
||||
@ -201,7 +202,7 @@ void SI_init() {
|
||||
|
||||
SI47XX_PowerUp();
|
||||
|
||||
SI47XX_SetAutomaticGainControl(att>0, att);
|
||||
SI47XX_SetAutomaticGainControl(att > 0, att);
|
||||
}
|
||||
|
||||
|
||||
@ -231,6 +232,8 @@ KeyboardState kbds = {KEY_INVALID, KEY_INVALID, 0};
|
||||
|
||||
|
||||
void SI4732_Display() {
|
||||
UI_DisplayClear();
|
||||
|
||||
memset(gStatusLine, 0, sizeof(gStatusLine));
|
||||
if (INPUT_STATE) {
|
||||
UI_PrintStringSmall(freqInputString, 2, 127, 1);
|
||||
@ -290,20 +293,20 @@ void SI4732_Display() {
|
||||
GUI_DisplaySmallest(String, 64 - strlen(String) * 2, LCD_HEIGHT - 5 - 9, false, true);
|
||||
}
|
||||
}
|
||||
if(SNR_flag){
|
||||
uint8_t rssi = rsqStatus.resp.RSSI;
|
||||
if (rssi > 64) {
|
||||
rssi = 64;
|
||||
if (SNR_flag) {
|
||||
uint8_t rssi = rsqStatus.resp.RSSI;
|
||||
if (rssi > 64) {
|
||||
rssi = 64;
|
||||
}
|
||||
for (int i = 0; i < rssi * 2; ++i) {
|
||||
gFrameBuffer[0][i] |= 0b00111100;
|
||||
}
|
||||
|
||||
|
||||
sprintf(String, "SNR %u", rsqStatus.resp.SNR);
|
||||
|
||||
GUI_DisplaySmallest(String, 0, 15 - 8, false, true);
|
||||
}
|
||||
for (int i = 0; i < rssi * 2; ++i) {
|
||||
gFrameBuffer[0][i] |= 0b00111100;
|
||||
}
|
||||
|
||||
|
||||
sprintf(String, "SNR %u", rsqStatus.resp.SNR);
|
||||
|
||||
GUI_DisplaySmallest(String, 0, 15 - 8, false, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -349,7 +352,7 @@ static void OnKeyDownFreqInput(uint8_t key) {
|
||||
}
|
||||
|
||||
|
||||
void HandleUserInput() {
|
||||
bool HandleUserInput() {
|
||||
kbds.prev = kbds.current;
|
||||
kbds.current = GetKey();
|
||||
bool KEY_TYPE1 = false, KEY_TYPE2 = false, KEY_TYPE3 = false;
|
||||
@ -384,15 +387,15 @@ void HandleUserInput() {
|
||||
light_open();
|
||||
display_flag = 1;
|
||||
}
|
||||
SI_key(kbds.current, KEY_TYPE1, KEY_TYPE2, KEY_TYPE3, kbds.prev);
|
||||
return SI_key(kbds.current, KEY_TYPE1, KEY_TYPE2, KEY_TYPE3, kbds.prev);
|
||||
|
||||
}
|
||||
|
||||
void SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3, KEY_Code_t key_prev) {
|
||||
bool SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3, KEY_Code_t key_prev) {
|
||||
// up-down keys
|
||||
if (INPUT_STATE && KEY_TYPE3) {
|
||||
OnKeyDownFreqInput(key_prev);
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
if (KEY_TYPE1 || KEY_TYPE3) {
|
||||
if (KEY_TYPE3)key = key_prev;
|
||||
@ -400,42 +403,42 @@ void SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3, KEY_
|
||||
case KEY_UP:
|
||||
tune((siCurrentFreq + step) * divider);
|
||||
resetBFO();
|
||||
return;
|
||||
return 1;
|
||||
case KEY_DOWN:
|
||||
tune((siCurrentFreq - step) * divider);
|
||||
resetBFO();
|
||||
return;
|
||||
return 1;
|
||||
#ifdef ENABLE_4732SSB
|
||||
case KEY_SIDE1:
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (bfo < INT16_MAX - 10) {
|
||||
bfo += 10;
|
||||
case KEY_SIDE1:
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (bfo < INT16_MAX - 10) {
|
||||
bfo += 10;
|
||||
}
|
||||
SI47XX_SetBFO(bfo);
|
||||
}
|
||||
SI47XX_SetBFO(bfo);
|
||||
}
|
||||
return;
|
||||
case KEY_SIDE2:
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (bfo > INT16_MIN + 10) {
|
||||
bfo -= 10;
|
||||
}
|
||||
SI47XX_SetBFO(bfo);
|
||||
return 1;
|
||||
case KEY_SIDE2:
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (bfo > INT16_MIN + 10) {
|
||||
bfo -= 10;
|
||||
}
|
||||
SI47XX_SetBFO(bfo);
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
return 1;
|
||||
#endif
|
||||
case KEY_2:
|
||||
if (att < 37) {
|
||||
att++;
|
||||
SI47XX_SetAutomaticGainControl(1, att);
|
||||
}
|
||||
return;
|
||||
return 1;
|
||||
case KEY_8:
|
||||
if (att > 0) {
|
||||
att--;
|
||||
SI47XX_SetAutomaticGainControl(att > 0, att);
|
||||
}
|
||||
return;
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -453,9 +456,9 @@ void SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3, KEY_
|
||||
step *= 2;
|
||||
}
|
||||
}
|
||||
return;
|
||||
return 1;
|
||||
case KEY_4:
|
||||
SNR_flag=!SNR_flag;
|
||||
SNR_flag = !SNR_flag;
|
||||
case KEY_7:
|
||||
if (step > 1) {
|
||||
if (step == 1 || step == 10 || step == 100 || step == 1000) {
|
||||
@ -464,37 +467,37 @@ void SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3, KEY_
|
||||
step /= 5;
|
||||
}
|
||||
}
|
||||
return;
|
||||
return 1;
|
||||
|
||||
case KEY_6:
|
||||
#ifdef ENABLE_4732SSB
|
||||
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (ssbBw == SI47XX_SSB_BW_1_0_kHz) {
|
||||
ssbBw = SI47XX_SSB_BW_1_2_kHz;
|
||||
} else {
|
||||
ssbBw++;
|
||||
}
|
||||
SI47XX_SetSsbBandwidth(ssbBw);
|
||||
} else {
|
||||
if (SI47XX_IsSSB()) {
|
||||
if (ssbBw == SI47XX_SSB_BW_1_0_kHz) {
|
||||
ssbBw = SI47XX_SSB_BW_1_2_kHz;
|
||||
} else {
|
||||
ssbBw++;
|
||||
}
|
||||
SI47XX_SetSsbBandwidth(ssbBw);
|
||||
} else {
|
||||
#endif
|
||||
if (bw == SI47XX_BW_1_kHz) {
|
||||
bw = SI47XX_BW_6_kHz;
|
||||
} else {
|
||||
bw++;
|
||||
}
|
||||
SI47XX_SetBandwidth(bw, true);
|
||||
if (bw == SI47XX_BW_1_kHz) {
|
||||
bw = SI47XX_BW_6_kHz;
|
||||
} else {
|
||||
bw++;
|
||||
}
|
||||
SI47XX_SetBandwidth(bw, true);
|
||||
#ifdef ENABLE_4732SSB
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return;
|
||||
return 1;
|
||||
|
||||
case KEY_5:
|
||||
INPUT_STATE = 1;
|
||||
FreqInput();
|
||||
return;
|
||||
return 1;
|
||||
case KEY_0:
|
||||
divider = 100;
|
||||
WaitDisplay();
|
||||
@ -507,13 +510,13 @@ if (SI47XX_IsSSB()) {
|
||||
#ifdef ENABLE_4732SSB
|
||||
|
||||
|
||||
else if (si4732mode == SI47XX_AM) {
|
||||
else if (si4732mode == SI47XX_AM) {
|
||||
|
||||
SI47XX_SwitchMode(SI47XX_LSB);
|
||||
SI47XX_SetSsbBandwidth(ssbBw);
|
||||
// tune(711300);
|
||||
step = 1;
|
||||
}
|
||||
SI47XX_SwitchMode(SI47XX_LSB);
|
||||
SI47XX_SetSsbBandwidth(ssbBw);
|
||||
// tune(711300);
|
||||
step = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
else {
|
||||
@ -524,17 +527,16 @@ if (SI47XX_IsSSB()) {
|
||||
}
|
||||
tune(Read_FreqSaved());
|
||||
resetBFO();
|
||||
return;
|
||||
return 1;
|
||||
#ifdef ENABLE_4732SSB
|
||||
|
||||
case KEY_F:
|
||||
if (SI47XX_IsSSB()) {
|
||||
uint32_t tmpF;
|
||||
SI47XX_SwitchMode(si4732mode == SI47XX_LSB ? SI47XX_USB : SI47XX_LSB);
|
||||
tune(Read_FreqSaved()); // to apply SSB
|
||||
return;
|
||||
}
|
||||
return;
|
||||
case KEY_F:
|
||||
if (SI47XX_IsSSB()) {
|
||||
uint32_t tmpF;
|
||||
SI47XX_SwitchMode(si4732mode == SI47XX_LSB ? SI47XX_USB : SI47XX_LSB);
|
||||
tune(Read_FreqSaved()); // to apply SSB
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
case KEY_EXIT:
|
||||
@ -542,17 +544,15 @@ if (SI47XX_IsSSB()) {
|
||||
SI47XX_PowerDown();
|
||||
SI47XX_PowerUp();
|
||||
seeking = false;
|
||||
return;
|
||||
}
|
||||
SI_run = false;
|
||||
return;
|
||||
} else SI_run = false;
|
||||
return 1;
|
||||
case KEY_3:
|
||||
case KEY_9:
|
||||
#ifdef ENABLE_4732SSB
|
||||
|
||||
if (SI47XX_IsSSB()) {
|
||||
return;
|
||||
}
|
||||
if (SI47XX_IsSSB()) {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
if (si4732mode == SI47XX_FM) {
|
||||
SI47XX_SetSeekFmSpacing(step);
|
||||
@ -566,14 +566,12 @@ if (SI47XX_IsSSB()) {
|
||||
|
||||
|
||||
seeking = true;
|
||||
return;
|
||||
|
||||
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -592,23 +590,21 @@ void SI4732_Main() {
|
||||
if (light_time == 0)BACKLIGHT_TurnOff();
|
||||
}
|
||||
if (cnt == 500) {
|
||||
if (si4732mode == SI47XX_FM) {
|
||||
SI47XX_GetRDS();
|
||||
}
|
||||
if(SNR_flag) {
|
||||
RSQ_GET();
|
||||
UI_DisplayClear();
|
||||
DrawPower();
|
||||
ST7565_BlitStatusLine();
|
||||
}
|
||||
cnt = 0;
|
||||
display_flag = 1;
|
||||
|
||||
if (si4732mode == SI47XX_FM) {
|
||||
if(SI47XX_GetRDS()) display_flag = 1;
|
||||
}
|
||||
if (SNR_flag) {
|
||||
RSQ_GET();
|
||||
display_flag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (cnt % 25 == 0) {
|
||||
HandleUserInput();
|
||||
|
||||
|
||||
if (HandleUserInput()) display_flag = 1;
|
||||
}
|
||||
|
||||
if (seeking && cnt % 100 == 0) {
|
||||
@ -616,7 +612,7 @@ void SI4732_Main() {
|
||||
bool valid = false;
|
||||
siCurrentFreq = SI47XX_getFrequency(&valid);
|
||||
uint32_t f = siCurrentFreq * divider;
|
||||
EEPROM_WriteBuffer(SI4732_FREQ_ADD + si4732mode * 4, (uint8_t *) &f, 4);
|
||||
EEPROM_WriteBuffer(SI4732_FREQ_ADD + si4732mode * 4, (uint8_t * ) & f, 4);
|
||||
|
||||
if (valid) {
|
||||
seeking = false;
|
||||
|
4
app/si.h
4
app/si.h
@ -8,11 +8,11 @@
|
||||
|
||||
void SI_init();
|
||||
void SI_update();
|
||||
void SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3,KEY_Code_t key_prev) ;
|
||||
bool SI_key(KEY_Code_t key, bool KEY_TYPE1, bool KEY_TYPE2, bool KEY_TYPE3,KEY_Code_t key_prev) ;
|
||||
|
||||
void SI_render();
|
||||
void SI_deinit();
|
||||
void Key_FM(KeyboardState kbds) ;
|
||||
void HandleUserInput() ;
|
||||
bool HandleUserInput() ;
|
||||
void SI4732_Main();
|
||||
#endif /* end of include guard: APP_SI_H */
|
||||
|
@ -44,7 +44,7 @@ void SI47XX_ClearRDS() {
|
||||
rds.offset = NO_DATE_TIME;
|
||||
}
|
||||
|
||||
void SI47XX_GetRDS() {
|
||||
bool SI47XX_GetRDS() {
|
||||
|
||||
bool new_info = false;
|
||||
uint8_t segment;
|
||||
@ -267,6 +267,7 @@ void SI47XX_GetRDS() {
|
||||
new_info = true;
|
||||
}
|
||||
}
|
||||
return new_info;
|
||||
}
|
||||
|
||||
#define DAYS_PER_YEAR 365U
|
||||
|
@ -128,7 +128,7 @@ bool SI47XX_GetLocalDateTime(DateTime *time);
|
||||
bool SI47XX_GetLocalTime(Time *time);
|
||||
void SI47XX_GetProgramType(char buffer[17]);
|
||||
void SI47XX_ClearRDS();
|
||||
void SI47XX_GetRDS();
|
||||
bool SI47XX_GetRDS();
|
||||
|
||||
extern RDS rds;
|
||||
extern si47x_rds_status rdsResponse;
|
||||
|
Reference in New Issue
Block a user