diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index df1af88dd..68393573e 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -39,9 +39,10 @@ #define KEYS_GPIO_PIN_RIGHT GPIO_Pin_4 // PC.04 // Rotary Encoder -#define ENC_GPIO GPIOH -#define ENC_GPIO_PIN_A GPIO_Pin_11 // PH.11 -#define ENC_GPIO_PIN_B GPIO_Pin_10 // PH.10 +#define ROTARY_ENCODER_GPIO GPIOH +#define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_11 // PH.11 +#define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_10 // PH.10 +#define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x03) // Switches #define SWITCHES_GPIO_REG_A_H GPIOH->IDR @@ -105,7 +106,7 @@ #define KEYS_GPIOD_PINS (SWITCHES_GPIO_PIN_C_H | TRIMS_GPIO_PIN_LHL | TRIMS_GPIO_PIN_LHR | TRIMS_GPIO_PIN_RSU) #define KEYS_GPIOE_PINS (SWITCHES_GPIO_PIN_E_L) #define KEYS_GPIOG_PINS (KEYS_GPIO_PIN_UP | SWITCHES_GPIO_PIN_D_L | SWITCHES_GPIO_PIN_G_H | SWITCHES_GPIO_PIN_G_L | SWITCHES_GPIO_PIN_H | TRIMS_GPIO_PIN_RVD) -#define KEYS_GPIOH_PINS (SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_F | ENC_GPIO_PIN_A | ENC_GPIO_PIN_B) +#define KEYS_GPIOH_PINS (SWITCHES_GPIO_PIN_A_H | SWITCHES_GPIO_PIN_B_H | SWITCHES_GPIO_PIN_E_H | SWITCHES_GPIO_PIN_F | ROTARY_ENCODER_GPIO_PIN_A | ROTARY_ENCODER_GPIO_PIN_B) #define KEYS_GPIOI_PINS (KEYS_GPIO_PIN_EXIT | KEYS_GPIO_PIN_LEFT | KEYS_GPIO_PIN_DOWN | SWITCHES_GPIO_PIN_A_L | TRIMS_GPIO_PIN_RHR) #define KEYS_GPIOJ_PINS (SWITCHES_GPIO_PIN_D_H | TRIMS_GPIO_PIN_RVU | TRIMS_GPIO_PIN_LVD | TRIMS_GPIO_PIN_LVU | TRIMS_GPIO_PIN_RSD) diff --git a/radio/src/targets/horus/keys_driver.cpp b/radio/src/targets/horus/keys_driver.cpp index 2c40ee6a5..009fb427b 100644 --- a/radio/src/targets/horus/keys_driver.cpp +++ b/radio/src/targets/horus/keys_driver.cpp @@ -90,23 +90,18 @@ uint8_t keyDown() } int32_t rotencValue; +uint32_t rotencPosition; void checkRotaryEncoder() { - static uint32_t Rotary_position; - register uint32_t dummy ; - - dummy = ENC_GPIO->IDR ; // Read Rotary encode - dummy >>= 10; // quick & dirty! - dummy &= 0x03 ; // pick out the two bits - if ( dummy != ( Rotary_position & 0x03 ) ) { - if ( ( Rotary_position & 0x01 ) ^ ( ( dummy & 0x02) >> 1 ) ) { + register uint32_t newpos = ROTARY_ENCODER_POSITION(); + if (newpos != rotencPosition) { + if ((rotencPosition & 0x01) ^ ((newpos & 0x02) >> 1)) { --rotencValue; } else { ++rotencValue; } - Rotary_position &= ~0x03 ; - Rotary_position |= dummy ; + rotencPosition = newpos; } } @@ -227,4 +222,6 @@ void keysInit() GPIO_InitStructure.GPIO_Pin = KEYS_GPIOJ_PINS; GPIO_Init(GPIOJ, &GPIO_InitStructure); + + rotencPosition = ROTARY_ENCODER_POSITION(); }