Skorp subghz capture refactoring (#569)
* SubGhz: changing the operation of the capture timer, and the logic of the work of parsers * Add toolbox lib. Move levels to toolbox. Subghz switch to levels. * Subghz: update worker signatures * SubGhz: pluggable level duration implementations. * SubGhz : test drawing pictures in Gui * SubGhz: Added a callback with the parser structure as argument * SubGhz: copy protocol data to model * SubGhz: refactoing code * SubGhz: cleanup and format sources * SubGhz: remove comments Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com> Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <toolbox/level_duration.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -107,21 +108,8 @@ uint32_t api_hal_subghz_set_frequency(uint32_t value);
|
||||
*/
|
||||
void api_hal_subghz_set_path(ApiHalSubGhzPath path);
|
||||
|
||||
/** Front Definition for capture callback */
|
||||
typedef enum {
|
||||
ApiHalSubGhzCaptureLevelHigh,
|
||||
ApiHalSubGhzCaptureLevelLow,
|
||||
ApiHalSubGhzCaptureLevelOverrun,
|
||||
ApiHalSubGhzCaptureLevelUnderrun,
|
||||
} ApiHalSubGhzCaptureLevel;
|
||||
|
||||
typedef struct {
|
||||
ApiHalSubGhzCaptureLevel level;
|
||||
uint32_t duration;
|
||||
} LevelPair;
|
||||
|
||||
/** Signal Timings Capture callback */
|
||||
typedef void (*ApiHalSubGhzCaptureCallback)(ApiHalSubGhzCaptureLevel level, uint32_t time, void* context);
|
||||
typedef void (*ApiHalSubGhzCaptureCallback)(bool level, uint32_t duration, void* context);
|
||||
|
||||
/** Set signal timings capture callback
|
||||
* @param callback - your callback for front capture
|
||||
|
@@ -292,9 +292,7 @@ static void api_hal_subghz_capture_ISR() {
|
||||
LL_TIM_ClearFlag_CC1(TIM2);
|
||||
api_hal_subghz_capture_delta_duration = LL_TIM_IC_GetCaptureCH1(TIM2);
|
||||
if (api_hal_subghz_capture_callback) {
|
||||
api_hal_subghz_capture_callback(
|
||||
ApiHalSubGhzCaptureLevelHigh,
|
||||
api_hal_subghz_capture_delta_duration,
|
||||
api_hal_subghz_capture_callback(true, api_hal_subghz_capture_delta_duration,
|
||||
(void*)api_hal_subghz_capture_callback_context
|
||||
);
|
||||
}
|
||||
@@ -303,9 +301,7 @@ static void api_hal_subghz_capture_ISR() {
|
||||
if(LL_TIM_IsActiveFlag_CC2(TIM2)) {
|
||||
LL_TIM_ClearFlag_CC2(TIM2);
|
||||
if (api_hal_subghz_capture_callback) {
|
||||
api_hal_subghz_capture_callback(
|
||||
ApiHalSubGhzCaptureLevelLow,
|
||||
LL_TIM_IC_GetCaptureCH2(TIM2) - api_hal_subghz_capture_delta_duration,
|
||||
api_hal_subghz_capture_callback(false, LL_TIM_IC_GetCaptureCH2(TIM2) - api_hal_subghz_capture_delta_duration,
|
||||
(void*)api_hal_subghz_capture_callback_context
|
||||
);
|
||||
}
|
||||
@@ -323,7 +319,7 @@ void api_hal_subghz_enable_capture() {
|
||||
LL_TIM_InitTypeDef TIM_InitStruct = {0};
|
||||
TIM_InitStruct.Prescaler = 64-1;
|
||||
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
|
||||
TIM_InitStruct.Autoreload = 0xFFFFFFFF;
|
||||
TIM_InitStruct.Autoreload = 0x7FFFFFFE;
|
||||
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
|
||||
LL_TIM_Init(TIM2, &TIM_InitStruct);
|
||||
|
||||
|
Reference in New Issue
Block a user