improvement

This commit is contained in:
Sheikah 2023-01-30 23:19:38 +08:00
parent 09d687dcdf
commit 0f649630e6
4 changed files with 28 additions and 18 deletions

View File

@ -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_state = (ticks_ms() / UI_BLINK_MS) % 2;
uint8_t blink_state2 = !(global_data.point_mode & G_PMOD_PBLINK_MASK); 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)) { 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; uint16_t p_off = (4 - p_pos) * 18 + 2 + off_x;
ST7735_FillRectangle(p_off, off_y + 33, 14, 2, color_orange); 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 { } 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; uint16_t scale = 10000;

View File

@ -42,7 +42,7 @@ void app_main_loop() {
if (event_type == kp_ROTATE_RIGHT || event_type == kp_ROTATE_LEFT) { if (event_type == kp_ROTATE_RIGHT || event_type == kp_ROTATE_LEFT) {
if (global_data.point_mode & G_PMOD_MODE_MASK) { 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 (global_data.point_mode & G_PMOD_PMOVE_MASK) {
// 调整指针位置 // 调整指针位置
if (event_type == kp_ROTATE_RIGHT) { if (event_type == kp_ROTATE_RIGHT) {
@ -52,8 +52,7 @@ void app_main_loop() {
p_pos += event_value; p_pos += event_value;
} }
p_pos %= 5; // 0~4, 右边第一个数值为0号位置 p_pos %= 5; // 0~4, 右边第一个数值为0号位置
global_data.point_mode = global_data.point_mode & (~G_POMD_POS_MASK); bit_replace(global_data.point_mode, p_pos, G_POMD_POS_BOFF, G_POMD_POS_MASK);
global_data.point_mode = global_data.point_mode | ((p_pos << G_POMD_POS_BOFF) & G_POMD_POS_MASK);
printf("Adjust Point Pos: %u\n", p_pos); printf("Adjust Point Pos: %u\n", p_pos);
} else { } else {
// 调整指针位置的数字 // 调整指针位置的数字
@ -120,6 +119,8 @@ void app_main_loop() {
global_data.freq = num_freq / 5; global_data.freq = num_freq / 5;
} }
printf("Adjust Freq: %u\n", global_data.freq); printf("Adjust Freq: %u\n", global_data.freq);
__limit_freq_range();
__send_freq();
} }
} else { } else {
// 直接调整频率 // 直接调整频率
@ -128,9 +129,9 @@ void app_main_loop() {
} else { } else {
global_data.freq -= event_value; global_data.freq -= event_value;
} }
printf("Adjust Freq: %u\n", global_data.freq);
__limit_freq_range(); __limit_freq_range();
__send_freq(); __send_freq();
printf("Adjust Freq: %u\n", global_data.freq);
} }
ui_com_freq_digital(1, 0); ui_com_freq_digital(1, 0);
} else if (event_type == kp_SHORT_CLICK) { } else if (event_type == kp_SHORT_CLICK) {
@ -138,16 +139,16 @@ void app_main_loop() {
if (event_value == kp_KEYENCODER) { if (event_value == kp_KEYENCODER) {
if (global_data.point_mode & G_PMOD_PMOVE_MASK) { 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"); printf("Exit Pointer Move Mode.\n");
} else { } 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; // 该时间段指示条消失 uint8_t blink_state = (ticks_ms() / UI_BLINK_MS) % 2; // 该时间段指示条消失
if (blink_state) { 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 { } 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"); printf("Enter Pointer Move Mode.\n");
} }
@ -171,14 +172,12 @@ void app_main_loop() {
if (event_value == kp_KEYENCODER) { if (event_value == kp_KEYENCODER) {
if (global_data.point_mode & G_PMOD_MODE_MASK) { if (global_data.point_mode & G_PMOD_MODE_MASK) {
// 退出指针模式 // 退出指针模式
global_data.point_mode = global_data.point_mode & (~G_PMOD_MODE_MASK); bit_clear(global_data.point_mode, G_PMOD_MODE_MASK);
__limit_freq_range();
__send_freq();
printf("Exit Pointer Mode.\n"); printf("Exit Pointer Mode.\n");
} else { } else {
// 进入指针模式 // 进入指针模式
global_data.point_mode = global_data.point_mode | G_PMOD_MODE_MASK; bit_set(global_data.point_mode, G_PMOD_MODE_MASK);
global_data.point_mode = global_data.point_mode & (~G_PMOD_PMOVE_MASK); bit_clear(global_data.point_mode, G_PMOD_PMOVE_MASK);
printf("Enter Pointer Mode.\n"); printf("Enter Pointer Mode.\n");
} }
ui_com_freq_digital(1, 0); ui_com_freq_digital(1, 0);

View File

@ -2,6 +2,7 @@
#include "global.h" #include "global.h"
GlobalData global_data = { GlobalData global_data = {
0b0000000000000000, //flag
880 * 2, // freq 880 * 2, // freq
G_RF_MODE_FM, //rf_mode G_RF_MODE_FM, //rf_mode
16, // volumn 16, // volumn

View File

@ -8,16 +8,26 @@
#define G_AM_FREQ_MIN 100 #define G_AM_FREQ_MIN 100
#define G_AM_FREQ_MAX 33000 #define G_AM_FREQ_MAX 33000
#define G_FL_SIGNAL 0b0000000000000001
#define G_PMOD_MODE_MASK 0b00000001 #define G_PMOD_MODE_MASK 0b00000001
#define G_PMOD_PMOVE_MASK 0b00000010 #define G_PMOD_PMOVE_MASK 0b00000010
#define G_POMD_POS_MASK 0b00011100 #define G_POMD_POS_MASK 0b00011100
#define G_POMD_POS_BOFF 2 #define G_POMD_POS_BOFF 2
#define G_POMD_POS_BLEN 3
#define G_PMOD_PBLINK_MASK 0b00100000 #define G_PMOD_PBLINK_MASK 0b00100000
#define G_PMOD_PBLINK2_MASK 0b01000000 #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 { typedef struct GlobalData {
/** FM x50kHz AM x1kHz */ /** FM x50kHz AM x1kHz */
/** 各种flag
* bit 0 signal改变flag
*/
uint16_t flag;
uint16_t freq; uint16_t freq;
uint8_t rf_mode; uint8_t rf_mode;
uint8_t volumn; uint8_t volumn;
@ -29,7 +39,7 @@ typedef struct GlobalData {
* bit 5 () * bit 5 ()
* bit 6 () * bit 6 ()
*/ */
volatile uint8_t point_mode; uint8_t point_mode;
} GlobalData; } GlobalData;
extern GlobalData global_data; extern GlobalData global_data;