From 0f649630e68a5c6ea5c59eb5220c2569b00302ad Mon Sep 17 00:00:00 2001 From: Sheikah <> Date: Mon, 30 Jan 2023 23:19:38 +0800 Subject: [PATCH] improvement --- Core/App/Graphic/ui.c | 6 +++--- Core/App/app.c | 25 ++++++++++++------------- Core/App/global.c | 1 + Core/App/global.h | 14 ++++++++++++-- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/Core/App/Graphic/ui.c b/Core/App/Graphic/ui.c index 16d2f7b..9c77ed8 100644 --- a/Core/App/Graphic/ui.c +++ b/Core/App/Graphic/ui.c @@ -105,12 +105,12 @@ void ui_com_freq_digital(uint8_t clear, uint8_t only_pointer) { uint8_t blink_state = (ticks_ms() / UI_BLINK_MS) % 2; uint8_t blink_state2 = !(global_data.point_mode & G_PMOD_PBLINK_MASK); if (!(global_data.point_mode & G_PMOD_PMOVE_MASK) || (blink_state ^ blink_state2)) { - uint8_t p_pos = (global_data.point_mode & G_POMD_POS_MASK) >> G_POMD_POS_BOFF; + uint8_t p_pos = bit_fetch(global_data.point_mode, G_POMD_POS_BOFF, G_POMD_POS_MASK); uint16_t p_off = (4 - p_pos) * 18 + 2 + off_x; ST7735_FillRectangle(p_off, off_y + 33, 14, 2, color_orange); - global_data.point_mode = global_data.point_mode | G_PMOD_PBLINK2_MASK; + bit_set(global_data.point_mode, G_PMOD_PBLINK2_MASK); } else { - global_data.point_mode = global_data.point_mode & (~G_PMOD_PBLINK2_MASK); + bit_clear(global_data.point_mode, G_PMOD_PBLINK2_MASK); } } uint16_t scale = 10000; diff --git a/Core/App/app.c b/Core/App/app.c index 6f8d8c9..87d4bcf 100644 --- a/Core/App/app.c +++ b/Core/App/app.c @@ -42,7 +42,7 @@ void app_main_loop() { if (event_type == kp_ROTATE_RIGHT || event_type == kp_ROTATE_LEFT) { if (global_data.point_mode & G_PMOD_MODE_MASK) { // 指针模式调整 - uint8_t p_pos = (global_data.point_mode & G_POMD_POS_MASK) >> G_POMD_POS_BOFF; + uint8_t p_pos = bit_fetch(global_data.point_mode, G_POMD_POS_BOFF, G_POMD_POS_MASK); if (global_data.point_mode & G_PMOD_PMOVE_MASK) { // 调整指针位置 if (event_type == kp_ROTATE_RIGHT) { @@ -52,8 +52,7 @@ void app_main_loop() { p_pos += event_value; } p_pos %= 5; // 0~4, 右边第一个数值为0号位置 - global_data.point_mode = global_data.point_mode & (~G_POMD_POS_MASK); - global_data.point_mode = global_data.point_mode | ((p_pos << G_POMD_POS_BOFF) & G_POMD_POS_MASK); + bit_replace(global_data.point_mode, p_pos, G_POMD_POS_BOFF, G_POMD_POS_MASK); printf("Adjust Point Pos: %u\n", p_pos); } else { // 调整指针位置的数字 @@ -120,6 +119,8 @@ void app_main_loop() { global_data.freq = num_freq / 5; } printf("Adjust Freq: %u\n", global_data.freq); + __limit_freq_range(); + __send_freq(); } } else { // 直接调整频率 @@ -128,9 +129,9 @@ void app_main_loop() { } else { global_data.freq -= event_value; } + printf("Adjust Freq: %u\n", global_data.freq); __limit_freq_range(); __send_freq(); - printf("Adjust Freq: %u\n", global_data.freq); } ui_com_freq_digital(1, 0); } else if (event_type == kp_SHORT_CLICK) { @@ -138,16 +139,16 @@ void app_main_loop() { if (event_value == kp_KEYENCODER) { if (global_data.point_mode & G_PMOD_PMOVE_MASK) { // 退出移动指针模式 - global_data.point_mode = global_data.point_mode & (~G_PMOD_PMOVE_MASK); + bit_clear(global_data.point_mode, G_PMOD_PMOVE_MASK); printf("Exit Pointer Move Mode.\n"); } else { // 进入移动指针模式 - global_data.point_mode = global_data.point_mode | G_PMOD_PMOVE_MASK; + bit_set(global_data.point_mode, G_PMOD_PMOVE_MASK); uint8_t blink_state = (ticks_ms() / UI_BLINK_MS) % 2; // 该时间段指示条消失 if (blink_state) { - global_data.point_mode = global_data.point_mode | G_PMOD_PBLINK_MASK; + bit_set(global_data.point_mode, G_PMOD_PBLINK_MASK); } else { - global_data.point_mode = global_data.point_mode & (~G_PMOD_PBLINK_MASK); + bit_clear(global_data.point_mode, G_PMOD_PBLINK_MASK); } printf("Enter Pointer Move Mode.\n"); } @@ -171,14 +172,12 @@ void app_main_loop() { if (event_value == kp_KEYENCODER) { if (global_data.point_mode & G_PMOD_MODE_MASK) { // 退出指针模式 - global_data.point_mode = global_data.point_mode & (~G_PMOD_MODE_MASK); - __limit_freq_range(); - __send_freq(); + bit_clear(global_data.point_mode, G_PMOD_MODE_MASK); printf("Exit Pointer Mode.\n"); } else { // 进入指针模式 - global_data.point_mode = global_data.point_mode | G_PMOD_MODE_MASK; - global_data.point_mode = global_data.point_mode & (~G_PMOD_PMOVE_MASK); + bit_set(global_data.point_mode, G_PMOD_MODE_MASK); + bit_clear(global_data.point_mode, G_PMOD_PMOVE_MASK); printf("Enter Pointer Mode.\n"); } ui_com_freq_digital(1, 0); diff --git a/Core/App/global.c b/Core/App/global.c index 157e727..c15e127 100644 --- a/Core/App/global.c +++ b/Core/App/global.c @@ -2,6 +2,7 @@ #include "global.h" GlobalData global_data = { + 0b0000000000000000, //flag 880 * 2, // freq G_RF_MODE_FM, //rf_mode 16, // volumn diff --git a/Core/App/global.h b/Core/App/global.h index 455fc7c..a41c8b9 100644 --- a/Core/App/global.h +++ b/Core/App/global.h @@ -8,16 +8,26 @@ #define G_AM_FREQ_MIN 100 #define G_AM_FREQ_MAX 33000 +#define G_FL_SIGNAL 0b0000000000000001 + #define G_PMOD_MODE_MASK 0b00000001 #define G_PMOD_PMOVE_MASK 0b00000010 #define G_POMD_POS_MASK 0b00011100 #define G_POMD_POS_BOFF 2 -#define G_POMD_POS_BLEN 3 #define G_PMOD_PBLINK_MASK 0b00100000 #define G_PMOD_PBLINK2_MASK 0b01000000 +#define bit_set(x, mask) (x = x | mask) +#define bit_clear(x, mask) (x = x & (~mask)) +#define bit_replace(x, v, voff, mask) ((x = x & (~mask)), (x = x | ((v << voff) & mask))) +#define bit_fetch(x, voff, mask) ((x & mask) >> voff) + typedef struct GlobalData { /** FM x50kHz AM x1kHz */ + /** 各种flag + * bit 0 signal改变flag + */ + uint16_t flag; uint16_t freq; uint8_t rf_mode; uint8_t volumn; @@ -29,7 +39,7 @@ typedef struct GlobalData { * bit 5 标记了当前时间段指针指示是否要显示(用于闪烁动画) * bit 6 标记了当前指针的状态(用于闪烁动画) */ - volatile uint8_t point_mode; + uint8_t point_mode; } GlobalData; extern GlobalData global_data;