[FL-1929, FL-2164] IR App migrate to FFF (#949)
* IR app move to FFF * [FL-2164] Hide unimplemented submenus * Fix brute force fail * Fix FFF endless reading * Reformat TV bruteforce lib to FFF * fixes & cleanup * Infrared: switch to constexpr. Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
@@ -1,10 +1,16 @@
|
||||
#include "irda_app_signal.h"
|
||||
#include <irda_transmit.h>
|
||||
|
||||
void IrdaAppSignal::copy_timings(const uint32_t* timings, size_t size) {
|
||||
void IrdaAppSignal::copy_raw_signal(
|
||||
const uint32_t* timings,
|
||||
size_t size,
|
||||
uint32_t frequency,
|
||||
float duty_cycle) {
|
||||
furi_assert(size);
|
||||
furi_assert(timings);
|
||||
|
||||
payload.raw.frequency = frequency;
|
||||
payload.raw.duty_cycle = duty_cycle;
|
||||
payload.raw.timings_cnt = size;
|
||||
if(size) {
|
||||
payload.raw.timings = new uint32_t[size];
|
||||
@@ -13,83 +19,100 @@ void IrdaAppSignal::copy_timings(const uint32_t* timings, size_t size) {
|
||||
}
|
||||
|
||||
void IrdaAppSignal::clear_timings() {
|
||||
if(!decoded) {
|
||||
if(raw_signal) {
|
||||
delete[] payload.raw.timings;
|
||||
payload.raw.timings_cnt = 0;
|
||||
payload.raw.timings = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
IrdaAppSignal::IrdaAppSignal(const uint32_t* timings, size_t timings_cnt) {
|
||||
decoded = false;
|
||||
copy_timings(timings, timings_cnt);
|
||||
IrdaAppSignal::IrdaAppSignal(
|
||||
const uint32_t* timings,
|
||||
size_t timings_cnt,
|
||||
uint32_t frequency,
|
||||
float duty_cycle) {
|
||||
raw_signal = true;
|
||||
copy_raw_signal(timings, timings_cnt, frequency, duty_cycle);
|
||||
}
|
||||
|
||||
IrdaAppSignal::IrdaAppSignal(const IrdaMessage* irda_message) {
|
||||
decoded = true;
|
||||
raw_signal = false;
|
||||
payload.message = *irda_message;
|
||||
}
|
||||
|
||||
IrdaAppSignal& IrdaAppSignal::operator=(const IrdaAppSignal& other) {
|
||||
clear_timings();
|
||||
decoded = other.decoded;
|
||||
if(decoded) {
|
||||
raw_signal = other.raw_signal;
|
||||
if(!raw_signal) {
|
||||
payload.message = other.payload.message;
|
||||
} else {
|
||||
copy_timings(other.payload.raw.timings, other.payload.raw.timings_cnt);
|
||||
copy_raw_signal(
|
||||
other.payload.raw.timings,
|
||||
other.payload.raw.timings_cnt,
|
||||
other.payload.raw.frequency,
|
||||
other.payload.raw.duty_cycle);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
IrdaAppSignal::IrdaAppSignal(const IrdaAppSignal& other) {
|
||||
decoded = other.decoded;
|
||||
if(decoded) {
|
||||
raw_signal = other.raw_signal;
|
||||
if(!raw_signal) {
|
||||
payload.message = other.payload.message;
|
||||
} else {
|
||||
copy_timings(other.payload.raw.timings, other.payload.raw.timings_cnt);
|
||||
copy_raw_signal(
|
||||
other.payload.raw.timings,
|
||||
other.payload.raw.timings_cnt,
|
||||
other.payload.raw.frequency,
|
||||
other.payload.raw.duty_cycle);
|
||||
}
|
||||
}
|
||||
|
||||
IrdaAppSignal::IrdaAppSignal(IrdaAppSignal&& other) {
|
||||
clear_timings();
|
||||
|
||||
decoded = other.decoded;
|
||||
if(decoded) {
|
||||
raw_signal = other.raw_signal;
|
||||
if(!raw_signal) {
|
||||
payload.message = other.payload.message;
|
||||
} else {
|
||||
furi_assert(other.payload.raw.timings_cnt > 0);
|
||||
|
||||
payload.raw.timings = other.payload.raw.timings;
|
||||
payload.raw.timings_cnt = other.payload.raw.timings_cnt;
|
||||
payload.raw.frequency = other.payload.raw.frequency;
|
||||
payload.raw.duty_cycle = other.payload.raw.duty_cycle;
|
||||
other.payload.raw.timings = nullptr;
|
||||
other.payload.raw.timings_cnt = 0;
|
||||
other.raw_signal = false;
|
||||
}
|
||||
}
|
||||
|
||||
void IrdaAppSignal::set_message(const IrdaMessage* irda_message) {
|
||||
clear_timings();
|
||||
decoded = true;
|
||||
raw_signal = false;
|
||||
payload.message = *irda_message;
|
||||
}
|
||||
|
||||
void IrdaAppSignal::set_raw_signal(uint32_t* timings, size_t timings_cnt) {
|
||||
void IrdaAppSignal::set_raw_signal(
|
||||
uint32_t* timings,
|
||||
size_t timings_cnt,
|
||||
uint32_t frequency,
|
||||
float duty_cycle) {
|
||||
clear_timings();
|
||||
decoded = false;
|
||||
payload.raw.timings = timings;
|
||||
payload.raw.timings_cnt = timings_cnt;
|
||||
}
|
||||
|
||||
void IrdaAppSignal::copy_raw_signal(uint32_t* timings, size_t timings_cnt) {
|
||||
clear_timings();
|
||||
decoded = false;
|
||||
copy_timings(timings, timings_cnt);
|
||||
raw_signal = true;
|
||||
copy_raw_signal(timings, timings_cnt, frequency, duty_cycle);
|
||||
}
|
||||
|
||||
void IrdaAppSignal::transmit() const {
|
||||
if(decoded) {
|
||||
if(!raw_signal) {
|
||||
irda_send(&payload.message, 1);
|
||||
} else {
|
||||
irda_send_raw(payload.raw.timings, payload.raw.timings_cnt, true);
|
||||
irda_send_raw_ext(
|
||||
payload.raw.timings,
|
||||
payload.raw.timings_cnt,
|
||||
true,
|
||||
payload.raw.frequency,
|
||||
payload.raw.duty_cycle);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user