Merge branch 'fz-dev' into dev

This commit is contained in:
MX 2023-03-03 23:22:40 +03:00
commit b90060e574
No known key found for this signature in database
GPG Key ID: 7CCC66B7DBDD1C83
130 changed files with 1608 additions and 1628 deletions

View File

@ -54,6 +54,7 @@ typedef enum {
SubGhzLoadKeyStateOK,
SubGhzLoadKeyStateParseErr,
SubGhzLoadKeyStateOnlyRx,
SubGhzLoadKeyStateProtocolDescriptionErr,
} SubGhzLoadKeyState;
/** SubGhzLock */

View File

@ -27,8 +27,9 @@ static bool subghz_scene_receiver_info_update_parser(void* context) {
subghz->txrx->decoder_result = subghz_receiver_search_decoder_base_by_name(
subghz->txrx->receiver,
subghz_history_get_protocol_name(subghz->txrx->history, subghz->txrx->idx_menu_chosen));
if(subghz->txrx->decoder_result) {
// In this case flipper format was changed to short file content
//todo we are trying to deserialize without checking for errors, since it is assumed that we just received this chignal
subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result,
subghz_history_get_raw_data(subghz->txrx->history, subghz->txrx->idx_menu_chosen));
@ -138,7 +139,6 @@ bool subghz_scene_receiver_info_on_event(void* context, SceneManagerEvent event)
subghz,
subghz_history_get_raw_data(
subghz->txrx->history, subghz->txrx->idx_menu_chosen))) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowOnlyRx);
if(subghz->txrx->txrx_state == SubGhzTxRxStateTx) {
subghz_tx_stop(subghz);
}

View File

@ -36,8 +36,9 @@ bool subghz_scene_set_type_submenu_gen_data_protocol(
do {
Stream* fff_data_stream = flipper_format_get_raw_stream(subghz->txrx->fff_data);
stream_clean(fff_data_stream);
if(!subghz_protocol_decoder_base_serialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data, subghz->txrx->preset)) {
if(subghz_protocol_decoder_base_serialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data, subghz->txrx->preset) !=
SubGhzProtocolStatusOk) {
FURI_LOG_E(TAG, "Unable to serialize");
break;
}

View File

@ -14,9 +14,8 @@ void subghz_scene_transmitter_callback(SubGhzCustomEvent event, void* context) {
}
bool subghz_scene_transmitter_update_data_show(void* context) {
//ToDo Fix
SubGhz* subghz = context;
bool ret = false;
if(subghz->txrx->decoder_result) {
FuriString* key_str;
FuriString* frequency_str;
@ -27,30 +26,29 @@ bool subghz_scene_transmitter_update_data_show(void* context) {
modulation_str = furi_string_alloc();
uint8_t show_button = 0;
subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data);
subghz_protocol_decoder_base_get_string(subghz->txrx->decoder_result, key_str);
if(subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data) == SubGhzProtocolStatusOk) {
subghz_protocol_decoder_base_get_string(subghz->txrx->decoder_result, key_str);
if((subghz->txrx->decoder_result->protocol->flag & SubGhzProtocolFlag_Send) ==
SubGhzProtocolFlag_Send) {
show_button = 1;
if((subghz->txrx->decoder_result->protocol->flag & SubGhzProtocolFlag_Send) ==
SubGhzProtocolFlag_Send) {
show_button = 1;
}
subghz_get_frequency_modulation(subghz, frequency_str, modulation_str);
subghz_view_transmitter_add_data_to_show(
subghz->subghz_transmitter,
furi_string_get_cstr(key_str),
furi_string_get_cstr(frequency_str),
furi_string_get_cstr(modulation_str),
show_button);
ret = true;
}
subghz_get_frequency_modulation(subghz, frequency_str, modulation_str);
subghz_view_transmitter_add_data_to_show(
subghz->subghz_transmitter,
furi_string_get_cstr(key_str),
furi_string_get_cstr(frequency_str),
furi_string_get_cstr(modulation_str),
show_button);
furi_string_free(frequency_str);
furi_string_free(modulation_str);
furi_string_free(key_str);
return true;
}
return false;
return ret;
}
void subghz_scene_transmitter_on_enter(void* context) {

View File

@ -154,7 +154,6 @@ bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
FURI_LOG_E(TAG, "Missing Protocol");
break;
}
//ToDo FIX
if(!flipper_format_insert_or_update_uint32(flipper_format, "Repeat", &repeat, 1)) {
FURI_LOG_E(TAG, "Unable Repeat");
break;
@ -164,7 +163,8 @@ bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
subghz->txrx->environment, furi_string_get_cstr(temp_str));
if(subghz->txrx->transmitter) {
if(subghz_transmitter_deserialize(subghz->txrx->transmitter, flipper_format)) {
if(subghz_transmitter_deserialize(subghz->txrx->transmitter, flipper_format) ==
SubGhzProtocolStatusOk) {
if(strcmp(furi_string_get_cstr(subghz->txrx->preset->name), "") != 0) {
subghz_begin(
subghz,
@ -187,7 +187,12 @@ bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
//Start TX
furi_hal_subghz_start_async_tx(
subghz_transmitter_yield, subghz->txrx->transmitter);
} else {
subghz_dialog_message_show_only_rx(subghz);
}
} else {
dialog_message_show_storage_error(
subghz->dialogs, "Error in protocol\nparameters\ndescription");
}
}
if(!ret) {
@ -335,8 +340,10 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) {
subghz->txrx->decoder_result = subghz_receiver_search_decoder_base_by_name(
subghz->txrx->receiver, furi_string_get_cstr(temp_str));
if(subghz->txrx->decoder_result) {
if(!subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data)) {
SubGhzProtocolStatus status = subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result, subghz->txrx->fff_data);
if(status != SubGhzProtocolStatusOk) {
load_key_state = SubGhzLoadKeyStateProtocolDescriptionErr;
break;
}
} else {
@ -357,6 +364,12 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) {
dialog_message_show_storage_error(subghz->dialogs, "Cannot parse\nfile");
}
return false;
case SubGhzLoadKeyStateProtocolDescriptionErr:
if(show_dialog) {
dialog_message_show_storage_error(
subghz->dialogs, "Error in protocol\nparameters\ndescription");
}
return false;
case SubGhzLoadKeyStateOnlyRx:
if(show_dialog) {

View File

@ -3,7 +3,7 @@
#include <furi.h>
#include <furi_hal.h>
#define WS_VERSION_APP "0.7"
#define WS_VERSION_APP "0.8"
#define WS_DEVELOPED "SkorP"
#define WS_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"

View File

@ -258,7 +258,7 @@ uint8_t ws_protocol_decoder_acurite_592txr_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_acurite_592txr_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_592txr_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -267,22 +267,14 @@ bool ws_protocol_decoder_acurite_592txr_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_acurite_592txr_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_acurite_592txr_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderAcurite_592TXR* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_acurite_592txr_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_acurite_592txr_const.min_count_bit_for_found);
}
void ws_protocol_decoder_acurite_592txr_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_acurite_592txr_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderAcurite_592TXR instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_592txr_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_592txr_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_acurite_592txr_serialize(
* Deserialize data WSProtocolDecoderAcurite_592TXR.
* @param context Pointer to a WSProtocolDecoderAcurite_592TXR instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_592txr_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_acurite_592txr_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -199,7 +199,7 @@ uint8_t ws_protocol_decoder_acurite_606tx_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_acurite_606tx_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_606tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -208,22 +208,14 @@ bool ws_protocol_decoder_acurite_606tx_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_acurite_606tx_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_acurite_606tx_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderAcurite_606TX* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_acurite_606tx_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_acurite_606tx_const.min_count_bit_for_found);
}
void ws_protocol_decoder_acurite_606tx_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_acurite_606tx_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderAcurite_606TX instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_606tx_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_606tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_acurite_606tx_serialize(
* Deserialize data WSProtocolDecoderAcurite_606TX.
* @param context Pointer to a WSProtocolDecoderAcurite_606TX instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_606tx_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_acurite_606tx_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -199,7 +199,7 @@ uint8_t ws_protocol_decoder_acurite_609txc_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_acurite_609txc_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_609txc_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -208,22 +208,14 @@ bool ws_protocol_decoder_acurite_609txc_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_acurite_609txc_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_acurite_609txc_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderAcurite_609TXC* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_acurite_609txc_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_acurite_609txc_const.min_count_bit_for_found);
}
void ws_protocol_decoder_acurite_609txc_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_acurite_609txc_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderAcurite_609TXC instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_609txc_serialize(
SubGhzProtocolStatus ws_protocol_decoder_acurite_609txc_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_acurite_609txc_serialize(
* Deserialize data WSProtocolDecoderAcurite_609TXC.
* @param context Pointer to a WSProtocolDecoderAcurite_609TXC instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_acurite_609txc_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_acurite_609txc_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -228,7 +228,7 @@ uint8_t ws_protocol_decoder_ambient_weather_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_ambient_weather_serialize(
SubGhzProtocolStatus ws_protocol_decoder_ambient_weather_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -237,22 +237,14 @@ bool ws_protocol_decoder_ambient_weather_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_ambient_weather_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_ambient_weather_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderAmbient_Weather* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_ambient_weather_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_ambient_weather_const.min_count_bit_for_found);
}
void ws_protocol_decoder_ambient_weather_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_ambient_weather_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderAmbient_Weather instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_ambient_weather_serialize(
SubGhzProtocolStatus ws_protocol_decoder_ambient_weather_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_ambient_weather_serialize(
* Deserialize data WSProtocolDecoderAmbient_Weather.
* @param context Pointer to a WSProtocolDecoderAmbient_Weather instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_ambient_weather_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_ambient_weather_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -210,7 +210,7 @@ uint8_t ws_protocol_decoder_auriol_th_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_auriol_th_serialize(
SubGhzProtocolStatus ws_protocol_decoder_auriol_th_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -219,22 +219,12 @@ bool ws_protocol_decoder_auriol_th_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_auriol_th_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_auriol_th_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderAuriol_TH* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_auriol_th_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_auriol_th_const.min_count_bit_for_found);
}
void ws_protocol_decoder_auriol_th_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_auriol_th_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderAuriol_TH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_auriol_th_serialize(
SubGhzProtocolStatus ws_protocol_decoder_auriol_th_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_auriol_th_serialize(
* Deserialize data WSProtocolDecoderAuriol_TH.
* @param context Pointer to a WSProtocolDecoderAuriol_TH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_auriol_th_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_auriol_th_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -217,7 +217,7 @@ uint8_t ws_protocol_decoder_gt_wt_02_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_gt_wt_02_serialize(
SubGhzProtocolStatus ws_protocol_decoder_gt_wt_02_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -226,22 +226,12 @@ bool ws_protocol_decoder_gt_wt_02_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_gt_wt_02_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_gt_wt_02_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderGT_WT02* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_gt_wt_02_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_gt_wt_02_const.min_count_bit_for_found);
}
void ws_protocol_decoder_gt_wt_02_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_gt_wt_02_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderGT_WT02 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_gt_wt_02_serialize(
SubGhzProtocolStatus ws_protocol_decoder_gt_wt_02_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_gt_wt_02_serialize(
* Deserialize data WSProtocolDecoderGT_WT02.
* @param context Pointer to a WSProtocolDecoderGT_WT02 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_gt_wt_02_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_gt_wt_02_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -292,7 +292,7 @@ uint8_t ws_protocol_decoder_gt_wt_03_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_gt_wt_03_serialize(
SubGhzProtocolStatus ws_protocol_decoder_gt_wt_03_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -301,22 +301,12 @@ bool ws_protocol_decoder_gt_wt_03_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_gt_wt_03_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_gt_wt_03_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderGT_WT03* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_gt_wt_03_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_gt_wt_03_const.min_count_bit_for_found);
}
void ws_protocol_decoder_gt_wt_03_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_gt_wt_03_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderGT_WT03 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_gt_wt_03_serialize(
SubGhzProtocolStatus ws_protocol_decoder_gt_wt_03_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_gt_wt_03_serialize(
* Deserialize data WSProtocolDecoderGT_WT03.
* @param context Pointer to a WSProtocolDecoderGT_WT03 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_gt_wt_03_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_gt_wt_03_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -248,7 +248,7 @@ uint8_t ws_protocol_decoder_infactory_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_infactory_serialize(
SubGhzProtocolStatus ws_protocol_decoder_infactory_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -257,22 +257,12 @@ bool ws_protocol_decoder_infactory_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_infactory_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_infactory_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderInfactory* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_infactory_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_infactory_const.min_count_bit_for_found);
}
void ws_protocol_decoder_infactory_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_infactory_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderInfactory instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_infactory_serialize(
SubGhzProtocolStatus ws_protocol_decoder_infactory_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_infactory_serialize(
* Deserialize data WSProtocolDecoderInfactory.
* @param context Pointer to a WSProtocolDecoderInfactory instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_infactory_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_infactory_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -281,7 +281,7 @@ uint8_t ws_protocol_decoder_lacrosse_tx_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_lacrosse_tx_serialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -290,22 +290,12 @@ bool ws_protocol_decoder_lacrosse_tx_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_lacrosse_tx_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_lacrosse_tx_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderLaCrosse_TX* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_lacrosse_tx_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_lacrosse_tx_const.min_count_bit_for_found);
}
void ws_protocol_decoder_lacrosse_tx_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_lacrosse_tx_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderLaCrosse_TX instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_lacrosse_tx_serialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_lacrosse_tx_serialize(
* Deserialize data WSProtocolDecoderLaCrosse_TX.
* @param context Pointer to a WSProtocolDecoderLaCrosse_TX instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_lacrosse_tx_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_lacrosse_tx_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -247,7 +247,7 @@ uint8_t ws_protocol_decoder_lacrosse_tx141thbv2_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -256,24 +256,15 @@ bool ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_lacrosse_tx141thbv2_deserialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx141thbv2_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderLaCrosse_TX141THBv2* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_lacrosse_tx141thbv2_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_lacrosse_tx141thbv2_const.min_count_bit_for_found);
}
void ws_protocol_decoder_lacrosse_tx141thbv2_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_lacrosse_tx141thbv2_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderLaCrosse_TX141THBv2 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,9 @@ bool ws_protocol_decoder_lacrosse_tx141thbv2_serialize(
* Deserialize data WSProtocolDecoderLaCrosse_TX141THBv2.
* @param context Pointer to a WSProtocolDecoderLaCrosse_TX141THBv2 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_lacrosse_tx141thbv2_deserialize(
SubGhzProtocolStatus ws_protocol_decoder_lacrosse_tx141thbv2_deserialize(
void* context,
FlipperFormat* flipper_format);

View File

@ -216,7 +216,7 @@ uint8_t ws_protocol_decoder_nexus_th_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_nexus_th_serialize(
SubGhzProtocolStatus ws_protocol_decoder_nexus_th_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -225,22 +225,12 @@ bool ws_protocol_decoder_nexus_th_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_nexus_th_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_nexus_th_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderNexus_TH* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_nexus_th_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_nexus_th_const.min_count_bit_for_found);
}
void ws_protocol_decoder_nexus_th_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_nexus_th_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderNexus_TH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_nexus_th_serialize(
SubGhzProtocolStatus ws_protocol_decoder_nexus_th_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_nexus_th_serialize(
* Deserialize data WSProtocolDecoderNexus_TH.
* @param context Pointer to a WSProtocolDecoderNexus_TH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_nexus_th_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_nexus_th_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -302,17 +302,19 @@ uint8_t ws_protocol_decoder_oregon2_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_oregon2_serialize(
SubGhzProtocolStatus ws_protocol_decoder_oregon2_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
WSProtocolDecoderOregon2* instance = context;
if(!ws_block_generic_serialize(&instance->generic, flipper_format, preset)) return false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
ret = ws_block_generic_serialize(&instance->generic, flipper_format, preset);
if(ret != SubGhzProtocolStatusOk) return ret;
uint32_t temp = instance->var_bits;
if(!flipper_format_write_uint32(flipper_format, "VarBits", &temp, 1)) {
FURI_LOG_E(TAG, "Error adding VarBits");
return false;
return SubGhzProtocolStatusErrorParserOthers;
}
if(!flipper_format_write_hex(
flipper_format,
@ -320,22 +322,25 @@ bool ws_protocol_decoder_oregon2_serialize(
(const uint8_t*)&instance->var_data,
sizeof(instance->var_data))) {
FURI_LOG_E(TAG, "Error adding VarData");
return false;
return SubGhzProtocolStatusErrorParserOthers;
}
return true;
return ret;
}
bool ws_protocol_decoder_oregon2_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_oregon2_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderOregon2* instance = context;
bool ret = false;
uint32_t temp_data;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
ret = ws_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(!flipper_format_read_uint32(flipper_format, "VarBits", &temp_data, 1)) {
FURI_LOG_E(TAG, "Missing VarLen");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->var_bits = (uint8_t)temp_data;
@ -345,13 +350,14 @@ bool ws_protocol_decoder_oregon2_deserialize(void* context, FlipperFormat* flipp
(uint8_t*)&instance->var_data,
sizeof(instance->var_data))) { //-V1051
FURI_LOG_E(TAG, "Missing VarData");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(instance->generic.data_count_bit != ws_oregon2_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key: %d", instance->generic.data_count_bit);
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -283,7 +283,7 @@ uint8_t ws_protocol_decoder_oregon_v1_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_oregon_v1_serialize(
SubGhzProtocolStatus ws_protocol_decoder_oregon_v1_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -292,22 +292,12 @@ bool ws_protocol_decoder_oregon_v1_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_oregon_v1_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_oregon_v1_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderOregon_V1* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_oregon_v1_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_oregon_v1_const.min_count_bit_for_found);
}
void ws_protocol_decoder_oregon_v1_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_oregon_v1_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderOregon_V1 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_oregon_v1_serialize(
SubGhzProtocolStatus ws_protocol_decoder_oregon_v1_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_oregon_v1_serialize(
* Deserialize data WSProtocolDecoderOregon_V1.
* @param context Pointer to a WSProtocolDecoderOregon_V1 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_oregon_v1_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_oregon_v1_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -211,7 +211,7 @@ uint8_t ws_protocol_decoder_thermopro_tx4_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_thermopro_tx4_serialize(
SubGhzProtocolStatus ws_protocol_decoder_thermopro_tx4_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -220,22 +220,14 @@ bool ws_protocol_decoder_thermopro_tx4_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_thermopro_tx4_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_thermopro_tx4_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderThermoPRO_TX4* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
ws_protocol_thermopro_tx4_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
ws_protocol_thermopro_tx4_const.min_count_bit_for_found);
}
void ws_protocol_decoder_thermopro_tx4_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_thermopro_tx4_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderThermoPRO_TX4 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_thermopro_tx4_serialize(
SubGhzProtocolStatus ws_protocol_decoder_thermopro_tx4_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_thermopro_tx4_serialize(
* Deserialize data WSProtocolDecoderThermoPRO_TX4.
* @param context Pointer to a WSProtocolDecoderThermoPRO_TX4 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_thermopro_tx4_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_thermopro_tx4_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -246,7 +246,7 @@ uint8_t ws_protocol_decoder_tx_8300_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool ws_protocol_decoder_tx_8300_serialize(
SubGhzProtocolStatus ws_protocol_decoder_tx_8300_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -255,21 +255,12 @@ bool ws_protocol_decoder_tx_8300_serialize(
return ws_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool ws_protocol_decoder_tx_8300_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_protocol_decoder_tx_8300_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
WSProtocolDecoderTX_8300* instance = context;
bool ret = false;
do {
if(!ws_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit != ws_protocol_tx_8300_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return ws_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, ws_protocol_tx_8300_const.min_count_bit_for_found);
}
void ws_protocol_decoder_tx_8300_get_string(void* context, FuriString* output) {

View File

@ -56,9 +56,9 @@ uint8_t ws_protocol_decoder_tx_8300_get_hash_data(void* context);
* @param context Pointer to a WSProtocolDecoderTX_8300 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_protocol_decoder_tx_8300_serialize(
SubGhzProtocolStatus ws_protocol_decoder_tx_8300_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -67,9 +67,10 @@ bool ws_protocol_decoder_tx_8300_serialize(
* Deserialize data WSProtocolDecoderTX_8300.
* @param context Pointer to a WSProtocolDecoderTX_8300 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_protocol_decoder_tx_8300_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_protocol_decoder_tx_8300_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -21,12 +21,12 @@ void ws_block_generic_get_preset_name(const char* preset_name, FuriString* prese
furi_string_set(preset_str, preset_name_temp);
}
bool ws_block_generic_serialize(
SubGhzProtocolStatus ws_block_generic_serialize(
WSBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(instance);
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
do {
@ -34,11 +34,13 @@ bool ws_block_generic_serialize(
if(!flipper_format_write_header_cstr(
flipper_format, WS_KEY_FILE_TYPE, WS_KEY_FILE_VERSION)) {
FURI_LOG_E(TAG, "Unable to add header");
res = SubGhzProtocolStatusErrorParserHeader;
break;
}
if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
res = SubGhzProtocolStatusErrorParserFrequency;
break;
}
@ -46,34 +48,40 @@ bool ws_block_generic_serialize(
if(!flipper_format_write_string_cstr(
flipper_format, "Preset", furi_string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
res = SubGhzProtocolStatusErrorParserPreset;
break;
}
if(!strcmp(furi_string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
if(!flipper_format_write_string_cstr(
flipper_format, "Custom_preset_module", "CC1101")) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
if(!flipper_format_write_hex(
flipper_format, "Custom_preset_data", preset->data, preset->data_size)) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
}
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
res = SubGhzProtocolStatusErrorParserProtocolName;
break;
}
uint32_t temp_data = instance->id;
if(!flipper_format_write_uint32(flipper_format, "Id", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Id");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
temp_data = instance->data_count_bit;
if(!flipper_format_write_uint32(flipper_format, "Bit", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
@ -84,18 +92,21 @@ bool ws_block_generic_serialize(
if(!flipper_format_write_hex(flipper_format, "Data", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Unable to add Data");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
temp_data = instance->battery_low;
if(!flipper_format_write_uint32(flipper_format, "Batt", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Battery_low");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
temp_data = instance->humidity;
if(!flipper_format_write_uint32(flipper_format, "Hum", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Humidity");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
@ -107,52 +118,60 @@ bool ws_block_generic_serialize(
temp_data = curr_ts;
if(!flipper_format_write_uint32(flipper_format, "Ts", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add timestamp");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
temp_data = instance->channel;
if(!flipper_format_write_uint32(flipper_format, "Ch", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Channel");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
temp_data = instance->btn;
if(!flipper_format_write_uint32(flipper_format, "Btn", &temp_data, 1)) {
FURI_LOG_E(TAG, "Unable to add Btn");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
float temp = instance->temp;
if(!flipper_format_write_float(flipper_format, "Temp", &temp, 1)) {
FURI_LOG_E(TAG, "Unable to add Temperature");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}
bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format) {
furi_assert(instance);
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
uint32_t temp_data = 0;
do {
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "Id", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Id");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->id = (uint32_t)temp_data;
if(!flipper_format_read_uint32(flipper_format, "Bit", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
instance->data_count_bit = (uint8_t)temp_data;
@ -160,6 +179,7 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp
uint8_t key_data[sizeof(uint64_t)] = {0};
if(!flipper_format_read_hex(flipper_format, "Data", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Missing Data");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
@ -169,30 +189,35 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp
if(!flipper_format_read_uint32(flipper_format, "Batt", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Battery_low");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->battery_low = (uint8_t)temp_data;
if(!flipper_format_read_uint32(flipper_format, "Hum", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Humidity");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->humidity = (uint8_t)temp_data;
if(!flipper_format_read_uint32(flipper_format, "Ts", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing timestamp");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->timestamp = (uint32_t)temp_data;
if(!flipper_format_read_uint32(flipper_format, "Ch", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Channel");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->channel = (uint8_t)temp_data;
if(!flipper_format_read_uint32(flipper_format, "Btn", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Btn");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->btn = (uint8_t)temp_data;
@ -200,12 +225,32 @@ bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipp
float temp;
if(!flipper_format_read_float(flipper_format, "Temp", (float*)&temp, 1)) {
FURI_LOG_E(TAG, "Missing Temperature");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
instance->temp = temp;
res = true;
res = SubGhzProtocolStatusOk;
} while(0);
return res;
}
SubGhzProtocolStatus ws_block_generic_deserialize_check_count_bit(
WSBlockGeneric* instance,
FlipperFormat* flipper_format,
uint16_t count_bit) {
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
ret = ws_block_generic_deserialize(instance, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(instance->data_count_bit != count_bit) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
} while(false);
return ret;
}

View File

@ -48,9 +48,9 @@ void ws_block_generic_get_preset_name(const char* preset_name, FuriString* prese
* @param instance Pointer to a WSBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool ws_block_generic_serialize(
SubGhzProtocolStatus ws_block_generic_serialize(
WSBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -59,9 +59,22 @@ bool ws_block_generic_serialize(
* Deserialize data WSBlockGeneric.
* @param instance Pointer to a WSBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format);
SubGhzProtocolStatus
ws_block_generic_deserialize(WSBlockGeneric* instance, FlipperFormat* flipper_format);
/**
* Deserialize data WSBlockGeneric.
* @param instance Pointer to a WSBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param count_bit Count bit protocol
* @return status
*/
SubGhzProtocolStatus ws_block_generic_deserialize_check_count_bit(
WSBlockGeneric* instance,
FlipperFormat* flipper_format,
uint16_t count_bit);
#ifdef __cplusplus
}

View File

@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,16.0,,
Version,+,17.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,

1 entry status name type params
2 Version + 16.0 17.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h

View File

@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,16.0,,
Version,+,17.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@ -2636,9 +2636,10 @@ Function,-,strupr,char*,char*
Function,-,strverscmp,int,"const char*, const char*"
Function,-,strxfrm,size_t,"char*, const char*, size_t"
Function,-,strxfrm_l,size_t,"char*, const char*, size_t, locale_t"
Function,+,subghz_block_generic_deserialize,_Bool,"SubGhzBlockGeneric*, FlipperFormat*"
Function,+,subghz_block_generic_deserialize,SubGhzProtocolStatus,"SubGhzBlockGeneric*, FlipperFormat*"
Function,+,subghz_block_generic_deserialize_check_count_bit,SubGhzProtocolStatus,"SubGhzBlockGeneric*, FlipperFormat*, uint16_t"
Function,+,subghz_block_generic_get_preset_name,void,"const char*, FuriString*"
Function,+,subghz_block_generic_serialize,_Bool,"SubGhzBlockGeneric*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_block_generic_serialize,SubGhzProtocolStatus,"SubGhzBlockGeneric*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_environment_alloc,SubGhzEnvironment*,
Function,+,subghz_environment_free,void,SubGhzEnvironment*
Function,+,subghz_environment_get_alutech_at_4n_rainbow_table_file_name,const char*,SubGhzEnvironment*
@ -2682,537 +2683,537 @@ Function,+,subghz_protocol_blocks_reverse_key,uint64_t,"uint64_t, uint8_t"
Function,+,subghz_protocol_blocks_set_bit_array,void,"_Bool, uint8_t[], size_t, size_t"
Function,+,subghz_protocol_blocks_xor_bytes,uint8_t,"const uint8_t[], size_t"
Function,-,subghz_protocol_decoder_alutech_at_4n_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_alutech_at_4n_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_alutech_at_4n_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_alutech_at_4n_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_alutech_at_4n_free,void,void*
Function,-,subghz_protocol_decoder_alutech_at_4n_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_alutech_at_4n_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_alutech_at_4n_reset,void,void*
Function,-,subghz_protocol_decoder_alutech_at_4n_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_alutech_at_4n_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_ansonic_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_ansonic_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_ansonic_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_ansonic_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_ansonic_free,void,void*
Function,-,subghz_protocol_decoder_ansonic_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_ansonic_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_ansonic_reset,void,void*
Function,-,subghz_protocol_decoder_ansonic_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_base_deserialize,_Bool,"SubGhzProtocolDecoderBase*, FlipperFormat*"
Function,-,subghz_protocol_decoder_ansonic_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_protocol_decoder_base_deserialize,SubGhzProtocolStatus,"SubGhzProtocolDecoderBase*, FlipperFormat*"
Function,+,subghz_protocol_decoder_base_get_hash_data,uint8_t,SubGhzProtocolDecoderBase*
Function,+,subghz_protocol_decoder_base_get_string,_Bool,"SubGhzProtocolDecoderBase*, FuriString*"
Function,+,subghz_protocol_decoder_base_serialize,_Bool,"SubGhzProtocolDecoderBase*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_protocol_decoder_base_serialize,SubGhzProtocolStatus,"SubGhzProtocolDecoderBase*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_base_set_decoder_callback,void,"SubGhzProtocolDecoderBase*, SubGhzProtocolDecoderBaseRxCallback, void*"
Function,-,subghz_protocol_decoder_bett_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_bett_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_bett_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_bett_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_bett_free,void,void*
Function,-,subghz_protocol_decoder_bett_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_bett_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_bett_reset,void,void*
Function,-,subghz_protocol_decoder_bett_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_bett_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_bin_raw_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_bin_raw_data_input_rssi,void,"SubGhzProtocolDecoderBinRAW*, float"
Function,-,subghz_protocol_decoder_bin_raw_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_bin_raw_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_bin_raw_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_bin_raw_free,void,void*
Function,-,subghz_protocol_decoder_bin_raw_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_bin_raw_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_bin_raw_reset,void,void*
Function,-,subghz_protocol_decoder_bin_raw_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_bin_raw_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_came_atomo_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_came_atomo_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_atomo_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_atomo_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_came_atomo_free,void,void*
Function,-,subghz_protocol_decoder_came_atomo_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_came_atomo_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_came_atomo_reset,void,void*
Function,-,subghz_protocol_decoder_came_atomo_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_atomo_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_came_free,void,void*
Function,-,subghz_protocol_decoder_came_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_came_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_came_reset,void,void*
Function,-,subghz_protocol_decoder_came_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_twee_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_came_twee_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_twee_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_came_twee_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_came_twee_free,void,void*
Function,-,subghz_protocol_decoder_came_twee_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_came_twee_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_came_twee_reset,void,void*
Function,-,subghz_protocol_decoder_came_twee_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_came_twee_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_chamb_code_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_chamb_code_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_chamb_code_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_chamb_code_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_chamb_code_free,void,void*
Function,-,subghz_protocol_decoder_chamb_code_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_chamb_code_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_chamb_code_reset,void,void*
Function,-,subghz_protocol_decoder_chamb_code_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_chamb_code_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_clemsa_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_clemsa_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_clemsa_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_clemsa_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_clemsa_free,void,void*
Function,-,subghz_protocol_decoder_clemsa_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_clemsa_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_clemsa_reset,void,void*
Function,-,subghz_protocol_decoder_clemsa_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_clemsa_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_doitrand_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_doitrand_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_doitrand_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_doitrand_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_doitrand_free,void,void*
Function,-,subghz_protocol_decoder_doitrand_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_doitrand_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_doitrand_reset,void,void*
Function,-,subghz_protocol_decoder_doitrand_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_doitrand_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_dooya_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_dooya_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_dooya_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_dooya_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_dooya_free,void,void*
Function,-,subghz_protocol_decoder_dooya_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_dooya_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_dooya_reset,void,void*
Function,-,subghz_protocol_decoder_dooya_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_dooya_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_faac_slh_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_faac_slh_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_faac_slh_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_faac_slh_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_faac_slh_free,void,void*
Function,-,subghz_protocol_decoder_faac_slh_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_faac_slh_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_faac_slh_reset,void,void*
Function,-,subghz_protocol_decoder_faac_slh_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_faac_slh_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_gate_tx_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_gate_tx_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_gate_tx_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_gate_tx_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_gate_tx_free,void,void*
Function,-,subghz_protocol_decoder_gate_tx_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_gate_tx_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_gate_tx_reset,void,void*
Function,-,subghz_protocol_decoder_gate_tx_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_gate_tx_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_holtek_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_holtek_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_holtek_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_holtek_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_holtek_free,void,void*
Function,-,subghz_protocol_decoder_holtek_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_holtek_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_holtek_reset,void,void*
Function,-,subghz_protocol_decoder_holtek_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_holtek_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_holtek_th12x_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_holtek_th12x_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_holtek_th12x_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_holtek_th12x_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_holtek_th12x_free,void,void*
Function,-,subghz_protocol_decoder_holtek_th12x_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_holtek_th12x_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_holtek_th12x_reset,void,void*
Function,-,subghz_protocol_decoder_holtek_th12x_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_holtek_th12x_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_honeywell_wdb_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_honeywell_wdb_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_honeywell_wdb_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_honeywell_wdb_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_honeywell_wdb_free,void,void*
Function,-,subghz_protocol_decoder_honeywell_wdb_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_honeywell_wdb_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_honeywell_wdb_reset,void,void*
Function,-,subghz_protocol_decoder_honeywell_wdb_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_honeywell_wdb_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_hormann_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_hormann_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_hormann_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_hormann_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_hormann_free,void,void*
Function,-,subghz_protocol_decoder_hormann_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_hormann_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_hormann_reset,void,void*
Function,-,subghz_protocol_decoder_hormann_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_hormann_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_ido_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_ido_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_ido_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_ido_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_ido_free,void,void*
Function,-,subghz_protocol_decoder_ido_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_ido_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_ido_reset,void,void*
Function,-,subghz_protocol_decoder_ido_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_ido_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_intertechno_v3_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_intertechno_v3_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_intertechno_v3_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_intertechno_v3_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_intertechno_v3_free,void,void*
Function,-,subghz_protocol_decoder_intertechno_v3_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_intertechno_v3_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_intertechno_v3_reset,void,void*
Function,-,subghz_protocol_decoder_intertechno_v3_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_intertechno_v3_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_keeloq_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_keeloq_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_keeloq_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_keeloq_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_keeloq_free,void,void*
Function,-,subghz_protocol_decoder_keeloq_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_keeloq_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_keeloq_reset,void,void*
Function,-,subghz_protocol_decoder_keeloq_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_keeloq_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_kia_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_kia_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_kia_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_kia_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_kia_free,void,void*
Function,-,subghz_protocol_decoder_kia_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_kia_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_kia_reset,void,void*
Function,-,subghz_protocol_decoder_kia_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_kia_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_free,void,void*
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_reset,void,void*
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_kinggates_stylo_4k_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_linear_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_linear_delta3_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_linear_delta3_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_linear_delta3_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_linear_delta3_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_linear_delta3_free,void,void*
Function,-,subghz_protocol_decoder_linear_delta3_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_linear_delta3_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_linear_delta3_reset,void,void*
Function,-,subghz_protocol_decoder_linear_delta3_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_linear_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_linear_delta3_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_linear_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_linear_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_linear_free,void,void*
Function,-,subghz_protocol_decoder_linear_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_linear_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_linear_reset,void,void*
Function,-,subghz_protocol_decoder_linear_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_linear_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_magellan_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_magellan_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_magellan_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_magellan_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_magellan_free,void,void*
Function,-,subghz_protocol_decoder_magellan_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_magellan_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_magellan_reset,void,void*
Function,-,subghz_protocol_decoder_magellan_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_magellan_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_marantec_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_marantec_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_marantec_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_marantec_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_marantec_free,void,void*
Function,-,subghz_protocol_decoder_marantec_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_marantec_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_marantec_reset,void,void*
Function,-,subghz_protocol_decoder_marantec_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_marantec_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_megacode_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_megacode_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_megacode_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_megacode_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_megacode_free,void,void*
Function,-,subghz_protocol_decoder_megacode_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_megacode_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_megacode_reset,void,void*
Function,-,subghz_protocol_decoder_megacode_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_megacode_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nero_radio_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_nero_radio_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nero_radio_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nero_radio_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_nero_radio_free,void,void*
Function,-,subghz_protocol_decoder_nero_radio_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_nero_radio_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_nero_radio_reset,void,void*
Function,-,subghz_protocol_decoder_nero_radio_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nero_radio_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nero_sketch_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_nero_sketch_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nero_sketch_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nero_sketch_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_nero_sketch_free,void,void*
Function,-,subghz_protocol_decoder_nero_sketch_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_nero_sketch_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_nero_sketch_reset,void,void*
Function,-,subghz_protocol_decoder_nero_sketch_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nero_sketch_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nice_flo_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_nice_flo_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nice_flo_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nice_flo_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_nice_flo_free,void,void*
Function,-,subghz_protocol_decoder_nice_flo_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_nice_flo_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_nice_flo_reset,void,void*
Function,-,subghz_protocol_decoder_nice_flo_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nice_flo_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nice_flor_s_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_nice_flor_s_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nice_flor_s_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_nice_flor_s_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_nice_flor_s_free,void,void*
Function,-,subghz_protocol_decoder_nice_flor_s_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_nice_flor_s_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_nice_flor_s_reset,void,void*
Function,-,subghz_protocol_decoder_nice_flor_s_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_nice_flor_s_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_phoenix_v2_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_phoenix_v2_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_phoenix_v2_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_phoenix_v2_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_phoenix_v2_free,void,void*
Function,-,subghz_protocol_decoder_phoenix_v2_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_phoenix_v2_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_phoenix_v2_reset,void,void*
Function,-,subghz_protocol_decoder_phoenix_v2_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_phoenix_v2_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_power_smart_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_power_smart_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_power_smart_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_power_smart_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_power_smart_free,void,void*
Function,-,subghz_protocol_decoder_power_smart_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_power_smart_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_power_smart_reset,void,void*
Function,-,subghz_protocol_decoder_power_smart_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_power_smart_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_protocol_decoder_princeton_alloc,void*,SubGhzEnvironment*
Function,+,subghz_protocol_decoder_princeton_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_princeton_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,+,subghz_protocol_decoder_princeton_feed,void,"void*, _Bool, uint32_t"
Function,+,subghz_protocol_decoder_princeton_free,void,void*
Function,+,subghz_protocol_decoder_princeton_get_hash_data,uint8_t,void*
Function,+,subghz_protocol_decoder_princeton_get_string,void,"void*, FuriString*"
Function,+,subghz_protocol_decoder_princeton_reset,void,void*
Function,+,subghz_protocol_decoder_princeton_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_princeton_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,+,subghz_protocol_decoder_raw_alloc,void*,SubGhzEnvironment*
Function,+,subghz_protocol_decoder_raw_deserialize,_Bool,"void*, FlipperFormat*"
Function,+,subghz_protocol_decoder_raw_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,+,subghz_protocol_decoder_raw_feed,void,"void*, _Bool, uint32_t"
Function,+,subghz_protocol_decoder_raw_free,void,void*
Function,+,subghz_protocol_decoder_raw_get_string,void,"void*, FuriString*"
Function,+,subghz_protocol_decoder_raw_reset,void,void*
Function,-,subghz_protocol_decoder_scher_khan_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_scher_khan_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_scher_khan_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_scher_khan_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_scher_khan_free,void,void*
Function,-,subghz_protocol_decoder_scher_khan_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_scher_khan_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_scher_khan_reset,void,void*
Function,-,subghz_protocol_decoder_scher_khan_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_scher_khan_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_secplus_v1_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_secplus_v1_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_secplus_v1_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_secplus_v1_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_secplus_v1_free,void,void*
Function,-,subghz_protocol_decoder_secplus_v1_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_secplus_v1_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_secplus_v1_reset,void,void*
Function,-,subghz_protocol_decoder_secplus_v1_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_secplus_v1_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_secplus_v2_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_secplus_v2_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_secplus_v2_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_secplus_v2_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_secplus_v2_free,void,void*
Function,-,subghz_protocol_decoder_secplus_v2_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_secplus_v2_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_secplus_v2_reset,void,void*
Function,-,subghz_protocol_decoder_secplus_v2_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_secplus_v2_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_smc5326_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_smc5326_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_smc5326_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_smc5326_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_smc5326_free,void,void*
Function,-,subghz_protocol_decoder_smc5326_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_smc5326_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_smc5326_reset,void,void*
Function,-,subghz_protocol_decoder_smc5326_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_smc5326_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_somfy_keytis_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_somfy_keytis_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_somfy_keytis_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_somfy_keytis_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_somfy_keytis_free,void,void*
Function,-,subghz_protocol_decoder_somfy_keytis_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_somfy_keytis_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_somfy_keytis_reset,void,void*
Function,-,subghz_protocol_decoder_somfy_keytis_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_somfy_keytis_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_somfy_telis_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_somfy_telis_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_somfy_telis_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_somfy_telis_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_somfy_telis_free,void,void*
Function,-,subghz_protocol_decoder_somfy_telis_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_somfy_telis_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_somfy_telis_reset,void,void*
Function,-,subghz_protocol_decoder_somfy_telis_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_somfy_telis_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_star_line_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_decoder_star_line_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_star_line_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_decoder_star_line_feed,void,"void*, _Bool, uint32_t"
Function,-,subghz_protocol_decoder_star_line_free,void,void*
Function,-,subghz_protocol_decoder_star_line_get_hash_data,uint8_t,void*
Function,-,subghz_protocol_decoder_star_line_get_string,void,"void*, FuriString*"
Function,-,subghz_protocol_decoder_star_line_reset,void,void*
Function,-,subghz_protocol_decoder_star_line_serialize,_Bool,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_decoder_star_line_serialize,SubGhzProtocolStatus,"void*, FlipperFormat*, SubGhzRadioPreset*"
Function,-,subghz_protocol_encoder_alutech_at_4n_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_alutech_at_4n_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_alutech_at_4n_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_alutech_at_4n_free,void,void*
Function,-,subghz_protocol_encoder_alutech_at_4n_stop,void,void*
Function,-,subghz_protocol_encoder_alutech_at_4n_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_ansonic_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_ansonic_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_ansonic_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_ansonic_free,void,void*
Function,-,subghz_protocol_encoder_ansonic_stop,void,void*
Function,-,subghz_protocol_encoder_ansonic_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_bett_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_bett_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_bett_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_bett_free,void,void*
Function,-,subghz_protocol_encoder_bett_stop,void,void*
Function,-,subghz_protocol_encoder_bett_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_bin_raw_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_bin_raw_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_bin_raw_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_bin_raw_free,void,void*
Function,-,subghz_protocol_encoder_bin_raw_stop,void,void*
Function,-,subghz_protocol_encoder_bin_raw_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_came_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_came_atomo_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_came_atomo_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_atomo_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_atomo_free,void,void*
Function,-,subghz_protocol_encoder_came_atomo_stop,void,void*
Function,-,subghz_protocol_encoder_came_atomo_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_came_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_free,void,void*
Function,-,subghz_protocol_encoder_came_stop,void,void*
Function,-,subghz_protocol_encoder_came_twee_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_came_twee_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_twee_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_came_twee_free,void,void*
Function,-,subghz_protocol_encoder_came_twee_stop,void,void*
Function,-,subghz_protocol_encoder_came_twee_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_came_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_chamb_code_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_chamb_code_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_chamb_code_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_chamb_code_free,void,void*
Function,-,subghz_protocol_encoder_chamb_code_stop,void,void*
Function,-,subghz_protocol_encoder_chamb_code_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_clemsa_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_clemsa_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_clemsa_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_clemsa_free,void,void*
Function,-,subghz_protocol_encoder_clemsa_stop,void,void*
Function,-,subghz_protocol_encoder_clemsa_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_doitrand_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_doitrand_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_doitrand_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_doitrand_free,void,void*
Function,-,subghz_protocol_encoder_doitrand_stop,void,void*
Function,-,subghz_protocol_encoder_doitrand_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_dooya_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_dooya_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_dooya_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_dooya_free,void,void*
Function,-,subghz_protocol_encoder_dooya_stop,void,void*
Function,-,subghz_protocol_encoder_dooya_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_faac_slh_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_faac_slh_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_faac_slh_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_faac_slh_free,void,void*
Function,-,subghz_protocol_encoder_faac_slh_stop,void,void*
Function,-,subghz_protocol_encoder_faac_slh_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_gate_tx_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_gate_tx_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_gate_tx_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_gate_tx_free,void,void*
Function,-,subghz_protocol_encoder_gate_tx_stop,void,void*
Function,-,subghz_protocol_encoder_gate_tx_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_holtek_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_holtek_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_holtek_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_holtek_free,void,void*
Function,-,subghz_protocol_encoder_holtek_stop,void,void*
Function,-,subghz_protocol_encoder_holtek_th12x_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_holtek_th12x_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_holtek_th12x_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_holtek_th12x_free,void,void*
Function,-,subghz_protocol_encoder_holtek_th12x_stop,void,void*
Function,-,subghz_protocol_encoder_holtek_th12x_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_holtek_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_honeywell_wdb_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_honeywell_wdb_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_honeywell_wdb_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_honeywell_wdb_free,void,void*
Function,-,subghz_protocol_encoder_honeywell_wdb_stop,void,void*
Function,-,subghz_protocol_encoder_honeywell_wdb_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_hormann_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_hormann_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_hormann_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_hormann_free,void,void*
Function,-,subghz_protocol_encoder_hormann_stop,void,void*
Function,-,subghz_protocol_encoder_hormann_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_intertechno_v3_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_intertechno_v3_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_intertechno_v3_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_intertechno_v3_free,void,void*
Function,-,subghz_protocol_encoder_intertechno_v3_stop,void,void*
Function,-,subghz_protocol_encoder_intertechno_v3_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_keeloq_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_keeloq_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_keeloq_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_keeloq_free,void,void*
Function,-,subghz_protocol_encoder_keeloq_stop,void,void*
Function,-,subghz_protocol_encoder_keeloq_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_free,void,void*
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_stop,void,void*
Function,-,subghz_protocol_encoder_kinggates_stylo_4k_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_linear_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_linear_delta3_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_linear_delta3_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_linear_delta3_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_linear_delta3_free,void,void*
Function,-,subghz_protocol_encoder_linear_delta3_stop,void,void*
Function,-,subghz_protocol_encoder_linear_delta3_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_linear_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_linear_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_linear_free,void,void*
Function,-,subghz_protocol_encoder_linear_stop,void,void*
Function,-,subghz_protocol_encoder_linear_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_magellan_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_magellan_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_magellan_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_magellan_free,void,void*
Function,-,subghz_protocol_encoder_magellan_stop,void,void*
Function,-,subghz_protocol_encoder_magellan_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_marantec_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_marantec_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_marantec_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_marantec_free,void,void*
Function,-,subghz_protocol_encoder_marantec_stop,void,void*
Function,-,subghz_protocol_encoder_marantec_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_megacode_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_megacode_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_megacode_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_megacode_free,void,void*
Function,-,subghz_protocol_encoder_megacode_stop,void,void*
Function,-,subghz_protocol_encoder_megacode_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_nero_radio_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_nero_radio_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nero_radio_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nero_radio_free,void,void*
Function,-,subghz_protocol_encoder_nero_radio_stop,void,void*
Function,-,subghz_protocol_encoder_nero_radio_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_nero_sketch_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_nero_sketch_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nero_sketch_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nero_sketch_free,void,void*
Function,-,subghz_protocol_encoder_nero_sketch_stop,void,void*
Function,-,subghz_protocol_encoder_nero_sketch_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_nice_flo_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_nice_flo_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nice_flo_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nice_flo_free,void,void*
Function,-,subghz_protocol_encoder_nice_flo_stop,void,void*
Function,-,subghz_protocol_encoder_nice_flo_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_nice_flor_s_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_nice_flor_s_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nice_flor_s_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_nice_flor_s_free,void,void*
Function,-,subghz_protocol_encoder_nice_flor_s_stop,void,void*
Function,-,subghz_protocol_encoder_nice_flor_s_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_phoenix_v2_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_phoenix_v2_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_phoenix_v2_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_phoenix_v2_free,void,void*
Function,-,subghz_protocol_encoder_phoenix_v2_stop,void,void*
Function,-,subghz_protocol_encoder_phoenix_v2_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_power_smart_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_power_smart_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_power_smart_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_power_smart_free,void,void*
Function,-,subghz_protocol_encoder_power_smart_stop,void,void*
Function,-,subghz_protocol_encoder_power_smart_yield,LevelDuration,void*
Function,+,subghz_protocol_encoder_princeton_alloc,void*,SubGhzEnvironment*
Function,+,subghz_protocol_encoder_princeton_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_princeton_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,+,subghz_protocol_encoder_princeton_free,void,void*
Function,+,subghz_protocol_encoder_princeton_stop,void,void*
Function,+,subghz_protocol_encoder_princeton_yield,LevelDuration,void*
Function,+,subghz_protocol_encoder_raw_alloc,void*,SubGhzEnvironment*
Function,+,subghz_protocol_encoder_raw_deserialize,_Bool,"void*, FlipperFormat*"
Function,+,subghz_protocol_encoder_raw_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,+,subghz_protocol_encoder_raw_free,void,void*
Function,+,subghz_protocol_encoder_raw_stop,void,void*
Function,+,subghz_protocol_encoder_raw_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_secplus_v1_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_secplus_v1_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_secplus_v1_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_secplus_v1_free,void,void*
Function,-,subghz_protocol_encoder_secplus_v1_stop,void,void*
Function,-,subghz_protocol_encoder_secplus_v1_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_secplus_v2_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_secplus_v2_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_secplus_v2_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_secplus_v2_free,void,void*
Function,-,subghz_protocol_encoder_secplus_v2_stop,void,void*
Function,-,subghz_protocol_encoder_secplus_v2_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_smc5326_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_smc5326_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_smc5326_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_smc5326_free,void,void*
Function,-,subghz_protocol_encoder_smc5326_stop,void,void*
Function,-,subghz_protocol_encoder_smc5326_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_somfy_keytis_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_somfy_keytis_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_somfy_keytis_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_somfy_keytis_free,void,void*
Function,-,subghz_protocol_encoder_somfy_keytis_stop,void,void*
Function,-,subghz_protocol_encoder_somfy_keytis_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_somfy_telis_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_somfy_telis_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_somfy_telis_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_somfy_telis_free,void,void*
Function,-,subghz_protocol_encoder_somfy_telis_stop,void,void*
Function,-,subghz_protocol_encoder_somfy_telis_yield,LevelDuration,void*
Function,-,subghz_protocol_encoder_star_line_alloc,void*,SubGhzEnvironment*
Function,-,subghz_protocol_encoder_star_line_deserialize,_Bool,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_star_line_deserialize,SubGhzProtocolStatus,"void*, FlipperFormat*"
Function,-,subghz_protocol_encoder_star_line_free,void,void*
Function,-,subghz_protocol_encoder_star_line_stop,void,void*
Function,-,subghz_protocol_encoder_star_line_yield,LevelDuration,void*
@ -3261,7 +3262,7 @@ Function,+,subghz_setting_load,void,"SubGhzSetting*, const char*"
Function,+,subghz_setting_load_custom_preset,_Bool,"SubGhzSetting*, const char*, FlipperFormat*"
Function,+,subghz_setting_set_default_frequency,void,"SubGhzSetting*, uint32_t"
Function,+,subghz_transmitter_alloc_init,SubGhzTransmitter*,"SubGhzEnvironment*, const char*"
Function,+,subghz_transmitter_deserialize,_Bool,"SubGhzTransmitter*, FlipperFormat*"
Function,+,subghz_transmitter_deserialize,SubGhzProtocolStatus,"SubGhzTransmitter*, FlipperFormat*"
Function,+,subghz_transmitter_free,void,SubGhzTransmitter*
Function,+,subghz_transmitter_get_protocol_instance,SubGhzProtocolEncoderBase*,SubGhzTransmitter*
Function,+,subghz_transmitter_stop,_Bool,SubGhzTransmitter*

1 entry status name type params
2 Version + 16.0 17.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
2636 Function - strverscmp int const char*, const char*
2637 Function - strxfrm size_t char*, const char*, size_t
2638 Function - strxfrm_l size_t char*, const char*, size_t, locale_t
2639 Function + subghz_block_generic_deserialize _Bool SubGhzProtocolStatus SubGhzBlockGeneric*, FlipperFormat*
2640 Function + subghz_block_generic_deserialize_check_count_bit SubGhzProtocolStatus SubGhzBlockGeneric*, FlipperFormat*, uint16_t
2641 Function + subghz_block_generic_get_preset_name void const char*, FuriString*
2642 Function + subghz_block_generic_serialize _Bool SubGhzProtocolStatus SubGhzBlockGeneric*, FlipperFormat*, SubGhzRadioPreset*
2643 Function + subghz_environment_alloc SubGhzEnvironment*
2644 Function + subghz_environment_free void SubGhzEnvironment*
2645 Function + subghz_environment_get_alutech_at_4n_rainbow_table_file_name const char* SubGhzEnvironment*
2683 Function + subghz_protocol_blocks_set_bit_array void _Bool, uint8_t[], size_t, size_t
2684 Function + subghz_protocol_blocks_xor_bytes uint8_t const uint8_t[], size_t
2685 Function - subghz_protocol_decoder_alutech_at_4n_alloc void* SubGhzEnvironment*
2686 Function - subghz_protocol_decoder_alutech_at_4n_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2687 Function - subghz_protocol_decoder_alutech_at_4n_feed void void*, _Bool, uint32_t
2688 Function - subghz_protocol_decoder_alutech_at_4n_free void void*
2689 Function - subghz_protocol_decoder_alutech_at_4n_get_hash_data uint8_t void*
2690 Function - subghz_protocol_decoder_alutech_at_4n_get_string void void*, FuriString*
2691 Function - subghz_protocol_decoder_alutech_at_4n_reset void void*
2692 Function - subghz_protocol_decoder_alutech_at_4n_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2693 Function - subghz_protocol_decoder_ansonic_alloc void* SubGhzEnvironment*
2694 Function - subghz_protocol_decoder_ansonic_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2695 Function - subghz_protocol_decoder_ansonic_feed void void*, _Bool, uint32_t
2696 Function - subghz_protocol_decoder_ansonic_free void void*
2697 Function - subghz_protocol_decoder_ansonic_get_hash_data uint8_t void*
2698 Function - subghz_protocol_decoder_ansonic_get_string void void*, FuriString*
2699 Function - subghz_protocol_decoder_ansonic_reset void void*
2700 Function - subghz_protocol_decoder_ansonic_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2701 Function - + subghz_protocol_decoder_base_deserialize _Bool SubGhzProtocolStatus SubGhzProtocolDecoderBase*, FlipperFormat*
2702 Function + subghz_protocol_decoder_base_get_hash_data uint8_t SubGhzProtocolDecoderBase*
2703 Function + subghz_protocol_decoder_base_get_string _Bool SubGhzProtocolDecoderBase*, FuriString*
2704 Function + subghz_protocol_decoder_base_serialize _Bool SubGhzProtocolStatus SubGhzProtocolDecoderBase*, FlipperFormat*, SubGhzRadioPreset*
2705 Function - subghz_protocol_decoder_base_set_decoder_callback void SubGhzProtocolDecoderBase*, SubGhzProtocolDecoderBaseRxCallback, void*
2706 Function - subghz_protocol_decoder_bett_alloc void* SubGhzEnvironment*
2707 Function - subghz_protocol_decoder_bett_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2708 Function - subghz_protocol_decoder_bett_feed void void*, _Bool, uint32_t
2709 Function - subghz_protocol_decoder_bett_free void void*
2710 Function - subghz_protocol_decoder_bett_get_hash_data uint8_t void*
2711 Function - subghz_protocol_decoder_bett_get_string void void*, FuriString*
2712 Function - subghz_protocol_decoder_bett_reset void void*
2713 Function - subghz_protocol_decoder_bett_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2714 Function - subghz_protocol_decoder_bin_raw_alloc void* SubGhzEnvironment*
2715 Function - subghz_protocol_decoder_bin_raw_data_input_rssi void SubGhzProtocolDecoderBinRAW*, float
2716 Function - subghz_protocol_decoder_bin_raw_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2717 Function - subghz_protocol_decoder_bin_raw_feed void void*, _Bool, uint32_t
2718 Function - subghz_protocol_decoder_bin_raw_free void void*
2719 Function - subghz_protocol_decoder_bin_raw_get_hash_data uint8_t void*
2720 Function - subghz_protocol_decoder_bin_raw_get_string void void*, FuriString*
2721 Function - subghz_protocol_decoder_bin_raw_reset void void*
2722 Function - subghz_protocol_decoder_bin_raw_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2723 Function - subghz_protocol_decoder_came_alloc void* SubGhzEnvironment*
2724 Function - subghz_protocol_decoder_came_atomo_alloc void* SubGhzEnvironment*
2725 Function - subghz_protocol_decoder_came_atomo_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2726 Function - subghz_protocol_decoder_came_atomo_feed void void*, _Bool, uint32_t
2727 Function - subghz_protocol_decoder_came_atomo_free void void*
2728 Function - subghz_protocol_decoder_came_atomo_get_hash_data uint8_t void*
2729 Function - subghz_protocol_decoder_came_atomo_get_string void void*, FuriString*
2730 Function - subghz_protocol_decoder_came_atomo_reset void void*
2731 Function - subghz_protocol_decoder_came_atomo_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2732 Function - subghz_protocol_decoder_came_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2733 Function - subghz_protocol_decoder_came_feed void void*, _Bool, uint32_t
2734 Function - subghz_protocol_decoder_came_free void void*
2735 Function - subghz_protocol_decoder_came_get_hash_data uint8_t void*
2736 Function - subghz_protocol_decoder_came_get_string void void*, FuriString*
2737 Function - subghz_protocol_decoder_came_reset void void*
2738 Function - subghz_protocol_decoder_came_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2739 Function - subghz_protocol_decoder_came_twee_alloc void* SubGhzEnvironment*
2740 Function - subghz_protocol_decoder_came_twee_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2741 Function - subghz_protocol_decoder_came_twee_feed void void*, _Bool, uint32_t
2742 Function - subghz_protocol_decoder_came_twee_free void void*
2743 Function - subghz_protocol_decoder_came_twee_get_hash_data uint8_t void*
2744 Function - subghz_protocol_decoder_came_twee_get_string void void*, FuriString*
2745 Function - subghz_protocol_decoder_came_twee_reset void void*
2746 Function - subghz_protocol_decoder_came_twee_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2747 Function - subghz_protocol_decoder_chamb_code_alloc void* SubGhzEnvironment*
2748 Function - subghz_protocol_decoder_chamb_code_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2749 Function - subghz_protocol_decoder_chamb_code_feed void void*, _Bool, uint32_t
2750 Function - subghz_protocol_decoder_chamb_code_free void void*
2751 Function - subghz_protocol_decoder_chamb_code_get_hash_data uint8_t void*
2752 Function - subghz_protocol_decoder_chamb_code_get_string void void*, FuriString*
2753 Function - subghz_protocol_decoder_chamb_code_reset void void*
2754 Function - subghz_protocol_decoder_chamb_code_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2755 Function - subghz_protocol_decoder_clemsa_alloc void* SubGhzEnvironment*
2756 Function - subghz_protocol_decoder_clemsa_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2757 Function - subghz_protocol_decoder_clemsa_feed void void*, _Bool, uint32_t
2758 Function - subghz_protocol_decoder_clemsa_free void void*
2759 Function - subghz_protocol_decoder_clemsa_get_hash_data uint8_t void*
2760 Function - subghz_protocol_decoder_clemsa_get_string void void*, FuriString*
2761 Function - subghz_protocol_decoder_clemsa_reset void void*
2762 Function - subghz_protocol_decoder_clemsa_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2763 Function - subghz_protocol_decoder_doitrand_alloc void* SubGhzEnvironment*
2764 Function - subghz_protocol_decoder_doitrand_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2765 Function - subghz_protocol_decoder_doitrand_feed void void*, _Bool, uint32_t
2766 Function - subghz_protocol_decoder_doitrand_free void void*
2767 Function - subghz_protocol_decoder_doitrand_get_hash_data uint8_t void*
2768 Function - subghz_protocol_decoder_doitrand_get_string void void*, FuriString*
2769 Function - subghz_protocol_decoder_doitrand_reset void void*
2770 Function - subghz_protocol_decoder_doitrand_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2771 Function - subghz_protocol_decoder_dooya_alloc void* SubGhzEnvironment*
2772 Function - subghz_protocol_decoder_dooya_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2773 Function - subghz_protocol_decoder_dooya_feed void void*, _Bool, uint32_t
2774 Function - subghz_protocol_decoder_dooya_free void void*
2775 Function - subghz_protocol_decoder_dooya_get_hash_data uint8_t void*
2776 Function - subghz_protocol_decoder_dooya_get_string void void*, FuriString*
2777 Function - subghz_protocol_decoder_dooya_reset void void*
2778 Function - subghz_protocol_decoder_dooya_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2779 Function - subghz_protocol_decoder_faac_slh_alloc void* SubGhzEnvironment*
2780 Function - subghz_protocol_decoder_faac_slh_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2781 Function - subghz_protocol_decoder_faac_slh_feed void void*, _Bool, uint32_t
2782 Function - subghz_protocol_decoder_faac_slh_free void void*
2783 Function - subghz_protocol_decoder_faac_slh_get_hash_data uint8_t void*
2784 Function - subghz_protocol_decoder_faac_slh_get_string void void*, FuriString*
2785 Function - subghz_protocol_decoder_faac_slh_reset void void*
2786 Function - subghz_protocol_decoder_faac_slh_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2787 Function - subghz_protocol_decoder_gate_tx_alloc void* SubGhzEnvironment*
2788 Function - subghz_protocol_decoder_gate_tx_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2789 Function - subghz_protocol_decoder_gate_tx_feed void void*, _Bool, uint32_t
2790 Function - subghz_protocol_decoder_gate_tx_free void void*
2791 Function - subghz_protocol_decoder_gate_tx_get_hash_data uint8_t void*
2792 Function - subghz_protocol_decoder_gate_tx_get_string void void*, FuriString*
2793 Function - subghz_protocol_decoder_gate_tx_reset void void*
2794 Function - subghz_protocol_decoder_gate_tx_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2795 Function - subghz_protocol_decoder_holtek_alloc void* SubGhzEnvironment*
2796 Function - subghz_protocol_decoder_holtek_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2797 Function - subghz_protocol_decoder_holtek_feed void void*, _Bool, uint32_t
2798 Function - subghz_protocol_decoder_holtek_free void void*
2799 Function - subghz_protocol_decoder_holtek_get_hash_data uint8_t void*
2800 Function - subghz_protocol_decoder_holtek_get_string void void*, FuriString*
2801 Function - subghz_protocol_decoder_holtek_reset void void*
2802 Function - subghz_protocol_decoder_holtek_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2803 Function - subghz_protocol_decoder_holtek_th12x_alloc void* SubGhzEnvironment*
2804 Function - subghz_protocol_decoder_holtek_th12x_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2805 Function - subghz_protocol_decoder_holtek_th12x_feed void void*, _Bool, uint32_t
2806 Function - subghz_protocol_decoder_holtek_th12x_free void void*
2807 Function - subghz_protocol_decoder_holtek_th12x_get_hash_data uint8_t void*
2808 Function - subghz_protocol_decoder_holtek_th12x_get_string void void*, FuriString*
2809 Function - subghz_protocol_decoder_holtek_th12x_reset void void*
2810 Function - subghz_protocol_decoder_holtek_th12x_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2811 Function - subghz_protocol_decoder_honeywell_wdb_alloc void* SubGhzEnvironment*
2812 Function - subghz_protocol_decoder_honeywell_wdb_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2813 Function - subghz_protocol_decoder_honeywell_wdb_feed void void*, _Bool, uint32_t
2814 Function - subghz_protocol_decoder_honeywell_wdb_free void void*
2815 Function - subghz_protocol_decoder_honeywell_wdb_get_hash_data uint8_t void*
2816 Function - subghz_protocol_decoder_honeywell_wdb_get_string void void*, FuriString*
2817 Function - subghz_protocol_decoder_honeywell_wdb_reset void void*
2818 Function - subghz_protocol_decoder_honeywell_wdb_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2819 Function - subghz_protocol_decoder_hormann_alloc void* SubGhzEnvironment*
2820 Function - subghz_protocol_decoder_hormann_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2821 Function - subghz_protocol_decoder_hormann_feed void void*, _Bool, uint32_t
2822 Function - subghz_protocol_decoder_hormann_free void void*
2823 Function - subghz_protocol_decoder_hormann_get_hash_data uint8_t void*
2824 Function - subghz_protocol_decoder_hormann_get_string void void*, FuriString*
2825 Function - subghz_protocol_decoder_hormann_reset void void*
2826 Function - subghz_protocol_decoder_hormann_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2827 Function - subghz_protocol_decoder_ido_alloc void* SubGhzEnvironment*
2828 Function - subghz_protocol_decoder_ido_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2829 Function - subghz_protocol_decoder_ido_feed void void*, _Bool, uint32_t
2830 Function - subghz_protocol_decoder_ido_free void void*
2831 Function - subghz_protocol_decoder_ido_get_hash_data uint8_t void*
2832 Function - subghz_protocol_decoder_ido_get_string void void*, FuriString*
2833 Function - subghz_protocol_decoder_ido_reset void void*
2834 Function - subghz_protocol_decoder_ido_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2835 Function - subghz_protocol_decoder_intertechno_v3_alloc void* SubGhzEnvironment*
2836 Function - subghz_protocol_decoder_intertechno_v3_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2837 Function - subghz_protocol_decoder_intertechno_v3_feed void void*, _Bool, uint32_t
2838 Function - subghz_protocol_decoder_intertechno_v3_free void void*
2839 Function - subghz_protocol_decoder_intertechno_v3_get_hash_data uint8_t void*
2840 Function - subghz_protocol_decoder_intertechno_v3_get_string void void*, FuriString*
2841 Function - subghz_protocol_decoder_intertechno_v3_reset void void*
2842 Function - subghz_protocol_decoder_intertechno_v3_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2843 Function - subghz_protocol_decoder_keeloq_alloc void* SubGhzEnvironment*
2844 Function - subghz_protocol_decoder_keeloq_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2845 Function - subghz_protocol_decoder_keeloq_feed void void*, _Bool, uint32_t
2846 Function - subghz_protocol_decoder_keeloq_free void void*
2847 Function - subghz_protocol_decoder_keeloq_get_hash_data uint8_t void*
2848 Function - subghz_protocol_decoder_keeloq_get_string void void*, FuriString*
2849 Function - subghz_protocol_decoder_keeloq_reset void void*
2850 Function - subghz_protocol_decoder_keeloq_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2851 Function - subghz_protocol_decoder_kia_alloc void* SubGhzEnvironment*
2852 Function - subghz_protocol_decoder_kia_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2853 Function - subghz_protocol_decoder_kia_feed void void*, _Bool, uint32_t
2854 Function - subghz_protocol_decoder_kia_free void void*
2855 Function - subghz_protocol_decoder_kia_get_hash_data uint8_t void*
2856 Function - subghz_protocol_decoder_kia_get_string void void*, FuriString*
2857 Function - subghz_protocol_decoder_kia_reset void void*
2858 Function - subghz_protocol_decoder_kia_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2859 Function - subghz_protocol_decoder_kinggates_stylo_4k_alloc void* SubGhzEnvironment*
2860 Function - subghz_protocol_decoder_kinggates_stylo_4k_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2861 Function - subghz_protocol_decoder_kinggates_stylo_4k_feed void void*, _Bool, uint32_t
2862 Function - subghz_protocol_decoder_kinggates_stylo_4k_free void void*
2863 Function - subghz_protocol_decoder_kinggates_stylo_4k_get_hash_data uint8_t void*
2864 Function - subghz_protocol_decoder_kinggates_stylo_4k_get_string void void*, FuriString*
2865 Function - subghz_protocol_decoder_kinggates_stylo_4k_reset void void*
2866 Function - subghz_protocol_decoder_kinggates_stylo_4k_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2867 Function - subghz_protocol_decoder_linear_alloc void* SubGhzEnvironment*
2868 Function - subghz_protocol_decoder_linear_delta3_alloc void* SubGhzEnvironment*
2869 Function - subghz_protocol_decoder_linear_delta3_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2870 Function - subghz_protocol_decoder_linear_delta3_feed void void*, _Bool, uint32_t
2871 Function - subghz_protocol_decoder_linear_delta3_free void void*
2872 Function - subghz_protocol_decoder_linear_delta3_get_hash_data uint8_t void*
2873 Function - subghz_protocol_decoder_linear_delta3_get_string void void*, FuriString*
2874 Function - subghz_protocol_decoder_linear_delta3_reset void void*
2875 Function - subghz_protocol_decoder_linear_delta3_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2876 Function - subghz_protocol_decoder_linear_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2877 Function - subghz_protocol_decoder_linear_feed void void*, _Bool, uint32_t
2878 Function - subghz_protocol_decoder_linear_free void void*
2879 Function - subghz_protocol_decoder_linear_get_hash_data uint8_t void*
2880 Function - subghz_protocol_decoder_linear_get_string void void*, FuriString*
2881 Function - subghz_protocol_decoder_linear_reset void void*
2882 Function - subghz_protocol_decoder_linear_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2883 Function - subghz_protocol_decoder_magellan_alloc void* SubGhzEnvironment*
2884 Function - subghz_protocol_decoder_magellan_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2885 Function - subghz_protocol_decoder_magellan_feed void void*, _Bool, uint32_t
2886 Function - subghz_protocol_decoder_magellan_free void void*
2887 Function - subghz_protocol_decoder_magellan_get_hash_data uint8_t void*
2888 Function - subghz_protocol_decoder_magellan_get_string void void*, FuriString*
2889 Function - subghz_protocol_decoder_magellan_reset void void*
2890 Function - subghz_protocol_decoder_magellan_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2891 Function - subghz_protocol_decoder_marantec_alloc void* SubGhzEnvironment*
2892 Function - subghz_protocol_decoder_marantec_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2893 Function - subghz_protocol_decoder_marantec_feed void void*, _Bool, uint32_t
2894 Function - subghz_protocol_decoder_marantec_free void void*
2895 Function - subghz_protocol_decoder_marantec_get_hash_data uint8_t void*
2896 Function - subghz_protocol_decoder_marantec_get_string void void*, FuriString*
2897 Function - subghz_protocol_decoder_marantec_reset void void*
2898 Function - subghz_protocol_decoder_marantec_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2899 Function - subghz_protocol_decoder_megacode_alloc void* SubGhzEnvironment*
2900 Function - subghz_protocol_decoder_megacode_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2901 Function - subghz_protocol_decoder_megacode_feed void void*, _Bool, uint32_t
2902 Function - subghz_protocol_decoder_megacode_free void void*
2903 Function - subghz_protocol_decoder_megacode_get_hash_data uint8_t void*
2904 Function - subghz_protocol_decoder_megacode_get_string void void*, FuriString*
2905 Function - subghz_protocol_decoder_megacode_reset void void*
2906 Function - subghz_protocol_decoder_megacode_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2907 Function - subghz_protocol_decoder_nero_radio_alloc void* SubGhzEnvironment*
2908 Function - subghz_protocol_decoder_nero_radio_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2909 Function - subghz_protocol_decoder_nero_radio_feed void void*, _Bool, uint32_t
2910 Function - subghz_protocol_decoder_nero_radio_free void void*
2911 Function - subghz_protocol_decoder_nero_radio_get_hash_data uint8_t void*
2912 Function - subghz_protocol_decoder_nero_radio_get_string void void*, FuriString*
2913 Function - subghz_protocol_decoder_nero_radio_reset void void*
2914 Function - subghz_protocol_decoder_nero_radio_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2915 Function - subghz_protocol_decoder_nero_sketch_alloc void* SubGhzEnvironment*
2916 Function - subghz_protocol_decoder_nero_sketch_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2917 Function - subghz_protocol_decoder_nero_sketch_feed void void*, _Bool, uint32_t
2918 Function - subghz_protocol_decoder_nero_sketch_free void void*
2919 Function - subghz_protocol_decoder_nero_sketch_get_hash_data uint8_t void*
2920 Function - subghz_protocol_decoder_nero_sketch_get_string void void*, FuriString*
2921 Function - subghz_protocol_decoder_nero_sketch_reset void void*
2922 Function - subghz_protocol_decoder_nero_sketch_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2923 Function - subghz_protocol_decoder_nice_flo_alloc void* SubGhzEnvironment*
2924 Function - subghz_protocol_decoder_nice_flo_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2925 Function - subghz_protocol_decoder_nice_flo_feed void void*, _Bool, uint32_t
2926 Function - subghz_protocol_decoder_nice_flo_free void void*
2927 Function - subghz_protocol_decoder_nice_flo_get_hash_data uint8_t void*
2928 Function - subghz_protocol_decoder_nice_flo_get_string void void*, FuriString*
2929 Function - subghz_protocol_decoder_nice_flo_reset void void*
2930 Function - subghz_protocol_decoder_nice_flo_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2931 Function - subghz_protocol_decoder_nice_flor_s_alloc void* SubGhzEnvironment*
2932 Function - subghz_protocol_decoder_nice_flor_s_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2933 Function - subghz_protocol_decoder_nice_flor_s_feed void void*, _Bool, uint32_t
2934 Function - subghz_protocol_decoder_nice_flor_s_free void void*
2935 Function - subghz_protocol_decoder_nice_flor_s_get_hash_data uint8_t void*
2936 Function - subghz_protocol_decoder_nice_flor_s_get_string void void*, FuriString*
2937 Function - subghz_protocol_decoder_nice_flor_s_reset void void*
2938 Function - subghz_protocol_decoder_nice_flor_s_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2939 Function - subghz_protocol_decoder_phoenix_v2_alloc void* SubGhzEnvironment*
2940 Function - subghz_protocol_decoder_phoenix_v2_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2941 Function - subghz_protocol_decoder_phoenix_v2_feed void void*, _Bool, uint32_t
2942 Function - subghz_protocol_decoder_phoenix_v2_free void void*
2943 Function - subghz_protocol_decoder_phoenix_v2_get_hash_data uint8_t void*
2944 Function - subghz_protocol_decoder_phoenix_v2_get_string void void*, FuriString*
2945 Function - subghz_protocol_decoder_phoenix_v2_reset void void*
2946 Function - subghz_protocol_decoder_phoenix_v2_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2947 Function - subghz_protocol_decoder_power_smart_alloc void* SubGhzEnvironment*
2948 Function - subghz_protocol_decoder_power_smart_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2949 Function - subghz_protocol_decoder_power_smart_feed void void*, _Bool, uint32_t
2950 Function - subghz_protocol_decoder_power_smart_free void void*
2951 Function - subghz_protocol_decoder_power_smart_get_hash_data uint8_t void*
2952 Function - subghz_protocol_decoder_power_smart_get_string void void*, FuriString*
2953 Function - subghz_protocol_decoder_power_smart_reset void void*
2954 Function - subghz_protocol_decoder_power_smart_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2955 Function + subghz_protocol_decoder_princeton_alloc void* SubGhzEnvironment*
2956 Function + - subghz_protocol_decoder_princeton_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2957 Function + subghz_protocol_decoder_princeton_feed void void*, _Bool, uint32_t
2958 Function + subghz_protocol_decoder_princeton_free void void*
2959 Function + subghz_protocol_decoder_princeton_get_hash_data uint8_t void*
2960 Function + subghz_protocol_decoder_princeton_get_string void void*, FuriString*
2961 Function + subghz_protocol_decoder_princeton_reset void void*
2962 Function + - subghz_protocol_decoder_princeton_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2963 Function + subghz_protocol_decoder_raw_alloc void* SubGhzEnvironment*
2964 Function + subghz_protocol_decoder_raw_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2965 Function + subghz_protocol_decoder_raw_feed void void*, _Bool, uint32_t
2966 Function + subghz_protocol_decoder_raw_free void void*
2967 Function + subghz_protocol_decoder_raw_get_string void void*, FuriString*
2968 Function + subghz_protocol_decoder_raw_reset void void*
2969 Function - subghz_protocol_decoder_scher_khan_alloc void* SubGhzEnvironment*
2970 Function - subghz_protocol_decoder_scher_khan_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2971 Function - subghz_protocol_decoder_scher_khan_feed void void*, _Bool, uint32_t
2972 Function - subghz_protocol_decoder_scher_khan_free void void*
2973 Function - subghz_protocol_decoder_scher_khan_get_hash_data uint8_t void*
2974 Function - subghz_protocol_decoder_scher_khan_get_string void void*, FuriString*
2975 Function - subghz_protocol_decoder_scher_khan_reset void void*
2976 Function - subghz_protocol_decoder_scher_khan_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2977 Function - subghz_protocol_decoder_secplus_v1_alloc void* SubGhzEnvironment*
2978 Function - subghz_protocol_decoder_secplus_v1_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2979 Function - subghz_protocol_decoder_secplus_v1_feed void void*, _Bool, uint32_t
2980 Function - subghz_protocol_decoder_secplus_v1_free void void*
2981 Function - subghz_protocol_decoder_secplus_v1_get_hash_data uint8_t void*
2982 Function - subghz_protocol_decoder_secplus_v1_get_string void void*, FuriString*
2983 Function - subghz_protocol_decoder_secplus_v1_reset void void*
2984 Function - subghz_protocol_decoder_secplus_v1_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2985 Function - subghz_protocol_decoder_secplus_v2_alloc void* SubGhzEnvironment*
2986 Function - subghz_protocol_decoder_secplus_v2_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2987 Function - subghz_protocol_decoder_secplus_v2_feed void void*, _Bool, uint32_t
2988 Function - subghz_protocol_decoder_secplus_v2_free void void*
2989 Function - subghz_protocol_decoder_secplus_v2_get_hash_data uint8_t void*
2990 Function - subghz_protocol_decoder_secplus_v2_get_string void void*, FuriString*
2991 Function - subghz_protocol_decoder_secplus_v2_reset void void*
2992 Function - subghz_protocol_decoder_secplus_v2_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
2993 Function - subghz_protocol_decoder_smc5326_alloc void* SubGhzEnvironment*
2994 Function - subghz_protocol_decoder_smc5326_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
2995 Function - subghz_protocol_decoder_smc5326_feed void void*, _Bool, uint32_t
2996 Function - subghz_protocol_decoder_smc5326_free void void*
2997 Function - subghz_protocol_decoder_smc5326_get_hash_data uint8_t void*
2998 Function - subghz_protocol_decoder_smc5326_get_string void void*, FuriString*
2999 Function - subghz_protocol_decoder_smc5326_reset void void*
3000 Function - subghz_protocol_decoder_smc5326_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
3001 Function - subghz_protocol_decoder_somfy_keytis_alloc void* SubGhzEnvironment*
3002 Function - subghz_protocol_decoder_somfy_keytis_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3003 Function - subghz_protocol_decoder_somfy_keytis_feed void void*, _Bool, uint32_t
3004 Function - subghz_protocol_decoder_somfy_keytis_free void void*
3005 Function - subghz_protocol_decoder_somfy_keytis_get_hash_data uint8_t void*
3006 Function - subghz_protocol_decoder_somfy_keytis_get_string void void*, FuriString*
3007 Function - subghz_protocol_decoder_somfy_keytis_reset void void*
3008 Function - subghz_protocol_decoder_somfy_keytis_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
3009 Function - subghz_protocol_decoder_somfy_telis_alloc void* SubGhzEnvironment*
3010 Function - subghz_protocol_decoder_somfy_telis_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3011 Function - subghz_protocol_decoder_somfy_telis_feed void void*, _Bool, uint32_t
3012 Function - subghz_protocol_decoder_somfy_telis_free void void*
3013 Function - subghz_protocol_decoder_somfy_telis_get_hash_data uint8_t void*
3014 Function - subghz_protocol_decoder_somfy_telis_get_string void void*, FuriString*
3015 Function - subghz_protocol_decoder_somfy_telis_reset void void*
3016 Function - subghz_protocol_decoder_somfy_telis_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
3017 Function - subghz_protocol_decoder_star_line_alloc void* SubGhzEnvironment*
3018 Function - subghz_protocol_decoder_star_line_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3019 Function - subghz_protocol_decoder_star_line_feed void void*, _Bool, uint32_t
3020 Function - subghz_protocol_decoder_star_line_free void void*
3021 Function - subghz_protocol_decoder_star_line_get_hash_data uint8_t void*
3022 Function - subghz_protocol_decoder_star_line_get_string void void*, FuriString*
3023 Function - subghz_protocol_decoder_star_line_reset void void*
3024 Function - subghz_protocol_decoder_star_line_serialize _Bool SubGhzProtocolStatus void*, FlipperFormat*, SubGhzRadioPreset*
3025 Function - subghz_protocol_encoder_alutech_at_4n_alloc void* SubGhzEnvironment*
3026 Function - subghz_protocol_encoder_alutech_at_4n_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3027 Function - subghz_protocol_encoder_alutech_at_4n_free void void*
3028 Function - subghz_protocol_encoder_alutech_at_4n_stop void void*
3029 Function - subghz_protocol_encoder_alutech_at_4n_yield LevelDuration void*
3030 Function - subghz_protocol_encoder_ansonic_alloc void* SubGhzEnvironment*
3031 Function - subghz_protocol_encoder_ansonic_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3032 Function - subghz_protocol_encoder_ansonic_free void void*
3033 Function - subghz_protocol_encoder_ansonic_stop void void*
3034 Function - subghz_protocol_encoder_ansonic_yield LevelDuration void*
3035 Function - subghz_protocol_encoder_bett_alloc void* SubGhzEnvironment*
3036 Function - subghz_protocol_encoder_bett_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3037 Function - subghz_protocol_encoder_bett_free void void*
3038 Function - subghz_protocol_encoder_bett_stop void void*
3039 Function - subghz_protocol_encoder_bett_yield LevelDuration void*
3040 Function - subghz_protocol_encoder_bin_raw_alloc void* SubGhzEnvironment*
3041 Function - subghz_protocol_encoder_bin_raw_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3042 Function - subghz_protocol_encoder_bin_raw_free void void*
3043 Function - subghz_protocol_encoder_bin_raw_stop void void*
3044 Function - subghz_protocol_encoder_bin_raw_yield LevelDuration void*
3045 Function - subghz_protocol_encoder_came_alloc void* SubGhzEnvironment*
3046 Function - subghz_protocol_encoder_came_atomo_alloc void* SubGhzEnvironment*
3047 Function - subghz_protocol_encoder_came_atomo_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3048 Function - subghz_protocol_encoder_came_atomo_free void void*
3049 Function - subghz_protocol_encoder_came_atomo_stop void void*
3050 Function - subghz_protocol_encoder_came_atomo_yield LevelDuration void*
3051 Function - subghz_protocol_encoder_came_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3052 Function - subghz_protocol_encoder_came_free void void*
3053 Function - subghz_protocol_encoder_came_stop void void*
3054 Function - subghz_protocol_encoder_came_twee_alloc void* SubGhzEnvironment*
3055 Function - subghz_protocol_encoder_came_twee_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3056 Function - subghz_protocol_encoder_came_twee_free void void*
3057 Function - subghz_protocol_encoder_came_twee_stop void void*
3058 Function - subghz_protocol_encoder_came_twee_yield LevelDuration void*
3059 Function - subghz_protocol_encoder_came_yield LevelDuration void*
3060 Function - subghz_protocol_encoder_chamb_code_alloc void* SubGhzEnvironment*
3061 Function - subghz_protocol_encoder_chamb_code_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3062 Function - subghz_protocol_encoder_chamb_code_free void void*
3063 Function - subghz_protocol_encoder_chamb_code_stop void void*
3064 Function - subghz_protocol_encoder_chamb_code_yield LevelDuration void*
3065 Function - subghz_protocol_encoder_clemsa_alloc void* SubGhzEnvironment*
3066 Function - subghz_protocol_encoder_clemsa_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3067 Function - subghz_protocol_encoder_clemsa_free void void*
3068 Function - subghz_protocol_encoder_clemsa_stop void void*
3069 Function - subghz_protocol_encoder_clemsa_yield LevelDuration void*
3070 Function - subghz_protocol_encoder_doitrand_alloc void* SubGhzEnvironment*
3071 Function - subghz_protocol_encoder_doitrand_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3072 Function - subghz_protocol_encoder_doitrand_free void void*
3073 Function - subghz_protocol_encoder_doitrand_stop void void*
3074 Function - subghz_protocol_encoder_doitrand_yield LevelDuration void*
3075 Function - subghz_protocol_encoder_dooya_alloc void* SubGhzEnvironment*
3076 Function - subghz_protocol_encoder_dooya_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3077 Function - subghz_protocol_encoder_dooya_free void void*
3078 Function - subghz_protocol_encoder_dooya_stop void void*
3079 Function - subghz_protocol_encoder_dooya_yield LevelDuration void*
3080 Function - subghz_protocol_encoder_faac_slh_alloc void* SubGhzEnvironment*
3081 Function - subghz_protocol_encoder_faac_slh_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3082 Function - subghz_protocol_encoder_faac_slh_free void void*
3083 Function - subghz_protocol_encoder_faac_slh_stop void void*
3084 Function - subghz_protocol_encoder_faac_slh_yield LevelDuration void*
3085 Function - subghz_protocol_encoder_gate_tx_alloc void* SubGhzEnvironment*
3086 Function - subghz_protocol_encoder_gate_tx_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3087 Function - subghz_protocol_encoder_gate_tx_free void void*
3088 Function - subghz_protocol_encoder_gate_tx_stop void void*
3089 Function - subghz_protocol_encoder_gate_tx_yield LevelDuration void*
3090 Function - subghz_protocol_encoder_holtek_alloc void* SubGhzEnvironment*
3091 Function - subghz_protocol_encoder_holtek_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3092 Function - subghz_protocol_encoder_holtek_free void void*
3093 Function - subghz_protocol_encoder_holtek_stop void void*
3094 Function - subghz_protocol_encoder_holtek_th12x_alloc void* SubGhzEnvironment*
3095 Function - subghz_protocol_encoder_holtek_th12x_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3096 Function - subghz_protocol_encoder_holtek_th12x_free void void*
3097 Function - subghz_protocol_encoder_holtek_th12x_stop void void*
3098 Function - subghz_protocol_encoder_holtek_th12x_yield LevelDuration void*
3099 Function - subghz_protocol_encoder_holtek_yield LevelDuration void*
3100 Function - subghz_protocol_encoder_honeywell_wdb_alloc void* SubGhzEnvironment*
3101 Function - subghz_protocol_encoder_honeywell_wdb_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3102 Function - subghz_protocol_encoder_honeywell_wdb_free void void*
3103 Function - subghz_protocol_encoder_honeywell_wdb_stop void void*
3104 Function - subghz_protocol_encoder_honeywell_wdb_yield LevelDuration void*
3105 Function - subghz_protocol_encoder_hormann_alloc void* SubGhzEnvironment*
3106 Function - subghz_protocol_encoder_hormann_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3107 Function - subghz_protocol_encoder_hormann_free void void*
3108 Function - subghz_protocol_encoder_hormann_stop void void*
3109 Function - subghz_protocol_encoder_hormann_yield LevelDuration void*
3110 Function - subghz_protocol_encoder_intertechno_v3_alloc void* SubGhzEnvironment*
3111 Function - subghz_protocol_encoder_intertechno_v3_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3112 Function - subghz_protocol_encoder_intertechno_v3_free void void*
3113 Function - subghz_protocol_encoder_intertechno_v3_stop void void*
3114 Function - subghz_protocol_encoder_intertechno_v3_yield LevelDuration void*
3115 Function - subghz_protocol_encoder_keeloq_alloc void* SubGhzEnvironment*
3116 Function - subghz_protocol_encoder_keeloq_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3117 Function - subghz_protocol_encoder_keeloq_free void void*
3118 Function - subghz_protocol_encoder_keeloq_stop void void*
3119 Function - subghz_protocol_encoder_keeloq_yield LevelDuration void*
3120 Function - subghz_protocol_encoder_kinggates_stylo_4k_alloc void* SubGhzEnvironment*
3121 Function - subghz_protocol_encoder_kinggates_stylo_4k_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3122 Function - subghz_protocol_encoder_kinggates_stylo_4k_free void void*
3123 Function - subghz_protocol_encoder_kinggates_stylo_4k_stop void void*
3124 Function - subghz_protocol_encoder_kinggates_stylo_4k_yield LevelDuration void*
3125 Function - subghz_protocol_encoder_linear_alloc void* SubGhzEnvironment*
3126 Function - subghz_protocol_encoder_linear_delta3_alloc void* SubGhzEnvironment*
3127 Function - subghz_protocol_encoder_linear_delta3_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3128 Function - subghz_protocol_encoder_linear_delta3_free void void*
3129 Function - subghz_protocol_encoder_linear_delta3_stop void void*
3130 Function - subghz_protocol_encoder_linear_delta3_yield LevelDuration void*
3131 Function - subghz_protocol_encoder_linear_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3132 Function - subghz_protocol_encoder_linear_free void void*
3133 Function - subghz_protocol_encoder_linear_stop void void*
3134 Function - subghz_protocol_encoder_linear_yield LevelDuration void*
3135 Function - subghz_protocol_encoder_magellan_alloc void* SubGhzEnvironment*
3136 Function - subghz_protocol_encoder_magellan_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3137 Function - subghz_protocol_encoder_magellan_free void void*
3138 Function - subghz_protocol_encoder_magellan_stop void void*
3139 Function - subghz_protocol_encoder_magellan_yield LevelDuration void*
3140 Function - subghz_protocol_encoder_marantec_alloc void* SubGhzEnvironment*
3141 Function - subghz_protocol_encoder_marantec_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3142 Function - subghz_protocol_encoder_marantec_free void void*
3143 Function - subghz_protocol_encoder_marantec_stop void void*
3144 Function - subghz_protocol_encoder_marantec_yield LevelDuration void*
3145 Function - subghz_protocol_encoder_megacode_alloc void* SubGhzEnvironment*
3146 Function - subghz_protocol_encoder_megacode_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3147 Function - subghz_protocol_encoder_megacode_free void void*
3148 Function - subghz_protocol_encoder_megacode_stop void void*
3149 Function - subghz_protocol_encoder_megacode_yield LevelDuration void*
3150 Function - subghz_protocol_encoder_nero_radio_alloc void* SubGhzEnvironment*
3151 Function - subghz_protocol_encoder_nero_radio_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3152 Function - subghz_protocol_encoder_nero_radio_free void void*
3153 Function - subghz_protocol_encoder_nero_radio_stop void void*
3154 Function - subghz_protocol_encoder_nero_radio_yield LevelDuration void*
3155 Function - subghz_protocol_encoder_nero_sketch_alloc void* SubGhzEnvironment*
3156 Function - subghz_protocol_encoder_nero_sketch_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3157 Function - subghz_protocol_encoder_nero_sketch_free void void*
3158 Function - subghz_protocol_encoder_nero_sketch_stop void void*
3159 Function - subghz_protocol_encoder_nero_sketch_yield LevelDuration void*
3160 Function - subghz_protocol_encoder_nice_flo_alloc void* SubGhzEnvironment*
3161 Function - subghz_protocol_encoder_nice_flo_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3162 Function - subghz_protocol_encoder_nice_flo_free void void*
3163 Function - subghz_protocol_encoder_nice_flo_stop void void*
3164 Function - subghz_protocol_encoder_nice_flo_yield LevelDuration void*
3165 Function - subghz_protocol_encoder_nice_flor_s_alloc void* SubGhzEnvironment*
3166 Function - subghz_protocol_encoder_nice_flor_s_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3167 Function - subghz_protocol_encoder_nice_flor_s_free void void*
3168 Function - subghz_protocol_encoder_nice_flor_s_stop void void*
3169 Function - subghz_protocol_encoder_nice_flor_s_yield LevelDuration void*
3170 Function - subghz_protocol_encoder_phoenix_v2_alloc void* SubGhzEnvironment*
3171 Function - subghz_protocol_encoder_phoenix_v2_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3172 Function - subghz_protocol_encoder_phoenix_v2_free void void*
3173 Function - subghz_protocol_encoder_phoenix_v2_stop void void*
3174 Function - subghz_protocol_encoder_phoenix_v2_yield LevelDuration void*
3175 Function - subghz_protocol_encoder_power_smart_alloc void* SubGhzEnvironment*
3176 Function - subghz_protocol_encoder_power_smart_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3177 Function - subghz_protocol_encoder_power_smart_free void void*
3178 Function - subghz_protocol_encoder_power_smart_stop void void*
3179 Function - subghz_protocol_encoder_power_smart_yield LevelDuration void*
3180 Function + subghz_protocol_encoder_princeton_alloc void* SubGhzEnvironment*
3181 Function + - subghz_protocol_encoder_princeton_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3182 Function + subghz_protocol_encoder_princeton_free void void*
3183 Function + subghz_protocol_encoder_princeton_stop void void*
3184 Function + subghz_protocol_encoder_princeton_yield LevelDuration void*
3185 Function + subghz_protocol_encoder_raw_alloc void* SubGhzEnvironment*
3186 Function + subghz_protocol_encoder_raw_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3187 Function + subghz_protocol_encoder_raw_free void void*
3188 Function + subghz_protocol_encoder_raw_stop void void*
3189 Function + subghz_protocol_encoder_raw_yield LevelDuration void*
3190 Function - subghz_protocol_encoder_secplus_v1_alloc void* SubGhzEnvironment*
3191 Function - subghz_protocol_encoder_secplus_v1_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3192 Function - subghz_protocol_encoder_secplus_v1_free void void*
3193 Function - subghz_protocol_encoder_secplus_v1_stop void void*
3194 Function - subghz_protocol_encoder_secplus_v1_yield LevelDuration void*
3195 Function - subghz_protocol_encoder_secplus_v2_alloc void* SubGhzEnvironment*
3196 Function - subghz_protocol_encoder_secplus_v2_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3197 Function - subghz_protocol_encoder_secplus_v2_free void void*
3198 Function - subghz_protocol_encoder_secplus_v2_stop void void*
3199 Function - subghz_protocol_encoder_secplus_v2_yield LevelDuration void*
3200 Function - subghz_protocol_encoder_smc5326_alloc void* SubGhzEnvironment*
3201 Function - subghz_protocol_encoder_smc5326_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3202 Function - subghz_protocol_encoder_smc5326_free void void*
3203 Function - subghz_protocol_encoder_smc5326_stop void void*
3204 Function - subghz_protocol_encoder_smc5326_yield LevelDuration void*
3205 Function - subghz_protocol_encoder_somfy_keytis_alloc void* SubGhzEnvironment*
3206 Function - subghz_protocol_encoder_somfy_keytis_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3207 Function - subghz_protocol_encoder_somfy_keytis_free void void*
3208 Function - subghz_protocol_encoder_somfy_keytis_stop void void*
3209 Function - subghz_protocol_encoder_somfy_keytis_yield LevelDuration void*
3210 Function - subghz_protocol_encoder_somfy_telis_alloc void* SubGhzEnvironment*
3211 Function - subghz_protocol_encoder_somfy_telis_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3212 Function - subghz_protocol_encoder_somfy_telis_free void void*
3213 Function - subghz_protocol_encoder_somfy_telis_stop void void*
3214 Function - subghz_protocol_encoder_somfy_telis_yield LevelDuration void*
3215 Function - subghz_protocol_encoder_star_line_alloc void* SubGhzEnvironment*
3216 Function - subghz_protocol_encoder_star_line_deserialize _Bool SubGhzProtocolStatus void*, FlipperFormat*
3217 Function - subghz_protocol_encoder_star_line_free void void*
3218 Function - subghz_protocol_encoder_star_line_stop void void*
3219 Function - subghz_protocol_encoder_star_line_yield LevelDuration void*
3262 Function + subghz_setting_load_custom_preset _Bool SubGhzSetting*, const char*, FlipperFormat*
3263 Function + subghz_setting_set_default_frequency void SubGhzSetting*, uint32_t
3264 Function + subghz_transmitter_alloc_init SubGhzTransmitter* SubGhzEnvironment*, const char*
3265 Function + subghz_transmitter_deserialize _Bool SubGhzProtocolStatus SubGhzTransmitter*, FlipperFormat*
3266 Function + subghz_transmitter_free void SubGhzTransmitter*
3267 Function + subghz_transmitter_get_protocol_instance SubGhzProtocolEncoderBase* SubGhzTransmitter*
3268 Function + subghz_transmitter_stop _Bool SubGhzTransmitter*

View File

@ -20,12 +20,12 @@ void subghz_block_generic_get_preset_name(const char* preset_name, FuriString* p
furi_string_set(preset_str, preset_name_temp);
}
bool subghz_block_generic_serialize(
SubGhzProtocolStatus subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(instance);
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
do {
@ -33,11 +33,13 @@ bool subghz_block_generic_serialize(
if(!flipper_format_write_header_cstr(
flipper_format, SUBGHZ_KEY_FILE_TYPE, SUBGHZ_KEY_FILE_VERSION)) {
FURI_LOG_E(TAG, "Unable to add header");
res = SubGhzProtocolStatusErrorParserHeader;
break;
}
if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
res = SubGhzProtocolStatusErrorParserFrequency;
break;
}
@ -45,27 +47,32 @@ bool subghz_block_generic_serialize(
if(!flipper_format_write_string_cstr(
flipper_format, "Preset", furi_string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
res = SubGhzProtocolStatusErrorParserPreset;
break;
}
if(!strcmp(furi_string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
if(!flipper_format_write_string_cstr(
flipper_format, "Custom_preset_module", "CC1101")) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
if(!flipper_format_write_hex(
flipper_format, "Custom_preset_data", preset->data, preset->data_size)) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
}
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
res = SubGhzProtocolStatusErrorParserProtocolName;
break;
}
uint32_t temp = instance->data_count_bit;
if(!flipper_format_write_uint32(flipper_format, "Bit", &temp, 1)) {
FURI_LOG_E(TAG, "Unable to add Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
@ -76,6 +83,7 @@ bool subghz_block_generic_serialize(
if(!flipper_format_write_hex(flipper_format, "Key", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Unable to add Key");
res = SubGhzProtocolStatusErrorParserKey;
break;
}
@ -88,15 +96,16 @@ bool subghz_block_generic_serialize(
break;
}
}
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}
bool subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format) {
furi_assert(instance);
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
uint32_t temp_data = 0;
@ -104,10 +113,12 @@ bool subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperForma
do {
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "Bit", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
instance->data_count_bit = (uint16_t)temp_data;
@ -115,16 +126,36 @@ bool subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperForma
uint8_t key_data[sizeof(uint64_t)] = {0};
if(!flipper_format_read_hex(flipper_format, "Key", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Missing Key");
res = SubGhzProtocolStatusErrorParserKey;
break;
}
for(uint8_t i = 0; i < sizeof(uint64_t); i++) {
instance->data = instance->data << 8 | key_data[i];
}
res = true;
res = SubGhzProtocolStatusOk;
} while(0);
furi_string_free(temp_str);
return res;
}
SubGhzProtocolStatus subghz_block_generic_deserialize_check_count_bit(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
uint16_t count_bit) {
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
ret = subghz_block_generic_deserialize(instance, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(instance->data_count_bit != count_bit) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
} while(false);
return ret;
}

View File

@ -39,9 +39,9 @@ void subghz_block_generic_get_preset_name(const char* preset_name, FuriString* p
* @param instance Pointer to a SubGhzBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return Status Error
*/
bool subghz_block_generic_serialize(
SubGhzProtocolStatus subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -50,9 +50,22 @@ bool subghz_block_generic_serialize(
* Deserialize data SubGhzBlockGeneric.
* @param instance Pointer to a SubGhzBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return Status Error
*/
bool subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_block_generic_deserialize(SubGhzBlockGeneric* instance, FlipperFormat* flipper_format);
/**
* Deserialize data SubGhzBlockGeneric.
* @param instance Pointer to a SubGhzBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param count_bit Count bit protocol
* @return Status Error
*/
SubGhzProtocolStatus subghz_block_generic_deserialize_check_count_bit(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
uint16_t count_bit);
#ifdef __cplusplus
}

View File

@ -499,12 +499,12 @@ static bool subghz_protocol_encoder_alutech_at_4n_get_upload(
return true;
}
bool subghz_protocol_encoder_alutech_at_4n_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_alutech_at_4n_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderAlutech_at_4n* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
@ -540,7 +540,7 @@ bool subghz_protocol_encoder_alutech_at_4n_deserialize(
instance->encoder.is_running = true;
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
return res;
@ -740,46 +740,46 @@ uint8_t subghz_protocol_decoder_alutech_at_4n_get_hash_data(void* context) {
return (uint8_t)instance->crc;
}
bool subghz_protocol_decoder_alutech_at_4n_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_alutech_at_4n_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
SubGhzProtocolDecoderAlutech_at_4n* instance = context;
bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_uint32(flipper_format, "CRC", &instance->crc, 1)) {
SubGhzProtocolStatus res =
subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if((res == SubGhzProtocolStatusOk) &&
!flipper_format_write_uint32(flipper_format, "CRC", &instance->crc, 1)) {
FURI_LOG_E(TAG, "Unable to add CRC");
res = false;
res = SubGhzProtocolStatusErrorParserOthers;
}
return res;
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_alutech_at_4n_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_alutech_at_4n_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderAlutech_at_4n* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_alutech_at_4n_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_alutech_at_4n_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "CRC", (uint32_t*)&instance->crc, 1)) {
FURI_LOG_E(TAG, "Missing CRC");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -55,9 +55,8 @@ bool subghz_protocol_alutech_at_4n_create_data(
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_encoder_alutech_at_4n_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_alutech_at_4n_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -111,9 +110,9 @@ uint8_t subghz_protocol_decoder_alutech_at_4n_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderAlutech_at_4n instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_alutech_at_4n_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_alutech_at_4n_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -122,11 +121,10 @@ bool subghz_protocol_decoder_alutech_at_4n_serialize(
* Deserialize data SubGhzProtocolDecoderAlutech_at_4n.
* @param context Pointer to a SubGhzProtocolDecoderAlutech_at_4n instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_alutech_at_4n_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_alutech_at_4n_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -136,28 +136,29 @@ static bool subghz_protocol_encoder_ansonic_get_upload(SubGhzProtocolEncoderAnso
return true;
}
bool subghz_protocol_encoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderAnsonic* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
res = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_ansonic_const.min_count_bit_for_found);
if(res != SubGhzProtocolStatusOk) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_ansonic_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_ansonic_get_upload(instance)) break;
if(!subghz_protocol_encoder_ansonic_get_upload(instance)) {
res = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
@ -301,7 +302,7 @@ uint8_t subghz_protocol_decoder_ansonic_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_ansonic_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_ansonic_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -310,22 +311,12 @@ bool subghz_protocol_decoder_ansonic_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderAnsonic* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_ansonic_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_ansonic_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_ansonic_get_string(void* context, FuriString* output) {

View File

@ -30,7 +30,8 @@ void subghz_protocol_encoder_ansonic_free(void* context);
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_encoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -86,7 +87,7 @@ uint8_t subghz_protocol_decoder_ansonic_get_hash_data(void* context);
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
*/
bool subghz_protocol_decoder_ansonic_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_ansonic_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -97,7 +98,8 @@ bool subghz_protocol_decoder_ansonic_serialize(
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_decoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_ansonic_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -23,11 +23,11 @@ bool subghz_protocol_decoder_base_get_string(
return status;
}
bool subghz_protocol_decoder_base_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_base_serialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
bool status = false;
SubGhzProtocolStatus status = SubGhzProtocolStatusError;
if(decoder_base->protocol && decoder_base->protocol->decoder &&
decoder_base->protocol->decoder->serialize) {
@ -37,10 +37,10 @@ bool subghz_protocol_decoder_base_serialize(
return status;
}
bool subghz_protocol_decoder_base_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_base_deserialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format) {
bool status = false;
SubGhzProtocolStatus status = SubGhzProtocolStatusError;
if(decoder_base->protocol && decoder_base->protocol->decoder &&
decoder_base->protocol->decoder->deserialize) {

View File

@ -49,9 +49,9 @@ bool subghz_protocol_decoder_base_get_string(
* @param decoder_base Pointer to a SubGhzProtocolDecoderBase instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return Status Error
*/
bool subghz_protocol_decoder_base_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_base_serialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -60,9 +60,9 @@ bool subghz_protocol_decoder_base_serialize(
* Deserialize data SubGhzProtocolDecoderBase.
* @param decoder_base Pointer to a SubGhzProtocolDecoderBase instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return Status Error
*/
bool subghz_protocol_decoder_base_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_base_deserialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format);

View File

@ -155,31 +155,32 @@ static bool subghz_protocol_encoder_bett_get_upload(SubGhzProtocolEncoderBETT* i
return true;
}
bool subghz_protocol_encoder_bett_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_bett_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderBETT* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_bett_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_bett_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_bett_get_upload(instance)) break;
if(!subghz_protocol_encoder_bett_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_bett_stop(void* context) {
@ -295,7 +296,7 @@ uint8_t subghz_protocol_decoder_bett_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_bett_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_bett_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -304,22 +305,12 @@ bool subghz_protocol_decoder_bett_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_bett_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_bett_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderBETT* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_bett_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_bett_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_bett_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_bett_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderBETT instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_bett_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_bett_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_bett_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderBETT instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_bett_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_bett_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_bett_serialize(
* Deserialize data SubGhzProtocolDecoderBETT.
* @param context Pointer to a SubGhzProtocolDecoderBETT instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_bett_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_bett_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -219,20 +219,23 @@ static bool subghz_protocol_encoder_bin_raw_get_upload(SubGhzProtocolEncoderBinR
return true;
}
bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderBinRAW* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
uint32_t temp_data = 0;
do {
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "Bit", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
@ -240,6 +243,7 @@ bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* f
if(!flipper_format_read_uint32(flipper_format, "TE", (uint32_t*)&instance->te, 1)) {
FURI_LOG_E(TAG, "Missing TE");
res = SubGhzProtocolStatusErrorParserTe;
break;
}
@ -251,11 +255,13 @@ bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* f
while(flipper_format_read_uint32(flipper_format, "Bit_RAW", (uint32_t*)&temp_data, 1)) {
if(ind >= BIN_RAW_MAX_MARKUP_COUNT) {
FURI_LOG_E(TAG, "Markup overflow");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
byte_count += subghz_protocol_bin_raw_get_full_byte(temp_data);
if(byte_count > BIN_RAW_BUF_DATA_SIZE) {
FURI_LOG_E(TAG, "Receive buffer overflow");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
@ -270,6 +276,7 @@ bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* f
subghz_protocol_bin_raw_get_full_byte(temp_data))) {
instance->data_markup[ind].bit_count = 0;
FURI_LOG_E(TAG, "Missing Data_RAW");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
ind++;
@ -297,16 +304,20 @@ bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* f
#endif
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_bin_raw_get_upload(instance)) break;
if(!subghz_protocol_encoder_bin_raw_get_upload(instance)) {
break;
res = SubGhzProtocolStatusErrorEncoderGetUpload;
}
instance->encoder.is_running = true;
res = true;
res = SubGhzProtocolStatusOk;
} while(0);
return res;
@ -957,14 +968,14 @@ uint8_t subghz_protocol_decoder_bin_raw_get_hash_data(void* context) {
subghz_protocol_bin_raw_get_full_byte(instance->data_markup[0].bit_count));
}
bool subghz_protocol_decoder_bin_raw_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_bin_raw_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
SubGhzProtocolDecoderBinRAW* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
do {
@ -972,11 +983,13 @@ bool subghz_protocol_decoder_bin_raw_serialize(
if(!flipper_format_write_header_cstr(
flipper_format, SUBGHZ_KEY_FILE_TYPE, SUBGHZ_KEY_FILE_VERSION)) {
FURI_LOG_E(TAG, "Unable to add header");
res = SubGhzProtocolStatusErrorParserHeader;
break;
}
if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
res = SubGhzProtocolStatusErrorParserFrequency;
break;
}
@ -984,34 +997,40 @@ bool subghz_protocol_decoder_bin_raw_serialize(
if(!flipper_format_write_string_cstr(
flipper_format, "Preset", furi_string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
res = SubGhzProtocolStatusErrorParserPreset;
break;
}
if(!strcmp(furi_string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
if(!flipper_format_write_string_cstr(
flipper_format, "Custom_preset_module", "CC1101")) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
if(!flipper_format_write_hex(
flipper_format, "Custom_preset_data", preset->data, preset->data_size)) {
FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
res = SubGhzProtocolStatusErrorParserCustomPreset;
break;
}
}
if(!flipper_format_write_string_cstr(
flipper_format, "Protocol", instance->generic.protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
res = SubGhzProtocolStatusErrorParserProtocolName;
break;
}
uint32_t temp = instance->generic.data_count_bit;
if(!flipper_format_write_uint32(flipper_format, "Bit", &temp, 1)) {
FURI_LOG_E(TAG, "Unable to add Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
if(!flipper_format_write_uint32(flipper_format, "TE", &instance->te, 1)) {
FURI_LOG_E(TAG, "Unable to add TE");
res = SubGhzProtocolStatusErrorParserTe;
break;
}
@ -1020,6 +1039,7 @@ bool subghz_protocol_decoder_bin_raw_serialize(
temp = instance->data_markup[i].bit_count;
if(!flipper_format_write_uint32(flipper_format, "Bit_RAW", &temp, 1)) {
FURI_LOG_E(TAG, "Bit_RAW");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_write_hex(
@ -1028,31 +1048,35 @@ bool subghz_protocol_decoder_bin_raw_serialize(
instance->data + instance->data_markup[i].byte_bias,
subghz_protocol_bin_raw_get_full_byte(instance->data_markup[i].bit_count))) {
FURI_LOG_E(TAG, "Unable to add Data_RAW");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
i++;
}
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}
bool subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderBinRAW* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
uint32_t temp_data = 0;
do {
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "Bit", (uint32_t*)&temp_data, 1)) {
FURI_LOG_E(TAG, "Missing Bit");
res = SubGhzProtocolStatusErrorParserBitCount;
break;
}
@ -1060,6 +1084,7 @@ bool subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* f
if(!flipper_format_read_uint32(flipper_format, "TE", (uint32_t*)&instance->te, 1)) {
FURI_LOG_E(TAG, "Missing TE");
res = SubGhzProtocolStatusErrorParserTe;
break;
}
@ -1071,11 +1096,13 @@ bool subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* f
while(flipper_format_read_uint32(flipper_format, "Bit_RAW", (uint32_t*)&temp_data, 1)) {
if(ind >= BIN_RAW_MAX_MARKUP_COUNT) {
FURI_LOG_E(TAG, "Markup overflow");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
byte_count += subghz_protocol_bin_raw_get_full_byte(temp_data);
if(byte_count > BIN_RAW_BUF_DATA_SIZE) {
FURI_LOG_E(TAG, "Receive buffer overflow");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
@ -1090,12 +1117,13 @@ bool subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* f
subghz_protocol_bin_raw_get_full_byte(temp_data))) {
instance->data_markup[ind].bit_count = 0;
FURI_LOG_E(TAG, "Missing Data_RAW");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
ind++;
}
res = true;
res = SubGhzProtocolStatusOk;
} while(0);
return res;

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_bin_raw_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderBinRAW instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -88,9 +89,9 @@ void subghz_protocol_decoder_bin_raw_data_input_rssi(
* @param context Pointer to a SubGhzProtocolDecoderBinRAW instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_bin_raw_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_bin_raw_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -99,9 +100,10 @@ bool subghz_protocol_decoder_bin_raw_serialize(
* Deserialize data SubGhzProtocolDecoderBinRAW.
* @param context Pointer to a SubGhzProtocolDecoderBinRAW instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_bin_raw_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -13,6 +13,7 @@
*/
#define TAG "SubGhzProtocolCAME"
#define CAME_12_COUNT_BIT 12
#define CAME_24_COUNT_BIT 24
#define PRASTEL_COUNT_BIT 25
#define PRASTEL_NAME "Prastel"
@ -108,6 +109,7 @@ void subghz_protocol_encoder_came_free(void* context) {
*/
static bool subghz_protocol_encoder_came_get_upload(SubGhzProtocolEncoderCame* instance) {
furi_assert(instance);
uint32_t header_te = 0;
size_t index = 0;
size_t size_upload = (instance->generic.data_count_bit * 2) + 2;
if(size_upload > instance->encoder.size_upload) {
@ -117,25 +119,28 @@ static bool subghz_protocol_encoder_came_get_upload(SubGhzProtocolEncoderCame* i
instance->encoder.size_upload = size_upload;
}
//Send header
// CAME 24 Bit = 24320 us
if(instance->generic.data_count_bit == CAME_24_COUNT_BIT) {
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_const.te_short * 76);
} else if(
(instance->generic.data_count_bit == subghz_protocol_came_const.min_count_bit_for_found) ||
(instance->generic.data_count_bit == AIRFORCE_COUNT_BIT)) {
switch(instance->generic.data_count_bit) {
case CAME_24_COUNT_BIT:
// CAME 24 Bit = 24320 us
header_te = 76;
break;
case CAME_12_COUNT_BIT:
case AIRFORCE_COUNT_BIT:
// CAME 12 Bit Original only! and Airforce protocol = 15040 us
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_const.te_short * 47);
} else if(instance->generic.data_count_bit == PRASTEL_COUNT_BIT) {
header_te = 47;
break;
case PRASTEL_COUNT_BIT:
// PRASTEL = 11520 us
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_const.te_short * 36);
} else {
header_te = 36;
break;
default:
// Some wrong detected protocols, 5120 us
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_const.te_short * 16);
header_te = 16;
break;
}
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_came_const.te_short * header_te);
//Send start bit
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_came_const.te_short);
@ -158,30 +163,33 @@ static bool subghz_protocol_encoder_came_get_upload(SubGhzProtocolEncoderCame* i
return true;
}
bool subghz_protocol_encoder_came_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_came_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderCame* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if((instance->generic.data_count_bit > PRASTEL_COUNT_BIT)) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_came_get_upload(instance)) break;
if(!subghz_protocol_encoder_came_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_came_stop(void* context) {
@ -256,8 +264,11 @@ void subghz_protocol_decoder_came_feed(void* context, bool level, uint32_t durat
if(!level) { //save interval
if(duration >= (subghz_protocol_came_const.te_short * 4)) {
instance->decoder.parser_step = CameDecoderStepFoundStartBit;
if(instance->decoder.decode_count_bit >=
subghz_protocol_came_const.min_count_bit_for_found) {
if((instance->decoder.decode_count_bit ==
subghz_protocol_came_const.min_count_bit_for_found) ||
(instance->decoder.decode_count_bit == AIRFORCE_COUNT_BIT) ||
(instance->decoder.decode_count_bit == PRASTEL_COUNT_BIT) ||
(instance->decoder.decode_count_bit == CAME_24_COUNT_BIT)) {
instance->generic.serial = 0x0;
instance->generic.btn = 0x0;
@ -306,7 +317,7 @@ uint8_t subghz_protocol_decoder_came_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_came_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -315,19 +326,21 @@ bool subghz_protocol_decoder_came_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_came_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderCame* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if((instance->generic.data_count_bit > PRASTEL_COUNT_BIT)) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_came_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderCame instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_came_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_came_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_came_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderCame instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_came_serialize(
* Deserialize data SubGhzProtocolDecoderCame.
* @param context Pointer to a SubGhzProtocolDecoderCame instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_came_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -223,10 +223,11 @@ static void
instance->generic.data &= 0xFFFFFFFFFFFFFFF;
}
bool subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderCameAtomo* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
@ -255,7 +256,7 @@ bool subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat
instance->encoder.is_running = true;
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
return res;
@ -549,7 +550,7 @@ uint8_t subghz_protocol_decoder_came_atomo_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_came_atomo_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_atomo_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -558,22 +559,14 @@ bool subghz_protocol_decoder_came_atomo_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderCameAtomo* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_came_atomo_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_came_atomo_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_came_atomo_get_string(void* context, FuriString* output) {

View File

@ -33,7 +33,8 @@ void subghz_protocol_encoder_came_atomo_free(void* context);
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -87,9 +88,9 @@ uint8_t subghz_protocol_decoder_came_atomo_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderCameAtomo instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_atomo_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_atomo_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -98,9 +99,10 @@ bool subghz_protocol_decoder_came_atomo_serialize(
* Deserialize data SubGhzProtocolDecoderCameAtomo.
* @param context Pointer to a SubGhzProtocolDecoderCameAtomo instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -241,18 +241,17 @@ static void subghz_protocol_came_twee_remote_controller(SubGhzBlockGeneric* inst
instance->cnt = data >> 6;
}
bool subghz_protocol_encoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderCameTwee* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_came_twee_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
res = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_came_twee_const.min_count_bit_for_found);
if(res != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
@ -262,8 +261,6 @@ bool subghz_protocol_encoder_came_twee_deserialize(void* context, FlipperFormat*
subghz_protocol_came_twee_remote_controller(&instance->generic);
subghz_protocol_encoder_came_twee_get_upload(instance);
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
@ -419,7 +416,7 @@ uint8_t subghz_protocol_decoder_came_twee_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_came_twee_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_twee_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -428,22 +425,14 @@ bool subghz_protocol_decoder_came_twee_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderCameTwee* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_came_twee_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_came_twee_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_came_twee_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_came_twee_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderCameTwee instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_came_twee_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderCameTwee instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_twee_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_came_twee_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_came_twee_serialize(
* Deserialize data SubGhzProtocolDecoderCameTwee.
* @param context Pointer to a SubGhzProtocolDecoderCameTwee instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -207,31 +207,35 @@ static bool
return true;
}
bool subghz_protocol_encoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderChamb_Code* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(instance->generic.data_count_bit >
subghz_protocol_chamb_code_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_chamb_code_get_upload(instance)) break;
if(!subghz_protocol_encoder_chamb_code_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_chamb_code_stop(void* context) {
@ -425,7 +429,7 @@ uint8_t subghz_protocol_decoder_chamb_code_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_chamb_code_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_chamb_code_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -434,20 +438,22 @@ bool subghz_protocol_decoder_chamb_code_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderChamb_Code* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(instance->generic.data_count_bit >
subghz_protocol_chamb_code_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_chamb_code_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderChamb_Code instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_chamb_code_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderChamb_Code instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_chamb_code_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_chamb_code_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_chamb_code_serialize(
* Deserialize data SubGhzProtocolDecoderChamb_Code.
* @param context Pointer to a SubGhzProtocolDecoderChamb_Code instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -155,31 +155,32 @@ static bool subghz_protocol_encoder_clemsa_get_upload(SubGhzProtocolEncoderClems
return true;
}
bool subghz_protocol_encoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderClemsa* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_clemsa_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_clemsa_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_clemsa_get_upload(instance)) break;
if(!subghz_protocol_encoder_clemsa_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_clemsa_stop(void* context) {
@ -316,7 +317,7 @@ uint8_t subghz_protocol_decoder_clemsa_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_clemsa_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_clemsa_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -325,22 +326,12 @@ bool subghz_protocol_decoder_clemsa_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderClemsa* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_clemsa_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_clemsa_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_clemsa_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_clemsa_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderClemsa instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_clemsa_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderClemsa instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_clemsa_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_clemsa_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_clemsa_serialize(
* Deserialize data SubGhzProtocolDecoderClemsa.
* @param context Pointer to a SubGhzProtocolDecoderClemsa instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_clemsa_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -136,31 +136,31 @@ static bool subghz_protocol_encoder_doitrand_get_upload(SubGhzProtocolEncoderDoi
return true;
}
bool subghz_protocol_encoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderDoitrand* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_doitrand_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_doitrand_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_doitrand_get_upload(instance)) break;
if(!subghz_protocol_encoder_doitrand_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_doitrand_stop(void* context) {
@ -310,7 +310,7 @@ uint8_t subghz_protocol_decoder_doitrand_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_doitrand_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_doitrand_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -319,22 +319,14 @@ bool subghz_protocol_decoder_doitrand_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderDoitrand* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_doitrand_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_doitrand_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_doitrand_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_doitrand_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderDoitrand instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_doitrand_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderDoitrand instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_doitrand_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_doitrand_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_doitrand_serialize(
* Deserialize data SubGhzProtocolDecoderDoitrand.
* @param context Pointer to a SubGhzProtocolDecoderDoitrand instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_doitrand_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -146,31 +146,31 @@ static bool subghz_protocol_encoder_dooya_get_upload(SubGhzProtocolEncoderDooya*
return true;
}
bool subghz_protocol_encoder_dooya_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_dooya_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderDooya* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_dooya_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_dooya_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_dooya_get_upload(instance)) break;
if(!subghz_protocol_encoder_dooya_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_dooya_stop(void* context) {
@ -354,7 +354,7 @@ uint8_t subghz_protocol_decoder_dooya_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_dooya_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_dooya_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -363,22 +363,12 @@ bool subghz_protocol_decoder_dooya_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_dooya_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_dooya_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderDooya* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_dooya_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_dooya_const.min_count_bit_for_found);
}
/**

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_dooya_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderDooya instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_dooya_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_dooya_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_dooya_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderDooya instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_dooya_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_dooya_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_dooya_serialize(
* Deserialize data SubGhzProtocolDecoderDooya.
* @param context Pointer to a SubGhzProtocolDecoderDooya instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_dooya_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_dooya_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -217,10 +217,11 @@ static bool subghz_protocol_encoder_faac_slh_get_upload(SubGhzProtocolEncoderFaa
return true;
}
bool subghz_protocol_encoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderFaacSLH* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
@ -261,7 +262,7 @@ bool subghz_protocol_encoder_faac_slh_deserialize(void* context, FlipperFormat*
instance->encoder.is_running = true;
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
return res;
@ -422,7 +423,7 @@ uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_faac_slh_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_faac_slh_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -448,7 +449,8 @@ bool subghz_protocol_decoder_faac_slh_serialize(
return res;
}
bool subghz_protocol_decoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderFaacSLH* instance = context;
bool res = false;

View File

@ -52,7 +52,8 @@ bool subghz_protocol_faac_slh_create_data(
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_encoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -106,9 +107,9 @@ uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderFaacSLH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_faac_slh_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_faac_slh_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -117,9 +118,10 @@ bool subghz_protocol_decoder_faac_slh_serialize(
* Deserialize data SubGhzProtocolDecoderFaacSLH.
* @param context Pointer to a SubGhzProtocolDecoderFaacSLH instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -129,31 +129,31 @@ static bool subghz_protocol_encoder_gate_tx_get_upload(SubGhzProtocolEncoderGate
return true;
}
bool subghz_protocol_encoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderGateTx* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_gate_tx_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_gate_tx_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_gate_tx_get_upload(instance)) break;
if(!subghz_protocol_encoder_gate_tx_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_gate_tx_stop(void* context) {
@ -290,7 +290,7 @@ uint8_t subghz_protocol_decoder_gate_tx_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_gate_tx_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_gate_tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -299,22 +299,12 @@ bool subghz_protocol_decoder_gate_tx_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderGateTx* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_gate_tx_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_gate_tx_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_gate_tx_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_gate_tx_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderGateTx instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_gate_tx_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderGateTx instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_gate_tx_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_gate_tx_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_gate_tx_serialize(
* Deserialize data SubGhzProtocolDecoderGateTx.
* @param context Pointer to a SubGhzProtocolDecoderGateTx instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -142,31 +142,31 @@ static bool subghz_protocol_encoder_holtek_get_upload(SubGhzProtocolEncoderHolte
return true;
}
bool subghz_protocol_encoder_holtek_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_holtek_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderHoltek* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_holtek_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_holtek_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_holtek_get_upload(instance)) break;
if(!subghz_protocol_encoder_holtek_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_holtek_stop(void* context) {
@ -322,7 +322,7 @@ uint8_t subghz_protocol_decoder_holtek_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_holtek_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_holtek_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -331,22 +331,12 @@ bool subghz_protocol_decoder_holtek_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_holtek_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_holtek_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderHoltek* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_holtek_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_holtek_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_holtek_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_holtek_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderHoltek instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_holtek_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_holtek_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_holtek_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderHoltek instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_holtek_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_holtek_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_holtek_serialize(
* Deserialize data SubGhzProtocolDecoderHoltek.
* @param context Pointer to a SubGhzProtocolDecoderHoltek instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_holtek_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_holtek_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -147,39 +147,41 @@ static bool
return true;
}
bool subghz_protocol_encoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderHoltek_HT12X* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_holtek_th12x_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "TE", (uint32_t*)&instance->te, 1)) {
FURI_LOG_E(TAG, "Missing TE");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_holtek_th12x_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorParserTe;
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_holtek_th12x_get_upload(instance)) break;
if(!subghz_protocol_encoder_holtek_th12x_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_holtek_th12x_stop(void* context) {
@ -327,42 +329,45 @@ uint8_t subghz_protocol_decoder_holtek_th12x_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_holtek_th12x_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_holtek_th12x_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
SubGhzProtocolDecoderHoltek_HT12X* instance = context;
bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_uint32(flipper_format, "TE", &instance->te, 1)) {
SubGhzProtocolStatus ret =
subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if((ret == SubGhzProtocolStatusOk) &&
!flipper_format_write_uint32(flipper_format, "TE", &instance->te, 1)) {
FURI_LOG_E(TAG, "Unable to add TE");
res = false;
ret = SubGhzProtocolStatusErrorParserTe;
}
return res;
return ret;
}
bool subghz_protocol_decoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderHoltek_HT12X* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_holtek_th12x_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_holtek_th12x_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_read_uint32(flipper_format, "TE", (uint32_t*)&instance->te, 1)) {
FURI_LOG_E(TAG, "Missing TE");
ret = SubGhzProtocolStatusErrorParserTe;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_holtek_th12x_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderHoltek_HT12X instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_holtek_th12x_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderHoltek_HT12X instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_holtek_th12x_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_holtek_th12x_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_holtek_th12x_serialize(
* Deserialize data SubGhzProtocolDecoderHoltek_HT12X.
* @param context Pointer to a SubGhzProtocolDecoderHoltek_HT12X instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_holtek_th12x_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -142,33 +142,32 @@ static bool subghz_protocol_encoder_honeywell_wdb_get_upload(
return true;
}
bool subghz_protocol_encoder_honeywell_wdb_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_honeywell_wdb_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderHoneywell_WDB* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_honeywell_wdb_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_honeywell_wdb_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_honeywell_wdb_get_upload(instance)) break;
if(!subghz_protocol_encoder_honeywell_wdb_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_honeywell_wdb_stop(void* context) {
@ -345,7 +344,7 @@ uint8_t subghz_protocol_decoder_honeywell_wdb_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_honeywell_wdb_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_honeywell_wdb_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -354,24 +353,15 @@ bool subghz_protocol_decoder_honeywell_wdb_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_honeywell_wdb_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_honeywell_wdb_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderHoneywell_WDB* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_honeywell_wdb_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_honeywell_wdb_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_honeywell_wdb_get_string(void* context, FuriString* output) {

View File

@ -28,11 +28,10 @@ void subghz_protocol_encoder_honeywell_wdb_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderHoneywell_WDB instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_honeywell_wdb_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_honeywell_wdb_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -86,9 +85,9 @@ uint8_t subghz_protocol_decoder_honeywell_wdb_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderHoneywell_WDB instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_honeywell_wdb_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_honeywell_wdb_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -97,11 +96,10 @@ bool subghz_protocol_decoder_honeywell_wdb_serialize(
* Deserialize data SubGhzProtocolDecoderHoneywell_WDB.
* @param context Pointer to a SubGhzProtocolDecoderHoneywell_WDB instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_honeywell_wdb_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_honeywell_wdb_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -140,31 +140,31 @@ static bool subghz_protocol_encoder_hormann_get_upload(SubGhzProtocolEncoderHorm
return true;
}
bool subghz_protocol_encoder_hormann_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_hormann_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderHormann* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_hormann_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_hormann_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_hormann_get_upload(instance)) break;
if(!subghz_protocol_encoder_hormann_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_hormann_stop(void* context) {
@ -295,7 +295,7 @@ uint8_t subghz_protocol_decoder_hormann_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_hormann_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_hormann_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -304,22 +304,12 @@ bool subghz_protocol_decoder_hormann_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_hormann_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_hormann_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderHormann* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_hormann_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_hormann_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_hormann_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_hormann_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderHormann instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_hormann_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_hormann_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_hormann_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderHormann instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_hormann_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_hormann_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_hormann_serialize(
* Deserialize data SubGhzProtocolDecoderHormann.
* @param context Pointer to a SubGhzProtocolDecoderHormann instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_hormann_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_hormann_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -180,7 +180,7 @@ uint8_t subghz_protocol_decoder_ido_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_ido_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_ido_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -189,21 +189,12 @@ bool subghz_protocol_decoder_ido_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_ido_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_ido_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderIDo* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit != subghz_protocol_ido_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_ido_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_ido_get_string(void* context, FuriString* output) {

View File

@ -50,9 +50,9 @@ uint8_t subghz_protocol_decoder_ido_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderIDo instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_ido_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_ido_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -61,9 +61,10 @@ bool subghz_protocol_decoder_ido_serialize(
* Deserialize data SubGhzProtocolDecoderIDo.
* @param context Pointer to a SubGhzProtocolDecoderIDo instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_ido_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_ido_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -158,34 +158,36 @@ static bool subghz_protocol_encoder_intertechno_v3_get_upload(
return true;
}
bool subghz_protocol_encoder_intertechno_v3_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_intertechno_v3_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderIntertechno_V3* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if((instance->generic.data_count_bit !=
subghz_protocol_intertechno_v3_const.min_count_bit_for_found) &&
(instance->generic.data_count_bit != INTERTECHNO_V3_DIMMING_COUNT_BIT)) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_intertechno_v3_get_upload(instance)) break;
if(!subghz_protocol_encoder_intertechno_v3_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_intertechno_v3_stop(void* context) {
@ -404,7 +406,7 @@ uint8_t subghz_protocol_decoder_intertechno_v3_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_intertechno_v3_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_intertechno_v3_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -413,23 +415,24 @@ bool subghz_protocol_decoder_intertechno_v3_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_intertechno_v3_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_intertechno_v3_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderIntertechno_V3* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
ret = subghz_block_generic_deserialize(&instance->generic, flipper_format);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if((instance->generic.data_count_bit !=
subghz_protocol_intertechno_v3_const.min_count_bit_for_found) &&
(instance->generic.data_count_bit != INTERTECHNO_V3_DIMMING_COUNT_BIT)) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = SubGhzProtocolStatusErrorValueBitCount;
break;
}
ret = true;
} while(false);
return ret;
}

View File

@ -28,9 +28,9 @@ void subghz_protocol_encoder_intertechno_v3_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderIntertechno_V3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return Starus error
*/
bool subghz_protocol_encoder_intertechno_v3_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_intertechno_v3_deserialize(
void* context,
FlipperFormat* flipper_format);
@ -86,9 +86,9 @@ uint8_t subghz_protocol_decoder_intertechno_v3_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderIntertechno_V3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return Starus error
*/
bool subghz_protocol_decoder_intertechno_v3_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_intertechno_v3_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -97,9 +97,9 @@ bool subghz_protocol_decoder_intertechno_v3_serialize(
* Deserialize data SubGhzProtocolDecoderIntertechno_V3.
* @param context Pointer to a SubGhzProtocolDecoderIntertechno_V3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return Starus error
*/
bool subghz_protocol_decoder_intertechno_v3_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_intertechno_v3_deserialize(
void* context,
FlipperFormat* flipper_format);

View File

@ -532,13 +532,17 @@ static bool
return true;
}
bool subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderKeeloq* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_keeloq_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(instance->generic.data_count_bit !=
@ -578,10 +582,13 @@ bool subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* fl
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_keeloq_get_upload(instance, instance->generic.btn)) break;
if(!subghz_protocol_encoder_keeloq_get_upload(instance, instance->generic.btn)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
uint8_t key_data[sizeof(uint64_t)] = {0};
@ -590,15 +597,14 @@ bool subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* fl
}
if(!flipper_format_update_hex(flipper_format, "Key", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Unable to add Key");
ret = SubGhzProtocolStatusErrorParserKey;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_keeloq_stop(void* context) {
@ -1172,14 +1178,15 @@ uint8_t subghz_protocol_decoder_keeloq_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_keeloq_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_keeloq_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
SubGhzProtocolDecoderKeeloq* instance = context;
bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
SubGhzProtocolStatus res =
subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
subghz_protocol_keeloq_check_remote_controller(
&instance->generic, instance->keystore, &instance->manufacture_name);
@ -1191,7 +1198,7 @@ bool subghz_protocol_decoder_keeloq_serialize(
}
if(res && !flipper_format_write_hex(flipper_format, "Seed", seed_data, sizeof(uint32_t))) {
FURI_LOG_E(TAG, "DECODER Serialize: Unable to add Seed");
res = false;
res = SubGhzProtocolStatusError;
}
instance->generic.seed = seed_data[0] << 24 | seed_data[1] << 16 | seed_data[2] << 8 |
seed_data[3];
@ -1200,15 +1207,16 @@ bool subghz_protocol_decoder_keeloq_serialize(
if(res && !flipper_format_write_string_cstr(
flipper_format, "Manufacture", instance->manufacture_name)) {
FURI_LOG_E(TAG, "DECODER Serialize: Unable to add manufacture name");
res = false;
res = SubGhzProtocolStatusError;
}
return res;
}
bool subghz_protocol_decoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderKeeloq* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
@ -1244,7 +1252,7 @@ bool subghz_protocol_decoder_keeloq_deserialize(void* context, FlipperFormat* fl
break;
}
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
return res;

View File

@ -81,9 +81,10 @@ bool subghz_protocol_keeloq_bft_create_data(
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderKeeloq instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -137,9 +138,9 @@ uint8_t subghz_protocol_decoder_keeloq_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderKeeloq instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return SubGhzProtocolStatus
*/
bool subghz_protocol_decoder_keeloq_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_keeloq_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -148,9 +149,10 @@ bool subghz_protocol_decoder_keeloq_serialize(
* Deserialize data SubGhzProtocolDecoderKeeloq.
* @param context Pointer to a SubGhzProtocolDecoderKeeloq instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return SubGhzProtocolStatus
*/
bool subghz_protocol_decoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_keeloq_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -230,7 +230,7 @@ uint8_t subghz_protocol_decoder_kia_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_kia_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_kia_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -239,21 +239,12 @@ bool subghz_protocol_decoder_kia_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_kia_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_kia_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderKIA* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit != subghz_protocol_kia_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_kia_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_kia_get_string(void* context, FuriString* output) {

View File

@ -50,9 +50,9 @@ uint8_t subghz_protocol_decoder_kia_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderKIA instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_kia_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_kia_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -61,9 +61,10 @@ bool subghz_protocol_decoder_kia_serialize(
* Deserialize data SubGhzProtocolDecoderKIA.
* @param context Pointer to a SubGhzProtocolDecoderKIA instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_kia_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_kia_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -263,12 +263,12 @@ static bool subghz_protocol_encoder_kinggates_stylo_4k_get_upload(
return true;
}
bool subghz_protocol_encoder_kinggates_stylo_4k_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_kinggates_stylo_4k_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderKingGates_stylo_4k* instance = context;
bool res = false;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
@ -314,7 +314,7 @@ bool subghz_protocol_encoder_kinggates_stylo_4k_deserialize(
instance->encoder.is_running = true;
res = true;
res = SubGhzProtocolStatusOk;
} while(false);
return res;
@ -509,57 +509,57 @@ uint8_t subghz_protocol_decoder_kinggates_stylo_4k_get_hash_data(void* context)
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_kinggates_stylo_4k_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_kinggates_stylo_4k_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(context);
SubGhzProtocolDecoderKingGates_stylo_4k* instance = context;
bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
SubGhzProtocolStatus ret =
subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
uint8_t key_data[sizeof(uint64_t)] = {0};
for(size_t i = 0; i < sizeof(uint64_t); i++) {
key_data[sizeof(uint64_t) - i - 1] = (instance->generic.data_2 >> (i * 8)) & 0xFF;
}
if(res && !flipper_format_write_hex(flipper_format, "Data", key_data, sizeof(uint64_t))) {
if((ret == SubGhzProtocolStatusOk) &&
!flipper_format_write_hex(flipper_format, "Data", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Unable to add Data");
res = false;
ret = SubGhzProtocolStatusErrorParserOthers;
}
return res;
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
return ret;
}
bool subghz_protocol_decoder_kinggates_stylo_4k_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_kinggates_stylo_4k_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderKingGates_stylo_4k* instance = context;
bool ret = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_kinggates_stylo_4k_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_kinggates_stylo_4k_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
if(!flipper_format_rewind(flipper_format)) {
FURI_LOG_E(TAG, "Rewind error");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
uint8_t key_data[sizeof(uint64_t)] = {0};
if(!flipper_format_read_hex(flipper_format, "Data", key_data, sizeof(uint64_t))) {
FURI_LOG_E(TAG, "Missing Data");
ret = SubGhzProtocolStatusErrorParserOthers;
break;
}
for(uint8_t i = 0; i < sizeof(uint64_t); i++) {
instance->generic.data_2 = instance->generic.data_2 << 8 | key_data[i];
}
ret = true;
} while(false);
return ret;
}

View File

@ -29,7 +29,7 @@ void subghz_protocol_encoder_kinggates_stylo_4k_free(void* context);
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
*/
bool subghz_protocol_encoder_kinggates_stylo_4k_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_kinggates_stylo_4k_deserialize(
void* context,
FlipperFormat* flipper_format);
@ -85,9 +85,9 @@ uint8_t subghz_protocol_decoder_kinggates_stylo_4k_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderKingGates_stylo_4k instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_kinggates_stylo_4k_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_kinggates_stylo_4k_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -96,9 +96,9 @@ bool subghz_protocol_decoder_kinggates_stylo_4k_serialize(
* Deserialize data SubGhzProtocolDecoderKingGates_stylo_4k.
* @param context Pointer to a SubGhzProtocolDecoderKingGates_stylo_4k instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_kinggates_stylo_4k_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_kinggates_stylo_4k_deserialize(
void* context,
FlipperFormat* flipper_format);

View File

@ -147,31 +147,31 @@ static bool subghz_protocol_encoder_linear_get_upload(SubGhzProtocolEncoderLinea
return true;
}
bool subghz_protocol_encoder_linear_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_linear_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderLinear* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_linear_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_linear_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_linear_get_upload(instance)) break;
if(!subghz_protocol_encoder_linear_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_linear_stop(void* context) {
@ -300,7 +300,7 @@ uint8_t subghz_protocol_decoder_linear_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_linear_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_linear_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -309,22 +309,12 @@ bool subghz_protocol_decoder_linear_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_linear_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_linear_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderLinear* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_linear_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic, flipper_format, subghz_protocol_linear_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_linear_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_linear_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderLinear instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_linear_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_linear_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_linear_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderLinear instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_linear_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_linear_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_linear_serialize(
* Deserialize data SubGhzProtocolDecoderLinear.
* @param context Pointer to a SubGhzProtocolDecoderLinear instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_linear_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_linear_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -150,33 +150,32 @@ static bool
return true;
}
bool subghz_protocol_encoder_linear_delta3_deserialize(
SubGhzProtocolStatus subghz_protocol_encoder_linear_delta3_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderLinearDelta3* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_linear_delta3_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_linear_delta3_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_linear_delta3_get_upload(instance)) break;
if(!subghz_protocol_encoder_linear_delta3_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_linear_delta3_stop(void* context) {
@ -312,7 +311,7 @@ uint8_t subghz_protocol_decoder_linear_delta3_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8));
}
bool subghz_protocol_decoder_linear_delta3_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_linear_delta3_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -321,24 +320,15 @@ bool subghz_protocol_decoder_linear_delta3_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_linear_delta3_deserialize(
SubGhzProtocolStatus subghz_protocol_decoder_linear_delta3_deserialize(
void* context,
FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderLinearDelta3* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_linear_delta3_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_linear_delta3_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_linear_delta3_get_string(void* context, FuriString* output) {

View File

@ -28,11 +28,10 @@ void subghz_protocol_encoder_linear_delta3_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderLinearDelta3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_linear_delta3_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_linear_delta3_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -86,9 +85,9 @@ uint8_t subghz_protocol_decoder_linear_delta3_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderLinearDelta3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_linear_delta3_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_linear_delta3_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -97,11 +96,10 @@ bool subghz_protocol_decoder_linear_delta3_serialize(
* Deserialize data SubGhzProtocolDecoderLinearDelta3.
* @param context Pointer to a SubGhzProtocolDecoderLinearDelta3 instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_linear_delta3_deserialize(
void* context,
FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_linear_delta3_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -150,31 +150,31 @@ static bool subghz_protocol_encoder_magellan_get_upload(SubGhzProtocolEncoderMag
return true;
}
bool subghz_protocol_encoder_magellan_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_magellan_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderMagellan* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_magellan_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_magellan_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_magellan_get_upload(instance)) break;
if(!subghz_protocol_encoder_magellan_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_magellan_stop(void* context) {
@ -397,7 +397,7 @@ uint8_t subghz_protocol_decoder_magellan_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_magellan_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_magellan_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -406,22 +406,14 @@ bool subghz_protocol_decoder_magellan_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_magellan_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_magellan_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderMagellan* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_magellan_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_magellan_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_magellan_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_magellan_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderMagellan instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_magellan_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_magellan_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_magellan_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderMagellan instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_magellan_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_magellan_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_magellan_serialize(
* Deserialize data SubGhzProtocolDecoderMagellan.
* @param context Pointer to a SubGhzProtocolDecoderMagellan instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_magellan_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_magellan_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -188,18 +188,17 @@ static void subghz_protocol_marantec_remote_controller(SubGhzBlockGeneric* insta
instance->serial = ((instance->data >> 12) & 0xFFFFFF00) | ((instance->data >> 8) & 0xFF);
}
bool subghz_protocol_encoder_marantec_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_marantec_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderMarantec* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_marantec_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_marantec_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
@ -209,11 +208,9 @@ bool subghz_protocol_encoder_marantec_deserialize(void* context, FlipperFormat*
subghz_protocol_marantec_remote_controller(&instance->generic);
subghz_protocol_encoder_marantec_get_upload(instance);
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_marantec_stop(void* context) {
@ -346,7 +343,7 @@ uint8_t subghz_protocol_decoder_marantec_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_marantec_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_marantec_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -355,22 +352,14 @@ bool subghz_protocol_decoder_marantec_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_marantec_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_marantec_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderMarantec* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_marantec_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_marantec_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_marantec_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_marantec_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderMarantec instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_marantec_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_marantec_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_marantec_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderMarantec instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_marantec_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_marantec_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_marantec_serialize(
* Deserialize data SubGhzProtocolDecoderMarantec.
* @param context Pointer to a SubGhzProtocolDecoderMarantec instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_marantec_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_marantec_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -175,31 +175,31 @@ static bool subghz_protocol_encoder_megacode_get_upload(SubGhzProtocolEncoderMeg
return true;
}
bool subghz_protocol_encoder_megacode_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_megacode_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderMegaCode* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_megacode_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_megacode_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_megacode_get_upload(instance)) break;
if(!subghz_protocol_encoder_megacode_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_megacode_stop(void* context) {
@ -381,7 +381,7 @@ uint8_t subghz_protocol_decoder_megacode_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_megacode_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_megacode_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -390,22 +390,14 @@ bool subghz_protocol_decoder_megacode_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_megacode_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_megacode_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderMegaCode* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_megacode_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_megacode_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_megacode_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_megacode_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderMegaCode instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_megacode_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_megacode_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_megacode_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderMegaCode instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_megacode_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_megacode_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_megacode_serialize(
* Deserialize data SubGhzProtocolDecoderMegaCode.
* @param context Pointer to a SubGhzProtocolDecoderMegaCode instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_megacode_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_megacode_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -154,31 +154,31 @@ static bool
return true;
}
bool subghz_protocol_encoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderNeroRadio* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_nero_radio_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_nero_radio_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_nero_radio_get_upload(instance)) break;
if(!subghz_protocol_encoder_nero_radio_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_nero_radio_stop(void* context) {
@ -343,7 +343,7 @@ uint8_t subghz_protocol_decoder_nero_radio_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_nero_radio_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_nero_radio_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -352,22 +352,14 @@ bool subghz_protocol_decoder_nero_radio_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderNeroRadio* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_nero_radio_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_nero_radio_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_nero_radio_get_string(void* context, FuriString* output) {

View File

@ -28,9 +28,10 @@ void subghz_protocol_encoder_nero_radio_free(void* context);
* Deserialize and generating an upload to send.
* @param context Pointer to a SubGhzProtocolEncoderNeroRadio instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_encoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_encoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Forced transmission stop.
@ -84,9 +85,9 @@ uint8_t subghz_protocol_decoder_nero_radio_get_hash_data(void* context);
* @param context Pointer to a SubGhzProtocolDecoderNeroRadio instance
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_nero_radio_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_nero_radio_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);
@ -95,9 +96,10 @@ bool subghz_protocol_decoder_nero_radio_serialize(
* Deserialize data SubGhzProtocolDecoderNeroRadio.
* @param context Pointer to a SubGhzProtocolDecoderNeroRadio instance
* @param flipper_format Pointer to a FlipperFormat instance
* @return true On success
* @return status
*/
bool subghz_protocol_decoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format);
SubGhzProtocolStatus
subghz_protocol_decoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format);
/**
* Getting a textual representation of the received data.

View File

@ -148,31 +148,31 @@ static bool
return true;
}
bool subghz_protocol_encoder_nero_sketch_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_encoder_nero_sketch_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolEncoderNeroSketch* instance = context;
bool res = false;
SubGhzProtocolStatus ret = SubGhzProtocolStatusError;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
FURI_LOG_E(TAG, "Deserialize error");
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_nero_sketch_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
ret = subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_nero_sketch_const.min_count_bit_for_found);
if(ret != SubGhzProtocolStatusOk) {
break;
}
//optional parameter parameter
flipper_format_read_uint32(
flipper_format, "Repeat", (uint32_t*)&instance->encoder.repeat, 1);
if(!subghz_protocol_encoder_nero_sketch_get_upload(instance)) break;
if(!subghz_protocol_encoder_nero_sketch_get_upload(instance)) {
ret = SubGhzProtocolStatusErrorEncoderGetUpload;
break;
}
instance->encoder.is_running = true;
res = true;
} while(false);
return res;
return ret;
}
void subghz_protocol_encoder_nero_sketch_stop(void* context) {
@ -328,7 +328,7 @@ uint8_t subghz_protocol_decoder_nero_sketch_get_hash_data(void* context) {
&instance->decoder, (instance->decoder.decode_count_bit / 8) + 1);
}
bool subghz_protocol_decoder_nero_sketch_serialize(
SubGhzProtocolStatus subghz_protocol_decoder_nero_sketch_serialize(
void* context,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
@ -337,22 +337,14 @@ bool subghz_protocol_decoder_nero_sketch_serialize(
return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nero_sketch_deserialize(void* context, FlipperFormat* flipper_format) {
SubGhzProtocolStatus
subghz_protocol_decoder_nero_sketch_deserialize(void* context, FlipperFormat* flipper_format) {
furi_assert(context);
SubGhzProtocolDecoderNeroSketch* instance = context;
bool ret = false;
do {
if(!subghz_block_generic_deserialize(&instance->generic, flipper_format)) {
break;
}
if(instance->generic.data_count_bit !=
subghz_protocol_nero_sketch_const.min_count_bit_for_found) {
FURI_LOG_E(TAG, "Wrong number of bits in key");
break;
}
ret = true;
} while(false);
return ret;
return subghz_block_generic_deserialize_check_count_bit(
&instance->generic,
flipper_format,
subghz_protocol_nero_sketch_const.min_count_bit_for_found);
}
void subghz_protocol_decoder_nero_sketch_get_string(void* context, FuriString* output) {

Some files were not shown because too many files have changed in this diff Show More