Merge remote-tracking branch 'mntm/dev' into kiisu-mntm

This commit is contained in:
WillyJL
2025-08-26 02:07:26 +02:00
3 changed files with 58 additions and 24 deletions
+34 -3
View File
@@ -1,7 +1,13 @@
### Added:
- Apps:
- Games: Geometry Flip (by @goosedev72-projects)
- GPIO: [KT0803] FM Transmitter (by @goosedev72-projects)
- GPIO:
- [GPIO] Explorer (by @EvgeniGenchev07)
- [KT0803] FM Transmitter (by @goosedev72-projects)
- [SPI] Terminal (by @janwiesemann)
- GPIO/Debug:
- [FTDI232H] FlipTDI (by @Skorpionm)
- [INA2xx] INA Meter (by @cepetr)
- GPIO/ESP: [ESP32] Ghost ESP (by @jaylikesbunda)
- GPIO/FlipBoard:
- FlipBoard Blinky (by @jamisonderek)
@@ -10,12 +16,36 @@
- FlipBoard Simon (by @jamisonderek)
- GPIO/FlipperHTTP: Free Roam (by @jblanked)
- GPIO/GPS: [NMEA] Nearby Files (by @Stichoza)
- Media: Video Player (by @LTVA1)
- GPIO/Sensors: [MH-Z19] CO2 Logger (by @harryob2)
- iButton: iButton Converter (by @Leptopt1los)
- Infrared:
- Hitachi AC Remote (by @dogtopus)
- LIDAR Emulator (by @regaly)
- Midea AC Remote (by @xakep666)
- Mitsubishi AC Remote (by @achistyakov)
- Xbox Controller (by @gebeto)
- Media:
- Fmatrix (by @misterwaztaken)
- Image Viewer (by @polioan)
- Space Playground (by @alanfortlink)
- Video Player (by @LTVA1)
- NFC: NFC-Eink (by @RebornedBrain)
- RFID: Simultaneous UHF RFID Reader (by @haffnerriley)
- Sub-GHz:
- Chief Cooker (by @denr01)
- Flipper Share (by @lomalkin)
- HC-11 Modem (by @Giraut)
- Sub Analyzer (by @RocketGod-git)
- Sub-GHz Scheduler (by @shalebridge, fixes by @xMasterX)
- Tools:
- FlipCrypt (by @Tyl3rA)
- Programmer Calculator (by @armixz)
- Resistance Calculator (by @instantiator)
- Tasks (by @MadLadSquad)
- Voltage Calculator (by @HappyAmos)
- USB:
- LEGO Dimensions Toy Pad (by @SegerEnd)
- USB-MIDI (by @kribesk, original by @DrZlo13)
- SubGHz:
- UL: Roger (static 28 bit) with add manually support (by @xMasterX & @mishamyte)
- UL: V2 Phoenix full support (button switch, add manually, counter decrypt/encrypt) (by @xMasterX & @RocketGod-git, original code by @Skorpionm)
@@ -51,10 +81,11 @@
- Seader: Fix ATS handling (by @NVX), reset SAM on error (by @bettse)
- Sentry Safe: New interface, settings & help page (by @H4ckd4ddy)
- Seos Compatible: Add keys v2 support with per-device encryption (by @bettse)
- Sub-GHz Remote: Add possibility to use custom buttons (by @MrLego8-9)
- Sub-GHz Playlist: Fix crash on disallowed frequencies (by @WillyJL)
- Weather Station: Added support for solight TE44 (by @fersingb)
- Weebo: Prevent 0x88 in UID[3] (by @bettse)
- WiFi Marauder: Support for ESP32Marauder 1.8.4 (by @justcallmekoko)
- UL: Sub-GHz Remote: Add possibility to use custom buttons (by @MrLego8-9)
- Sub-GHz:
- UL: Add 868.46 MHz to default subghz freqs list (by @xMasterX)
- UL: Reduce less popular freqs in default hopper preset, make it faster (by @xMasterX)
+23 -20
View File
@@ -117,33 +117,33 @@ static bool subghz_protocol_encoder_linear_get_upload(SubGhzProtocolEncoderLinea
for(uint8_t i = instance->generic.data_count_bit; i > 1; i--) {
if(bit_read(instance->generic.data, i - 1)) {
//send bit 1
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_short);
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_long);
} else {
//send bit 0
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_long);
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_short);
} else {
//send bit 0
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_short);
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_long);
}
}
//Send end bit
if(bit_read(instance->generic.data, 0)) {
//send bit 1
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_short);
//Send gap
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_short * 44);
} else {
//send bit 0
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_long);
//Send gap
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_short * 42);
} else {
//send bit 0
instance->encoder.upload[index++] =
level_duration_make(true, (uint32_t)subghz_protocol_linear_const.te_short);
//Send gap
instance->encoder.upload[index++] =
level_duration_make(false, (uint32_t)subghz_protocol_linear_const.te_short * 44);
}
return true;
@@ -251,11 +251,11 @@ void subghz_protocol_decoder_linear_feed(void* context, bool level, uint32_t dur
}
if(DURATION_DIFF(instance->decoder.te_last, subghz_protocol_linear_const.te_short) <
subghz_protocol_linear_const.te_delta) {
subghz_protocol_blocks_add_bit(&instance->decoder, 1);
subghz_protocol_blocks_add_bit(&instance->decoder, 0);
} else if(
DURATION_DIFF(instance->decoder.te_last, subghz_protocol_linear_const.te_long) <
subghz_protocol_linear_const.te_delta) {
subghz_protocol_blocks_add_bit(&instance->decoder, 0);
subghz_protocol_blocks_add_bit(&instance->decoder, 1);
}
if(instance->decoder.decode_count_bit ==
subghz_protocol_linear_const.min_count_bit_for_found) {
@@ -275,14 +275,14 @@ void subghz_protocol_decoder_linear_feed(void* context, bool level, uint32_t dur
subghz_protocol_linear_const.te_delta) &&
(DURATION_DIFF(duration, subghz_protocol_linear_const.te_long) <
subghz_protocol_linear_const.te_delta)) {
subghz_protocol_blocks_add_bit(&instance->decoder, 1);
subghz_protocol_blocks_add_bit(&instance->decoder, 0);
instance->decoder.parser_step = LinearDecoderStepSaveDuration;
} else if(
(DURATION_DIFF(instance->decoder.te_last, subghz_protocol_linear_const.te_long) <
subghz_protocol_linear_const.te_delta) &&
(DURATION_DIFF(duration, subghz_protocol_linear_const.te_short) <
subghz_protocol_linear_const.te_delta)) {
subghz_protocol_blocks_add_bit(&instance->decoder, 0);
subghz_protocol_blocks_add_bit(&instance->decoder, 1);
instance->decoder.parser_step = LinearDecoderStepSaveDuration;
} else {
instance->decoder.parser_step = LinearDecoderStepReset;
@@ -323,12 +323,15 @@ void subghz_protocol_decoder_linear_get_string(void* context, FuriString* output
furi_assert(context);
SubGhzProtocolDecoderLinear* instance = context;
uint32_t code_found_lo = instance->generic.data & 0x00000000ffffffff;
// Protocol is actually implemented wrong way around, bits are inverted.
// Instead of fixing it and breaking old saved remotes,
// only the display here is inverted to show correct values.
uint32_t code_found_reverse_lo = instance->generic.data & 0x00000000ffffffff;
uint64_t code_found_reverse = subghz_protocol_blocks_reverse_key(
uint64_t code_found = subghz_protocol_blocks_reverse_key(
instance->generic.data, instance->generic.data_count_bit);
uint32_t code_found_reverse_lo = code_found_reverse & 0x00000000ffffffff;
uint32_t code_found_lo = code_found & 0x00000000ffffffff;
furi_string_cat_printf(
output,