mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
SubGhz some changes
This commit is contained in:
@@ -12,7 +12,9 @@
|
|||||||
|
|
||||||
#include <flipper_format/flipper_format_i.h>
|
#include <flipper_format/flipper_format_i.h>
|
||||||
#include <lib/toolbox/path.h>
|
#include <lib/toolbox/path.h>
|
||||||
#include <applications/main/subghz/subghz_i.h>
|
#include <lib/subghz/receiver.h>
|
||||||
|
#include <lib/subghz/transmitter.h>
|
||||||
|
#include <lib/subghz/subghz_setting.h>
|
||||||
|
|
||||||
#include <lib/subghz/protocols/raw.h>
|
#include <lib/subghz/protocols/raw.h>
|
||||||
#include <lib/subghz/protocols/protocol_items.h>
|
#include <lib/subghz/protocols/protocol_items.h>
|
||||||
|
|||||||
@@ -318,6 +318,13 @@ bool subghz_protocol_alutech_at_4n_create_data(
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the button value for the current btn_id
|
||||||
|
* Basic set | 0x11 | 0x22 | 0xFF | 0x44 | 0x33 |
|
||||||
|
* @return Button code
|
||||||
|
*/
|
||||||
|
static uint8_t subghz_protocol_alutech_at_4n_get_btn_code();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generating an upload from data.
|
* Generating an upload from data.
|
||||||
* @param instance Pointer to a SubGhzProtocolEncoderAlutech instance
|
* @param instance Pointer to a SubGhzProtocolEncoderAlutech instance
|
||||||
@@ -333,99 +340,7 @@ static bool subghz_protocol_encoder_alutech_at_4n_get_upload(
|
|||||||
subghz_custom_btn_set_original(btn);
|
subghz_custom_btn_set_original(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t custom_btn_id = subghz_custom_btn_get();
|
btn = subghz_protocol_alutech_at_4n_get_btn_code();
|
||||||
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
|
||||||
|
|
||||||
// Set custom button
|
|
||||||
// Basic set | 0x11 | 0x22 | 0xFF | 0x44 | 0x33 |
|
|
||||||
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
|
||||||
// Restore original button code
|
|
||||||
btn = original_btn_code;
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x11:
|
|
||||||
btn = 0x22;
|
|
||||||
break;
|
|
||||||
case 0x22:
|
|
||||||
btn = 0x11;
|
|
||||||
break;
|
|
||||||
case 0xFF:
|
|
||||||
btn = 0x11;
|
|
||||||
break;
|
|
||||||
case 0x44:
|
|
||||||
btn = 0x11;
|
|
||||||
break;
|
|
||||||
case 0x33:
|
|
||||||
btn = 0x11;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x11:
|
|
||||||
btn = 0x44;
|
|
||||||
break;
|
|
||||||
case 0x22:
|
|
||||||
btn = 0x44;
|
|
||||||
break;
|
|
||||||
case 0xFF:
|
|
||||||
btn = 0x44;
|
|
||||||
break;
|
|
||||||
case 0x44:
|
|
||||||
btn = 0xFF;
|
|
||||||
break;
|
|
||||||
case 0x33:
|
|
||||||
btn = 0x44;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x11:
|
|
||||||
btn = 0x33;
|
|
||||||
break;
|
|
||||||
case 0x22:
|
|
||||||
btn = 0x33;
|
|
||||||
break;
|
|
||||||
case 0xFF:
|
|
||||||
btn = 0x33;
|
|
||||||
break;
|
|
||||||
case 0x44:
|
|
||||||
btn = 0x33;
|
|
||||||
break;
|
|
||||||
case 0x33:
|
|
||||||
btn = 0x22;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_RIGHT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x11:
|
|
||||||
btn = 0xFF;
|
|
||||||
break;
|
|
||||||
case 0x22:
|
|
||||||
btn = 0xFF;
|
|
||||||
break;
|
|
||||||
case 0xFF:
|
|
||||||
btn = 0x22;
|
|
||||||
break;
|
|
||||||
case 0x44:
|
|
||||||
btn = 0x22;
|
|
||||||
break;
|
|
||||||
case 0x33:
|
|
||||||
btn = 0xFF;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gen new key
|
// Gen new key
|
||||||
if(!subghz_protocol_alutech_at_4n_gen_data(instance, btn)) {
|
if(!subghz_protocol_alutech_at_4n_gen_data(instance, btn)) {
|
||||||
@@ -786,6 +701,104 @@ SubGhzProtocolStatus subghz_protocol_decoder_alutech_at_4n_deserialize(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subghz_protocol_alutech_at_4n_get_btn_code() {
|
||||||
|
uint8_t custom_btn_id = subghz_custom_btn_get();
|
||||||
|
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
||||||
|
uint8_t btn = original_btn_code;
|
||||||
|
|
||||||
|
// Set custom button
|
||||||
|
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
||||||
|
// Restore original button code
|
||||||
|
btn = original_btn_code;
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x11:
|
||||||
|
btn = 0x22;
|
||||||
|
break;
|
||||||
|
case 0x22:
|
||||||
|
btn = 0x11;
|
||||||
|
break;
|
||||||
|
case 0xFF:
|
||||||
|
btn = 0x11;
|
||||||
|
break;
|
||||||
|
case 0x44:
|
||||||
|
btn = 0x11;
|
||||||
|
break;
|
||||||
|
case 0x33:
|
||||||
|
btn = 0x11;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x11:
|
||||||
|
btn = 0x44;
|
||||||
|
break;
|
||||||
|
case 0x22:
|
||||||
|
btn = 0x44;
|
||||||
|
break;
|
||||||
|
case 0xFF:
|
||||||
|
btn = 0x44;
|
||||||
|
break;
|
||||||
|
case 0x44:
|
||||||
|
btn = 0xFF;
|
||||||
|
break;
|
||||||
|
case 0x33:
|
||||||
|
btn = 0x44;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x11:
|
||||||
|
btn = 0x33;
|
||||||
|
break;
|
||||||
|
case 0x22:
|
||||||
|
btn = 0x33;
|
||||||
|
break;
|
||||||
|
case 0xFF:
|
||||||
|
btn = 0x33;
|
||||||
|
break;
|
||||||
|
case 0x44:
|
||||||
|
btn = 0x33;
|
||||||
|
break;
|
||||||
|
case 0x33:
|
||||||
|
btn = 0x22;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_RIGHT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x11:
|
||||||
|
btn = 0xFF;
|
||||||
|
break;
|
||||||
|
case 0x22:
|
||||||
|
btn = 0xFF;
|
||||||
|
break;
|
||||||
|
case 0xFF:
|
||||||
|
btn = 0x22;
|
||||||
|
break;
|
||||||
|
case 0x44:
|
||||||
|
btn = 0x22;
|
||||||
|
break;
|
||||||
|
case 0x33:
|
||||||
|
btn = 0xFF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return btn;
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_protocol_decoder_alutech_at_4n_get_string(void* context, FuriString* output) {
|
void subghz_protocol_decoder_alutech_at_4n_get_string(void* context, FuriString* output) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhzProtocolDecoderAlutech_at_4n* instance = context;
|
SubGhzProtocolDecoderAlutech_at_4n* instance = context;
|
||||||
|
|||||||
@@ -374,6 +374,14 @@ bool subghz_protocol_keeloq_bft_create_data(
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the button value for the current btn_id
|
||||||
|
* Basic set | 0x1 | 0x2 | 0x4 | 0x8 | 0xA or Special Learning Code |
|
||||||
|
* @param last_btn_code Candidate for the last button
|
||||||
|
* @return Button code
|
||||||
|
*/
|
||||||
|
static uint8_t subghz_protocol_keeloq_get_btn_code(uint8_t last_btn_code);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generating an upload from data.
|
* Generating an upload from data.
|
||||||
* @param instance Pointer to a SubGhzProtocolEncoderKeeloq instance
|
* @param instance Pointer to a SubGhzProtocolEncoderKeeloq instance
|
||||||
@@ -402,115 +410,7 @@ static bool
|
|||||||
klq_last_custom_btn = 0xF;
|
klq_last_custom_btn = 0xF;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t custom_btn_id = subghz_custom_btn_get();
|
btn = subghz_protocol_keeloq_get_btn_code(klq_last_custom_btn);
|
||||||
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
|
||||||
|
|
||||||
// Set custom button
|
|
||||||
// Basic set | 0x1 | 0x2 | 0x4 | 0x8 | 0xA or Special Learning Code |
|
|
||||||
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
|
||||||
// Restore original button code
|
|
||||||
btn = original_btn_code;
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0xA:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0xF:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0xA:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = klq_last_custom_btn;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0xF:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0xA:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0xF:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_RIGHT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = klq_last_custom_btn;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = klq_last_custom_btn;
|
|
||||||
break;
|
|
||||||
case 0xA:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = klq_last_custom_btn;
|
|
||||||
break;
|
|
||||||
case 0xF:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate new key
|
// Generate new key
|
||||||
if(subghz_protocol_keeloq_gen_data(instance, btn, true)) {
|
if(subghz_protocol_keeloq_gen_data(instance, btn, true)) {
|
||||||
@@ -1330,6 +1230,125 @@ SubGhzProtocolStatus
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subghz_protocol_keeloq_get_btn_code(uint8_t last_btn_code) {
|
||||||
|
uint8_t custom_btn_id = subghz_custom_btn_get();
|
||||||
|
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
||||||
|
uint8_t btn = original_btn_code;
|
||||||
|
|
||||||
|
if(last_btn_code == 0) {
|
||||||
|
last_btn_code = 0xA;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set custom button
|
||||||
|
// Basic set | 0x1 | 0x2 | 0x4 | 0x8 | 0xA or Special Learning Code |
|
||||||
|
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
||||||
|
// Restore original button code
|
||||||
|
btn = original_btn_code;
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0xA:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0xF:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0xA:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = last_btn_code;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0xF:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0xA:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0xF:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_RIGHT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = last_btn_code;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = last_btn_code;
|
||||||
|
break;
|
||||||
|
case 0xA:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = last_btn_code;
|
||||||
|
break;
|
||||||
|
case 0xF:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return btn;
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_protocol_decoder_keeloq_get_string(void* context, FuriString* output) {
|
void subghz_protocol_decoder_keeloq_get_string(void* context, FuriString* output) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhzProtocolDecoderKeeloq* instance = context;
|
SubGhzProtocolDecoderKeeloq* instance = context;
|
||||||
|
|||||||
@@ -117,6 +117,13 @@ void subghz_protocol_encoder_nice_flor_s_free(void* context) {
|
|||||||
|
|
||||||
static void subghz_protocol_nice_one_get_data(uint8_t* p, uint8_t num_parcel, uint8_t hold_bit);
|
static void subghz_protocol_nice_one_get_data(uint8_t* p, uint8_t num_parcel, uint8_t hold_bit);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the button value for the current btn_id
|
||||||
|
* Basic set | 0x1 | 0x2 | 0x4 | 0x8 |
|
||||||
|
* @return Button code
|
||||||
|
*/
|
||||||
|
static uint8_t subghz_protocol_nice_flor_s_get_btn_code();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generating an upload from data.
|
* Generating an upload from data.
|
||||||
* @param instance Pointer to a SubGhzProtocolEncoderNiceFlorS instance
|
* @param instance Pointer to a SubGhzProtocolEncoderNiceFlorS instance
|
||||||
@@ -135,69 +142,7 @@ static void subghz_protocol_encoder_nice_flor_s_get_upload(
|
|||||||
subghz_custom_btn_set_original(btn);
|
subghz_custom_btn_set_original(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t custom_btn_id = subghz_custom_btn_get();
|
btn = subghz_protocol_nice_flor_s_get_btn_code();
|
||||||
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
|
||||||
|
|
||||||
// Set custom button
|
|
||||||
// Basic set | 0x1 | 0x2 | 0x4 | 0x8 |
|
|
||||||
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
|
||||||
// Restore original button code
|
|
||||||
btn = original_btn_code;
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t size_upload = ((instance->generic.data_count_bit * 2) + ((37 + 2 + 2) * 2) * 16);
|
size_t size_upload = ((instance->generic.data_count_bit * 2) + ((37 + 2 + 2) * 2) * 16);
|
||||||
if(size_upload > instance->encoder.size_upload) {
|
if(size_upload > instance->encoder.size_upload) {
|
||||||
@@ -806,6 +751,74 @@ SubGhzProtocolStatus
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subghz_protocol_nice_flor_s_get_btn_code() {
|
||||||
|
uint8_t custom_btn_id = subghz_custom_btn_get();
|
||||||
|
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
||||||
|
uint8_t btn = original_btn_code;
|
||||||
|
|
||||||
|
// Set custom button
|
||||||
|
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
||||||
|
// Restore original button code
|
||||||
|
btn = original_btn_code;
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return btn;
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_protocol_decoder_nice_flor_s_get_string(void* context, FuriString* output) {
|
void subghz_protocol_decoder_nice_flor_s_get_string(void* context, FuriString* output) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhzProtocolDecoderNiceFlorS* instance = context;
|
SubGhzProtocolDecoderNiceFlorS* instance = context;
|
||||||
|
|||||||
@@ -375,6 +375,13 @@ static uint64_t subghz_protocol_secplus_v2_encode_half(uint8_t roll_array[], uin
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the button value for the current btn_id
|
||||||
|
* Basic set | 0x68 | 0x80 | 0x81 | 0xE2 |
|
||||||
|
* @return Button code
|
||||||
|
*/
|
||||||
|
static uint8_t subghz_protocol_secplus_v2_get_btn_code();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Security+ 2.0 message encoding
|
* Security+ 2.0 message encoding
|
||||||
* @param instance SubGhzProtocolEncoderSecPlus_v2*
|
* @param instance SubGhzProtocolEncoderSecPlus_v2*
|
||||||
@@ -386,69 +393,7 @@ static void subghz_protocol_secplus_v2_encode(SubGhzProtocolEncoderSecPlus_v2* i
|
|||||||
subghz_custom_btn_set_original(instance->generic.btn);
|
subghz_custom_btn_set_original(instance->generic.btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t custom_btn_id = subghz_custom_btn_get();
|
instance->generic.btn = subghz_protocol_secplus_v2_get_btn_code();
|
||||||
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
|
||||||
|
|
||||||
// Set custom button
|
|
||||||
// Basic set | 0x68 | 0x80 | 0x81 | 0xE2 |
|
|
||||||
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
|
||||||
// Restore original button code
|
|
||||||
instance->generic.btn = original_btn_code;
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x68:
|
|
||||||
instance->generic.btn = 0x80;
|
|
||||||
break;
|
|
||||||
case 0x80:
|
|
||||||
instance->generic.btn = 0x68;
|
|
||||||
break;
|
|
||||||
case 0x81:
|
|
||||||
instance->generic.btn = 0x80;
|
|
||||||
break;
|
|
||||||
case 0xE2:
|
|
||||||
instance->generic.btn = 0x80;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x68:
|
|
||||||
instance->generic.btn = 0x81;
|
|
||||||
break;
|
|
||||||
case 0x80:
|
|
||||||
instance->generic.btn = 0x81;
|
|
||||||
break;
|
|
||||||
case 0x81:
|
|
||||||
instance->generic.btn = 0x68;
|
|
||||||
break;
|
|
||||||
case 0xE2:
|
|
||||||
instance->generic.btn = 0x81;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x68:
|
|
||||||
instance->generic.btn = 0xE2;
|
|
||||||
break;
|
|
||||||
case 0x80:
|
|
||||||
instance->generic.btn = 0xE2;
|
|
||||||
break;
|
|
||||||
case 0x81:
|
|
||||||
instance->generic.btn = 0xE2;
|
|
||||||
break;
|
|
||||||
case 0xE2:
|
|
||||||
instance->generic.btn = 0x68;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t fixed_1[1] = {instance->generic.btn << 12 | instance->generic.serial >> 20};
|
uint32_t fixed_1[1] = {instance->generic.btn << 12 | instance->generic.serial >> 20};
|
||||||
uint32_t fixed_2[1] = {instance->generic.serial & 0xFFFFF};
|
uint32_t fixed_2[1] = {instance->generic.serial & 0xFFFFF};
|
||||||
@@ -888,6 +833,74 @@ SubGhzProtocolStatus
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subghz_protocol_secplus_v2_get_btn_code() {
|
||||||
|
uint8_t custom_btn_id = subghz_custom_btn_get();
|
||||||
|
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
||||||
|
uint8_t btn = original_btn_code;
|
||||||
|
|
||||||
|
// Set custom button
|
||||||
|
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
||||||
|
// Restore original button code
|
||||||
|
btn = original_btn_code;
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x68:
|
||||||
|
btn = 0x80;
|
||||||
|
break;
|
||||||
|
case 0x80:
|
||||||
|
btn = 0x68;
|
||||||
|
break;
|
||||||
|
case 0x81:
|
||||||
|
btn = 0x80;
|
||||||
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
btn = 0x80;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x68:
|
||||||
|
btn = 0x81;
|
||||||
|
break;
|
||||||
|
case 0x80:
|
||||||
|
btn = 0x81;
|
||||||
|
break;
|
||||||
|
case 0x81:
|
||||||
|
btn = 0x68;
|
||||||
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
btn = 0x81;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x68:
|
||||||
|
btn = 0xE2;
|
||||||
|
break;
|
||||||
|
case 0x80:
|
||||||
|
btn = 0xE2;
|
||||||
|
break;
|
||||||
|
case 0x81:
|
||||||
|
btn = 0xE2;
|
||||||
|
break;
|
||||||
|
case 0xE2:
|
||||||
|
btn = 0x68;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return btn;
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_protocol_decoder_secplus_v2_get_string(void* context, FuriString* output) {
|
void subghz_protocol_decoder_secplus_v2_get_string(void* context, FuriString* output) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhzProtocolDecoderSecPlus_v2* instance = context;
|
SubGhzProtocolDecoderSecPlus_v2* instance = context;
|
||||||
|
|||||||
@@ -97,6 +97,13 @@ void subghz_protocol_encoder_somfy_telis_free(void* context) {
|
|||||||
free(instance);
|
free(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the button value for the current btn_id
|
||||||
|
* Basic set | 0x1 | 0x2 | 0x4 | 0x8 |
|
||||||
|
* @return Button code
|
||||||
|
*/
|
||||||
|
static uint8_t subghz_protocol_somfy_telis_get_btn_code();
|
||||||
|
|
||||||
static bool subghz_protocol_somfy_telis_gen_data(
|
static bool subghz_protocol_somfy_telis_gen_data(
|
||||||
SubGhzProtocolEncoderSomfyTelis* instance,
|
SubGhzProtocolEncoderSomfyTelis* instance,
|
||||||
uint8_t btn,
|
uint8_t btn,
|
||||||
@@ -115,69 +122,7 @@ static bool subghz_protocol_somfy_telis_gen_data(
|
|||||||
subghz_custom_btn_set_original(btn);
|
subghz_custom_btn_set_original(btn);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t custom_btn_id = subghz_custom_btn_get();
|
btn = subghz_protocol_somfy_telis_get_btn_code();
|
||||||
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
|
||||||
|
|
||||||
// Set custom button
|
|
||||||
// Basic set | 0x1 | 0x2 | 0x4 | 0x8 |
|
|
||||||
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
|
||||||
// Restore original button code
|
|
||||||
btn = original_btn_code;
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
|
||||||
switch(original_btn_code) {
|
|
||||||
case 0x1:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x2:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x4:
|
|
||||||
btn = 0x8;
|
|
||||||
break;
|
|
||||||
case 0x8:
|
|
||||||
btn = 0x2;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(instance->generic.cnt < 0xFFFF) {
|
if(instance->generic.cnt < 0xFFFF) {
|
||||||
if((instance->generic.cnt + furi_hal_subghz_get_rolling_counter_mult()) >= 0xFFFF) {
|
if((instance->generic.cnt + furi_hal_subghz_get_rolling_counter_mult()) >= 0xFFFF) {
|
||||||
@@ -723,6 +668,74 @@ SubGhzProtocolStatus
|
|||||||
subghz_protocol_somfy_telis_const.min_count_bit_for_found);
|
subghz_protocol_somfy_telis_const.min_count_bit_for_found);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t subghz_protocol_somfy_telis_get_btn_code() {
|
||||||
|
uint8_t custom_btn_id = subghz_custom_btn_get();
|
||||||
|
uint8_t original_btn_code = subghz_custom_btn_get_original();
|
||||||
|
uint8_t btn = original_btn_code;
|
||||||
|
|
||||||
|
// Set custom button
|
||||||
|
if((custom_btn_id == SUBGHZ_CUSTOM_BTN_OK) && (original_btn_code != 0)) {
|
||||||
|
// Restore original button code
|
||||||
|
btn = original_btn_code;
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_UP) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_DOWN) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x4;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if(custom_btn_id == SUBGHZ_CUSTOM_BTN_LEFT) {
|
||||||
|
switch(original_btn_code) {
|
||||||
|
case 0x1:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x2:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x4:
|
||||||
|
btn = 0x8;
|
||||||
|
break;
|
||||||
|
case 0x8:
|
||||||
|
btn = 0x2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return btn;
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_protocol_decoder_somfy_telis_get_string(void* context, FuriString* output) {
|
void subghz_protocol_decoder_somfy_telis_get_string(void* context, FuriString* output) {
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhzProtocolDecoderSomfyTelis* instance = context;
|
SubGhzProtocolDecoderSomfyTelis* instance = context;
|
||||||
|
|||||||
Reference in New Issue
Block a user