Issue #17: Add override function for deltas of rotary encoder
This commit is contained in:
		@@ -41,4 +41,6 @@ void rotary_encoder_stop(void);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void rotary_encoder_zero(void);
 | 
					void rotary_encoder_zero(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void rotary_encoder_override_delta(int16_t delta);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ROTARY_ENCODER_H__ */
 | 
					#endif /* __ROTARY_ENCODER_H__ */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,8 @@
 | 
				
			|||||||
#include <stm-periph/stm32-gpio-macros.h>
 | 
					#include <stm-periph/stm32-gpio-macros.h>
 | 
				
			||||||
#include <helper-macros/helper-macros.h>
 | 
					#include <helper-macros/helper-macros.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int16_t IN_SECTION(.ccm.bss) override_delta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void rotary_encoder_setup_pins(void)
 | 
					static inline void rotary_encoder_setup_pins(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	rcc_manager_enable_clock(&RCC->AHB1ENR, BITMASK_TO_BITNO(ROTARY_ENCODER_RCC_MASK));
 | 
						rcc_manager_enable_clock(&RCC->AHB1ENR, BITMASK_TO_BITNO(ROTARY_ENCODER_RCC_MASK));
 | 
				
			||||||
@@ -45,6 +47,8 @@ void rotary_encoder_setup(void)
 | 
				
			|||||||
	ROTARY_ENCODER_TIMER->CCER = TIM_CCER_CC1P | TIM_CCER_CC2P;
 | 
						ROTARY_ENCODER_TIMER->CCER = TIM_CCER_CC1P | TIM_CCER_CC2P;
 | 
				
			||||||
	ROTARY_ENCODER_TIMER->PSC = 0;
 | 
						ROTARY_ENCODER_TIMER->PSC = 0;
 | 
				
			||||||
	ROTARY_ENCODER_TIMER->CR1 = TIM_CR1_CEN;
 | 
						ROTARY_ENCODER_TIMER->CR1 = TIM_CR1_CEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						override_delta = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32_t rotary_encoder_get_abs_val(void)
 | 
					uint32_t rotary_encoder_get_abs_val(void)
 | 
				
			||||||
@@ -72,6 +76,9 @@ int32_t rotary_encoder_get_change_val(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	last_val = val;
 | 
						last_val = val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						diff += override_delta;
 | 
				
			||||||
 | 
						override_delta = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return diff;
 | 
						return diff;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -88,3 +95,8 @@ void rotary_encoder_zero(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ROTARY_ENCODER_TIMER->CNT = 0UL;
 | 
						ROTARY_ENCODER_TIMER->CNT = 0UL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void rotary_encoder_override_delta(int16_t delta)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						override_delta = delta;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user