mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 04:34:43 +04:00
subghz bugfixes and experimental options
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -279,7 +279,7 @@ static bool subghz_protocol_alutech_at_4n_gen_data(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
crc = subghz_protocol_alutech_at_4n_decrypt_data_crc((uint8_t)(instance->generic.cnt & 0xFF));
|
||||
|
||||
@@ -191,7 +191,7 @@ static void subghz_protocol_encoder_came_atomo_get_upload(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -140,9 +140,40 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
|
||||
data_prg[0] = 0x00;
|
||||
|
||||
if(allow_zero_seed || (instance->generic.seed != 0x0)) {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
if(!(furi_hal_subghz_get_rolling_counter_mult() >= 0xFFFF)) {
|
||||
if(instance->generic.cnt < 0xFFFFF) {
|
||||
if((instance->generic.cnt + furi_hal_subghz_get_rolling_counter_mult()) >
|
||||
0xFFFFF) {
|
||||
instance->generic.cnt = 0;
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(
|
||||
(instance->generic.cnt >= 0xFFFFF) &&
|
||||
(furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
} else {
|
||||
instance->generic.cnt += 1;
|
||||
}
|
||||
|
||||
if(temp_counter_backup != 0x0) {
|
||||
temp_counter_backup += furi_hal_subghz_get_rolling_counter_mult();
|
||||
if(!(furi_hal_subghz_get_rolling_counter_mult() >= 0xFFFF)) {
|
||||
if(temp_counter_backup < 0xFFFFF) {
|
||||
if((temp_counter_backup + furi_hal_subghz_get_rolling_counter_mult()) >
|
||||
0xFFFFF) {
|
||||
temp_counter_backup = 0;
|
||||
} else {
|
||||
temp_counter_backup += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(
|
||||
(temp_counter_backup >= 0xFFFFF) &&
|
||||
(furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
temp_counter_backup = 0;
|
||||
}
|
||||
} else {
|
||||
temp_counter_backup += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,7 +224,9 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
|
||||
(temp_fix_backup != 0x0) && !faac_prog_mode) {
|
||||
instance->generic.serial = temp_fix_backup >> 4;
|
||||
instance->generic.btn = temp_fix_backup & 0xF;
|
||||
instance->generic.cnt = temp_counter_backup;
|
||||
if(temp_counter_backup != 0x0) {
|
||||
instance->generic.cnt = temp_counter_backup;
|
||||
}
|
||||
}
|
||||
uint32_t fix = instance->generic.serial << 4 | instance->generic.btn;
|
||||
uint32_t hop = 0;
|
||||
@@ -207,7 +240,32 @@ static bool subghz_protocol_faac_slh_gen_data(SubGhzProtocolEncoderFaacSLH* inst
|
||||
}
|
||||
|
||||
if(allow_zero_seed || (instance->generic.seed != 0x0)) {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
if(!(furi_hal_subghz_get_rolling_counter_mult() >= 0xFFFF)) {
|
||||
if(instance->generic.cnt < 0xFFFFF) {
|
||||
if((instance->generic.cnt + furi_hal_subghz_get_rolling_counter_mult()) >
|
||||
0xFFFFF) {
|
||||
instance->generic.cnt = 0;
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(
|
||||
(instance->generic.cnt >= 0xFFFFF) &&
|
||||
(furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
} else {
|
||||
if(instance->generic.cnt < 0xFFFFF) {
|
||||
if((instance->generic.cnt + 0xFFFFF) > 0xFFFFF) {
|
||||
instance->generic.cnt = 0;
|
||||
} else {
|
||||
instance->generic.cnt += 0xFFFFF;
|
||||
}
|
||||
} else if(
|
||||
(instance->generic.cnt >= 0xFFFFF) &&
|
||||
(furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if((instance->generic.cnt % 2) == 0) {
|
||||
@@ -248,7 +306,7 @@ bool subghz_protocol_faac_slh_create_data(
|
||||
const char* manufacture_name,
|
||||
SubGhzRadioPreset* preset) {
|
||||
furi_assert(context);
|
||||
// roguemaster don't steal!!!
|
||||
// OwO
|
||||
SubGhzProtocolEncoderFaacSLH* instance = context;
|
||||
instance->generic.serial = serial;
|
||||
instance->generic.btn = btn;
|
||||
|
||||
@@ -151,6 +151,9 @@ static void subghz_protocol_encoder_hay21_get_upload(SubGhzProtocolEncoderHay21*
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
if(furi_hal_subghz_get_rolling_counter_mult() >= 0xF) {
|
||||
instance->generic.cnt = 0xF;
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xF) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
|
||||
@@ -190,7 +190,9 @@ static bool subghz_protocol_keeloq_gen_data(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if(
|
||||
(instance->generic.cnt >= 0xFFFF) &&
|
||||
(furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ static bool subghz_protocol_kinggates_stylo_4k_gen_data(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ static void subghz_protocol_encoder_nice_flor_s_get_upload(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
uint64_t decrypt = ((uint64_t)instance->generic.serial << 16) | instance->generic.cnt;
|
||||
|
||||
@@ -136,7 +136,7 @@ static bool
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ static bool subghz_protocol_somfy_telis_gen_data(
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ static bool
|
||||
} else {
|
||||
instance->generic.cnt += furi_hal_subghz_get_rolling_counter_mult();
|
||||
}
|
||||
} else if(instance->generic.cnt >= 0xFFFF) {
|
||||
} else if((instance->generic.cnt >= 0xFFFF) && (furi_hal_subghz_get_rolling_counter_mult() != 0)) {
|
||||
instance->generic.cnt = 0;
|
||||
}
|
||||
uint32_t fix = btn << 24 | instance->generic.serial;
|
||||
|
||||
@@ -1716,7 +1716,7 @@ Function,+,furi_hal_subghz_flush_tx,void,
|
||||
Function,+,furi_hal_subghz_get_data_gpio,const GpioPin*,
|
||||
Function,+,furi_hal_subghz_get_ext_leds_and_amp,_Bool,
|
||||
Function,+,furi_hal_subghz_get_lqi,uint8_t,
|
||||
Function,+,furi_hal_subghz_get_rolling_counter_mult,int8_t,
|
||||
Function,+,furi_hal_subghz_get_rolling_counter_mult,int32_t,
|
||||
Function,+,furi_hal_subghz_get_rssi,float,
|
||||
Function,+,furi_hal_subghz_idle,void,
|
||||
Function,-,furi_hal_subghz_init,void,
|
||||
@@ -1736,7 +1736,7 @@ Function,+,furi_hal_subghz_set_ext_leds_and_amp,void,_Bool
|
||||
Function,+,furi_hal_subghz_set_frequency,uint32_t,uint32_t
|
||||
Function,+,furi_hal_subghz_set_frequency_and_path,uint32_t,uint32_t
|
||||
Function,+,furi_hal_subghz_set_path,void,FuriHalSubGhzPath
|
||||
Function,+,furi_hal_subghz_set_rolling_counter_mult,void,int8_t
|
||||
Function,+,furi_hal_subghz_set_rolling_counter_mult,void,int32_t
|
||||
Function,+,furi_hal_subghz_shutdown,void,
|
||||
Function,+,furi_hal_subghz_sleep,void,
|
||||
Function,+,furi_hal_subghz_start_async_rx,void,"FuriHalSubGhzCaptureCallback, void*"
|
||||
|
||||
|
@@ -51,7 +51,7 @@ typedef struct {
|
||||
volatile SubGhzRegulation regulation;
|
||||
const GpioPin* async_mirror_pin;
|
||||
|
||||
int8_t rolling_counter_mult;
|
||||
int32_t rolling_counter_mult;
|
||||
bool ext_leds_and_amp : 1;
|
||||
bool dangerous_frequency_i : 1;
|
||||
} FuriHalSubGhz;
|
||||
@@ -65,11 +65,11 @@ volatile FuriHalSubGhz furi_hal_subghz = {
|
||||
.dangerous_frequency_i = false,
|
||||
};
|
||||
|
||||
int8_t furi_hal_subghz_get_rolling_counter_mult(void) {
|
||||
int32_t furi_hal_subghz_get_rolling_counter_mult(void) {
|
||||
return furi_hal_subghz.rolling_counter_mult;
|
||||
}
|
||||
|
||||
void furi_hal_subghz_set_rolling_counter_mult(int8_t mult) {
|
||||
void furi_hal_subghz_set_rolling_counter_mult(int32_t mult) {
|
||||
furi_hal_subghz.rolling_counter_mult = mult;
|
||||
}
|
||||
|
||||
|
||||
@@ -174,14 +174,14 @@ uint32_t furi_hal_subghz_set_frequency_and_path(uint32_t value);
|
||||
bool furi_hal_subghz_is_tx_allowed(uint32_t value);
|
||||
|
||||
/** Get the current rolling protocols counter ++/-- value
|
||||
* @return int8_t current value
|
||||
* @return int32_t current value
|
||||
*/
|
||||
int8_t furi_hal_subghz_get_rolling_counter_mult(void);
|
||||
int32_t furi_hal_subghz_get_rolling_counter_mult(void);
|
||||
|
||||
/** Set the current rolling protocols counter ++/-- value
|
||||
* @param mult int8_t = -1, -10, -100, 0, 1, 10, 100
|
||||
* @param mult int32_t = -1, -10, -50, 0, 1, 10, 50
|
||||
*/
|
||||
void furi_hal_subghz_set_rolling_counter_mult(int8_t mult);
|
||||
void furi_hal_subghz_set_rolling_counter_mult(int32_t mult);
|
||||
|
||||
/** Set frequency
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user