mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into xfw-dev
This commit is contained in:
@@ -24,12 +24,14 @@ typedef enum {
|
|||||||
SubmenuIndexSommer_FM_868,
|
SubmenuIndexSommer_FM_868,
|
||||||
SubmenuIndexStilmatic,
|
SubmenuIndexStilmatic,
|
||||||
SubmenuIndexDTMNeo433,
|
SubmenuIndexDTMNeo433,
|
||||||
|
SubmenuIndexDeaMio433,
|
||||||
SubmenuIndexGibidi433,
|
SubmenuIndexGibidi433,
|
||||||
SubmenuIndexNiceMHouse_433_92,
|
SubmenuIndexNiceMHouse_433_92,
|
||||||
SubmenuIndexJCM_433_92,
|
SubmenuIndexJCM_433_92,
|
||||||
SubmenuIndexFAACRCXT_433_92,
|
SubmenuIndexFAACRCXT_433_92,
|
||||||
SubmenuIndexFAACRCXT_868,
|
SubmenuIndexFAACRCXT_868,
|
||||||
SubmenuIndexNormstahl_433_92,
|
SubmenuIndexNormstahl_433_92,
|
||||||
|
SubmenuIndexGeniusBravo433,
|
||||||
SubmenuIndexGSN,
|
SubmenuIndexGSN,
|
||||||
SubmenuIndexAprimatic,
|
SubmenuIndexAprimatic,
|
||||||
SubmenuIndexHCS101_433_92,
|
SubmenuIndexHCS101_433_92,
|
||||||
|
|||||||
@@ -139,6 +139,12 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexIronLogic,
|
SubmenuIndexIronLogic,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: DEA Mio 433MHz",
|
||||||
|
SubmenuIndexDeaMio433,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"KL: DTM Neo 433MHz",
|
"KL: DTM Neo 433MHz",
|
||||||
@@ -193,6 +199,12 @@ void subghz_scene_set_type_on_enter(void* context) {
|
|||||||
SubmenuIndexFAACRCXT_868,
|
SubmenuIndexFAACRCXT_868,
|
||||||
subghz_scene_set_type_submenu_callback,
|
subghz_scene_set_type_submenu_callback,
|
||||||
subghz);
|
subghz);
|
||||||
|
submenu_add_item(
|
||||||
|
subghz->submenu,
|
||||||
|
"KL: Genius Bravo 433MHz",
|
||||||
|
SubmenuIndexGeniusBravo433,
|
||||||
|
subghz_scene_set_type_submenu_callback,
|
||||||
|
subghz);
|
||||||
submenu_add_item(
|
submenu_add_item(
|
||||||
subghz->submenu,
|
subghz->submenu,
|
||||||
"KL: Nice Mhouse 433MHz",
|
"KL: Nice Mhouse 433MHz",
|
||||||
@@ -747,6 +759,24 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
|
|||||||
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SubmenuIndexDeaMio433:
|
||||||
|
generated_protocol = subghz_txrx_gen_keeloq_protocol(
|
||||||
|
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "Dea_Mio");
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SubmenuIndexGeniusBravo433:
|
||||||
|
generated_protocol = subghz_txrx_gen_keeloq_protocol(
|
||||||
|
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x6, 0x0003, "Genius_Bravo");
|
||||||
|
if(!generated_protocol) {
|
||||||
|
furi_string_set(
|
||||||
|
subghz->error_str, "Function requires\nan SD card with\nfresh databases.");
|
||||||
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SubmenuIndexJCM_433_92:
|
case SubmenuIndexJCM_433_92:
|
||||||
generated_protocol = subghz_txrx_gen_keeloq_protocol(
|
generated_protocol = subghz_txrx_gen_keeloq_protocol(
|
||||||
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "JCM_Tech");
|
subghz->txrx, "AM650", 433920000, key & 0x00FFFFFF, 0x2, 0x0003, "JCM_Tech");
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ uint8_t subghz_history_get_type_protocol(SubGhzHistory* instance, uint16_t idx);
|
|||||||
*/
|
*/
|
||||||
const char* subghz_history_get_protocol_name(SubGhzHistory* instance, uint16_t idx);
|
const char* subghz_history_get_protocol_name(SubGhzHistory* instance, uint16_t idx);
|
||||||
|
|
||||||
/** Get datetime to history[idx]
|
/** Get datetime from history[idx]
|
||||||
*
|
*
|
||||||
* @param instance - SubGhzHistory instance
|
* @param instance - SubGhzHistory instance
|
||||||
* @param idx - record index
|
* @param idx - record index
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ struct SubGhz {
|
|||||||
SubGhzReadRAW* subghz_read_raw;
|
SubGhzReadRAW* subghz_read_raw;
|
||||||
bool raw_send_only;
|
bool raw_send_only;
|
||||||
|
|
||||||
|
bool save_datetime_set;
|
||||||
|
FuriHalRtcDateTime save_datetime;
|
||||||
|
|
||||||
SubGhzLastSettings* last_settings;
|
SubGhzLastSettings* last_settings;
|
||||||
|
|
||||||
SubGhzProtocolFlag filter;
|
SubGhzProtocolFlag filter;
|
||||||
@@ -101,8 +104,6 @@ struct SubGhz {
|
|||||||
|
|
||||||
uint16_t idx_menu_chosen;
|
uint16_t idx_menu_chosen;
|
||||||
SubGhzLoadTypeFile load_type_file;
|
SubGhzLoadTypeFile load_type_file;
|
||||||
bool save_datetime_set;
|
|
||||||
FuriHalRtcDateTime save_datetime;
|
|
||||||
|
|
||||||
bool fav_timeout;
|
bool fav_timeout;
|
||||||
FuriTimer* timer;
|
FuriTimer* timer;
|
||||||
|
|||||||
@@ -348,8 +348,8 @@ int32_t update_task_worker_flash_writer(void* context) {
|
|||||||
// Production
|
// Production
|
||||||
// furi_hal_rtc_set_log_level(FuriLogLevelDefault);
|
// furi_hal_rtc_set_log_level(FuriLogLevelDefault);
|
||||||
furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug);
|
furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug);
|
||||||
furi_hal_rtc_set_heap_track_mode(FuriHalRtcHeapTrackModeNone);
|
|
||||||
furi_hal_rtc_reset_flag(FuriHalRtcFlagLegacySleep);
|
furi_hal_rtc_reset_flag(FuriHalRtcFlagLegacySleep);
|
||||||
|
furi_hal_rtc_set_heap_track_mode(FuriHalRtcHeapTrackModeNone);
|
||||||
#endif
|
#endif
|
||||||
update_task_set_progress(update_task, UpdateTaskStageCompleted, 100);
|
update_task_set_progress(update_task, UpdateTaskStageCompleted, 100);
|
||||||
success = true;
|
success = true;
|
||||||
|
|||||||
@@ -328,7 +328,12 @@ bool iso15693_3_is_block_locked(const Iso15693_3Data* data, uint8_t block_index)
|
|||||||
furi_assert(data);
|
furi_assert(data);
|
||||||
furi_assert(block_index < data->system_info.block_count);
|
furi_assert(block_index < data->system_info.block_count);
|
||||||
|
|
||||||
|
// TODO: make proper fix for this, old format had no Block Security Status in file
|
||||||
|
if(simple_array_get_count(data->block_security) != 0) {
|
||||||
return *(const uint8_t*)simple_array_cget(data->block_security, block_index);
|
return *(const uint8_t*)simple_array_cget(data->block_security, block_index);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t iso15693_3_get_manufacturer_id(const Iso15693_3Data* data) {
|
uint8_t iso15693_3_get_manufacturer_id(const Iso15693_3Data* data) {
|
||||||
|
|||||||
@@ -223,17 +223,18 @@ static bool subghz_protocol_keeloq_gen_data(
|
|||||||
(strcmp(instance->manufacture_name, "DTM_Neo") == 0) ||
|
(strcmp(instance->manufacture_name, "DTM_Neo") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "FAAC_RC,XT") == 0) ||
|
(strcmp(instance->manufacture_name, "FAAC_RC,XT") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0) ||
|
(strcmp(instance->manufacture_name, "Mutanco_Mutancode") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "Came_Space") == 0)) {
|
(strcmp(instance->manufacture_name, "Came_Space") == 0) ||
|
||||||
|
(strcmp(instance->manufacture_name, "Genius_Bravo") == 0) ||
|
||||||
|
(strcmp(instance->manufacture_name, "GSN") == 0)) {
|
||||||
// DTM Neo, Came_Space uses 12bit serial -> simple learning
|
// DTM Neo, Came_Space uses 12bit serial -> simple learning
|
||||||
// FAAC_RC,XT , Mutanco_Mutancode 12bit serial -> normal learning
|
// FAAC_RC,XT , Mutanco_Mutancode, Genius_Bravo, GSN 12bit serial -> normal learning
|
||||||
decrypt = btn << 28 | (instance->generic.serial & 0xFFF) << 16 |
|
decrypt = btn << 28 | (instance->generic.serial & 0xFFF) << 16 |
|
||||||
instance->generic.cnt;
|
instance->generic.cnt;
|
||||||
} else if(
|
} else if(
|
||||||
(strcmp(instance->manufacture_name, "NICE_Smilo") == 0) ||
|
(strcmp(instance->manufacture_name, "NICE_Smilo") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "NICE_MHOUSE") == 0) ||
|
(strcmp(instance->manufacture_name, "NICE_MHOUSE") == 0) ||
|
||||||
(strcmp(instance->manufacture_name, "JCM_Tech") == 0) ||
|
(strcmp(instance->manufacture_name, "JCM_Tech") == 0)) {
|
||||||
(strcmp(instance->manufacture_name, "Normstahl") == 0)) {
|
// Nice Smilo, MHouse, JCM -> 8bit serial - simple learning
|
||||||
// Nice Smilo, MHouse, JCM, Normstahl -> 8bit serial - simple learning
|
|
||||||
decrypt = btn << 28 | (instance->generic.serial & 0xFF) << 16 |
|
decrypt = btn << 28 | (instance->generic.serial & 0xFF) << 16 |
|
||||||
instance->generic.cnt;
|
instance->generic.cnt;
|
||||||
} else if(strcmp(instance->manufacture_name, "Beninca") == 0) {
|
} else if(strcmp(instance->manufacture_name, "Beninca") == 0) {
|
||||||
@@ -242,6 +243,10 @@ static bool subghz_protocol_keeloq_gen_data(
|
|||||||
} else if(strcmp(instance->manufacture_name, "Centurion") == 0) {
|
} else if(strcmp(instance->manufacture_name, "Centurion") == 0) {
|
||||||
decrypt = btn << 28 | (0x1CE) << 16 | instance->generic.cnt;
|
decrypt = btn << 28 | (0x1CE) << 16 | instance->generic.cnt;
|
||||||
// Centurion -> no serial in hop, uses fixed value 0x1CE - normal learning
|
// Centurion -> no serial in hop, uses fixed value 0x1CE - normal learning
|
||||||
|
} else if(strcmp(instance->manufacture_name, "Dea_Mio") == 0) {
|
||||||
|
uint32_t dea_serial = (instance->generic.serial & 0xFFF) + 0x800;
|
||||||
|
decrypt = btn << 28 | (dea_serial & 0xFFF) << 16 | instance->generic.cnt;
|
||||||
|
// Dea_Mio -> modified serial in hop, uses last 3 digits adding +8 to first one (example - 419 -> C19) - simple learning
|
||||||
}
|
}
|
||||||
// Old type selector fixage for compatibilitiy with old signal files
|
// Old type selector fixage for compatibilitiy with old signal files
|
||||||
uint8_t kl_type_en = instance->keystore->kl_type;
|
uint8_t kl_type_en = instance->keystore->kl_type;
|
||||||
|
|||||||
Reference in New Issue
Block a user