| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /**
- * @file infrared_app_signal.h
- * Infrared: Signal class
- */
- #pragma once
- #include <infrared_worker.h>
- #include <stdint.h>
- #include <string>
- #include <infrared.h>
- /** Infrared application signal class */
- class InfraredAppSignal {
- public:
- /** Raw signal structure */
- typedef struct {
- /** Timings amount */
- size_t timings_cnt;
- /** Samples of raw signal in ms */
- uint32_t* timings;
- /** PWM Frequency of raw signal */
- uint32_t frequency;
- /** PWM Duty cycle of raw signal */
- float duty_cycle;
- } RawSignal;
- private:
- /** if true - signal is raw, if false - signal is parsed */
- bool raw_signal;
- /** signal data, either raw or parsed */
- union {
- /** signal data for parsed signal */
- InfraredMessage message;
- /** raw signal data */
- RawSignal raw;
- } payload;
- /** Copy raw signal into object
- *
- * @param timings - timings (samples) of raw signal
- * @param size - number of timings
- * @frequency - PWM frequency of raw signal
- * @duty_cycle - PWM duty cycle
- */
- void
- copy_raw_signal(const uint32_t* timings, size_t size, uint32_t frequency, float duty_cycle);
- /** Clear and free timings data */
- void clear_timings();
- public:
- /** Construct Infrared signal class */
- InfraredAppSignal() {
- raw_signal = false;
- payload.message.protocol = InfraredProtocolUnknown;
- }
- /** Destruct signal class and free all allocated data */
- ~InfraredAppSignal() {
- clear_timings();
- }
- /** Construct object with raw signal
- *
- * @param timings - timings (samples) of raw signal
- * @param size - number of timings
- * @frequency - PWM frequency of raw signal
- * @duty_cycle - PWM duty cycle
- */
- InfraredAppSignal(
- const uint32_t* timings,
- size_t timings_cnt,
- uint32_t frequency,
- float duty_cycle);
- /** Construct object with parsed signal
- *
- * @param infrared_message - parsed_signal to construct from
- */
- InfraredAppSignal(const InfraredMessage* infrared_message);
- /** Copy constructor */
- InfraredAppSignal(const InfraredAppSignal& other);
- /** Move constructor */
- InfraredAppSignal(InfraredAppSignal&& other);
- /** Assignment operator */
- InfraredAppSignal& operator=(const InfraredAppSignal& signal);
- /** Set object to parsed signal
- *
- * @param infrared_message - parsed_signal to construct from
- */
- void set_message(const InfraredMessage* infrared_message);
- /** Set object to raw signal
- *
- * @param timings - timings (samples) of raw signal
- * @param size - number of timings
- * @frequency - PWM frequency of raw signal
- * @duty_cycle - PWM duty cycle
- */
- void
- set_raw_signal(uint32_t* timings, size_t timings_cnt, uint32_t frequency, float duty_cycle);
- /** Transmit held signal (???) */
- void transmit() const;
- /** Show is held signal raw
- *
- * @retval true if signal is raw, false if signal is parsed
- */
- bool is_raw(void) const {
- return raw_signal;
- }
- /** Get parsed signal.
- * User must check is_raw() signal before calling this function.
- *
- * @retval parsed signal pointer
- */
- const InfraredMessage& get_message(void) const {
- furi_assert(!raw_signal);
- return payload.message;
- }
- /** Get raw signal.
- * User must check is_raw() signal before calling this function.
- *
- * @retval raw signal
- */
- const RawSignal& get_raw_signal(void) const {
- furi_assert(raw_signal);
- return payload.raw;
- }
- };
|