Fix for sommer? [ci skip]

This commit is contained in:
MX
2026-01-15 03:22:32 +03:00
parent 161db6ebc6
commit 6265dad0b7
4 changed files with 9 additions and 5 deletions

View File

@@ -119,7 +119,7 @@ The following manufacturers have KeeLoq support in Unleashed firmware:
- Nice Smilo - `433.92MHz` `AM650` (KeeLoq, 64 bits) (8bit serial part in Hop - simple learning)
- Normstahl - `433.92MHz` `AM650` (KeeLoq, 64 bits)
- Novoferm - `433.92MHz` `AM650` (KeeLoq, 64 bits)
- Sommer `434.42MHz, 868.80MHz` `FSK12K (or FSK476)` (KeeLoq, 64 bits) (normal learning)
- Sommer `434.42MHz, 868.80MHz` `FSK12K (or FSK476)` (KeeLoq, 64 bits) (normal learning) (TX03-868-4, Pearl, and maybe other models are supported (SOMloq2))
- Steelmate - `433.92MHz` `AM650` (KeeLoq, 64 bits) (12bit serial part in Hop - normal learning)
- Stilmatic - `433.92MHz` `AM650` (KeeLoq, 64 bits) (normal learning)

View File

@@ -248,7 +248,7 @@ const uint8_t subghz_device_cc1101_preset_2fsk_dev12khz_async_regs[] = {
CC1101_MDMCFG4,
0x67, //Rx BW filter is 270.833333 kHz
CC1101_DEVIATN,
0x30, //Deviation ~12 kHz
0x30, //Deviation 12.695312 kHz
/* Main Radio Control State Machine */
CC1101_MCSM0,

View File

@@ -6,7 +6,7 @@ typedef enum {
FuriHalSubGhzPresetOok270Async, /**< OOK, bandwidth 270kHz, asynchronous */
FuriHalSubGhzPresetOok650Async, /**< OOK, bandwidth 650kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev238Async, /**< FM, deviation 2.380371 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev12KAsync, /**< FM, deviation ~12 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev12KAsync, /**< FM, deviation 12.695312 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev476Async, /**< FM, deviation 47.60742 kHz, asynchronous */
FuriHalSubGhzPresetMSK99_97KbAsync, /**< MSK, deviation 47.60742 kHz, 99.97Kb/s, asynchronous */
FuriHalSubGhzPresetGFSK9_99KbAsync, /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */

View File

@@ -526,6 +526,11 @@ static bool
klq_last_custom_btn = 0xD;
}
uint32_t gap_duration = subghz_protocol_keeloq_const.te_short * 40;
if((strcmp(instance->manufacture_name, "Sommer") == 0)) {
gap_duration = subghz_protocol_keeloq_const.te_short * 29;
}
btn = subghz_protocol_keeloq_get_btn_code(klq_last_custom_btn);
// Generate new key
@@ -580,8 +585,7 @@ static bool
// send end
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_keeloq_const.te_short);
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_keeloq_const.te_short * 40);
instance->encoder.upload[index++] = level_duration_make(false, gap_duration);
return true;
}