Sub-GHz: Streamline generic serialize, -1.5k dfu

This commit is contained in:
Willy-JL
2024-06-18 01:15:23 +02:00
parent 3ac2d00a77
commit 2c9b289c21
11 changed files with 54 additions and 316 deletions

View File

@@ -36,7 +36,8 @@
- UL: Barcode: Fix backlight settings (by @xMasterX)
- Many apps updated for new refactors (by @Willy-JL & @xMasterX)
- UL: NFC: Better plugin loading, faster launch from favourites, no lag in Saved menu (by @xMasterX)
- CLI: Simpler plugin wrapper (by @Willy-JL)
- Sub-GHz: Streamline generic serialize +1.5k free flash (by @Willy-JL)
- CLI: Simpler plugin wrapper +0.5k free flash (by @Willy-JL)
- OFW: Furi: Use static synchronisation primitives, prepare for event loop (by @gsurkov & @skotopes)
- OFW: Code Cleanup: Unused includes, useless checks, unused variables, etc... (by @skotopes)

View File

@@ -20,11 +20,10 @@ void subghz_block_generic_get_preset_name(const char* preset_name, FuriString* p
furi_string_set(preset_str, preset_name_temp);
}
SubGhzProtocolStatus subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
SubGhzProtocolStatus subghz_block_generic_serialize_common(
const char* protocol_name,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_check(instance);
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
@@ -74,11 +73,27 @@ SubGhzProtocolStatus subghz_block_generic_serialize(
res = SubGhzProtocolStatusErrorParserLongitude;
break;
}
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) {
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
res = SubGhzProtocolStatusErrorParserProtocolName;
break;
}
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}
SubGhzProtocolStatus subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_check(instance);
SubGhzProtocolStatus res = subghz_block_generic_serialize_common(instance->protocol_name, flipper_format, preset);
if(res != SubGhzProtocolStatusOk) return res;
res = SubGhzProtocolStatusError;
do {
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");
@@ -108,7 +123,6 @@ SubGhzProtocolStatus subghz_block_generic_serialize(
}
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}

View File

@@ -17,8 +17,6 @@ typedef struct SubGhzBlockGeneric SubGhzBlockGeneric;
struct SubGhzBlockGeneric {
const char* protocol_name;
float latitude;
float longitude;
uint64_t data;
uint64_t data_2;
uint32_t serial;

View File

@@ -0,0 +1,15 @@
#pragma once
#include "generic.h"
/**
* Serialize common data SubGhzBlockGeneric (shared by other serialize methods).
* @param protocol_name Pointer to a protocol name string
* @param flipper_format Pointer to a FlipperFormat instance
* @param preset The modulation on which the signal was received, SubGhzRadioPreset
* @return Status Error
*/
SubGhzProtocolStatus subghz_block_generic_serialize_common(
const char* protocol_name,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset);

View File

@@ -3,7 +3,7 @@
#include "../blocks/const.h"
#include "../blocks/decoder.h"
#include "../blocks/encoder.h"
#include "../blocks/generic.h"
#include "../blocks/generic_i.h"
#include "../blocks/math.h"
#include <lib/toolbox/float_tools.h>
#include <lib/toolbox/stream/stream.h>
@@ -985,52 +985,10 @@ SubGhzProtocolStatus subghz_protocol_decoder_bin_raw_serialize(
furi_assert(context);
SubGhzProtocolDecoderBinRAW* instance = context;
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
SubGhzProtocolStatus res = subghz_block_generic_serialize_common(instance->generic.protocol_name, flipper_format, preset);
if(res != SubGhzProtocolStatusOk) return res;
res = SubGhzProtocolStatusError;
do {
stream_clean(flipper_format_get_raw_stream(flipper_format));
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;
}
subghz_block_generic_get_preset_name(furi_string_get_cstr(preset->name), temp_str);
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");
@@ -1066,7 +1024,6 @@ SubGhzProtocolStatus subghz_protocol_decoder_bin_raw_serialize(
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}

View File

@@ -4,89 +4,29 @@
#define TAG "PCSGBlockGeneric"
void pcsg_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str) {
const char* preset_name_temp;
if(!strcmp(preset_name, "AM270")) {
preset_name_temp = "FuriHalSubGhzPresetOok270Async";
} else if(!strcmp(preset_name, "AM650")) {
preset_name_temp = "FuriHalSubGhzPresetOok650Async";
} else if(!strcmp(preset_name, "FM238")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev238Async";
} else if(!strcmp(preset_name, "FM476")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev476Async";
} else {
preset_name_temp = "FuriHalSubGhzPresetCustom";
}
furi_string_set(preset_str, preset_name_temp);
}
SubGhzProtocolStatus pcsg_block_generic_serialize(
PCSGBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(instance);
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
SubGhzProtocolStatus res = subghz_block_generic_serialize_common(instance->protocol_name, flipper_format, preset);
if(res != SubGhzProtocolStatusOk) return res;
res = SubGhzProtocolStatusError;
do {
stream_clean(flipper_format_get_raw_stream(flipper_format));
if(!flipper_format_write_header_cstr(
flipper_format, PCSG_KEY_FILE_TYPE, PCSG_KEY_FILE_VERSION)) {
FURI_LOG_E(TAG, "Unable to add header");
break;
}
if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
break;
}
pcsg_block_generic_get_preset_name(furi_string_get_cstr(preset->name), temp_str);
if(!flipper_format_write_string_cstr(
flipper_format, "Preset", furi_string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
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");
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");
break;
}
}
if(!flipper_format_write_float(flipper_format, "Latitute", &preset->latitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Latitute");
res = SubGhzProtocolStatusErrorParserLatitude;
break;
}
if(!flipper_format_write_float(flipper_format, "Longitude", &preset->longitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Longitude");
res = SubGhzProtocolStatusErrorParserLongitude;
break;
}
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
break;
}
if(!flipper_format_write_string(flipper_format, "Ric", instance->result_ric)) {
FURI_LOG_E(TAG, "Unable to add Ric");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
if(!flipper_format_write_string(flipper_format, "Message", instance->result_msg)) {
FURI_LOG_E(TAG, "Unable to add Message");
res = SubGhzProtocolStatusErrorParserOthers;
break;
}
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}

View File

@@ -1,21 +1,11 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <lib/flipper_format/flipper_format.h>
#include "furi.h"
#include "furi_hal.h"
#include <lib/subghz/types.h>
#include "../blocks/generic_i.h"
#ifdef __cplusplus
extern "C" {
#endif
#define PCSG_KEY_FILE_VERSION 1
#define PCSG_KEY_FILE_TYPE "Flipper SubGhz Key File"
typedef struct PCSGBlockGeneric PCSGBlockGeneric;
struct PCSGBlockGeneric {
@@ -24,13 +14,6 @@ struct PCSGBlockGeneric {
FuriString* result_msg;
};
/**
* Get name preset.
* @param preset_name name preset
* @param preset_str Output name preset
*/
void pcsg_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str);
/**
* Serialize data PCSGBlockGeneric.
* @param instance Pointer to a PCSGBlockGeneric instance
@@ -52,8 +35,6 @@ SubGhzProtocolStatus pcsg_block_generic_serialize(
SubGhzProtocolStatus
pcsg_block_generic_deserialize(PCSGBlockGeneric* instance, FlipperFormat* flipper_format);
float pcsg_block_generic_fahrenheit_to_celsius(float fahrenheit);
#ifdef __cplusplus
}
#endif

View File

@@ -4,82 +4,15 @@
#define TAG "TPMSBlockGeneric"
void tpms_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str) {
const char* preset_name_temp;
if(!strcmp(preset_name, "AM270")) {
preset_name_temp = "FuriHalSubGhzPresetOok270Async";
} else if(!strcmp(preset_name, "AM650")) {
preset_name_temp = "FuriHalSubGhzPresetOok650Async";
} else if(!strcmp(preset_name, "FM238")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev238Async";
} else if(!strcmp(preset_name, "FM476")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev476Async";
} else {
preset_name_temp = "FuriHalSubGhzPresetCustom";
}
furi_string_set(preset_str, preset_name_temp);
}
SubGhzProtocolStatus tpms_block_generic_serialize(
TPMSBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(instance);
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
SubGhzProtocolStatus res = subghz_block_generic_serialize_common(instance->protocol_name, flipper_format, preset);
if(res != SubGhzProtocolStatusOk) return res;
res = SubGhzProtocolStatusError;
do {
stream_clean(flipper_format_get_raw_stream(flipper_format));
if(!flipper_format_write_header_cstr(
flipper_format, TPMS_KEY_FILE_TYPE, TPMS_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;
}
tpms_block_generic_get_preset_name(furi_string_get_cstr(preset->name), temp_str);
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_float(flipper_format, "Latitute", &preset->latitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Latitute");
res = SubGhzProtocolStatusErrorParserLatitude;
break;
}
if(!flipper_format_write_float(flipper_format, "Longitude", &preset->longitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Longitude");
res = SubGhzProtocolStatusErrorParserLongitude;
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");
@@ -138,7 +71,6 @@ SubGhzProtocolStatus tpms_block_generic_serialize(
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}

View File

@@ -1,22 +1,13 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include "../blocks/generic_i.h"
#include <lib/flipper_format/flipper_format.h>
#include "furi.h"
#include <furi_hal.h>
#include <lib/subghz/types.h>
#include <locale/locale.h>
#ifdef __cplusplus
extern "C" {
#endif
#define TPMS_KEY_FILE_VERSION 1
#define TPMS_KEY_FILE_TYPE "Flipper SubGhz Key File"
#define TPMS_NO_BATT 0xFF
typedef struct TPMSBlockGeneric TPMSBlockGeneric;
@@ -35,13 +26,6 @@ struct TPMSBlockGeneric {
float temperature; // celsius
};
/**
* Get name preset.
* @param preset_name name preset
* @param preset_str Output name preset
*/
void tpms_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str);
/**
* Serialize data TPMSBlockGeneric.
* @param instance Pointer to a TPMSBlockGeneric instance

View File

@@ -5,82 +5,15 @@
#define TAG "WSBlockGeneric"
void ws_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str) {
const char* preset_name_temp;
if(!strcmp(preset_name, "AM270")) {
preset_name_temp = "FuriHalSubGhzPresetOok270Async";
} else if(!strcmp(preset_name, "AM650")) {
preset_name_temp = "FuriHalSubGhzPresetOok650Async";
} else if(!strcmp(preset_name, "FM238")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev238Async";
} else if(!strcmp(preset_name, "FM476")) {
preset_name_temp = "FuriHalSubGhzPreset2FSKDev476Async";
} else {
preset_name_temp = "FuriHalSubGhzPresetCustom";
}
furi_string_set(preset_str, preset_name_temp);
}
SubGhzProtocolStatus ws_block_generic_serialize(
WSBlockGeneric* instance,
FlipperFormat* flipper_format,
SubGhzRadioPreset* preset) {
furi_assert(instance);
SubGhzProtocolStatus res = SubGhzProtocolStatusError;
FuriString* temp_str;
temp_str = furi_string_alloc();
SubGhzProtocolStatus res = subghz_block_generic_serialize_common(instance->protocol_name, flipper_format, preset);
if(res != SubGhzProtocolStatusOk) return res;
res = SubGhzProtocolStatusError;
do {
stream_clean(flipper_format_get_raw_stream(flipper_format));
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;
}
ws_block_generic_get_preset_name(furi_string_get_cstr(preset->name), temp_str);
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_float(flipper_format, "Latitute", &preset->latitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Latitute");
res = SubGhzProtocolStatusErrorParserLatitude;
break;
}
if(!flipper_format_write_float(flipper_format, "Longitude", &preset->longitude, 1)) {
FURI_LOG_E(TAG, "Unable to add Longitude");
res = SubGhzProtocolStatusErrorParserLongitude;
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");
@@ -153,7 +86,6 @@ SubGhzProtocolStatus ws_block_generic_serialize(
res = SubGhzProtocolStatusOk;
} while(false);
furi_string_free(temp_str);
return res;
}

View File

@@ -1,13 +1,7 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include "../blocks/generic_i.h"
#include <lib/flipper_format/flipper_format.h>
#include "furi.h"
#include <furi_hal.h>
#include <lib/subghz/types.h>
#include <locale/locale.h>
#ifdef __cplusplus
@@ -21,9 +15,6 @@ extern "C" {
#define WS_NO_BTN 0xFF
#define WS_NO_TEMPERATURE -273.0f
#define WS_KEY_FILE_VERSION 1
#define WS_KEY_FILE_TYPE "Flipper SubGhz Key File"
typedef struct WSBlockGeneric WSBlockGeneric;
struct WSBlockGeneric {
@@ -39,13 +30,6 @@ struct WSBlockGeneric {
float temp;
};
/**
* Get name preset.
* @param preset_name name preset
* @param preset_str Output name preset
*/
void ws_block_generic_get_preset_name(const char* preset_name, FuriString* preset_str);
/**
* Serialize data WSBlockGeneric.
* @param instance Pointer to a WSBlockGeneric instance