subghz bugfixes and experimental options

This commit is contained in:
MX
2025-03-15 07:23:23 +03:00
parent ab8ea27200
commit 8ca3581fb0
16 changed files with 554 additions and 429 deletions

View File

@@ -26,7 +26,7 @@ const char* const debug_pin_text[DEBUG_P_COUNT] = {
"17(1W)",
};
#define DEBUG_COUNTER_COUNT 13
#define DEBUG_COUNTER_COUNT 16
const char* const debug_counter_text[DEBUG_COUNTER_COUNT] = {
"+1",
"+2",
@@ -34,21 +34,26 @@ const char* const debug_counter_text[DEBUG_COUNTER_COUNT] = {
"+4",
"+5",
"+10",
"0",
"+50",
"OVFL",
"No",
"-1",
"-2",
"-3",
"-4",
"-5",
"-10",
"-50",
};
const uint32_t debug_counter_val[DEBUG_COUNTER_COUNT] = {
const int32_t debug_counter_val[DEBUG_COUNTER_COUNT] = {
1,
2,
3,
4,
5,
10,
50,
65535,
0,
-1,
-2,
@@ -56,6 +61,7 @@ const uint32_t debug_counter_val[DEBUG_COUNTER_COUNT] = {
-4,
-5,
-10,
-50,
};
static void subghz_scene_radio_settings_set_device(VariableItem* item) {
@@ -118,7 +124,7 @@ void subghz_scene_radio_settings_on_enter(void* context) {
SubGhz* subghz = context;
VariableItemList* variable_item_list = subghz->variable_item_list;
uint8_t value_index;
int32_t value_index;
VariableItem* item;
uint8_t value_count_device = RADIO_DEVICE_COUNT;
@@ -152,7 +158,7 @@ void subghz_scene_radio_settings_on_enter(void* context) {
furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug) ? DEBUG_COUNTER_COUNT : 3,
subghz_scene_receiver_config_set_debug_counter,
subghz);
value_index = value_index_uint32(
value_index = value_index_int32(
furi_hal_subghz_get_rolling_counter_mult(),
debug_counter_val,
furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug) ? DEBUG_COUNTER_COUNT : 3);

View File

@@ -193,104 +193,114 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
GenInfo gen_info = {0};
switch(event.event) {
case SetTypePricenton433:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_PRINCETON_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 400};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_PRINCETON_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 400};
break;
case SetTypePricenton315:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 315000000,
.data.name = SUBGHZ_PROTOCOL_PRINCETON_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 400};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 315000000,
.data.name = SUBGHZ_PROTOCOL_PRINCETON_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 400};
break;
case SetTypeNiceFlo12bit:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_NICE_FLO_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_NICE_FLO_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
break;
case SetTypeNiceFlo24bit:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_NICE_FLO_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_NICE_FLO_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
break;
case SetTypeCAME12bit:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
break;
case SetTypeCAME24bit:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
break;
case SetTypeCAME12bit868:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 868350000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 868350000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00000FF0) | 0x1, // btn 0x1, 0x2, 0x4
.data.bits = 12,
.data.te = 0};
break;
case SetTypeCAME24bit868:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 868350000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 868350000,
.data.name = SUBGHZ_PROTOCOL_CAME_NAME,
.data.key = (key & 0x00FFFFF0) | 0x4, // btn 0x1, 0x2, 0x4, 0x8
.data.bits = 24,
.data.te = 0};
break;
case SetTypeLinear_300_00:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 300000000,
.data.name = SUBGHZ_PROTOCOL_LINEAR_NAME,
.data.key = (key & 0x3FF),
.data.bits = 10,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 300000000,
.data.name = SUBGHZ_PROTOCOL_LINEAR_NAME,
.data.key = (key & 0x3FF),
.data.bits = 10,
.data.te = 0};
break;
case SetTypeBETT_433:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_BETT_NAME,
.data.key = (key & 0x0000FFF0),
.data.bits = 18,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_BETT_NAME,
.data.key = (key & 0x0000FFF0),
.data.bits = 18,
.data.te = 0};
break;
case SetTypeCAMETwee:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_TWEE_NAME,
.data.key = 0x003FFF7200000000 |
((key & 0x0FFFFFF0) ^ 0xE0E0E0EE), // ????
.data.bits = 54,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_CAME_TWEE_NAME,
.data.key = 0x003FFF7200000000 | ((key & 0x0FFFFFF0) ^ 0xE0E0E0EE), // ????
.data.bits = 54,
.data.te = 0};
break;
case SetTypeGateTX:
gen_info = (GenInfo){
@@ -329,14 +339,14 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
.data.te = 0};
break;
case SetTypeReversRB2_433:
gen_info = (GenInfo){.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_REVERSRB2_NAME, // 64bits no buttons
.data.key = (key & 0x00000FFFFFFFF000) | 0xFFFFF00000000000 |
0x0000000000000A00,
.data.bits = 64,
.data.te = 0};
gen_info = (GenInfo){
.type = GenData,
.mod = "AM650",
.freq = 433920000,
.data.name = SUBGHZ_PROTOCOL_REVERSRB2_NAME, // 64bits no buttons
.data.key = (key & 0x00000FFFFFFFF000) | 0xFFFFF00000000000 | 0x0000000000000A00,
.data.bits = 64,
.data.te = 0};
break;
case SetTypeMarantec24_868:
gen_info = (GenInfo){
@@ -349,379 +359,421 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
.data.te = 0};
break;
case SetTypeFaacSLH_433:
gen_info = (GenInfo){.type = GenFaacSLH,
.mod = "AM650",
.freq = 433920000,
.faac_slh.serial = ((key & 0x00FFFFF0) | 0xA0000006) >> 4,
.faac_slh.btn = 0x06,
.faac_slh.cnt = 0x02,
.faac_slh.seed = key,
.faac_slh.manuf = "FAAC_SLH"};
gen_info = (GenInfo){
.type = GenFaacSLH,
.mod = "AM650",
.freq = 433920000,
.faac_slh.serial = ((key & 0x00FFFFF0) | 0xA0000006) >> 4,
.faac_slh.btn = 0x06,
.faac_slh.cnt = 0x02,
.faac_slh.seed = key,
.faac_slh.manuf = "FAAC_SLH"};
break;
case SetTypeFaacSLH_868:
gen_info = (GenInfo){.type = GenFaacSLH,
.mod = "AM650",
.freq = 868350000,
.faac_slh.serial = ((key & 0x00FFFFF0) | 0xA0000006) >> 4,
.faac_slh.btn = 0x06,
.faac_slh.cnt = 0x02,
.faac_slh.seed = (key & 0x0FFFFFFF),
.faac_slh.manuf = "FAAC_SLH"};
gen_info = (GenInfo){
.type = GenFaacSLH,
.mod = "AM650",
.freq = 868350000,
.faac_slh.serial = ((key & 0x00FFFFF0) | 0xA0000006) >> 4,
.faac_slh.btn = 0x06,
.faac_slh.cnt = 0x02,
.faac_slh.seed = (key & 0x0FFFFFFF),
.faac_slh.manuf = "FAAC_SLH"};
break;
case SetTypeBeninca433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFF00) | 0x00800080,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFF00) | 0x00800080,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
break;
case SetTypeBeninca868:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x000FFF00) | 0x00800080,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x000FFF00) | 0x00800080,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
break;
case SetTypeAllmatic433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x00FFFF00) | 0x01000011,
.keeloq.btn = 0x0C,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x00FFFF00) | 0x01000011,
.keeloq.btn = 0x0C,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
break;
case SetTypeAllmatic868:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x00FFFF00) | 0x01000011,
.keeloq.btn = 0x0C,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x00FFFF00) | 0x01000011,
.keeloq.btn = 0x0C,
.keeloq.cnt = 0x05,
.keeloq.manuf = "Beninca"};
break;
case SetTypeCenturion433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF),
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Centurion"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF),
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Centurion"};
break;
case SetTypeMonarch433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF),
.keeloq.btn = 0x0A,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Monarch"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF),
.keeloq.btn = 0x0A,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Monarch"};
break;
case SetTypeJollyMotors433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF),
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Jolly_Motors"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF),
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Jolly_Motors"};
break;
case SetTypeElmesElectronic:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x00FFFFFF) | 0x02000000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Elmes_Poland"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x00FFFFFF) | 0x02000000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Elmes_Poland"};
break;
case SetTypeANMotorsAT4:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x04700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x21,
.keeloq.manuf = "AN-Motors"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x04700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x21,
.keeloq.manuf = "AN-Motors"};
break;
case SetTypeAprimatic:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x00600000,
.keeloq.btn = 0x08,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Aprimatic"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x00600000,
.keeloq.btn = 0x08,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Aprimatic"};
break;
case SetTypeGibidi433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Gibidi"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Gibidi"};
break;
case SetTypeGSN:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "GSN"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "GSN"};
break;
case SetTypeIronLogic:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFF0,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x05,
.keeloq.manuf = "IronLogic"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFF0,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x05,
.keeloq.manuf = "IronLogic"};
break;
case SetTypeStilmatic:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Stilmatic"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Stilmatic"};
break;
case SetTypeSommer_FM_434:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "FM476",
.freq = 434420000,
.keeloq.serial = (key & 0x0000FFFF) | 0x01700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "FM476",
.freq = 434420000,
.keeloq.serial = (key & 0x0000FFFF) | 0x01700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
break;
case SetTypeSommer_FM_868:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "FM476",
.freq = 868800000,
.keeloq.serial = (key & 0x0000FFFF) | 0x01700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "FM476",
.freq = 868800000,
.keeloq.serial = (key & 0x0000FFFF) | 0x01700000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
break;
case SetTypeSommer_FM238_434:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "FM238",
.freq = 434420000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "FM238",
.freq = 434420000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
break;
case SetTypeSommer_FM238_868:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "FM238",
.freq = 868800000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "FM238",
.freq = 868800000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Sommer(fsk476)"};
break;
case SetTypeDTMNeo433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x000FFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x05,
.keeloq.manuf = "DTM_Neo"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x000FFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x05,
.keeloq.manuf = "DTM_Neo"};
break;
case SetTypeCAMESpace:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Came_Space"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Came_Space"};
break;
case SetTypeCameAtomo433:
gen_info = (GenInfo){.type = GenCameAtomo,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0FFFFFFF) | 0x10000000,
.keeloq.cnt = 0x03};
gen_info = (GenInfo){
.type = GenCameAtomo,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0FFFFFFF) | 0x10000000,
.keeloq.cnt = 0x03};
break;
case SetTypeCameAtomo868:
gen_info = (GenInfo){.type = GenCameAtomo,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x0FFFFFFF) | 0x10000000,
.keeloq.cnt = 0x03};
gen_info = (GenInfo){
.type = GenCameAtomo,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x0FFFFFFF) | 0x10000000,
.keeloq.cnt = 0x03};
break;
case SetTypeBFTMitto:
gen_info = (GenInfo){.type = GenKeeloqBFT,
.mod = "AM650",
.freq = 433920000,
.keeloq_bft.serial = key & 0x000FFFFF,
.keeloq_bft.btn = 0x02,
.keeloq_bft.cnt = 0x02,
.keeloq_bft.seed = key & 0x000FFFFF,
.keeloq_bft.manuf = "BFT"};
gen_info = (GenInfo){
.type = GenKeeloqBFT,
.mod = "AM650",
.freq = 433920000,
.keeloq_bft.serial = key & 0x000FFFFF,
.keeloq_bft.btn = 0x02,
.keeloq_bft.cnt = 0x02,
.keeloq_bft.seed = key & 0x000FFFFF,
.keeloq_bft.manuf = "BFT"};
break;
case SetTypeAlutechAT4N:
gen_info = (GenInfo){.type = GenAlutechAt4n,
.mod = "AM650",
.freq = 433920000,
.alutech_at_4n.serial = (key & 0x000FFFFF) | 0x00100000,
.alutech_at_4n.btn = 0x44,
.alutech_at_4n.cnt = 0x03};
gen_info = (GenInfo){
.type = GenAlutechAt4n,
.mod = "AM650",
.freq = 433920000,
.alutech_at_4n.serial = (key & 0x000FFFFF) | 0x00100000,
.alutech_at_4n.btn = 0x44,
.alutech_at_4n.cnt = 0x03};
break;
case SetTypeSomfyTelis:
gen_info = (GenInfo){.type = GenSomfyTelis,
.mod = "AM650",
.freq = 433420000,
.somfy_telis.serial = key & 0x00FFFFFF,
.somfy_telis.btn = 0x02,
.somfy_telis.cnt = 0x03};
gen_info = (GenInfo){
.type = GenSomfyTelis,
.mod = "AM650",
.freq = 433420000,
.somfy_telis.serial = key & 0x00FFFFFF,
.somfy_telis.btn = 0x02,
.somfy_telis.cnt = 0x03};
break;
case SetTypeDoorHan_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "DoorHan"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "DoorHan"};
break;
case SetTypeDoorHan_315_00:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 315000000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "DoorHan"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 315000000,
.keeloq.serial = key & 0x0FFFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "DoorHan"};
break;
case SetTypeNiceFlorS_433_92:
gen_info = (GenInfo){.type = GenNiceFlorS,
.mod = "AM650",
.freq = 433920000,
.nice_flor_s.serial = key & 0x0FFFFFFF,
.nice_flor_s.btn = 0x01,
.nice_flor_s.cnt = 0x03,
.nice_flor_s.nice_one = false};
gen_info = (GenInfo){
.type = GenNiceFlorS,
.mod = "AM650",
.freq = 433920000,
.nice_flor_s.serial = key & 0x0FFFFFFF,
.nice_flor_s.btn = 0x01,
.nice_flor_s.cnt = 0x03,
.nice_flor_s.nice_one = false};
break;
case SetTypeNiceOne_433_92:
gen_info = (GenInfo){.type = GenNiceFlorS,
.mod = "AM650",
.freq = 433920000,
.nice_flor_s.serial = key & 0x0FFFFFFF,
.nice_flor_s.btn = 0x01,
.nice_flor_s.cnt = 0x03,
.nice_flor_s.nice_one = true};
gen_info = (GenInfo){
.type = GenNiceFlorS,
.mod = "AM650",
.freq = 433920000,
.nice_flor_s.serial = key & 0x0FFFFFFF,
.nice_flor_s.btn = 0x01,
.nice_flor_s.cnt = 0x03,
.nice_flor_s.nice_one = true};
break;
case SetTypeNiceSmilo_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "NICE_Smilo"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "NICE_Smilo"};
break;
case SetTypeNiceMHouse_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x09,
.keeloq.cnt = 0x03,
.keeloq.manuf = "NICE_MHOUSE"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x09,
.keeloq.cnt = 0x03,
.keeloq.manuf = "NICE_MHOUSE"};
break;
case SetTypeDeaMio433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0FFFF000) | 0x00000869,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Dea_Mio"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0FFFF000) | 0x00000869,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Dea_Mio"};
break;
case SetTypeGeniusBravo433:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x06,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Genius_Bravo"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x06,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Genius_Bravo"};
break;
case SetTypeJCM_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "JCM_Tech"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x00FFFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "JCM_Tech"};
break;
case SetTypeNovoferm_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF) | 0x018F0000,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Novoferm"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF) | 0x018F0000,
.keeloq.btn = 0x01,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Novoferm"};
break;
case SetTypeHormannEcoStar_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x02200000,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "EcoStar"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x000FFFFF) | 0x02200000,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "EcoStar"};
break;
case SetTypeFAACRCXT_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF) | 0x00100000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "FAAC_RC,XT"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = (key & 0x0000FFFF) | 0x00100000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "FAAC_RC,XT"};
break;
case SetTypeFAACRCXT_868:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x0000FFFF) | 0x00100000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "FAAC_RC,XT"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 868350000,
.keeloq.serial = (key & 0x0000FFFF) | 0x00100000,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "FAAC_RC,XT"};
break;
case SetTypeNormstahl_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Normstahl"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x0000FFFF,
.keeloq.btn = 0x04,
.keeloq.cnt = 0x03,
.keeloq.manuf = "Normstahl"};
break;
case SetTypeHCS101_433_92:
gen_info = (GenInfo){.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x000FFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "HCS101"};
gen_info = (GenInfo){
.type = GenKeeloq,
.mod = "AM650",
.freq = 433920000,
.keeloq.serial = key & 0x000FFFFF,
.keeloq.btn = 0x02,
.keeloq.cnt = 0x03,
.keeloq.manuf = "HCS101"};
break;
case SetTypeSecPlus_v1_315_00:
gen_info = (GenInfo){.type = GenSecPlus1, .mod = "AM650", .freq = 315000000};
@@ -733,36 +785,40 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
gen_info = (GenInfo){.type = GenSecPlus1, .mod = "AM650", .freq = 433920000};
break;
case SetTypeSecPlus_v2_310_00:
gen_info = (GenInfo){.type = GenSecPlus2,
.mod = "AM650",
.freq = 310000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
gen_info = (GenInfo){
.type = GenSecPlus2,
.mod = "AM650",
.freq = 310000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
break;
case SetTypeSecPlus_v2_315_00:
gen_info = (GenInfo){.type = GenSecPlus2,
.mod = "AM650",
.freq = 315000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
gen_info = (GenInfo){
.type = GenSecPlus2,
.mod = "AM650",
.freq = 315000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
break;
case SetTypeSecPlus_v2_390_00:
gen_info = (GenInfo){.type = GenSecPlus2,
.mod = "AM650",
.freq = 390000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
gen_info = (GenInfo){
.type = GenSecPlus2,
.mod = "AM650",
.freq = 390000000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
break;
case SetTypeSecPlus_v2_433_00:
gen_info = (GenInfo){.type = GenSecPlus2,
.mod = "AM650",
.freq = 433920000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
gen_info = (GenInfo){
.type = GenSecPlus2,
.mod = "AM650",
.freq = 433920000,
.sec_plus_2.serial = (key & 0x7FFFF3FC), // 850LM pairing
.sec_plus_2.btn = 0x68,
.sec_plus_2.cnt = 0xE500000};
break;
default:
furi_crash("Not implemented");

View File

@@ -79,7 +79,7 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
subghz_txrx_stop(subghz->txrx);
if(subghz_custom_btn_get() != SUBGHZ_CUSTOM_BTN_OK) {
subghz_custom_btn_set(SUBGHZ_CUSTOM_BTN_OK);
int8_t tmp_counter = furi_hal_subghz_get_rolling_counter_mult();
int32_t tmp_counter = furi_hal_subghz_get_rolling_counter_mult();
furi_hal_subghz_set_rolling_counter_mult(0);
// Calling restore!
subghz_tx_start(subghz, subghz_txrx_get_fff_data(subghz->txrx));