Faac SLH add manually

This commit is contained in:
r3df0xx
2022-04-19 00:32:25 +03:00
parent 4f544faf44
commit f2ec0a652a
9 changed files with 264 additions and 24 deletions

View File

@@ -43,4 +43,6 @@ typedef enum {
SubGhzCustomEventViewTransmitterSendStart,
SubGhzCustomEventViewTransmitterSendStop,
SubGhzCustomEventViewTransmitterError,
SubGhzCustomEventByteInputDone,
} SubGhzCustomEvent;

View File

@@ -17,6 +17,9 @@ ADD_SCENE(subghz, test_static, TestStatic)
ADD_SCENE(subghz, test_carrier, TestCarrier)
ADD_SCENE(subghz, test_packet, TestPacket)
ADD_SCENE(subghz, set_type, SetType)
ADD_SCENE(subghz, set_fix, SetFix)
ADD_SCENE(subghz, set_cnt, SetCnt)
ADD_SCENE(subghz, set_seed, SetSeed)
ADD_SCENE(subghz, frequency_analyzer, FrequencyAnalyzer)
ADD_SCENE(subghz, read_raw, ReadRAW)
ADD_SCENE(subghz, more_raw, MoreRAW)

View File

@@ -0,0 +1,43 @@
#include "../subghz_i.h"
void subghz_scene_set_cnt_byte_input_callback(void* context) {
SubGhz* subghz = (SubGhz*)context;
view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone);
}
void subghz_scene_set_cnt_on_enter(void* context) {
SubGhz* subghz = (SubGhz*)context;
// Setup view
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter COUNTER in hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_cnt_byte_input_callback,
NULL,
subghz,
subghz->txrx->cnt_data->cnt,
2);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
}
bool subghz_scene_set_cnt_on_event(void* context, SceneManagerEvent event) {
SubGhz* subghz = (SubGhz*)context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzCustomEventByteInputDone) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetSeed);
return true;
}
}
return false;
}
void subghz_scene_set_cnt_on_exit(void* context) {
SubGhz* 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, "");
}

View File

@@ -0,0 +1,43 @@
#include "../subghz_i.h"
void subghz_scene_set_fix_byte_input_callback(void* context) {
SubGhz* subghz = (SubGhz*)context;
view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone);
}
void subghz_scene_set_fix_on_enter(void* context) {
SubGhz* 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_byte_input_callback,
NULL,
subghz,
subghz->txrx->fix_data->fix,
4);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
}
bool subghz_scene_set_fix_on_event(void* context, SceneManagerEvent event) {
SubGhz* subghz = (SubGhz*)context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzCustomEventByteInputDone) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetCnt);
return true;
}
}
return false;
}
void subghz_scene_set_fix_on_exit(void* context) {
SubGhz* 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, "");
}

View File

@@ -0,0 +1,43 @@
#include "../subghz_i.h"
void subghz_scene_set_seed_byte_input_callback(void* context) {
SubGhz* subghz = (SubGhz*)context;
view_dispatcher_send_custom_event(subghz->view_dispatcher, SubGhzCustomEventByteInputDone);
}
void subghz_scene_set_seed_on_enter(void* context) {
SubGhz* subghz = (SubGhz*)context;
// Setup view
ByteInput* byte_input = subghz->byte_input;
byte_input_set_header_text(byte_input, "Enter COUNTER in hex");
byte_input_set_result_callback(
byte_input,
subghz_scene_set_seed_byte_input_callback,
NULL,
subghz,
subghz->txrx->seed_data->seed,
4);
view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewIdByteInput);
}
bool subghz_scene_set_seed_on_event(void* context, SceneManagerEvent event) {
SubGhz* subghz = (SubGhz*)context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzCustomEventByteInputDone) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName);
return true;
}
}
return false;
}
void subghz_scene_set_seed_on_exit(void* context) {
SubGhz* 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, "");
}

View File

@@ -1,5 +1,6 @@
#include "../subghz_i.h"
#include <lib/subghz/protocols/keeloq.h>
#include <lib/subghz/protocols/faac_slh.h>
#include <lib/subghz/blocks/math.h>
#include <dolphin/dolphin.h>
#include <flipper_format/flipper_format_i.h>
@@ -8,6 +9,7 @@
#define TAG "SubGhzSetType"
enum SubmenuIndex {
SubmenuIndexFaacSLH,
SubmenuIndexPricenton,
SubmenuIndexNiceFlo12bit,
SubmenuIndexNiceFlo24bit,
@@ -77,6 +79,12 @@ void subghz_scene_set_type_submenu_callback(void* context, uint32_t index) {
void subghz_scene_set_type_on_enter(void* context) {
SubGhz* subghz = context;
submenu_add_item(
subghz->submenu,
"Faac SLH_868",
SubmenuIndexFaacSLH,
subghz_scene_set_type_submenu_callback,
subghz);
submenu_add_item(
subghz->submenu,
"Princeton_433",
@@ -150,6 +158,40 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
//ToDo Fix
uint32_t key = subghz_random_serial();
switch(event.event) {
case SubmenuIndexFaacSLH:
subghz->txrx->fix_data->fix_len = 4;
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetFix);
uint32_t fix_part = subghz->txrx->fix_data->fix[0] << 24 | subghz->txrx->fix_data->fix[1] << 16 |
subghz->txrx->fix_data->fix[2] << 8 | subghz->txrx->fix_data->fix[3];
uint16_t cnt = subghz->txrx->cnt_data->cnt[0] << 8 | subghz->txrx->cnt_data->cnt[1] << 16;
uint32_t seed = subghz->txrx->seed_data->seed[0] << 24 | subghz->txrx->seed_data->seed[1] << 16 |
subghz->txrx->seed_data->seed[2] << 8 | subghz->txrx->seed_data->seed[3];
subghz->txrx->transmitter =
subghz_transmitter_alloc_init(subghz->txrx->environment, "Faac SLH");
if(subghz->txrx->transmitter) {
subghz_protocol_faac_slh_create_data(
subghz->txrx->transmitter->protocol_instance,
subghz->txrx->fff_data,
fix_part >> 4,
fix_part & 0xf,
cnt,
seed,
"FAAC_SLH",
868350000,
FuriHalSubGhzPresetOok650Async);
generated_protocol = true;
} else {
generated_protocol = false;
}
subghz_transmitter_free(subghz->txrx->transmitter);
if(!generated_protocol) {
string_set(
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
}
break;
case SubmenuIndexPricenton:
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
if(subghz_scene_set_type_submenu_gen_data_protocol(subghz, "Princeton", key, 24)) {

View File

@@ -86,6 +86,16 @@ typedef struct {
uint8_t seed[4];
} SeedData;
typedef struct {
uint8_t fix_len;
uint8_t fix[4];
} FixData;
typedef struct {
uint8_t cnt_len;
uint8_t cnt[2];
} CntData;
struct SubGhzTxRx {
SubGhzWorker* worker;
@@ -95,6 +105,8 @@ struct SubGhzTxRx {
SubGhzProtocolDecoderBase* decoder_result;
FlipperFormat* fff_data;
SeedData* seed_data;
FixData* fix_data;
CntData* cnt_data;
uint32_t frequency;
FuriHalSubGhzPreset preset;