flipperzero-firmware/lib/infrared/encoder_decoder/common/infrared_common_i.h
Georgii Surkov 8582670a34
[FL-2811] Fix PVS-Studio warnings (#2142)
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2022-12-26 21:13:30 +09:00

90 lines
3.1 KiB
C

#pragma once
#include <stdint.h>
#include "infrared.h"
#include "infrared_i.h"
#define MATCH_TIMING(x, v, delta) (((x) < ((v) + (delta))) && ((x) > ((v) - (delta))))
typedef struct InfraredCommonDecoder InfraredCommonDecoder;
typedef struct InfraredCommonEncoder InfraredCommonEncoder;
typedef InfraredStatus (*InfraredCommonDecode)(InfraredCommonDecoder*, bool, uint32_t);
typedef InfraredStatus (*InfraredCommonDecodeRepeat)(InfraredCommonDecoder*);
typedef bool (*InfraredCommonInterpret)(InfraredCommonDecoder*);
typedef InfraredStatus (
*InfraredCommonEncode)(InfraredCommonEncoder* encoder, uint32_t* out, bool* polarity);
typedef struct {
InfraredTimings timings;
bool manchester_start_from_space;
bool no_stop_bit;
uint8_t databit_len[4];
InfraredCommonDecode decode;
InfraredCommonDecodeRepeat decode_repeat;
InfraredCommonInterpret interpret;
InfraredCommonEncode encode;
InfraredCommonEncode encode_repeat;
} InfraredCommonProtocolSpec;
typedef enum {
InfraredCommonDecoderStateWaitPreamble,
InfraredCommonDecoderStateDecode,
InfraredCommonDecoderStateProcessRepeat,
} InfraredCommonStateDecoder;
typedef enum {
InfraredCommonEncoderStateSilence,
InfraredCommonEncoderStatePreamble,
InfraredCommonEncoderStateEncode,
InfraredCommonEncoderStateEncodeRepeat,
} InfraredCommonStateEncoder;
struct InfraredCommonDecoder {
const InfraredCommonProtocolSpec* protocol;
void* context;
uint32_t timings[6];
InfraredMessage message;
InfraredCommonStateDecoder state;
uint8_t timings_cnt;
bool switch_detect;
bool level;
uint16_t databit_cnt;
uint8_t data[];
};
struct InfraredCommonEncoder {
const InfraredCommonProtocolSpec* protocol;
InfraredCommonStateEncoder state;
bool switch_detect;
uint8_t bits_to_encode;
uint8_t bits_encoded;
uint32_t timings_sum;
uint32_t timings_encoded;
void* context;
uint8_t data[];
};
InfraredMessage*
infrared_common_decode(InfraredCommonDecoder* decoder, bool level, uint32_t duration);
InfraredStatus
infrared_common_decode_pdwm(InfraredCommonDecoder* decoder, bool level, uint32_t timing);
InfraredStatus
infrared_common_decode_manchester(InfraredCommonDecoder* decoder, bool level, uint32_t timing);
void* infrared_common_decoder_alloc(const InfraredCommonProtocolSpec* protocol);
void infrared_common_decoder_free(InfraredCommonDecoder* decoder);
void infrared_common_decoder_reset(InfraredCommonDecoder* decoder);
InfraredMessage* infrared_common_decoder_check_ready(InfraredCommonDecoder* decoder);
InfraredStatus
infrared_common_encode(InfraredCommonEncoder* encoder, uint32_t* duration, bool* polarity);
InfraredStatus
infrared_common_encode_pdwm(InfraredCommonEncoder* encoder, uint32_t* duration, bool* polarity);
InfraredStatus infrared_common_encode_manchester(
InfraredCommonEncoder* encoder,
uint32_t* duration,
bool* polarity);
void* infrared_common_encoder_alloc(const InfraredCommonProtocolSpec* protocol);
void infrared_common_encoder_free(InfraredCommonEncoder* encoder);
void infrared_common_encoder_reset(InfraredCommonEncoder* encoder);