* IR: Doxygen docs, some rename * Rename irda -> infrared * Rollback collateral renames Co-authored-by: あく <alleteam@gmail.com>
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/**
 | 
						|
  * @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;
 | 
						|
    }
 | 
						|
};
 |