From f43fd7a351b1779af34b6cb4a887eb272ab8aa53 Mon Sep 17 00:00:00 2001 From: gid9798 <30450294+gid9798@users.noreply.github.com> Date: Thu, 15 Dec 2022 17:31:54 +0300 Subject: [PATCH 1/2] Removing duplicate code in subghz scnes. --- .../main/subghz/scenes/subghz_scene_config.h | 9 +- ...faac_433.c => subghz_scene_set_cnt_faac.c} | 14 +-- .../scenes/subghz_scene_set_cnt_faac_868.c | 46 -------- ...faac_433.c => subghz_scene_set_fix_faac.c} | 14 +-- .../scenes/subghz_scene_set_fix_faac_868.c | 46 -------- ...aac_433.c => subghz_scene_set_seed_faac.c} | 21 ++-- .../scenes/subghz_scene_set_seed_faac_868.c | 103 ------------------ .../subghz/scenes/subghz_scene_set_type.c | 4 +- 8 files changed, 33 insertions(+), 224 deletions(-) rename applications/main/subghz/scenes/{subghz_scene_set_cnt_faac_433.c => subghz_scene_set_cnt_faac.c} (72%) delete mode 100644 applications/main/subghz/scenes/subghz_scene_set_cnt_faac_868.c rename applications/main/subghz/scenes/{subghz_scene_set_fix_faac_433.c => subghz_scene_set_fix_faac.c} (72%) delete mode 100644 applications/main/subghz/scenes/subghz_scene_set_fix_faac_868.c rename applications/main/subghz/scenes/{subghz_scene_set_seed_faac_433.c => subghz_scene_set_seed_faac.c} (82%) delete mode 100644 applications/main/subghz/scenes/subghz_scene_set_seed_faac_868.c diff --git a/applications/main/subghz/scenes/subghz_scene_config.h b/applications/main/subghz/scenes/subghz_scene_config.h index f265644b7..1ad41a8b5 100644 --- a/applications/main/subghz/scenes/subghz_scene_config.h +++ b/applications/main/subghz/scenes/subghz_scene_config.h @@ -19,12 +19,9 @@ ADD_SCENE(subghz, test_static, TestStatic) ADD_SCENE(subghz, test_packet, TestPacket) #endif ADD_SCENE(subghz, set_type, SetType) -ADD_SCENE(subghz, set_fix_faac_868, SetFixFaac868) -ADD_SCENE(subghz, set_cnt_faac_868, SetCntFaac868) -ADD_SCENE(subghz, set_seed_faac_868, SetSeedFaac868) -ADD_SCENE(subghz, set_fix_faac_433, SetFixFaac433) -ADD_SCENE(subghz, set_cnt_faac_433, SetCntFaac433) -ADD_SCENE(subghz, set_seed_faac_433, SetSeedFaac433) +ADD_SCENE(subghz, set_fix_faac, SetFixFaac) +ADD_SCENE(subghz, set_cnt_faac, SetCntFaac) +ADD_SCENE(subghz, set_seed_faac, SetSeedFaac) ADD_SCENE(subghz, set_fix_bft, SetFixBft) ADD_SCENE(subghz, set_cnt_bft, SetCntBft) ADD_SCENE(subghz, set_seed_bft, SetSeedBft) diff --git a/applications/main/subghz/scenes/subghz_scene_set_cnt_faac_433.c b/applications/main/subghz/scenes/subghz_scene_set_cnt_faac.c similarity index 72% rename from applications/main/subghz/scenes/subghz_scene_set_cnt_faac_433.c rename to applications/main/subghz/scenes/subghz_scene_set_cnt_faac.c index 4bb551db8..6002dea74 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_cnt_faac_433.c +++ b/applications/main/subghz/scenes/subghz_scene_set_cnt_faac.c @@ -1,14 +1,14 @@ #include "../subghz_i.h" -#define TAG "SubGhzSetCntFaac433" +#define TAG "SubGhzSetCntFaac" -void subghz_scene_set_cnt_faac_433_byte_input_callback(void* context) { +void subghz_scene_set_cnt_faac_byte_input_callback(void* context) { SubGhz* subghz = context; view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); } -void subghz_scene_set_cnt_faac_433_on_enter(void* context) { +void subghz_scene_set_cnt_faac_on_enter(void* context) { SubGhz* subghz = context; // Setup view @@ -16,7 +16,7 @@ void subghz_scene_set_cnt_faac_433_on_enter(void* context) { byte_input_set_header_text(byte_input, "Enter COUNTER in hex, 20bits"); byte_input_set_result_callback( byte_input, - subghz_scene_set_cnt_faac_433_byte_input_callback, + subghz_scene_set_cnt_faac_byte_input_callback, NULL, subghz, subghz->txrx->secure_data->cnt, @@ -24,20 +24,20 @@ void subghz_scene_set_cnt_faac_433_on_enter(void* context) { view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); } -bool subghz_scene_set_cnt_faac_433_on_event(void* context, SceneManagerEvent event) { +bool subghz_scene_set_cnt_faac_on_event(void* context, SceneManagerEvent event) { SubGhz* subghz = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { if(event.event == SubGhzCustomEventByteInputDone) { - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeedFaac433); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeedFaac); consumed = true; } } return consumed; } -void subghz_scene_set_cnt_faac_433_on_exit(void* context) { +void subghz_scene_set_cnt_faac_on_exit(void* context) { SubGhz* subghz = context; // Clear view diff --git a/applications/main/subghz/scenes/subghz_scene_set_cnt_faac_868.c b/applications/main/subghz/scenes/subghz_scene_set_cnt_faac_868.c deleted file mode 100644 index f4908f865..000000000 --- a/applications/main/subghz/scenes/subghz_scene_set_cnt_faac_868.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "../subghz_i.h" - -#define TAG "SubGhzSetCntFaac868" - -void subghz_scene_set_cnt_faac_868_byte_input_callback(void* context) { - SubGhz* subghz = context; - - view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); -} - -void subghz_scene_set_cnt_faac_868_on_enter(void* context) { - SubGhz* subghz = context; - - // Setup view - ByteInput* byte_input = subghz->byte_input; - byte_input_set_header_text(byte_input, "Enter COUNTER in hex, 20bits"); - byte_input_set_result_callback( - byte_input, - subghz_scene_set_cnt_faac_868_byte_input_callback, - NULL, - subghz, - subghz->txrx->secure_data->cnt, - 3); - view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); -} - -bool subghz_scene_set_cnt_faac_868_on_event(void* context, SceneManagerEvent event) { - SubGhz* subghz = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == SubGhzCustomEventByteInputDone) { - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeedFaac868); - consumed = true; - } - } - return consumed; -} - -void subghz_scene_set_cnt_faac_868_on_exit(void* context) { - SubGhz* subghz = context; - - // Clear view - byte_input_set_result_callback(subghz->byte_input, NULL, NULL, NULL, NULL, 0); - byte_input_set_header_text(subghz->byte_input, ""); -} diff --git a/applications/main/subghz/scenes/subghz_scene_set_fix_faac_433.c b/applications/main/subghz/scenes/subghz_scene_set_fix_faac.c similarity index 72% rename from applications/main/subghz/scenes/subghz_scene_set_fix_faac_433.c rename to applications/main/subghz/scenes/subghz_scene_set_fix_faac.c index 62af59e2c..333062c38 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_fix_faac_433.c +++ b/applications/main/subghz/scenes/subghz_scene_set_fix_faac.c @@ -1,14 +1,14 @@ #include "../subghz_i.h" -#define TAG "SubGhzSetFixFaac433" +#define TAG "SubGhzSetFixFaac" -void subghz_scene_set_fix_faac_433_byte_input_callback(void* context) { +void subghz_scene_set_fix_faac_byte_input_callback(void* context) { SubGhz* subghz = context; view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); } -void subghz_scene_set_fix_faac_433_on_enter(void* context) { +void subghz_scene_set_fix_faac_on_enter(void* context) { SubGhz* subghz = context; // Setup view @@ -16,7 +16,7 @@ void subghz_scene_set_fix_faac_433_on_enter(void* context) { byte_input_set_header_text(byte_input, "Enter FIX in hex"); byte_input_set_result_callback( byte_input, - subghz_scene_set_fix_faac_433_byte_input_callback, + subghz_scene_set_fix_faac_byte_input_callback, NULL, subghz, subghz->txrx->secure_data->fix, @@ -24,20 +24,20 @@ void subghz_scene_set_fix_faac_433_on_enter(void* context) { view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); } -bool subghz_scene_set_fix_faac_433_on_event(void* context, SceneManagerEvent event) { +bool subghz_scene_set_fix_faac_on_event(void* context, SceneManagerEvent event) { SubGhz* subghz = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { if(event.event == SubGhzCustomEventByteInputDone) { - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCntFaac433); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCntFaac); consumed = true; } } return consumed; } -void subghz_scene_set_fix_faac_433_on_exit(void* context) { +void subghz_scene_set_fix_faac_on_exit(void* context) { SubGhz* subghz = context; // Clear view diff --git a/applications/main/subghz/scenes/subghz_scene_set_fix_faac_868.c b/applications/main/subghz/scenes/subghz_scene_set_fix_faac_868.c deleted file mode 100644 index ea9759a4a..000000000 --- a/applications/main/subghz/scenes/subghz_scene_set_fix_faac_868.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "../subghz_i.h" - -#define TAG "SubGhzSetFixFaac868" - -void subghz_scene_set_fix_faac_868_byte_input_callback(void* context) { - SubGhz* subghz = context; - - view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); -} - -void subghz_scene_set_fix_faac_868_on_enter(void* context) { - SubGhz* subghz = context; - - // Setup view - ByteInput* byte_input = subghz->byte_input; - byte_input_set_header_text(byte_input, "Enter FIX in hex"); - byte_input_set_result_callback( - byte_input, - subghz_scene_set_fix_faac_868_byte_input_callback, - NULL, - subghz, - subghz->txrx->secure_data->fix, - 4); - view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); -} - -bool subghz_scene_set_fix_faac_868_on_event(void* context, SceneManagerEvent event) { - SubGhz* subghz = context; - bool consumed = false; - - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == SubGhzCustomEventByteInputDone) { - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCntFaac868); - consumed = true; - } - } - return consumed; -} - -void subghz_scene_set_fix_faac_868_on_exit(void* context) { - SubGhz* subghz = context; - - // Clear view - byte_input_set_result_callback(subghz->byte_input, NULL, NULL, NULL, NULL, 0); - byte_input_set_header_text(subghz->byte_input, ""); -} diff --git a/applications/main/subghz/scenes/subghz_scene_set_seed_faac_433.c b/applications/main/subghz/scenes/subghz_scene_set_seed_faac.c similarity index 82% rename from applications/main/subghz/scenes/subghz_scene_set_seed_faac_433.c rename to applications/main/subghz/scenes/subghz_scene_set_seed_faac.c index efe16f0b3..8e955e4b7 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_seed_faac_433.c +++ b/applications/main/subghz/scenes/subghz_scene_set_seed_faac.c @@ -2,15 +2,15 @@ #include #include -#define TAG "SubGhzSetSeedFaac433" +#define TAG "SubGhzSetSeedFaac" -void subghz_scene_set_seed_faac_433_byte_input_callback(void* context) { +void subghz_scene_set_seed_faac_byte_input_callback(void* context) { SubGhz* subghz = context; view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); } -void subghz_scene_set_seed_faac_433_on_enter(void* context) { +void subghz_scene_set_seed_faac_on_enter(void* context) { SubGhz* subghz = context; // Setup view @@ -18,7 +18,7 @@ void subghz_scene_set_seed_faac_433_on_enter(void* context) { byte_input_set_header_text(byte_input, "Enter SEED in hex"); byte_input_set_result_callback( byte_input, - subghz_scene_set_seed_faac_433_byte_input_callback, + subghz_scene_set_seed_faac_byte_input_callback, NULL, subghz, subghz->txrx->secure_data->seed, @@ -26,7 +26,7 @@ void subghz_scene_set_seed_faac_433_on_enter(void* context) { view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); } -bool subghz_scene_set_seed_faac_433_on_event(void* context, SceneManagerEvent event) { +bool subghz_scene_set_seed_faac_on_event(void* context, SceneManagerEvent event) { SubGhz* subghz = context; bool consumed = false; bool generated_protocol = false; @@ -48,7 +48,14 @@ bool subghz_scene_set_seed_faac_433_on_event(void* context, SceneManagerEvent ev subghz->txrx->transmitter = subghz_transmitter_alloc_init(subghz->txrx->environment, "Faac SLH"); if(subghz->txrx->transmitter) { - subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + SubGhzCustomEvent state = + scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneSetType); + + if(state == SubmenuIndexFaacSLH_433) { + subghz_preset_init(subghz, "AM650", 433920000, NULL, 0); + } else if(state == SubmenuIndexFaacSLH_868) { + subghz_preset_init(subghz, "AM650", 868350000, NULL, 0); + } subghz_protocol_faac_slh_create_data( subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), subghz->txrx->fff_data, @@ -94,7 +101,7 @@ bool subghz_scene_set_seed_faac_433_on_event(void* context, SceneManagerEvent ev return consumed; } -void subghz_scene_set_seed_faac_433_on_exit(void* context) { +void subghz_scene_set_seed_faac_on_exit(void* context) { SubGhz* subghz = context; // Clear view diff --git a/applications/main/subghz/scenes/subghz_scene_set_seed_faac_868.c b/applications/main/subghz/scenes/subghz_scene_set_seed_faac_868.c deleted file mode 100644 index dd9f45652..000000000 --- a/applications/main/subghz/scenes/subghz_scene_set_seed_faac_868.c +++ /dev/null @@ -1,103 +0,0 @@ -#include "../subghz_i.h" -#include -#include - -#define TAG "SubGhzSetSeedFaac868" - -void subghz_scene_set_seed_faac_868_byte_input_callback(void* context) { - SubGhz* subghz = context; - - view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone); -} - -void subghz_scene_set_seed_faac_868_on_enter(void* context) { - SubGhz* subghz = context; - - // Setup view - ByteInput* byte_input = subghz->byte_input; - byte_input_set_header_text(byte_input, "Enter SEED in hex"); - byte_input_set_result_callback( - byte_input, - subghz_scene_set_seed_faac_868_byte_input_callback, - NULL, - subghz, - subghz->txrx->secure_data->seed, - 4); - view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput); -} - -bool subghz_scene_set_seed_faac_868_on_event(void* context, SceneManagerEvent event) { - SubGhz* subghz = context; - bool consumed = false; - bool generated_protocol = false; - if(event.type == SceneManagerEventTypeCustom) { - if(event.event == SubGhzCustomEventByteInputDone) { - uint32_t fix_part = - subghz->txrx->secure_data->fix[0] << 24 | subghz->txrx->secure_data->fix[1] << 16 | - subghz->txrx->secure_data->fix[2] << 8 | subghz->txrx->secure_data->fix[3]; - - uint32_t cnt = subghz->txrx->secure_data->cnt[0] << 16 | - subghz->txrx->secure_data->cnt[1] << 8 | - subghz->txrx->secure_data->cnt[2]; - - uint32_t seed = subghz->txrx->secure_data->seed[0] << 24 | - subghz->txrx->secure_data->seed[1] << 16 | - subghz->txrx->secure_data->seed[2] << 8 | - subghz->txrx->secure_data->seed[3]; - - subghz->txrx->transmitter = - subghz_transmitter_alloc_init(subghz->txrx->environment, "Faac SLH"); - if(subghz->txrx->transmitter) { - subghz_preset_init(subghz, "AM650", 868350000, NULL, 0); - subghz_protocol_faac_slh_create_data( - subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter), - subghz->txrx->fff_data, - fix_part >> 4, - fix_part & 0xf, - (cnt & 0xFFFFF), - seed, - "FAAC_SLH", - subghz->txrx->preset); - // roguemastter dont steal!! - uint8_t seed_data[sizeof(uint32_t)] = {0}; - for(size_t i = 0; i < sizeof(uint32_t); i++) { - seed_data[sizeof(uint32_t) - i - 1] = (seed >> i * 8) & 0xFF; - } - - flipper_format_write_hex( - subghz->txrx->fff_data, "Seed", seed_data, sizeof(uint32_t)); - - generated_protocol = true; - } else { - generated_protocol = false; - } - - subghz_transmitter_free(subghz->txrx->transmitter); - - if(!generated_protocol) { - furi_string_set( - subghz->error_str, "Function requires\nan SD card with\nfresh databases."); - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); - } - consumed = true; - } - - if(generated_protocol) { - subghz_file_name_clear(subghz); - DOLPHIN_DEED(DolphinDeedSubGhzAddManually); - scene_manager_set_scene_state( - subghz->scene_manager, SubGhzSceneSetType, SubGhzCustomEventManagerSet); - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); - return true; - } - } - return consumed; -} - -void subghz_scene_set_seed_faac_868_on_exit(void* context) { - SubGhz* subghz = context; - - // Clear view - byte_input_set_result_callback(subghz->byte_input, NULL, NULL, NULL, NULL, 0); - byte_input_set_header_text(subghz->byte_input, ""); -} diff --git a/applications/main/subghz/scenes/subghz_scene_set_type.c b/applications/main/subghz/scenes/subghz_scene_set_type.c index 3ee823997..c4d8c0a24 100644 --- a/applications/main/subghz/scenes/subghz_scene_set_type.c +++ b/applications/main/subghz/scenes/subghz_scene_set_type.c @@ -212,10 +212,10 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { uint32_t key = subghz_random_serial(); switch(event.event) { case SubmenuIndexFaacSLH_868: - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFixFaac868); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFixFaac); break; case SubmenuIndexFaacSLH_433: - scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFixFaac433); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFixFaac); break; case SubmenuIndexBFT: scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFixBft); From d56e399ae58bb35da0ae71066b2637d22ddde82b Mon Sep 17 00:00:00 2001 From: MX <10697207+xMasterX@users.noreply.github.com> Date: Fri, 16 Dec 2022 00:48:15 +0300 Subject: [PATCH 2/2] Update readme --- CHANGELOG.md | 1 + ReadMe.md | 1 + firmware/targets/f7/api_symbols.csv | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eddf1258..39902ef08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Now this file is actually should be created by user and will be not removed ever ## Please support development of the project * Boosty: https://boosty.to/mmxdev +* Ko-Fi: https://ko-fi.com/masterx * destream (100 EUR min): https://destream.net/live/MMX/donate * cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 * YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 diff --git a/ReadMe.md b/ReadMe.md index ef9e6e1d5..5e7e9ae1d 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -68,6 +68,7 @@ Also check changelog in releases for latest updates! ## Please support development of the project * Boosty: https://boosty.to/mmxdev +* Ko-Fi: https://ko-fi.com/masterx * destream (100 EUR min): https://destream.net/live/MMX/donate * cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 * YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index aca3548a4..56aab8aad 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -2830,6 +2830,14 @@ 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_smc5326_alloc,void*,SubGhzEnvironment* +Function,-,subghz_protocol_decoder_smc5326_deserialize,_Bool,"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_somfy_keytis_alloc,void*,SubGhzEnvironment* Function,-,subghz_protocol_decoder_somfy_keytis_deserialize,_Bool,"void*, FlipperFormat*" Function,-,subghz_protocol_decoder_somfy_keytis_feed,void,"void*, _Bool, uint32_t" @@ -3000,6 +3008,11 @@ Function,-,subghz_protocol_encoder_secplus_v2_deserialize,_Bool,"void*, FlipperF 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_free,void,void* +Function,-,subghz_protocol_encoder_smc5326_stop,void,void* +Function,-,subghz_protocol_encoder_smc5326_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_free,void,void* @@ -4820,6 +4833,9 @@ Variable,-,subghz_protocol_secplus_v1_encoder,const SubGhzProtocolEncoder, Variable,-,subghz_protocol_secplus_v2,const SubGhzProtocol, Variable,-,subghz_protocol_secplus_v2_decoder,const SubGhzProtocolDecoder, Variable,-,subghz_protocol_secplus_v2_encoder,const SubGhzProtocolEncoder, +Variable,-,subghz_protocol_smc5326,const SubGhzProtocol, +Variable,-,subghz_protocol_smc5326_decoder,const SubGhzProtocolDecoder, +Variable,-,subghz_protocol_smc5326_encoder,const SubGhzProtocolEncoder, Variable,-,subghz_protocol_somfy_keytis,const SubGhzProtocol, Variable,-,subghz_protocol_somfy_keytis_decoder,const SubGhzProtocolDecoder, Variable,-,subghz_protocol_somfy_keytis_encoder,const SubGhzProtocolEncoder,