1
mirror of https://github.com/DarkFlippers/unleashed-firmware.git synced 2025-12-12 20:49:49 +04:00

Compare commits

...

3377 Commits

Author SHA1 Message Date
MX
18377185c7 upd dronich 2023-11-13 15:02:01 +04:00
MX
ef09dcf8f8 subghz things and remove rtos finally 2023-11-13 12:42:05 +04:00
MX
bee1a6c18a remove rtos 2023-11-13 12:27:21 +04:00
MX
b958bfd5c9 Merge branch 'ofw_dev' into nfcrefactoring 2023-11-11 20:18:55 +04:00
Georgii Surkov
49dcf81743 [FL-3618] Infrared remote button index support (#3180)
* Do not load all signals at once (Draft)
* Minor cleanup
* Refactor remote renaming
* Improve function signatures
* Rename infrared_remote functions
* Optimise signal loading
* Implement adding signals to remote
* Add read_name() method
* Deprecate a function
* Partially implement deleting signals (draft)
* Use m-array instead of m-list for signal name directory
* Use plain C strings instead of furi_string
* Implement deleting signals
* Implement deleting signals via generalised callback
* Implement renaming signals
* Rename some types
* Some more renaming
* Remove unused type
* Implement inserting signals (internal use)
* Improve InfraredMoveView
* Send an event to move a signal
* Remove unused type
* Implement moving signals
* Implement creating new remotes with one signal
* Un-deprecate and rename a function
* Add InfraredRemote API docs
* Add InfraredSignal API docs
* Better error messages
* Show progress pop-up when moving buttons in a remote
* Copy labels to the InfraredMoveView to avoid pointer invalidation
* Improve file selection scene
* Show progress pop-up when renaming buttons in a remote
* Refactor a scene
* Show progress when deleting a button from remote
* Use a random name for temp files
* Add docs to infrared_brute_force.h
* Rename Infrared type to InfraredApp
* Add docs to infrared_app_i.h
* Deliver event data via a callback
* Bundle event data together with event type
* Change DataExchange behaviour
* Adapt RPC debug app to new API
* Remove rogue output
* Add Doxygen comments to rpc_app.h
* Simplify rpc_app.c code
* Remove superflous parameter
* Do not allocate protobuf messages on the stack
* Fix GetError response
* Support for button indices
* Comment out shallow submodules
* Fix F18 api
* Fix logical error and add more debug output
* fbt: testing unshallow for protobuf
* github: lint&checks: unshallow prior to checks
* Fix a TODO
* github: do not unshallow the unshallowed
* fbt: assets: only attempt to unshallow if cannot describe
* Do not use the name when loading a signal by index (duh)
* Simplify loading infrared signals by name
* Sync with protobuf release
* Infrared: use compact furi_crash macros

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-11-10 16:22:34 +09:00
gornekich
16ffa2bf75 [FL-3657] Fix NFC unit tests (#3192)
Co-authored-by: あく <alleteam@gmail.com>
2023-11-09 15:18:36 +09:00
MX
32e2cbe60a Merge branch 'ofw_dev' into nfcrefactoring 2023-11-08 15:14:30 +04:00
MX
a7e6eb7fe4 clock lol 2023-11-08 13:41:41 +04:00
MX
33ed5ea1f2 upd tv ir from pr manually 2023-11-08 13:10:09 +04:00
MX
c8c191c0a4 fix ir assets 2023-11-08 13:09:01 +04:00
MX
78af3214c3 api 44 2023-11-08 13:05:23 +04:00
MX
e244bedd64 resources rework pt1 2023-11-08 12:41:14 +04:00
MX
ebe95a92d1 infrared subghz merge fixes 2023-11-08 11:38:22 +04:00
MX
5921eb3d27 return some stuff 2023-11-08 11:26:11 +04:00
MX
9ed23799eb merge port p2 2023-11-08 11:08:17 +04:00
MX
19f524ec43 merge pt1 2023-11-08 10:27:39 +04:00
DerSkythe
085c90af40 fix: invariant format of log time data #3195 (#3202) 2023-11-05 17:59:22 +04:00
hedger
0d94abf856 fbt: dist improvements (#3186)
* fbt: MENUEXTERNAL apps now respect build configuration; fixed `fap_deploy`
* fbt, ufbt: better message for missing app manifests (shows real paths)

Co-authored-by: あく <alleteam@gmail.com>
2023-11-02 22:28:39 +09:00
Georgii Surkov
0131eb3aa2 [FL-3656] Fix crash when exiting write mode (#3191) 2023-11-02 22:10:16 +09:00
MX
bee48f483c Merge branch 'ofw_dev' into nfcrefactoring 2023-11-01 21:07:33 +03:00
あく
47cc05dab4 [FL-3655] Dolphin: Extreme butthurt loop fix (#3184)
* Furi: change timer restart function signature, explicitly require timer time. Dolphin: fix incorrect timer usage caused by refactoring.
* Format Sources
* Furi: update timer documentation
2023-11-01 19:23:02 +04:00
あく
aa06328516 Furi, FuriHal: remove FreeRTOS headers leaks (#3179)
* Furi: remove direct FreeRTOS timers use
* Furi: eliminate FreeRTOS headers leak. What did it cost? Everything...
* SubGhz: proper public api for protocols. Format Sources.
* Furi: slightly less redundant declarations
* Desktop: proper types in printf
* Sync API Symbols
* Furi: add timer reset and fix dolphin service, fix unit tests
* Furi: proper timer restart method naming and correct behavior in timer stopped state.

---------

Co-authored-by: hedger <hedger@nanode.su>
2023-11-01 11:24:11 +04:00
hedger
7bd3bd7ea4 fbt: source collection improvements (#3181)
* fbt: reduced amount of redundant compilation units
* fbt: added GatherSources() method which can reject source paths starting with "!" in sources list; optimized apps' source lists
* docs: updated on path exclusion for `sources`
* apps: examples: fixed example_advanced_plugins source list
* docs: more details on `sources`; apps: narrower sources lists
2023-11-01 13:21:31 +09:00
Astra
bf8984a225 [FL-3647] Rename menu items related to dummy mode and sound (#3177)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-10-31 20:34:21 +09:00
hedger
bbe68d6ffc [FL-3629] fbt: SD card resource handling speedup (#3178)
* fbt: reduced size of resources dependency graphs, resulting in faster build task evaluation
* lib: flipper_app: fixed error message & error handling for plugins
2023-10-31 15:27:58 +04:00
あく
9af81ce8d0 Furi: cleanup crash use (#3175)
* Furi: optional message in furi_crash and furi_halt
* Consistent furi_crash use
* UnitTests: crash instead of assert
* furi: check: fixed macro for default arg
* unit_tests: fixed crashes everywhere
* lib: infrared: fixed PVS warnings
* furi: eliminated __FURI_ASSERT_MESSAGE_FLAG
* Furi: update check.h docs
* Furi: add check.h usage note
* Docs: grammar

---------

Co-authored-by: hedger <hedger@nanode.su>
2023-10-31 14:40:32 +04:00
Georgii Surkov
c8180747db [FL-3456] Allow for larger Infrared remotes (#3164)
* Do not load all signals at once (Draft)
* Minor cleanup
* Refactor remote renaming
* Improve function signatures
* Rename infrared_remote functions
* Optimise signal loading
* Implement adding signals to remote
* Add read_name() method
* Deprecate a function
* Partially implement deleting signals (draft)
* Use m-array instead of m-list for signal name directory
* Use plain C strings instead of furi_string
* Implement deleting signals
* Implement deleting signals via generalised callback
* Implement renaming signals
* Rename some types
* Some more renaming
* Remove unused type
* Implement inserting signals (internal use)
* Improve InfraredMoveView
* Send an event to move a signal
* Remove unused type
* Implement moving signals
* Implement creating new remotes with one signal
* Un-deprecate and rename a function
* Add InfraredRemote API docs
* Add InfraredSignal API docs
* Better error messages
* Show progress pop-up when moving buttons in a remote
* Copy labels to the InfraredMoveView to avoid pointer invalidation
* Improve file selection scene
* Show progress pop-up when renaming buttons in a remote
* Refactor a scene
* Show progress when deleting a button from remote
* Use a random name for temp files
* Add docs to infrared_brute_force.h
* Rename Infrared type to InfraredApp
* Add docs to infrared_app_i.h

Co-authored-by: あく <alleteam@gmail.com>
2023-10-31 01:20:35 +09:00
hedger
917410a0a8 [FL-3629] fbt: reworked assets & resources handling (#3160)
* fbt: reworking targets & assets handling WIP
* fbt: dist fixes
* fbt: moved SD card resources to owning apps
* unit_tests: moved resources to app folder
* github: updated unit_tests paths
* github: packaging fixes
* unit_tests: fixes
* fbt: assets: internal cleanup
* fbt: reworked assets handling
* github: unit_tests: reintroducing fixes
* minor cleanup
* fbt: naming changes to reflect private nature of scons tools
* fbt: resources: fixed dist archive paths
* docs: updated paths
* docs: updated more paths
* docs: included "resources" parameter in app manifest docs; updated assets readme
* updated gitignore for assets
* github: updated action versions
* unit_tests: restored timeout; scripts: assets: logging changes
* gh: don't upload desktop animations for unit test run

Co-authored-by: あく <alleteam@gmail.com>
2023-10-31 00:17:30 +09:00
あく
176fb21f5f Storage: speedup write_chunk cli command (#3173)
* Storage: speedup write_chunk cli command

* Storage: handle disconnect on write_chunk correctly
2023-10-30 18:51:51 +04:00
MX
593b5fc098 Merge branch 'ofw_dev' into nfcrefactoring 2023-10-29 02:23:02 +03:00
Augusto Zanellato
0fe93fcfa4 fix crash after st25tb save (#3170)
Co-authored-by: あく <alleteam@gmail.com>
2023-10-28 23:45:08 +09:00
Georgii Surkov
cfaf745523 [FL-3643] Fix crash when reading files > 64B (#3166)
* Increase MF DESFire result buffer
* Ignore chunks that do not fit into the result buffer and show warning
* Display information about partial files

Co-authored-by: あく <alleteam@gmail.com>
2023-10-28 23:29:14 +09:00
gornekich
3d872cf37a [FL-3637] NFC RC fixes (#3165)
* firmware: remove nfc lib build settings section
* furi hal nfc: fix nfc irq gpio deinit
* lib nfc: remove deprecated exception from sources
* nfc: use ASK demodulator in transparent mode
* mf ultralight: add upper page bound for NTAGI2C1K
* furi hal nfc: set event if nfc event was started
* nfc: fix PVS warnings
* lib signal reader: remove gpio pull setting in alloc
* furi: added math.h include for compatibility with existing apps
* nfc: remove resolved TODO in mf desfire poller
* bump api symbol version

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: あく <alleteam@gmail.com>
2023-10-28 23:22:07 +09:00
Georgii Surkov
844e0f10e5 [FL-3639] Fix MF DESFire record file handling (#3167) 2023-10-28 22:56:49 +09:00
MX
92969ecc1f remove mf classic uid add manually temp 2023-10-24 16:04:55 +03:00
MX
3bbb326c9c Merge branch 'ofw_dev' into nfcrefactoring 2023-10-24 14:42:49 +03:00
gornekich
d92b0a82cc NFC refactoring (#3050)
"A long time ago in a galaxy far, far away...." we started NFC subsystem refactoring.

Starring:

- @gornekich - NFC refactoring project lead, architect, senior developer
- @gsurkov - architect, senior developer
- @RebornedBrain - senior developer

Supporting roles:

- @skotopes, @DrZlo13, @hedger - general architecture advisors, code review
- @Astrrra, @doomwastaken, @Hellitron, @ImagineVagon333 - quality assurance

Special thanks:

@bettse, @pcunning, @nxv, @noproto, @AloneLiberty and everyone else who has been helping us all this time and contributing valuable knowledges, ideas and source code.
2023-10-24 12:08:09 +09:00
MX
ac5abdbb1d add new env var 2023-10-24 00:56:15 +03:00
MX
2958e5cef3 Merge branch 'ofw_dev' into dev 2023-10-23 21:40:52 +03:00
hedger
35c903494c [FL-3627, FL-3628, FL-3631] fbt: glob & git improvements (#3151)
* fbt: optional shallow submodule checkout
* fbt: more git threads by default
* fbt: git condition fix
* fbt: renamed FBT_SHALLOW to FBT_GIT_SUBMODULE_SHALLOW
* github: enabled   FBT_GIT_SUBMODULE_SHALLOW in flows
* fbt: always compile icons' .c, even if user does not specify a proper source glob; changed glob to require files at user-specified paths to exist
* fbt: fail build for missing imports in .faps
* fbt: moved STRICT_FAP_IMPORT_CHECK to commandline options; enabled by default
* ufbt: enabled STRICT_FAP_IMPORT_CHECK

Co-authored-by: あく <alleteam@gmail.com>
2023-10-23 18:55:36 +09:00
Sergey Gavrilov
1b6295b2bf [FL-3632] FastFAP: human readable error log (#3156) 2023-10-23 18:49:16 +09:00
MX
b93a06354f upd changelog 2023-10-17 23:41:23 +03:00
MX
2d9090b2de fix niceflors 2023-10-17 22:15:42 +03:00
MMX
e5b079f4ce Merge pull request #620 from G2Dolphin/niceflors
Added NiceFloR-S to ignore options, removed colons.
2023-10-17 03:51:22 +03:00
MX
1e5223c6ab nice one is disabled too 2023-10-17 00:46:59 +03:00
MX
29a1865ec3 Merge branch 'dev' into niceflors 2023-10-16 18:07:51 +03:00
MX
8b8174b1b4 upd changelog 2023-10-16 06:05:55 +03:00
MX
53245986ab Remove migration, not needed anymore 2023-10-16 05:29:23 +03:00
MX
b44bc718be SubGHz: Add 4 more systems to add manually (untested!!!)
if you have remotes from these systems please share captures, also try binding flipper as new remote in current condition
2023-10-16 05:28:47 +03:00
MX
8e3378b7b9 SubGHz: add manually fixes 2023-10-16 05:06:40 +03:00
MX
9e90948fc3 RGB: Fix white color on reboot, move settings, add custom color options 2023-10-16 05:01:42 +03:00
MX
b87a8ca329 Merge branch 'ofw_dev' into dev 2023-10-15 01:30:55 +03:00
Astra
e664159188 [FL-3621] Fix double arrows and add proper indication (#3146)
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-10-13 05:48:16 +09:00
Derek Jamison
9d6352e92f fix #3141: 12-bits is 0xFFF (or 0xFF0) CAME/NICE 12-bit (#3142)
* 12-bits is 0xFFF (or 0xFF0)
* Mask with 0x7FFFF3FC for 850LM pairing

Co-authored-by: あく <alleteam@gmail.com>
2023-10-13 05:39:14 +09:00
あく
f45a5dff43 Fix various crashes if debug libraries used (#3144)
* FuriHal: enable HSI in stop mode only if we use STOP0, proper SMPS selected clock assert

* Furi: fix double crash caused by bkpt use outside of debug session

* Libs: update ERC and MGG contrast

* Fix various crashes with LIB_DEBUG=1

* BadUsb: size_t where it should be and proper printf types

* Various fixes and make PVS happy

* FuriHal: proper CCID status and make PVS happy

* boot: update mode: graceful handling of corrupted stage file

---------

Co-authored-by: hedger <hedger@nanode.su>
2023-10-12 20:34:30 +04:00
MX
130fa43ad6 update changelog 2023-10-11 01:25:36 +03:00
MX
76e5a1c087 Merge branch 'ofw_dev' into dev 2023-10-09 22:21:49 +03:00
h00die
38792f2c93 Fix spelling across some project files (#3128)
* codespell across project

Co-authored-by: あく <alleteam@gmail.com>
2023-10-10 04:01:17 +09:00
Filipe Paz Rodrigues
4308a5e377 CCID: Support PC To Reader Transfer Block data (#3126)
* CCID: Support PC To Reader Transfer Block data
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
2023-10-10 03:48:37 +09:00
あく
65a56cdb4a Firmware: bigger thread name storage. Notification app: better BacklightEnforce edge cases handling. (#3137) 2023-10-09 21:55:38 +04:00
あく
fbded1e4ee Lib: update stm32wb_copro to 1.17.3 release (#3119)
* Lib: update stm32wb_copro to 1.17.3 release
* Bump copro versions
* Lib: switch stm32_copro to release
2023-10-09 22:03:27 +09:00
hedger
4ae9a02efa FuriHal ble: length fix for fw version prop (#3136)
* hal ble: length fix for fw version prop
* hal ble: dev_info char: setting data after setup is done
* api: storage: enabled storage_file_sync
2023-10-09 21:53:20 +09:00
MX
2c3b5ca43d Revert "Temp fix for older iOS v9-14 HID support"
This reverts commit 016abe3273.
2023-10-09 15:44:37 +03:00
MX
b51b8eb843 here too 2023-10-09 02:24:18 +03:00
MX
40552e6837 and this one too 2023-10-09 02:22:03 +03:00
MX
9960328d3e fix linebreaks 2023-10-09 02:20:20 +03:00
MX
3ac6aef6cf Add FAQ 2023-10-09 02:14:50 +03:00
MX
700cee3766 lower even more due to nfc small free ram issues 2023-10-08 22:37:44 +03:00
MX
c1363a18cc Merge branch 'ofw_dev' into dev 2023-10-08 11:43:16 +03:00
MX
016abe3273 Temp fix for older iOS v9-14 HID support
TODO: Fix it properly
2023-10-08 11:42:56 +03:00
MX
5bf5826c88 disable sorting if more than 300 files are in current folder
fixes current out of memory crash
2023-10-08 11:39:47 +03:00
Skorpionm
62a4c0dd03 [Documentation]: add documentation SubGhz Bin_RAW file format (#3133)
* [Documentation]: add documentation SubGhz Bin_RAW file format
* [Documentation]: fix error

Co-authored-by: あく <alleteam@gmail.com>
2023-10-06 16:20:32 +09:00
hedger
d47e5ca520 fbt: glob improvements (#3117)
* fbt: glob improvements, now treats entries with no special glob chars as files by default, not calling scons' globbing for them
* fbt: further fixes for glob
* fbt: less strict existence checks
* fbt: fixed frame_rate collection; typo fixes & comments

Co-authored-by: あく <alleteam@gmail.com>
2023-10-06 16:11:02 +09:00
Astra
699078d5a5 [FL-3576] HEX input UI improvements (#3112)
Co-authored-by: あく <alleteam@gmail.com>
2023-10-06 15:15:26 +09:00
Soren
8ebfda6b8c Added NiceFloR-S to ignore options, removed colons. 2023-10-03 17:56:39 +03:00
MMX
e7ea821650 Merge pull request #612 from baugp/t5577-write-pwd-fix
bugfix t5577_write_with_pass
2023-10-03 09:14:11 +03:00
MMX
0c2c74ae21 Merge pull request #619 from amec0e/dev
Updated infrared assets
2023-10-03 09:13:33 +03:00
Max Andreev
9898a5d0dd Enable PVS Studio license check (#3122) 2023-10-02 18:51:41 +09:00
amec0e
09f86f24fd Update audio.ir
No new additions
2023-10-01 16:07:21 +01:00
amec0e
57aa5e1620 Update fans.ir
New additions
2023-10-01 16:06:38 +01:00
amec0e
ef01355297 Update projectors.ir
New additions + Fix
2023-10-01 16:06:14 +01:00
amec0e
14c0572368 Update tv.ir
New additons
2023-10-01 16:05:19 +01:00
MX
50aaacd30d Merge branch 'ofw_dev' into dev 2023-09-30 23:42:42 +03:00
MX
2f44fd6cac nice flor s add button code 0x3 2023-09-30 23:41:54 +03:00
あく
c924693a84 Ble: fix null-ptr dereference in bt_change_profile (#3110) 2023-09-26 14:09:17 +10:00
Piyamate Wisanuvej
e739aeeb10 bugfix t5577_write_with_pass 2023-09-26 10:08:40 +07:00
MX
5031540a8f sync anims 2023-09-25 16:53:46 +03:00
MX
fc1ec55a40 Merge branch 'ofw_dev' into dev 2023-09-25 16:53:05 +03:00
Astra
a6bb9698ef [FL-3609] Add the coding in the shell animation (#3106)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-25 17:03:51 +09:00
あく
63d7d46bd3 FuriHal,BleGlue: prevent sleep while HCI command executed, proper bt api rpc locking. Fixes random system lockups. (#3107) 2023-09-25 09:12:12 +04:00
hedger
e1030e7999 fbt: reworked tool path handling (#3105)
* fbt: removed absolute paths from env setup; moved abs paths to cdb tool
* fbt: moved tool lookup to cdb emitter
* fbt: cdb: quote only tools with spaces in path
* typo fix
* fbt: pvs: suppress license expiration warning
2023-09-25 14:04:34 +09:00
MMX
8d1a4a5c69 Merge pull request #607 from amec0e/dev
Updated infrared assets
2023-09-23 00:01:15 +03:00
MX
cc5607d66f include totp cli plugins 2023-09-22 23:45:47 +03:00
MX
8666cdc5ef Merge branch 'ofw_dev' into dev 2023-09-21 22:43:48 +03:00
MX
286dbfaf0b Revert "Revert "Revert "temp remove before release"""
This reverts commit 4368ff4294.
2023-09-21 22:40:14 +03:00
MX
bf8357ee52 Revert "Testing hid without LED descr"
This reverts commit f7f9250e55.
2023-09-21 22:39:57 +03:00
あく
b98631c633 Gui: handle view port lockup and notify developer about it (#3102)
* Gui: handle view port lockup and notify developer about it

* Gui: fix more viewport deadlock cases and add proper notification
2023-09-21 18:34:48 +04:00
hedger
1891d54baf [FL-3600] Added fal_embedded parameter for PLUGIN apps (#3083)
* fbt, ufbt: added `fal_embedded` parameter for PLIGIN apps, to embed them into .fap
* fbt: fixed dependency settings for assets
* fbt: extapps: Removed unneeded casts
* fbt: extapps: code simplification
* fbt: fal_embedded: fixed dependency relations

Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 21:56:00 +09:00
hedger
b80dfbe0c5 github: fixed grep arg for RC builds (#3093)
* github: fixed grep arg for RC builds
* scripts: fbt: checking for .git existence, not for it being a dir

Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 18:44:55 +09:00
Robin Gareus
a73a83f04d IR Universal Audio Remote: Amend 98d4309 -NAD Amp (#2954) (#3092)
The original PR was cut short

Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 18:36:46 +09:00
Astra
3fbb9f24f8 [FL-3583] Fix multiline aligned text going out of bounds (again) (#3084)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 18:29:28 +09:00
Filipe Paz Rodrigues
a089aeb2bd Add Initial CCID support (#3048)
* Add Initial CCID support
* Sync api symbols
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 18:09:00 +09:00
Astra
182c8defb1 [FL-3458] Add confirmation before exiting USB-UART (#3043)
* Add confirmation before exiting USB-UART
* Redo the confirm view to be a scene to ignore the back button

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 17:06:45 +09:00
agarof
f46018b204 Add extended I2C HAL functions (#3037)
* Add extended I2C HAL functions
* Rename I2CEndClockStretch to I2CEndAwaitRestart
* Address review comments
* Update f18 api_symbols.csv
* FuriHal: check input values in cortex timer
* FuriHal: cleanup I2C documentation
* Properly bump api symbols
* FuriHal: fix incorrect cast in I2C write_reg methods, fix spelling and naming
* FuriHal: cleanup const usage in I2C, sync declaration and implementation
* Format Sources
* FuriHal: more i2c docs
* Add I2C Restart and Pause / Resume test
* Add I2C auto-reload test
* UnitTests: skip furi_hal_i2c_ext_eeprom if eeprom is not connected
* UnitTest: cleanup subghz test output
* FuriHal: classic timeouts in i2c

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-09-21 16:54:25 +09:00
MX
f7f9250e55 Testing hid without LED descr 2023-09-19 17:45:34 +03:00
hedger
70b8823eb8 experimental key size change 2023-09-19 17:36:12 +03:00
MX
8f5ea2be83 Merge branch 'ofw_dev' into dev 2023-09-19 17:27:48 +03:00
MX
abe0e34ace Merge branch 'blegatt_refactor_merge' into dev 2023-09-19 17:27:33 +03:00
MX
1f485be6e8 Merge branch 'dev' into blegatt_refactor_merge 2023-09-19 17:27:18 +03:00
MX
4368ff4294 Revert "Revert "temp remove before release""
This reverts commit 6a2adf69e6.
2023-09-19 17:23:21 +03:00
あく
338fc3afea New clock switch schema, fixes random core2 crashes (#3008)
* Updated stack to 1.17.0

* hal: ble: Fixed stack config

* Bumped stack version in config

* scripts: added validation of copro stack version in update bundles

* Copro: update to 1.17.2

* FuriHal: adjust tick frequency for HSE as sys clk

* FuriHal: adjust systick reload on sys clock change

* Sync api and format sources

* scripts: updated ob.data for newer stack

* FuriHal: return core2 hse pll transition on deep sleep

* FuriHal: cleanup ble glue

* FuriHal: rework ble glue, allow shci_send in critical section

* FuriHal: sync api symbols

* FuriHal: cleanup BLE glue, remove unused garbage and duplicate declarations

* FuriHal: BLE glue cleanup, 2nd iteration

* FuriHal: hide tick drift reports under FURI_HAL_OS_DEBUG

* Lib: sync stm32wb_copro with latest dev

* FuriHal: ble-glue, slightly less editable device name and duplicate definition cleanup

* FuriHal: update ble config options, enable some optimizations and ext adv

* FuriHal: update clock switch method documentation

* FuriHal: better SNBRSA bug workaround fix

* FuriHal: complete comment about tick skew

* FuriHal: proper condition in clock hsi2hse transition

* FuriHal: move PLL start to hse2pll routine, fix lockup caused by core2 switching to HSE before us

* FuriHal: explicit HSE start before switch

* FuriHal: fix documentation and move flash latency change to later stage, remove duplicate LL_RCC_SetRFWKPClockSource call

---------

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-09-19 18:22:21 +04:00
MX
fdc39f8473 Merge branch 'ofw_dev' into dev 2023-09-15 17:52:23 +03:00
amec0e
931f4464c2 Update projectors.ir
Temporary power fix
2023-09-14 20:12:14 +01:00
amec0e
5901720681 Update fans.ir
1 New addition
2023-09-14 20:10:48 +01:00
amec0e
e68ee9b47c Update audio.ir
No new additions
2023-09-14 20:09:40 +01:00
amec0e
ee24e4eb48 Update tv.ir
No new additions
2023-09-14 20:09:21 +01:00
Skorpionm
25af13e998 SubGhz: Fix CLI subghz chat (#3073)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-14 18:27:01 +09:00
Max Andreev
ac892f3d03 Fix DMA SPI memory increment define (#3075) 2023-09-14 18:15:20 +09:00
MX
4d3a3070e4 Merge branch 'dev' into blegatt_refactor_merge 2023-09-12 19:20:03 +03:00
MX
6a2adf69e6 Revert "temp remove before release"
This reverts commit 19ca956e7c.
2023-09-12 19:00:25 +03:00
MX
19ca956e7c temp remove before release 2023-09-12 18:59:12 +03:00
MX
1530c2b4f1 update changelog 2023-09-12 18:56:15 +03:00
hedger
f0f2a6c11f github: typo fix (#3070)
* github: typo fix
* github: sdk action: added validation for action inputs
* github: sdk action: 10+ rcs
2023-09-12 18:24:44 +09:00
hedger
8bfa9898e3 github: final fixes for SDK publishing (#3069)
* Fixes 4 fixes 4 fixes
* gh: proper step naming
* github: Restored SDK processing logic
2023-09-12 10:20:45 +09:00
MX
953a747b1a make text more centered 2023-09-12 01:18:50 +03:00
MX
8835ef3598 move things 2023-09-12 00:42:34 +03:00
MX
cbc5d61ab7 princeton and varitemlist ui fixes 2023-09-11 23:57:17 +03:00
MX
e8210cd94d fix 2023-09-11 22:27:27 +03:00
MX
b6ff400587 update changelog 2023-09-11 20:47:11 +03:00
hedger
91813831c6 github: specified shell for SDK submission action (#3068) 2023-09-12 01:36:13 +09:00
hedger
c657eb8a40 github: potential fix for compact builds (#3067)
* github: potential fix for compact builds
* github: explicit build mode
2023-09-12 01:18:04 +09:00
MX
091210c003 ofw upds 2023-09-11 18:51:14 +03:00
MX
d4cad7b8c6 add refactor things back 2023-09-11 18:39:38 +03:00
MX
5949d7be1c Merge branch 'ofw_dev' into dev 2023-09-11 18:38:13 +03:00
Skorpionm
ac3bd337a1 [FL-3589] Sub-GHz: incorrect key parsing crash (#3066) 2023-09-12 00:30:16 +09:00
MX
f09d364e95 update subghz remote 2023-09-11 17:18:00 +03:00
MX
7f474ed9c6 Ignore princeton option and fix typo magellan 2023-09-11 17:03:17 +03:00
MX
04c914d945 fix typo 2023-09-11 16:55:08 +03:00
MX
93ae4db35a moved into codeql yml 2023-09-11 16:41:30 +03:00
MMX
2db719f35c Create codeql.yml 2023-09-11 16:40:47 +03:00
MMX
e36b87ddd9 Merge pull request #600 from DarkFlippers/readme_update
Readme: instructions block systematized & cleanup
2023-09-11 16:38:44 +03:00
MMX
1c360ae110 Merge pull request #599 from derskythe/ci/codeql-code-scan
[FEAT] add workflow to automatic CodeQL Code scanning
2023-09-11 16:38:34 +03:00
MMX
44140caa2d Merge pull request #590 from derskythe/feat/subghz-save-hopping-state
[FEAT] Save hopping state in SubGHz
2023-09-11 16:38:21 +03:00
hedger
15894235a9 [FL-3596] fbt: added FW_CFG_<name> with build configuration (#3062) 2023-09-11 22:34:41 +09:00
DerSkythe
fae8d91880 Revert "fix: version-check.yml and build-with-firmwware.yml"
This reverts commit c3d2a1f243.
2023-09-11 16:23:15 +03:00
MX
78446bab07 Merge branch 'dev' into feat/subghz-save-hopping-state 2023-09-11 16:22:35 +03:00
MX
84e94e728c update comment 2023-09-11 15:32:55 +03:00
MX
b2042fd044 loader merge fixes 2023-09-11 15:31:11 +03:00
MX
67a681f8b8 no apps :( 2023-09-11 15:29:43 +03:00
MX
eb2607f308 Merge branch 'ofw_dev' into dev 2023-09-11 15:26:26 +03:00
あく
9f6fc6fe79 Snake: fix deadlock caused by use of view_port_update while locking model (#3063) 2023-09-11 21:08:09 +09:00
gid9798
226e300a16 Readme: fix typo & small fixes 2023-09-11 13:56:50 +03:00
hedger
77d6c41914 github: submit SDKs to prod & dev (#3060)
* github: submit SDKs to prod & dev
* github: increased limit of queried SDKs

Co-authored-by: あく <alleteam@gmail.com>
2023-09-11 19:51:03 +09:00
gid9798
d49246048d Readme: instructions block systematized & cleanup 2023-09-11 13:08:09 +03:00
Sergey Gavrilov
4705812d24 SD-Card: proper HAL (#3058)
* Storage: remove unused error from SDInfo
* FatFS: remove sd_spi_io
* HAL: sd card api
* Update: use sd hal
* FatFS: use sd hal
* Storage: use sd hal
* API: sd hal
* Fix TODO workflow
* SD Hal: Fix source buffer overflow
* fix for fix!
* HAL: cleanup sd detection api
* HAL: FURI_HAL_SD_SPI_DEBUG flag
* HAL: FuriHalSdStatus -> FuriStatus
* API: downgrade
* Change define logic
* HAL: presence
2023-09-11 18:30:56 +09:00
あく
1c0276a0be Various Fixes and Improvements (#3059)
* FuriHal: lower MGG display contrast by 4 points
* FuriHal: unify external gpio resources initialization
* Infrared: parse raw in universal TV file, cleanup it with new ifrared script. Other minor changes.
* Gui: fix elements_multiline_text_aligned eating symbols
* Lib: human readable errors in flipper application package
* Special request from marketing team
2023-09-11 16:23:00 +10:00
MX
abc4110198 Fix random deadlocks in various plugins
thanks Willy-JL for finding details of that issue
2023-09-10 03:45:50 +03:00
DerSkythe
99ba1b6a24 feat: add workflow to automatic CodeQL Code scanning 2023-09-10 03:44:40 +04:00
DerSkythe
1fec80a533 feat: add RX config option "Reset to default" 2023-09-10 02:35:27 +04:00
DerSkythe
53fffffd1b Merge remote-tracking branch 'upstream/dev' into feat/subghz-save-hopping-state
# Conflicts:
#	applications/main/subghz/scenes/subghz_scene_receiver.c
2023-09-09 22:41:08 +04:00
MX
a90ebd7b53 Update changelog 2023-09-08 15:53:15 +03:00
MX
b1b35e87f9 update readme, docs, fix build versions 2023-09-07 14:46:06 +03:00
MX
1df2fc035f New bt beacon api
by Willy-JL
2023-09-07 13:45:37 +03:00
MX
45fd5ef9d8 Subghz fix path reset on save name exit 2023-09-05 19:28:47 +03:00
hedger
dfd5233760 github: don't cancel jobs if parallel ones failed (#3044) 2023-09-05 18:17:16 +04:00
MX
cfa95c757e Merge branch 'ofw_dev' into dev 2023-09-05 16:32:16 +03:00
Astra
600b2ce627 [FL-3566] iButton: Return to the file selection if file is corrupted (#3040)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-05 22:24:50 +09:00
MX
fdb9748acc Merge branch 'ofw_dev' into dev 2023-09-05 16:22:49 +03:00
MX
d40f664342 API for BLE Beacon app
thanks to Willy-JL
2023-09-05 16:22:14 +03:00
Astra
8cbb757533 [FL-3583]Account for the "-" in line carry-over (#3038)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-05 22:13:50 +09:00
hedger
452e27b05e github: workflow improvements (#3032)
* github: compact build: status reporting step
* github: build: matrix strategy
* debugging
* github: added version_token to /uploadfiles request
* github: reworked main build flow
* github: suppressed non-zero cp status
* github: build: fixed comment lookup; experimental changes to apps build order
* github: removed summary step for compact builds; united map analyzer steps
* fbt: added get_apiversion target; moved ext apps processing logic to AppBuildset
* ufbt: added missing global
* fbt: Moved incompatible app list to firmware config output
* fbt: cleaner extapps processing
* github: build: added automation for SDK publishing
2023-09-05 20:49:39 +09:00
MX
b3cce2351a Some faac fixes 2023-09-05 14:40:49 +03:00
MX
1859b06b6a oops 2023-09-05 05:59:21 +03:00
MX
1653abe0ef Remove unused table 2023-09-05 05:51:21 +03:00
MMX
c7b2e85e13 Merge pull request #585 from Eng1n33r/dev
FAAC SLH better UI/UX.
2023-09-05 05:45:24 +03:00
MX
b24fba6ad7 just in case 2023-09-05 05:44:09 +03:00
MX
ffc6f726f0 fix small bug 2023-09-05 05:43:06 +03:00
MX
0eb06ba2b7 Actually working progmode, new add manually options + bonus fixes 2023-09-05 05:31:03 +03:00
Eng1n33r
2a789ae1c1 faac beta-3 2023-09-04 23:55:08 +03:00
Eng1n33r
062faa4a84 Merge branch 'DarkFlippers:dev' into dev 2023-09-04 23:19:53 +03:00
MX
1cafa9a46b Fix naming var 2023-09-04 23:15:23 +03:00
MX
654b3245c2 fix module p2 2023-09-04 23:14:07 +03:00
MX
99eb10d6e7 fix module p1 2023-09-04 23:11:40 +03:00
Eng1n33r
e878ed7547 Merge branch 'DarkFlippers:dev' into dev 2023-09-04 22:52:42 +03:00
MMX
ac4177c248 Merge pull request #592 from DarkFlippers/subghz_remote_submodule
SubGHz Remote: submodule
2023-09-04 22:42:21 +03:00
MX
e6f9563bbc Merge branch 'dev' into eng_dev 2023-09-04 22:40:50 +03:00
MX
2b383ebcee Keyboard ok to toggle select all in cursor mode
by Willy-JL
2023-09-04 21:19:35 +03:00
Eng1n33r
cfc5caca63 Merge branch 'DarkFlippers:dev' into dev 2023-09-04 20:50:46 +03:00
MX
9c6e20356f Merge branch 'ofw-dev' into dev 2023-09-04 16:47:08 +03:00
Sergey Gavrilov
0b806c2360 Storage: force mount (#3033)
* Storage: count opened files
* Storage: sd mount
* Storage: prompt to mount SD card if not mounted
* F18: update API
* F18: update API version
* Fix logger naming scheme
* Storage: storage_files_count -> storage_open_files_count

Co-authored-by: あく <alleteam@gmail.com>
2023-09-04 14:10:07 +09:00
Linn Dahlgren
ce89240f6f [DOC] Remove defunct link in ReadMe.md (#3036) 2023-09-04 12:37:12 +09:00
Eng1n33r
686fab7296 Merge remote-tracking branch 'origin/dev' into dev
faac prg mode beta-2
2023-09-02 22:04:36 +03:00
MX
7d2deb5939 add some non working code 2023-09-02 21:45:51 +03:00
Eng1n33r
06a528f497 FAAC SLH prog mode [beta] 2023-09-02 19:00:45 +03:00
MX
265d2592e7 proper check 2023-09-02 16:26:19 +03:00
MX
72e6f5f59e fix 2023-09-02 16:02:32 +03:00
MX
3898e6e71d Fixes and de-kostilying 2023-09-02 16:00:24 +03:00
MX
17269a5386 Merge remote-tracking branch 'Eng1n33r/dev' into eng_dev 2023-09-02 15:59:51 +03:00
Eng1n33r
a2bcf67f7f Merge remote-tracking branch 'DarkFlippers/dev' into dev 2023-09-02 15:22:21 +03:00
MX
bd2cfb55df Merge branch 'dev' into eng_dev 2023-09-02 14:28:49 +03:00
MMX
0c7689831e Merge pull request #594 from amec0e/dev
Updated Infrared Assets
2023-09-02 14:27:08 +03:00
MX
ec9df8711a fmt + fix subrem 2023-09-02 14:26:32 +03:00
MX
15c480b68a Merge branch 'ofw-dev' into dev 2023-09-02 13:33:32 +03:00
amec0e
a8456208da Update tv.ir
New additions
2023-09-01 22:36:42 +01:00
amec0e
7ecd5684cb Update projectors.ir
New additions
2023-09-01 22:36:21 +01:00
amec0e
832d861b9d Update fans.ir
New additions
2023-09-01 22:35:58 +01:00
amec0e
7a0c896626 Update audio.ir
New additions
2023-09-01 22:35:31 +01:00
Max
52b5966262 Add File Naming setting for more detailed naming (#3002)
* added filename mode setting
* added furi_flag checks for when filename_mode is set
* changed naming for ibutton, lfrfid and subghz
* requested changes from PR
* Lib: gather all naming bits and pieces under name generator module. Properly bump api version. FuriHal: fix RTC flag enum.
* PR requested changes
* bug fix for arg type
* added functionality for other application scenes
* Lib: cleanup name generator API, simplify usage. Sync API symbols.
* Lib: proper size type in name_generator. Cleanup.
* FuriHal: cleanup rtc api usage across firmware

Co-authored-by: あく <alleteam@gmail.com>
2023-09-01 14:57:49 +09:00
Astra
e5fdb2e069 [FL-3314] Disconnect from BLE on protobuf error (#2955)
* Disconnect from BLE on protobuf error
* Set profile instead of disconnecting and add logging

Co-authored-by: あく <alleteam@gmail.com>
2023-09-01 13:54:12 +09:00
hedger
5eeb672dd4 github: workflow trigger optimizations (#3030) 2023-09-01 12:09:48 +09:00
suaveolent
d8d2b360cb Add support for Mifare Classic 4k SAK 0x38 ATQA 0x02, 0x04, 0x08 (#3009)
Co-authored-by: suaveolent <suaveolent@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-09-01 11:22:29 +09:00
あく
7531e18020 Move roadmap link to readme (#3014)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-09-01 06:00:40 +04:00
あく
f218c41d83 Undo some TODO (#3024)
* TODO FL-3497: impossible to fix with current memory allocator

* TODO FL-3497: removed, requires radically different settings approach

* TODO FL-3514: removed, yes we should

* TODO FL-3498: implemented, guarding view port access with mutex.

* TODO FL-3515: removed, questionable but ok

* TODO FL-3510: removed, comment added

* TODO FL-3500: refactored, store pin numbers in GpioPinRecord, fix gpio app crash caused by incorrect gpio_pins traversal.

* Format Sources

* TODO FL-3505: removed, mutex alone is not going to fix issue with WPAN architecture

* TODO FL-3506: removed, change ownership by copy is good

* TODO FL-3519: documentation and link to source added

* Lib: remove unneded total sum from comment in bq27220

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-09-01 05:54:52 +04:00
Astra
7aa55ebc6c [FL-3543] Check the filetype of the update manifest (#3025)
Co-authored-by: あく <alleteam@gmail.com>
2023-09-01 10:47:02 +09:00
Sergey Gavrilov
809418b9da [FL-3563] StorageListRequest: size filter (#3018)
* Protobuf: size filter
* Update protobuf
* Scripts: types for fwflash.py
* RPC: handle fliter for StorageListRequest
* RPC: StorageListRequest tests for filtering
* Fix unit tests configuration
* Assets: sync protobuf with upstream

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-09-01 10:23:37 +09:00
Eng1n33r
b91f8d009e Fix KL unknown mf cnt bug 2023-08-31 22:39:22 +03:00
Skorpionm
aa1c1fd905 [FL-3582] SubGhz: heap overflow text error (#3021) 2023-08-29 20:55:36 +09:00
gid9798
cb5c5c08f6 SubGHz Remote: submodule 2023-08-29 13:37:15 +03:00
Astra
c6be6f487a [FL-3495] Remove the TODO for GPIO settings save/load (#3015)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-29 13:39:34 +09:00
gornekich
5eb045e25f nfc: add rfal wrong state error handling (#3017) 2023-08-29 13:31:40 +09:00
Eng1n33r
04b2771e3b Merge branch 'DarkFlippers:dev' into dev 2023-08-28 13:23:07 +03:00
MX
5bd868665e fix timer icons in ir remote
icons by @Svaarich
2023-08-28 05:50:32 +03:00
MX
46e74b3823 remake fix in ofw way
view_dispatcher will skip on _run and free will be called, then app will exit same as normal
2023-08-28 05:48:40 +03:00
Eng1n33r
a772408ee6 Good Monday
[SubGhz / RadioSettings] More flexible rolling counter rate;
Remove unused stuff & small UI revisal
2023-08-28 00:02:48 +03:00
DerSkythe
7b4d66f0f4 change: add another icon for a BinRAW receiver mode 2023-08-27 04:04:22 +04:00
MX
416a02fc5b Merge branch 'ofw-dev' into dev 2023-08-27 02:43:56 +03:00
あく
cf74dd2599 Rfid: fix crash on broken key launch from archive (#3012) 2023-08-25 21:00:00 +04:00
Astra
66d26c16cd [FL-3580] AC OFF button (#3010)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-26 01:09:40 +09:00
hedger
c3aa151712 github: Check for todos (#3011) 2023-08-25 23:38:41 +09:00
DerSkythe
c3d2a1f243 fix: version-check.yml and build-with-firmwware.yml 2023-08-25 08:16:22 +04:00
DerSkythe
3491844d41 change: add defines to disable load saved preset value and binary RAW
add: icon for BinRAW mode in Read screen
2023-08-25 07:48:04 +04:00
DerSkythe
9ef1a4dfaa change: add measure loading to SubGHz 2023-08-25 06:32:31 +04:00
Eng1n33r
ce1336c0ed fix anomaly 2023-08-24 22:14:00 +03:00
Eng1n33r
32fb94f5db Cnt value edit [in progress] 2023-08-24 19:23:05 +03:00
DerSkythe
f53246d40b Merge remote-tracking branch 'origin/feat/subghz-save-hopping-state' into feat/subghz-save-hopping-state 2023-08-24 17:20:30 +04:00
DerSkythe
d1f1635dd2 Merge branch 'DarkFlippers:dev' into feat/subghz-save-hopping-state 2023-08-24 17:17:35 +04:00
Eng1n33r
f93aab9b22 Merge branch 'DarkFlippers:dev' into dev 2023-08-24 16:03:07 +03:00
MX
742c4ae834 added patreon link 2023-08-24 04:51:44 +03:00
MX
6609a64307 Remake custom universal remotes to use new design
New icons by @Svaarich
2023-08-24 03:31:42 +03:00
Eng1n33r
09aabff55b EditCnt rework [in progress] 2023-08-24 00:00:28 +03:00
MX
0660329ae5 Merge branch 'ofw-dev' into dev 2023-08-23 23:47:03 +03:00
MX
b5426197f5 fix 0xFFFF counter value being skipped 2023-08-23 23:40:13 +03:00
Skorpionm
940ec36a0b SubGhz: fix todo (#2984)
* [FL-3501] SubGhz: fix Handle multiple external cc1101 modules
* [FL-3502] SubGhz: fix Protocol not found error message
* [FL-3503] SubGhz: fix Handle rx buffer overflow
* {FL-3520] SubGhz: Handle RX buffer overflow with external cc1101
* [FL-3548] SubGhz: Security+ 2.0 counter start value
* [FL-3552] Sub-GHz: Check saved file
* [FL-3555] [FL-3554] Sub-GHz: RX buffer overflow handling and check that buffer has been properly written
* [FL-3557] Sub-GHz: No optimization required
* [FL-3558] Sub-GHz: Keeloq 0 discriminator
* [FL-3559] Sub-GHz: Keeloq unknown learning
* [FL-3560] Sub-GHz: callback for updating keeloq data on display
* SubGhz: fix RXFIFO_OVERFLOW

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-24 04:51:32 +09:00
Astra
60182aa2cd [FL-3564] New IR universal remote graphics (#3006)
* New IR universal remote layout
* Remove redundant checks

Co-authored-by: あく <alleteam@gmail.com>
2023-08-24 03:24:47 +09:00
hedger
56b5b35236 Intelligent probing with warnings for fwflash.py (#3005)
* scripts: fwflash: intelligent probing with warnings
* scripts: fwflash: better texting

Co-authored-by: あく <alleteam@gmail.com>
2023-08-24 03:04:12 +09:00
Nikolay Minaylov
b368660d48 More apps moved to apps repo (#2978)
* Clock, music player, snake game removed
* Music player, picopass assets removed

Co-authored-by: あく <alleteam@gmail.com>
2023-08-24 02:50:17 +09:00
Eng1n33r
091d32ed7a Merge branch 'DarkFlippers:dev' into dev 2023-08-23 20:35:41 +03:00
MX
52654d018e picopass assets moved into app 2023-08-23 20:09:29 +03:00
MX
8df9947d42 Merge branch 'ofw-dev' into dev 2023-08-23 19:49:00 +03:00
あく
d808884b97 FuriHal: explicitly pull display pins at early init stage, move PUPD config to early stage (#3004)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-08-23 20:17:39 +04:00
Eng1n33r
6042254861 Merge branch 'DarkFlippers:dev' into dev 2023-08-23 17:59:56 +03:00
Synthethics
beeeb9bbdc Update tv.ir (#2942)
* Update tv.ir: Added VOX Electronics LED 43ADS316B TV Remote.
* Assets: reorder and tag new tv remote
* Assets: cleanup infrared universal tv

Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 22:50:19 +09:00
Konstantin Volkov
4ade0fc76d [FL-3421] Unit bench: multiple attempts to find flipper (#2960)
* Unit bench: added retry count for finding flipper for reboot/reboot2dfu and power off scripts. Changed returns to sys.exit() since scripts are being used standalone
* fixed typo in await flipper and changed debug level to info for searching flipper in power.py
* reversed return operator instead of sys.exit, changed app.py exit behavior
* test run to see if exit(1) fails the run
* reversed test changes, fixed flipper name and increased await flipper timeout
* await after flash increase
* increased serial timeout
* increased serial timeout, apparently it is for entire run

Co-authored-by: doomwastaken <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 21:51:02 +09:00
Nikolay Minaylov
15f92f765d [FL-3479] Desktop: more favorites, configurable dummy mode (#2972)
* Desktop: more favorite app shortcuts
* Making PVS happy
* Desktop settings submenu fix

Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 21:26:47 +09:00
MX
821f03b230 Merge branch 'ofw-dev' into dev 2023-08-23 15:08:54 +03:00
MX
ad723217e6 fix subghz loading 2023-08-23 15:08:29 +03:00
Eng1n33r
df5b2cbddd fix misspelling 2023-08-22 23:58:49 +03:00
Dzhos Oleksii
dc7517e5fd Fix display last symbol in multiline text (#2967)
* Revert submodules
* Compare without round
* Gui: slightly more integer logic in elements_get_max_chars_to_fit

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 04:15:38 +09:00
MX
20593d56c0 Merge branch 'ofw-dev' into dev 2023-08-22 21:53:50 +03:00
Astra
27b2808ade [FL-3481] Properly reset the NFC device data (#2980)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 03:40:05 +09:00
hedger
ace0901125 [FL-3486,FL-3392] fbt: various improvements and bug fixes (#2982)
* fbt: extapps: compact debug format for .faps
* fbt: sdk: fixed symbol cache regen logic for removed-only symbols
* lib: elf_file: early .fap file handle release
* fbt: extapps: added FAP_VERSION define for application environments
* github: added appsymbols artifact
* api: updates for f18
* github: fixed early fap_dist
* fbt: added flash_dap
* ufbt: added flash_dap
* fbt: reworked flash target; scripts: program.py->fwflash.py and changes
* vscode: updated configuration
* scripts: fwflash.py: ugly fixes for ufbt
* scripts: fwflash.py: cleanup
* fbt: flash: always use .elf file
* scripts: fwflash: fixed elf file path

Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 03:33:10 +09:00
Nikolay Minaylov
991e58e405 Littlefs updated to v2.7.0 (#2986)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 03:08:58 +09:00
Astra
e353433cd8 [FL-3488] Assign tickets to all TODO items (#2988)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 02:56:27 +09:00
hedger
200c44bdca loader: restored support for debug apps (#2993)
* fbt: restored loader support for debug apps (no GUI tho)
* desktop: fixed code for handling autorun apps
* loader: fixed autorun app messing up last update stage
* Loader: handle status without message

Co-authored-by: あく <alleteam@gmail.com>
2023-08-23 02:38:45 +09:00
Eng1n33r
67a0136e81 microfix 2023-08-22 20:33:36 +03:00
Eng1n33r
2b5ad4f5af Correct counter work. FAAC SLH bugfix. 2023-08-22 20:22:49 +03:00
hedger
35cdefa1ca Removed explicit dependency on scons for external scripting (#2999) 2023-08-23 02:11:53 +09:00
Eng1n33r
f14ed73dfd Merge branch 'DarkFlippers:dev' into dev 2023-08-21 23:22:46 +03:00
MX
9bf1433334 fix non capital letters 2023-08-21 22:09:40 +03:00
MX
35c413b8a6 remove duplicate discord invite 2023-08-21 22:07:32 +03:00
MMX
34712b0c3b Merge pull request #586 from DarkFlippers/readme_and_changelog
Readme & Changelog fixes
2023-08-21 22:04:10 +03:00
gid9798
486542fe14 Readme - community links
Changelog - version table
2023-08-21 22:01:11 +03:00
Eng1n33r
69debc36a0 FAAC SLH 0x0 seed new "smart logic"
Comeback
2023-08-21 04:18:47 +03:00
Eng1n33r
2fabb0b589 Merge branch 'DarkFlippers:dev' into dev 2023-08-20 16:33:27 +03:00
MMX
c05a766651 Merge pull request #583 from OperKH/fix-sub-ghz-remote
Fix Sub-GHz Remote folder name
2023-08-20 16:03:43 +03:00
Aleksandr Zhytnyk
ac9234563a Fix Sub-GHz Remote folder name 2023-08-20 12:24:49 +03:00
Eng1n33r
b07b6dc857 Merge branch 'DarkFlippers:dev' into dev 2023-08-20 11:54:42 +03:00
MX
c70edf6dc9 update changelog and settings naming 2023-08-20 05:34:54 +03:00
MX
8a3d8bdee7 out of memory message 2023-08-20 04:21:09 +03:00
Eng1n33r
535bf35e23 Merge branch 'DarkFlippers:dev' into dev 2023-08-20 01:44:08 +03:00
MMX
362aa68038 Merge pull request #581 from amec0e/dev
Updated Infrared Assets Pack
2023-08-20 01:33:31 +03:00
MMX
f17b941f7d Merge pull request #578 from DarkFlippers/desktop_favorite_port
Desktop favorite port
2023-08-20 01:32:36 +03:00
MX
830eb0e5f6 Merge branch 'dev' into desktop_favorite_port 2023-08-19 23:34:08 +03:00
amec0e
38607d8dbe Update tv.ir
No new additions
2023-08-19 20:02:23 +01:00
amec0e
fe095df06a Update projectors.ir
New additions
2023-08-19 20:01:49 +01:00
amec0e
d728c140d8 Update fans.ir
New additions
2023-08-19 20:01:22 +01:00
amec0e
4f6fd2e9bc Update audio.ir
No new additions
2023-08-19 20:00:47 +01:00
DerSkythe
e7c52828ea Merge pull request #10 from derskythe/dev-master
Sync
2023-08-19 08:30:37 +04:00
DerSkythe
fea15bedd4 Merge branch 'feat/subghz-save-hopping-state' into dev-master
Signed-off-by: DerSkythe <31771569+derskythe@users.noreply.github.com>
2023-08-19 08:30:28 +04:00
Eng1n33r
d7a579e713 Merge branch 'DarkFlippers:dev' into dev 2023-08-19 00:08:09 +03:00
MX
26e5ae7476 RXFIFO_OVERFLOW still breaks esubghz_chat 2023-08-18 23:50:38 +03:00
Eng1n33r
2458cb2b96 Allow 0x0 seed for testing 2023-08-18 22:35:13 +03:00
Eng1n33r
3da9cb1b81 Merge remote-tracking branch 'origin/dev' into dev 2023-08-18 22:01:40 +03:00
MX
5924c3dd2c disable 0 seed in add manually 2023-08-18 21:04:59 +03:00
Eng1n33r
5cfc8fc536 Merge remote-tracking branch 'origin/dev' into dev 2023-08-18 21:01:12 +03:00
SkorP
03d3482357 SubGhz: fix RXFIFO_OVERFLOW 2023-08-18 17:14:50 +03:00
Eng1n33r
0af8bd1e8b Test FAAC 0x0 seed 2023-08-18 16:41:35 +03:00
gid9798
6330012b1d Desktop: fix lock timer after rebooting 2023-08-18 11:27:12 +03:00
gid9798
b1b00d4fa7 Desktop favorites: Return none and add lock in dummy 2023-08-18 11:23:35 +03:00
MX
7a80aaa5c8 readme fixes part 1
thanks @gid9798
2023-08-17 19:04:09 +03:00
MX
3584e0da46 Fix FAAC counter fix seed being not removed from RAM 2023-08-17 17:33:21 +03:00
SkorP
e1c83692c3 [FL-3552] Sub-GHz: Check saved file 2023-08-17 16:02:39 +03:00
MX
3507c89dbb fix faac add manually cnt 2023-08-17 16:02:32 +03:00
SkorP
6e2bcd9d00 {FL-3520] SubGhz: Handle RX buffer overflow with external cc1101 2023-08-17 14:43:53 +03:00
gid9798
f73f369952 Desktop favorites pt2 2023-08-17 13:40:55 +03:00
gid9798
3990c93013 Desktop favorites pt1 2023-08-17 13:04:40 +03:00
MX
4d5a900352 fix again 2023-08-17 04:44:17 +03:00
MX
e830dc1636 hotfix builds 2023-08-17 04:35:10 +03:00
MX
2d6bd46326 fix links 2023-08-17 04:21:05 +03:00
MX
0805754589 fix typo 2023-08-17 04:03:16 +03:00
MX
d627b53510 update changelog 2023-08-17 04:02:45 +03:00
MMX
69cabfb496 Merge pull request #577 from Leptopt1los/dev
ac.ir: Legion LE-F30RH-IN added
2023-08-17 04:01:23 +03:00
leptoptilos
b235c8abe9 ac.ir: Legion LE-F30RH-IN added 2023-08-17 09:53:40 +09:00
MX
0934b3f791 fix later 2023-08-17 03:24:14 +03:00
MX
fec80da3f4 subghz - fix check, fix typos
temporarily replace with internal check, commented code in function added TODO comment
2023-08-17 03:01:40 +03:00
MX
e892c977f3 Merge remote-tracking branch 'flipperdevices/subghz/fix_todo' into dev 2023-08-17 02:26:21 +03:00
MX
15ac511dea Merge branch 'ofw-dev' into dev 2023-08-16 16:52:43 +03:00
あく
b90e2ca342 SubGhz: add timeout to subghz_hal_async_tx_test_run (#2975)
* SubGhz: add timeout to subghz_hal_async_tx_test_run

* Removed full API from unit_test build config

---------

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-08-16 13:16:42 +04:00
SkorP
aad06fdd43 SubGhz: fix PVS 2023-08-16 11:04:56 +04:00
SkorP
d4bc0cc10c [FL-3503] SubGhz: fix Handle rx buffer overflow 2023-08-16 10:57:48 +04:00
SkorP
0ecec8a711 [FL-3502] SubGhz: fix Protocol not found error message 2023-08-16 10:46:08 +04:00
SkorP
9d7396ee63 [FL-3501] SubGhz: fix Handle multiple external cc1101 modules 2023-08-16 10:17:21 +04:00
dogtopus
a7f0f5ad27 Improve vscode clangd experience (#2431)
* Improve vscode clangd experience

- Resolve and use absolute path for the toolchain. This allows clangd to use compile_commands.json file without running under fbtenv, simplifies setup for vscode clangd extension. As a side effect, a rebuild is needed to update compile_commands.json after moving the source tree.
- Add the recommended default settings of the extension to settings.json.

* Use build/latest for compile-commands-dir

This makes it behave closer to c-cpp-properties.

* Reformat crosscc.py

This is a PEP-8 violation but black seems to enforce it

* Bypass --query-driver

This has some security implications as it grants clangd the ability to execute any executables anywhere while trying to probe a compiler based on CDB. However it's very hard to do this the safe and intended way without resorting to config generation due to reason listed in #2431. Besides that we already have workspace trust so what could go wrong? ;)

* Add an option for vscode_dist to switch between clangd and cpptools

This will install different extensions.json tuned for either clangd or cpptools based on user selection. It will also install c_cpp_properties.json when using cpptools since clangd doesn't use this file.

The root .gitignore now also doesn't accidentally ignore everything under the .vscode directory.

* Use absolute path for .vscode gitignore

Turns out the previously used "relative" paths aren't even valid gitignore patterns and to actually do what it means one needs to use the absolute paths instead.

* Handle variable parsing in commandline.scons

commandline.scons is the place where all other command line parsing happens. Move LANG_SERVER variable parsing there and add a constraint to make the code more consistent.

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
2023-08-16 05:23:09 +04:00
MX
146ae8c3bf Do not crash with fatal error on wrong ir frequency
TODO: actually use infrared_signal_is_valid check!
2023-08-15 21:09:25 +03:00
MX
aeadaef7c9 remove old vars 2023-08-15 08:37:56 +03:00
MX
fb2c65721b fix somfy telis wrong frequency in add manually 2023-08-14 17:55:26 +03:00
Astra
830e202bb1 Properly reset the NFC device data 2023-08-14 17:49:09 +03:00
MMX
9e3868887c Merge pull request #574 from DarkFlippers/nfc_mfclassic_custom_uid
NFC app: MF Custom UID, fix SAK & ATQA save
2023-08-14 17:24:59 +03:00
gid9798
f18df25a96 NFC app: MF Custom UID, fix SAK & ATQA save 2023-08-14 15:33:03 +03:00
MX
7bd8846288 small fix for random uid 2023-08-14 03:52:22 +03:00
MMX
196edb5d05 Merge pull request #571 from DarkFlippers/nfc_mfclassic_custom_uid
NFC App: Add manual MF Classic custom UID
2023-08-14 03:11:20 +03:00
MX
8c0e0c78f2 fix missing upload 2023-08-13 22:27:48 +03:00
MX
71b610c87e update changelog 2023-08-13 04:51:59 +03:00
MX
4f148079d5 rgb patch color fixes 2023-08-13 04:51:33 +03:00
MX
80c0301316 update changelog, readme and sync anims 2023-08-13 03:53:09 +03:00
MX
4d772ed67e clean build - only main apps build 2023-08-13 03:12:19 +03:00
MX
ff17f33a36 testing dev build bundles 2023-08-13 01:24:00 +03:00
MX
9fb20438c7 remove wrong path 2023-08-12 21:39:47 +03:00
MX
28a05d8f6b finish moving apps 2023-08-12 04:47:18 +03:00
MX
773a5e382f remove base apps pack 2023-08-12 04:43:23 +03:00
MX
4164932044 remove 2023-08-11 23:23:06 +03:00
MX
751cb9f5d6 totp update 2023-08-11 23:20:38 +03:00
MX
8d8102b4f9 merge fixes 2023-08-11 18:24:51 +03:00
MX
4b81046b6f Merge branch 'ofw-dev' into dev 2023-08-11 18:08:12 +03:00
MX
f069cdb7e6 Merge branch 'ofw-dev' into dev 2023-08-11 18:01:50 +03:00
Sergey Gavrilov
43ba76a37f uFBT: devboard_flash to update WiFi devboard (#2969)
* uFBT: devboard_flash to update WiFi devboard
* uFBT: help
2023-08-11 17:56:27 +03:00
Sergey Gavrilov
3aad84aa70 FBT: devboard_flash to update WiFi devboard (#2968) 2023-08-11 17:56:13 +03:00
あく
dc2d12d468 Scripts: OB recovery (#2964)
* Scripts: OB recovery
* Scripts: slightly different ob
* Scripts: remove excessive return
* Scripts: simplifying work with registers
* Make PVS happy

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-08-11 17:56:02 +03:00
MX
09d5b3b1ed Expose additional functions of the crypto engine to user (#2923)
* Allow loading user supplied keys and add CTR mode
* Add GCM mode to furi_hal_crypto
* Split up CTR and GCM code, add flag for adv crypto
* Add convenience functions for GCM crypto
* Run fbt format
* Update GCM to support additional auth data
* Update APIs
* FuriHal: update crypto documentation, method names and usage
* Clean up code for key (un)loading, GCM and CTR
  - get rid of goto
  - do not use furi_hal_bt_is_alive() when not using secure enclave
  - give defines a type and wrap in ()
* Add unit test for CTR and GCM crypto
* FuriHal: const in crypto unit tests, cortex timer for crypto operations timeouts
* FuriHal: update crypto docs

Co-authored-by: twisted_pear <twstd@posteo.net>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-11 17:55:40 +03:00
47LeCoste
5f48968a05 BadUSB: qFlipper install script for MacOS (#2915)
* Create Install_qFlipper_macOS.txt
* BadUSB: qFlipper mac install routine improvements

Co-authored-by: あく <alleteam@gmail.com>
2023-08-11 17:54:32 +03:00
Hugo Blanc
3a36d5ea6d feat(infrared): add universal remote (#2818)
* feat(infrared): add universal remote
* fix: fix channel commands names

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-11 02:34:51 +09:00
Astra
12d9b1069c [FL-3480] Add the Sad song animation (#2973)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-11 01:31:01 +09:00
hedger
7178bd20cf ufbt: fixed FAP_SRC_DIR (#2970)
* fbt, ufbt: fixed "_appdir" internal property and FAP_SRC_DIR not working in ufbt environment
* fbt, ufbt: reworked CompileIcons(); added app's own root to app's #include path
* fbt: cleaner resolve_real_dir_node

Co-authored-by: あく <alleteam@gmail.com>
2023-08-11 01:21:56 +09:00
MMX
f75fcd4e34 UI: Clock on Desktop (#2891)
* Clock on desktop
* Gui: gui_active_view_port_count
* Gui: move gui_active_view_port_count to private header, update docs
* Desktop: simplify desktop clock code
* Desktop: refactor clock
* Desktop: optimize clock code
* Desktop: 3rd cleanup round
* Desktop: 4th cleanup round, missing bits and pieces

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-11 01:10:15 +09:00
Sergey Gavrilov
498aee20a2 uFBT: devboard_flash to update WiFi devboard (#2969)
* uFBT: devboard_flash to update WiFi devboard
* uFBT: help
2023-08-10 21:29:44 +09:00
gid9798
ee64a962d9 NFC App: Add scene for MF Classic custom UID 2023-08-10 14:48:42 +03:00
Sergey Gavrilov
c40e4ba01e FBT: devboard_flash to update WiFi devboard (#2968) 2023-08-10 18:53:12 +09:00
あく
2702c00ba4 Scripts: OB recovery (#2964)
* Scripts: OB recovery
* Scripts: slightly different ob
* Scripts: remove excessive return
* Scripts: simplifying work with registers
* Make PVS happy

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-08-10 19:45:17 +10:00
twisted-pear
c976ff11bf Expose additional functions of the crypto engine to user (#2923)
* Allow loading user supplied keys and add CTR mode
* Add GCM mode to furi_hal_crypto
* Split up CTR and GCM code, add flag for adv crypto
* Add convenience functions for GCM crypto
* Run fbt format
* Update GCM to support additional auth data
* Update APIs
* FuriHal: update crypto documentation, method names and usage
* Clean up code for key (un)loading, GCM and CTR
  - get rid of goto
  - do not use furi_hal_bt_is_alive() when not using secure enclave
  - give defines a type and wrap in ()
* Add unit test for CTR and GCM crypto
* FuriHal: const in crypto unit tests, cortex timer for crypto operations timeouts
* FuriHal: update crypto docs

Co-authored-by: twisted_pear <twstd@posteo.net>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-10 17:44:46 +09:00
Nikolay Minaylov
fb63e53d9a [FL-3435] External apps removed (#2934)
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-10 06:18:40 +09:00
47LeCoste
1078625775 BadUSB: qFlipper install script for MacOS (#2915)
* Create Install_qFlipper_macOS.txt
* BadUSB: qFlipper mac install routine improvements

Co-authored-by: あく <alleteam@gmail.com>
2023-08-10 06:10:04 +09:00
MX
7027f6a4c4 Merge branch 'ofw-dev' into dev 2023-08-09 15:05:12 +03:00
Astra
a39ef50fdb [FL-3433] Add compressor.h to the SDK (#2962) 2023-08-09 16:52:41 +09:00
Alexandre L
d9e931b7b7 fbt: Fix building using path with space (#2948)
* fbt: Fix building on Windows using path with space
* scripts: Fixed formatting

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
2023-08-09 04:46:07 +04:00
Robin Gareus
98d4309b61 IR Universal Audio Remote: add NAD C316BEE (#2954)
Remote control "NAD Amp1" https://nad.de/product/nad-c316bee-v2-vollverstaerker/

Co-authored-by: あく <alleteam@gmail.com>
2023-08-09 06:44:45 +09:00
Sergey Gavrilov
00cdc3d1cb [FL-3461] RPC: md5 in storage list (#2929)
* Protobuf: update
* Toolbox: md5 for file. Unit-Tests: test md5_calc.
* Storage RPC, CLI, unit tests: use new md5_calc
* Protobuf: update
* RPC, StorageList: append md5 info to file
* fbt: attempt to fix shallow submodule checkouts
* pvs: make happy
* Protobuf: update to latest release

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-09 06:34:54 +09:00
DerSkythe
5bbee02704 finalization of saving last settings
- Check loading of critical values in subghz_last_settings_log
- Change comparison of float type to safe
- Refactor
2023-08-08 17:31:46 +04:00
gid9798
8936c02487 NFC App: Add manual MF Classic custom UID 2023-08-08 14:16:35 +03:00
Derek Jamison
e9f1af44f2 Fixes #2957 - subghz decode_raw (#2958)
* Fixes #2957 - subghz decode_raw
* SubGhz: proper decode_raw fix

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-08 17:03:39 +09:00
Astra
ab006361cc Update the application catalog link in the readme (#2959) 2023-08-08 15:35:51 +09:00
DerSkythe
8c44dfb6af Save preset, RSSIm ignore values in last settings
- Save preset
- Save RSSI
- Save Ignore Starline, Cars, Magellan
- Fix types of COUNT_OF result
- Move subghz_set_default_preset to SubGhzTxRx
- In subghz_txrx_radio_device_is_tx_allowed check for SubGhzTxRxStateSleep is not working
2023-08-08 09:51:48 +04:00
DerSkythe
540862fbf2 Merge pull request #9 from derskythe/dev-master
Sync branch
2023-08-08 00:34:31 +04:00
Astra
1e4af1d550 FDX-B temperature in system units (#2941)
* FDX-B temperature now uses system units
* LF-RFID: wrap floats in fdx-b temperature conversion

Co-authored-by: あく <alleteam@gmail.com>
2023-08-07 19:28:47 +09:00
Nikolay Minaylov
4c771b66dc [FL-3471] Infrared: buttons move feature rework (#2949) 2023-08-07 18:18:46 +09:00
MX
20a6aa078c update changelog 2023-08-05 19:09:32 +03:00
MMX
3c298d7d83 Merge pull request #570 from amec0e/dev
Updated infrared assets
2023-08-05 18:41:07 +03:00
amec0e
e01e6f163c Update tv.ir
Updated last checked
2023-08-05 15:37:47 +01:00
amec0e
6f37f01b20 Update projectors.ir
Updated last checked
2023-08-05 15:36:45 +01:00
amec0e
d11fdca903 Update fans.ir
New additions
2023-08-05 15:36:21 +01:00
amec0e
e50cab3da1 Update audio.ir
Updated last checked
2023-08-05 15:35:47 +01:00
MX
49d2b31446 Add extra symbol, upd readme, upd codeowners 2023-08-05 15:25:06 +03:00
MX
c1438ce850 remove unused variable 2023-08-05 15:08:56 +03:00
MX
0f61a8eb46 upd changelog 2023-08-05 14:28:24 +03:00
MX
6ef1847e4d Merge remote-tracking branch 'origin/dev' into dev 2023-08-05 14:27:11 +03:00
MX
f70d2b5ae7 revert old nfc debug defines was used to save space 2023-08-05 14:25:16 +03:00
MMX
4951efff4d Merge pull request #569 from Leptopt1los/dev
ac.ir update
2023-08-05 14:19:00 +03:00
MX
07f6859a80 update changelog 2023-08-05 14:16:02 +03:00
MX
d30510f700 upd subbrute 2023-08-05 14:02:32 +03:00
nminaylov
becc8edd8c IR: buttons move feature rework 2023-08-05 14:00:57 +03:00
Astra
d09cf6c692 FDX-B temperature now uses system units 2023-08-05 14:00:48 +03:00
MX
afa7bd7f79 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-08-05 13:57:55 +03:00
leptoptilos
eb54fef384 ac.ir: Ghost samples deleted 2023-08-05 18:55:52 +09:00
leptoptilos
fe630362a8 ac.ir: Tosot deleted (duplicate) 2023-08-05 18:52:58 +09:00
leptoptilos
66deaad4f4 ac.ir: Modified LG General signal. 'Off' now becomes 'raw', Cool_lo set to 16 2023-08-05 18:44:47 +09:00
DerSkythe
500ca0758a Save hopping in last settings
- Save hopping state
- Add easy logging to SubGhzLastSettings
- Add to CLI alias 'l' for log command
- Fix misspelled names
2023-08-04 18:52:16 +04:00
MX
74ffb02b56 Merge branch 'ofw-dev' into dev 2023-08-02 19:09:48 +03:00
Lesha Lomalkin
c7648eb932 fbtenv: add additional environ variable to control execution flow (#2938)
* fbtenv: add flags FBT_PRESERVE_TAR, FBT_SKIP_CHECK_SOURCED for usage with external tools
* fbtenv: beautify, add info to fbtenv_print_config section if FBT_VERBOSE
* fbtenv: fixes

Co-authored-by: あく <alleteam@gmail.com>
2023-08-03 00:38:51 +09:00
erikj95
cf6706c42e NFC CLI: Fix multiple apdu commands from not working when one of them gives an empty response (#2922)
* NFC CLI: Fix multiple apdu commands from not working when one of them gives an empty response
* Make PVS happy

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-03 00:24:02 +09:00
AloneLiberty
a7aef0bfc2 NFC: Fix MFC key invalidation (#2912)
* NFC: Fix key invalidation (again~)
* NFC: shouldn't be there
This code get called each time we check for B key

Co-authored-by: あく <alleteam@gmail.com>
2023-08-03 00:06:38 +09:00
Astra
3e8e999909 [FL-3470] Rename Applications to Apps (#2939)
* Applications are now apps
* Desktop: Apps in settings

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-08-02 23:58:59 +09:00
MX
3a5ed704fd Merge branch 'ofw-dev' into dev 2023-08-02 16:09:16 +03:00
Andrey Zakharov
7a45db3881 Fix about screen (#2907)
* Fix about screen
* About: use COUNT_OF

Co-authored-by: Andrey Zakharov <andzhr@yandex.ru>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 14:19:00 +09:00
Skorpionm
9fd9dd85e3 SubGhz: change CC1101_ext TIM17 resolution to 2µs (#2909)
* SubGhz: change the operation of the TIM17 timer in CC1101_ext to 2µs
* SubGhz: remove special characters

Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 13:45:39 +09:00
minchogaydarov
313e9c3d89 Add Daikin FTXC35DV1B ac remote (#2913)
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 13:32:12 +09:00
Leopold
c72531edc6 change FuriThreadPriorityIsr to 31 (configMAX_PRIORITIES-1) (#2920)
* change FuriThreadPriorityIsr to 31 (configMAX_PRIORITIES-1)
* Furi: less hardcoded max priority, fix spelling
* Format sources

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 13:23:04 +09:00
Astra
035e447009 [FL-3462] External apps icounter (#2928)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 12:58:39 +09:00
plgcoder
be86b0f38a Overly missed feature: Infrared: move button (change button order in a remote) (#2894)
* Feature: Infrared: move button (change button order in a remote)
* little fix in furi_assert (case Move button to the end)
2023-08-02 12:43:36 +09:00
Astra
a677b2bcc2 [FL-3469] Move U2F path to ext (#2935)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 00:50:17 +09:00
hedger
17bcfee224 [FL-3441] faploader: always create app dir, even if it doesn't have subdirs (#2901)
Co-authored-by: あく <alleteam@gmail.com>
2023-08-02 00:43:14 +09:00
Astro
1536f7a643 Update audio.ir (#2897)
* Update audio.ir: added Panasonic SA-PM193 codes to universal remote
* Update audio.ir: added play/pause code as Pause button

Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 22:33:17 +09:00
Francis
67ca96ea96 Added French Canadian layout (#2896)
French Canadian layout for Windows

Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 18:45:39 +09:00
MMX
fe7a1c2fcc SubGHz - Keeloq: Read Centurion Nova remotes (#2892)
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 18:32:24 +09:00
MMX
aadb72af53 UI: New way to input bytes in byte_input (#2890)
* New byte input UI option
* Gui: reformat and cleanup byte_input docs, make PVS happy

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 18:09:30 +09:00
Dzhos Oleksii
68eb1ecebb [FL-3385] New RTC flags in device info (#2884)
* Add new rtc flags to device info
* FuriHal: bump info version
* Fix local
* Rework device info by hierarchy filtering

Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 17:20:30 +09:00
Nikolay Minaylov
a2a4fa8cda [FL-3408, FL-3429, FL-3430] Backlight notification fix (#2878)
* Notifications: display brightness override fix
* FuriHalVersionColor update
* float comparison fix

Co-authored-by: あく <alleteam@gmail.com>
2023-08-01 16:56:11 +09:00
MX
5d21da1737 fix 2023-07-31 01:21:17 +03:00
MMX
7413f707ed Merge pull request #564 from DarkFlippers/cc1101_power_amp
Init config for external radio driver
2023-07-31 00:25:32 +03:00
gid9798
c6b6aec057 replace power amp in driver 2023-07-30 12:12:59 +03:00
MX
c3f7a0d128 update changelog 2023-07-29 05:52:40 +03:00
MX
2c656f9c49 Update wifi marauder 2023-07-29 05:21:58 +03:00
MX
913efab179 Merge branch 'ofw-dev' into dev 2023-07-29 04:16:09 +03:00
MMX
03b950999c Merge pull request #562 from CodyTolene/ct/camera-suite-update
Update '[ESP32] Camera Suite' to v1.1.0
2023-07-29 04:15:21 +03:00
MMX
62e817f183 Merge pull request #559 from Z3BRO/dev
SubGHz External High Power
2023-07-29 04:14:34 +03:00
MX
0f9c6ba847 Remake it more properly
still has problems, need to rewrite subghz_devices tx/rx switch code, checking strcmp every time is not good too, but better than loading whole config from microsd
2023-07-29 03:51:46 +03:00
Cody Tolene
e698d6274f Update to match changes from here: https://github.com/flipperdevices/flipper-application-catalog/pull/90 2023-07-28 17:49:42 -05:00
Max Andreev
ff2e1acfdb Fix fbtenv restore (#2924) 2023-07-28 23:45:27 +04:00
Cody Tolene
d4ff1e3a50 Update '[ESP32] Camera Suite' to v1.1.0 2023-07-27 22:25:37 -05:00
Z3BRO
58beca313d SubGHz External High Power 2023-07-27 17:25:32 +02:00
MX
99b203e25c update changelog 2023-07-25 04:44:31 +03:00
MX
2446c5c02b Fix PR #557 issues and run fbt format 2023-07-25 04:37:34 +03:00
MMX
8e20aa6780 Merge pull request #557 from ALEEF02/analyzer-decoder
SubGHz Analyzer - Modulation switching
2023-07-25 04:34:51 +03:00
MX
6f40a06869 play pause buttons for universal projector remote 2023-07-25 04:25:57 +03:00
MX
8a249c48c5 fix daewoo 2023-07-25 04:19:37 +03:00
MMX
e686561c77 Merge pull request #556 from amec0e/dev
Updated infrared assets
2023-07-25 04:18:55 +03:00
MX
3fcf0da1ec just in case 2023-07-25 03:35:50 +03:00
ALEEF02
2c8ac7f775 Expand straggling 'mod' instances 2023-07-24 18:48:44 -04:00
ALEEF02
dbb1ab8693 Expand 'mod' to 'modulation' in all instances for consistency 2023-07-24 18:38:32 -04:00
ALEEF02
eed85f019c Typo fixes and cleanup 2023-07-24 18:34:40 -04:00
MX
f1a353d942 fix 5 plugins ui update 2023-07-25 00:11:56 +03:00
ALEEF02
9fa45850d2 Merge branch 'analyzer-decoder' of https://github.com/ALEEF02/unleashed-firmware-subghz-analyzer into analyzer-decoder 2023-07-24 17:11:11 -04:00
ALEEF02
2dc5d49be1 Add switching of modulations on long-press of OK 2023-07-24 17:08:44 -04:00
amec0e
8c3d648814 Update tv.ir
Added new Daewoo parsed codes
2023-07-24 21:02:57 +01:00
amec0e
5cfcbe1a2a Update projectors.ir
New additions
2023-07-24 21:01:18 +01:00
amec0e
73fc7146c8 Update fans.ir
New additions
2023-07-24 21:00:49 +01:00
amec0e
5d14f6048a Update audio.ir
New additions
2023-07-24 21:00:29 +01:00
amec0e
725d623855 Update ac.ir
New additions
2023-07-24 21:00:01 +01:00
MX
c447dc45f1 Temp fix for badbt on macOS 2023-07-24 14:24:03 +03:00
MX
14e44b6f88 Update totp 2023-07-24 13:47:44 +03:00
MX
a0f59f6094 update changelog 2023-07-24 01:47:57 +03:00
MX
bb4bd28fe1 Temp revert due to external module issues 2023-07-24 01:15:55 +03:00
MX
171e147a9d OFW PR 2907: Fix about screen
by andzhr
2023-07-24 00:31:53 +03:00
MX
7933bd9788 add xiaomi tv and daikin ac
daikin ac from ofw pr 2913 by
minchogaydarov
2023-07-24 00:13:56 +03:00
MX
b7b03f2108 Doom fixes and updates 2023-07-24 00:01:18 +03:00
MX
a7304bd9a8 upd spectrum desc 2023-07-22 21:04:04 +03:00
MX
9b88bda88b ufbt fixes subbrute 2023-07-22 20:56:33 +03:00
MX
823094bf79 ufbt fixes protoview 2023-07-22 20:48:20 +03:00
MMX
0470d681a2 Merge pull request #553 from ALEEF02/dev
SubGhz Analyzer PRECISE hstep fix
2023-07-22 20:30:56 +03:00
MX
5c5e68a5ce Update LightMeter 2023-07-22 20:30:21 +03:00
SkorP
0d84dceaae SubGhz: change the operation of the TIM17 timer in CC1101_ext to 2µs 2023-07-22 19:20:58 +03:00
AloneLiberty
b58be2bf1e NFC: Fix key invalidation (again~) 2023-07-22 19:20:49 +03:00
ALEEF02
27dc328614 Fix steps for PRECISE. Give ULTRANARROW #.# labels 2023-07-21 15:06:36 -04:00
Anthony Ford
8dc6a3c113 Merge pull request #1 from DarkFlippers/dev
Merge in Spectrum Analyzer changes
2023-07-20 18:02:43 -04:00
MX
906de7d9e7 fix PR #550 2023-07-20 22:00:49 +03:00
MX
3f08d861e9 fbt format 2023-07-20 21:54:36 +03:00
MMX
be358f98eb Merge pull request #550 from ALEEF02/spectrum-analyzer
Add a Precise mode
2023-07-20 21:54:03 +03:00
MX
9ec25a2681 fix issue #551 2023-07-20 21:53:02 +03:00
MMX
7d0c62f726 Merge pull request #552 from DarkFlippers/hid_app_KB_assets
Hid app kb assets
2023-07-20 21:50:34 +03:00
gid9798
2ab7548175 HID app: rename assets 2023-07-20 20:54:32 +03:00
gid9798
99d8164065 HID app: KB assets 2023-07-20 20:47:29 +03:00
ALEEF02
676c59cd31 Add a Precise mode 2023-07-19 21:55:36 -04:00
MX
0bb1e8902e replace fm15k with am_q modulation 2023-07-20 01:32:01 +03:00
MX
0b29fb4ffa Update changelog 2023-07-20 00:22:29 +03:00
MX
92b280291d barcode gen, embed files 2023-07-20 00:13:49 +03:00
hedger
9fa3375b0a faploader: always create app dir, even if it doesn't have subdirs 2023-07-20 00:09:06 +03:00
MX
0835124a02 subbrute updates 2023-07-19 21:14:13 +03:00
MX
44721727af Update changelog 2023-07-19 03:57:50 +03:00
MMX
80df63ce29 Merge pull request #549 from DarkFlippers/archive
Archive Cut/Copy/Past & NewDir
2023-07-19 03:54:29 +03:00
MX
3635a3b71f fix typo 2023-07-19 01:48:21 +03:00
gid9798
7d81d3bee0 Merge remote-tracking branch 'UFW/dev' into archive 2023-07-18 23:49:03 +03:00
gid9798
c0eebcb540 Archive: Cut/Copy/Past & NewDir 2023-07-18 23:46:28 +03:00
MX
3c32075919 add fbt format and clear to quick tasks 2023-07-18 22:55:46 +03:00
MX
2f532a547e Merge branch 'ofw-dev' into dev 2023-07-18 22:53:16 +03:00
あく
76e97b8d35 [FL-3051] Gauge initialization routine refactoring, new DataMemory layout, configuration update (#2887)
* FuriHal: refactor power gauge config

* Format sources and move gauge DM load to separate method

* FuriHal: bq27220 refactoring part 1

* Power: use SYSDWN battery status flag for system shutdown

* Libs: bq27220 read DM before write, fix incorrect shift

* FuriHal: cleanup gauge config, add flags, add ptr DM type, update symbols

* FuriHal: 2 stage gauge DM verification and update, better detection routine

* FuriHal: update gauge configuration, lower sleep current and deadband

* FuriHal: gauge and charger health reporting

* Lib: cleanup bq27220 sources

* FuriHal: correct documentation for furi_hal_power_is_shutdown_requested

* FuriHal: proper gauge config for f7
2023-07-18 14:46:38 +04:00
hedger
309f65e401 [FL-3437] fbt: build target for faps (#2888)
* fbt: added build target for faps. Usage: ./fbt build APPSRC=<appid>
* Updated docs & vscode config
* Code cleanup
2023-07-18 13:39:30 +04:00
MX
12f7edb56a Update changelog 2023-07-18 02:59:45 +03:00
MX
bb6d3cb796 NRF24 plugins updates
Updates by Sil333033 with some changes, furi_hal speaker direct calls was removed and replaced with notification service to avoid bypassing of user set silent mode
2023-07-18 02:53:30 +03:00
MX
e2028eb731 Fix menu 2023-07-17 22:12:34 +03:00
MX
6870304a73 Move subghz into internal memory
we have no free ram :((((
2023-07-17 20:37:30 +03:00
MX
2c8350818c Merge branch 'ofw-dev' into dev 2023-07-17 20:33:26 +03:00
Dzhos Oleksii
9bb04832a8 IButton: on delete scene key name not fully display if so long (#2882)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-17 12:03:27 +04:00
hedger
20f6394ad8 [FL-3431] Radio headers in SDK (#2881) 2023-07-17 11:51:15 +04:00
gid9798
da919372e2 Archive separate menu 2023-07-16 20:28:15 +03:00
MMX
3ad10aaa48 Merge pull request #546 from amec0e/dev
Update ac.ir
2023-07-14 18:52:00 +03:00
amec0e
6afbd97d81 Update ac.ir
Renamed a few entries, added compatibility comment and added new Shivaki captures to ensure swing was and is off
2023-07-14 16:23:20 +01:00
MX
bb9ba09b6d update docs 2023-07-14 17:53:32 +03:00
MMX
b663726576 Merge pull request #545 from DarkFlippers/subrem_app
SubRem app Improvement
2023-07-14 17:11:09 +03:00
MX
635c824b1b Merge branch 'ofw-dev' into dev 2023-07-14 16:53:45 +03:00
MX
d74dc11775 Add extra symbols for nfc maker and wifi marauder keyboard 2023-07-14 16:52:51 +03:00
hedger
f2324e4d1c [FL-3377] Update error code descriptions (#2875)
* updater: added update error code descriptions
* updater: separate ram/flash messages
* updater: extra pre-update checks
* updater: fixed string comparison
* updater: Additional logging

Co-authored-by: あく <alleteam@gmail.com>
2023-07-14 17:45:16 +04:00
MX
61a66c52c6 Revert "merge changes"
This reverts commit f998948623.
2023-07-14 16:39:07 +03:00
DEXV
af64ae0e40 Badusb: Ducky script to auto install qFlipper (#2346)
* Badusb:Script to auto install/update qFlipper
* Update Install_qFlipper_windows.txt
2023-07-14 16:43:13 +04:00
gid9798
8e2371d0c9 SubRem: small fix 2023-07-14 14:28:46 +03:00
gid9798
b3810ec573 SubRem: archive browser 2023-07-14 14:16:37 +03:00
gid9798
f49cad314e SubRem: swap apps 2023-07-14 12:59:58 +03:00
gid9798
521ef5659f SubRem Configurator: add TX 2023-07-14 12:28:09 +03:00
Nikolay Minaylov
e073c603a4 [FL-3334] Storage: explosive rename fix (#2876)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-14 13:16:22 +04:00
MX
523f522de0 revert archive fixes temporarily 2023-07-14 04:40:22 +03:00
MX
dd26ec22c3 remove all possible leftovers 2023-07-14 04:08:20 +03:00
MX
fe95845fa0 trying to find where issue is hiding 2023-07-14 04:06:15 +03:00
MX
52c30f50ec update changelog and readme 2023-07-14 03:07:35 +03:00
MX
0a45cba2bf Update NFC Maker
by Willy-JL
2023-07-14 01:18:35 +03:00
MX
af23870d3b make multi_fuzzer submodule 2023-07-13 23:54:50 +03:00
MX
090a912f93 remove 2023-07-13 23:53:46 +03:00
MX
ec588935b5 fbt format 2023-07-13 23:33:40 +03:00
MX
fd778be03c Update lightmeter 2023-07-13 23:32:41 +03:00
MMX
0cbbe1ac0a Merge pull request #544 from amec0e/dev
Updated Infrared Assets
2023-07-13 23:24:49 +03:00
MX
3f7337cd13 cleanup to automerge 2023-07-13 23:24:38 +03:00
MMX
53b27e18c3 Merge pull request #543 from DarkFlippers/submenu_fix_vertical
GUI module: SubMenu fix vertical orientation
2023-07-13 23:23:19 +03:00
MX
015350c692 fix 2023-07-13 23:22:55 +03:00
MX
65bbaca380 Merge branch 'ofw-dev' into dev 2023-07-13 22:40:35 +03:00
amec0e
705d6265d1 Update ac.ir
New captures for Tosot and Chigo (fixed swing on) and Added LG PC07SQR
2023-07-13 18:37:04 +01:00
amec0e
d64d797bcc Update fans.ir
New additions
2023-07-13 18:35:12 +01:00
amec0e
59d56186aa Update projectors.ir
Updated last checked
2023-07-13 18:33:54 +01:00
amec0e
34abfcb454 Update tv.ir
Updated last checked
2023-07-13 18:33:26 +01:00
amec0e
a7b3f9df4c Update audio.ir
New additions
2023-07-13 18:32:54 +01:00
Andrey Zakharov
6605740ce9 Add LG A/C IR signals to universal remote (#2871)
Co-authored-by: Andrey Zakharov <andzhr@yandex.ru>
Co-authored-by: あく <alleteam@gmail.com>
2023-07-13 16:09:04 +04:00
Sergey Gavrilov
8dc1edac18 Loader: good looking error messages (#2873)
* Loader: special error for unknown external app
* Loader: update special error
* Loader: beautify GUI errors, remove redundant logs
* Loader: fix gui error vertical position
* Desktop settings: add external menu apps
* Desktop: smaller settings struct and fix incorrect behavior with ext apps

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-07-13 16:02:59 +04:00
あく
b55d97f827 Desktop,Cli: add uptime info (#2874) 2023-07-13 21:02:08 +10:00
gid9798
d3c0fbef3b GUI module: SubMenu fix vertical orientation 2023-07-13 13:31:01 +03:00
MX
ea357b8eaf upd ofw anims list 2023-07-13 12:48:26 +03:00
MX
f998948623 merge changes 2023-07-12 21:23:49 +03:00
MX
c4b04a06bb Merge branch 'ofw-dev' into dev 2023-07-12 21:19:16 +03:00
Nikolay Minaylov
92c0baa461 [FL-3383, FL-3413] Archive and file browser fixes (#2862)
* File browser: flickering and reload fixes
* The same for archive browser
2023-07-12 20:35:11 +04:00
あく
a4b4802897 Revert "[FL-3420] Storage: directory sort (#2850)" (#2868)
This reverts commit 136114890f.
2023-07-12 21:02:52 +10:00
Sergey Gavrilov
dcb49c540f [FL-3422] Loader: exit animation fix (#2860)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-12 13:49:17 +04:00
Skorpionm
25ec09c7eb SubGhz: fix check connect cc1101_ext (#2857)
* SubGhz: fix check connect cc1101_ext
* SubGhz: fix syntax
* SubGhz: enable interface pin pullups
* SubGhz: fix syntax
* SubGhz: fix CLI check connect CC1101_ext
* SubGhz: fix CLI display of the selected device

Co-authored-by: あく <alleteam@gmail.com>
2023-07-12 13:41:46 +04:00
AloneLiberty
bf15d3ce74 NFC: Improved MFC emulation on some readers (#2825)
* NFC: Improved MFC emulation on some readers
* NFC: Improved emulation on some readers (part 2): Some Android devices don't like this
* NFC: Improved emulation on some readers (part 3): I knew that during the emulation timings are critical, but one log breaks all...
* NFC: Improved emulation on some readers (part 4): Add fixes to Detect reader and refactor code
* NFC: Improved emulation on some readers (part 5)
* NFC: Improved emulation on some readers (part 6): GUI doesn't update without delay
* NFC: Improved emulation on some readers (part 7): Reworked emulation flow, some bug fixes and improvements


Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2023-07-12 13:14:11 +04:00
あく
b1e13d44b8 Dolphin: add new animation (#2865) 2023-07-12 12:28:51 +04:00
Max Andreev
a319a6fdf2 Update toolchain to v23 (#2824)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-11 19:36:15 +04:00
Nikita Vostokov
b7d2fe769c Decode only supported Oregon 3 sensor (#2829)
Co-authored-by: wosk <nikita.vostokov@auriga.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-07-11 18:26:18 +04:00
MX
4a2cae23ca Merge branch 'ofw-dev' into dev 2023-07-11 15:49:01 +03:00
MX
4ccfd5ba63 add app in readme 2023-07-11 14:56:05 +03:00
MX
8ab3308553 fbt format for subbrute 2023-07-11 14:54:30 +03:00
MX
b41ffd887d Fix naming, run fbt format 2023-07-11 14:53:54 +03:00
MMX
44baa84cf6 Merge pull request #541 from CodyTolene/camera-suite
Add Camera Suite GPIO application for the ESP32-CAM module.
2023-07-11 14:52:14 +03:00
Astra
8bccfd6fd8 [FL-3363] More descriptive error messages for the log command (#2835)
* More descriptive error messages for the log command
* Log level description improvements
* Log help changes

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-07-11 15:41:16 +04:00
MX
bc0722fe25 upd nfc maker / badusb fixes
by @Willy-JL
2023-07-11 13:40:46 +03:00
MX
9d98724dcb Merge branch 'ofw-dev' into dev 2023-07-11 13:31:59 +03:00
MMX
14fc960246 Infrared: RCA protocol support (#2823)
* RCA protocol support
* Add unit test

Co-authored-by: あく <alleteam@gmail.com>
2023-07-11 12:39:07 +04:00
Sergey Gavrilov
136114890f [FL-3420] Storage: directory sort (#2850)
* Storage: sort_data holder in file structure
* Storage: sort directory if it possible
* make pvs happy
* Storage: fail sorting if there is no more space for realloc
* Storage: case insensitive sorting.

Co-authored-by: あく <alleteam@gmail.com>
2023-07-11 11:29:45 +04:00
Cody Tolene
978fecf242 Add Camera Suite GPIO application for the ESP32-CAM module. 2023-07-11 00:06:55 -05:00
MX
e7439272e6 Update mifare nested 2023-07-11 03:46:12 +03:00
MX
5a6c168b68 ext module fix 2023-07-11 00:09:10 +03:00
MMX
640fd92d3b Merge pull request #539 from DarkFlippers/fix_subrem
SubRem app: UPD txrx
2023-07-10 23:52:37 +03:00
gid9798
73737fb94a SubRem app: UPD txrx 2023-07-10 23:50:56 +03:00
MX
342c7dc5b5 upd subbrute 2023-07-10 23:31:38 +03:00
MMX
8e0029586b Merge pull request #536 from gid9798/cc1101_ext_protoview
ProtoView: cc1101 ext
2023-07-10 23:29:27 +03:00
MX
9a7d5189d8 Merge branch 'dev' into cc1101_ext_protoview 2023-07-10 23:29:06 +03:00
MMX
88391c8392 Merge pull request #535 from gid9798/cc1101_ext_pocsag
POCSAG Pager: cc1101 ext
2023-07-10 23:26:41 +03:00
MX
1e8a58c224 Merge branch 'dev' into cc1101_ext_pocsag 2023-07-10 23:17:46 +03:00
MMX
f91a73159f Merge pull request #534 from gid9798/cc1101_ext
Cc1101 ext
2023-07-10 23:16:30 +03:00
MX
5897b8278b api 2023-07-10 22:46:57 +03:00
MX
9f9664f6ca Merge branch 'dev' into cc1101_ext 2023-07-10 22:44:17 +03:00
MMX
171fd947e9 Merge pull request #537 from DarkFlippers/external_main
Fix merge external main
2023-07-10 22:43:31 +03:00
gid9798
0e1a54141e Fix SubGhz Apps & LF RFID 2023-07-10 19:59:25 +03:00
MX
76ddb5de76 Merge branch 'dev' into cc1101_ext 2023-07-10 17:23:30 +03:00
MX
5398fb806e move last apps into microsd 2023-07-10 17:21:49 +03:00
MX
dab2e6e39c remove debug pack for now, fw should fit in debug 2023-07-10 17:10:43 +03:00
MX
5fa0706d70 Merge branch 'dev' into cc1101_ext 2023-07-10 17:04:53 +03:00
MX
bb7ffd6ff5 Merge branch 'ofw-dev' into dev 2023-07-10 16:55:28 +03:00
MX
9c6d0e7f21 fbt format 2023-07-10 16:52:58 +03:00
MX
b451fa91de Update wifi marauder app 2023-07-10 16:52:12 +03:00
MX
e56b970eb4 update mifare nested 2023-07-10 16:48:18 +03:00
Sergey Gavrilov
9b2d80d6b7 [FL-3400] External menu apps (#2849)
* FBT, applications: add MENUEXTERNAL app type
* FBT, uFBT: build MENUEXTERNAL as EXTERNAL app
* Loader menu: show external menu apps
* LFRFID: move to sd card
* FBT: always build External Applications list
* Archive: look for external apps path
* Infrared: move to sd card
* Apps: add "start" apps
* iButton: move to sd card
* BadUSB: move to sd card
* External apps: update icons
* GPIO: move to sd card
* Loader: look for external apps path
* U2F: move to sd
* SubGHz: move to sd
* Apps: "on_start" metapackage
* NFC: move to sd
* Sync f7 and f18

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-07-10 12:03:41 +04:00
minchogaydarov
4736fa876d Add Hitachi RAK-50PEB universal ac remote (#2826)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-10 11:04:53 +04:00
Astra
0195f8bf00 [FL-3350] Device Info update (#2840)
* Update F18 version info
* Certification info for F18

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-07-10 10:48:00 +04:00
Dusan Hlavaty
b148e396d7 feat(infrared): add TCL TV remote (#2853)
Adds a TCL TV remote to the universal remotes list. Tested with TCL 55C815 television
2023-07-10 10:22:30 +04:00
MX
27259c0cff update changelog 2023-07-09 00:58:46 +03:00
MX
8369f72afb move app 2023-07-08 19:52:25 +03:00
MX
0109361fe9 nfc maker - add keyboard 2023-07-08 19:52:04 +03:00
gid9798
64732d25fc Merge remote-tracking branch 'priv_dark/cc1101_ext' into cc1101_ext_protoview 2023-07-08 17:20:38 +03:00
gid9798
3fad9a2437 Merge branch 'cc1101_ext' into cc1101_ext_pocsag 2023-07-08 17:14:57 +03:00
gid9798
9494cc01a9 Merge remote-tracking branch 'UFW/dev' into cc1101_ext 2023-07-07 15:45:59 +03:00
MX
7e14f997e7 Update changelog 2023-07-06 19:41:07 +03:00
MX
3f4887e8d3 Fix nfc maker includes 2023-07-06 19:28:29 +03:00
MX
2211314900 merge fixes 2023-07-06 18:58:34 +03:00
MX
49cce65018 Merge branch 'ofw-dev' into dev 2023-07-06 18:54:39 +03:00
MX
79bcd5a1c6 Jetpack joyride and NFC Maker apps 2023-07-06 18:44:45 +03:00
Skorpionm
cef59887ed [FL-3401, FL-3402] SubGhz: add "SubGhz test" external application and the ability to work "SubGhz" as an external application (#2851)
* [FL-3401] SubGhz:  add "SubGhz test" external application
* SubGhz: delete test test functionality from SubGhz app
* [FL-3402] SubGhz: move func protocol creation API

Co-authored-by: あく <alleteam@gmail.com>
2023-07-07 00:15:03 +09:00
MX
f81f4edad3 Fix loader hangup on exit if api mismatch happened 2023-07-06 17:42:18 +03:00
MX
55149f6d4c Move 2023-07-06 16:58:53 +03:00
MX
2c9ddd5a90 Merge branch 'ofw-dev' into dev 2023-07-06 16:54:10 +03:00
gid9798
dd2cad0c20 External radio driver in frequency analyzer & test carrier (#5)
* SubGhz App: add support ext_cc1101 in freq analyzer
* SubGhz App: add support ext_cc1101 in test_carrier
* SubGhz app: Deleted the temporary menu
2023-07-06 16:50:25 +03:00
gid9798
b1850fd700 Weather station: new external radio driver (#3)
* Weather station: new external radio driver
2023-07-06 16:23:48 +03:00
gid9798
cb08b84197 Spectrum analyzer: new ext radio driver (#2)
* Sub Analyzer app: UPD to new driver
* Sub Analyzer: fix working on start
2023-07-06 16:23:14 +03:00
Sergey Gavrilov
d8500510be API: explicitly add math.h (#2852)
* API: explicitly add math.h

* sync target api versions
2023-07-06 15:49:53 +04:00
gid9798
2be6e330eb Protoview: new ext_cc1101 driver 2023-07-06 10:19:58 +03:00
MX
1a283cde3e Update changelog 2023-07-06 03:03:10 +03:00
MX
a6978bfd2d WIP OFW PR 2825: NFC: Improved MFC emulation on some readers
Not finished yet, added in current condition for more tests
by AloneLiberty
2023-07-06 02:44:28 +03:00
MX
d9b95fd156 Misc folder issues 2023-07-06 02:42:05 +03:00
MX
45f3a77548 barcodes 2023-07-06 02:26:56 +03:00
MX
cebc56dc23 move 2023-07-06 02:07:07 +03:00
MX
0f5fc11f8f Dbg stuff 2023-07-06 01:20:09 +03:00
MX
4876e03932 OFW PR 2829: Decode only supported Oregon 3 sensor
by wosk
2023-07-06 01:14:41 +03:00
MX
e83764ef4e RCA protocol unit test 2023-07-06 01:09:32 +03:00
MX
e6ae2c03ca Keeloq: Centurion Nova support 2023-07-06 00:49:54 +03:00
MX
550edc3666 Fix Issue #532 2023-07-05 20:35:57 +03:00
MX
ab6c1d0d8c format 2023-07-05 20:26:52 +03:00
MX
a9d4897dfb Update wifi marauder 2023-07-05 20:26:47 +03:00
MX
93acba9ae3 i2c tools update 2023-07-05 20:07:43 +03:00
MX
3d1d5f5b77 Merge branch 'ofw-dev' into dev 2023-07-05 20:03:20 +03:00
gornekich
e6b0494d4d [FL-3407] NFC: Mf Ultralight emulation optimization (#2847)
Co-authored-by: あく <alleteam@gmail.com>
2023-07-06 01:55:04 +09:00
Skorpionm
906cca8f24 Furi_Power: fix furi_hal_power_enable_otg (#2842)
* Furi_Power: fix furi_hal_power_enable_otg
* SubGhz: fix error output connected USB
* Furi_Hal: fix target F18
* Fix api_symbols.csv version for F7

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-07-06 01:48:02 +09:00
MX
94efd48cd0 categories again 2023-07-05 19:43:05 +03:00
MX
ad33162d81 Merge branch 'ofw-dev' into dev 2023-07-05 19:39:49 +03:00
あく
f3ae09cc16 FuriHal: allow nulling null isr (#2846)
* FuriHal: allow nulling null isr
* FuriHal: include interrupt priority 15 as allowed
* Furi: prevent compiler from optimizing arg in r0 of RESTORE_REGISTERS_AND_HALT_MCU
2023-07-06 01:39:17 +09:00
MX
f6d0b1d399 Change LED and volume settings by 5% steps
We discussed such change before with Svarich, but while I was busy with other stuff looks like this
Idea has been already implemented by cokyrain
So credits goes to cokyrain (github)
2023-07-05 19:33:27 +03:00
MX
0cff0d603e categories 2023-07-05 19:21:42 +03:00
MX
000bc845a8 Multiple Fixes
by hedger
2023-07-05 17:59:09 +03:00
MX
255830ffab FAAC ui and counter with no seed fixes 2023-07-05 17:56:08 +03:00
MX
c00d758c1b Merge branch 'ofw-dev' into dev 2023-07-05 17:31:47 +03:00
あく
97fbd84e08 FuriHal, Infrared, Protobuf: various fixes and improvements (#2845)
* Infrared: fix crash caused by null-ptr dereference in interrupt call. FuriHal: callback checks in interrupt handlers. Protobuf: bump to latest.

* DesktopSettings: allow application browser as favourite

* Format sources

* FuriHal: fix pvs warnings
2023-07-05 17:56:52 +04:00
MX
c7de6509bc Merge branch 'ofw-dev' into dev 2023-07-05 16:38:56 +03:00
Nikita Vostokov
0980424bb9 Revert "Fix name reset after bt apps exit"
This reverts commit ae545cdb09.
2023-07-05 16:31:33 +03:00
Nikita Vostokov
ae545cdb09 Fix name reset after bt apps exit 2023-07-05 15:09:47 +03:00
MX
bbbb371d35 fix typos 2023-07-05 14:51:22 +03:00
MX
9e67fe6794 BLE stuff
+ BadBT fixes by Willy-JL
2023-07-05 14:41:28 +03:00
Eric Betts
08bafc478e Picopass fix ice (#2836)
* Fix copypaste error
* Add iCE key to dictionary
* Write iCE key as elite, others with standard kdf

Co-authored-by: あく <alleteam@gmail.com>
2023-07-05 18:26:50 +09:00
MX
0af14d3f1d Merge branch 'ofw-dev' into dev 2023-07-04 14:09:09 +03:00
MX
d4300a10dd fix 2023-07-04 14:03:11 +03:00
Sergey Gavrilov
bb16997809 [FL-3398] Desktop settings: show icon and name for external applications (#2837) 2023-07-04 18:38:47 +09:00
gid9798
d208b69f42 subghz_playlist app: Upd external module init 2023-07-03 14:26:47 +03:00
gid9798
90ed11e5e1 subrem_configurator app: Upd TXRX 2023-07-03 14:16:43 +03:00
gid9798
2ef07a7a6c SubGhz: add some consts and fix unit tests 2023-07-03 14:02:57 +03:00
gid9798
01d7beef4e SubGhz: furi_hal_subghz remove preset load function by name 2023-07-03 13:36:26 +03:00
gid9798
0d6e6c4d85 SubGhz: fix split h and c 2023-07-03 12:48:47 +03:00
gid9798
2fb57529a0 SubGhz: fiz module seletion, furi_assert(device). drivers targets 2023-07-03 12:35:27 +03:00
gid9798
c1f056cf93 Merge remote-tracking branch 'UFW/dev' into cc1101_ext 2023-07-03 11:15:32 +03:00
MX
a9948003b1 починил 2023-07-02 19:02:26 +03:00
MMX
24dffe4436 Merge pull request #529 from amec0e/dev
Updated infrared assets
2023-07-02 15:05:23 +03:00
MMX
9d09aa4313 Merge pull request #516 from gid9798/subghz/code_improvement
SubGhz App
2023-07-02 15:04:36 +03:00
amec0e
c611c2d1bb Update audio.ir
Updated audio with new addition
2023-07-02 12:51:52 +01:00
amec0e
167576e0f7 Update fans.ir
Updated fans with new additions
2023-07-02 12:51:25 +01:00
amec0e
9b86e7d2f1 Update projectors.ir
Updated last checked, no new additions
2023-07-02 12:51:00 +01:00
amec0e
d4f4a720fe Update tv.ir
Reverted previously added additions as they are duplicates of TCL remote. Added Thomson comment to TCL codes.
2023-07-02 12:50:24 +01:00
MX
a8dd326fdc Merge branch 'dev' into subghz/code_improvement 2023-07-02 11:55:38 +03:00
MMX
c547781ba0 Merge pull request #527 from wosk/subghz-fixes
Subghz fixes
2023-07-02 10:02:58 +03:00
MX
ad12071f4c fix text bug 2023-07-02 10:01:57 +03:00
MX
394224b3a3 Merge branch 'dev' into subghz-fixes 2023-07-02 09:46:49 +03:00
MX
8c5931a62d Add new ACs and TVs in universal remote
Hitachi taken from OFW PR 2826 by 
minchogaydarov
Thomson TV from OFW PR 2818 by 
eze-kiel
2023-07-02 09:39:16 +03:00
Sergey Gavrilov
e7bd547d05 SubGHz: properly working with missing external driver (#2821) 2023-07-01 02:56:41 +09:00
Slavik Nychkalo
88f8f68e29 fix width of submenu items on Vertical orientation (#2306)
* fix width of submenu items on vertical view
* Gui: slightly better canvas width handling in submenu
* Gui: remove unused include

Co-authored-by: あく <alleteam@gmail.com>
2023-07-01 00:50:46 +09:00
Skorpionm
8c93695d01 [FL-3375] SubGhz: add CC1101 module external (#2747)
* SubGhz: add CC1101 Ext driver
* SubGhz:  move TIM2 -> TIM17 use cc1101_ext
* FuriHal: SPI move channel DMA 3,4 -> 6.7
* Documentation: fix font
* SubGhz: add work with SubGhz devices by link to device
* SubGhz: add support switching external/internal cc1101 "subghz chat"
* SubGhz: add support switching external/internal cc1101 "subghz tx" and "subghz rx"
* SubGhz: add "Radio Settings" scene
* SubGhz: add icon
* SubGhz: add supported CC1101 external module in SubGhz app
* SubGhz: fix check frequency supported radio device
* SubGhz: fix clang-formatted
* Sughz: move dirver CC1101_Ext to lib , compile cmd ./fbt launch_app APPSRC=radio_device_cc1101_ext
* SubGhz: fix CLI
* SubGhz: fix PVS
* SubGhz: delete comments
* SubGhz: fix unit_test
* Format sources
* Update api symbols and drivers targets
* Drivers: find proper place for target option
* SubGhz: external device connected method naming
* Format sources
* SubGhz:  fix module selection menu, when external is not connected
* SubGhz: fix furi_assert(device);
* SubGhz: fix split h and c
* SubGhz: furi_hal_subghz remove preset load function by name
* SubGhz: deleted comments
* Format Sources
* SubGhz: add some consts and fix unit tests
* Sync API Symbols

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-30 23:03:36 +09:00
MX
79d585323e Merge branch 'ofw-dev' into dev 2023-06-30 13:34:17 +03:00
あく
6d9de25494 Furi,FuriHal: various improvements (#2819)
* Lib: adjust default contrast for ERC displays

* Furi: various improvements in check module

* Format Sources

* FurHal: ble early hardfault detection

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-30 13:52:43 +04:00
MX
980e5061f3 Merge branch 'ofw-dev' into dev 2023-06-30 12:05:00 +03:00
Konstantin Volkov
5d40193308 increased timeouts (#2816)
Co-authored-by: doomwastaken <k.volkov@flipperdevices.com>
2023-06-30 04:41:35 +09:00
MX
b51f0b2c78 Manifestos 2023-06-29 19:18:49 +03:00
Sergey Gavrilov
95c1585df6 [FL-3211][FL-3212] Debug apps: speaker, uart_echo with baudrate (#2812)
* Music player: move music_worker to library
* Music player: drop cli
* Debug: speaker debug app
* Debug: baudrate arg in uart_echo app
* Libs: add music_worker to api
* Libs: add music_worker to targets linker_dependencies

Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 20:23:04 +09:00
MX
ab323c53a6 back 2023-06-29 14:12:47 +03:00
MX
052a55fe96 testing2 2023-06-29 13:52:15 +03:00
MX
3aa44d9e44 testing 2023-06-29 13:11:45 +03:00
AloneLiberty
e5ae3e22b3 NFC: Fix key invalidation logic (#2782)
* NFC: Fix key invalidation logic
* NFC: Fix crash in CLI with empty response
* Fix incorrect key conversions
* Proper call to nfc_util

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: Astra <me@astrra.space>
2023-06-29 17:24:13 +09:00
MX
293e01b800 update chaneglog 2023-06-29 06:39:52 +03:00
MX
259979a76a fix issue with None app used in favourites
User desktop settings will be reset to defaults
2023-06-29 05:51:14 +03:00
MX
380734f804 Allow api mismatch bypass again :C
for those who explicitly doesn't update their manually installed apps and want to ignore warnings and issues caused by using outdated apps
2023-06-29 05:38:44 +03:00
MX
5e2d01f159 Update OFW PR 2782 2023-06-29 04:37:39 +03:00
MX
b0988e4d86 Merge branch 'ofw-dev' into dev 2023-06-29 04:22:51 +03:00
g3gg0.de
c10c45616d SLIX2 emulation support / practical use for Dymo printers (#2783)
* improve digital_signal for longer packets, also clean up code
* added SLIX2 specific features like signature and unknown keys (for issue #2781), added WRITE_PASSWORD handling
* fix NfcV AFI selection
* when NFCV_CMD_READ_MULTI_BLOCK reads beyond memory end, return the maximum possible block's content
* added SLIX2 reading
* fix NXP SYSTEMINFO response check size
* capture the first received password if none was set before
* clear stored data before reading SLIX details renamed slix2_dump functions to slix2_read
* display card block size values as decimal

Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 02:44:34 +09:00
Dmitry Zinin
d1c27b6457 Keynote with vertical layout (#2794)
cherry pick from:
  * https://github.com/DarkFlippers/unleashed-firmware/pull/428/files
  * https://github.com/DarkFlippers/unleashed-firmware/pull/524/files
  Co-authored-by:
    * MX <10697207+xMasterX@users.noreply.github.com>
    * gid9798 <30450294+gid9798@users.noreply.github.com>

Co-authored-by: MX <10697207+xMasterX@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 01:49:28 +09:00
AloneLiberty
feebf2cd77 NFC: Improvements to NFC Magic app (#2760)
Ability to write gen1b tags (ignore 0x43)
Ability to write gen1 7 byte UID tags
Fix detection of non magic cards

Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 01:35:25 +09:00
Patrick Kilter
dcf105994b Added Power Button for an unknown Sharp Model (#2787)
Tested by me, i just asked if I can get the remote. Tested with the universal remote before and thought you would like to add the button data

Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 01:17:56 +09:00
minchogaydarov
a595231d25 Add Mitsubishi MSZ-AP25VGK universal ac remote (#2800)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-29 00:54:42 +09:00
Astra
bf975ad786 Fix roll-over in file browser and archive (#2811) 2023-06-28 20:46:42 +09:00
Félix Legrelle
6f1c46e11d Fix fr-FR-mac keylayout (#2809)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-28 18:36:40 +09:00
MMX
ee96e34767 Fix furi_hal_bus related crashes in plugins (#2799)
* Fix furi_hal_bus issues in plugins
* Rework pwm is running check
* ApiSymbols: update and sync targets

Co-authored-by: あく <alleteam@gmail.com>
2023-06-28 18:25:07 +09:00
Skorpionm
e52fdcf109 [FL-3388] NFC/RFID detector (#2795)
* Field_Validation: add driver fild_validation_rfid
* Field_Validation: add fild_validation_nfc
* Field_Presence: added field validation functions to furi_hal_nfc
* Field_Presence: added field validation functions to furi_hal_rfid
* Field_Presence: add "NFC/RFID detector" app
* Field_Presence: fix GUI "NFC/RFID detector"
* NFC/RFID detector: add auto turn on backlight when field is detected
* NFC/RFID detector: fix syntax errors
* ApiSymbols: fix incorrect name
* FuriHal: filed detect naming
* FieldDetector: fix grammar

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-28 18:05:48 +09:00
Sergey Gavrilov
645a7c5989 [FL-3386] Fast FAP Loader (#2790)
* FBT: build and add FastFAP(tm) sections
* Elf file: fast loading fap files. Really fast, like x15 times faster.
* fastfap.py: cleanup unused imports
* Toolchain: 23 version
* Elf File: remove log messages
* Scripts: fix file permissions
* FBT: explicit interpreter for fastfap invocation

Co-authored-by: あく <alleteam@gmail.com>
2023-06-28 17:19:10 +09:00
Sergey Gavrilov
92c1bb83bf LF-RFID debug: make it work (#2793)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-28 16:30:59 +09:00
Konstantin Volkov
e680cf59b6 Actions: unit_test and updater timeouts (#2807)
* added some extra timeouts, fixed duration of units run command and minor logging changes. No list_ports yet needed
* increased timeouts
* make pvs happy

---------

Co-authored-by: doomwastaken <k.volkov@flipperdevices.com>
Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-06-28 06:47:13 +10:00
PpHd
0a5508a8a1 Fix M*LIB usage (#2762)
* Fix M*LIB usage
* Fix oplist definition of SubGhzFrequencyAnalyzerLogItem
* Fix oplist definition of M_CSTR_DUP_OPLIST
* Remove dependency of furi_string_utf8_decode to the internal definition of string_unicode_t
* Replace obsolete macro M_IF_DEFAULT1 to M_DEFAULT_ARGS

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-06-27 19:50:09 +09:00
Petr Portnov | PROgrm_JARvis
75354ec5ba fix: make dialog_file_browser_set_basic_options initialize all fields (#2756)
* fix: make `dialog_file_browser_set_basic_options` initialize all fields
* fix(GH-2756): use alternative test for `test_dialog_file_browser_set_basic_options_should_init_all_fields`

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-27 18:46:04 +09:00
Astra
168fa72d53 [FL-3373] Scroll acceleration (#2784)
* Support for scroll acceleration
* Revert keyboard acceleration
* Add scroll acceleration to the text box
* Remove redundant code from the file manager input handler
* Archive: slightly better scrolling
* Gui,Archive: final version of accelerated scrolling

Co-authored-by: あく <alleteam@gmail.com>
2023-06-27 18:22:35 +09:00
Nikita Vostokov
0b68487519 Fix cursor hiding after delete and exit from exit dialog 2023-06-26 15:01:38 +03:00
Nikita Vostokov
3d1ef1aae3 Disable subghz item scrolling
* Show time on receive new signal also
2023-06-26 14:48:57 +03:00
MX
7aa15ada30 merge fix 2023-06-25 03:10:28 +03:00
MX
a466885df3 Merge branch 'ofw-dev' into dev 2023-06-25 03:08:40 +03:00
MX
190d47e528 Unitemp Fix SDA SCL pin numbers text 2023-06-25 01:39:46 +03:00
MX
eb282d20b7 Fix numpad ui wrong placed message 2023-06-25 00:53:36 +03:00
MX
300bd2c16b Update changelog 2023-06-25 00:44:15 +03:00
MX
35f95336ed Heat index
by ClementGre
2023-06-25 00:38:26 +03:00
MX
34ff4c7dfa . 2023-06-25 00:31:23 +03:00
MX
fef90f1ec5 Unitemp SCD40 support
by divinebird
2023-06-25 00:31:08 +03:00
MX
b92f7c669b Update changelog 2023-06-24 22:11:25 +03:00
MX
6f3f2fa1e7 OFW PR 2783: SLIX2 emulation support
by g3gg0
2023-06-24 21:14:00 +03:00
MX
8e126112f0 OFW PR 2782: NFC: Fix key invalidation logic
by AloneLiberty
2023-06-24 21:11:27 +03:00
MX
ae47b9888f Rework pwm is running check 2023-06-24 20:23:46 +03:00
MX
0540c2743f Update totp 2023-06-24 18:34:33 +03:00
MX
8ae952f499 Fix furi_hal_bus issues in AVR Programmer and Signal Generator 2023-06-24 17:50:27 +03:00
MMX
e3a7dbdcec Merge pull request #524 from gid9798/hid_app
Hid app
2023-06-24 00:16:13 +03:00
gid9798
3ee2223cbd Hid app: Flip Numpad 2023-06-23 21:54:19 +03:00
Sergey Gavrilov
761a14e6e2 [FL-2837][FL-3270] Loader refaptoring: second encounter (#2779)
* Core: rename internal FlipperApplication to FlipperInternalApplication
* FAP Loader: move load_name_and_icon to flipper_application library
* Loader menu: rework api
* View holder: move to gui service
* Loader: simple "loading" worker
* Loader: applications dialog
* Loader: fapping
* Update f18 api
* Apps: remove fap_loader
* Libs, flipper application: store args, rename thread allocation
* Loader: error handling
* Apps: use loader error handling
* Loader: documentation
* FBT: accomodate loader
* Loader: do not raise gui error if loader is locked
* Archive: accomodate loader
* Loader: fix loading message
* Flipper: drop some old dolphin legacy
* Loader: generalize error construction

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-23 21:01:40 +09:00
gid9798
2149859719 Hid app: vertival numpad 2023-06-23 00:06:20 +03:00
gid9798
62da715f75 Hid app: keynote vertical redraw and cleanup 2023-06-22 22:33:01 +03:00
gid9798
91ab2fd984 Pocsaq pager App: new radio driver 2023-06-21 14:00:25 +03:00
gid9798
1e76c2d840 SubRem Apps: update 2023-06-21 11:24:16 +03:00
gid9798
7bd0273fd5 SubGhz app: deleted extra check 2023-06-20 14:41:59 +03:00
gid9798
6e26de3763 SubGhz app: fix is_tx_allowed and freq check 2023-06-20 14:28:03 +03:00
gid9798
e2e9e53b6a Sub playlist app: new external and some fixes 2023-06-20 12:38:50 +03:00
gid9798
f9472effe3 Now really block transmission at dangerous freq 2023-06-20 11:02:14 +03:00
gid9798
a519a242d6 SubRem Config internal module by default 2023-06-19 13:37:08 +03:00
gid9798
ab12c8c339 SubRem configurator update 2023-06-19 13:26:01 +03:00
gid9798
72712d9f07 updated TODO descriptions 2023-06-19 12:51:02 +03:00
gid9798
2817913e63 prt3 2023-06-18 21:09:07 +03:00
gid9798
5eb677aa55 prt2 2023-06-18 20:25:40 +03:00
gid9798
3000b8fd0d prt1 2023-06-18 20:25:16 +03:00
gid9798
a191631c32 DIR_NAME and Drivers 2023-06-18 16:44:45 +03:00
MX
1c06ac1a82 ... 2023-06-17 21:53:03 +03:00
MX
851aabdcb5 Update changelog 2023-06-17 21:52:27 +03:00
MX
bd743dc1d8 Update changelog and readme 2023-06-17 21:50:24 +03:00
MMX
44136b7d98 Merge pull request #522 from amec0e/dev
Updated Infrared Assets new
2023-06-16 23:54:36 +03:00
amec0e
a414318605 Update tv.ir
New additions
2023-06-16 19:44:52 +01:00
amec0e
34b5535e00 Update projectors.ir
New additions
2023-06-16 19:44:24 +01:00
amec0e
d816220596 Update fans.ir
New additions
2023-06-16 19:44:05 +01:00
amec0e
c2fbc8a846 Update audio.ir
New additions
2023-06-16 19:43:45 +01:00
amec0e
8f996f9267 Update ac.ir
New additions
2023-06-16 19:43:19 +01:00
MX
491e368535 Merge branch 'ofw-dev' into dev 2023-06-16 20:41:47 +03:00
あく
4ddfe05a59 Debug: sync apps on attach, makes it possible to debug already started app that has crashed (#2778) 2023-06-16 10:48:57 +04:00
hedger
5334a0ab92 [FL-3376] Fixed GATT attribute order (#2776)
* hal: gatt: swapped rx/tx serial chars order
* hal: gatt: reordered HID attrs to maintain previous order

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-15 21:24:47 +09:00
MX
3c2d56e46b Add check 2023-06-15 03:08:56 +03:00
MX
1f3e621a31 Fix wifi marauder UART deinit 2023-06-15 02:53:08 +03:00
MX
5d9f4b1333 Changelog & more rgb patch info 2023-06-14 18:29:59 +03:00
MX
f078a48b7d Merge pull request #513 from Sil333033/subghz_cli_external
added external cc1101 module at cli
2023-06-14 18:06:38 +03:00
MX
ee8bbdcfe0 remake just a bit, disable external on command end 2023-06-14 18:05:05 +03:00
MX
8f835597ba Merge branch 'dev' into subghz_cli_external 2023-06-14 18:03:16 +03:00
MX
2ba1f80f7b Merge branch 'ofw-dev' into dev 2023-06-14 18:00:43 +03:00
MX
8088c52551 fix 2023-06-14 18:00:24 +03:00
Leopold
b6dbf25f85 furi_hal_nfc: fix rfalTransceiveBitsBlockingTx's 4th argument to bits count rather than bytes count (#2773) 2023-06-14 19:49:26 +09:00
gid9798
e2104bd6cf Merge remote-tracking branch 'UFW/dev' into subghz/code_improvement 2023-06-14 09:23:36 +03:00
MX
8bb3092002 Revert BLE gatt characteristics refactoring temporarily 2023-06-14 03:19:18 +03:00
gid9798
417dedd317 SubGhz App: remove kostily and velosipedy 2023-06-14 01:24:05 +03:00
MX
f22624399c remove unneeded global var 2023-06-14 01:07:07 +03:00
MX
cd9874970a Merge branch 'ofw-dev' into dev 2023-06-13 23:28:59 +03:00
gid9798
7b44221d9a Drop timestamp_file_names in hal 2023-06-13 22:36:34 +03:00
gid9798
c4baf3194e SubGhz App: change load custom presets 2023-06-13 22:17:54 +03:00
あく
392bd3cde0 FuriHal: remove clock startup time tracking from clean builds (#2764) 2023-06-13 16:02:12 +04:00
MX
d1c970b019 Fix protoview patable adding in custom modulations 2023-06-12 23:20:56 +03:00
Sil333033
6aed650bcc added external cc1101 module at cli 2023-06-12 14:15:22 +02:00
MX
4f0d201269 Fix changelog updater links 2023-06-12 05:40:00 +03:00
MX
63b350aedc Fix noanims build 2023-06-12 05:22:12 +03:00
MX
ef66a62a88 Update changelog 2023-06-12 04:56:22 +03:00
MX
6256f0c46e Add more freqs to default list 2023-06-12 04:33:16 +03:00
MX
b1af5bb6e5 Update changelog 2023-06-12 04:24:20 +03:00
AloneLiberty
b80fc6caf1 NFC: Improvements to NFC Magic app
Ability to write gen1b tags (ignore 0x43)
Ability to write gen1 7 byte UID tags
Fix detection of non magic cards
2023-06-11 23:40:51 +03:00
MX
451aa86c91 Infrared RCA Protocol + Update docs
Thanks to anonymous contributor for protocol implementation and testing
2023-06-10 21:02:52 +03:00
MX
26e38bc792 Upd readme 2023-06-10 06:02:56 +03:00
MX
f7195adbda OFW PR 2756 2023-06-10 06:01:23 +03:00
MX
d87745f2be Update TOTP 2023-06-10 05:22:34 +03:00
MX
75859e9a7e Update changelog 2023-06-10 04:45:11 +03:00
MX
fef5efb38a Update IR assets
Add new ACs and TCL tv
2023-06-09 22:10:21 +03:00
MX
c97412f9bd Merge pull request #464 from wosk/fix/subghz-notifies
SubGHz: Notifications refines
2023-06-09 19:08:07 +03:00
MX
3ebca1327f Merge branch 'dev' into fix/subghz-notifies 2023-06-09 19:00:36 +03:00
MX
1a6b2010ba Merge pull request #509 from gid9798/byte_input_mini_editor
Byte input add feature: editor without keyboard
2023-06-09 18:52:44 +03:00
MX
b61a84313a Update subbrute 2023-06-09 17:58:32 +03:00
MX
de626626de Merge branch 'ofw-dev' into dev 2023-06-09 16:02:32 +03:00
Astra
4900e8b7a2 [FL-3284] Fix reading Mifare Classic cards with unusual access conditions and fix emulation of unknown keys (#2620)
* I was outplayed by the C programming language
* Fix emulating empty keys as 0s
* Add exceptions for Detect Reader
* Sync api_symbols.csv for F18
* Outplayed by the C language [X2]

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-06-09 21:41:40 +09:00
hedger
2312fe5bfc [FL-3361] fbt: stable build dates (#2751)
* scripts: using commit date for clean build timestamp; current day otherwise
* scripts: version: Removing GIT_COMMIT_DATE from final data

Co-authored-by: あく <alleteam@gmail.com>
2023-06-09 21:27:47 +09:00
clashlab
49d842e213 weather_station: add oregon3 with THGR221 (#2748)
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-06-09 21:18:32 +09:00
MX
53f6205766 dolphin did 2023-06-09 14:14:05 +03:00
MX
e9fc5f62a5 Merge branch 'ofw-dev' into dev 2023-06-09 14:13:11 +03:00
Sergey Gavrilov
0e4344a83c Services: simplify api (#2540)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-09 20:02:47 +09:00
Sergey Gavrilov
62939dd28b Core2, SRAM2: provide safety gap (#2754)
* Core2, SRAM2: use ob, provide safety gap
* thread: comment about critical section and scheduler state
2023-06-09 19:49:26 +09:00
MX
af4a48a4bc Merge branch 'ofw-dev' into dev 2023-06-09 02:41:29 +03:00
MX
f4cc929a99 Fix descriptor 2023-06-09 00:53:16 +03:00
MX
d8ae931b7c Fix led descriptor? 2023-06-08 23:21:22 +03:00
Nikita Vostokov
fd6b8cd99a Don't reset cursor position after 2x Back btn press 2023-06-08 16:54:45 +03:00
Nikita Vostokov
253478dba5 SubGHz: Fix notifications
* Emit error notification on memory full
* Set IDLE notification (led off) at Info scene if Memory Full
* Enable Rx notification and Rx after deletion of item after "Memory full" state
2023-06-08 16:54:45 +03:00
あく
bff5921266 FuriHal: always clock SMPS from HSI (#2643)
* FuriHal: always clock SMPS from HSI

* FuriHal: add clock startup time check, ensure that we conform to core2 config value

* FuriHal: set sleep mode to legacy if clock startup time is too high

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-08 17:05:35 +04:00
hedger
1c306a04fc [FL-3359] github: added debugapps artifact; packaging resources per-target (#2750)
* github: added debugapps artifact; packaging resources per-target
* github: target name fixes
* github: fixed path for debug apps
* scripts: dist: removed lib stub artifact
* scripts: fixed broken SDK
* github: removed unused step
2023-06-08 21:43:05 +09:00
MX
18220515b5 Merge branch 'ofw-dev' into dev 2023-06-08 14:58:46 +03:00
gid9798
ce25d6339e Byte input add feature: editor without keyboard 2023-06-08 13:53:29 +03:00
hedger
e3e64e5e83 [FL-3267] ble: refactored bt gatt characteristics setup (#2587)
* ble: refactored bt gatt characteristics setup
* ble: naming fixes, small optimizations
* ble: expanded bitfields; fixed pvs warnings
* ble: fixed pvs warnings for real
* ble: using FlipperGattCharacteristicDataPropsFixed for char[] props
* ble: removed flipper_gatt_characteristic_props_const_char
* ble: gatt: naming changes
* ble: gatt: fixed device_info service constant attrs sizes
* ble: gatt: copy descriptors to char instances; reworked hid chars to be callback-based; moved max size getter to callback with NULL data; added comments
* ble: gatt: removed hid_svc_report_data_callback
* ble: hid svc: better double loop idx naming
* ble: hid svc: simplified hid_svc_update_info
* ble: gatt: removed magic values; fixed type for HidSvcGattCharacteristicInfo
* ble: gatt: moved long uuids to separate files

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-06-08 18:42:02 +09:00
Sergey Gavrilov
e5343fdc9a Scripts: WiFi board updater (#2625)
* Scripts: wifi updater
* WiFi board updater: lint, process download error
* WiFi board updater: auto cleanup temp dir
* Scripts: fix server address
2023-06-08 17:28:08 +09:00
hedger
3226254876 [FL-3351] github: re-enabled f18 build (#2743)
* github: re-enabled f18 build
* scripts: storage: better transfer logging
* Fix PVS warnings

Co-authored-by: あく <alleteam@gmail.com>
2023-06-08 15:16:01 +09:00
g3gg0.de
c186d2b0cc added ISO15693 (NfcV) reading, saving, emulating and revealing from privacy mode (unlock) (#2316)
* added support for ISO15693 (NfcV) emulation, added support for reading SLIX tags
* SLIX: fixed crash situation when an invalid password was requested
* ISO15693: show emulate menu when opening file
* rename NfcV emulate scene to match other NfcV names
* optimize allocation size for signals
* ISO15693: further optimizations of allocation and free code
* ISO15693: reduce latency on state machine reset
* respond with block security status when option flag is set
* increased maximum memory size to match standard
  added security status handling/load/save
  added SELECT/QUIET handling
  more fine grained allocation routines and checks
  fix memset sizes
* added "Listen NfcV Reader" to sniff traffic from reader to card
* added correct description to delete menu
* also added DSFID/AFI handling and locking
* increase sniff log size
* scale NfcV frequency a bit, add echo mode, fix signal level at the end
* use symbolic modulated/unmodulated GPIO levels
* honor AFI field, decrease verbosity and removed debug code
* refactor defines for less namespace pollution by using NFCV_ prefixes
* correct an oversight that original cards return an generic error when addressing outside block range
* use inverse modulation, increasing readable range significantly
* rework and better document nfc chip initialization
* nfcv code review fixes
* Disable accidentally left on signal debug gpio output
* Improve NFCV Read/Info GUIs. Authored by @xMasterX, committed by @nvx
* Fix crash that occurs when you exit from NFCV emulation and start it again. Authored by @xMasterX, committed by @nvx
* Remove delay from emulation loop. This improves compatibility when the reader is Android.
* Lib: digital signal debug output pin info

Co-authored-by: Tiernan Messmer <tiernan.messmer@gmail.com>
Co-authored-by: MX <10697207+xMasterX@users.noreply.github.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-06-08 14:30:53 +09:00
hedger
436194e6c7 [FL-3346] fbt: added Flipper selection when multiple are connected over USB (#2723)
* fbt: added Flipper selection when multiple are connected over USB
* scripts: serial_cli: added --port (-p) option
2023-06-08 13:47:27 +09:00
MX
5496fa2958 upd anims 2023-06-08 03:00:53 +03:00
MX
98e0f5a8f6 Update docs 2023-06-08 02:59:59 +03:00
MX
4e92f88b36 Merge pull request #507 from gid9798/Fuzzer
New RFID(125) and iButton Fuzzers
2023-06-08 02:13:35 +03:00
MX
c5f062be9a Rename and remove old apps 2023-06-08 01:30:29 +03:00
MX
bd9d831b56 Merge branch 'dev' into Fuzzer 2023-06-08 01:18:51 +03:00
MX
016249c982 bump ver 2023-06-08 01:05:38 +03:00
MX
ffda6ad321 Fix? I have no way to check if sensor still works 2023-06-08 01:03:07 +03:00
MX
47734f2459 Fix 2023-06-08 00:26:50 +03:00
MX
af2ecbc3ed SCD30 Unitemp 2023-06-08 00:26:10 +03:00
MX
87f70655a2 Remove broken modulation that was causing buffer Overrun
Fixes issue #506
2023-06-07 23:54:01 +03:00
MX
9af3c22a6a Fix ProtoView issue #503 2023-06-07 23:39:52 +03:00
MX
35ea46fd13 Merge branch 'ofw-dev' into dev 2023-06-07 21:03:36 +03:00
glebmashanov
09fae620d9 Map parser licence description (#2739)
* Add map parser licence description
* Add map parser copyright text & licence note

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-07 17:30:26 +04:00
gid9798
5fc6659e50 Merge remote-tracking branch 'UFW/dev' into Fuzzer 2023-06-07 12:51:27 +03:00
gid9798
82de8145b0 Fuzzer App: improved BFCustomerID attack 2023-06-07 12:44:33 +03:00
gid9798
c763ae6d5c Fuzzer App: cleanup attack view 2023-06-07 11:54:20 +03:00
gid9798
6ce098064a Fuzzer App: use FuzzerPayload & smal fixes 2023-06-07 11:51:15 +03:00
hedger
754e640c8d [FL-3246] fbt, ufbt: added checks for appid in app manifests(#2720)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-07 11:14:33 +09:00
MX
58338ff51f Fix RGB patch 2023-06-07 00:59:19 +03:00
MX
ac15621e74 fix API 2023-06-07 00:41:14 +03:00
MX
0d394a6f87 Merge branch 'ofw-dev' into dev 2023-06-07 00:29:06 +03:00
MX
d86eb870d4 pre-merge fix 2023-06-07 00:28:26 +03:00
gid9798
28f4cd3d3c Fuzzer App: Zero idle time 2023-06-06 22:43:44 +03:00
Max Andreev
6f6ead1726 [FL-3045] Fix core2 permisions (#2742)
* Fix core2 permisions

* Fix Python code style

* scripts: copro: changed int literals

* scripts: copro: shorter string line in code

---------

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 23:33:04 +04:00
Skorpionm
dbd48a04d4 [FL-3331] SubGhz: add subghz_protocol_registry external API (#2712)
* [FL-3331] SubGhz: add subghz_protocol_registry external API

* F18: fix API version

---------

Co-authored-by: hedger <hedger@nanode.su>
2023-06-06 23:13:41 +04:00
Sergey Gavrilov
3e1f209d64 Furi: smaller critical enter and critical exit macro (#2716)
* Furi: smaller critical enter and critical exit macro
* api: bumped version

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
2023-06-06 23:00:43 +04:00
DEXV
e4a2e9a920 Serial_CLI: Fixing serial cli logger error so it sounds more concise (#2721)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 22:18:24 +04:00
Astra
a284d21e1c [FL-2872] Remove unused resources (#2740)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 22:11:23 +04:00
あく
61394b8be4 [FL-3352] Dolphin: new animation (#2735)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 22:04:27 +04:00
あく
b0555d96e9 [FL-3213] f7: add PB9 to debug pins (#2738)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 21:52:49 +04:00
あく
76c70bdf2c [FL-3316] Settings: add contrast adjustment (#2737)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-06-06 21:46:01 +04:00
あく
1e512b6add [FL-3293] FuriHal: add system setting to device info, bump device info version (#2736) 2023-06-06 21:15:50 +04:00
gid9798
7c172c7c06 Fuzzer App: revert stack_size 2023-06-06 19:23:39 +03:00
gid9798
caab7c8e10 Fuzzer App: Edit Manifests 2023-06-06 16:55:29 +03:00
gid9798
d2b0aa8513 Fuzzer App: fix time_delay 2023-06-06 16:28:30 +03:00
gid9798
a063858842 Fuzzer App: notifications 2023-06-06 16:28:24 +03:00
gid9798
237d2ba1a0 Fuzzer App: field_editor view V2 2023-06-06 16:28:04 +03:00
gid9798
b346487e76 Fuzzer App: BFCustomerID attack, some fix 2023-06-06 16:27:59 +03:00
gid9798
6a9f396663 Fuzzer App: Some description 2023-06-06 16:27:50 +03:00
gid9798
d3eb43ce35 Fuzzer App: Attack state 2023-06-06 16:27:46 +03:00
gid9798
6eed74c716 Fuzzer App: prtocol carusel prototype 2023-06-06 16:27:38 +03:00
gid9798
b95620cdd0 Fuzzer App: Some Improvement 2023-06-06 16:27:28 +03:00
gid9798
3bd08ab31c Fuzzer App: Load key file 2023-06-06 16:25:25 +03:00
gid9798
5b4bb66848 Fuzzer App: Field editor view 2023-06-06 16:25:19 +03:00
gid9798
2b677c83e3 Fuzzers App: load custom dict 2023-06-06 16:23:19 +03:00
gid9798
d3a260e441 Fuzzer App: worker add RFID 2023-06-06 16:23:08 +03:00
gid9798
70edcf3f6a Fuzzer App: worker 2023-06-06 16:22:51 +03:00
gid9798
e31a0c4d6d Fuzzers App: attack gui 2023-06-06 16:22:40 +03:00
gid9798
321f2d8d50 Fuzzers app: main menu v0 2023-06-06 16:22:32 +03:00
gid9798
ab86f58643 Fuzzers App: gui start 2023-06-06 16:22:01 +03:00
Max Andreev
72ad22bb91 [DEVOPS-18]: Add map file parser, mariadb inserter (#2732) 2023-06-05 19:25:43 +09:00
MX
73d4fc6d2f Fix E 2023-06-04 15:35:43 +03:00
MX
b16357494d fix branch 2023-06-04 15:31:39 +03:00
MX
2e47c5a2ac lets try patch 2023-06-04 15:27:59 +03:00
MX
0f8ca0a563 Apply required TOTP changes 2023-06-04 12:52:24 +03:00
MX
a7a51b76f3 Merge pull request #502 from ClaraCrazy/dev
Add furi_hal_version_uid_default (Fix TOTP)
2023-06-04 12:42:51 +03:00
ClaraCrazy
a12f563d1c revert in app, dumb idea, needs some more work. 2023-06-04 10:56:53 +02:00
ClaraCrazy
6d433edc38 Add furi_hal_version_uid_default (Fix TOTP) 2023-06-04 10:48:46 +02:00
MX
75ee4efa31 Fix ibtn fuzzer file loading (temp) 2023-06-03 23:46:55 +03:00
MX
5a2fbf4af3 Update changelog 2023-06-03 22:36:19 +03:00
MX
a0e39ddb67 more checks just in case?? 2023-06-03 20:36:20 +03:00
Tiernan Messmer
2008247e65 Remove delay from emulation loop. This improves compatibility when the reader is Android. 2023-06-03 15:48:33 +03:00
MX
263c94d167 Update changelog 2023-06-03 15:03:07 +03:00
MX
fa997bdf4a fix readme 2023-06-03 00:51:07 +03:00
MX
d16ba6c4c8 Fix stilmatic support? 2023-06-03 00:29:01 +03:00
MX
67e661ec95 Merge branch 'ofw-dev' into dev 2023-06-03 00:11:39 +03:00
あく
d9a9fa0c10 FuriHal: disable bus re-initialization on early init and extra asserts for AHB1,AHB2,AHB3 which must be left intact on entering to FUS (#2725) 2023-06-03 00:59:19 +04:00
MX
cec82e4ffb Update chigo ac captures in ac universal 2023-06-02 23:40:26 +03:00
MX
13a1cd32a7 Fix multiple bus issues in plugins 2023-06-02 23:32:23 +03:00
MX
e990e58177 change butthurt timer 2023-06-02 22:55:05 +03:00
MX
0aba59501a Fix link 2023-06-02 19:18:16 +03:00
MX
7c86e53bd2 Update changelog 2023-06-02 19:09:43 +03:00
MX
05b6ae7b20 Deauther crash fix, Fixes issue #497 2023-06-02 17:03:03 +03:00
MX
2dc0059b1c NFC V, review gui fixes, disable debug output in digital signal 2023-06-02 16:47:54 +03:00
MX
ad83095959 Final 2023-06-02 15:18:05 +03:00
MX
a5bf97fbb2 Fix appid's pt2 2023-06-02 15:14:32 +03:00
MX
b0c322ec90 Fix crash on second emulation NFC V 2023-06-02 15:03:01 +03:00
MX
ca49da3c83 Fix APP_IDs to match new regex
regex check will be added in OFW soon
2023-06-02 13:42:44 +03:00
MX
4c134d8fdc Merge branch 'ofw-dev' into dev 2023-06-01 16:19:37 +03:00
gornekich
1d7966f74e NFC: fix MFC timings (#2719)
* digital signal: add optimization
* nfc test: more restrict tests
* digital signal: build as separate library
* digital signal: remove unused flags, format sources
* digital signal: fix cflag name
* target: fix build for f18 target

Co-authored-by: あく <alleteam@gmail.com>
2023-06-01 21:37:47 +09:00
Zoë Prosvetova
3a7203e32e Update dolphin.py (#2717)
Co-authored-by: あく <alleteam@gmail.com>
2023-06-01 18:59:41 +09:00
MX
f5692ea1f0 fix message 2023-05-31 17:16:24 +03:00
MX
774156a78a Merge branch 'ofw-dev' into dev 2023-05-31 17:14:49 +03:00
Tiernan Messmer
b18bf3eddb nfcv code review fixes 2023-05-31 17:14:06 +03:00
AloneLiberty
86a64487cb NFC: Fix gen1 writing with invalid BCC (lost fix from PR #2511) (#2710)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-31 22:56:04 +09:00
Skorpionm
d09c59fd2f [FL-3340] SubGhz: fix flipper crashes after exiting broadcast blocking message and crash cli (#2714) 2023-05-31 21:59:12 +09:00
MX
87aca2874f Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-05-31 13:34:52 +03:00
MX
b4ccf00722 Merge pull request #479 from gid9798/keeloq_move_mf_to_keystore
Keeloq move mf to keystore
2023-05-31 12:59:28 +03:00
gid9798
53dbf8de72 fix 2023-05-31 12:25:45 +03:00
MX
e60707d7ef need to fix that 2023-05-31 12:18:24 +03:00
MX
6374474b25 fmt 2023-05-31 10:39:11 +03:00
MX
c0d80a4f83 Merge branch 'dev' into keeloq_move_mf_to_keystore 2023-05-31 10:38:28 +03:00
MX
fabbfc3979 Update audio ir asset
by @amec0e
2023-05-31 10:29:57 +03:00
MX
0a0109e2aa Merge pull request #492 from gid9798/subrem_main_and_maker
Subrem main and maker
2023-05-31 01:08:24 +03:00
MX
5b487bab85 Merge pull request #493 from gid9798/lfrfid_t5577
Lfrfid t5577
2023-05-31 01:03:36 +03:00
gid9798
6ad58276f8 Cleanup and rename 2023-05-30 22:21:47 +03:00
gid9798
a260465721 Prog_mode to custom_btn 2023-05-30 22:18:54 +03:00
gid9798
8273c946de Merge remote-tracking branch 'UFW/dev' into lfrfid_t5577 2023-05-30 20:32:44 +03:00
gid9798
96e3d7f076 Merge branch 'DarkFlippers:dev' into subrem_main_and_maker 2023-05-30 20:28:43 +03:00
gid9798
c70a13015b Allow BinRaw & some clean 2023-05-30 20:27:15 +03:00
gid9798
a312aa422a Same codebase as fap 2023-05-30 20:04:17 +03:00
gid9798
b3e8b2c487 upd_subrem_main 2023-05-30 20:01:31 +03:00
MX
15a33a58d3 Upd ofw anim list 2023-05-30 19:33:29 +03:00
MX
a783612076 Merge branch 'ofw-dev' into dev 2023-05-30 19:30:08 +03:00
MX
4609d7ed93 Update FlipperNested
https://github.com/AloneLiberty/FlipperNested
2023-05-30 17:14:27 +03:00
MX
5db3d1ed7c Add new ac 2023-05-30 15:16:17 +03:00
あく
a76c189ca5 [FL-3335] Dolphin: new animation (#2713) 2023-05-30 20:47:28 +09:00
MX
81023875d5 Update audio ir
by @amec0e
2023-05-30 14:33:35 +03:00
gid9798
da4a8eb5c1 Merge branch 'UFW_dev' into lfrfid_t5577 2023-05-30 11:20:01 +03:00
MX
48a2b0ab49 New audio buttons
by @amec0e
2023-05-30 01:25:15 +03:00
MX
b25e98ffbb Rename buttons in OFW naming scheme 2023-05-30 00:12:46 +03:00
MX
121526f521 Use AC Remote from OFW, same for Audio remote
ASSETS update needed, will be done soon
2023-05-29 23:50:37 +03:00
MX
2e70470d12 remove unused var 2023-05-29 23:12:38 +03:00
MX
70cda48632 Change fw origin 2023-05-29 22:44:05 +03:00
MX
953bbabff3 Merge pull request #490 from gid9798/clock_forced_upd
Desktop Clock: some improvements
2023-05-29 22:37:56 +03:00
gid9798
a4c1ad22ef Removing duplicate code in t5577 passwd clear 2023-05-29 22:15:07 +03:00
MX
e474b851bf fix for new bus changes 2023-05-29 21:29:13 +03:00
MX
467f3265e0 bus changes 2023-05-29 21:01:00 +03:00
MX
0ab530e750 Merge branch 'ofw-dev' into dev 2023-05-29 20:33:12 +03:00
hedger
8d2ea14f06 [FL-3330] fbt: added hooks for build & dist environments; added FW_ORIGIN_* macro for apps & SDK (#2705)
* fbt: added hooks for build & dist environments
* Moved env hooks to an optional file
* Fixed var name
* Added fw origin to device info
* Bumped device info version
* fbt: added FIRMWARE_ORIGIN option. Different implementation for FW_ORIGIN_* C macro.
* api: bumped versions
* fbt: added fbt_options_local.py
* gitignore: cleanup

Co-authored-by: あく <alleteam@gmail.com>
2023-05-30 01:40:56 +09:00
MX
b3aaffc95d Update wifi marauder plugin 2023-05-29 19:33:04 +03:00
あく
3de856f8d5 [FL-3295] FuriHal: add bus abstraction (#2614)
* FuriHal: add bus abstraction and port some subsystem to it
* Make PVS happy, cleanup code
* Update API symbols for f18
* F18: backport bus changes from f7
* Revert to STOP2 sleep mode
* Fix downgrading the firmware via updater
* Port iButton TIM1 to furi_hal_bus
* Port Infrared TIM1 and TIM2 to furi_hal_bus
* Just enable the timer bus
* Port furi_hal_pwm to bus API
* Fix include statement
* Port furi_hal_rfid to bus API
* Port furi_hal_subghz and others to bus API
* Remove unneeded include
* Improve furi_hal_infrared defines
* Reset LPTIM1 via furi_hal_bus API
* Crash when trying to enable an already enabled peripheral
* Better defines
* Improved checks
* Lots of macro wrappers
* Copy spi changes for f18
* Fix crashes in LFRFID system
* Fix crashes in NFC system
* Improve comments
* Create FuriHalBus.md
* Update FuriHalBus.md
* Fix crash when launching updater
* Documentation: couple small fixes in FuriHalBus
* FuriHal: fix copypaste in furi_hal_rfid_tim_reset
* FuriHal: reset radio core related peripherals on restart
* FuriHalBus: is enabled routine and bug fix for uart
* RFID HAL: accomodate furi hal bus

Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com>
Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-05-30 01:05:57 +09:00
gid9798
b17125c65c Desktop Clock: some improvements 2023-05-29 17:54:01 +03:00
MX
23ff7d913a Update UART Terminal 2023-05-29 17:47:45 +03:00
micolous
363f555ed7 Implement support for reading Opal card (Sydney, Australia) (#2683)
* Implement support for reading Opal card (Sydney, Australia)
* stub_parser_verify_read: used UNUSED macro
* furi_hal_rtc: expose calendaring as functions
* opal: use bit-packed struct to parse, rather than manually shifting about
* Update f18 api symbols

Co-authored-by: あく <alleteam@gmail.com>
2023-05-29 20:55:55 +09:00
MX
18a895310c Merge branch 'ofw-dev' into dev 2023-05-29 14:40:07 +03:00
MX
04f9811c6e Fix crash when renaming files with long file name 2023-05-29 14:17:50 +03:00
Nikolay Minaylov
66961dab06 BadUSB: script execution pause (#2700)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-29 18:21:18 +09:00
minchogaydarov
f9390e0cbd Add Carrier 42QHB12D8S (#2707)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-29 18:04:38 +09:00
Sebastian Mauer
44426c7612 [LRFID] Add support for Nexkey/Nexwatch (#2680)
* [LRFID] Add support for Nexkey/Nexwatch
* Update protocol_nexwatch.c: Remove unnecessary check

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-05-29 17:19:42 +09:00
MX
7b426b936e Comment debug logs in digital signal
and comment some debug logs in nfc v
2023-05-28 19:24:21 +03:00
MX
0d1fea9861 LFRFID PSK Raws in debug 2023-05-28 06:36:19 +03:00
MX
1e1b85a575 SecPlus 2.0 - Add new custom button
Fix issue with add manually
2023-05-28 04:18:32 +03:00
MX
a11b6e72dc Update changelog and readme
+ some small fixes
2023-05-28 03:53:54 +03:00
MX
c8d396f94b OFW PR 2680: RFID Add support for Nexkey/Nexwatch
by mauimauer
2023-05-28 02:49:29 +03:00
MX
70a7ab7f2e Move mifare nested plugin from extra pack to base fw 2023-05-27 23:55:48 +03:00
MX
adb236d8b6 move nfc apps into NFC folder 2023-05-27 18:38:49 +03:00
MX
6208337f61 Merge tiktok and ytshorts remote into one
by @Willy-JL
2023-05-27 16:51:54 +03:00
MX
9af6616882 Archive, fix rename, show message to user 2023-05-27 13:39:54 +03:00
MX
b4558b2db1 Merge pull request #487 from gid9798/subrem_configurator
Subghz Remote configurator
2023-05-26 21:15:19 +03:00
MX
2f35e980ef rename rename 2023-05-26 19:52:43 +03:00
MX
71a2d56ad3 update docs 2023-05-26 19:29:08 +03:00
MX
858ab99cec don't put subrem_ in name by default 2023-05-26 19:21:26 +03:00
MX
c4cba38559 oops 2023-05-26 19:18:08 +03:00
MX
e6790e50c6 fix crash 2023-05-26 19:17:27 +03:00
MX
6dc1a0b6e8 rename again 2023-05-26 19:11:06 +03:00
MX
9c520c5188 Rename + don't touch power and module type on start 2023-05-26 19:06:26 +03:00
gid9798
3e09793b54 Rename 2023-05-26 18:14:15 +03:00
gid9798
2f284cdb18 Merge branch 'UFW_dev' into subrem_configurator 2023-05-26 17:43:41 +03:00
gid9798
c1eb968144 Merge branch 'subrem' into subrem_configurator 2023-05-26 17:39:43 +03:00
gid9798
14a12b02ef drop tx 2023-05-26 17:32:52 +03:00
MX
3c452e6ddb Merge branch 'ofw-dev' into dev 2023-05-26 16:51:11 +03:00
Yukai Li
5f52382098 nfc: Mifare Ultralight C detection (#2668)
* nfc: Add Mifare Ultralight C detection
* nfc: Add display name for MFUL C and hide menu items
    MFUL C unlock and emulation currently not supported, so hide from menu
    if current card is MFUL C
* nfc: Also check response when probing 3DES auth
* nfc: Hide emulate option in saved menu for MFUL if not supported
* nfc: Remove unlock options from saved menu if Ultralight C


Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 22:19:10 +09:00
technobulb
cce0485e75 Update ac.ir (#2701)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 22:12:21 +09:00
MX
612d58b4b2 Merge branch 'ofw-dev' into dev 2023-05-26 16:04:03 +03:00
hedger
4f054ed535 api: added toolbox/api_lock.h (#2702)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 21:57:24 +09:00
Yukai Li
5a7cd203cd nfc: Fix MFUL tearing flags read (#2669)
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2023-05-26 21:50:59 +09:00
MX
b9397693a2 Setting to change fonts in TOTP
opensource != selling plugin builds / do you agree?
If you don't agree - and you think I did a bad thing here by allowing users to select fonts without payment, let me know

Why I did that? - cuz I'm not making private "donation only" builds myself, while having no main job, and living only on donations, so I don't like stuff like that in opensource projects

You should support author if you like this plugin here:
https://github.com/akopachov/flipper-zero_authenticator
2023-05-26 15:09:10 +03:00
MX
24ad48d390 Update TOTP 2023-05-26 13:22:06 +03:00
MX
12f9b6a89e Apply desktop favourite apps refactoring 2023-05-26 13:13:46 +03:00
MX
36102b8ee0 Merge branch 'ofw-dev' into dev 2023-05-26 12:03:49 +03:00
Avery
490447bbd4 NFC: Add support for Gen4 "ultimate card" in Magic app (#2238)
* NFC: gen4 gtu detect in magic app
* NFC: more support for GTU card
* NFC: Fix Gen1 in Magic
* Allow double UIDs for MFClassic on GTU cards
* NFC: Small magic app tweaks
* nfc magic: notify card event on wiping
* nfc magic: fix power consumption
* nfc magic: disable i2c writing and fix wipe loop
* NfcMagic: correct formatting in printf
* NfcMagic: correct formatting in printf, proper version
* nfc_magic: rework card found notification and gen4 wiping

Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 02:01:02 +09:00
Yukai Li
77bb997b0b desktop: Refactor favorites settings and allow app browser in selection (#2687)
* desktop: Refactor favorites settings and allow app browser in selection
* desktop: Gate app browser entry add, just in case
* Desktop: simplify favorite application selection
* Desktop: refactor favorite application opening routine and cleanup code
* Desktop: handle exit from external application selection

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 01:16:41 +09:00
minchogaydarov
a472ff7a0f Add Airwell Prime DCI Series and match file style (#2686)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-26 00:00:13 +09:00
Nikolay Minaylov
12dc5b186f USB HID report timeout (#2682)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-25 23:50:13 +09:00
Georgii Surkov
ed1ebf9b93 [FL-3322] Infrared: respect carrier frequency and duty cycle settings (#2677)
* Make infrared_worker respect carrier frequency and duty cycle
* Update comments

Co-authored-by: あく <alleteam@gmail.com>
2023-05-25 23:38:56 +09:00
Félix Legrelle
faa14cfa1c Add fr-FR-mac key layout (#2666)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-25 23:30:07 +09:00
あく
080324f7e0 [FL-3315] Desktop,Rpc: desktop status subscription (#2696)
* Desktop,Rpc: desktop status subscription
* Desktop,RPC: properly handle unsubscribe

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2023-05-25 23:22:31 +09:00
MX
d094bfaa12 Merge branch 'ofw-dev' into dev 2023-05-25 16:48:28 +03:00
Sergey Gavrilov
88f0b63577 Storage, common_rename: check that old path is exists (#2698)
* Storage, common_rename: check that old path is exists
* Storage, common_rename: return correct status
2023-05-25 22:44:32 +09:00
MX
3eac6ccd48 Merge pull request #484 from gid9798/clock_on_desktop
Clock on desktop
2023-05-24 08:28:21 +03:00
MX
d83d898cdc Rename 2023-05-24 08:26:17 +03:00
MX
035bb57c56 bump version!!! 2023-05-24 07:50:45 +03:00
MX
977c9e706e Fix typos 2023-05-24 07:50:13 +03:00
MX
d597211161 Merge branch 'dev' into clock_on_desktop 2023-05-24 07:49:27 +03:00
MX
5c234c2106 Update changelog 2023-05-24 07:48:33 +03:00
MX
b12fc114c7 Update WiFi Marauder plugin
Added PR by justcallmekoko

https://github.com/justcallmekoko/flipperzero-firmware-with-wifi-marauder-companion
2023-05-24 07:46:34 +03:00
MX
bce12a4048 Update GPS UART 2023-05-24 07:24:01 +03:00
MX
1e5a8f4391 Merge branch 'ofw-dev' into dev 2023-05-24 07:16:05 +03:00
gid9798
712bdc7df8 Merge branch 'DarkFlippers:dev' into clock_on_desktop 2023-05-23 22:48:54 +03:00
gid9798
1d5a4240b9 Clock: some improvements 2023-05-23 22:47:15 +03:00
あく
3217f286f0 Services: remove deallocator for persistent services (#2692)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-05-23 19:17:12 +04:00
Sergey Gavrilov
711f0fef40 [FL-3327] Storage: common_rename is now POSIX compliant (#2693)
* Storage: common_rename is now POSIX compliant

* storage: check for success on storage_common_remove in file rename

---------

Co-authored-by: hedger <hedger@nanode.su>
2023-05-23 18:59:32 +04:00
gid9798
c82ed71b6f cleanup 2023-05-23 16:41:57 +03:00
hedger
a821a2fcc0 [FL-3328] Removed user-specific data from tar artifacts (#2691) 2023-05-23 19:51:21 +09:00
gid9798
e40620fd10 clock 2023-05-22 22:45:16 +03:00
MX
6779eab44e Merge branch 'ofw-dev' into dev 2023-05-22 14:49:53 +03:00
Yukai Li
5f1ac6e1b1 fbt: Fix tar uid overflow when packaging (#2689)
* fbt: Fix tar uid overflow when packaging
* Fix trailing spaces
2023-05-22 13:14:18 +04:00
gid9798
1bd7d25973 Merge branch 'subrem_pub' into subghz_priv+fap 2023-05-22 11:55:28 +03:00
gid9798
544b6fea8a clock port 2023-05-22 11:42:27 +03:00
MX
451ba8da9f More API cleanup 2023-05-22 06:03:28 +03:00
MX
1d11bc64a9 Update readme & changelog 2023-05-22 06:00:45 +03:00
MX
2a6749a56d Merge pull request #478 from gid9798/subrem_new_app
SubRem App
2023-05-22 04:03:44 +03:00
MX
ca0147e814 Merge branch 'dev' into subrem_new_app 2023-05-22 03:47:48 +03:00
MX
aab4d2bd34 API CleanUp part 3 2023-05-22 03:45:17 +03:00
MX
16f3cb0189 Merge branch 'dev' into subrem_new_app 2023-05-22 03:06:05 +03:00
MX
03d8804209 More API cleanup 2023-05-22 03:05:51 +03:00
MX
889a45eaca Merge branch 'dev' into subrem_new_app 2023-05-22 02:56:15 +03:00
MX
ace9e03fe7 API: Cleanup, mini refactoring of some apps
+6k of free flash space
2023-05-22 02:54:04 +03:00
MX
46832ff77f gps uart stability fix 2023-05-22 02:33:43 +03:00
gid9798
51df11886a Merge branch 'UFW_dev' into subrem_new_app 2023-05-21 23:55:38 +03:00
gid9798
8597169e14 Merge branch 'DarkFlippers:dev' into keeloq_move_mf_to_keystore 2023-05-21 23:44:22 +03:00
gid9798
58b21f2a49 Using TxRx from subghz 2023-05-21 23:38:58 +03:00
gid9798
e71a66535d move part of preset 2023-05-21 23:38:36 +03:00
gid9798
311533a0ac Using TxRx from subghz 2023-05-21 23:34:42 +03:00
MX
d9fc408d96 fbt: Use union for old py (#2685) 2023-05-21 21:50:38 +04:00
MX
ef19fa9b51 SubRemote: Migrate old files and make folder if not exist 2023-05-21 20:37:55 +03:00
MX
d7db7b8b67 fix builds for old pythons 2023-05-21 20:18:09 +03:00
gid9798
26bcebd575 move part of preset 2023-05-21 10:29:58 +03:00
gid9798
b11b0a4911 udp 2023-05-20 16:31:32 +03:00
gid9798
f6786d5a59 Merge branch 'subrem_new_app' into subghz_remote_new 2023-05-20 16:25:11 +03:00
gid9798
2414346ec3 keeloq to kestore 2023-05-20 16:15:01 +03:00
gid9798
47b1cadbb6 fix alloc balance 2023-05-20 15:05:26 +03:00
gid9798
d949b010d8 Loading States & fix label length 2023-05-20 10:26:01 +03:00
gid9798
2bda0820bf SubGHz App: alloc balance 2023-05-20 10:22:22 +03:00
nminaylov
8ee959e1af USB HID report timeout 2023-05-20 10:22:11 +03:00
MX
1ea138f795 Port XFW keyboard to marauder instead of UART Term keyboard
This implementation has not only extra symbols but a cursor feature
thanks to @Willy-JL
2023-05-20 10:01:05 +03:00
MX
87ebbc9901 Update wifi marauder 2023-05-20 09:52:00 +03:00
gid9798
561b54ce36 SubGHz App: alloc balance 2023-05-20 09:38:44 +03:00
gid9798
2af8f00d0d fix 2023-05-20 01:25:05 +03:00
gid9798
2309656120 clean up 2023-05-20 01:19:13 +03:00
gid9798
09527c3ab6 keeloq 2023-05-20 01:15:36 +03:00
gid9798
a4d72e0fee subrem fix repeat 2023-05-19 23:32:57 +03:00
gid9798
47f6d78737 Loading States & fix label length 2023-05-19 23:21:18 +03:00
gid9798
e295c7aac2 Load states & fix label length 2023-05-19 22:59:43 +03:00
gid9798
1f97e9be34 fix repeat 2023-05-19 21:21:36 +03:00
gid9798
0b25cc5a5c fap 2023-05-19 21:06:03 +03:00
gid9798
43a7b50b74 Merge branch 'UFW_dev' into subghz_remote_new 2023-05-19 20:59:20 +03:00
gid9798
1d79e149cf subrem fix repeat 2023-05-19 12:32:35 +03:00
Max Andreev
d062ce73d7 Add new indexer (#2681) 2023-05-19 18:32:30 +09:00
MX
e7965c6d95 De-libify name changer 2023-05-19 06:33:15 +03:00
MX
de5afa1304 Merge pull request #477 from gid9798/subrem_new_app
subghz_remote_app
2023-05-19 05:11:00 +03:00
MX
10d926de0d EXT_PATH only 2023-05-19 05:09:14 +03:00
MX
4e767c9872 Merge branch 'dev' into subrem_new_app 2023-05-19 04:54:04 +03:00
MX
481a8e0f33 Move after nchgr service 2023-05-19 04:51:25 +03:00
MX
324186dad2 Add back cnt in debug 2023-05-19 04:49:29 +03:00
MX
a7ee5fea93 Name changer as service + extra checks 2023-05-19 04:33:14 +03:00
MX
276020c482 Merge pull request #475 from gid9798/move_dangerous_settings_check
Move dangerous_settings check
2023-05-19 03:32:35 +03:00
MX
99dde674ca small changes 2023-05-19 03:31:46 +03:00
gid9798
6f205edd9a minor fixes 2023-05-18 19:20:34 +03:00
gid9798
6f9f3e9496 minor fixes 2023-05-18 15:16:31 +03:00
gid9798
e8264dc6e7 subghz_remote_app 2023-05-18 13:48:25 +03:00
gid9798
9da2e4fae8 add save dynamic 2023-05-18 12:01:17 +03:00
gid9798
64817ac216 Move dangerous_settings check 2023-05-18 10:59:08 +03:00
MX
11d4ad1e23 fix builds 2023-05-18 03:16:51 +03:00
MX
e3cf9a0306 Update changelog 2023-05-18 02:40:10 +03:00
MX
2b01766460 Mifare mini with sak 89 support 2023-05-18 02:38:45 +03:00
MX
f7d9ef0c97 Merge pull request #474 from amec0e/dev
Updated infrared assets
2023-05-18 02:29:35 +03:00
amec0e
78a2b12be0 Updated ac.ir
New additions
2023-05-17 23:50:24 +01:00
amec0e
5b4ec05dbe Updated tv.ir
More additions
2023-05-17 23:47:04 +01:00
amec0e
0164e061a4 Updated ac.ir
No new additions
2023-05-17 23:32:00 +01:00
amec0e
9c3d2d736d Updated audio.ir
No new additions
2023-05-17 23:31:39 +01:00
amec0e
f214f58269 Updated fans.ir
New additions
2023-05-17 23:31:10 +01:00
amec0e
f8c4b6ba59 Updated projectors.ir
No new additions
2023-05-17 23:30:43 +01:00
amec0e
15da25759e Updated tv.ir
Added Brandt TV Raw data Support (Thanks FAYVIXE for the codes and testing!)
2023-05-17 23:30:22 +01:00
MX
ce7517d5ce Update docs 2023-05-17 23:23:37 +03:00
MX
27028471bb Update changelog 2023-05-17 23:16:25 +03:00
MX
d539b948a0 Revert hitag for now, need to cleanup more space 2023-05-17 23:06:41 +03:00
MX
51ba8b66b6 Save a little bit (~2k) of space 2023-05-17 23:05:44 +03:00
MX
35d72d82b4 remove region_data from int 2023-05-17 22:37:24 +03:00
MX
95d6465dac OFW PR 2666: Add fr-FR-mac key layout
by FelixLgr
2023-05-17 21:30:36 +03:00
MX
fc18cea875 Update changelog 2023-05-17 21:22:22 +03:00
MX
c9ddecff87 OFW PR 2658: Hitag
by blackvault88
2023-05-17 21:18:05 +03:00
MX
d620285e0a OFW PR 2669: nfc: Fix MFUL tearing flags read
by GMMan
2023-05-17 19:52:01 +03:00
MX
c760bca4a9 OFW PR 2316: NFC V support
https://github.com/g3gg0/flipperzero-firmware/tree/ISO15693
2023-05-17 19:45:30 +03:00
gid9798
24e4c65221 some improvement and cleanup 2023-05-17 17:52:46 +03:00
MX
45ae0c097b Fix need saving message when all signals was removed 2023-05-17 17:51:25 +03:00
gid9798
075dfe8109 Revert "add tx 2"
This reverts commit cdf8daff86.
2023-05-17 17:48:05 +03:00
MX
e011c844de Update changelog 2023-05-17 17:29:08 +03:00
MX
88e47e9251 Fix crashes when deleting signals in Read mode 2023-05-17 17:24:14 +03:00
MX
90f18075cb Restore Rx indication after deletion after Memory is FULL
by @wosk / PR #464
2023-05-17 15:41:51 +03:00
MX
320d58ea8c Merge pull request #470 from clipboard1/dev
Moved pmkid on aps and channel to one section
2023-05-17 15:01:41 +03:00
MX
9069bb6f6e Update changelog and readme 2023-05-17 14:59:51 +03:00
MX
e0cb823ed0 what happened here, ctrl+c / ctrl+v? 2023-05-17 14:46:41 +03:00
MX
174c00a8e7 Atomo Custom buttons 2023-05-17 14:45:48 +03:00
MX
26a113292b CAME Atomo - Add manually support 2023-05-17 13:15:59 +03:00
MX
7fc8f6b3b8 Fix vscode example config 2023-05-17 01:27:24 +03:00
clipboard1
c10cef3336 Moved pmkid on aps and channel to one section
I think this solution looks better than two buttons for pmkid
2023-05-16 19:15:50 +05:00
MX
c2cf37145e Merge branch 'ofw-dev' into dev 2023-05-15 22:12:17 +03:00
gid9798
cdf8daff86 add tx 2 2023-05-15 22:11:18 +03:00
gid9798
3f33fe8cb0 add TX 2023-05-15 15:05:04 +03:00
hedger
9dedcd07b6 api: added lib/nfc/protocols/nfc_util.h (#2674) 2023-05-15 20:55:22 +09:00
MX
89ca69b111 Fix keyboard buffer issues
by @Willy-JL
2023-05-15 05:56:44 +03:00
MX
07c0889d10 Update changelog 2023-05-15 03:11:20 +03:00
MX
89c69ed622 Dont use temp str for manipulating text input
by @Willy-JL
2023-05-15 01:29:24 +03:00
MX
575f863942 Fix UART terminal crashes 2023-05-15 01:27:45 +03:00
gid9798
8c3fe81edd Preset logic 2023-05-14 23:23:18 +03:00
MX
62fa698e2d Merge branch 'ofw-dev' into dev 2023-05-14 20:38:24 +03:00
MX
d4bfc3f225 Fix debugging 2023-05-14 20:19:47 +03:00
あく
341cd5e860 [FL-3312] fix PIN retry count reset on reboot (#2671) 2023-05-14 16:04:03 +04:00
hedger
8d1f5b04b3 [FL-3317] fbt: allow strings for fap_version field in app manifests (#2672) 2023-05-14 20:49:52 +09:00
end-me-please
c496962f95 fix typo in FuriHalDebuging.md (#2667) 2023-05-14 15:12:30 +09:00
MX
523c63fec7 Update readme and changelog
unrandomize detect reader for now
2023-05-14 07:40:48 +03:00
MX
c2713eff87 New way of changing device name
Settings scene, char Validator, Idea -> by Willy-JL
Implemented by me

Kod plohoi, ochen plohoi, kto mozhet - sdelaite kak nado, esli smozhete :)
Ya luche varianta ne pridumal poka 4to
2023-05-14 05:38:00 +03:00
MX
bdc720ac7d Merge pull request #465 from gid9798/SubGhz_lib
SubGhz some improvements
2023-05-14 04:35:33 +03:00
MX
c0b3a18316 api 2023-05-14 04:27:25 +03:00
MX
43e5daded2 fix small bugs 2023-05-14 04:11:26 +03:00
MX
21d4dba03b Merge branch 'dev' into SubGhz_lib 2023-05-14 03:12:40 +03:00
MX
2efecc25a7 bump subbrute 2023-05-14 02:23:12 +03:00
MX
f08dd2fd03 Text Input improvements, added cursor and ability to set minimal length
thanks to WillyJL
2023-05-14 01:44:00 +03:00
gid9798
d87df3e6c2 Change custom btn sending logic 2023-05-14 01:34:43 +03:00
gid9798
71f48ea39e Keeloq and Star line remove duplicate code 2023-05-14 00:48:06 +03:00
gid9798
cb3d6f73ce Merge branch 'DarkFlippers:dev' into SubGhz_lib 2023-05-13 23:19:06 +03:00
gid9798
6b56de5c93 SubGhz some changes 2023-05-13 23:16:28 +03:00
gid9798
07b2f0109a SubGhz: keloq 2023-05-13 21:57:25 +03:00
gid9798
a74461d903 Removed duplicate code in transmitter.c 2023-05-13 16:55:35 +03:00
gid9798
23a24c42c1 SubGhz: Fix add manual Alutech AT 4N 2023-05-13 16:48:51 +03:00
gid9798
c0a26cf1eb SubGhz custom btn improved code readability some "if" optimization 2023-05-13 14:43:11 +03:00
MX
e5c2e8e5d7 Added sniff pmkid on selected aps from 0.10.4 update
by @clipboard1

https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/13/files
2023-05-13 00:42:29 +03:00
MX
5c259fa0e2 Set path just in case 2023-05-13 00:17:28 +03:00
MX
849f14e480 Bad BT plugin, Submenu locked elements, API updates, etc.
Thanks to WillyJL, ClaraCrazy, and XFW contributors
2023-05-13 00:14:22 +03:00
gid9798
8012f9cd44 Fix offset in some files 2023-05-12 23:38:09 +03:00
gid9798
fe212228e2 New SubGhz Remote GUI 2023-05-12 16:47:39 +03:00
MX
a7691b2d3b Fix merge issues 2023-05-11 17:57:17 +03:00
MX
de73ee8bfc Merge pull request #462 from gid9798/DecodeRAW_scenemanger
Using scene manager functions in DecodeRAW
2023-05-11 17:55:08 +03:00
MX
b2e55d7d84 Merge branch 'ofw-dev' into dev
:(
2023-05-11 17:47:14 +03:00
gid9798
ec7e6a0ac1 Using scene manager functions in DecodeRAW 2023-05-11 13:22:02 +03:00
あく
aa8a369e2a Rpc: add desktop service. Desktop: refactor locking routine. (#2665)
* Rpc: add desktop service
* Protobuf: sync to latest release. Desktop: rewrite PIN locking, finalize locking API
* Desktop: cleanup code a little bit
2023-05-11 19:50:17 +10:00
MX
9862876f06 SubGHz: Fix typos (#2661)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-05-11 12:10:20 +09:00
hedger
9914aa40bd [FL-3302] Part 2 of hooking C2 IPC (#2662) 2023-05-11 11:25:06 +09:00
MX
3881de74eb rename settings scene 2023-05-11 03:54:53 +03:00
MX
d5100476ac cleanup ext module settings 2023-05-11 03:50:55 +03:00
MX
a1fa5224a3 Infrared external output move out of debug and add power option 2023-05-11 03:15:15 +03:00
MX
654a622607 Move counter incr out of debug, change max value to 3
making it not that harmful if user don't understand what it does
2023-05-11 03:05:04 +03:00
MX
c4010a6c78 Update rfid fuzzer readme 2023-05-11 02:58:28 +03:00
MX
054245c980 Remove unneeded include 2023-05-11 02:32:53 +03:00
MX
02610abd40 Merge pull request #461 from gid9798/subghz_refactoring_step_by_step
SubGhz app refactoring
2023-05-11 02:28:26 +03:00
MX
bc93de0f03 remove unnecessary scene switch 2023-05-11 00:01:28 +03:00
MX
3531caaa0b Clean up some comments, rename is done 2023-05-10 23:48:47 +03:00
MX
b38a593c4f Remove this 2023-05-10 23:36:52 +03:00
MX
e7707b31f0 Do some TODOs 2023-05-10 23:28:09 +03:00
MX
a941ed8c2a Rename funcs 2023-05-10 23:12:50 +03:00
MX
3e3538b9bc Always free 2023-05-10 23:07:06 +03:00
MX
735fe31f3b Fmt and cleanup some "if"s in protocols 2023-05-10 22:56:56 +03:00
MX
cca6606c78 fix typos from ofw 2023-05-10 21:48:55 +03:00
gid9798
6f10990386 SubGhz: fix syntax & minor fixes 2023-05-10 13:21:42 +03:00
gid9798
88bd5aef40 Merge branch 'DarkFlippers:dev' into subghz_refactoring_step_by_step 2023-05-09 22:42:28 +03:00
gid9798
a3cf592f29 Minor fixes 2023-05-09 22:16:52 +03:00
gid9798
0019baaa00 SubGhz: simplify includes 2023-05-09 21:58:36 +03:00
gid9798
85d44c5f6c SubGhz: fix naming part 2 and 3 2023-05-09 21:54:56 +03:00
gid9798
5b447d0a56 SubGhz: refactoring 2023-05-09 21:44:53 +03:00
gid9798
e817a4cdba SubGhz: add function description 2023-05-09 21:38:25 +03:00
gid9798
def4ae395e SubGhz: refactoring 2023-05-09 21:20:35 +03:00
MX
1d2d05cfdf Fix merge issues 2023-05-09 20:24:43 +03:00
MX
02a22086a1 Update changelog and change mfkey category 2023-05-09 20:21:07 +03:00
gid9798
42a415e449 SubGhz: value get optimizations 2023-05-09 20:19:01 +03:00
gid9798
752a11ba26 SubGhz: refactoring RPC 2023-05-09 20:06:22 +03:00
gid9798
21cd94cc79 SubGhz: show error tx start 2023-05-09 19:50:01 +03:00
gid9798
c69b2086b0 SubGhz: refactoring 2023-05-09 19:33:45 +03:00
gid9798
d7f3b8a425 SubGhz: refactoring move txrx 2023-05-09 19:10:56 +03:00
MX
4693af74e7 Update API, remove direct calls of stream buffers 2023-05-09 18:44:17 +03:00
MX
face4bd3c7 Merge branch 'fz-dev' into dev 2023-05-09 18:28:46 +03:00
gid9798
9b3654c1f0 SubGhz: refactoring make subghz_radio.h look like in OFW 2023-05-09 18:24:38 +03:00
gid9798
8ae2cb1d32 SubGhz: refactoring 2023-05-09 18:24:25 +03:00
gid9798
a2fbe7fab8 SubGhz: refactoring 2023-05-09 17:30:01 +03:00
gid9798
4cbdbd9ef5 SubGhz: refactoring 2023-05-09 15:58:56 +03:00
gid9798
076f6785cb SubGhz: refactoring 2023-05-09 15:22:08 +03:00
gid9798
07203f0989 SubGhz: refactoring 2023-05-09 15:11:54 +03:00
gid9798
f71900694b SubGhz: refactoring 2023-05-09 13:34:54 +03:00
gid9798
b99d309feb SubGhz: moving "txrx" entity to a separate file 2023-05-09 12:07:36 +03:00
hedger
eebc6241b7 [FL-3302] ble: attempt to handle hardfaulted c2 (#2653)
* ble: attempt to handle hardfaulted c2
* MfKey32: nicer macros
* FuriHal: slightly different core2 hardfault message
* Update ReadMe

Co-authored-by: あく <alleteam@gmail.com>
2023-05-09 13:06:44 +09:00
Nathan Nye
d5403a089c Add Mfkey32 application (#2517)
* Add Mfkey32 application
* Fine tune RAM requirements, use FZ notification service API
* Fix PVS security warnings, fix issue with cracking keys on the FZ
* Prefer on-device or Flipper mobile app (seamless)
* Mfkey32: change app category to NFC
* Mfkey32: set target to f7 only
* Silence PVS false positives
* Correct PVS codes

Co-authored-by: あく <alleteam@gmail.com>
2023-05-09 10:45:59 +09:00
g3gg0.de
e1c6e78b2e added DigitalSequence and PulseReader (#2070)
* added DigitalSequence to chain multiple DigitalSignals
added PulseReader for hardware assisted digital signal sampling
* added send_time option to start a signal at a specific DWT->CYCCNT value
* fixed linter errors and undone function renaming
* fixed renaming
* flagged functions in api_symbols.csv
* allow gpio field to stay uninitialized in digital_signal_prepare_arr()
* fix test cases to match (expected) implementation
* pulse_reader: build as static library
Signed-off-by: g3gg0.de <git@g3gg0.de>
* fix starting level detection in pulse_reader
* added unit test for pulse_reader
* change pulse reader test timings to 1, 10 and 100 ms
* fine tuned timings for pulse_reader test
* pulse_reader_stop now deinits GPIO as recommended by @gornekich
* ran format_py
* pulse_reader: remove from API, allow to link with faps
Signed-off-by: g3gg0.de <git@g3gg0.de>
* remove unit test for pulse_reader again
* pulse_reader: add call to set GPIO pull direction
* make structures private, add C implementation of digital_signal_update_dma()
* digital_signal/pulse_reader: allow parameters for free to be NULL
* digital_signal: show unoptimized and optimized code for digital_signal_update_dma() next to each other
* pulse_reader: further optimize assembly code
* digital_signal: reduce code complexity of digital_signal_update_dma() by only reconfiguring DMA2
* digital_signal: remove assembly code, limiting the performance but increasing portability
* added recovery if the timer already expired
* digital_signal: fix memory leak
* digital_signal: keep lock until all DMA transfers have finished
* DigitalSequence: fix issues with concatenation of same levels and spurious bit flips
* DigitalSignal: use cyclic DMA buffer for sequences
* update api_symbols.csv
* Update api_symbols.csv for f18 target
* Patches from @gornekich to fix linter warnings.
* Remove some redundant if checks
* Remove some magic numbers and reformat.
* Remove forced terminating edge.

Signed-off-by: g3gg0.de <git@g3gg0.de>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: Tiernan Messmer <tiernan.messmer@gmail.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-05-09 09:55:17 +09:00
あく
f57f0efc48 Debug: revert cortex debug to lxml and drop DWT (#2651)
* Debug: revert cortex debug to lxml

* Debug: update PyCortexMDebug readme

* fbt: moved "debug" dir to "scripts" subfolder

* ufbt: added missing debug_other & debug_other_blackmagic targets; github: fixed script bundling

* lint: fixed formatting on debug scripts

* vscode: updated configuration for debug dir changes

---------

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
2023-05-09 03:31:44 +04:00
hedger
241b4ef6e4 [FL-3299] furi_crash: added C2 status; added fw-version gdb command (#2638)
* furi_crash: added C2 status
* debug: Added "fw-version" gdb command; vscode: updated configuration to use new command
* debug: added fw-info command to debug_other session
* Toolbox: versioned structure for Version
* debug: fw-version: no longer needs an ELF file loaded
* debug: flipperversion: removed unused variable
* debug_other: print running fw version

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-05-09 07:31:39 +09:00
MX
417343e3dd Merge branch 'fz-dev' into dev 2023-05-09 01:14:42 +03:00
hedger
268b88be0d [FL-3285] Removed STM32CubeWB module (#2608)
* libs: removed STM32CubeWB module; split cube into 3 submodules
* fixed f18 version
* fbt: options: fixed expected stack version
* pvs: updated for new paths
* fbt: ep: multithreaded submodule update
* libs: stm32cubewb: fixed duplicate include path; renamed to stm32wb; codeowners: updated paths; docs: updated paths
* pvs: updated paths
* libs: added cmsis_core from ARM sources, v.5.4.0, from https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/Core/Include
* Updated stm32wb_copro structure
* PVS: exclude cmsis core from analysis

---------

Co-authored-by: あく <alleteam@gmail.com>
2023-05-09 06:30:33 +09:00
gid9798
ee85541d2a SubGhz: refactoring subghz_scene_set_type.csubghz_scene_set_type.c 2023-05-08 21:55:51 +03:00
hedger
538f96f0ac [FL-3300] API version in UI (#2649)
* desktop, about: replaced commit# with API version
* scripts: storage: added approx speed for file uploads
* scripts: selfupdate: use folder name by default
* vscode: fixed broken get_blackmagic shell integration on *nix

Co-authored-by: あく <alleteam@gmail.com>
2023-05-08 20:11:23 +09:00
hedger
f7dd77795a ufbt: deploying sample ufbt automation for new apps; added source "ufbt -s env" for toolchain access (#2648) 2023-05-08 20:01:52 +09:00
MX
2b2be1789f Merge branch 'fz-dev' into dev 2023-05-07 22:25:56 +03:00
Perry Fraser
954780ed24 Fix storage.py exist_dir logic (#2639)
* Fix storage.py exist_dir logic. This method would return true if the given path existed as either a directory or
a file, which is what the plain exist method is for.
2023-05-07 22:40:38 +04:00
gid9798
e65a5e2b7c SubGhz: remove direct reading subghz->txrx->speaker_state 2023-05-06 17:56:10 +03:00
gid9798
1567225a64 SubGhz: remove direct reading subghz->txrx->rx_key_state 2023-05-06 17:47:49 +03:00
gid9798
1387d8d5d6 SubGhz: check load type file 2023-05-06 17:28:16 +03:00
gid9798
d8631d1489 SubGhz: remove direct reading subghz->lock 2023-05-06 17:19:02 +03:00
gid9798
c98e76f31e SubGhz: remove direct reading (hopper_state) 2023-05-06 17:02:32 +03:00
gid9798
cb8c77ee2c SubGhz: remove direct reading 2023-05-06 16:36:15 +03:00
gid9798
ff24bf6829 SubGhz: add SubGhzThresholdRssi 2023-05-06 02:00:26 +03:00
MX
1feb876a32 update changelog 2023-05-05 17:58:58 +03:00
MX
6b186622cb Merge branch 'fz-dev' into dev 2023-05-05 16:10:00 +03:00
MX
7ddde7e6ca Fuzzers remove excessive free's
thanks to @Willy-JL
2023-05-05 16:09:06 +03:00
あく
914129a0d9 [FL-3289] Various Furi/FuriHal bug fixes and improvements (#2637)
* Furi: properly handle thread free before TCB scrapping, add furi_free - more invasive version of free to memmgr. FuriHal: add DWT comparator api to cortex. Updater, RPC: refactor various thread shanenigans. Code cleanup.
* Rollback free macros and related changes
2023-05-05 21:40:55 +09:00
MX
b0b9e507e7 SubGHz combine FuriString allocs 2023-05-05 03:51:16 +03:00
MX
4e78367ec4 Merge branch 'fz-dev' into dev 2023-05-05 03:31:18 +03:00
MX
c36b788b2d Use COUNT_OF in mouse jiggler 2023-05-05 03:17:53 +03:00
MX
1f0c2c1266 SubGhz refactor merge pt 0 2023-05-05 02:09:21 +03:00
Sergey Gavrilov
ac05387803 [FL-3270] Loader refactoring, part 1 (#2593)
* Loader: menu part
* Settings: remove unused loader api
* Desktop: get loader from record_open
* CLI: remove unneeded loader api
* gitignore: ignore .old files
* Loader: now really a service
* Loader: working service prototype
* Loader: cli, system start hooks
* CI/CD: make happy
* Loader: autorun
* Loader: lock and unlock
* Loader: rearrange code
* Gui, module menu: fix memleak
* Updater test: add timeout
* added update timeouts and max run duration
* Github: revert updater test workflow changes
* Loader: less missleading message in info cli command

Co-authored-by: doomwastaken <k.volkov@flipperdevices.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-05-04 17:46:00 +03:00
Sergey Gavrilov
a7d1ec03e8 [FL-3270] Loader refactoring, part 1 (#2593)
* Loader: menu part
* Settings: remove unused loader api
* Desktop: get loader from record_open
* CLI: remove unneeded loader api
* gitignore: ignore .old files
* Loader: now really a service
* Loader: working service prototype
* Loader: cli, system start hooks
* CI/CD: make happy
* Loader: autorun
* Loader: lock and unlock
* Loader: rearrange code
* Gui, module menu: fix memleak
* Updater test: add timeout
* added update timeouts and max run duration
* Github: revert updater test workflow changes
* Loader: less missleading message in info cli command

Co-authored-by: doomwastaken <k.volkov@flipperdevices.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-05-04 12:48:13 +09:00
Skorpionm
d2ca67d261 [FL-3242] SubGhz: refactoring app (#2554)
* SubGhz: add SubGhzThresholdRssi
* SubGhz: remove direct reading of subghz-txrx-txrx_state
* SubGhz: remove direct reading subghz->txrx->hopper_state
* SubGhz: remove direct reading subghz->lock
* SubGhz: check load type file
* SubGhz: remove direct reading subghz->txrx->rx_key_state
* SubGhz: remove direct reading subghz->txrx->speaker_state
* SubGhz: refactoring subghz_scene_set_type.c
* SubGhz: moving "txrx" entity to a separate file
* SubGhz: show error tx start
* SubGhz: refactoring RPC
* SubGhz: value get optimizations
* SubGhz: fix name file
* SubGhz: add function description
* SubGhz: fix double back with a blocked transmission in this region and speacker, when a transmission is blocked in this region
* SubGhz: correct spelling
* SubGhz: better naming
* SubGhz: simplify includes

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-05-04 12:04:26 +09:00
MX
3a51b3f70c Update changelog 2023-05-03 21:58:07 +03:00
MX
6874b3b429 We don't use region provision so remove 00 from about screens 2023-05-03 21:53:44 +03:00
MX
9d58b492a8 Merge pull request #454 from amec0e/dev
Updated infrared assets
2023-05-03 20:21:02 +03:00
MX
1b72acd68e Merge pull request #452 from clipboard1/dev
Added numpad keyboard to HID app
2023-05-03 20:19:41 +03:00
MX
30f79f838e rename 2023-05-03 20:16:20 +03:00
MX
22c514575c Merge branch 'dev' into numpad 2023-05-03 20:08:57 +03:00
MX
d110a3ef26 Update wifi marauder version 2023-05-03 18:48:13 +03:00
MX
cae4790ef2 Merge branch 'fz-dev' into dev 2023-05-03 17:15:59 +03:00
Raymond Lucke
71e85ac367 Add HID mouse auto-clicker. (#2627)
* Add HID mouse auto-clicker.

* Add click rate adjustment to HID auto-clicker.

* Fix formatting.

* HidRemote: modify jiggler/clicker event filter and allow repeat to change click rate

---------

Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 15:38:09 +09:00
hedger
c3ececcf96 [FL-3174] Dolphin builder in ufbt; minor ufbt/fbt improvements (#2601)
* ufbt: added "dolphin_ext" target (expects "external" subfolder in cwd with dolphin assets); cleaned up unused code
* ufbt: codestyle fixes
* scripts: fixed style according to ruff linter
* scripts: additional cleanup & codestyle fixes
* github: pass target hw code when installing local SDK with ufbt
* ufbt: added error message for missing folder in dolphin builder
* scripts: more linter fixes
* sdk: added flipper_format_stream; ufbt: support for --extra-define
* fbt: reduced amount of global defines
* scripts, fbt: rearranged imports

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-05-03 14:48:49 +09:00
Nikolay Minaylov
015ab4a024 [#2591] BadUSB: command parser fix (#2607)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 13:39:14 +09:00
Skorpionm
59386f9fa9 WS: add protocol "Wendox W6726" (#2604)
* WS: add protocol  "Wendox"
* WS: add bat status
* WS: add CRC, refactoring
* WS: description added
* WS: fix name file
* WeatherStation: cleanup alien symbols

Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 13:15:47 +09:00
Eric Betts
dfbacd1a47 [#2612] Remove spaces in CSN(#2616)
Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 13:05:24 +09:00
hedger
c5b460b416 [FL-3260] Added API version to device info (#2611)
* hal: device_info: added API version to "firmware.api.major" & "firmware.api.minor"
* FuriHal: bump device info version

Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 12:58:59 +09:00
Lewis Westbury
5c09bc5b2d Gui: relax some asserts in view (#2623)
* Remove assertion preventing replacement of view input callback
* Gui: relax some asserts in view

Co-authored-by: あく <alleteam@gmail.com>
2023-05-03 12:33:30 +09:00
あく
23c946ef50 Move gauge calibration to separate header, add f18 calibration (#2622) 2023-05-03 06:08:41 +04:00
Georgii Surkov
238005890e [FL-3294] Fix TERMINFO on Linux systems (#2630)
* Fix TERMINFO on Linux systems
* Set TERMINFO_DIRS only on Linux
* Unset TERMINFO_DIRS if it was not set before
2023-05-03 00:56:25 +03:00
amec0e
dd6c031a31 Updated tv.ir
New additions, Added full sharp tv support. Reverted Vizio raw data change, will add this if needed
2023-05-02 21:00:24 +01:00
amec0e
79566b7fa3 Updated projectors.ir
New additions
2023-05-02 20:54:15 +01:00
amec0e
7ba96ad653 Updated fans.ir
New additions
2023-05-02 20:53:48 +01:00
amec0e
bf0e853413 Updated audio.ir
Updated last checked, no new additions
2023-05-02 20:53:25 +01:00
amec0e
259855e788 Updated ac.ir
New additions
2023-05-02 20:52:41 +01:00
clipboard1
11a39927ef Merge branch 'dev' of https://github.com/clipboard1/unleashed-firmware into dev 2023-05-02 22:25:33 +05:00
clipboard1
356db794b5 Added numpad keyboard 2023-05-02 22:25:05 +05:00
MX
2e162c1131 Replace QR code with good old link 2023-05-02 04:20:22 +03:00
MX
311cbf709c update changelog 2023-05-02 03:39:17 +03:00
MX
2852990566 Add sharp and vizio to ir database 2023-05-02 03:36:28 +03:00
MX
b801f70f3a OFW PR 2627: Add HID mouse auto-clicker
by rwl4
2023-05-02 03:01:50 +03:00
MX
e24cb944ff Temp fix desktop lock bug and update changelog 2023-05-02 02:38:42 +03:00
MX
fe6bf3c7d6 Revert some changes 2023-05-02 02:25:52 +03:00
MX
0ef37df4ae Update TOTP / run fbt format 2023-05-01 20:55:09 +03:00
MX
2eac821f7f Update readme 2023-05-01 20:53:09 +03:00
MX
f9e5ef2aa9 Merge pull request #450 from leo-need-more-coffee/dev
Add bumberduck
2023-05-01 20:47:48 +03:00
Лень :)
d01600ea0f Update application.fam 2023-05-01 20:46:27 +03:00
Лень :)
13a65d45a3 Update LICENSE 2023-05-01 20:46:10 +03:00
Лень :)
099f907972 Add files via upload 2023-05-01 20:39:37 +03:00
Лень :)
b65f666578 Delete applications/external/flipperzero-bomberduck directory 2023-05-01 20:38:57 +03:00
Лень :)
3b40696c9e Add files via upload 2023-05-01 20:37:25 +03:00
MX
a9e47454d5 Fix SWD Probe plugin GPIO pins state
Reset pins after exit
2023-05-01 16:17:47 +03:00
MX
512fe8aead Fix readme 2023-04-30 14:59:38 +03:00
MX
d1456929ec Merge remote-tracking branch 'origin/dev' into dev 2023-04-29 21:41:43 +03:00
MX
b86d155e8e Remove ko-fi 2023-04-29 21:41:09 +03:00
MX
999a2c7134 Merge pull request #447 from krolchonok/hid_refactor_unl
Hid refactor unl
2023-04-29 19:06:31 +03:00
ushastoe
947dd1b754 Change UP&DOWN swipe 2023-04-29 18:20:54 +03:00
ushastoe
5085a17bcb HID app refactor 2023-04-29 18:16:53 +03:00
Max Andreev
e42aec68c5 Disable ci/cd on release* branches (#2624) 2023-04-28 23:25:20 +09:00
MX
2aad416cc2 Merge pull request #443 from krolchonok/46-version-"how-to-install"
Update HowToInstall.md
2023-04-28 14:05:52 +03:00
MX
e87256e01f Update TOTP 2023-04-28 14:04:16 +03:00
MX
96375e8244 Version instead of branch 2023-04-28 14:00:40 +03:00
ushastoe
c0de75367f Update HowToInstall.md 2023-04-28 01:43:27 +03:00
ushastoe
7b21dd7082 Update HowToInstall.md 2023-04-28 01:41:03 +03:00
ushastoe
b31e955744 Update HowToInstall.md 2023-04-28 01:39:58 +03:00
ushastoe
41895118bd Update HowToInstall.md
46 version
2023-04-28 01:28:40 +03:00
MX
d85e097ee5 Fix ibutton fuzzer stop values 2023-04-27 21:45:30 +03:00
MX
6ed182013d Sync ibutton fuzzer code
PR with key updates from @team-orangeBlue
2023-04-27 21:12:02 +03:00
MX
1afa3916ac Update changelog 2023-04-27 20:21:04 +03:00
MX
de3ad734f9 Merge branch 'fz-dev' into dev 2023-04-27 17:10:34 +03:00
あく
408edb3e99 Keep HSI16 working in stop mode. (#2621) 2023-04-27 23:01:13 +09:00
MX
a2b2e486ea Update changelog, docs, readme 2023-04-27 04:02:00 +03:00
MX
5881ad9685 Merge pull request #441 from amec0e/dev
Updated infrared assets
2023-04-27 02:53:16 +03:00
MX
243edf7e13 Confirm when removing t5577 password
add extra scene
2023-04-27 02:40:33 +03:00
MX
6119d6e102 OFW PR 2616: Picopass: remove spaces in CSN
by bettse
2023-04-27 02:02:27 +03:00
MX
f967e75819 Merge remote-tracking branch 'flipperdevices/skorp/ws_add_wendox' into dev 2023-04-27 02:00:24 +03:00
MX
3b02dd316d Merge remote-tracking branch 'flipperdevices/astra/3284-mifare-classic-fix-read' into dev 2023-04-27 02:00:15 +03:00
Astra
102dd690b7 Fix emulating empty keys as 0s 2023-04-27 00:28:21 +03:00
Astra
0a32cd2528 I was outplayed by the C programming language 2023-04-27 00:27:57 +03:00
MX
f48a2713bc Add log files icon in wifi marauder 2023-04-27 00:18:12 +03:00
MX
10c4cd0f41 Update WifI marauder app
https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion/pull/11
2023-04-27 00:13:28 +03:00
MX
451ec9cba0 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-04-26 23:50:37 +03:00
MX
6c0c0bd0be Merge branch 'fz-dev' into dev 2023-04-25 23:30:44 +03:00
あく
0ec8fc4c55 FuriHal: use proper divider for core2 when transition to sleep, remove extra stop mode transition checks, cleanup code. Furi: proper assert and check messages. (#2615) 2023-04-26 00:11:42 +04:00
amec0e
a5f86b3025 Updated tv.ir
Updated "Last Checked", No new additions
2023-04-25 18:57:18 +01:00
amec0e
f682053174 Updated projectors.ir
Updated "Last Checked", No new additions
2023-04-25 18:57:02 +01:00
amec0e
b49314deb0 Updated audio.ir
Updated "Last Checked", No new additions
2023-04-25 18:56:44 +01:00
amec0e
3bb5763b1b Updated audio.ir
Updated "Last Checked", No new additions
2023-04-25 18:56:26 +01:00
amec0e
35d876b816 Updated ac.ir
Updated "Last Checked", No new additions
2023-04-25 18:56:09 +01:00
MX
ff45b425e3 Merge branch 'fz-dev' into dev 2023-04-25 20:16:32 +03:00
hedger
d70ba2b740 [FL-3286] Don't reboot on crash in debug builds (#2613)
* furi: never reboot on furi_crash in debug builds
* furi: crash info: added registers
* furi: check and assert optimization, split registers and stack info dump
* furi: macro uppercase

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-04-26 01:33:13 +09:00
SkorP
6b09dfca76 WS: fix name file 2023-04-25 11:40:50 +04:00
SkorP
9caedb422d WS: description added 2023-04-25 11:36:27 +04:00
SkorP
6a9bdeae3e WS: add CRC, refactoring 2023-04-25 11:22:35 +04:00
MX
30447d7660 Rename to make it fit on screen 2023-04-25 03:39:16 +03:00
MX
d7f9cbf9ca CI update args 2023-04-25 02:40:33 +03:00
MX
6271409e5a Allow locking without pin using Up menu on desktop 2023-04-25 02:09:29 +03:00
MX
ab669b26da Fix very old and funny subghz bugs
Fixed Frequency Ananyzer issues
Fixed read mode issues
Fixed re-inits in HAL
2023-04-25 01:42:20 +03:00
nminaylov
87a023c75d BadUSB: command parser fix 2023-04-25 01:41:30 +03:00
MX
afe109ce27 Merge branch 'fz-dev' into dev 2023-04-25 01:41:19 +03:00
hedger
1ef70c0bb4 [FL-3280] cubewb: downgraded to v1.15.0 (#2605)
* cubewb: downgraded to v1.15.0
* hal: updated f18 symbols to match LL
* hal: flash: use furi_hal_cortex_timer for timeouts
* scripts: fixed cube version validation from config file
* hal: flash: added 3 seconds timeout when waiting for C2 to unlock flash controller. On timeout, triggers furi_check
* nfc: fixed missing interrupt setup on multiple platformSetIrqCallback() invocations
* hal: gpio: don't trigger furi_check on furi_hal_gpio_add_int_callback() with same parameters
* Reverted NFC fixes - will be in a separate PR
* scripts: storage: fixed exception handler for paths
2023-04-24 16:19:36 +09:00
MX
8cb3b67295 Fix external radio SPI handlers 2023-04-24 01:56:43 +03:00
MX
69530cd50f RFID: More user-friendly RAW emulation
Made by Dan Caprita <dan@caprita.ro>

https://forum.flipperzero.one/t/electra-intercom/6368/43
2023-04-23 19:03:23 +03:00
hedger
02c4b6d7e2 scripts: storage: fixed exception handler for paths 2023-04-23 14:06:01 +03:00
MX
5d98d2703b Fix external subghz module 2023-04-23 02:21:10 +03:00
MX
a0597a9e6e Fix RFID Fuzzer and iButton Fuzzer Bugs 2023-04-23 01:57:38 +03:00
MX
ba0efda2aa hal: gpio: don't trigger furi_check on furi_hal_gpio_add_int_callback() with same parameters 2023-04-23 01:57:07 +03:00
MX
f693d4a8de Merge pull request #437 from gid9798/using_scene_manager
Using scene manager function
2023-04-23 01:14:11 +03:00
MX
05fab99f42 Merge remote-tracking branch 'flipperdevices/hedgetr/stack15' into dev 2023-04-23 00:46:39 +03:00
MX
082db67373 Revert "why?"
This reverts commit 1092cc92be.
2023-04-23 00:46:09 +03:00
hedger
963b19e2e0 nfc: fixed missing interrupt setup on multiple platformSetIrqCallback() invocations 2023-04-23 01:31:07 +04:00
hedger
10efb9590a scripts: fixed cube version validation from config file 2023-04-23 00:12:53 +03:00
MX
1092cc92be why? 2023-04-23 00:12:39 +03:00
hedger
ffae861bc2 hal: flash: added 3 seconds timeout when waiting for C2 to unlock flash controller. On timeout, triggers furi_check 2023-04-23 00:48:47 +04:00
hedger
a782a5ad29 scripts: fixed cube version validation from config file 2023-04-22 22:04:03 +04:00
SkorP
7aa6716892 WS: add bat status 2023-04-22 21:57:31 +04:00
hedger
d537e21c65 hal: flash: use furi_hal_cortex_timer for timeouts 2023-04-22 20:56:43 +03:00
hedger
b0fa913fa2 hal: flash: use furi_hal_cortex_timer for timeouts 2023-04-22 21:49:00 +04:00
hedger
3561f79cf4 cubewb: downgraded to v1.15.0 2023-04-22 20:42:27 +03:00
hedger
ad0db706c0 hal: updated f18 symbols to match LL 2023-04-22 21:38:40 +04:00
hedger
4671f8ca64 cubewb: downgraded to v1.15.0 2023-04-22 21:32:41 +04:00
SkorP
8a785993ed WS: add protocol "Wendox" 2023-04-22 21:03:44 +04:00
gid9798
47ece05592 using scene_manager`s function 2023-04-22 19:47:33 +03:00
gid9798
b46d9e09eb Revert "Fix add manually naming"
This reverts commit eb3a4bfa6e.
2023-04-22 17:42:41 +03:00
MX
c1292d08de Apply RFAL changes from OFW PR 2549 2023-04-22 17:28:55 +03:00
MX
3a2240f2e1 Merge pull request #436 from krolchonok/HowToInstall45
Update HowToInstall.md
2023-04-22 17:21:55 +03:00
MX
eb3a4bfa6e Fix add manually naming 2023-04-22 04:38:14 +03:00
MX
458979293d Merge pull request #433 from gid9798/combining_BFT/FAAC_scenes
Combining add manual scenes
2023-04-22 04:33:06 +03:00
MX
67c0c9fd73 Merge branch 'dev' into combining_BFT/FAAC_scenes 2023-04-22 04:27:14 +03:00
MX
cbbdf0f6de Update pictures 2023-04-22 04:25:05 +03:00
gid9798
f2a7172a84 Drop excess DOLPHIN_DEED 2023-04-21 16:17:59 +03:00
gid9798
40a5306ed4 Combining BFT/FAAC scenes 2023-04-21 16:10:08 +03:00
MX
7514bc8b49 Final updates 2023-04-21 15:55:06 +03:00
MX
634c37fb23 Update readme and changelog 2023-04-21 13:59:49 +03:00
MX
831fc9c361 Merge pull request #432 from krolchonok/ble_refactoring
some change hid_ble
2023-04-21 13:20:59 +03:00
ushastoe
1c65ec9ef2 some change
- add [beta] for YT Shorts
- fix pause click on like button
- fix slide screen
2023-04-21 11:36:17 +03:00
MX
e8bd435fe3 fw version in json 2023-04-21 09:46:48 +03:00
MX
7747f45be3 Fix null pointer dereference 2023-04-21 07:51:37 +03:00
MX
f0e866cb56 Fix add manually naming 2023-04-21 07:38:01 +03:00
MX
d92833284e Scroll improvements 2023-04-21 07:25:34 +03:00
MX
806b6d5a37 Merge pull request #429 from wosk/rf-date
SubGHz - Add date/time to history and files
2023-04-21 06:47:50 +03:00
MX
1bb3ab8715 New option to save signal names with timestamps 2023-04-21 06:46:10 +03:00
MX
0825db36ff Merge pull request #428 from Kami-no/dev
Keynote with vertical layout
2023-04-21 05:56:35 +03:00
Nikita Vostokov
15f204bbc5 Revert "SubGhz - Add date of signal to *.sub files header"
This reverts commit 67a457dd1f.
2023-04-21 05:54:39 +03:00
MX
2b6eee1848 move icons a bit, apply fbt format
add arrow showing upper side, its not clearly how you need to hold it, arrow helps a bit
2023-04-21 05:50:30 +03:00
Nikita Vostokov
67a457dd1f SubGhz - Add date of signal to *.sub files header 2023-04-21 04:26:41 +03:00
Nikita Vostokov
95e3b7d42b [SubGHz] Show receiving time of signal 2023-04-21 03:19:55 +03:00
Nikita Vostokov
fd40a77089 Add time of Rx SubGHz signal 2023-04-21 03:19:55 +03:00
Dmitry Zinin
19becd9985 Keynote with vertical layout 2023-04-20 23:18:45 +03:00
MX
57d9cdb3c4 Merge branch 'fz-dev' into dev 2023-04-20 16:08:09 +03:00
SG
8cfb37c12f Gui, module menu: fix memleak 2023-04-20 16:05:35 +03:00
hedger
4d015a1106 [FL-3271] cubewb: updated to v1.16.0 (#2595)
* cubewb: updated project to v1.16.0
* hal: updated api_symbols for f18
* FuriHal: add missing enterprise sleep and insomnia
* FuriHal: slightly more paranoic sleep mode

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-20 21:57:51 +09:00
MX
dd1a92803e Adding fallback Just in case 2023-04-20 01:24:04 +03:00
MX
40e435a961 Kostily and velosipedy
!!! Needs to be re-done in proper way after ofw subghz refactoring merge
2023-04-19 19:19:26 +03:00
MX
2de476b11d Merge branch 'fz-dev' into dev 2023-04-19 17:03:56 +03:00
hedger
3932503660 [FL-3243] github: testing SDK with ufbt action (#2581)
* github: testing SDK with ufbt action
* github: also build apps with ufbt
* github: fixed dir lookup for ufbt
* ufbt: checks for compatibility on app discovery
* github: Conditional app skip for ufbt
* github: fixed app build flow with ufbt
* extra debug
* github: lint: message capture
* github: testing different output capture method for linters
* shorter version of status check
* github: updated comment actions to suppress warnings
* Reverted formatting changes

Co-authored-by: あく <alleteam@gmail.com>
2023-04-19 20:08:13 +09:00
Astra
e0fa2e7b12 [FL-3089] Raw RFID documentation (#2592)
Co-authored-by: あく <alleteam@gmail.com>
2023-04-19 18:47:01 +09:00
Astra
74fe003f8b [FL-3171] Introduce stealth mode and auto-selective lock (#2576)
* Introduce stealth mode and auto-selective lock
* Stealth mode status bar icon
* Review fixes
* Fix icon disappearing after reboot
* Support overriding stealth mode
* FuriHal: correct reserved space size in RTC SystemReg

Co-authored-by: あく <alleteam@gmail.com>
2023-04-19 18:33:23 +09:00
MX
7dfae0fb61 Just in case 2023-04-19 12:32:23 +03:00
MX
c6e5ca1fec Fix keeloq custom buttons bug
When you receive couple signals on read screen and open last one it was replacing its button with first one received
2023-04-19 11:51:08 +03:00
Astra
2c7eb53cac [FL-2505] Active RPC session icon (#2583)
* Active RPC session icon
* Add RpcOwner, don't show the RPC icon when the session was started from BLE
* Fix rpc_test and f18 api
* Bump API version

Co-authored-by: あく <alleteam@gmail.com>
2023-04-19 17:30:26 +09:00
MX
059053b9b8 SubGHz Remote add Alutech AT4N Support
Fix null pointer dereference
2023-04-18 22:16:29 +03:00
MX
ab921a6f0d Update changelog 2023-04-18 15:03:09 +03:00
MX
4a03e12636 Merge pull request #421 from amec0e/dev
Updated infrared assets
2023-04-18 14:42:16 +03:00
MX
198e67b1fc Merge pull request #425 from PhoenixSheppy/patch-1
Flip slashes for Windows builds (Backslash -> Forward Slash)
2023-04-18 14:41:55 +03:00
MX
de24d6dc14 Merge branch 'fz-dev' into dev 2023-04-18 14:40:24 +03:00
あく
f68c3b2a65 [FL-3264] Various stop mode fixes (#2584)
* BleGlue: log hci_cmd_resp invocation
* BleGlue: increase BleHciDriver stack size
* ble hid app: increase stack
* ble: comment unnecessary hci reset
* BleGlue: stricter checks in communication with core2, cleanup code
* Furi: enter insomnia when executing from RAM
---------
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2023-04-18 21:38:35 +10:00
MX
a304e9c3fa Revert "Revert Deep Sleep due to BLE issues and other random freezes"
This reverts commit addf909287.
2023-04-18 14:35:32 +03:00
MX
d1df16a2bf Improve wifi marauder keyboard
Port uart terminal keyboard into wifi marauder
2023-04-18 14:15:04 +03:00
Jacob Witt
62da755431 Flip slashes for Windows builds (Backslash -> Forward Slash)
Tried building this myself using these directions, kept getting errors.

Flipped the backslash to a forward slash, and got a successful build. 🤷‍♂️
2023-04-17 20:38:18 -05:00
MX
2eafc0ddff Merge branch 'fz-dev' into dev 2023-04-17 12:50:22 +03:00
Eric Betts
de02a0a25a [#2589] Correctly aborts when correct key is found (#2590) 2023-04-17 14:36:15 +09:00
MX
1a17699356 Improve nero radio encoder timings 2023-04-16 05:02:36 +03:00
amec0e
591a36246f Updated audio.ir
New additions
2023-04-14 22:32:32 +01:00
amec0e
59c87c819a Updated fans.ir
New additions
2023-04-14 22:07:40 +01:00
amec0e
0717061212 Updated audio.ir
New additions
2023-04-14 22:07:16 +01:00
amec0e
0f48a14181 Updated ac.ir
new additions
2023-04-14 22:06:55 +01:00
amec0e
a81ba240be Updated tv.ir
Updated last checked
2023-04-14 21:53:12 +01:00
amec0e
3ac478dfda Updated projectors.ir
new additions
2023-04-14 21:52:38 +01:00
amec0e
c1fc152251 Updated fans.ir
New additions
2023-04-14 21:52:07 +01:00
amec0e
3fc43e8ebd Updated audio.ir
Updated last checked
2023-04-14 21:51:28 +01:00
amec0e
ab5364232f Updated ac.ir
New additions
2023-04-14 21:50:53 +01:00
MX
8a468fccf0 Nero Radio 57bit experimental support
+ encoder improvements and decoder changes

Please report if you find any issues with old 56bit systems that was working before this change!
2023-04-14 23:44:18 +03:00
MX
afab1bdaad SubGhz - Temp Fix RAW recording and reading
and remove unused file
2023-04-14 23:37:20 +03:00
MX
addf909287 Revert Deep Sleep due to BLE issues and other random freezes
Waiting for proper fix
2023-04-14 14:45:35 +03:00
MX
0f6c2bff06 Update changelog, disable old app 2023-04-14 04:04:43 +03:00
MX
731c752e94 Update changelog 2023-04-14 03:41:58 +03:00
MX
3191b32708 Youtube shorts remote, swap tiktok control buttons 2023-04-14 03:35:42 +03:00
MX
bd199c63ab Merge pull request #420 from krolchonok/fix-hid_ble
refactoring HID_BLE
2023-04-14 02:19:13 +03:00
MX
3c4cbf2a05 Merge pull request #416 from p0ns/gps-uart-baudrate-array
Implements an array for baudrates on GPS UART app
2023-04-14 02:11:44 +03:00
ushastoe
21b7df9ab7 refactoring
-fix TikTok Controller
-fix icon in Mouse
2023-04-14 01:59:16 +03:00
MX
7922e3bb16 docs and changelogs 2023-04-14 00:09:48 +03:00
MX
c7637a0fda Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-04-13 21:20:29 +03:00
MX
6b70e37ae3 Merge branch 'fz-dev' into dev 2023-04-13 20:25:26 +03:00
MX
9ede95954b fbt format 2023-04-13 19:44:03 +03:00
Georgii Surkov
37fb330b36 [FL-3226] Deep Sleep Idle (#2569)
* Improve RNG error handling
* Sync RTC shadow registers on Stop mode exit
* Implement working STOP2 mode
* Fix formatting
* FuriHal: disable SWD pins if debug is disabled
* Power: cleanup battery info view, handle zero current report from gauge
* Fbt: add command line argument for extra global defines
* FuriHal: cleanup debug defines in power and os, drop deep_insomnia counter.
* Add a setting to disable deep sleep
* Clean up furi_hal_power
* FuriHal,FapLoader,Debug: implement debug in stop mode, workaround resume in stop
* FuriHal: document OS and power subsystems debugging
* Furi: enable debug interface on crash

---------

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-14 00:47:38 +10:00
MX
39186004cc Update UART terminal
https://github.com/cool4uma/UART_Terminal
2023-04-12 19:42:24 +03:00
MX
0a844e0b62 Merge branch 'fz-dev' into dev 2023-04-12 14:51:58 +03:00
あく
5d7bdca835 FuriHal: pwr pulls for some pins (#2579) 2023-04-12 21:45:13 +10:00
Skorpionm
33e8bae78b Bugfix: ISP Programmer and SubGhz (#2574)
* AVR_ISP: fix NULL pointer dereference
* SubGhz: double back with a blocked transmission in this region
* SubGhz: fix speaker, when a transmission is blocked in this region
* SubGhz: fix speaker
* SubGhz: return region
* AVR Flasher: cleanup code

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-12 15:07:05 +09:00
p0ns
206eb7946b Implements an array for baudrates 2023-04-10 20:37:57 -03:00
SkorP
243fbfc19a AVR_ISP: fix NULL pointer dereference 2023-04-10 19:57:15 +03:00
MX
c2fa8a2b18 Revert "Revert changes due to Null pointer dereference"
This reverts commit 8f752b7eee.
2023-04-10 19:57:02 +03:00
gornekich
7ac7b70884 [FL-3241] NFC disable EMV support (#2571)
* nfc: remove read emv from extra actions
* nfc: remove read emv

Co-authored-by: あく <alleteam@gmail.com>
2023-04-10 23:51:55 +08:00
MX
8f752b7eee Revert changes due to Null pointer dereference 2023-04-10 18:47:20 +03:00
MX
93035f07aa Merge branch 'fz-dev' into dev 2023-04-10 18:41:51 +03:00
MX
114e8d5b6a Merge branch 'fz-dev' into dev 2023-04-10 18:41:22 +03:00
hedger
b9ccb274a7 ufbt: project & debugging updates (#2572)
* ufbt: removed warning in "channel=dev" update mode
* ufbt: removed API version warning; added get_blackmagic & get_apiversion targets
* ufbt: updater project template to include blackmagic & jlink targets
* ufbt: project template: fixes & updates
* ufbt: project template: added config update shortcut
* sdk: using fixed names for file components
2023-04-11 00:46:22 +10:00
MX
4c7fa05bfe Add alutech table to enviroment alloc and free 2023-04-10 02:55:16 +03:00
MX
c2997bb1fc Trying to fix button issues in sbughz remote 2023-04-09 23:56:41 +03:00
MX
d8378e6819 SubGHz: Fix keyboard lock 2023-04-07 11:49:10 +03:00
Skorpionm
6cc5f30c84 Fix gpio state isp programmer (#2567)
* ISP: fix state gpio ISP Programmer
* WS: delete string debug

Co-authored-by: あく <alleteam@gmail.com>
2023-04-07 11:02:29 +08:00
MX
4adcc763e5 Update changelog 2023-04-07 01:08:43 +03:00
MX
5a7cddfb69 revert changes / update changelog 2023-04-07 00:07:12 +03:00
MX
b8dba0fd0c Update changelog 2023-04-06 23:56:48 +03:00
MX
9de6b6355e format 2023-04-06 23:50:34 +03:00
SkorP
b9bc34afbf WS: delete string debug 2023-04-06 23:50:14 +03:00
SkorP
bf29f55205 ISP: fix state gpio ISP Programmer 2023-04-06 23:50:00 +03:00
hedger
a5a95847ea scripts: sconsdist: added stub file artifact for older ufbt (#2568)
* scripts: sconsdist: added stub file artifact for older ufbt
* scripts: sconsdist: not creating dummy SDK archive
2023-04-06 23:49:28 +03:00
MX
011c0b1914 Revert nfc changes too 2023-04-06 23:45:35 +03:00
MX
a116dbc358 Revert checks temporarily 2023-04-06 23:25:30 +03:00
hedger
89161a7a1e scripts: sconsdist: added stub file artifact for older ufbt (#2568)
* scripts: sconsdist: added stub file artifact for older ufbt
* scripts: sconsdist: not creating dummy SDK archive
2023-04-07 05:37:12 +10:00
あく
0d8518d31d [FL-3232] FuriHal: fix gpio naming and add explicit pulls for vibro, speaker and ir_tx (#2565)
* FuriHal: fix gpio naming and add explicit pulls for vibro, speaker and ir_tx
* Github: workflow event debug print
* Github: proper PR head commit SHA extraction in get_env.py
2023-04-06 19:06:19 +10:00
MX
2e32d716aa Update changelog 2023-04-06 07:41:06 +03:00
MX
51d52c213b Comment debug logs back
just in case, to avoid extra calls while reading flash
2023-04-06 07:28:19 +03:00
MX
8aed2375f3 Merge branch 'fz-dev' into dev 2023-04-06 07:22:53 +03:00
MX
53f6ae7a39 Fix after-merge issues 2023-04-06 07:20:56 +03:00
MX
aac7654ca3 Merge branch 'fz-dev' into dev 2023-04-06 07:14:48 +03:00
Skorpionm
d1ad924216 [AVR_ISP]: add AVR ISP Programmer FAP (#2475)
* [AVR_ISP]: add AVR ISP Programmer FAP
* [AVR_ISP]: add auto detect AVR chip
* [AVR_ISP]: fix auto detect chip
* [AVR_ISP]: fix fast write flash
* AVR_ISP: auto set SPI speed
* AVR_ISP: add clock 4Mhz on &gpio_ext_pa4
* AVR_ISP: fix "[CRASH][ISR 4] NULL pointer dereference" with no AVR chip connected
* AVR_ISP: add AVR ISP Reader
* AVR_ISP: add read and check I32HEX file
* AVR_ISP: add write eerom, flash, fuse, lock byte
* AVR_ISP: add gui Reader, Writer
* Github: unshallow on decontamination
* AVR_ISP: move to external
* API: fix api_symbols
* AVR_ISP: add wiring scene
* GUI: model mutex FuriMutexTypeNormal -> FuriMutexTypeRecursive
* AVR_ISP: add chip_detect view
* AVR_ISP: refactoring gui ISP Programmer
* AVR_ISP: add gui "Dump AVR"
* AVR_ISP: add gui "Flash AVR"
* AVR_ISP: fix navigation gui
* GUI: model mutex FuriMutexTypeRecursive -> FuriMutexTypeNormal
* AVR_ISP: fix conflicts
* AVR_ISP: fix build
* AVR_ISP: delete images
* AVR_ISP: add images
* AVR_ISP: fix gui
* AVR_ISP: fix stuck in navigation
* AVR_ISP:  changing the Fuse bit recording logic
* AVR_ISP: fix read/write chips with memory greater than 64Kb
* AVR_ISP: fix auto set speed SPI
* AVR_ISP: fix gui
* ISP: switching on +5 volts to an external GPIO

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-06 12:13:30 +08:00
Astra
b4ceb55fd2 [FL-2524] Graphics cleanup and icon rotation (#2561)
* Canvas with rotation
* Full icon rotation, cleanup of unused resources
* F18 API update
* Bitmap draw cleanup
* More cleaning up
* Migrate recovery and DFU to canvas
* Make the internal draw function static
* Remove all calls to u8g2_DrawXBM

Co-authored-by: あく <alleteam@gmail.com>
2023-04-06 11:36:12 +08:00
hedger
a91d319839 [FL-3162] Moved ufbt to fbt codebase (#2520)
* scripts: moved ufbt code
* ufbt: fixed tool path
* ufbt: fixed linter/formatter target descriptions
* scripts: ufbt: cleanup
* fbt: moved fap launch target to tools; ufbt fixes
* fbt: fixed missing headers from SDK
* ufbt: removed debug output
* ufbt: moved project template to main codebase
* ufbt: fixed vscode_dist
* ufbt: path naming changes
* fbt: error message for older ufbt versions
* ufbt: docs fixes
* ufbt: fixed build dir location
* fbt: fixes for extapps objcopy
* fbt: extapps: removed extra debug output; fixed formatting
* ufbt: handle launch target for multiple known apps
* ufbt: dropping wrapper; linter fixes
* ufbt: fixed boostrap path
* ufbt: renamed entrypoint
* ufbt: updated vscode config
* ufbt: moved sconsign db location
* ufbt: fixed sconsign path
* fbt: SDK builders rework
* fbt: reworked sdk packaging
* ufbt: additional checks and state processing
* ufbt: fixed sdk state file location
* dist: not packaging pycache
* dump commit json content
* Github: more workflow debug prints
* Github: fix incorrect commit meta extraction in get_env.py
* ufbt, fbt: changed SConsEnvironmentError->StopError
* fbtenv: no longer needs SCRIPT_PATH pre-set
* ufbt: fixed sdk state check
* scripts: exception fixes for storage.py
* scripts: fbtenv: added FBT_TOOLCHAIN_PATH for on Windows for compat
* ufbt: app template: creating .gitkeep for images folder
* ufbt: app template: fixed .gitkeep creation
* docs: formatting fixes for AppManifests; added link to ufbt
* fbt: added link to PyPI for old ufbt versions
* sdk: fixed dir component paths

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-06 10:44:37 +08:00
Sergey Gavrilov
8a021ae48c [FL-3224] SD Driver: do not cache sd status. (#2560)
* SD Driver: do not cache sd status.
* SD Driver: fix status getter

---------

Co-authored-by: あく <alleteam@gmail.com>
2023-04-06 10:26:33 +08:00
あく
2a26680acb Furi: more gpio checks in HAL (#2549)
* Furi: more gpio checks in HAL
* Nfc: do not spawn service thread if it is already spawned

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2023-04-06 10:19:39 +08:00
MX
9e74ca3442 Trying to fix telegram dev build message issues 2023-04-05 23:51:20 +03:00
MX
563ec6c2ab Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-04-05 22:45:27 +03:00
MX
3cdb05364b AnMotors AT4 - Add manually fixes
Fix serial first two numbers to 47 - Just in case
Looks like they are same for all remotes (may be incorrect)
2023-04-05 17:44:56 +03:00
MX
a938b4ea18 Merge branch 'fz-dev' into dev 2023-04-05 16:22:59 +03:00
Anton Chistyakov
4c488bd970 Fixing parsing troika number (#2536)
Co-authored-by: あく <alleteam@gmail.com>
2023-04-05 12:16:20 +08:00
MX
2b590f323a Merge pull request #410 from gid9798/starline_ignore
StarLine ignore option
2023-04-05 00:56:09 +03:00
MX
70eefe6de3 Fix 2023-04-05 00:52:52 +03:00
MX
85aabe7c0c Merge branch 'dev' into starline_ignore 2023-04-05 00:15:59 +03:00
gid9798
1923c15907 StarLine ignore 2023-04-04 22:42:55 +03:00
MX
ef9dd5975b Update UART Terminal
https://github.com/cool4uma/UART_Terminal/tree/main
2023-04-04 22:02:58 +03:00
MX
61ec8818db fbt format 2023-04-04 21:59:05 +03:00
MX
b122db27cc Merge pull request #407 from kallanreed/feature/ir_scope
Add ir_scope app.
2023-04-04 21:56:00 +03:00
MX
3b7b48be4a Fix Repeat in subghz remote 2023-04-04 17:38:33 +03:00
MX
d4b32dc143 Update submodule link 2023-04-04 13:50:52 +03:00
MX
2fe4508db8 Fix repeats 2023-04-04 13:37:50 +03:00
MX
862f89a57c Fix "Repeat" bugs 2023-04-04 13:32:05 +03:00
MX
bb8e1d8ee2 Merge branch 'fz-dev' into dev 2023-04-04 13:07:38 +03:00
Skorpionm
494002505e WS: fix protocol TX141TH-BV2 (#2559)
Co-authored-by: あく <alleteam@gmail.com>
2023-04-04 12:37:54 +08:00
Leo Smith
efc52ab469 BdUSBadded WAIT_FOR_BUTTON_PRESS functionality (#2544)
Co-authored-by: p4p1 <p4p1@vivaldi.net>
Co-authored-by: あく <alleteam@gmail.com>
2023-04-04 11:40:19 +08:00
Eric Betts
f98ac4c48a Add more detail to saved info screen (#2548)
* Add more detail to saved info screen
* PR feedback
* Format sources and add pvs temp files to gitignore

Co-authored-by: あく <alleteam@gmail.com>
2023-04-04 11:21:43 +08:00
kallanreed
95bd038d8a Add ir_scope external app. 2023-04-03 17:40:16 -07:00
MX
b9c253e4c2 Update changelog 2023-04-02 01:29:43 +03:00
MX
3d5701614f AVR ISP enable 5v power on start 2023-04-02 01:11:23 +03:00
MX
dce5bfd723 OFW PR 2536: Fixing parsing troika card number
by @achistyakov

we tested on regular cards, reading is not broken, so this pr should not break anything
2023-04-02 01:11:05 +03:00
MX
6b7b95e888 Merge pull request #405 from gid9798/custom-buttons
Unification of custom buttons
2023-04-01 22:08:04 +03:00
MX
cb12369b1c Merge branch 'dev' into custom-buttons 2023-04-01 21:59:22 +03:00
MX
656e328a55 fbt format 2023-04-01 21:53:19 +03:00
MX
52944370e6 OFW PR 2548: Picopass Add more detail to saved info screen
by https://github.com/bettse
2023-04-01 21:48:04 +03:00
MX
aaeb0278b1 OFW PR 2544: added WAIT_FOR_BUTTON_PRESS functionality to badusb
by @p4p1

merging before OFW, more testing needed!
2023-04-01 21:43:42 +03:00
MX
bd78c3b3ea OFW PR 2475: AVR ISP Programmer FAP by @Skorpionm
merging before OFW, more testing needed!
2023-04-01 21:40:37 +03:00
MX
01719eceb1 oh i forgot to remove logs 2023-04-01 21:38:15 +03:00
gid9798
5603ed7ebb Transferring and combining the functionality of "custom buttons" into a separate file. 2023-04-01 21:37:04 +03:00
MX
7b1d7904c1 Beninca / Allmatic support 2023-04-01 21:36:59 +03:00
MX
f0d94e2757 Update changelog 2023-04-01 17:47:55 +03:00
MX
8a21b7c5a1 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-04-01 17:45:52 +03:00
MX
d4a20bc37a Merge branch 'fz-dev' into dev 2023-04-01 17:41:05 +03:00
MX
d207e3f889 Fix msgs 2023-04-01 17:40:46 +03:00
hedger
f192ccce2c FatFS: use rtc for timestamping (#2555)
* fatfs: use rtc
* fatfs: removed duplicate get_fattime declaration
* pvs: fixed warnings for fatfs timestamp
* fatfs: fixed seconds packing
* FuriHal: critical section around RTC datetime access
* FatFS: remove unused configration defines, update documentation
* FuriHal: checks instead of assets in RTC

---------

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-04-01 23:50:30 +10:00
Sergey Gavrilov
ae3a3d6336 RPC: increase max message size (#2543)
* RPC: increase max message size
* RPC: do not use magic numbers
2023-03-31 16:15:15 +09:00
MX
e7cada7ac7 Improve type guessing by bits 2023-03-30 18:46:13 +03:00
MX
cae1a6cc08 SubGHz: ScherKhan more informative messages instead of "Unknown"
may be not correct, because we guessing type by bits
2023-03-30 04:51:52 +03:00
MX
37bacdd83d GPS NMEA -> Ability to see speed in Km/h
Use right button to switch between modes
2023-03-30 03:58:22 +03:00
MX
e381951ecc Fix SL 72bit false detections 2023-03-30 03:57:27 +03:00
MX
bac1859432 Update changelog 2023-03-30 03:29:58 +03:00
MX
b5ed26ad70 Move multiple func calls into one var 2023-03-30 03:09:39 +03:00
MX
fe6d44d273 Show external CC1101 in weather station and POCSAG Pager apps 2023-03-30 03:00:00 +03:00
MX
9382ed5451 Improve CI/CD messages for tg and discord dev build channels 2023-03-30 02:45:40 +03:00
MX
910e4f3217 Improve GPS NMEA UART plugin, update changelog 2023-03-30 02:22:01 +03:00
MX
fdcec4315a Merge pull request #404 from amec0e/dev
Updated IR Assets
2023-03-29 15:17:24 +03:00
amec0e
b7b4bc7fab Updated tv.ir
Updated last checked
2023-03-29 12:50:07 +01:00
amec0e
70a91aff40 Updated projectors.ir
Updated last checked
2023-03-29 12:49:43 +01:00
amec0e
e3c4a4b47f Updated fans.ir
updated last checked
2023-03-29 12:49:18 +01:00
amec0e
33b12d26cc Updated audio.ir
2 new additions
2023-03-29 12:48:46 +01:00
amec0e
b03018965a Updated ac.ir
Updated last checked
2023-03-29 12:48:17 +01:00
MX
81bee794f8 Merge pull request #403 from gid9798/clear-code-in-add-manual
Clear code in "add manual" scene
2023-03-29 04:06:51 +03:00
MX
ae3481ef6c Merge branch 'fz-dev' into dev 2023-03-28 22:44:35 +03:00
gid9798
e0928432ef Clear code in "add manual" scene 2023-03-28 11:40:00 +03:00
Eric Betts
0161d49d80 Elite progress (#2481)
* WIP: builds
* can read standard
* Test standard picopass dictiony during attack
* correctly save diversified key
* read card on success
* more logs
* update file location
* Call setup methods
* backbutton and attempt at skip
* fixed skip
* remove found key state
* rename dictionary attack
* move notification
* center button back to start menu
* wait for card
* Picopass: proper integer formatting
* Picopass: even more proper integer formatting
* remove nextState

Co-authored-by: あく <alleteam@gmail.com>
2023-03-28 17:21:14 +09:00
Sergey Gavrilov
8b2dfea925 Improved thread lifecycle (#2534)
* Core, Thread: mark thread to join from prvDeleteTCB
* USB HAL: move vars to MEM2
* Core, Thread: cleanup sources
* Cli: add magic delays on rx pipe error, prevent cli from consuming processor time
* Furi: update thread documentation

Co-authored-by: あく <alleteam@gmail.com>
2023-03-28 16:34:49 +09:00
Sergey Gavrilov
3617ad33e4 View Model: recursive mutex (#2532)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-28 15:31:21 +09:00
MX
35442d14e2 Revert "Merge pull request #400 from Pinball3D/patch-1"
This reverts commit 4d21e23de9.
2023-03-28 05:50:53 +03:00
MX
4d21e23de9 Merge pull request #400 from Pinball3D/patch-1
Update subghz_remote_app.c
2023-03-28 05:43:56 +03:00
MX
5340ebe9ab Update changelog 2023-03-28 04:51:30 +03:00
MX
85d3ecb729 Update Wifi marauder 2023-03-28 04:21:53 +03:00
MX
74ec9760da Update readme, docs, changelog 2023-03-28 03:41:27 +03:00
MX
bb600218b6 Alutech AT4N + AN-Motors AT4 - add manually 2023-03-28 02:32:35 +03:00
MX
ce430ff7f6 Remove debug, change aprimatic default button 4 2023-03-28 01:58:35 +03:00
MX
0f06991391 Aprimatic add manually 2023-03-27 23:27:15 +03:00
MX
438664f5da Merge branch 'fz-dev' into dev 2023-03-27 23:11:31 +03:00
MX
130181614a Aprimatic emulation support testing
thats was hard!
2023-03-27 23:10:45 +03:00
Ikko Eltociear Ashimine
27341fc193 Fix typo in fbt.md (#2539)
availabe -> available

Co-authored-by: あく <alleteam@gmail.com>
2023-03-27 16:39:24 +09:00
Astra
ae9659d32d [FL-3193] Additional checks before invalidating the key (#2533) 2023-03-27 16:28:13 +09:00
MX
001e00d84a fbt format, aprimatic fixes 2023-03-26 14:59:21 +03:00
Pinball3D
5b39e80f6a Update subghz_remote_app.c
Add Back Button Functionality. Hold back button brings you to menu if there is a config for it there. If there is no config, press back brings you to menu
2023-03-25 16:11:44 -04:00
MX
6e507df2b9 Update readme and changelog 2023-03-25 07:44:40 +03:00
MX
74e928eb00 Merge pull request #398 from Willy-JL/fix-pocsag-overlap
Fix POCSAG pager RIC: text repetition and overlap
2023-03-25 07:43:32 +03:00
MX
22406f8aca MF Classic dict - Fix key delete, now works properly 2023-03-25 07:04:28 +03:00
Willy-JL
474897d644 Fix POCSAG pager RIC: text repetition (#172) 2023-03-25 03:36:27 +00:00
Astra
5391b694d1 Additional checks before invalidating the key 2023-03-24 21:32:07 +03:00
MX
6a29984e18 Merge branch 'fz-dev' into dev 2023-03-24 16:46:51 +03:00
Georgii Surkov
fad24efdf0 [FL-3188] Fix crash when emulating a DSGeneric key (#2530) 2023-03-24 09:26:43 +09:00
Georgii Surkov
b11161abb0 Fix crash when emulating a DSGeneric key 2023-03-24 01:19:38 +03:00
MX
2ff07a0b54 fix folders 2023-03-23 00:06:45 +03:00
MX
831999f5e1 Update extra pack links 2023-03-22 23:52:34 +03:00
MX
2bb704b6be Merge branch 'fz-dev' into dev 2023-03-22 23:22:54 +03:00
MX
4d7232d5ed Update changelog 2023-03-22 23:22:18 +03:00
Shukai Ni
9a14699aa0 Fix relative links in .md files (#2528)
Fixed some incorrect relative link, which caused 404 error when viewing in GitHub.
2023-03-23 05:19:07 +09:00
MX
73c7dce45a Merge pull request #395 from Willy-JL/ignore-api-mismatch
Fap loader add option to ignore api mismatch
2023-03-22 23:13:48 +03:00
Willy-JL
5ab574d7f2 Fap loader add option to ignore api mismatch 2023-03-22 20:01:52 +00:00
MX
9165b819f4 fix merge issues 2023-03-22 22:04:04 +03:00
MX
6057262c18 update submodule 2023-03-22 21:15:45 +03:00
MX
8002c6465d up 2023-03-22 21:13:59 +03:00
MX
795c8eeef7 Merge branch 'fz-dev' into dev 2023-03-22 21:13:39 +03:00
あく
7bf0a4786c [FL-3152] Screen streaming improvements (#2498)
* Rpc: reserve some bandwidth when screen streaming
* Move furi_hal_compress to toolbox/comporess
* Lib: heatshrink as external submodule, compile warnings fixes, better buffer management
* Lib: cleanup compressor definitions
* Rpc: add canvas orientation support
* Format Sources
2023-03-23 03:00:48 +10:00
MX
9daa51eda4 Update DS1420 to latest changes 2023-03-22 18:41:50 +03:00
MX
a81b794475 Merge branch 'fz-dev' into dev 2023-03-22 18:36:59 +03:00
Georgii Surkov
8b224ecb15 [FL-3179] 1-Wire Overdrive Mode (#2522)
* Separate ibutton to its own module, add one_wire to f18
* Move onewire cli to a separate app
* Add definitions for normal and overdrive timings
* Update api definitions
* Add rough overdrive timings definition for onewire emulation
* Remove one_wire_host_timing.h
* Add rough overdrive timings for onewire host
* Improve overdrive mode
* Working overdrive mode from flipper to flipper
* Update thermometer example app
* Turn on otg power when running thermometer example app
* Implement reset overdrive switching
* Always exit out of overdrive mode
* Improve overdrive timings
* Fix typos
* Fix reset behaviour
* Use overdrive mode everywhere in DS1996
* Improve comments
* Bump API version

Co-authored-by: あく <alleteam@gmail.com>
2023-03-22 23:54:06 +09:00
Nikolay Minaylov
1f236ede0e [#2501] Disable UART IRQs by default (#2523)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-22 23:41:14 +09:00
あく
973287b09b Github: wipe workspace before checkout (#2527)
* Github: wipe workspace before checkout

* Github: allow find to fail

* Github: limit maxdepth for find
2023-03-22 15:26:40 +04:00
あく
acc32f66e8 Github: force cleanup tree on decontaminate (#2526) 2023-03-22 14:48:41 +04:00
Shukai Ni
204b50381a Correct FAP default upload path in AppsOnSDCard.md (#2524)
Since the fap's source code is in `applications_user`, the documentation should also point to `applications_user` as the parent directory
2023-03-22 18:47:47 +09:00
MX
94d238c611 Add 418mhz to hopping list 2023-03-21 23:38:37 +03:00
MX
5b6b081664 GSN - Add manually support 2023-03-21 20:09:18 +03:00
MX
df766b1476 Update changelog 2023-03-21 19:08:58 +03:00
MX
8373a21af2 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-03-21 19:03:53 +03:00
MX
c9cc2b5e20 extra pack dev branch 2023-03-21 18:08:13 +03:00
MX
0d03039c19 Merge branch 'fz-dev' into dev 2023-03-21 18:05:13 +03:00
MX
f5b818541e Add 318 mhz back to hopping list 2023-03-21 17:57:46 +03:00
Sam Edwards
6089e9210f BadUSB: implement boot protocol (#2496)
* BadUSB: remove unused out EP
* BadUSB: do not use iad for a single interface
* BadUSB: implement the boot protocol
* BadUSB: implement SET_PROTOCOL
* Improve HID report descriptor readability
* CODEOWNERS update

Co-authored-by: nminaylov <nm29719@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 23:53:07 +09:00
MX
db54c463e6 Fix hopper stuck at 433.42 due to wide range tx'es
When we using 433.92 remote flipper in hopping mode will stuck at 433.42 and may loose signal because of that, need to avoid using close freqs in hopping, only freqs with bigger difference like 310 -> 315
2023-03-21 17:52:21 +03:00
Nikolay Minaylov
ce50b09b28 Remove hmac_sha256 from public API (#2519)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 21:29:54 +09:00
AloneLiberty
bf70f4b71a NFC: Fixed writing gen1a magic tags with invalid BCC (#2511)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 21:03:14 +09:00
あく
fd8607398d Github: unshallow on decontamination (#2521)
* Github: unshallow on decontamination
* Github: fix syntax
* Github: decontaminate without full tree
* Github: update decontaminate action in all workflows
2023-03-21 13:55:20 +04:00
MX
08a2e51feb Update changelog 2023-03-21 03:22:06 +03:00
MX
e62ac748ad Merge pull request #394 from amec0e/dev
Updated infrared assets
2023-03-21 03:20:34 +03:00
amec0e
1f881c6e47 Updated tv.ir
Updated last checked
2023-03-21 00:14:09 +00:00
amec0e
127f436315 Updated projectors.ir
Updated last checked
2023-03-21 00:13:47 +00:00
amec0e
f62de11de7 Updated fans.ir
updated Last checked
2023-03-21 00:11:38 +00:00
amec0e
6e810aacb4 Updated audio.ir
new additions
2023-03-21 00:11:07 +00:00
amec0e
2ff1e22ca9 Updated ac.ir
new addition
2023-03-21 00:10:44 +00:00
MX
c80405f880 WAV Player fixes
by @LTVA1
2023-03-21 03:04:22 +03:00
MX
b3ddca1aee Update changelog 2023-03-21 02:18:04 +03:00
MX
df8a57c972 Merge branch 'fz-dev' into dev 2023-03-21 01:38:41 +03:00
Nikolay Minaylov
0444a80f19 [FL-3134] BadUSB: Script interpreter refactoring (#2485)
* Script command and character tables
* Non-blocking stringdelay, docs update
* altchar/altstring fix
* Layout select UI fix
* Remove debug print

Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 02:22:03 +09:00
MX
3d90e6151c Fix include paths 2023-03-20 20:08:02 +03:00
MX
5660111b28 Merge branch 'fz-dev' into dev 2023-03-20 20:04:22 +03:00
Skorpionm
445a1aa7b0 SubGhz: fix Incorrect comparison in subghz_setting_get_hopper_frequency (#2518)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 01:30:57 +09:00
Georgii Surkov
0917494a80 [FL-3168] Add one_wire lib to f18, separate ibutton (#2509)
* Separate ibutton to its own module, add one_wire to f18
* Move onewire cli to a separate app

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-03-21 01:23:17 +09:00
Georgii Surkov
1d91a572cc [FL-3182] Fix typos in iButton (#2506)
* Fix a typo: right shift instead of greater than
* Fix a typo: proper iButton part number

Co-authored-by: あく <alleteam@gmail.com>
2023-03-21 00:22:40 +09:00
hedger
60ac2e9881 [FL-3161] Improved debugging experience for external apps (#2507)
* debug: automated support for multiple debug symbol files
* faploader: extra checks for app list state
* debug: trigger BP before fap's EP if under debugger
* faploader, debug: better naming
* docs: info on load breakpoint
* faploader: header cleanup
* faploader: naming fixes
* debug: less verbose; setting debug flag more often
* typo fix
2023-03-21 00:03:55 +09:00
Sergey Gavrilov
f7024cff78 SD Driver: reinit sd card on error (#2493)
* SD Driver: reinit sd card on error
* SD Driver: cleanup fatfs bindings
* Storage: optimized glue
* Storage: move fatfs initialization to appropriate subsystems, minor code cleanup
* SD Driver: minor code cleanup

Co-authored-by: あく <alleteam@gmail.com>
2023-03-20 22:09:10 +09:00
Sergey Gavrilov
6ec62f48f9 [FL-3180] OTP programmer: return exit code based on error type (#2504) 2023-03-20 21:07:17 +09:00
MX
d14364a86c OFW PR: Fixed writing gen1a magic tags with invalid BCC
PR 2511 by AloneLiberty

https://github.com/AloneLiberty/flipperzero-firmware/tree/nfc-magic-write-fix
2023-03-19 15:34:05 +03:00
MX
76d3f84a5e Update WAV Player, 16 bit support
by @LTVA1, in current condition has some issues with rewind on 16bit files, but plays them without problems
2023-03-19 02:20:23 +03:00
MX
56c11c70b3 Fix minesweeper freeze bug, do some refactoring 2023-03-18 22:19:13 +03:00
MX
9e94b1fae0 Testing links 2023-03-18 06:05:22 +03:00
MX
682ac85e0a Update docs 2023-03-18 04:19:53 +03:00
MX
9a93551a2d Add ability to disable favourite app in desktop settings
And update changelog
2023-03-18 04:13:04 +03:00
MX
147a1c7aaa iButton: Add DS1420 / Update changelog 2023-03-18 03:36:56 +03:00
MX
58d4f3b531 OFW PR: 2493 - SD Driver: reinit sd card on error
No issues was found during my own testing and running sd benchmarks, sorry for rushing, I may miss something, usually I prefer to wait for official review
2023-03-18 02:50:05 +03:00
Georgii Surkov
eb355d4a16 Fix a typo: right shift instead of greater than 2023-03-18 01:17:38 +03:00
MX
3444c5245e Tertiary favourite app 2023-03-18 01:16:34 +03:00
MX
9941457cdb Fix issue #387 2023-03-17 22:51:59 +03:00
MX
54cefb7884 Merge branch 'fz-dev' into dev 2023-03-17 17:54:05 +03:00
Astra
7de7fa293b Optimize trailing slash check (#2503)
* Optimize trailing slash check
2023-03-18 00:45:42 +10:00
MX
b0928fb3cd Fix subghz external module power issues 2023-03-17 00:27:01 +03:00
MX
559b0e9b40 Small UI fixes 2023-03-16 21:24:09 +03:00
MX
67e7325f43 Update readme and changelog 2023-03-16 18:30:00 +03:00
MX
2cefc9aab0 Security+ 2.0 custom buttons 2023-03-16 18:14:39 +03:00
MX
cda605f578 Merge branch 'fz-dev' into dev 2023-03-16 17:44:22 +03:00
Guido Giorgi
25fd3c3400 iButton: Add support for Dallas DS1971 v2 (#2492)
* iButton: Add DS1971 Support refactored for v2
* Fix requested by gsurkov
* Fix DALLAS_COMMON_CMD_* use, cusotm data field to Eeprom and COPY_SCRAPTCHPAD
* Fix Emulation + Memory Info + Docs
* Fix docs, strings, refactor code

Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-03-16 23:12:43 +09:00
hedger
771c47f809 fbt: explicitly set dist suffix length, not depending on environment settings. See (#2497) 2023-03-16 22:46:18 +09:00
MX
3c3ac216dc Remember if 5v was turned off, save its state 2023-03-16 16:03:22 +03:00
MX
5de507b0c8 Update changelog and readme 2023-03-16 15:19:51 +03:00
MX
bb9ac1389b Remember last state for CC1101 external + other fixes
Reset to internal module if external is not found on all apps, not only in bruteforcer
2023-03-16 15:02:23 +03:00
MX
49378f0893 Merge branch 'fz-dev' into dev 2023-03-16 13:49:24 +03:00
Astra
6aa0c08f3a [FL-3064] Skip the read when the card is not present (#2494)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-16 18:06:11 +09:00
Astra
e90042368f [FL-3156] Mark keys as not found when they couldn't auth successfully (#2476)
* Mark keys as not found when they couldn't auth successfully
* Improve logging and fix the reading bug

Co-authored-by: あく <alleteam@gmail.com>
2023-03-16 17:58:07 +09:00
Astra
9fbf327028 [FL-1799] Require the trailing slash for root paths (#2486)
* Require the trailing slash
* Fix the swapped storages
* Fix root paths
2023-03-16 17:28:50 +09:00
MX
353adf4fb7 Update changelog and readme 2023-03-16 00:24:53 +03:00
MX
968d6d578f Add retry and delay to avoid power issues with Wifi plugins 2023-03-16 00:07:37 +03:00
MX
2046ac6604 Lets try new changes for marauder companion
https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion
2023-03-16 00:00:10 +03:00
MX
2a040f245f Merge branch 'fz-dev' into dev 2023-03-15 21:25:06 +03:00
hedger
d8385b7f91 gh: use shallow clones whenever possible (#2491)
* gh: use shallow clones whenever possible
* gh: reverted submodule checks
* gh: lint: joined linting scripts
* gh: renamed linter workflow
* check python linter output
* gh: reworked linter
* checking c linter
* gh: merged submodule check & lint
* gh: renamed step
* gh: removed redundant `submodules: false`

Co-authored-by: あく <alleteam@gmail.com>
2023-03-16 00:24:56 +09:00
Liam Hays
c27d4d78f9 Fix auto-capitalization in the keyboard when the text box is empty. (#2483)
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-03-15 23:51:15 +09:00
Leopold
a69ae93871 Add new nfc apdu cli command (#2482)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-15 22:52:32 +09:00
Eric Betts
e22668e196 Picopass standard KDF dictionary (#2478)
* Split iclass dictionaries based on KDF
* Allow cancelling during key test

Co-authored-by: あく <alleteam@gmail.com>
2023-03-15 21:35:11 +09:00
Skorpionm
3a242e5fc3 SubGhz: bugfix unable to send, new generated secplus_v2 protocol (#2488)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-15 21:16:52 +09:00
hedger
d12f76dacb Nfc: fixes for latest PVS-studio 7.23 (#2490) 2023-03-15 21:01:33 +09:00
MX
fe403c6994 Remove cdefines from external apps 2023-03-15 01:53:55 +03:00
MX
05e53cac26 Fix merge issues 2023-03-15 01:25:18 +03:00
MX
8b8b78d001 Move plugins to external folder 2023-03-15 01:25:18 +03:00
MX
dd99c22792 Merge branch 'fz-dev' into dev 2023-03-14 19:55:16 +03:00
あく
ccaa3864d5 Dolphin: new spring animation, weight adjust, drop winter animation. (#2489)
* Dolphin: add new spring animation, drop winter animation, adjust weights
* Readme: update application folder structure info
2023-03-15 01:02:27 +10:00
hedger
53435579b3 [FL-3097] fbt, faploader: minimal app module implementation (#2420)
* fbt, faploader: minimal app module implementation
* faploader, libs: moved API hashtable core to flipper_application
* example: compound api
* lib: flipper_application: naming fixes, doxygen comments
* fbt: changed `requires` manifest field behavior for app extensions
* examples: refactored plugin apps; faploader: changed new API naming; fbt: changed PLUGIN app type meaning
* loader: dropped support for debug apps & plugin menus
* moved applications/plugins -> applications/external
* Restored x bit on chiplist_convert.py
* git: fixed free-dap submodule path
* pvs: updated submodule paths
* examples: example_advanced_plugins.c: removed potential memory leak on errors
* examples: example_plugins: refined requires
* fbt: not deploying app modules for debug/sample apps; extra validation for .PLUGIN-type apps
* apps: removed cdefines for external apps
* fbt: moved ext app path definition
* fbt: reworked fap_dist handling; f18: synced api_symbols.csv
* fbt: removed resources_paths for extapps
* scripts: reworked storage
* scripts: reworked runfap.py & selfupdate.py to use new api
* wip: fal runner
* fbt: moved file packaging into separate module
* scripts: storage: fixes
* scripts: storage: minor fixes for new api
* fbt: changed internal artifact storage details for external apps
* scripts: storage: additional fixes and better error reporting; examples: using APP_DATA_PATH()
* fbt, scripts: reworked launch_app to deploy plugins; moved old runfap.py to distfap.py
* fbt: extra check for plugins descriptors
* fbt: additional checks in emitter
* fbt: better info message on SDK rebuild
* scripts: removed requirements.txt
* loader: removed remnants of plugins & debug menus
* post-review fixes
2023-03-14 23:29:28 +09:00
MX
84b2242636 Check for external module when launching from favourites 2023-03-13 23:19:33 +03:00
MX
d5ea5168a0 Prepare apps for next OFW changes
PR 2420 will change PLUGIN type meaning
2023-03-13 19:25:17 +03:00
MX
c560394358 External module power bug fixes 2023-03-13 18:43:50 +03:00
MX
5ddb9bd444 Correct hopping freqs, now it actually works good 2023-03-12 18:07:54 +03:00
MX
eb57f4c7e4 Fix ironlogic add manually 2023-03-12 15:53:06 +03:00
MX
027ae3f3f6 SubGHz: Add manually extend, add support for new protocols
Schellenberg / Stilmatic and Came Space keeloq protocols support
2023-03-12 15:32:47 +03:00
MX
d32c73ad57 Update subbrute and changelog 2023-03-11 17:28:45 +03:00
MX
f67a02203b Merge branch 'fz-dev' into dev 2023-03-10 14:21:43 +03:00
あく
4bd3dca16f Fbt: fix broken resource deployment (#2477) 2023-03-10 20:13:11 +09:00
Sergey Gavrilov
c5db1aaaf5 Revert "Revert "Embed assets in elf file (#2466)""
This reverts commit a04c01a2fd.
2023-03-10 13:57:44 +03:00
Sergey Gavrilov
a04c01a2fd Revert "Embed assets in elf file (#2466)"
This reverts commit 4fd043398a.
2023-03-10 01:43:46 +03:00
MX
a48adfbaf7 Fix some strange bug 2023-03-09 23:19:08 +03:00
MX
68fed0e03d Merge branch 'fz-dev' into dev 2023-03-09 21:17:57 +03:00
AloneLiberty
0190a161ba NFC: Fix 0 block write possibility in Mifare Classic emulation (#2474)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-10 02:50:25 +09:00
Leo Smith
5b05aeea82 [#1989] updated parser and added stringln, hold and release (#2448)
* updated parser and added stringln, hold and release
* removed unused code as requested from PR
* BadUsb: tiny change to trigger rebuild

Co-authored-by: p4p1 <p4p1@vivaldi.net>
Co-authored-by: あく <alleteam@gmail.com>
2023-03-10 02:42:34 +09:00
Michal Suchánek
780da7d4d5 Upside down / left handed orientation support (#2462)
* Add backup files to .gitignore
* Added lefty support in Settings > System > hand Orient: Fixes: #1015
* Left handed mode
* Fix lefthanded mode on vertical interfaces
* Input: new composite sequence identifier
* Gui: move input mapping from Canvas to ViewPort, properly handle input mapping on View switch in ViewDispatcher
* Rpc: proper input sequencing and tagging in RpcGui
* Rpc: remove magic from RpcGui

Co-authored-by: MrDaGree <5050898+MrDaGree@users.noreply.github.com>
Co-authored-by: Willy-JL <willy.leslie@icloud.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2023-03-10 02:13:18 +09:00
MX
c68a9f325d Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-03-09 18:40:09 +03:00
Sergey Gavrilov
4fd043398a Embed assets in elf file (#2466)
* FBT: file_assets generator
* Elf file: process manifest section externally
* FBT, file_assets generator: add assets signature
* Storage: assets path alias
* Flipper application: assets unpacker
* Apps, Storage: use '/data' alias for apps data
* Storage: copy file to file
* Assets: log flag, fixes
* Update f18 api
* Assets: asserts
* Assets: fix signature_data check
* App assets: example
* Example assets: fix folder structure in readme
* Assets: fix error handling
* Assets builder: use ansii instead of utf-8, use .fapassets section instead of .fapfiles, add assets path to signature
* Elf file: comment strange places
* Storage: totaly optimized storage_file_copy_to_file
2023-03-10 01:01:53 +10:00
MX
dfc45eb0f9 Merge branch 'fz-dev' into dev 2023-03-09 16:58:51 +03:00
Astra
50ef5deefc [FL-3118] Dumb mode menu freeze fix (#2456)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-09 17:24:47 +09:00
MX
319108b11c Fix Unitemp small bug
Use OneWireHostSearchModeNormal instead of NORMAL_SEARCH
2023-03-09 05:03:31 +03:00
MX
ee41413c6a Update unitemp 2023-03-09 04:47:33 +03:00
MX
71daa3e0f8 When we select ON/OFF call power enable and disable 2023-03-09 04:33:19 +03:00
MX
1249ce9b94 Option to disable auto 5v power for external radio module
Now you can use 3.3v modules without wasting a battery (bonus a bit low noise on power line)
2023-03-09 04:02:31 +03:00
MX
da9b968fc9 No more noises 2023-03-09 04:01:24 +03:00
MX
b0af6f4b53 Update changelog 2023-03-09 02:39:40 +03:00
MX
7a413f390d NFC Magic fix - reinit nfc at start 2023-03-09 02:18:51 +03:00
MX
16df48bac6 Fix external module power disable 2023-03-09 01:23:57 +03:00
MX
3b2d0486a0 Update SWD Probe
https://github.com/g3gg0/flipper-swd_probe
2023-03-09 00:00:24 +03:00
MX
ed06aa48e9 Update changelog 2023-03-08 23:12:59 +03:00
MX
e941ef5952 Merge pull request #378 from amec0e/dev
Updated infrared assets
2023-03-08 22:53:24 +03:00
MX
5d9174ac9d Merge branch 'fz-dev' into dev 2023-03-08 22:52:11 +03:00
Eric Betts
5be15152eb PicoPass: auth cleanup (#2470)
* remove redundant auth methods
* Move picopass keys to new file
* CTF key
* Format sources
* PicoPass: add pragma once to picopass_keys.h

Co-authored-by: あく <alleteam@gmail.com>
2023-03-08 20:46:30 +09:00
Liam Hays
90958a6d23 More UI fixes and improvements (#2419)
* Unify spelling of confirm exit/retry across apps.
* Unify infrared exit/retry confirm menus?
* "Keyboard Layout", not "Keyboard layout".
* Make iButton read scene prompt less awkward.
* "Detect Reader" in MF Classic saved menu instead of "Detect reader"
* NFC menu spelling changes only.
* Remove \n in strings in widget_add_string_element() calls.

Co-authored-by: あく <alleteam@gmail.com>
2023-03-08 20:27:21 +09:00
MX
ab91dc1882 External module 5v power issues fixes 2023-03-08 01:09:17 +03:00
MX
cad2f2a065 Merge branch 'fz-dev' into dev 2023-03-08 00:46:38 +03:00
MX
086be92f69 SubGHz playlist - rewind (skip or play previous file)
by alvarotorijano

https://github.com/alvarotorijano/playListMod/blob/main/playlistMod.c
2023-03-08 00:33:48 +03:00
MX
28eb4d1060 Massive plugins refactoring
Not full refactoring, only small issues is fixed and moved all plugins to furi mutex instead of valuemutex

Many small issues was found and fixed due mutex upgrade

OFW removed 60 lines of code and it was painful
2023-03-08 00:18:23 +03:00
amec0e
2ff937a278 Updated tv.ir
New additions
2023-03-07 20:17:57 +00:00
amec0e
cdc44c502e Updated projectors.ir
New additions
2023-03-07 20:17:35 +00:00
amec0e
b37c3ccf92 Updated fans.ir
Updated last checked
2023-03-07 20:16:42 +00:00
amec0e
74259c2276 Updated audio.ir 2023-03-07 20:13:01 +00:00
amec0e
3dcd5538d0 Updated ac.ir 2023-03-07 20:11:26 +00:00
AloneLiberty
eb5dae1cda NFC: Support reading Mifare Classic key B from sector trailer, reading sector with B key where A key can't read block, Nfc Magic app not using NFC folder by default (in file select) (#2437)
* NFC: Support reading Mifare Classic key B from sector trailer and reusing it for other sectors
* NFC: Fix my pointer typo
* NFC: Fix reading sector with B key where A key can't read block (fixes #2413) and fix Nfc Magic app not using NFC folder by default (in file select)
* NFC: Fix strange bug

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-03-08 03:33:59 +09:00
MX
f0471a62e5 Merge branch 'fz-dev' into dev 2023-03-07 16:45:40 +03:00
Astra
9819306731 [Fl-3147] Remove ValueMutex (#2467)
* Move keypad_test to furi_mutex
* Move text_box_test to furi_mutex
* Move snake_game to furi_mutex
* Remove ValueMutex completely
* Snake Game: simplify code and fix PVS warning
* F18: sync API symbols

Co-authored-by: あく <alleteam@gmail.com>
2023-03-07 22:09:45 +09:00
MX
b872a12517 Merge branch 'fz-dev' into dev 2023-03-07 14:47:05 +03:00
Eric Betts
eefca9f498 Support reseting iCx cards (#2451)
* Support reseting iCx cards
* add submenu
* Fix auth
* switch key derivation to use same method
* test system keys using both elite and standard kdf

Co-authored-by: あく <alleteam@gmail.com>
2023-03-07 19:53:52 +09:00
MX
e0905597fc Merge branch 'fz-dev' into dev 2023-03-07 13:09:06 +03:00
MX
6511252140 Fix external module power init 2023-03-06 14:23:59 +03:00
MX
27000f1763 Update changelog 2023-03-06 13:02:09 +03:00
MX
ada343b7df Exclude 390Mhz from freq analyzer for external module 2023-03-06 12:30:20 +03:00
GuruSteve
9dd1fb64b7 Fixed picopass load save file overrun (#2464)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-06 16:59:48 +09:00
Michal Suchánek
c0e0403b44 Fix SD card CID parsing (#2463)
The recent SD rewrite dropped a couple of lines from the CID parsing
function resulting in zero manufacturing date displayed.

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
2023-03-06 16:44:26 +09:00
MX
6d0c3eb3b6 Properly rename unirf remix to subghz remote
And automatically migrate user files to new folder
2023-03-06 10:32:01 +03:00
MX
f25af91d23 Fix issues with external module 5v power 2023-03-06 10:08:59 +03:00
MX
507c8582ca Merge pull request #375 from Willy-JL/fix-unirf-freeze
Fix unirf freeze (protocol deserialize status ok)
2023-03-05 23:49:11 +03:00
Willy-JL
d780752d9e Fix unirf freeze (protocol deserialize status ok) 2023-03-05 20:39:42 +00:00
MX
2f567f3c3f Merge pull request #374 from 403-Fruit/patch-1
Blackjack game: fix bug counting more than one ace
2023-03-05 23:26:16 +03:00
MX
f612357150 Exclude 464Mhz from freq analyzer 2023-03-05 23:09:54 +03:00
Kevin
f1f2718598 Blackjack game: fix bug counting more than one ace
Take into account how many aces there are before using 11 as the value for an ace
2023-03-04 19:46:14 -10:00
hedger
4ab832cc46 github: check API versions for all targets to match on gh build (#2459)
* github: check API versions for all targets to match on gh build
* typo fix
* gh: forcing target mismatch to test pipeline
* reverted API version change
2023-03-05 14:17:33 +09:00
MX
920bee0532 Update changelog 2023-03-05 02:27:06 +03:00
MX
1a9544778b Default layout for non standard remotes 2023-03-04 05:42:53 +03:00
MX
dbee87a6c6 Merge branch 'fz-dev' into dev 2023-03-04 01:05:16 +03:00
MX
7e80ed6693 Add forgotten check 2023-03-04 01:04:59 +03:00
MX
db0c34f63e Update pocsag pager app to new error system 2023-03-04 01:03:14 +03:00
MX
056f2eb7d5 Return frequency check 2023-03-04 00:24:56 +03:00
MX
fe84e9521c More subghz updates and fixes 2023-03-04 00:03:04 +03:00
MX
91e2b466d3 Fix and update subghz protocols to use new error system 2023-03-03 23:34:43 +03:00
MX
b90060e574 Merge branch 'fz-dev' into dev 2023-03-03 23:22:40 +03:00
Nikolay Minaylov
5d4057f722 Archive browser: update path on dir leave (#2455) 2023-03-04 03:07:41 +09:00
Ethanol0001
0b7d205253 Update clock_app.c (#2446)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-04 01:15:17 +09:00
Skorpionm
72ca6b25e9 [FL-3106] SubGhz: better and more verbose error handling in protocols, stricter CAME validation (#2443)
* SubGhz: add error protocol
* WS: add error protocol
* SubGhz: error processing
* SubGhz: more stringent CAME protocol restrictions
* SubGhz: fix header duration CAME protocol
* SubGhz: delete comments
* SubGhz: sync SubGhzProtocolStatus with FuriStatus
* SubGhz: update documentation and bump api_version

Co-authored-by: あく <alleteam@gmail.com>
2023-03-04 00:09:13 +09:00
MX
4be64b6206 Merge branch 'fz-dev' into dev 2023-03-03 16:36:37 +03:00
Georgii Surkov
6cc5119c64 [FL-3117] Infrared: Fix hangups on repeated button press (#2441)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-03 21:37:02 +09:00
Astra
42d27d04f6 [FL-3127] Fix navigation on unsupported card types (#2440)
Co-authored-by: あく <alleteam@gmail.com>
2023-03-03 19:55:51 +09:00
Milk-Cool
fed4c28925 Fixed typo in fbt.md (#2452)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-03-03 13:01:05 +03:00
andr0423
24f084d282 Fixed music player path for dummy mode (#2454)
Music player path changed #2453
2023-03-03 12:50:15 +03:00
MX
12b760e2e3 Revert music player changes (see desc)
Many users have a big library of music files downloaded on their microSD, migration will stuck for unknown amount of times, so app will hang up for super long time, migration is acceptable for other apps, for this one it will be reverted and it will work as before the app data changes
2023-03-03 08:52:27 +03:00
MX
43ef3d9bff Fix ibutton app - add manually - duplicate names 2023-03-03 07:34:49 +03:00
MX
3bdd171ce2 Update ibutton fuzzer to new ibutton system 2023-03-03 07:23:48 +03:00
MX
6ff0a5f318 Update calls to new filesystem api 2023-03-02 21:36:33 +03:00
MX
f3ab4bc292 Merge branch 'fz-dev' into dev 2023-03-02 21:18:35 +03:00
Georgii Surkov
806428efeb [FL-3070] iButton system and app refactoring (#2388)
* Add 1-wire thermometer example app stub
* Working 1-wire thermometer app
* Refactor app to use threads
* Clean up code, add comments
* Add CRC checking
* Increase update period
* Fix error in fbt
* Revert the old update period
* Use settable pin in onewire_host
* Use settable pin for onewire_slave
* Clear EXTI flag after callback, make private methods static in onewire_slave
* Do not hardcode GPIO pin number
* Remove iButton hal from furi_hal_rfid
* Remove most of furi_hal_ibutton
* Add some of furi_hal_ibutton back
* Slightly neater code
* Update CODEOWNERS
* Add furi_hal_gpio_get_ext_pin_number
* Create README.md
* Temporary get Metakom and Cyfral keys out of the way
* Better enum name
* Syncing work, does not compile
* Syncing work, now compiles
* Working read impl for DS1990 and DS1992
* Add the ability to display extended key data
* Get rid of DialogEx
* Add save and load API
* Better iButtonKey encapsulation
* Fix crash
* Load key code boilerplate
* More load key code boilerplate
* Minor code cleanup
* Implement loading and saving DS1990 keys
* Implement the Info scene
* Implement loading & saving for DS1992
* Implement read error scene stub
* Implement delete confirmation screen
* Better error messages (protocol-dependent)
* Minor old code cleanup
* Remove iButtonDevice, add command callback to iButtonSlave
* Implement draft emulation for DS1990
* Better emulation for DS1990
* Initial emulation implementation for DS1992
* Better common command definitions
* Use common submenu callback, add protocol list
* Improve ViewData screen
* Improve scene_add_type
* Add stubs for write functionality
* Improve naming consistency
* Implement writing a DS1992 onto another one
* Improve DS1992 write code
* Improve DS1992 write code once more
* Prepare write_blank for DS1990, delete ibutton_writer
* Implement writing DS1990 onto blanks
* Fix reading DS1990
* Partially implement writing DS1992 onto blanks
* Implement GUI for writing keys
* Implement GUI for emulating keys
* Reduce memory usage for pretty_format
* Automatically truncate data more than 256 bytes
* Initial implementation of DS1996 (not tested)
* Fix crash due to missing virtual function
* Improve emulation code
* Improve DS1992 emulation code
* Correct return value for onewire_slave_send
* Correct return value for onewire_slave_receive
* Implement emulation for DS1992 & DS1996
* Better constant names
* Simplify & optimise the emulation code
* Remove duplicate code
* Add skip rom command emulation
* Show loading animation for large keys
* Implement manual adding & editing of keys
* Use buffered file streams to speed up saving & loading
* Reset key name before adding a new one
* Sync a buffered file stream before saving
* Use the DSGeneric protocol as a fallback option
* Implement emulation via RPC
* Refactor iButton code in preparation for comparator keys
* Refactor iButton code in preparation for comparator keys once more
* Make some functions static
* Make protocols not rely on one_wire classes
* Improve ProtocolDict usage
* Improve ProtocolDict usage more
* Implement reading Metakom & Cyfral keys
* Rename some files
* Better file structure
* Implement a unified interface for misc protocols
* Implement a unified interface for dallas protocols
* Concrete types for Dallas protocols
* Implement a unified interface for all key types
* Improved type naming
* Improved private types
* Proper types in protocol definitions
* Implement emulation for Cyfral & Metakom keys
* Implement save&load for Metakom & Cyfral keys
* Better type names
* Rename files, better names
* Allocate iButtonProtocols like a normal class
* Reset the key each time the start scene is selected
* Improve comments and constants
* Add ibutton_protocols to SDK headers
* Add ibutton_key to SDK headers
* Add ibutton_key to SDK headers
* Implement reading via cli
* Implement emulation via cli
* Implement writing Dallas blanks via cli
* Correctly revert the editing if cancelled by the user
* Correct committing mishap
* Elide the long text on the info screen
* Change key name for data in Misc keys
* Update iButtonFileFormat.md
* Remember the key's folder
* Save menu position in ReadKeyMenu and SavedKeyMenu
* Correct use of preselected path in file browser

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-03-02 22:23:33 +09:00
Astra
4359e2eaa9 [FL-3103] New pin reset splashscreen (#2405)
* New pin reset splashscreen
* Recovery: optimize drawing routine
* Recovery: increase erase confirmation time
* Change the required button

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-03-02 20:56:23 +09:00
Sergey Gavrilov
777a4d109d [FL-3055] Getter for application data path (#2181)
* Threads: application id
* Unit tests: appsdata getter test
* Unit tests: moar test cases for appsdata getter
* Unit tests: remove folders after test
* Storage: dir_is_exist, migrate, + unit_tests
* Plugins: migration
* Storage: common_exists, moar unit_tests 4 "common_migrate", "common_migrate" and "common_merge" bugfixes
* Storage: use FuriString for path handling
* Storage API: send caller thread id with path
* Storage: remove StorageType field in storage file list
* Storage: simplify processing
* Storage API: send caller thread id with path everywhere
* Storage: /app alias, unit tests and path creation
* Storage, path helper: remove unused
* Examples: app data example
* App plugins: use new VFS path
* Storage: file_info_is_dir
* Services: handle alias if the service accepts a path.
* App plugins: fixes
* Make PVS happy
* Storage: fix storage_merge_recursive
* Storage: rename process_aliases to resolve_path. Rename APPS_DATA to APP_DATA.
* Apps: use predefined macro instead of raw paths. Example Apps Data: README fixes.
* Storage: rename storage_common_resolve_path to storage_common_resolve_path_and_ensure_app_directory
* Api: fix version
* Storage: rename alias message
* Storage: do not create app folders in path resolving process in certain cases.

---------

Co-authored-by: Astra <93453568+Astrrra@users.noreply.github.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-03-02 03:57:27 +10:00
MX
f8dc1939cd Return kostyli and velosipedy back, apply different fix 2023-03-01 12:02:53 +03:00
MX
1b8cf6a5b1 Fix default frequency being overwritten bug 2023-03-01 11:57:16 +03:00
MX
1f6382e93d Update changelog and readme 2023-03-01 02:57:06 +03:00
Georgii Surkov
ab6b3f8ed3 Fix hangups when the user mashes the transmit button 2023-03-01 02:15:13 +03:00
Astra
cc52253e22 Exit to the main menu on pressing BACK 2023-03-01 02:14:56 +03:00
MX
cf6dc9f895 Fix timings for CAME protocol, Fix #280 2023-03-01 00:25:11 +03:00
MX
8deb29a8ff Fix #370 and fix other protocol counter 2023-02-28 21:45:55 +03:00
MX
e0f9697750 Add a special message in changelog for novices 2023-02-28 07:25:28 +03:00
MX
c3a6ba3c02 Small fixes 2023-02-28 07:09:13 +03:00
MX
75a8f0a7b4 Update changelog 2023-02-28 07:05:55 +03:00
MX
caa4ba67d6 Merge pull request #367 from clashlab/improve_hc-sr
hc_sr04: Improve accuracy by measuring microseconds
2023-02-28 06:59:17 +03:00
MX
9f6f391354 Update changelog and docs 2023-02-28 06:56:54 +03:00
MX
24726ab8a3 More precise debug counter ++ 2023-02-28 06:19:21 +03:00
MX
6bd5e22872 Somfy Telis - add manually 2023-02-28 06:15:55 +03:00
MX
cbb09b6812 BFT Programming mode and Add manually 2023-02-28 06:02:22 +03:00
MX
9c9688dd5b Nice One manual adding support 2023-02-28 00:41:14 +03:00
MX
21c52df090 bft programming mode & run fbt format 2023-02-28 00:10:16 +03:00
MX
2c95a7cba4 Somfy Telis - Custom buttons + Prog mode 2023-02-28 00:02:30 +03:00
MX
568176d775 App categories 2023-02-27 23:13:52 +03:00
MX
04250632d7 Merge branch 'fz-dev' into dev 2023-02-27 21:34:30 +03:00
Nikolay Minaylov
9ae58f5462 [FL-3116, FL-3136] BadUSB UI fixes (#2439) 2023-02-27 23:04:14 +09:00
あく
e6d1bcc421 Plugins: move to designated categories (#2438) 2023-02-27 23:33:45 +10:00
Clashlab
4439a83733 hc_sr04: Improve accuracy by measuring micro-seconds 2023-02-27 13:38:43 +01:00
MX
0f8d7dd6db Merge pull request #366 from MatthisC/features-mousejacker
Features mousejacker
2023-02-27 03:27:50 +03:00
MX
182296d8af Nice flor s - custom buttons 2023-02-27 01:13:21 +03:00
matthisc
cd14380dba Correcting bug on DEL and DELETE 2023-02-26 20:09:05 +01:00
MX
5b0c5a82c0 Merge branch 'fz-dev' into dev 2023-02-26 21:24:38 +03:00
あく
478390de19 Drivers: remove excessive check in bq25896 and make PVS happy (#2436) 2023-02-27 04:06:19 +10:00
あく
b054912167 F8, F18: bump API symbols version (#2435) 2023-02-27 03:39:26 +10:00
Shane Synan
09edf66a2a FuriHal, Power, UnitTests: fix, rename battery charging voltage limit API (#2228)
* FuriHal, Power, UnitTests: rename battery charge voltage limit API
* FuriHal: bump API, power info major versions
* Power: fix battery charge voltage limit for > 7.935v

Co-authored-by: あく <alleteam@gmail.com>
2023-02-27 02:23:39 +09:00
あく
1d55aee39c Fix incorrect type choise condition in image compressor (#2434) 2023-02-27 02:29:42 +10:00
あく
3efb7d4050 Updater: handle storage errors when removing files, fix folder remove routine, prevent unused services from starting (#2432)
* Updater: handle storage errors when removing files
* Updater: properly handle folder removal in post update cleanup stage. Prevent power, desktop and dolphin services from starting on update.
* Desktop, Dolphin, Power: proper handling and message for special boot mode.
* Desktop, Power: add missing TAG
* Updater: unify start skip message and fix double delete in backup worker
* Cli: unify special boot mode message
2023-02-27 00:15:26 +09:00
Astra
0c06e54831 [FL-3105] Unify power info, power debug, and device_info into one info command (#2393)
* Unify power info, power debug, and device_info into one info command
* Fix the storage script
* Cli: return device_info command for compatibility, rollback storage script
* Cli: remove unused context in info_get calls
* Cli: cleanup device info callbacks, switch to new separator

Co-authored-by: あく <alleteam@gmail.com>
2023-02-26 21:28:52 +09:00
MX
a61286bd43 Merge branch 'fz-dev' into dev 2023-02-26 14:34:31 +03:00
Sergey Gavrilov
9bda3e62ee SD Cache: moved to diskio layer, invalidation in case of error (#2428)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-26 20:28:51 +09:00
matthisc
905273e066 Adding function to detect end of altcode 2023-02-26 10:38:40 +01:00
matthisc
16fe62e98d Adding ALTSTRING feature for non-qwerty keyboards 2023-02-26 10:29:56 +01:00
matthisc
958797062d Improving logic of mod keys when releasing a key 2023-02-26 10:23:33 +01:00
matthisc
2bb76e09c6 Adding TAB command 2023-02-26 10:14:14 +01:00
matthisc
33dd256dfb Correcting bug on DEL and DELETE key 2023-02-26 10:10:00 +01:00
MX
295fd3d0c0 Merge branch 'fz-dev' into dev 2023-02-26 11:16:01 +03:00
MX
efdf24d711 Merge branch 'fz-dev' into dev 2023-02-26 11:11:00 +03:00
MX
12c1ec37a2 Fix PVS warnings (#2430)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-26 17:08:05 +09:00
Eric Betts
03f889962b Picopass: factory key support, app rename and move to NFC category, minor code cleanup (#2417)
* message on successful card write
* auth using factory key
* auth using factory default
* factory default screen
* write standard iclass key
* pass block explicitly
* Fix array indexing, add empty detection
* PicoPass: rename app and move to NFC group, minor code cleanup

Co-authored-by: あく <alleteam@gmail.com>
2023-02-26 16:59:50 +09:00
MX
0bc995bfab Update changelog 2023-02-26 06:41:50 +03:00
MX
a19768e376 Throw small delay 2023-02-26 06:39:42 +03:00
MX
0bf0267edd Fix pvs warnings from OFW 2023-02-26 06:07:31 +03:00
MX
b3559bf058 Update changelog 2023-02-26 05:56:31 +03:00
MX
2b8f55322e Merge branch 'fz-dev' into dev 2023-02-26 05:51:58 +03:00
MX
b15a15411f Revert "Fix BadUSB bug (#365)"
This reverts commit 543346f885.
2023-02-26 05:51:37 +03:00
MX
39329eb422 Update lightmeter plugin 2023-02-26 05:46:50 +03:00
MX
115257ea59 Update readme and changelog 2023-02-26 05:29:18 +03:00
MX
a71abedd25 Rename some vars 2023-02-26 05:25:22 +03:00
MX
b53924c27a Infrared debug settings - output pin 2023-02-26 05:23:26 +03:00
MX
543346f885 Fix BadUSB bug (#365) 2023-02-26 04:22:06 +03:00
MX
a435959ee3 Fix counter settings being reset w custom btns 2023-02-26 04:14:55 +03:00
MX
d33b092a9d Fix Subghz item removal bug 2023-02-26 04:13:28 +03:00
MX
f676072e15 Fix custom button counter bug 2023-02-26 01:09:08 +03:00
MX
098d6944c4 Update changelog 2023-02-26 00:38:11 +03:00
MX
172c0e077f Fix counter 2023-02-25 23:25:32 +03:00
MX
4dbb55d740 Beninca support 2023-02-25 23:10:59 +03:00
MX
ba09da107a Worst code ever
subghz imporvements

- hold right to delete signal in read
- extra buttons in saved signals
- ability to change counter increase value in debug
2023-02-25 22:28:35 +03:00
n30f0x
eaf965c66f BadUsb: STRINGDELAY feature, worker signal handling refactoring (#2269)
* BadUsb: Added stringdelay feature
* BadUsb: added stringdelay feature, fixed delay
* BadUsb: fix cursed delay structure
* BadUsb: long delay check added
* BadUsb: long delay distribution
* furi_delay_ms(0) edgecase fix, add documentation entry
* additional documentation entry
* BadUsb: get rid of bad logic, fixed documentation
* BadUSB script: fix events handling
* Delay value fix
* Script execution fix

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: nminaylov <nm29719@gmail.com>
2023-02-26 02:34:48 +09:00
Logandev_
e999c35749 Grammar fix in CLI (#2390)
* fixed grammar
* Update cli_commands.c: made it a little nicer

Co-authored-by: あく <alleteam@gmail.com>
2023-02-25 22:49:53 +09:00
Mathie
203adabc46 Update update.py (#2426)
Fixed grammar mistake

Co-authored-by: あく <alleteam@gmail.com>
2023-02-25 22:41:49 +09:00
Konstantin Volkov
82ad44a863 changed updater and unit benches (#2427)
* changed updater and unit benches
* switched flipper name from macos style to searching

Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
2023-02-25 21:05:02 +09:00
MX
86da6a7ffe Update changelog 2023-02-24 04:15:32 +03:00
MX
36e7b9185a Merge pull request #362 from Willy-JL/fix-keyboard-capitalization
Fix keyboard capitalization bug
2023-02-24 04:06:57 +03:00
Willy-JL
f8eda660d2 Keyboard long press first char for lowercase 2023-02-24 00:50:00 +00:00
Willy-JL
f3e3e828aa Fix keyboard capitalization bug 2023-02-24 00:22:43 +00:00
MX
c230d09dad Faster Turn OFF hold time 2023-02-24 03:04:36 +03:00
MX
72fd448541 replace paths 2023-02-24 03:04:12 +03:00
MX
07ff0c7d97 Add SWD Probe into main FW
Moved from extra pack to main FW

https://github.com/g3gg0/flipper-swd_probe
2023-02-24 02:43:42 +03:00
MX
76f84b50e6 Merge pull request #358 from amec0e/dev
Updated audio.ir
2023-02-22 04:50:23 +03:00
amec0e
1f3e937471 Updated audio.ir
Fixed rename of a power button
2023-02-21 23:35:00 +00:00
MX
32f11f59b0 Merge pull request #357 from amec0e/dev
Updated infrared assets
2023-02-21 23:57:58 +03:00
MX
202a97eb74 Merge pull request #352 from Round-Pi/dev2
typo combing
2023-02-21 23:56:59 +03:00
MX
f9db06b781 fbt format 2023-02-21 23:42:12 +03:00
MX
5132b16305 Merge branch 'dev' into dev2 2023-02-21 23:23:07 +03:00
MX
a0b02b0110 Merge branch 'fz-dev' into dev 2023-02-21 23:10:51 +03:00
amec0e
36debf25fb Updated tv.ir
Updated last checked
2023-02-21 15:27:01 +00:00
amec0e
d16d1f43fc Updated projectors.ir
New additions
2023-02-21 15:26:38 +00:00
amec0e
11b3484f4b Updated fans.ir
Updated last checked
2023-02-21 15:25:51 +00:00
amec0e
2bcb15b8bc Updated audio.ir
New additions
2023-02-21 15:25:20 +00:00
amec0e
9690dba7fe Updated ac.ir
New additions
2023-02-21 15:21:57 +00:00
Liam Hays
663eb6cd6d Display Mifare Classic data in NFC app (#2389)
* Add data display for Mifare Classic cards.
* Clean up log statements and data display.

Co-authored-by: あく <alleteam@gmail.com>
2023-02-21 16:15:48 +09:00
Round-Pi
e9aa2d3449 Merge branch 'DarkFlippers:dev' into dev2 2023-02-20 21:24:32 -05:00
MX
7d4bffb575 Merge branch 'fz-dev' into dev 2023-02-21 03:00:48 +03:00
Round-Pi
b89902942b typo combing 2023-02-20 10:55:53 -05:00
MX
0a3ff7f85a Show RSSI in Weather Station app (#2395)
* Show RSSI in weather station app: copy changes from main SubGHz app
* WeatherStation: remove dead code
* WeatherStation: sync naming schema with current code.

Co-authored-by: あく <alleteam@gmail.com>
2023-02-21 00:19:53 +09:00
Astra
b15c4afea1 [FL-3122] Re-init NFC when starting the worker (#2399)
* Re-init NFC when starting the worker
* FuriHal: cleanup nfc init/deinit sequence
* FuriHal: a little bit more defensive nfc init

Co-authored-by: あく <alleteam@gmail.com>
2023-02-20 23:44:03 +09:00
Igor Danilov
738e0df4f4 Delete rwfiletest.bin on exit SDcard benchmark (#2415)
* Update storage_settings_scene_benchmark.c: delete rwfiletest.bin on exit SDcard brencmark
* Settings: cleanup SD Benchmark temp file only if test successful


Co-authored-by: あく <alleteam@gmail.com>
2023-02-20 21:52:15 +09:00
Max Andreev
3de6ae07b7 [FL-2974] Up toolchain version to 21 (#2416)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-20 21:21:29 +09:00
ComputerCarsten
78afaab7e8 IR Universal Audio Remote: Add Grundig CMS 5000 (#2414)
Add Grundig CMS 5000 to Infrared Universal Audio Remote.
The 'Play' button doubles as 'Pause' button.
The 'Pause' button is unused.
Issue:
'Prev' button rewinds to start of title, to skip to previous title two consecutive button presses in a short time are required, however the timing is not satisfied.
2023-02-20 12:24:51 +03:00
MX
80a64d8e1a Merge branch 'fz-dev' into dev 2023-02-17 21:55:32 +03:00
Max Andreev
c7fbc8323b Toolchain 20 rollback (#2410)
* Toolchain rollback
* Remove extra code
2023-02-18 01:06:48 +09:00
hedger
335f8b9aff fbt: FBT_QUIET option; docs on environment (#2403)
* fbt: added FBT_QUIET to suppress toolchain version output; docs: added info on fbt environment
* docs: typo fixes
* fbt: fix for FBT_QUIET handling on *nix
* Add FBT_VERBOSE flag
* Add export
* Fix export
* docs: updates for FBT_VERBOSE

Co-authored-by: DrunkBatya <drunkbatya.js@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-17 21:22:08 +09:00
Mathie
009c9b1b71 Update nfc_cli.c (#2402)
Modified the f to a capital F, looks cleaner.

Co-authored-by: あく <alleteam@gmail.com>
2023-02-17 20:43:06 +09:00
MX
ab515aeebb Merge branch 'fz-dev' into dev 2023-02-17 13:07:56 +03:00
Max Andreev
487d03eca4 Fix openssl path again (#2409)
* Temp fix openssl  cert path
* Moving fix from CI to fbtenv
* Fix openssl again
2023-02-17 18:59:08 +09:00
Max Andreev
32b74b968e Fix openssl cert path in fbtenv (#2408)
* Temp fix openssl  cert path
* Moving fix from CI to fbtenv
2023-02-17 18:16:53 +09:00
Ari Bytyqi
1e98361299 Fixed first start animation typo (#2384)
* fixed first start animation typo
* updated pixels. (bottom left corner was off by two pixels)

Co-authored-by: jbohack <joebohack@gmail.com>
2023-02-17 17:17:57 +09:00
MX
ee2f6581bb Merge remote-tracking branch 'origin/dev' into dev 2023-02-17 04:27:11 +03:00
MX
5b0f74bffa Add missing buttons into hid app, remove old app
Now its all in one app, compiles as two apps that will be placed in misc folder
2023-02-17 04:27:01 +03:00
MX
faac423772 Merge pull request #338 from Willy-JL/autolock-with-pin
Autolock with pin code
2023-02-17 03:40:15 +03:00
MX
aae37121d6 Bump Settings file version to 7, cuz struct is changed and requires upd
Settings are saved as binary struct dump, so if we make any change to struct, we need to bump a version since it will not be compatible with older file in any case
2023-02-17 03:36:34 +03:00
Willy-JL
660f97f241 Add desktop auto lock with pin setting 2023-02-16 23:21:35 +00:00
Willy-JL
387e9431f5 Merge branch 'dev' of https://github.com/DarkFlippers/unleashed-firmware into autolock-with-pin 2023-02-16 23:04:38 +00:00
MX
fd46bd1886 Update readme and docs 2023-02-17 00:14:16 +03:00
MX
883f67d6d1 Merge pull request #343 from p3ngu19z/dev
Improve Tetris fall speed algorithm
2023-02-17 00:00:13 +03:00
p3ngu19z
a52f64acfd Improve fall speed algorithm 2023-02-16 11:23:46 +02:00
MX
4f4ccaa727 Merge pull request #340 from amec0e/dev
Updated infrared assets
2023-02-15 23:36:19 +03:00
MX
85f6ee2870 Merge branch 'fz-dev' into dev 2023-02-15 23:33:35 +03:00
MX
d81653461c sync anims 2023-02-15 23:33:30 +03:00
amec0e
55cfccafaf Updated tv.ir
New additions
2023-02-15 19:34:42 +00:00
amec0e
58e9acc19e Updated projectors.ir
Updated last checked
2023-02-15 19:34:14 +00:00
amec0e
6bcb9a60f7 Updated fans.ir
New additions
2023-02-15 19:33:43 +00:00
amec0e
5a02a51bd9 Updated audio.ir
new additions
2023-02-15 19:33:17 +00:00
amec0e
4aae197cf7 Updated ac.ir
new additions
2023-02-15 19:32:40 +00:00
Max Andreev
2fdebb639b [FL-3098] Up toolchain to version 20 (#2397)
* Up toolchain to 20
* Python reformat, add version info into fbtenv

Co-authored-by: あく <alleteam@gmail.com>
2023-02-16 01:56:25 +09:00
あく
25e8947282 Dolphin: drop holiday animation (#2398) 2023-02-15 20:05:08 +10:00
Willy-JL
34f0aced2f Autolock with pin code 2023-02-15 02:04:16 +00:00
MX
842b497829 Show RSSI in weather station app and in pocsag pager app 2023-02-14 01:44:02 +03:00
MX
928d57b050 Small fixes and updates 2023-02-13 22:06:01 +03:00
MX
641934f8dd Update readme & changelog 2023-02-13 21:39:21 +03:00
MX
de07313173 Merge pull request #335 from assasinfil/nice-one
Nice one encoder
2023-02-13 21:11:03 +03:00
assasinfil
921db0bb22 Bugfix 2023-02-13 21:04:11 +03:00
MX
f93462667c Remove 467.75 From freq analyzer since it has too much noise
Frequency is still can be used, just excluded from FA to avoid false detections
2023-02-13 20:54:03 +03:00
assasinfil
c56eaae89d Data save fix 2023-02-13 20:49:39 +03:00
assasinfil
185bb3277a Test fix 2023-02-13 19:58:07 +03:00
MX
b5a60dc10b Merge branch 'fz-dev' into dev 2023-02-13 19:30:36 +03:00
MX
f4af57d15a Revert "Temp fix of broken ibutton emulation"
This reverts commit 1831902fbd.
2023-02-13 19:29:48 +03:00
MX
0abb88842a Merge pull request #334 from Willy-JL/last-filebrowser-fixes
(Hopefully) last filebrowser fixes
2023-02-13 19:18:47 +03:00
Nikolay Minaylov
bc06d407f3 [FL-3113] BadUSB: disable CDC mode, USB mode switch fix (#2394) 2023-02-14 00:43:29 +09:00
Willy-JL
cb89bb9628 Fix archive sorting (skip on big folders) 2023-02-13 14:54:23 +00:00
Willy-JL
fbf99d6cb3 Skip browser inputs while loading / sorting 2023-02-13 14:54:15 +00:00
hedger
d0c6c3402c Updater visual fixes (#2391)
* updater: removed unused code; fbt: fixed build error processing in certain cases
* updater: simplified internal pre-update state
* updater: rebalanced stage weights; fixed progress hiccups
2023-02-13 23:07:53 +09:00
Georgii Surkov
5a730e3adc [FL-3107] Fix Cyfral & Metakom emulation (#2392)
* Fix Cyfral & Metakom emulation

Co-authored-by: あく <alleteam@gmail.com>
2023-02-13 20:33:15 +09:00
WillyJL
628f089c42 Mark debug app as debug not external (#2387) 2023-02-13 13:10:36 +09:00
MX
3accc005e7 Fix message 2023-02-13 03:31:16 +03:00
MX
e08b10fa3c Send default build and extra pack in the end in case of tg faults 2023-02-13 02:54:12 +03:00
MX
9007f0e360 Send extra pack builds instead of default one to telegram 2023-02-13 02:31:04 +03:00
MX
8608ba01aa Update changelog 2023-02-13 00:53:40 +03:00
MX
3747f95d5a Fix external cc1101 module issues
SubGHz HAL fixes, by @Quen0n
2023-02-13 00:43:58 +03:00
MX
6c4334e7cb Rename functions and cleanup a bit 2023-02-13 00:41:50 +03:00
MX
d247eb43de Fbt format 2023-02-12 23:58:16 +03:00
MX
ca12057426 Fix large folders parsing 2023-02-12 23:55:39 +03:00
MX
8b22952dac Merge pull request #333 from ClaraCrazy/fix-filebrowser
Fix file browser update issues
2023-02-12 20:09:06 +03:00
MX
70af1e3bfb Merge branch 'dev' into fix-filebrowser 2023-02-12 20:04:00 +03:00
MX
896a78c645 Use 17 (1W) pin for subghz debug mode 2023-02-12 20:02:27 +03:00
Willy-JL
37b84a9dbb Remove unnecessary sarcastic comment 2023-02-12 12:28:40 +00:00
Willy-JL
5a2f693551 File browser load speed improvements (skip redraw) 2023-02-12 11:22:52 +00:00
Willy-JL
82f77edc70 Fix file browser back history 2023-02-12 11:22:37 +00:00
Willy-JL
80b8a0dddb Fix file browser clownage comment 2023-02-12 11:22:23 +00:00
MX
5d8acc2210 Update changelog 2023-02-12 05:06:42 +03:00
MX
e96bae8473 Merge pull request #327 from ClaraCrazy/dev
Update filebrowser
2023-02-12 03:00:00 +03:00
Willy-JL
89a07d3573 Merge branch 'dev' of https://github.com/ClaraCrazy/filebrowser-updates into dev 2023-02-11 23:49:45 +00:00
Willy-JL
fb4e2e02be Hide files in browser while still loading 2023-02-11 23:49:29 +00:00
MX
c1e2d2443a Merge branch 'dev' into filebrowser 2023-02-12 02:48:52 +03:00
MX
08acbda895 Allow 467.75 MHz by default 2023-02-12 02:48:20 +03:00
MX
02fad884fb Merge pull request #328 from jbohack/dev
added support for subghz pagers
2023-02-12 02:45:49 +03:00
Clara K
6f37c25bdb Merge pull request #1 from DarkFlippers/dev
SubGHz HAL Fixes
2023-02-12 00:45:07 +01:00
MX
27012b6be7 SubGHz HAL Fixes 2023-02-12 02:41:11 +03:00
assasinfil
d179199a42 Need fix 2023-02-12 00:01:43 +03:00
jbohack
73a9425f73 added the common pager frequency to the frequency list 2023-02-11 15:20:34 -05:00
jbohack
462836346e added pager modulation for restaurant pagers
credit to jimi for the modulation :)
2023-02-11 15:16:09 -05:00
MX
a4c28ed5bf Show internal memory only in DEBUG mode + other fixes
Remove unused imports and remove my old code that used to hide layouts and tmp history folders, this was removed in dev but somehow was added back here
2023-02-11 21:59:22 +03:00
MX
b8deb931c2 Merge branch 'dev' into filebrowser 2023-02-11 21:47:21 +03:00
MX
1831902fbd Temp fix of broken ibutton emulation
Reverted lib changes and added old api

TODO: Find what causes that issue, issue also present in official dev branch
2023-02-11 21:09:39 +03:00
Willy-JL
99b126f0ef Fix archive tab switch code 2023-02-11 17:34:43 +00:00
assasinfil
f388a7ecab Bit fix 2023-02-11 20:26:18 +03:00
assasinfil
92d55ec90f Fix 2023-02-11 20:09:36 +03:00
assasinfil
f86582b99e Fix 2023-02-11 20:09:01 +03:00
assasinfil
c2545a2f7b Encoder fix 2023-02-11 19:18:42 +03:00
MX
9d2297410e fbt format 2023-02-11 18:28:58 +03:00
VerstreuteSeele
371f3b3869 De-xtreme-ify the code 2023-02-11 16:13:49 +01:00
VerstreuteSeele
6b99999566 Update browser 2023-02-11 15:49:00 +01:00
Clara K
11f3464e1b Update archive_browser_view.h 2023-02-11 15:41:18 +01:00
Clara K
e5bef61364 Update archive_browser_view.c 2023-02-11 15:40:46 +01:00
Clara K
c0afbf659a Update archive_browser.h 2023-02-11 15:40:11 +01:00
Clara K
a6dc16a98c Add Internal Tab 2023-02-11 15:39:30 +01:00
MX
aa646c7590 Update changelog
add forgotten change
2023-02-11 04:53:56 +03:00
MX
416a6425de Disable New Year Animation 2023-02-11 04:33:47 +03:00
MX
24a4ae8014 Fix external module timings drift
TODO: Need to improve both modules timing accuracy
2023-02-11 03:57:31 +03:00
MX
7b4f1e5d26 Temp fix discord dev notifications 2023-02-11 03:17:39 +03:00
MX
ec2d0588df Merge pull request #324 from Bon-Jorik/patch-1
Add NFC keys
2023-02-11 03:06:04 +03:00
MX
433db87976 Update changelog 2023-02-11 03:05:38 +03:00
scaff.walker
0f2bf693c1 Update mf_classic_dict.nfc 2023-02-11 02:26:56 +03:00
scaff.walker
01f5167577 Update mf_classic_dict.nfc 2023-02-11 02:25:32 +03:00
scaff.walker
6a3f1cb9e4 Update mf_classic_dict.nfc 2023-02-11 02:20:52 +03:00
MX
56b4de7e5d Finally fix discord notifications 2023-02-11 02:07:42 +03:00
MX
285c324e8d Try to fix notification pt1 2023-02-11 01:27:02 +03:00
MX
4e0c2b99a9 testing with escape chars 2023-02-11 01:18:35 +03:00
MX
ac31be8db8 test discord webhook 2023-02-11 01:12:05 +03:00
scaff.walker
6e21e204ab Update mf_classic_dict.nfc 2023-02-11 00:30:49 +03:00
MX
2298cc1d7b Update readme and changelog 2023-02-10 23:48:52 +03:00
MX
81064f8e43 Alutech display text fixes 2023-02-10 23:32:49 +03:00
MX
db012807f5 Merge branch 'fz-dev' into dev 2023-02-10 22:53:51 +03:00
MX
bd2d7bf42f Small fixes 2023-02-10 22:48:35 +03:00
MX
e9df7c9b72 Merge pull request #322 from assasinfil/alutech_at_4n
Alutech at 4n
2023-02-10 22:33:04 +03:00
assasinfil
14331a197b Timeout after preambula fix 2023-02-10 21:52:13 +03:00
assasinfil
e40444b526 Iterators fix 2023-02-10 21:49:28 +03:00
assasinfil
0521bd4320 Encoder full realization 2023-02-10 21:42:07 +03:00
assasinfil
6871c2c142 Encoder fix 2023-02-10 20:34:27 +03:00
assasinfil
b79cac4473 Encoder completed with bad crc 2023-02-10 19:03:32 +03:00
MX
66ab192cd7 Merge pull request #321 from assasinfil/kinggates_stylo_4k
Kinggates stylo 4k
2023-02-10 16:52:36 +03:00
MX
2c22061580 Merge pull request #318 from amec0e/dev
Updated infrared assets
2023-02-10 16:52:07 +03:00
MX
97087fadb9 Merge pull request #316 from notmarek/dev
Fix CTRL-SHIFT in mousejacker
2023-02-10 16:51:51 +03:00
assasinfil
affef106ea Merge remote-tracking branch 'origin/dev' into alutech_at_4n 2023-02-10 16:38:27 +03:00
assasinfil
5cf4f5fab4 Cleanup 2023-02-10 16:32:30 +03:00
assasinfil
d9f6b02da5 Hop fix 2023-02-10 16:17:56 +03:00
assasinfil
a551317cc2 Encoder fix 2023-02-10 15:55:31 +03:00
Pierce
3eacb0c715 Fixed typo in nfc_magic_scene_wrong_card.c (#2382) 2023-02-10 21:52:53 +09:00
assasinfil
0e0046c803 Merge remote-tracking branch 'origin/dev' into kinggates_stylo_4k 2023-02-10 14:16:25 +03:00
MX
36f1283bb3 Fix: line was hidden under image in decode raw 2023-02-10 03:58:09 +03:00
MX
1b1f58408d SubGHz Decode Raw GUI fixes 2023-02-10 02:25:30 +03:00
MX
4e02ac3442 Fix external CC1101 support and internal module debug 2023-02-10 02:09:29 +03:00
MX
a098e0561e Temp fix
BUG: Now sound works but sending signal with sound on doesn't actually send signal!!!
Need to return previous implementation with 2 channel Timer or find another way
2023-02-10 00:56:29 +03:00
MX
175287ee0a Fix again 2023-02-09 23:56:36 +03:00
assasinfil
7d866fade1 Merge remote-tracking branch 'origin/dev' into kinggates_stylo_4k 2023-02-09 23:29:06 +03:00
MX
c5e225656d Throw in some copy pastas
temp solution, maybe not temp, maybe its forever
2023-02-09 23:25:00 +03:00
assasinfil
a49c8d5a08 Merge remote-tracking branch 'origin/dev' into kinggates_stylo_4k 2023-02-09 23:22:40 +03:00
MX
07093d072f Fix Debug pin 2023-02-09 23:21:36 +03:00
assasinfil
727c21d60a Merge branch 'dev' into kinggates_stylo_4k 2023-02-09 22:47:53 +03:00
assasinfil
2bd80f510a Init encoder 2023-02-09 22:45:02 +03:00
MX
fda38c9d04 Debug pin setting for subghz protocol development
When DEBUG is on in settings, you can turn on debug pin in radio settings now, DO NOT use it if you don't know what it is!!!!
2023-02-09 22:41:12 +03:00
MX
16a5b13be4 Max 55 signals Seems stable, setting it to 55 for now
Subghz history
2023-02-09 22:12:03 +03:00
assasinfil
05be200762 Hop len fix 2023-02-09 21:37:54 +03:00
assasinfil
b47174d206 Completed encoder 2023-02-09 21:26:10 +03:00
assasinfil
502e8d1d8d Small fix 2023-02-09 21:17:16 +03:00
assasinfil
5d6ce87259 Encoder fix 2023-02-09 19:06:41 +03:00
MX
1707a1d1a4 Update changelog 2023-02-09 18:58:04 +03:00
MX
7927fa371e Update readme 2023-02-09 18:25:46 +03:00
MX
ef2c668e31 Small GUI fixes
remove static line in subghz receiver because now we have RSSI line
2023-02-09 18:01:52 +03:00
MX
fe3862e113 Merge branch 'fz-dev' into dev 2023-02-09 17:52:59 +03:00
MX
539c4e2dd0 Fixes & imporvements
Use our custom icon for Bin RAW
2023-02-09 17:49:28 +03:00
MX
b9351649ed Merge branch 'fz-dev' into dev 2023-02-09 17:48:50 +03:00
MX
be33e099be Fix read raw GUI
Now showing internal or external module usage properly
2023-02-09 17:22:19 +03:00
MX
ba36f4672c Throw away Kostily & Velosipedy
Ne bag a ficha, bolshe ne nuzhna
2023-02-09 17:21:40 +03:00
Max Andreev
67c2d1cf61 Migrating CI/CD to Linode S3 (#2380)
* Test PVS linode S3
* Migrating to Linode S3
* Disable PVS action debug
* Fix pvs_studio.yml
2023-02-09 19:42:41 +09:00
assasinfil
e17877b6a1 Kinggates stylo 4k tx realization
Co-authored-by: MX <10697207+xMasterX@users.noreply.github.com>
2023-02-09 12:57:22 +03:00
Skorpionm
82c730b6be SubGhz: fix cc1101_read_fifo func (#2379) 2023-02-09 14:45:30 +09:00
Petr Portnov | PROgrm_JARvis
4265057ee8 feat: add missing const qualifiers (#2233)
* feat: make `ViewPort` getters const
* feat: make tx-buffers const
* feat: make `canvas_get_buffer_size` const
* feat: make `canvas` methods const
* feat: make `icon_animation` methods const
* feat: make `scene_manager` methods const
* feat: make `loader` method const
* feat: make `canvas_get_font_params` const

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 13:58:01 +09:00
Skorpionm
163be139eb SubGhz: add protocol BinRAW (binarization of data quantized by the minimum correlated duration) (#2322)
* SubGhz: add protocol DataRAW (binarization of data quantized by the minimum correlated duration)
* SubGhz: fix name history
* SubGhz: add encoder Data_RAW protocol
* SubGhz: decreasing the size of the LevelDuration structure
* SubGhz: history, added check that there is free RAM
* SubGhz: checking for free memory, support to pass without gap
* SubGhz: add running average to average the result, auto cut noise at the end of a burst
* SubGhz: support for repeating sequences
* SubGhz: fix secplus_v2 decoder
* SubGhz: bin_RAW fix add history
* SubGhz: add debug
* SubGhz: debug refactoring
* FURI_LOG: add FURI_LOG_RAW_x formatted string output like printf
* SubGhz: fix new FURI_LOG metod
* FURI_LOG: fix unit test
* SubGhz: add enable/disable BinRAW protocol decoding
* SubGhz: fix PVS
* SubGhz: forcibly turn off the speaker when exiting SubGhz
* SubGhz: adaptive adjustment to the noise level

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 13:48:06 +09:00
Patrick Cunningham
71871949ec Picopass: show elite key used from dictionary (#2119)
* show elite key used from dictionary
* remove space so it fits on screen

Co-authored-by: あく <alleteam@gmail.com>
2023-02-09 12:47:16 +09:00
Victor Nikitchuk
d7ecc95de4 Firmware fixes and improvements for flashing via blackmagic (#2321)
Co-authored-by: quen0n <quen0n@github.com>
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-02-09 12:40:04 +09:00
MX
a7a4f9b885 SubGhz hal fixes 2023-02-08 23:31:27 +03:00
MX
eaffe0ec17 Fix small bugs 2023-02-08 21:45:23 +03:00
MX
3890c7f9fa Merge branch 'fz-dev' into dev 2023-02-08 21:26:56 +03:00
MX
6f44900e05 Update API symbols 2023-02-08 21:24:21 +03:00
hedger
a005087636 fbt: building fap_dist for compact gh build; accessor: fixed for latest ibutton changes (#2377)
* fbt: building fap_dist as default target; accessor: fixed for latest ibutton changes
* fbt: not building fap_dist as default target; github: doing fap_dist for compact builds

Co-authored-by: あく <alleteam@gmail.com>
2023-02-09 03:16:05 +09:00
Eric Betts
8f2f2d810a Move CSN space to revent overflow (#2232)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-09 03:06:42 +09:00
MX
d02c586b92 Merge branch 'fz-dev' into dev 2023-02-08 21:05:17 +03:00
MX
ed78c4ca04 Fixes 2023-02-08 20:49:06 +03:00
Skorpionm
db1a8f8014 [FL-3099] SubGhz: add protocol KingGates Stylo4k (#2368)
* [FL-3099] SubGhz: add protocol KingGates Stylo4k
* SubGhz: add unit test file
* f7: api: reverted symbols

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 02:47:39 +09:00
amec0e
6c517d5030 Updated tv.ir
Updated last checked
2023-02-08 17:44:15 +00:00
amec0e
575cce48af Updated projectors.ir
New additions
2023-02-08 17:43:39 +00:00
amec0e
4de21410b7 Updated fans.ir
New additions
2023-02-08 17:43:06 +00:00
amec0e
f0c3cde2f3 Updated audio.ir
New additions
2023-02-08 17:42:37 +00:00
amec0e
3993f2b89c Update ac.ir
Updated last Checked
2023-02-08 17:40:46 +00:00
itsweekly
39841bd5a9 Universal Projector Remote (#2343)
Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-09 02:28:34 +09:00
MX
2006bd1c95 Add linear delta 3 support to bruteforcer 2023-02-08 20:21:15 +03:00
Skorpionm
bf4d00a7d1 [FL-3100] SubGhz: add protocol Nice One (#2358)
* SubGhz: add protocol Nice One
* SubGhz: fix annotation
* SubGhz: add unit test

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 02:20:28 +09:00
MX
bbc1ba62fc Merge branch 'fz-dev' into dev 2023-02-08 20:12:10 +03:00
Skorpionm
31259d5304 [FL-3091] SubGhz: add protocol Alutech at-4n (#2352)
* GubGhz: add protocol Alutech at-4n
* SubGhz: fix syntax
* SubGhz: fix subghz_protocol_decoder_alutech_at_4n_get_hash_data
* SubGhz: add unit test alutech at-4n
* SubGhz: add name key

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 01:59:49 +09:00
Skorpionm
0afc4a8982 [FL-3092] SubGhz: add DOOYA protocol (#2178)
* SubGhz: add DOOYA protocol
* SubGhz: add unit_test DOOYA protocol
* SubGhz: fix protocol Dooya

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-09 01:37:24 +09:00
MX
c8cf3e41a7 Fix that sound switcher was not present in read raw 2023-02-08 18:48:28 +03:00
Brandon Weeks
8288a08eb3 SubGhz: add protocol "Linear Delta-3" (#2239)
* SubGhz: add protocol "Linear Delta-3"
* SubGhz: fix Leniar Delta 3
* BadUSB: mask pvs studio warning for valid code

Co-authored-by: SkorP <skorpionm@yandex.ru>
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: Skorpionm <85568270+Skorpionm@users.noreply.github.com>
2023-02-09 00:26:45 +09:00
MX
985e9f3d74 Merge branch 'fz-dev' into dev 2023-02-08 18:20:37 +03:00
MX
b1f581239b BadUSB: Keyboard Layouts (#2256)
* BadUSB: Keyboard Layouts
* Apply requested changes pt1
* Add layout file check when we loading config

Co-authored-by: Nikolay Minaylov <nm29719@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-09 00:01:00 +09:00
MX
d6d7a5ece2 Fix merge issue 2023-02-08 17:48:07 +03:00
MX
0dccbe28bb Merge branch 'fz-dev' into dev 2023-02-08 17:15:17 +03:00
Skorpionm
99253a0e28 [FL-3093, FL-3087] SubGhz: Fix Raw write, add short duration filter setting (#2300)
* SubGhz: Fix recording RAW files, sometimes could not start at a high level
* SubGhz:  subghz_worker, add short duration filter setting
* SubGhz: capture raw timings in cli. Furi: clear pending interrupts on ISR set/reset
* SubGhz: fix start  duration in furi_hal_subghz_start_async_rx
* [FL-3093] SubGhz: hopping issue in some regions
* [FL-3087] SubGhz: fix delete-ok issue
* SubGhz: remove copypasta from rx_raw cli command

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-08 22:20:42 +09:00
MX
30081b79c4 Mirror my changes to badusb layouts from PR 2023-02-08 16:10:47 +03:00
MX
e31e880264 Merge branch 'fz-dev' into dev 2023-02-08 15:26:23 +03:00
あく
cee9b640b3 Update Missing SD Card icon from PR 2373 (#2376) 2023-02-08 15:45:33 +04:00
あく
20f98050f2 Github: disable f18 build (#2375) 2023-02-08 13:38:09 +03:00
MX
cdfd9891b7 Fix debug accessor app 2023-02-08 12:57:23 +03:00
MX
468d0ea966 Merge branch 'fz-dev' into dev 2023-02-08 12:43:07 +03:00
Michal Suchánek
00076deece SCons: do not include backup files in build (#2221)
* SCons: do not include backup files in build
* fbt: now GlobRecursive by default excludes backup files
* fbt: added backup file exclusion to plain libs

Signed-off-by: Michal Suchanek <msuchanek@suse.de>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-08 18:35:38 +09:00
LTVA1
23ecc186c2 Custom font set function (#2261)
* custom font set function
* update API symbols
* add example of custom font usage
* delete u8g2 dependency in example custom font
* rename to canvas_set_custom_u8g2_font
* now change the name in ALL places

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-02-08 18:26:17 +09:00
MX
b7c2b9eff1 Change API version back 2023-02-08 12:23:04 +03:00
MX
81316255f9 Fix after merge issues pt1 2023-02-08 12:22:11 +03:00
MX
6c768f2019 Merge branch 'fz-dev' into dev 2023-02-08 12:09:57 +03:00
Liam Hays
111c7557b3 Fix minor UI inconsistencies and bugs (#2361)
* Changed blue LED to cyan in NFC Magic and Picopass apps.
* Fix capitalization of ATQA and UID in NFC Add Manually wizard.
* Fix reselection of "Saved" menu item in NFC and RFID apps.
* Fix double back press after deleting a file in the SubGhz browser.
* Make NFC app behave like other apps: return to the file browser after deleting a file.
* Rename NfcSceneSetAtqua to NfcSceneSetAtqa.
* Save selected menu items in NFC Magic and Picopass apps in a way that always works.
* Restore previous selection in Universal Remotes menu.
* Other way to do universal remote menu saving, and NFC Extra Actions saves last selection.

Co-authored-by: あく <alleteam@gmail.com>
2023-02-08 17:08:50 +09:00
Georgii Surkov
7a3a1aaf0d [FL-3057] Allow use of any suitable pin for 1-Wire devices (#2350)
* Add 1-wire thermometer example app stub
* Working 1-wire thermometer app
* Refactor app to use threads
* Clean up code, add comments
* Add CRC checking
* Increase update period
* Fix error in fbt
* Revert the old update period
* Use settable pin in onewire_host
* Use settable pin for onewire_slave
* Clear EXTI flag after callback, make private methods static in onewire_slave
* Do not hardcode GPIO pin number
* Remove iButton hal from furi_hal_rfid
* Remove most of furi_hal_ibutton
* Add some of furi_hal_ibutton back
* Slightly neater code
* Fix formatting
* Fix PVS-studio warnings
* Update CODEOWNERS
* Add furi_hal_gpio_get_ext_pin_number
* Create README.md
* FuriHal: move furi_hal_gpio_get_ext_pin_number to resources

---------

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-08 14:40:44 +09:00
Sergey Gavrilov
e3d473bf42 [FL-2435] SD over SPI improvements (#2204)
* get rid of BSP layer
* sector_cache: init in any case
* new sd-spi driver: init
* Delete stm32_adafruit_sd.c.old
* Delete spi_sd_hal.c.old
* Storage: faster api lock primitive
* Threads: priority control
* Flags: correct error code
* Spi: dma mode
* SD-card: use DMA for big blocks of SPI data
* Fix wrong SD_TOKEN_START_DATA_MULTIPLE_BLOCK_WRITE value
* do not memset cache if it is NULL
* remove top-level timeouts
* sd hal: disable debug
* Furi HAL: DMA
* Furi HAL RFID: use furi_hal_dma
* Furi HAL DMA: tests
* Furi HAL DMA: docs
* rollback "Furi HAL RFID: use furi_hal_dma"
* 4 channels taken from DMA manager for core HAL.
* Furi HAL DMA: live fast, die young
* RPC tests: increase message buffer
* SPI HAL: use second DMA instance
* sd hal: new CID getter
* SPI hal: use non-DMA version if kernel is not running
* IR hal: generalize DMA definition
* storage: add CID data to sd info
* RFID hal: generalize DMA definition
* SUBGHZ hal: generalize DMA definition. Core hal moved to DMA2.
* Storage: small optimizations, removal of extra mutex
* Storage: redundant macro
* SD hal: more timeouts
* SPI hal: DMA init
* Target: make furi_hal_spi_dma_init symbol private
* Update F18 api symbols

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-08 13:41:22 +09:00
hedger
224d0aefe4 [FL-2733] multitarget support for fbt (#2209)
* First part of multitarget porting
* Delete firmware/targets/f7/Inc directory
* Delete firmware/targets/f7/Src directory
* gpio: cli fixes; about: using version from HAL
* sdk: path fixes
* gui: include fixes
* applications: more include fixes
* gpio: ported to new apis
* hal: introduced furi_hal_target_hw.h; libs: added one_wire
* hal: f18 target
* github: also build f18 by default
* typo fix
* fbt: removed extra checks on app list
* api: explicitly bundling select mlib headers with sdk
* hal: f18: changed INPUT_DEBOUNCE_TICKS to match f7
* cleaned up commented out code
* docs: added info on hw targets
* docs: targets: formatting fixes
* f18: fixed link error
* f18: fixed API version to match f7
* docs: hardware: minor wording fixes
* faploader: added fw target check
* docs: typo fixes
* github: not building komi target by default
* fbt: support for `targets` field for built-in apps
* github: reworked build flow to exclude app_set; fbt: removed komi-specific appset; added additional target buildset check
* github: fixed build; nfc: fixed pvs warnings
* attempt to fix target id
* f7, f18: removed certain HAL function from public API
* apps: debug: enabled bt_debug_app for f18
* Targets: backport input pins configuration routine from F7 to F18

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-02-08 01:33:05 +09:00
MX
e4c9568867 Merge branch 'fz-dev' into dev 2023-02-07 18:37:30 +03:00
MX
0ee04fb968 Merge branch 'fz-dev' into dev 2023-02-07 18:36:02 +03:00
あく
1eda913367 [FL-3075] Pin Reset (#2367)
* Nfc: fix PVS warnings
* Factory reset combo, initial version
* Recovery screen and correct input pin initialization
* Better pin and factory reset message
* Down to cancel factory reset
2023-02-08 01:35:49 +10:00
Marek Veselý
3df5a99968 Fix CTRL-SHIFT in mousejacker 2023-02-07 15:56:02 +01:00
Krzysztof Zdulski
d035872cf6 nfc: Add mifare classic value block commands (#2317)
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-07 12:21:25 +09:00
Round-Pi
1ff5843ee6 battery info temperature shown in C or F based on settings (#2360)
* battery Info temperature displays C or F
* PowerSettings: add locale module to dependencies

Co-authored-by: あく <alleteam@gmail.com>
2023-02-07 12:05:52 +09:00
MX
f116e8165f Merge branch 'fz-dev' into dev 2023-02-06 22:46:17 +03:00
Wild Rat
147f42a2b7 Add Daikin FTXM20M & Mitsubishi SRK63HE (#2349)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-07 00:49:34 +09:00
nas
79d45c97f9 AleX83Xpert/add f keys to keyboard layout (#2362)
* Assets: png images for F1..F12 keys: Will be used for HID keyboard layout
* HID KEYBOARD F1..F12 keys were added
  - a new row with functional keys was added
  - logic for displaying the keyboard layout was improved
* HidApp: hid functional keys by default

Co-authored-by: あく <alleteam@gmail.com>
2023-02-07 00:24:05 +09:00
Sergey Gavrilov
6e179bda1f Script that can find programmer and flash firmware via it. (#2193)
* Init
* Fallback to networked interface
* remove unneeded cmsis_dap_backend
* serial number
* windows :(
* remove jlink, fix path handling
* scripts: program: path normalization
* scripts: program: path normalization: second encounter

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: あく <alleteam@gmail.com>
2023-02-06 23:56:36 +09:00
Max Andreev
9f279ac872 [FL-2744] SPI Mem Manager C port (#1860)
Co-authored-by: あく <alleteam@gmail.com>
2023-02-06 23:03:29 +09:00
MX
72f250195c Playing games now affect Flipper's level
All games now will increase flipper's level when you start them or win in some of them

Games with endless play like tetris or flappy bird has no winning logic so they will increase level only when you start them
2023-02-05 15:39:10 +03:00
MX
246dcdb23f Merge pull request #311 from Round-Pi/from-upstream
battery info temperature shown in C or F based on settings
2023-02-05 02:47:19 +03:00
Cathy Nguyen
683b5cdc82 battery info temperature shown in inp/metric units 2023-02-04 16:17:18 -05:00
MX
92135f8f06 update readme 2023-02-04 17:53:07 +03:00
MX
771dc95a44 Update changelog 2023-02-04 17:38:09 +03:00
MX
cc8066d9a0 ???
for some reason fbt says it should be removed
need to find why it differs from ofw
2023-02-04 16:09:40 +03:00
MX
bbe55aa9d6 Change example custom font app type to DEBUG
so it will not be compiled in release builds
2023-02-04 15:54:18 +03:00
MX
5a7d6fcc63 Update readme 2023-02-04 01:21:09 +03:00
MX
66e606fe96 upd submodule 2023-02-03 23:48:18 +03:00
MX
425f8f0254 Merge branch 'fz-dev' into dev 2023-02-03 23:45:57 +03:00
あく
52680fd14e FreeRTOS: update to 10.5.1 (#2353) 2023-02-04 04:09:20 +10:00
MX
559c4567cb Rename: Radio settings -> Radio Settings 2023-02-03 17:43:17 +03:00
MX
8c50225da4 Fix issue with external module settings
It was possible to set it to external module without module connected, and as it saves its state in memory, all other plugins that uses subghz will not work, now we checking for module when you changing that setting
2023-02-03 17:20:10 +03:00
MX
edddfbcb2c Merge pull request #307 from quen0n/ext_cc1101
External CC1101 support
2023-02-03 15:44:57 +03:00
MX
bfbcce030c Fix GUI issues
Fix secplus v1 text too
2023-02-03 15:39:02 +03:00
Victor
5458157924 Added external CC1101 support 2023-02-02 22:47:50 +03:00
MX
7edf90c2e5 Merge branch 'fz-dev' into dev 2023-02-02 18:28:52 +03:00
AloneLiberty
46fb86265c NFC: fix creating MF Classic tags from "Add Manually" menu (BCC calulation and ATQA/SAK writing) (#2342)
* NFC: fix creating MF Classic cards from "Add Manually" menu (BCC calculation and AQTA/SAK writing)
* NFC: Fix BCC/SAK/ATQA in unit_tests and SAK in nfc_generate_mf_classic

Co-authored-by: gornekich <n.gorbadey@gmail.com>
2023-02-02 22:18:39 +07:00
MX
52bcf27c2a Update readme
Clock uses system locale settings
2023-02-02 15:12:35 +03:00
MX
3c52dca0c2 Fix mouse jiggler merge issue 2023-02-02 14:31:03 +03:00
MX
ed4b2b3362 Merge remote-tracking branch 'LTVA1/patch-custom-font' into dev 2023-02-02 14:27:17 +03:00
MX
b05cba931b Update UniTemp
https://github.com/quen0n/unitemp-flipperzero/tree/master
2023-02-02 14:01:23 +03:00
MX
1d46df70a9 Update ProtoView
https://github.com/antirez/protoview
2023-02-02 13:54:14 +03:00
MX
f45f2a45da Remove invalid keys from mf classic dict 2023-02-02 13:46:53 +03:00
MX
a0d5aa0c7b Merge pull request #303 from DocKuro/mouse_jiggler_interval_selction_added
Added movement interval in mouse_jiggler USB & BLE
2023-02-02 13:38:34 +03:00
Emanuele Conti
cee11464de Merge branch 'mouse_jiggler_interval_selction_added' of https://github.com/DocKuro/unleashed-firmware into mouse_jiggler_interval_selction_added 2023-02-02 10:33:54 +00:00
Emanuele Conti
a617ce1813 used FuriString instead of string_t 2023-02-02 10:32:07 +00:00
MX
05641378d9 Fixed 2023-02-02 13:20:58 +03:00
MX
fbe7209817 Use FuriString instead of string_t 2023-02-02 13:16:00 +03:00
MX
c630e351fc Merge branch 'dev' into mouse_jiggler_interval_selction_added 2023-02-02 12:56:43 +03:00
MX
26b5b7e406 Merge pull request #305 from teeebor/feature/solitaire-and-blackjack-flipper-score
Solitaire and Blackjack now affect Flipper's level
2023-02-02 12:55:00 +03:00
MX
d94caf0ba6 Merge pull request #306 from amec0e/dev
Updated infrared assets + InfraredCaptures Documentation
2023-02-02 12:47:48 +03:00
MX
16f8f2c2df Merge branch 'fz-dev' into dev 2023-02-02 11:54:20 +03:00
amec0e
989442eab6 Updated fans.ir
Removed 2 temp entries as it does not adjust fan speed.
2023-01-31 17:20:23 +00:00
amec0e
ab452bd575 Updated InfraredCaptures.md
Adjusted formatting
2023-01-31 15:27:48 +00:00
amec0e
cbabd46a4d Updated InfraredCaptures.md 2023-01-31 15:25:54 +00:00
amec0e
743ee7b990 Added InfraredCaptures.md
This should help users to capture correct raw capture data for ACs, and also help them to get the best raw capture available for other infrared assets
2023-01-31 15:22:49 +00:00
amec0e
d91dc04585 Updated tv.ir
updated last checked
2023-01-31 15:09:31 +00:00
amec0e
e6f7e3a37e Updated projectors.ir 2023-01-31 15:09:01 +00:00
amec0e
2929b12134 Updated fans.ir 2023-01-31 15:08:39 +00:00
amec0e
3985cb61c8 Updated audio.ir 2023-01-31 15:08:17 +00:00
amec0e
376e45a09d Updated ac.ir
Updated last checked
2023-01-31 15:07:50 +00:00
hedger
fcd3799aee Merge branch 'dev' into patch-custom-font 2023-01-31 15:05:53 +07:00
LTVA1
dfd46f5539 fix formatting 2023-01-30 15:11:32 +03:00
Giacomo Ferretti
01a9854f8a Documentation: add BadUSB GUI-CTRL #2347 2023-01-30 16:49:51 +07:00
Michal Suchánek
d9be815889 Print card CID in storage info (#2227) 2023-01-30 16:14:30 +07:00
Konstantin Volkov
7f3ebcd110 Changed bench target, stlink serial and added error for testing the run (#2275)
* changed bench target, stlink serial and added error for testing the run
* changed flipper name for macos and changed serial aquisition for device manager
* tested broken pipeline, reverting test data
* added timeout-minutes, testing if its int or float

Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-30 15:59:45 +07:00
あく
bf2ab1f4d5 Merge branch 'dev' into patch-custom-font 2023-01-30 15:30:54 +07:00
Noam Drong
5db7fdf985 Add support for GUI-CTRL in bad_usb (#2315)
Co-authored-by: あく <alleteam@gmail.com>
2023-01-30 15:03:10 +07:00
Milk-Cool
b1496ee9bd Furi: getter for current thread stdout write callback (#2344) 2023-01-30 14:54:15 +07:00
Tibor Tálosi
cd29fb8568 solitaire and blackjack now affect flippers level 2023-01-29 20:08:42 +01:00
Angel
a8e5f22500 LF-RFID: add CRC calculation to paradox protocol (#2299)
Co-authored-by: Angel <angel@Zoomies>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-29 18:23:45 +07:00
Skorpionm
e12958d408 [FL-3082] WS: add protocol LaCrosse-TX (TFA Dostmann) (#2292)
* WS:  add protocol LaCrosse-TX  (TFA Dostmann)
* WS: fix syntax
* WS: fix MSG_TYPE
* WS: fix PVS

Co-authored-by: あく <alleteam@gmail.com>
2023-01-29 18:08:26 +07:00
DEXV
55054fc1a7 Assets: correct MicroSD card pinout in service animations (#2323)
* New Micro Sd-Card pinout: fixing the Micro Sd-Card pinout for the blocking an internal sd card animations
* Updating the sd card pinout
* Updating magnifying glass
2023-01-29 17:55:04 +07:00
Petr Portnov | PROgrm_JARvis
f5fe0ff694 Furi: make furi_is_irq_context public (#2276)
* Furi: make `furi_is_irq_context` public
* Furi: proper name and documentation for furi_kernel_is_irq_or_masked.
* Target: bump symbol table version
* Furi: proper doxygen context for warnings

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2023-01-29 17:12:24 +07:00
Krzysztof Zdulski
d93ed003fe Change camelCase to PascalCase in code style (#2329)
Co-authored-by: あく <alleteam@gmail.com>
2023-01-29 12:53:35 +07:00
Emily Trau
24a23e5dc7 debug apps: made runnable as .faps; sdk: resolved additional APIs in use by faps (#2333)
* sdk: resolve additional APIs in use by faps
* debug tools: fixed battery_test, bt_debug, display_test, rpc_debug

Co-authored-by: hedger <hedger@nanode.su>
Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-27 16:41:55 +07:00
Giacomo Ferretti
126a9efd09 NFC: change from int8_t to uint8_t (#2302)
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-27 15:21:52 +07:00
Giacomo Ferretti
eee5c35400 NFC: add MIFARE MINI support (#2307)
* NFC: add MIFARE MINI support
* Move new value to end of enum
* nfc: added missing unit test

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-27 12:51:47 +07:00
Emily Trau
4dc4d34d04 emv: parse track1&2 equivalent data (#2332)
* emv: parse track1&2 equivalent data
* emv: alternate expiry parser
* nfc: log EMV track1&2 data to trace output

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-27 12:10:08 +07:00
Krzysztof Zdulski
8fc834090d nfc: Fix sector reads when one block is unreadable for MIFARE Classic (#2296)
* Fix sector reads when one block is unreadable
* Auth on the correct block instead of first
* Fix in sector reader as well
* Apply patch by @gornekich

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-27 12:00:25 +07:00
Emanuele Conti
a5d92d7a08 Used array lenght to hide right arrow 2023-01-26 15:00:34 +00:00
Emanuele Conti
884a751ae7 Fixed max array size check 2023-01-26 14:55:15 +00:00
Emanuele Conti
411855ce81 Added movement interval in mouse_jiggler USB & BLE 2023-01-26 14:31:54 +00:00
Krzysztof Haładyn (krzys_h)
5134f44c09 nfc: Fix crash when using debug PCAP trace (#2338) 2023-01-26 15:28:36 +07:00
LTVA1
f4cb458391 now change the name in ALL places 2023-01-25 08:52:51 +03:00
LTVA1
34ff250eea rename to canvas_set_custom_u8g2_font 2023-01-25 08:18:32 +03:00
Sergey Gavrilov
709fa633ff ELF-loader: wait for notification to complete on app exit (#2335) 2023-01-25 12:15:01 +07:00
MX
898b29b921 Fix SubGHz GUI receiver bug
When keyboard is locked and popup appears it now shows bottom text correctly
2023-01-21 10:45:10 +03:00
MX
f3939a715a Update Protoview
https://github.com/antirez/protoview
2023-01-20 07:11:00 +03:00
MX
3174d29dfa Update protoview 2023-01-19 20:28:02 +03:00
MX
e4fd3b1b0f Update changelog and readme 2023-01-19 20:26:26 +03:00
MX
856c8a1784 Merge pull request #298 from amec0e/dev
Updated infrared assets
2023-01-19 20:13:02 +03:00
MX
f0015fcf3b Merge pull request #297 from assasinfil/somfy_keytis
Somfy keytis
2023-01-19 20:12:31 +03:00
amec0e
42fc209c63 Updated tv.ir 2023-01-19 17:07:17 +00:00
amec0e
2aafc207c0 Updated projectors.ir
Updated last checked
2023-01-19 17:06:58 +00:00
amec0e
ecb0e5c520 Updated fans.ir 2023-01-19 17:06:13 +00:00
amec0e
c875aca468 Updated audio.ir 2023-01-19 17:05:50 +00:00
amec0e
80a778e4cb Updated ac.ir
Updated last checked
2023-01-19 17:05:30 +00:00
MX
792b035cac Not bumping api version 2023-01-19 20:03:02 +03:00
MX
e07b96e04b Merge branch 'dev' into somfy_keytis 2023-01-19 20:02:18 +03:00
assasinfil
7f08b25928 Inter-frame fix 2023-01-19 19:51:15 +03:00
MX
f8cc914a15 Change default hopping frequency list
Change it to use only most common frequencies
2023-01-19 18:14:05 +03:00
assasinfil
c6e30a1ed9 Inter-frame timeout fix 2023-01-19 18:04:03 +03:00
MX
5853e0bdd9 Block usage of hopping with detect raw at same time
Enough, it will not be enabled back, do not ask for it, its efficiency is almost 0, if you didn’t know it looses signals and all that you can capture is a micro part of end of the signal

Detect raw also will be removed in a future (and replaced with more correct solution)
2023-01-19 16:27:07 +03:00
assasinfil
3dd76f5c2f Added somfy keytis encoder 2023-01-19 14:49:00 +03:00
MX
59bcad0cfc Remove protoview binaries 2023-01-19 01:19:21 +03:00
MX
034a436ae0 Update changelog 2023-01-19 00:54:02 +03:00
MX
c303b44f3f Disable debug messages in protoview 2023-01-18 23:24:35 +03:00
MX
6e1875f285 Remove New Year update slideshow 2023-01-18 22:53:22 +03:00
MX
5a9da13d84 Update UniTemp and run fbt format 2023-01-18 22:25:39 +03:00
MX
e4aad248cf Update changelog and readme 2023-01-18 22:24:16 +03:00
MX
0650178946 Fixed and improved WAV Player by LTVA1
https://github.com/LTVA1/wav_player
2023-01-18 21:17:53 +03:00
MX
6aad6840f6 Add protoview
https://github.com/antirez/protoview
2023-01-18 20:18:19 +03:00
MX
7aaecd9278 Add text viewer 2023-01-18 20:05:01 +03:00
MX
b52674607a Add UART Terminal app
by cool4uma

https://github.com/cool4uma/UART_Terminal/tree/main
2023-01-18 19:55:46 +03:00
MX
adfac7affb Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-01-18 19:52:33 +03:00
MX
7a211e0018 Update UniTemp
https://github.com/quen0n/unitemp-flipperzero/tree/dev
2023-01-18 19:51:10 +03:00
MX
62b287aac7 Update links 2023-01-18 19:33:01 +03:00
MX
fb39d6e679 Format code 2023-01-18 19:19:49 +03:00
MX
b02a60f223 Merge pull request #289 from TQMatvey/somfy_encoder_new
Somfy telis encoder
2023-01-18 19:18:20 +03:00
MX
0b92e5ae74 Fix various issues 2023-01-18 19:16:20 +03:00
MX
27826f95ca Merge branch 'dev' into somfy_encoder_new 2023-01-18 19:01:22 +03:00
MX
24c12ab852 Merge pull request #278 from Fasjeit/dev
New battery display (Bar %)
2023-01-18 18:56:33 +03:00
MX
959ea4d8c1 Merge branch 'dev' into batt-ui 2023-01-18 18:40:15 +03:00
MX
7f09f5f616 Merge pull request #273 from darmiel/feat/playlist
feat[infrared]: allow disabling automatic signal decoding
2023-01-18 18:29:30 +03:00
MX
dfe141c78f Merge pull request #282 from amec0e/dev
Updated Infrared Assets
2023-01-18 18:28:19 +03:00
MX
dce2271330 Merge pull request #288 from Smileycathy1128/master
Oh boy 12AM!
2023-01-18 18:28:04 +03:00
MX
c708a301f5 Merge branch 'fz-dev' into dev 2023-01-18 18:26:49 +03:00
MX
927fcca081 Revert "Merge pull request #252 from X-Stuff/dev-advanced-config"
This reverts commit ed5b2da9ad.
2023-01-18 18:18:17 +03:00
MX
db16b3ef1d Revert infrared hotfix 2023-01-18 18:15:30 +03:00
assasinfil
379807423f Debug prints cleanup 2023-01-18 16:21:42 +03:00
assasinfil
8c94e3e78d Remove bad folder 2023-01-18 15:15:02 +03:00
assasinfil
5123fac5d9 Full realization 2023-01-18 15:11:32 +03:00
assasinfil
cd5596027f Fixed 2023-01-18 14:57:30 +03:00
Cathy Nguyen
374452796c fix 00AM: Flipper may be Zero, but midnight isn't 2023-01-17 23:41:13 -05:00
hedger
a0814aab31 [FL-3081] fbt: removed DEBUG_TOOLS & FAP_EXAMPLES flags (#2291)
* fbt: deprecated DEBUG_TOOLS & FAP_EXAMPLES flags
* fixes for PVS warnings
* scripts: fbt: fixed leaking PYTHONHOME
2023-01-17 18:07:47 +03:00
hedger
341610b8a1 [FL-3080] fbt: PVS support (#2286)
* fbt: added firmware_pvscheck & firmware_pvs targets for *nix
* fbt: pvs support on Windows
* fbt: additional fixes & docs for PVS support
* fbt: fixes for updater env configuration
* github: reworked pvs workflow
* vscode: added PVS shortcut
* pvs: added --ignore-ccache flag
* fbt: pvs: opening web browser if there are warnings
* fbt: pvs: added browser handler for mac
* github: fixed report path for PVS
* fbt: pvs: fixed report upload path
* removed intentional PVS warning
* fixed more PVS warnings
* fixed secplus_v1 PVS warning
* fbt: added PVSNOBROWSER flag
* github: setting PVSNOBROWSER for pvs runs
* fbt: less debug output

Co-authored-by: あく <alleteam@gmail.com>
2023-01-17 15:55:49 +03:00
assasinfil
414a13131a Fix v2? 2023-01-17 13:41:41 +03:00
assasinfil
08acfa50c0 Fix? 2023-01-17 00:36:18 +03:00
assasinfil
75c47a8d64 Full package data 2023-01-17 00:06:00 +03:00
LTVA1
6aeb9478aa Revert "the MINE formatting"
This reverts commit 13acdf00da.
2023-01-16 20:19:00 +03:00
TQMatvey
f41c06ab74 somfy telis: not done yet
Co-authored-by: assasinfil <nfa57643@gmail.com>
2023-01-16 22:10:16 +07:00
assasinfil
5f82732b4f Completed encoder 2023-01-16 16:40:12 +03:00
assasinfil
ddc5540eeb Clean 2023-01-16 15:50:45 +03:00
TQMatvey
729a1b5788 somfy_telis: encoder is almost done
Co-authored-by: assasinfil <nfa57643@gmail.com>
2023-01-16 19:41:16 +07:00
Eric Betts
9e1a6a6d2e relocate R_ARM_CALL (#2305) 2023-01-16 12:36:59 +03:00
LTVA1
13acdf00da the MINE formatting 2023-01-16 12:10:32 +03:00
amec0e
d50418e839 Updated projectors.ir 2023-01-13 18:17:47 +00:00
amec0e
682d2d9b6f Updated tv.ir 2023-01-13 17:38:53 +00:00
amec0e
deaf80fddc Updated projectors.ir 2023-01-13 17:38:31 +00:00
amec0e
895dba06ba Updated fans.ir 2023-01-13 17:38:06 +00:00
amec0e
c89a594d30 Updated audio.ir 2023-01-13 17:37:44 +00:00
amec0e
70f0ab1442 Updated ac.ir 2023-01-13 17:37:13 +00:00
gid9798
073fb3861a Add the ability to turn pages in infrared (#2271)
Co-authored-by: あく <alleteam@gmail.com>
2023-01-13 17:11:12 +03:00
Georgii Surkov
75e9de12b0 [FL-3078] Per protocol signal repeat count (#2293)
* Better Infrared protocol file structure
* Rename InfraredProtocolSpec to InfraredProtocolVariant
* Slightly better names
* Add repeat count field to protocol variant description
* Repeat the signal the appropriate number of times when brute-forcing
* Repeat the signal the appropriate number of times when sending via worker
* Better signal count logic in infrared_transmit
* Better variable names
* Convert some raw signals to messages in tv.ir

Co-authored-by: あく <alleteam@gmail.com>
2023-01-13 16:50:19 +03:00
Fasjeit
78139c5936 drawing own battery (Bar %) charging display 2023-01-12 11:35:42 +03:00
Nikolay Minaylov
ad9d746a27 BadUSB backspace/delete fix (#2288)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-01-11 16:58:51 +03:00
Giacomo Ferretti
20621da8ac Fix typos in source code (#2285)
* Fix typo in TextInput module

* Fix typo in Widget comment

* Fix typo in comment

Co-authored-by: hedger <hedger@users.noreply.github.com>
2023-01-11 16:41:57 +03:00
TQMatvey
b30aa890e6 initial Somfy Telis Encoder (doesnt work) 2023-01-11 19:47:45 +07:00
Stephen Kent
d2df35a35b fbt: add fap_deploy target to build and copy all .fap apps to flipper (#2146)
* fbt: add `faps_copy` target to build and copy all .fap apps to flipper
* fbt: restore default runfap.py invocation behavior, use -n for copy only
* fbt: proper implementation of fap_deploy target

Co-authored-by: hedger <hedger@nanode.su>
2023-01-11 13:13:07 +03:00
LTVA1
44830593c1 delete u8g2 dependency in example custom font 2023-01-11 12:15:08 +03:00
あく
8d2143add5 Fix various issues reported on github (#2280)
* Desktop: Fix use after free in slideshow view
* Gui: long press toggles first letter case too
* Desktop: remove debug logging
2023-01-10 03:15:03 +09:00
Fasjeit
4dc2a7f212 New battery display (Bar %) 2023-01-09 17:50:38 +03:00
Liam Droog
b7046b2179 Change broken BadUSB link to Hak5 duckyscript quick reference webpage (#2270)
* Change broken link to Hak5 duckyscript quick reference webpage
* Update BadUSB syntax link
2023-01-09 15:03:51 +09:00
LTVA1
3bac76f75e Merge branch 'patch-custom-font' of https://github.com/LTVA1/flipperzero-firmware-wPlugins into patch-custom-font 2023-01-08 20:13:09 +03:00
LTVA1
8488f4406e add example of custom font usage 2023-01-08 20:12:27 +03:00
Daniel
4ec5dbcee8 feat: allow disabling automatic signal decoding 2023-01-08 02:05:17 +01:00
MX
78c64737aa Fix readme 2023-01-08 03:17:00 +03:00
MX
76047e6e48 Merge pull request #272 from amec0e/dev
Updated infrared assets
2023-01-08 02:42:06 +03:00
amec0e
cd4f719783 Updated tv.ir
New additions and removed 2 mislabelled buttons CH- and VOL- which in fact was Pre_ch and Num_Input
2023-01-07 22:21:48 +00:00
amec0e
b3f32b6938 Updated projectors.ir last checked 2023-01-07 22:20:51 +00:00
amec0e
3a4b5e6445 Updated fans.ir 2023-01-07 22:20:16 +00:00
amec0e
754a29009d Updated audio.ir 2023-01-07 22:19:56 +00:00
amec0e
8c791a998a Updated ac.ir 2023-01-07 22:19:27 +00:00
LTVA1
74c46a515c Merge branch 'dev' into patch-custom-font 2023-01-07 22:11:56 +03:00
MX
797ddc0755 Update Unitemp
and remove old temp sensor app, unitemp now supports all sensors from that app
2023-01-07 20:05:37 +03:00
MX
bc99538ca8 Update UniTemp
https://github.com/quen0n/unitemp-flipperzero
2023-01-07 18:42:38 +03:00
MX
b6442f2971 Fix readme links 2023-01-07 18:40:47 +03:00
MX
c3b8d3cef4 Testing 2 repeats in infrared 2023-01-07 04:56:45 +03:00
MX
3fa11aa4a0 Update UniTemp
https://github.com/quen0n/unitemp-flipperzero/tree/dev
2023-01-07 02:08:15 +03:00
MX
ddf4f268ea Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-01-07 02:07:26 +03:00
MX
a921a828e5 Fix Dolphin animations manifests 2023-01-07 02:00:39 +03:00
MX
a94c553c5a Merge branch 'fz-dev' into dev 2023-01-07 01:59:20 +03:00
LTVA1
50ee2eb8aa update API symbols 2023-01-06 22:32:50 +03:00
Maksim Derbasov
2c450bd835 Show region information in sub-GHz app (#2249)
* Show region info in sub-GHz app
* SubGhz: reset widget on region info scene exit
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
2023-01-07 04:28:28 +09:00
LTVA1
1cdccbae23 formatting 2023-01-06 21:52:17 +03:00
LTVA1
109c34398f custom font set function 2023-01-06 21:43:43 +03:00
knrn-ai
c24bea6b06 Documentation: edit texts, markdown linting (#2226)
Co-authored-by: konerini <25254561+konerini@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2023-01-07 03:18:43 +09:00
knrn-ai
fa223a4f4b ReadMe: edit text, move Links to the end (#2219)
* Edit text, move Links to the end
* ReadMe: can to must

Co-authored-by: あく <alleteam@gmail.com>
2023-01-07 03:05:58 +09:00
Astra
5e74622b2a [FL-3072] Add the sleigh ride animation (#2224)
* Add sleigh animation
* Fix manifest

Co-authored-by: あく <alleteam@gmail.com>
2023-01-07 01:16:58 +09:00
yan0f
9740dd8c75 Fix typos in source code (#2258) 2023-01-07 01:06:50 +09:00
あく
41c43f4805 Various improvements: Toolbox, Updater and Unit Tests. (#2250)
* Toolbox: add seek to character stream method. UpdateUtils: reverse manifest iterator. UnitTests: more unit tests.
* Target: bump API version. Updater: delete empty folders from manifest before resource deployment.
* UnitTests: use manifest from unit_tests folder instead of global one
* Make PVS happy
* sector cache: allocate always
* Better PVS config for manifest.c
* PVS: Move exception outside of condition
* PVS: remove confusing condition

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2023-01-06 16:31:17 +10:00
MX
890419864c Update links in readme 2023-01-06 06:55:09 +03:00
MX
604b93645e Merge pull request #267 from amec0e/dev
Updated infrared assets
2023-01-06 02:55:51 +03:00
MX
7d4d2e19a9 Infrared: Fix not enough signal repeats in brute 2023-01-06 02:23:03 +03:00
amec0e
ecf7dfd8fd Updated audio.ir 2023-01-05 21:39:09 +00:00
amec0e
c8fb64ce22 Updated fans.ir 2023-01-05 21:38:19 +00:00
amec0e
11c6d2d0be Updated projectors.ir 2023-01-05 21:37:26 +00:00
amec0e
23155f9891 Updated ac.ir 2023-01-05 21:36:40 +00:00
amec0e
9248de50d1 Updated tv.ir 2023-01-05 21:34:55 +00:00
Jack Webb-Heller
b8dd75884c Add Dyson Purifier Hot+Cool support to IR AC Library (#2252) 2023-01-05 22:39:42 +03:00
MX
f7dfe77aaf Apply source code formatting
./fbt format
2023-01-03 19:07:58 +03:00
MX
ed5b2da9ad Merge pull request #252 from X-Stuff/dev-advanced-config
Bandwidth, Datarate and Macnhester Enable decoding configuration
2023-01-03 19:06:39 +03:00
MX
4571dd25a3 Merge branch 'dev' into dev-advanced-config 2023-01-03 18:48:33 +03:00
MX
5d4dcc925d Merge branch 'fz-dev' into dev 2023-01-03 18:42:03 +03:00
MX
28345b2fbd Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2023-01-03 18:41:22 +03:00
MX
82f8ad4540 Add 350Mhz to default range
Actually this frequency is used by some part of home devices like ceiling fans
2023-01-03 18:40:03 +03:00
Dimitry
df88a805a0 Removing AM* preset if launching regular read mode 2023-01-02 23:54:04 +02:00
Georgii Surkov
72dc8e95d0 Add .kateconfig and .kateproject to .gitignore (#2237) 2023-01-02 18:01:59 +09:00
MX
1534bcf7cb Why?!
appleboy broke 'latest' tag on dockerhub, its only for arm now
so, applying hotfix for now
2023-01-01 23:59:09 +03:00
MX
62fbf868fe Fix dev builds
Drone ssh defaults to arm now.. so need to specify amd64 arch
2023-01-01 23:47:47 +03:00
MX
ba429f6c88 Merge branch 'dev' into dev-advanced-config 2023-01-01 23:16:55 +03:00
MX
3d760077b6 Merge pull request #255 from peoblouk/cz_layout
Adding CZ layout for BADUSB
2023-01-01 23:15:11 +03:00
MX
189117326b Update UniTemp
https://github.com/quen0n/unitemp-flipperzero/tree/dev
2023-01-01 23:14:32 +03:00
peoblouk
84fbe6ad36 adding CZ layout support 2022-12-31 17:35:44 +01:00
MX
891d5845dd Fix dev builds 2022-12-31 15:27:47 +03:00
MX
d3c5ccbfe6 Dev builds with extra pack included 2022-12-31 15:14:32 +03:00
MX
91c159e823 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2022-12-31 14:42:24 +03:00
MX
8457da39e0 Merge pull request #253 from teeebor/bugfix/solitaire-wrong-top-row-placement
Fix for solitaire card placement bug
2022-12-31 14:36:53 +03:00
Tibor Tálosi
27cc057573 solitaire:
fixed card placement to not allow placing ♠3 on top row when there was no card there.
2022-12-31 11:47:23 +01:00
MX
f28307128f Fix extra apps builds 2022-12-31 03:20:59 +03:00
Dimitry
27bfe861d9 cc1101 modem configurable preset introduced.
Available to configure: datarate, bandwidth and manchester decoding flag

log ability added to unit_test app (it's very helpful when writing a unit_tests)
2022-12-31 02:10:21 +02:00
MX
a51a6914f4 Barcode Generator: Save last barcode 2022-12-31 02:51:50 +03:00
MX
00b4903576 Add Delete key to usb keyboard 2022-12-31 01:30:57 +03:00
MX
a35b536120 Fix arkanoid bug 2022-12-30 23:31:21 +03:00
MX
6b30dc5114 Update unitemp 2022-12-30 20:01:12 +03:00
MX
b5aede37c7 Update changelog 2022-12-30 19:58:28 +03:00
MX
3821570d74 Merge pull request #249 from gid9798/fix_morse_code
Fixes for morse code plugin
2022-12-30 17:44:07 +03:00
MX
6eb6297ab7 Merge branch 'fz-dev' into dev 2022-12-30 16:34:20 +03:00
MX
4ef23f3a58 Fix links to readme support section 2022-12-30 16:08:57 +03:00
Georgii Surkov
95f8895b43 Add float_tools to SDK api (#2225) 2022-12-30 15:52:53 +03:00
gid9798
ebac25a057 plugin morse code:
fixed memory leak
fixed noise after exiting the app
fixed displaying characters after a long input
2022-12-30 13:53:08 +03:00
Avery
06cf1bb868 Gui: change data ownership model in submenu, own text by default (#2217)
* GUI: Refactor submenu to internally use FuriStrings
* NFC: Rework DESFIRE dynamic info submenu
* GUI: don't mutate label when drawing submenu
* Get rid of submenu_add_item_cstr
* increase api version
* Get rid of submenu_set_header_cstr
* rollback api version
* Documentation
* RFID: use new submenu api

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2022-12-30 12:44:07 +09:00
MX
7fae0d5070 Add arrow on new year slideshow
by @Svaarich
2022-12-29 23:24:40 +03:00
MX
0f1e52a271 Merge pull request #247 from Kavitate/patch-1
Updated ReadMe.md
2022-12-29 21:05:41 +03:00
Kavitate
f955864c01 Updated ReadMe.md
- Fixed minor spelling and grammatical errors.
2022-12-29 12:03:18 -06:00
MX
e8e000d17b Merge branch 'fz-dev' into dev 2022-12-29 18:08:51 +03:00
あく
b11b9f1b38 Gui: Direct Draw API (#2215)
* Furi: allow on-fly thread priority change. Gui: Direct Draw API. DirectDraw debug app.
* Gui: drop input in direct draw
* Furi: handle priority change for starting threads
* DirectDraw: rollback to FreeRTOS primitives for priority change
2022-12-29 21:35:26 +10:00
Thomas Roth
26e5527a93 Mifare dictionary attack performance improvements. (#2173)
* NFC dictionary attack performance improvements.
* Remove unnecessary assignment
2022-12-29 14:20:01 +09:00
MX
1c2f4da4ee New Year slideshow
Preparing new release, pictures for slideshow by @Svaarich
2022-12-29 02:05:04 +03:00
MX
cc30c0d01d Builds with extra apps pack included
many of you asked, now it will be done
2022-12-29 01:50:31 +03:00
MX
4e3506ab2e Show OTP flipper region on debug and about screens
but keep region zero for ble and usb hardware info report
2022-12-29 01:43:24 +03:00
MX
a850aa8f2c Force no dirty build status for multiple builds
kostili and velosipedy
2022-12-29 01:41:23 +03:00
MX
984528d366 Remove wrong scene state set 2022-12-29 00:34:27 +03:00
MX
622abc902a Merge branch 'fz-dev' into dev 2022-12-28 23:42:46 +03:00
MX
08f48280cd Merge pull request #246 from amec0e/dev
Updated tv.ir
2022-12-28 23:36:25 +03:00
Skorpionm
ea054423b0 [FL-3074] SubGhz: CAME 12 bit encoder fix guard time (#2210)
* SubGhz: CAME encoder fix guard ime
* SubGhz: fix 2 encoder CAME

Co-authored-by: あく <alleteam@gmail.com>
2022-12-29 05:29:23 +09:00
amec0e
a96eb74f91 Updated tv.ir
Added POWER only button support for Sony Bravia KDL40RD453
2022-12-28 18:22:34 +00:00
amec0e
dc6379a1ca Updated tv.ir
Added POWER only button support for Sony Bravia KDL40RD453
2022-12-28 18:16:26 +00:00
MX
f89983e2fa SubGhz: fix encoder CAME
by @Skorpionm | OFW PR 2210
2022-12-28 21:04:01 +03:00
MX
66d31b3a0e Merge branch 'fz-dev' into dev 2022-12-28 21:01:36 +03:00
Astra
d58b9f3fe8 Fix MFC bruteforce progress bar (#2203)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-29 00:09:33 +09:00
Zoë Prosvetova
4accce93cf Update KeyCombo.md (#2213)
Grammatical corrections and changes
2022-12-28 23:39:36 +09:00
Konstantin Volkov
27ee0f73f7 Fixing various typos in readme files #2208
Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
2022-12-28 23:30:20 +09:00
Konstantin Volkov
3108dc7c8c Splitting units and updater benches (#2165)
* test run, moved updated to separate physical runner/flipper/card
* simplified units, removed re-flashing, moved format to beginning of run
* added reboot requence and mini optimizations
* forgot gitadd, added script modifications, workflow changes
* fixed linter issues
* moved updater to unit bench for speed up
* changes to units, flash (not full) on second update, new fbt GDB thread check
* changed serial of second device
* testing pipelines, added failing unit test
* fixed gdb step
* fixed gdb step v2 electric boogaloo
* fixed gdb step v3, fixed target
* reverted while1 in units, tests complete
* testing colored output
* trying different term setting
* debug outputs for terminal
* fixed typo in SConstruct and another terminal test
* reverted changes, no colored output, for production
* fixed log output to readable format
* fixed linter

Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-28 23:16:06 +09:00
Tiernan
90573fbeed Picopass read bug fixes: (#2201)
* fix checking user elite keys
* include calculated Kd when saving cards

Co-authored-by: あく <alleteam@gmail.com>
2022-12-28 22:04:58 +09:00
あく
d7735a1efb Drop brewfile, drop makefile, update readme and documentation (#2205)
* Drop brewfile, drop makefile, update readme
* Minor grammar and consistency fixes
* ReadMe: add more documentation links, cleanup layout
* ReadMe: cleanup and contribution section. Roadmap: update.
* Docs: Lots of minor fixes

Co-authored-by: Anna Prosvetova <anna@prosvetova.me>
Co-authored-by: Astra <astra@astrra.space>
2022-12-28 15:32:32 +03:00
MX
69879c3693 Merge pull request #243 from huuck/dev
Added ESCAPE key
2022-12-27 17:10:34 +03:00
MX
529a20b9d2 Add holtek HT12X in brute 2022-12-27 17:06:52 +03:00
Gabriel Cirlig
43be797926 Merge branch 'DarkFlippers:dev' into dev 2022-12-27 08:19:28 -05:00
huuck
4840196b88 addded escape key 2022-12-27 08:13:17 -05:00
MX
5db9238331 Update API 2022-12-27 16:09:23 +03:00
MX
473f9c0e44 Merge branch 'fz-dev' into dev 2022-12-27 16:06:27 +03:00
Sergey Gavrilov
727f043747 OpenOCD scripts (#2101)
* Scripts: option bytes check
* Scripts: option bytes set
* Scripts: openocd config
* Scripts: increased readability, process IPCCBR option byte
* Scripts: split dap_ob.py
* Updater: process IPCCBR option byte
* Scripts: move chip-related functions to chip definition
* Scripts: freeze CPU registers
* Scripts: flash programming routine
* ob.py
* otp.py
* otp: handle errors correctly
* downgrade to python 3.9
* correct type hinting
* Scripts: fix path to ob.data

Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 21:59:36 +09:00
Astra
ded7e727d0 [FL-3060] New MFC Bruteforce animation (#2190)
* Change the wording in the headers
* Add support for text in the progress bar
* New MFC key bruteforce screen
* Typo fix
* nfc: rename Flipper Dict to System Dict
* elements: fix types
* Display the correct key attack sector

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-12-27 18:14:03 +09:00
Nikolay Minaylov
08eb666f7b [FL-3000] File browser: Empty folder label (#2188)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 17:39:04 +09:00
Skorpionm
1390f10a6f [FL-3068] SubGhz: add Holtek_ht12x protocol (#2187)
* SubGhz: add Holtek_ht12x protocol
* SubGhz: add unit_test holtek_ht12x
* SubGhz: correct string formatting

Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 17:29:21 +09:00
Nikolay Minaylov
f43b76efc2 [FL-3021] USB/BLE HID Remote icon fix (#2179)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 17:03:56 +09:00
Daniel Carvallo
8a279758fd Fix quoted error for macOS bad-usb (#2155)
* Add stderr redirect to null device
* Remove stderr redirect and replace <`> with <'>

Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 16:55:25 +09:00
Max Andreev
4e347b207c Fix amap on forks (#2200) 2022-12-27 16:35:57 +09:00
MX
b88aa9f391 Merge pull request #242 from amec0e/dev
Updated infrared assets
2022-12-27 03:03:38 +03:00
amec0e
3ec517bb54 Updated tv.ir last checked 2022-12-26 23:05:04 +00:00
amec0e
bce32bf893 Updated projectors.ir 2022-12-26 23:04:38 +00:00
amec0e
29ba7956c1 Updated fans.ir last checked 2022-12-26 23:03:57 +00:00
amec0e
05293ce860 Updated audio.ir 2022-12-26 23:03:28 +00:00
amec0e
b21618b4cc Updated ac.ir last checked 2022-12-26 23:02:33 +00:00
MX
96f6e77fd2 Fix builds 2022-12-27 00:20:00 +03:00
MX
f5985ee27c Merge branch 'fz-dev' into dev 2022-12-26 23:32:45 +03:00
MX
4f05c1816b Update TOTP 2022-12-26 23:31:38 +03:00
Max Andreev
1c926cf8a2 Trigger amap from another repo (#2171)
* Add s3 upload, repository dispatch
* Add trigger
* Fix map file upload
* Debug
* Add event file upload to s3
* fix triggering
* Fix upload process
* fix build.yml

Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 05:22:22 +09:00
MX
1243dad8fd Fix POCSAG Pager UI bug
same as subghz and weather station bug with invisible element selected
2022-12-26 23:21:10 +03:00
MX
ac400abede Update UniTemp 2022-12-26 23:15:10 +03:00
MX
a7fc43d1ac Update wifi marauder 2022-12-26 23:12:45 +03:00
MX
5992e2d4f2 Update readme 2022-12-26 23:10:42 +03:00
MX
aecdb8fdcd Merge branch 'fz-dev' into dev 2022-12-26 23:02:31 +03:00
Sergey Gavrilov
9192520c70 Modules: locking view model (#2189)
* Popup, dialog_ex: locking model
* Desktop: do not use the model where it is not needed

Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 04:46:05 +09:00
MX
6d368c3e3a Merge branch 'fz-dev' into dev 2022-12-26 22:42:21 +03:00
Max Andreev
a34fbf6976 [FL-3056] Prevent merging of PRs if there are warnings from PVS-studio (#2176)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-27 04:33:44 +09:00
Georgii Surkov
8582670a34 [FL-2811] Fix PVS-Studio warnings (#2142)
Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2022-12-26 21:13:30 +09:00
MX
749a2f5977 Merge pull request #233 from eugene-kirzhanov/dev
Add 2048 game
2022-12-25 01:53:02 +03:00
MX
1481036abe Merge pull request #234 from gid9798/barcode_ean13
add EAN-13 support
2022-12-25 01:33:40 +03:00
Dmitry Eroshenko
ad3bff0b67 Update ac.ir (#2184)
Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com>
2022-12-24 21:44:04 +03:00
Sergey Gavrilov
c2cb14834d [FL-3062] Fix unit tests (#2180)
* SubGHZ unit test: fail if async_tx is not started
* Memgr unit test: fix for multithreaded enviroment
* Unit tests: fix failed_tests count
* Unit tests: remove debug code
* Double update test: increase flipper detection time

Co-authored-by: あく <alleteam@gmail.com>
2022-12-24 23:13:21 +09:00
MX
02369c8394 Merge branch 'fz-dev' into dev 2022-12-24 02:25:58 +03:00
あく
b0970953b9 [FL-3067] WeatherStation: fix incorrect history index increment (#2186) 2022-12-23 22:46:35 +09:00
Nikolay Minaylov
dff73dfd38 [FL-3037, FL-3038, FL-3039] File format docs: RFID, iButton, BadUSB (#2177)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-23 19:25:29 +09:00
あく
2f96fad7c2 [FL-3026] Documentation: subghz file formats (#2175)
Co-authored-by: hedger <hedger@nanode.su>
2022-12-23 18:46:11 +09:00
gid9798
4d9ecbacae Barcode generator: add EAN-13 support 2022-12-23 12:25:20 +03:00
valentinegb
10580b5117 Add Edifier R1850DB signals to audio.ir (#2168)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-23 12:13:13 +03:00
Skorpionm
566e80abf6 [FL-3063] SubGhz: fix start navigation (#2183) 2022-12-23 17:31:14 +09:00
Eugene Kirzhanov
a8541d5191 Games: Add 2048 game 2022-12-22 21:36:50 +03:00
MX
3b1bc8b7e1 Update infrared assets
by @amec0e
2022-12-21 20:44:39 +03:00
MX
8deecc9241 Fix comment 2022-12-21 15:12:17 +03:00
MX
0bfaaa0fe1 SubGHz: Add manually +2 new remotes
Allow manual creation of Nice Flor S, Nice Smilo
2022-12-21 15:11:12 +03:00
MX
488211b4d7 Update Unitemp
https://github.com/quen0n/unitemp-flipperzero/tree/dev
2022-12-21 14:23:26 +03:00
MX
05147e5b7a Update universal remote assets
by @Amec0e
2022-12-21 14:19:12 +03:00
MX
0abe9ee417 Merge pull request #225 from TQMatvey/dev
LFRFID: allow removing password from T5577 to make it operational
2022-12-21 13:53:55 +03:00
MX
09f80d0086 fbt format 2022-12-21 13:00:27 +03:00
Georgii Surkov
7ff9414656 Update CODEOWNERS (#2170) 2022-12-21 12:42:51 +03:00
MX
aba70c33f1 Merge branch 'dev' into t5577 2022-12-21 12:35:43 +03:00
MX
f3553deb16 Merge branch 'fz-dev' into dev 2022-12-21 12:32:21 +03:00
valentinegb
2796623551 Add VIZIO signals to tv.ir (#2167)
* Add VIZIO signals to tv.ir

* Fix improper formatting

Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com>
2022-12-21 12:30:40 +03:00
あく
5856746fc9 iButton: fixed notification on successful read (#2169) 2022-12-21 12:07:14 +03:00
TQMatvey
6d8ecec051 lfrfid: clear_t5577: major code cleanup 2022-12-21 15:00:52 +07:00
TQMatvey
060a48cdfc lfrfid: clear_t5577: move icon and text lower 2022-12-21 12:21:17 +07:00
TQMatvey
91eed4209d lfrfid: clear_t5577: change notification color and cleanup 2022-12-21 12:11:58 +07:00
TQMatvey
787eafd7b8 lfrfid: clear_t5577: code cleanup, add notifications
Co-authored-by: grvpvl <Tobirg@users.noreply.github.com>
2022-12-21 11:34:54 +07:00
TQMatvey
10b55bcbd2 lfrfid: t5577_clear: remove unneeded comment 2022-12-21 07:09:39 +07:00
TQMatvey
19e230823b lfrdfid: t5577_clear: make animation smoother 2022-12-21 07:07:07 +07:00
TQMatvey
d1418bf7f6 Merge branch 'DarkFlippers:dev' into dev 2022-12-21 06:44:25 +07:00
Georgii Surkov
c34ae66b6e [FL-3041] IR format docs (#2162)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-21 00:07:19 +09:00
Nikolay Minaylov
e0d716647c [FL-3053] Archive browser delete fix (#2163) 2022-12-20 23:46:05 +09:00
Kowalski Dragon
a9c2b4d6a0 Desktop: dummy mode improvements. Fixes: correct scrolling text, correct AM/PM in Clock. (#2160)
* Show passport instead of app if SD/app is missing 
* Desktop: cleanup dummy mode code and add more apps
* Gui: fix incorrect trimming in scrollable text

Signed-off-by: Kowalski Dragon (kowalski7cc) <kowalski7cc@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 22:57:58 +09:00
MX
4fb03cde62 Merge branch 'fz-dev' into dev 2022-12-20 16:21:57 +03:00
MX
7e049d185f Merge branch 'fz-dev' into dev 2022-12-20 16:19:43 +03:00
TQMatvey
376fa071a1 Merge branch 'DarkFlippers:dev' into dev 2022-12-20 19:46:58 +07:00
Skorpionm
797eab8924 SubGhz: fix Hormann HSM (#2158)
* SubGhz: fix Hormann HSM
* SubGhz: add check pattern hormann protocol

Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 21:42:16 +09:00
TQMatvey
c7de198d1a lfrfid: Add scene to clean T5577 Passwords
Co-authored-by: grvpvl <Tobirg@users.noreply.github.com>
2022-12-20 19:40:25 +07:00
gornekich
4cee550cc6 [FL-2809] Rework BLE key storage (#2154)
* bt: disconnect first on profile change
* bt keys: rework bt keys
* saved struct: add payload size getter to API
* bt: rework bt with new key storage API
* bt: add keys storage operation to bt API
* hid: save bt keys on sd card
* bt: add unit tests for key storage
* bt: working profile switch
* bt: cleanup
* bt hid: change keys storage path

Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 21:32:24 +09:00
あく
e7107e39f7 Gui: scrollable long file names in FileBrowser and Archive Browser (#2159)
* Gui: scrollable long file names in FileBrowser
* Archive: scroll long file names
* Gui: elements code cleanup
2022-12-20 20:11:52 +09:00
Astra
0286636183 [FL-3036] Add NFC file format documentation (#2156) 2022-12-20 16:19:26 +09:00
Kowalski Dragon
2bdc34274f Clock v1 (#1750) 2022-12-20 06:43:32 +09:00
MX
842ba616ee Merge branch 'fz-dev' into dev 2022-12-19 23:34:35 +03:00
MX
9e2c3eb96d Testing marauder +5 volt 2022-12-19 23:33:11 +03:00
Astra
fa87216a1e [FL-2970] Untangle NFC_APP_FOLDER from nfc_device (#2124)
* Untangle NFC_APP_FOLDER from nfc_device
* Make the folder an internal part of the nfc device struct
* Move the NFC folder definition to the nfc allocator
* Move the NFC folder definition to the allocator in the nfc magic FAP
* Replace furi_string_printf with furi_string_set for folder allocation and handle the cases when folder has no slashes
* Build and allocation fixes

Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 04:57:48 +09:00
MX
921b47ac50 Merge branch 'fz-dev' into dev 2022-12-19 22:24:52 +03:00
Skorpionm
a81a5ca57c [FL-3052] WS: add choice fahrenheit/celsius (#2149)
* WS: add choice fahrenheit/celsius
* WS: fix syntax

Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 04:22:57 +09:00
MX
577334a394 Fix sound issues in multiple apps 2022-12-19 21:55:06 +03:00
Konstantin Volkov
84ba2690a5 GitHub: update unit_tests workflow steps to always re-flash device (#2150)
Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-20 03:14:44 +09:00
MX
de2334f314 Update Readme and changelog 2022-12-19 20:50:16 +03:00
MX
4a4c041fd9 Merge pull request #216 from quen0n/dev
New plugin - Unitemp
2022-12-19 20:29:34 +03:00
MX
d5624cd842 Merge branch 'dev' into unitemp 2022-12-19 20:24:14 +03:00
MX
ca72a4f225 Drop AM2320 and DHT Monitor plugins 2022-12-19 20:21:40 +03:00
Victor
453666192c DHT monitor remove 2022-12-19 20:16:33 +03:00
Victor
cbc9720738 New plugin: Unitemp 2022-12-19 20:16:02 +03:00
Max Andreev
361ca8b750 Rollback new amap workflow (#2152) 2022-12-20 02:09:19 +09:00
MX
cefff35661 Move submenu_set_selected_item 2022-12-19 20:07:07 +03:00
MX
fd5b1f1943 Merge branch 'fz-dev' into dev 2022-12-19 19:51:19 +03:00
Max Andreev
ef7052fbad Fix new amap workflow (#2151)
* Fix amap workflow
* get_env.py
* Fix amap_analyse.yml
2022-12-20 01:42:06 +09:00
MX
22062faae2 Update changelog 2022-12-19 19:03:32 +03:00
MX
8a09ac2569 Update SubGhz Bruteforcer 2022-12-19 18:45:27 +03:00
Max Andreev
5d18b189ec Run map file analyser through repository dispatch (#2148)
* Add ripository dispatch
* Fix mistakes
2022-12-20 00:28:53 +09:00
MX
57f68c11e9 Deduplicate fans.ir
Thanks to @Amec0e
2022-12-19 17:57:56 +03:00
MX
94e7bb7fe3 Add mouse jiggler to USB Keyboard&Mouse App 2022-12-19 17:56:13 +03:00
MX
da32d252db Clock - use system locale settings 2022-12-19 17:54:59 +03:00
MX
1a4071a7c1 Merge pull request #215 from airs0urce/dev
Added Toshiba F-WSA20 and Senko TR828
2022-12-19 16:59:05 +03:00
MX
084cdc6ad0 Merge branch 'fz-dev' into dev 2022-12-19 16:57:00 +03:00
Konstantin Volkov
36e15a1352 Doom/Unit_tests flashing proper firmware (#2133)
* doom: should fix all issues, needs review
* fixed flash call and added port
* increased timeout, full flash wasn't completing
* turned serial back
* added unit formatting and force flag for overwriting files
* testing crash
* fixed step names, added release flashing, removed unit_tests from updater tests
* changed checkout method, added step validations
* removed duplicated tag
* fixed styling, stopped relying on shebang lines, removed debug output
* moved format to the end, flash_usb_full copies resourses already
* awaiting flipper after flashing and step status for file move

Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-19 22:07:23 +09:00
あく
94453d9100 [FL-3046] Notification: fix recursive speaker acquire #2147 2022-12-19 20:57:44 +09:00
Dmitry Eroshenko
30801d4eb8 Added Toshiba F-WSA20 and Senko TR828
Works for other models of the brands. Both fans purchased in Vietnam
2022-12-19 17:01:30 +07:00
Nikolay Minaylov
f10e82c64d [FL-3024] Locale settings (#2137)
* Locale settings
* Time/date format fix
* Locale: add docs, enums for HAL, cleanup.

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-12-19 18:38:20 +09:00
MX
0238da8ac9 Update SubGHz Bruteforcer 2022-12-19 00:53:08 +03:00
MX
5e5d6cf1a0 Update changelog 2022-12-19 00:52:37 +03:00
MX
f2e6384860 add links to dev builds and releases in telegram 2022-12-17 08:53:03 +03:00
MX
0c3fc5cc30 Merge remote-tracking branch 'origin/dev' into dev 2022-12-17 08:49:54 +03:00
MX
1464c65d10 Create FUNDING.yml 2022-12-17 08:49:13 +03:00
MX
96a97f1bfb Merge branch 'fz-dev' into dev 2022-12-17 07:25:49 +03:00
Skorpionm
2dea6969fe [FL-3040] Audio support for SubGhz (#2131)
* Furi_hal_speaker: multiple resource usage
* Furi_hal_speaker: fix multiple resource usage
* Furi_hal_speaker: fix music_player_worker
* Furi_hal_speaker: fix mutex release queue handling
* SubGhz: add furi_hal_subghz_set_debug_pin
* SubGhz: add sound SubGhz Read, SubGhz Read RAW
* furi_hal_speaker: add __attribute__((warn_unused_result)) for furi_hal_speaker_acquire()
* Furi_hal_speaker: fix review comments
* SubGhz: cleanup naming and locking timings
* SubGhz,FuriHal: fix speaker deinit logic and subghz speaker release sequence
* FuriHal: crash on speaker acquire/release from IRQ
* Furi, FuriHal: FURI_WARN_UNUSED and documentation update
* Bump api symbols version: fix broken speaker

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-12-17 07:20:10 +09:00
MX
675d1f007f OFW Anim updates 2022-12-16 02:55:34 +03:00
MX
65b6dd5707 Merge branch 'fz-dev' into dev 2022-12-16 02:51:15 +03:00
あく
3681a5478c [FL-3044] Dolphin: add new animation 2022-12-16 08:04:15 +09:00
MX
fbcb1f0c6e Merge pull request #208 from gid9798/scene_set_faac
Removing duplicate code in subghz FAAC scenes.
2022-12-16 01:36:31 +03:00
MX
a0488624b5 Merge branch 'dev' into scene_set_faac 2022-12-16 01:31:26 +03:00
MX
d56e399ae5 Update readme 2022-12-16 00:48:15 +03:00
MX
021ba9dc1a Merge branch 'fz-dev' into dev 2022-12-16 00:16:47 +03:00
Skorpionm
b5e7bb3334 [FL-3043] SubGhz: add SMC5326, UNILARM protocol (#2138)
* SubGhz: add SMC5326 protocol
* SubGhz: add unit_test smc5326 protocol

Co-authored-by: あく <alleteam@gmail.com>
2022-12-16 05:25:43 +09:00
Adam Boeglin
1dc79fddf0 Added support for IDTECK cards (#2134) 2022-12-16 05:02:43 +09:00
gid9798
f43fd7a351 Removing duplicate code in subghz scnes. 2022-12-15 17:31:54 +03:00
MX
03153b4d02 Merge branch 'fz-dev' into dev 2022-12-14 16:54:13 +03:00
Skorpionm
327df4a813 [FL-3034] WS: fix protocol and add new (#2116)
* WS: fix Nexus-TH potocol
* WS: add Oregon_v1 protocol
* WS: add AmbientWeather-TX8300   protocol

Co-authored-by: あく <alleteam@gmail.com>
2022-12-14 17:27:55 +09:00
Der Skythe
1fa4c646e6 VSCode: add task 'Serial console' and group task with sequence calling (#2121)
* Add task 'Serial console' and group task with sequence calling
* PR fixes

Co-authored-by: あく <alleteam@gmail.com>
2022-12-14 16:42:13 +09:00
usiegl00
1c12613863 Prevent hacking related backgrounds from being displayed in dummy mode. (#2107)
* Prevent hacking related backgrounds from being displayed in dummy mode.
* Add function call to animation manager to set dummy mode.
* Reboot retains dummy mode background.

Co-authored-by: あく <alleteam@gmail.com>
2022-12-12 21:46:41 +09:00
Kassim
d541f142c8 Add Mouse Jiggler to HID Remote (#2113)
* feat: add Mouse Jiggler to HID Remote
* move processing to use furi_timer instead of draw loop
* HidApp: refine mouse jiggler, move timer work into enter/exit callbacks

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-12-12 18:47:22 +09:00
MX
966528b16a Merge branch 'fz-dev' into dev 2022-12-11 22:31:46 +03:00
MX
87fb852bcf Weather Station: Fix display of temps lower than -9 (#2120)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-12 04:29:58 +09:00
MX
d87caac5fe Merge branch 'fz-dev' into dev 2022-12-11 21:34:32 +03:00
Eric Betts
6ff437ad18 Dictionary stuff: iClass keys (#2118)
* MFC comments
* iClass keys from proxmark3 repo

Co-authored-by: あく <alleteam@gmail.com>
2022-12-12 02:32:25 +09:00
MX
76e8b00dc8 WS: Fix displaying temps lower than -9 2022-12-11 03:04:12 +03:00
MX
f73d28677b Update changelog 2022-12-11 01:08:00 +03:00
MX
bb3dd48447 Merge branch 'fz-dev' into dev 2022-12-11 00:44:27 +03:00
MX
17ea9315e0 Fix incompatibility with OFW in subghz part + improve speed
SubGHz app launch times improved, also setting_user file no longer added by firmware, this update will remove this file, be sure to backup!
Now this file is actually should be created by user and will be not removed every update!
2022-12-11 00:42:26 +03:00
MX
63b40992ef Fix naming was different from OFW 2022-12-11 00:09:38 +03:00
あく
27921e42ff Github: fix unit tests workflow (#2117) 2022-12-11 05:34:12 +09:00
MX
ebf39f189d Add link back 2022-12-10 22:39:04 +03:00
Georgii Surkov
2954ec6d97 [FL-3025] IR button overflow fix (#2115)
* Allow for more than 255 button_menu items
* Allow more than 255 items in submenu
* Fix button_menu_reset

Co-authored-by: あく <alleteam@gmail.com>
2022-12-11 03:05:52 +09:00
MX
31a9a3f5f3 SubGHz: Improve signal text visibility in history (#2111)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-11 02:31:07 +09:00
MX
2fcff37f88 Add POCSAG Receiver plugin 2022-12-10 20:08:17 +03:00
MX
35a4eef3fc Merge branch 'fz-dev' into dev 2022-12-10 19:30:20 +03:00
MX
01e24f6837 WS: Show received signal age (#2087)
* Feat: Show received signal age: by @LY2NEO with some fixes from me
* WS: Signal age display GUI fixes and improvements
* WeatherStation: refactor variable names
* WS: GUI fixes and improvements: add icons by @Karator and apply UI changes
* Weather Station: proper event flow for view redraw.

Co-authored-by: あく <alleteam@gmail.com>
2022-12-11 00:30:03 +09:00
Max Andreev
9d728a1c65 Check FL ticket in PR name after merge (#2076)
* Add base
* Add base again
* Test reporting
* Fix reporting
* Fix secrets
* Fix arguments in report
* Remove depricated actions
* Disable reporting on PR

Co-authored-by: あく <alleteam@gmail.com>
2022-12-10 22:10:51 +09:00
Astra
7fb1af07b8 [FL- 3014] Untangle NFC from Unit Tests (#2106)
* Untangle NFC from Unit Tests
* nfc tests: add log error

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-10 22:02:34 +09:00
MX
e756c680e5 RFID and iButton fuzzer fixes
Attempt to fix crash when exiting from uids from file attack
2022-12-10 04:36:44 +03:00
MX
9df393c301 Update changelog and docs 2022-12-10 03:20:38 +03:00
MX
df693e7e57 Update Readme 2022-12-09 22:13:11 +03:00
MX
74fb904fb0 Merge branch 'fz-dev' into dev 2022-12-09 22:04:43 +03:00
Nikolay Minaylov
b85f533a20 VCP session close fix (#2108)
* VCP thread check before flag set
* VCP running flag check
* Cli vcp: more clear CLI_VCP_DEBUG logs
* Cli: move tag to debug log macro

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2022-12-10 03:03:19 +09:00
MX
6f9f0dbe6e Infrared: Update assets
by @Amec0e
2022-12-09 20:42:09 +03:00
MX
6701cbacf9 SubGHz: Improve signals visibility in history 2022-12-09 20:01:05 +03:00
MX
aae82b2694 Misc fixes & updates 2022-12-09 20:00:39 +03:00
MX
556b604f7b WS: GUI fixes and improvements 2022-12-09 00:04:55 +03:00
MX
8794aad5d0 Merge branch 'fz-dev' into dev 2022-12-08 21:41:45 +03:00
Georgii Surkov
df808be8d7 [FL-3003] Fix logical error in storage script (#2105)
* Fix logical error in storage script
* Fix formatting
2022-12-08 18:31:22 +09:00
MX
99ef76e638 Some small fixes - added 'base_path' 2022-12-08 10:10:38 +03:00
Shane Synan
5c3a5cd8f7 FuriHal, Power, UnitTests: battery charging voltage limit API (#2063) 2022-12-08 15:57:49 +09:00
MX
349ef2ecb8 Fix merge issues 2022-12-08 09:04:22 +03:00
MX
1fc67f76a2 Merge branch 'fz-dev' into dev 2022-12-08 08:58:39 +03:00
Skorpionm
6a470a464e [FL-3002] SubGhz: add RPC error (#2097)
* [FL-3002] SubGhz: add RPC error
* RPC_APP: rpc_system_app_error_reset, automatic error reset when a new event is executed
* SubGhz: fix text error
* SubGhz: fix text error 2
* SubGhz: add error description
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
2022-12-08 14:49:54 +09:00
gornekich
c535b8f4ce [FL-3017], [FL-3018] Change NFC emulation screens (#2102)
* nfc: fix emulate uid view
* archive: hide dot files in apps
* nfc: fix other emulation scenes view
2022-12-08 01:47:55 +09:00
Nikolay Minaylov
2daf39018b [FL-3001] File browser base folder (#2091)
* File browser base folder
* Format sources
* FuriHal: bump api version

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-12-07 23:17:41 +09:00
MX
741ad34b2c WS: Oregon2 - add support for temp sensor RTHN129 (#2088)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-07 22:28:18 +09:00
0xchocolate
e42dda7cfb UART echo: fix race conditions causing null pointer dereference (#2092)
Co-authored-by: 0xchocolate <0xchocolate@users.noreply.github.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-12-07 20:46:50 +09:00
gornekich
9a21dae29c [FL-3008], [FL-2734], [FL-2766], [FL-2898] NFC bug fixes (#2098)
* nfc: rework mf classic update
* nfc: rename cache folder to .cache
* nfc: fix ATQA order bytes in nfc files
* file browser: add hide dot files option
* nfc: fix iso-14443-4 uid cards emulation
* nfc: fix unit tests

Co-authored-by: あく <alleteam@gmail.com>
2022-12-07 19:52:44 +09:00
あく
c43ec414bb FuriHal: add i2c unit tests (#2089)
* FuriHal: add i2c unit tests
* FuriHal: restructure unit tests

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2022-12-07 19:43:40 +09:00
Dmitry Zinin
cbc5e3fa92 IR TV Universal: Toshiba TV (#2084)
From Toshiba TV 32W1534DG (C)

Co-authored-by: あく <alleteam@gmail.com>
2022-12-07 18:50:44 +09:00
あく
2b06b41ffd Dolphin: new animation L2_Wake_up_128x64 (#2099) 2022-12-07 19:34:36 +10:00
MX
7d59eb1848 Plugins: iButton Fuzzer change minimal delay
after @Tobirg successfully verified stability with lower delay
2022-12-04 22:26:25 +03:00
MX
1c81dc2dee Weather station: signal age display GUI fixes 2022-12-04 20:48:19 +03:00
MX
176f27e037 WS: Oregon2 - add support for RTHN129 2022-12-04 15:58:07 +03:00
MX
42cc41cda3 Merge pull request #197 from LY2NEO/dev
Improved plugin WS data dashboard, added data age counter.
2022-12-04 04:43:24 +03:00
MX
8d9786f89a Simplify and fix time display
display only OLD when we have more than 59 mins
2022-12-04 04:38:37 +03:00
MX
11576e58c8 Update subbrute 2022-12-04 04:22:14 +03:00
LY2NEO
21e5b66bf6 Improved plugin WS data dashbord, added data age counter.
When data is read it saves datastamp and calculetes diference between actual time and data read time.
Until one minute it counts age in seconds.
After one minute it starts blink and counts age per minute.
Tested with auriol_hg0601a.c protocol.
2022-12-03 23:23:08 +02:00
MX
7945afd1d2 Update subbrute 2022-12-03 01:03:59 +03:00
MX
dfbd978466 Update changelog 2022-12-03 00:16:27 +03:00
MX
e1e208922e XMas / New year animation
by @Svaarich
2022-12-02 23:46:45 +03:00
MX
196fc562d8 Merge branch 'fz-dev' into dev 2022-12-02 23:05:30 +03:00
MX
de58d69c06 Update subghz bruteforcer 2022-12-02 23:01:34 +03:00
gornekich
e40376bc63 NFC: fix NTAG203 info scene #2078 2022-12-02 21:41:34 +09:00
MX
853b182b8b Update readme / changelog 2022-12-02 03:10:08 +03:00
MX
ef4bdf3909 Merge branch 'fz-dev' into dev 2022-12-01 22:13:12 +03:00
Skorpionm
79fbaf2620 SubGhz: unit_test modification of text files to one frequency and modulation (#2066)
* SubGhz: unit_test modification of text files to one frequency and modulation
* SubGhz: unit_tests raw file

Co-authored-by: あく <alleteam@gmail.com>
2022-12-02 04:07:16 +09:00
MX
45d6826fa0 Merge branch 'fz-dev' into dev 2022-12-01 22:00:58 +03:00
Nikolay Minaylov
4070eeb1c9 USB HID: fix key name #2065
Co-authored-by: あく <alleteam@gmail.com>
2022-12-02 03:56:27 +09:00
Nikolay Minaylov
7f67445c85 U2F HID descriptor fix (#2073)
Co-authored-by: あく <alleteam@gmail.com>
2022-12-02 03:40:49 +09:00
Sergey Gavrilov
eb3a8734fb Fix crash in iButton notifications routine (#2074)
* iButton: send notifications less strictly
* iButton: set notification callback earlier
2022-12-02 03:28:46 +09:00
MX
38c62cf247 Update readme 2022-12-01 03:25:04 +03:00
MX
1ce591a6c5 Partially fix strange issue with subghz decode raw 2022-12-01 03:18:41 +03:00
MX
0ed290161d Update changelog 2022-11-30 20:34:14 +03:00
MX
0b9d632363 Misc improvements 2022-11-30 20:03:55 +03:00
MX
a66f94d22e Merge branch 'fz-dev' into dev 2022-11-30 15:27:55 +03:00
Skorpionm
2a6a3a1bf7 [FL-2955], [FL-2953] SubGhz: fix RAW "Send never ends" (#1979)
* SubGhz: fix RAW "Send never ends"
* SubGhz: delete comments
* SubGhz: RAW file parsing speed increase
* SubGhz: fix level_duration_is_wait
* SubGhz: modification furi_hal_subghz_async_tx_refill
* SubGhz: furi_hal_subghz_stop_async_rx
* SubGhz: hal unit test and better async tx yield handling
* FuriHal: proper async tx end in subghz, vibro on power off
* FuriHal: variable naming in subghz
* SubGhz,FuriHal: extreme timings in subghz hal unit tests, remove memset in async tx buffer fill routine
* FuriHal: small refinements in subghz

Co-authored-by: あく <alleteam@gmail.com>
2022-11-30 20:41:23 +09:00
MX
79812a1fe0 Merge branch 'fz-dev' into dev 2022-11-30 02:13:05 +03:00
Danil Kalashnikov
0ab14c37c9 fbt: add missing Force flag when moving toolchain from temp path (#2044)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 22:31:32 +09:00
MX
eec21b073b Merge branch 'fz-dev' into dev 2022-11-29 16:11:13 +03:00
Никита Тимофеев
b70395eba9 Allow "Detect reader" for unsaved card (#2045)
* Allow "Detect reader" for unsaved card
* Add missed detect reader deed

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 22:10:02 +09:00
Sergey Gavrilov
297f185ef4 Blocking USB driver API (#2009)
* invalidate memmgt thread dict
* Core: rollback memmgt thread dict invalidation
* Dialogs: move api lock to toolbox
* HAL: blocking usb API
* HAL usb: fix api return data
* HAL usb: api optimization
* api lock: test results
* Fix build errors
* DAP Link: fix imports
* Crash when malloc in ISR
* Fix dap-link copypaste error
* Moar memory management crashes.
* Crash when malloc in IRQ, not ISR
* USB-UART: Blocking VCP mode switch

Co-authored-by: nminaylov <nm29719@gmail.com>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-11-29 21:50:55 +09:00
Georgii Surkov
0261dc3075 [FL-2957] Unified Info API, App Error, Data Xchange (#1998)
* Update protobuf definitions
* Add Property subsystem entry point function
* Key-based system info and power info function stubs
* Remove unneeded functions
* Working power info
* Working system info
* Replace #defines with string literals
* Remove unneeded field
* Simplify system info formatting
* Refactor output callback handling
* Handle the last info element correctly
* Optimise power info, rename methods
* Add comments
* Add power debug
* Remove unneeded definitions
* Rename some files and functions
* Update protobuf definitions
* Implement App GetError and DataExchange APIs
* Send GetErrorReply with correct command_id
* Add RPC debug app stub
* Add more scenes
* Add warning, increase stack size
* Add receive data exchange scene
* Improve data exchange
* Add notifications
* Update application requirements
* Bump format version for property-based infos
* Correctly reset error text
* RCP: sync protobuf repo to latest release tag

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-11-29 18:08:08 +09:00
MX
60cd7b8b32 Fix merge issues 2022-11-28 23:20:37 +03:00
MX
3d36105142 Merge branch 'fz-dev' into dev 2022-11-28 23:12:17 +03:00
Georgii Surkov
849afc8798 [FL-2998] IR TV Universal Remote refactor and docs (#2052)
* Rename signals for IR TV universal remote
* Update UniversalRemotes.md

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 04:49:51 +09:00
Georgii Surkov
c535ce9b76 [FL-2997] Improve file name filtering #2047
Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 04:28:51 +09:00
Skorpionm
84f9af3e7e SubGhz: fix duration pricenton protocol (#2054)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 04:17:57 +09:00
MX
97e8da7a7b Weather Station: Add protocol - Auriol HG0601A (#2056)
* Add protocol Auriol hg0601a: Made by @LY2NEO
* Improve readability of code: fix protocol name

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 04:08:28 +09:00
あく
769c53b6da [FL-2977] Gui: better navigation in file browser dialog (#2014)
* Gui: proper navigation in file browser dialog
* Trim file name from start path
* File list loading fix
* File list offset fix

Co-authored-by: nminaylov <nm29719@gmail.com>
Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
2022-11-29 03:59:24 +09:00
Yukai Li
6b47bc1af4 Nfc: NTAG password auto capture (and other password-related changes) (#1843)
* nfc: MFUL minor cleanup
* nfc: Add mechanism to pass event data
* nfc: Add NTAG authentication event to emulation
* nfc: Rename enum member to align with existing convention
* nfc: Add function to determine whether MFUL is fully captured
* nfc: Fix emulation of incompletely-read password-protected MFUL
* nfc: Add reader password capture scene
* nfc: Set default MFUL password input to 0xFFFFFFFF
* nfc: Fix MFUL auth counter loading
* nfc: Be explicit about using manual auth method when using auto unlock
* nfc: Fill in MFUL has_auth when loading file
* nfc: Fix MFUL auth success usage, remove unused variable
* nfc: Display PWD and PACK in MFUL info if available
* nfc: Remove unnecessary include
* nfc: Add unlock options to loaded MFUL menu
* nfc: Move set default MFUL password. This way it can be edited if needed instead of reentered
* nfc: Fix unlock menu not maintaining selection index
* nfc: Move captured MFUL auth data from worker to device data
* nfc: Attempt to authenticate with default PWD when possible when reading NTAG
* nfc: Don't try to auth NTAG on read if we already authed
* nfc: Add title for all pages read but failed auth for NTAG auth
* nfc: Add faster auth callback patch
* lib: Remove scons submodule from index
* nfc: Revise MFUL unlock UI flow
* nfc: Disallow MFUL unlock with reader if card not read yet. Trying to read first results in either needing to make a new scene or badly jury rigging other scenes, so let's just not do that
* f7: Bump API symbols
* Format code

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 03:16:22 +09:00
Michael Huebler
1b3156521c NFC: Accept non-parsed apps in Mifare DESFire. (#2041)
* NFC: Accept non-parsed apps in Mifare DESFire. Fixes #2040

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 02:14:13 +09:00
Stephen Kent
a82c3ccc22 NFC: Fix MIFARE DESfire info action to open app menu (#2058)
When examining a MIFARE DESfire card, selecting "More >" currently leads
to the file menu for a single application even if the scanned card
contains multiple applications.

On examining the source code, a MIFARE DESfire application selection
menu is present as `NfcSceneMfDesfireData`. This change updates the
MIFARE DESfire Info "More >" action to open the application selection
menu. That menu may then be used to open the file selection menu for any
application in the read MIFARE DESfire card data.

Tested interactively with
c4cbdcd947/nfc/Desfire.nfc

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 02:05:24 +09:00
Maksim Derbasov
e121e6a287 Fix for spelling (#2051)
* Fix for spelling
* Review iteration

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 01:51:51 +09:00
Smooklu
03140e4349 Bluetooth Remote to HID Remote (#2039)
* WIP BT + USB Hid
* Refactoring Submenus/Views
* Changed to bool instead of enum
* Revamp finished
* Removed usb_keyboard
* Renaming device_types that can do USB+BT
* Removed error view
* Renaming folder structure and file names
* Fixed views.h
* Fixed hid.h
* Fixed hid_mouse.c
* Fixed a accidetnal renaming
* Apps: add missing view remove call in hid app destructor
* Hid app: hal abstraction, split into bluetooth and usb remotes. Fbt: customizable icon symbol name.
* Hid app: update usb remote icon
* Hid: single status change routine
* HID App: final touches
* HID App: rename BtHidTikTok to HidTikTok, format sources
* HID App: fix comma in keyboard

Co-authored-by: あく <alleteam@gmail.com>
2022-11-29 01:27:16 +09:00
MX
43d35b42e5 Fix auriol protocol naming 2022-11-27 17:07:51 +03:00
MX
7ed56fca54 Update changelog and readme 2022-11-27 07:12:34 +03:00
MX
bc8fe6144b Merge pull request #187 from StellarStoic/dev
Adding Slovenian, Bosnian and Croatian layout
2022-11-27 07:12:04 +03:00
MX
0e4cda851c Update Temp sensor plugin
https://github.com/Mywk/FlipperTemperatureSensor
2022-11-27 02:50:15 +03:00
MX
6267dc7d5b Update HEX Viewer 2022-11-27 02:44:10 +03:00
MX
1a33e1a00b WS: Add protocol Auriol HG0601A
Made by @LY2NEO
2022-11-27 02:32:43 +03:00
StellarStoic
2985268fe3 Adding Slovenian, Bosnian and Croatian layout
Slovenian (si) / Croatian (hr) keyboard layout, which is also the default layout for Bosnian (ba) (Latin, Bosnia and Herzegovina)
2022-11-26 22:49:56 +01:00
MX
5cdf339a95 Merge remote-tracking branch 'origin/dev' into dev 2022-11-26 17:23:49 +03:00
MX
08e533ccf2 SubGHz: Fix Came Atomo and NiceFlorS counters
add check for protocols with 16bit counters, to block them for going higher than 16bit
2022-11-26 17:23:36 +03:00
MX
a63e0dbec7 Merge pull request #181 from vadrozh/dev
Possible keys for transport cards by novacard.ru
2022-11-25 00:59:17 +03:00
MX
513c352820 Update readme 2022-11-24 18:32:04 +03:00
MX
bf62f66dc8 SubGHz: Fix keeloq, SL, counter going higher than 16bits
Proper reset to 0 after we get to 0xFFFF
2022-11-24 17:03:50 +03:00
Vadim
ab65c17dd5 possible keys for transport cards by novacard.ru 2022-11-24 11:52:04 +06:00
MX
6e7b7f1d89 Move reindex after release 2022-11-24 04:02:22 +03:00
MX
4f9b4d80c7 Add extra pack link to release to notifications 2022-11-24 03:45:16 +03:00
MX
bd21970ccb Fix builds 2022-11-24 03:40:42 +03:00
MX
79193e7f37 Update changelog and readme 2022-11-24 03:27:43 +03:00
MX
f086d5b7a3 Merge pull request #180 from TQMatvey/dev
SubGhz: Allow setting RSSI trigger to beggining
2022-11-24 03:25:41 +03:00
MX
757b218397 Revert SubGhz FA changes 2022-11-24 03:16:31 +03:00
MX
0321717a86 Add 3 plugins to be included in base package
Solitaire, Blackjack, HEX Viewer
2022-11-24 03:00:15 +03:00
TQMatvey
2a5d629318 SubGhz: Allow setting RSSI trigger to beggining 2022-11-24 06:52:44 +07:00
MX
6ebdf6dffb Update wifi marauder companion
and apply same fix to wifi scanner and wifi deauther
2022-11-24 02:23:40 +03:00
MX
b6435374d7 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator/releases/tag/v1.5.0
2022-11-24 01:19:19 +03:00
MX
2c51c8cb31 Update FipperZero-DHT-Monitor
https://github.com/quen0n/FipperZero-DHT-Monitor
2022-11-24 01:15:38 +03:00
MX
6d7e424fdf Update subbrute
Fix ansonic text
2022-11-24 01:11:45 +03:00
MX
8e14291363 Merge branch 'fz-dev' into dev 2022-11-23 21:30:59 +03:00
MX
c9473e6d30 Update subghz bruteforcer
Add ansonic protocol support
2022-11-23 21:30:16 +03:00
Nikolay Minaylov
ffa6249b64 [FL-2985] Fix U2F HID vulnerability #2042
Co-authored-by: あく <alleteam@gmail.com>
2022-11-24 03:12:53 +09:00
MX
daea8a963d Apply subghz FA changes from OFW, update API symbols 2022-11-23 19:46:31 +03:00
MX
7829428455 Merge branch 'fz-dev' into dev 2022-11-23 19:21:50 +03:00
MX
59022b4ff7 Merge pull request #176 from PharoahCoder/dev
Update cli_commands.c To add src command for people exploring cli
2022-11-23 19:17:38 +03:00
MX
bbf4d90ec1 Fix, add forgotten UNUSED macro 2022-11-23 19:14:17 +03:00
MX
0f3c0aaa11 Fix dev builds again 2022-11-23 19:04:58 +03:00
MX
78a4c82bf5 Merge pull request #170 from lucemans/patch-2
Introduce ENS to README.md
2022-11-23 18:47:25 +03:00
MX
af1ecd82ba Merge pull request #169 from lucemans/patch-1
Discord in README open in new tab
2022-11-23 18:46:25 +03:00
MX
963c6a95f3 Merge pull request #175 from GottZ/patch-1
[FAP] htu21d falsely reading temp as humidity
2022-11-23 18:45:53 +03:00
MX
04761b12c0 Merge pull request #178 from TQMatvey/dev
Power: Show battery percentile while charging
2022-11-23 18:45:20 +03:00
MX
078e2c2db9 Merge pull request #171 from NaejEL/i2cTools-newUI
New UI for I2C Tools
2022-11-23 18:44:13 +03:00
MX
063b13df00 Merge branch 'dev' into i2cTools-newUI 2022-11-23 18:41:09 +03:00
MX
37159c7506 Fix dev builds 2022-11-23 18:03:48 +03:00
MX
3da1c229bb CI/CD Improvements, dev builds 2022-11-23 17:56:51 +03:00
Anna Prosvetova
51d478489a Infrared: Add Olimpia Splendid AC (#2038)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 22:43:48 +09:00
Skorpionm
9bb0dbaa3e SubGhz: frequency analyzer. 2dbi desensitization, rssi averaging to reduce jitter, new rssi indicators in log_mode, GUI fix (#2020)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 22:31:39 +09:00
Kyhwana Pardus
1c8451fad4 Fix typos in subghz_cli.c (#2030)
Fix up the "receive" typos

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 22:23:11 +09:00
MangoTornado
669822cdd2 Fix typos in various outputs (#2032)
* Fix typos in various outputs
* Update u2f_view.c

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 22:15:08 +09:00
lauaall
4f3ef83c77 Docs: fix typos (#2016)
Fixed typos in UnitTests.md

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 21:59:55 +09:00
Sergey Gavrilov
c511c67e71 Core: thread allocation shortcut (#2007)
* Core: thread alloc+set shortcut
* Apps: use thread allocation shortcut
* Mark some service threads as services
* Init BT as soon as possible

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 21:49:17 +09:00
Skorpionm
b9c483fbf8 [FL-2975] WS: add protocol GT-WT02 (#2001)
* WS: add protocol GT-WT02
* WS: fix text "About" scene

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 18:44:49 +09:00
Skorpionm
00fcd9cfcd [FL-2976] SubGhz: add protocol "Ansonic" (#2000)
* SubGhz: add protocol "Ansonic"
* SubGhz: fix encoder "Ansonic"
* SubGhz: add unit_test "Ansonic"
* SubGhz: fix flag
* SubGhz: protocol "Ansonic" fix timing

Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 18:29:30 +09:00
Skorpionm
cf5b87f82e SubGhz: add protocol Nice_Flo 20bit (#1983)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-23 17:28:44 +09:00
MX
8bbfadffe5 Remove not widely used frequency from hopper 2022-11-22 16:37:54 +03:00
TQMatvey
15dcf73083 Power: Show battery percentile while charging 2022-11-22 12:51:47 +07:00
PharoahCoder
5ef358df31 Update cli_commands.c 2022-11-21 17:41:40 +04:00
Jan-Stefan Janetzky
a5e3df0375 [FAP] htu21d falsely reading temp as humidity
compiled and tested by blowing onto the sensor.

fixes #174
2022-11-20 23:53:11 +01:00
Jean LE QUELLEC
fae17d2eb9 New UI 2022-11-19 13:46:26 +01:00
Luc
c957bf09e0 Update ReadMe.md 2022-11-18 17:16:48 +01:00
Luc
817aa273f4 Discord in README open in new tab
Changes the discord link in the readme to open in a new tab instead of overwrite the current tab
2022-11-18 15:12:55 +01:00
MX
0adcaf7592 Update infrared assets
by @Amec0e
2022-11-18 00:31:49 +03:00
MX
7e8bf03b25 Fix DTMF Dolphin
Add forgotten scene and menu item
@litui check this commit
2022-11-17 22:43:04 +03:00
MX
a6886b096e Update DTMF Dolphin
https://github.com/litui/dtmf_dolphin
2022-11-17 22:35:13 +03:00
MX
a0dc770b98 Update TOTP
https://github.com/akopachov/flipper-zero_authenticator
2022-11-17 22:33:31 +03:00
MX
a1b368abda Update i2c tools
https://github.com/NaejEL/flipperzero-i2ctools
2022-11-17 22:30:25 +03:00
MX
5681016dce SubGHz: Fix starline encoder
o_O
2022-11-17 02:05:14 +03:00
MX
17cb7533cb SubGHz: FA -> Save last trigger level 2022-11-17 00:37:35 +03:00
MX
1e183d5450 SubGHz: Add 440.175 Mhz 2022-11-16 14:26:48 +03:00
MX
0e9f6bef77 Speedup subghz favourites
if custom modulation was used, its saved in file itself, so no need to load it when using quick access from favourites
2022-11-15 23:00:30 +03:00
MX
0f81248579 Add new freq and modulation to user config 2022-11-15 22:46:58 +03:00
MX
337c5b5a8b Merge remote-tracking branch 'origin/dev' into dev 2022-11-15 04:43:01 +03:00
MX
be97baef06 Plugins: ibutton fuzzer improvements
and rfid fuzzer too
2022-11-15 04:42:54 +03:00
MX
d0ccf11992 Merge pull request #164 from rf-bandit/wifi-marauder-bt
Wifi marauder BT menus option
2022-11-15 04:41:47 +03:00
MX
eb3523b8e2 Replace func naming to more correct one 2022-11-15 04:22:43 +03:00
rf-bandit
073a0942e8 Add files via upload
Add sniffbt and sniffskim as menu option for ESP-32-WROOM
2022-11-13 23:38:10 -07:00
rf-bandit
52bd4a1a3c Add files via upload
Adds sniffbt and sniffskim as option (ESP-32-WROOM)
2022-11-13 23:34:41 -07:00
MX
5989651b10 Plugins: i2c tools fix name display 2022-11-13 04:21:58 +03:00
MX
bb8b9f0b57 Fix builds 2022-11-13 03:51:05 +03:00
MX
aface38b42 RFID Fuzzer fixes 2022-11-13 02:56:32 +03:00
MX
f7fb055ae3 Update readme and changelog 2022-11-13 01:14:06 +03:00
MX
1b64a95ec6 Plugins: Add lightmeter
https://github.com/oleksiikutuzov/flipperzero-lightmeter
2022-11-12 23:13:09 +03:00
MX
de5eb16ef2 New animation L3_FlipperMustache_128x64
animation by @Svaarich
2022-11-12 22:27:27 +03:00
MX
c3731e6540 CI/CD: Builds with no custom anims 2022-11-12 22:24:22 +03:00
MX
0e338f7964 Merge branch 'fz-dev' into dev 2022-11-12 22:22:38 +03:00
MX
4240b59311 SubGHz: Fix magellan display issue 2022-11-12 22:16:02 +03:00
hedger
41de5f3c52 fbt: more fixes for windows environment #2011 2022-11-13 03:28:29 +09:00
hedger
b56fed477a Path handling fixes in toolchain download #2010 2022-11-13 02:22:40 +09:00
MX
02fe403b2b SubGHz: Fix wrong error message in history 2022-11-12 16:58:35 +03:00
MX
a821b80ffc Archive: Show loading popup on delete 2022-11-12 16:47:00 +03:00
MX
950dee48a0 Merge branch 'fz-dev' into dev 2022-11-12 16:43:12 +03:00
Nikolay Minaylov
73441af9c6 BadUSB and Archive fixes (#2005)
* BsdUsb: fix empty lines handling
* Archive: folders and unknown files rename fix

Co-authored-by: あく <alleteam@gmail.com>
2022-11-12 20:55:42 +09:00
hedger
f9730bcafe fbt: lint fixes (#2008)
* lint: exclude "lib" subfolder from naming checks; fbt: moved LINT_SOURCES from literal strings to Dir() nodes
* lint: also exclude hidden directories

Co-authored-by: あく <alleteam@gmail.com>
2022-11-12 19:03:22 +09:00
MX
3c7a4eeaed iButton: Fix header "Saved!" message stays on other screens (#2003)
* iButton: Fix header "Saved!" message stays on other screens
* SubGhz,iButton: proper popup reset

Co-authored-by: あく <alleteam@gmail.com>
2022-11-12 18:45:19 +09:00
あく
90cefe7c71 [FL-2975] Bug fixes and improvements: Furi, Input, Cli (#2004)
* Furi: configurable heap allocation tracking
* Furi: relax restriction in thread heap setter asserts, apply heap tracking setting on app start instead of thread allocation
* Furi: hide dangerous heap tracking levels in release build
* Input: fix non-working debounce
2022-11-12 12:46:04 +04:00
MX
368079f6f4 Fix DHT Monitor icon 2022-11-11 21:53:29 +03:00
MX
8b71ac9483 Fix FlipperCity animation
animation by @Svaarich
2022-11-11 21:46:21 +03:00
MX
3cba34bbc8 SubGHz: Add frequencies 434.075, 434.390 2022-11-11 18:46:35 +03:00
MX
741c784f2d Introducing ibutton fuzzer 2022-11-11 18:12:55 +03:00
MX
394507bc81 RFID Fuzzer: allow holding left right to change delay faster
hold TD button to add +10 or -10 to time delay
2022-11-11 17:05:33 +03:00
MX
8240b25fe0 iButton: header message fix 2022-11-11 17:04:32 +03:00
MX
1d196b41e9 Morse code cleanup text by pressing back 2022-11-11 04:57:27 +03:00
MX
666d30f2dd API compatibility with OFW part 2
+ Subghz protocol Princeton API symbols added
2022-11-11 03:45:41 +03:00
MX
95df532612 Frequency analyzer: Add counter, GUI fixes, allow Ok button - see desc.
When signal is present (when frequency window shows black background)
2022-11-11 03:45:09 +03:00
MX
64774f191f TOTP Update - "BadUSB" type key into pc mode 2022-11-11 01:10:45 +03:00
MX
f6eed35729 Reorder main menu 2022-11-11 00:54:09 +03:00
MX
930b369812 Merge branch 'fz-dev' into dev 2022-11-10 21:38:03 +03:00
Skorpionm
721ab717d7 [FL-2961] SubGhz: properly handle storage loss (#1990)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-11 02:14:44 +09:00
lauaall
aec36e7041 Fixed typos (#1999)
Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-11 01:48:58 +09:00
Astra
e7c4b40dbe Force card types in extra actions (#1961)
* Mifare Classic forced read
* Add all the needed card types
* nfc: remove unused scene
* nfc: remove unused worker state
* nfc: fix read card type scene state usage
* nfc: move NfcReadMode to NfcDevData struct
* nfc: fix bank card reading and scene navigation
* nfc magic: fix magic deactifate function

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-11 01:29:57 +09:00
Astra
820afd2aec NFC Unit tests part 1.1 (#1927)
* Mifare Classic 1/4K, 4/7b uid, NFC-A: NFC-A is not complete yet, as there are no 4b uid tests. Also, Mifare Classic tests don't cover the key cache yet.
* NFC unit tests require access to the NFC app
* Made nfc_device_save accept full path as an argument
* Move from cstrs to furi strings and fix logic
* nfc tests: fix memory leak
* nfc: add mf_classic_get_total_blocks() to API
* nfc tests: simplify nfc tests
* nfc: fix memory leak in shadow file saving
* nfc: fix set uid scene
* nfc: fix saving files
* nfc: fix preload nfc file path
* nfc: remove comments

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-11 01:20:35 +09:00
Rom1
a66e8d9ac9 corr: bad path for furi core (#1975)
* corr: bad path for furi core
* Documentation: exclude submodules
* Documentation: wider folder list

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-11-11 00:21:28 +09:00
あく
f94e8f4ac8 Rpc: increase stack size, fix stack overflow (#1997) 2022-11-10 23:56:08 +10:00
hedger
a959fa32bc fbt: 'target' field for apps; lib debugging support (#1995)
* fbt: added 'target' field to application manifest
* fbt: earlier pagination setup for gdb
* fbt: added LIB_DEBUG flag
* fbt: sdk: added SDK_MAP_FILE_SUBST
2022-11-10 20:55:11 +09:00
MX
3c094c4741 update docs 2022-11-10 12:31:50 +03:00
MX
625b1eb126 move -+ in freq analyzer, swap up & down button, more in desc
now its more intuitive and easier to select values in freq analyzer history
2022-11-10 12:30:01 +03:00
MX
22902aabcc Cleanup code in unirf, fix issue #153 2022-11-10 12:15:10 +03:00
MX
b93f2dc293 Furi Region Mocks, fix protocol dict funcs was disabled in API 2022-11-10 10:45:51 +03:00
MX
af40b6b020 Move NRF24 driver into plugins, see desc
Major API version downgraded to official one, adding support for launching OFW apps on unleashed, part 1
2022-11-10 10:30:36 +03:00
MX
ef72ad2462 update totp 2022-11-10 08:32:21 +03:00
MX
3420cda83a update i2c tools 2022-11-10 08:23:54 +03:00
MX
68219f0d7b update readme 2022-11-10 08:08:51 +03:00
MX
0a0c06222a fix links 2022-11-10 08:05:28 +03:00
MX
52650ab0e3 Merge pull request #154 from msvsergey/Barcode-Generator
Barcode generator: rfct, ux improvements, implement EAN-8.
2022-11-10 07:55:40 +03:00
MX
dd601dd940 Merge branch 'dev' into Barcode-Generator 2022-11-10 07:54:26 +03:00
MX
933471e2fb Merge pull request #157 from pbek/patch-1
Fix link to "TOTP (Authenticator) config description"
2022-11-10 07:15:56 +03:00
MX
317c9ec190 Merge pull request #161 from krolchonok/fix-hcsrnaming
fix hc-sr
2022-11-10 07:14:59 +03:00
MX
e90d335cdf Add value_index to API symbols 2022-11-10 07:13:02 +03:00
MX
1657604eb2 remove srand calls 2022-11-10 07:07:35 +03:00
MX
684fdc632f Merge branch 'fz-dev' into dev 2022-11-10 06:57:08 +03:00
krolchonok_z
c3bdbcd5cc fix naming hc-sr 2022-11-09 22:25:23 +03:00
krolchonok_z
65a593c52e Update application.fam 2022-11-09 22:21:25 +03:00
krolchonok_z
9e39f82906 fix hc-sr 2022-11-09 22:07:26 +03:00
gornekich
3985b456c3 NFC: fix crash on MFC read (#1993)
* nfc: fix nfc_worker_stop logic
* nfc: fix stop order

Co-authored-by: あく <alleteam@gmail.com>
2022-11-10 03:12:55 +09:00
あく
c89e5e11a4 Furi: show thread allocation balance for child threads (#1992) 2022-11-09 21:33:09 +04:00
Georgii Surkov
9f0aef330e [FL-2956] Initial unit test docs (#1984)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-09 02:38:28 +09:00
Samuel Stauffer
328d049b6a Add Acurite 609TXC protocol to weather station (#1987)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-09 02:07:55 +09:00
Max Andreev
ce294c3b1e Update toolchain to version 19. Update codeowners. Fix amap analyze. (#1986)
* Up toolchain to 19
* Fix amap_analyse.yml
* Github: update codeowners

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-11-09 01:56:49 +09:00
Patrizio Bekerle
e81b7be232 Fix link to "TOTP (Authenticator) config description" 2022-11-08 09:03:57 +01:00
Sergey Gavrilov
4d11213494 DAP-Link: show error if usb is locked (#1982) 2022-11-08 01:15:58 +09:00
Sergey Monchenko
e38895794b Barcode generator: rfct, ux improvements, implement EAN-8. 2022-11-07 18:31:17 +03:00
hedger
2d6c2886ae fbt: compile_db fixes (#1981)
* fbt: forked compilation_db tool
* fbt: fixes for static analysis
* pvs-studio: ignoring more generic warnings
* fbt: util: added extract_abs_dir
* vscode: added fap-set-debug-elf-root for debug configurations
2022-11-07 23:54:41 +09:00
Samuel Stauffer
aa2ecbe80f infrared: add Kaseikyo IR protocol (#1965)
* infrared: add Kaseikyo IR protocol

Add Kaseikyo IR protocol support. This protocol is also called the Panasonic protocol and is used by a number of manufacturers including Denon.

The protocol includes a vendor field and a number of fields that are vendor specific. To support the format of address+command used by flipper the vendor+genre1+genre2+id fields are encoded into the address while the data is used for the command.

There are older versions of the protocol that used a reverse bit order that are not supported.

Protocol information:
- https://github.com/Arduino-IRremote/Arduino-IRremote/blob/master/src/ir_Kaseikyo.hpp
- http://www.hifi-remote.com/johnsfine/DecodeIR.html#Kaseikyo
- https://www.denon.com/-/media/files/documentmaster/denonna/avr-x3700h_avc-x3700h_ir_code_v01_04062020.doc

* Format and add unit test to Kaseikyo IR codec.

Co-authored-by: Georgii Surkov <37121527+gsurkov@users.noreply.github.com>
2022-11-07 18:38:04 +04:00
Skorpionm
65005e71d2 WS: fix show negative temperature (#1980) 2022-11-07 02:30:02 +09:00
hedger
0a86ad43ca fbt: fix for launch_app (#1978) 2022-11-06 17:39:50 +10:00
あく
e8913f2e33 Code cleanup: srand, PVS warnings (#1974)
* Remove srand invocation

* PVS High priority fixes

* PVS High errors part 2

* Furi: heap tracing inheritance

* Furi add __builtin_unreachable to furi_thread_catch
2022-11-05 18:07:24 +03:00
hedger
04e50c9f89 fbt: fixes for ufbt pt3 (#1970)
* fbt: replaced debug dir paths with FBT_DEBUG_DIR
* scripts: updated requirements.txt
* fbt: fixed wrong import
* fbt: removed delayed import for file2image
* fbt: added UPDATE_BUNDLE_DIR internal var
* fbt: cleaner internal management of extapps
* applications: added fap_libs for core apps to link with resources when building with --extra-ext-apps
* fbt: removed deprecation stub for faps
* fbt: added quotation for icons build cmd
* fbt: reworked BUILD_DIR & fap work dir handling; fap debug: using debug elf path from fbt
* fbt: explicit LIB_DIST_DIR
2022-11-05 20:47:59 +09:00
MX
7175459bcd update assets and changelog 2022-11-04 18:09:07 +03:00
MX
c709b0b126 Update DHT monitor 2022-11-04 17:51:56 +03:00
MX
18f49c2644 update changelog 2022-11-04 15:22:06 +03:00
MX
939a77b4e7 Update nfc magic name and icon 2022-11-04 15:04:10 +03:00
MX
1bb6113eaa bump 2022-11-04 14:41:23 +03:00
MX
0ab400a27e Merge branch 'fz-dev' into dev 2022-11-04 14:34:34 +03:00
gornekich
bf8fd71c00 NFC magic cards support (#1966)
* nfc magic: introduce nfc app to work with magic cards
* nfc: add nfc device functions to API
* nfc magic: add bacis scenes
* nfc magic: add wrong card and write confirm scenes
* nfc magic: introduce magic lib
* nfc magic: write magic lib
* nfc magic: add write commands to magic lib
* nfc magic: work on worker
* furi_hal_nfc: add bits data exchage method to API
* nfc magic: rework with new API
* nfc magic: add check and wipe scenes
* nfc magic: add icons, gui fixes
* nfc: format python src

Co-authored-by: あく <alleteam@gmail.com>
2022-11-04 16:01:44 +09:00
Sergey Monchenko
3bd74b7f01 SubGhz: fix incorrect response in rpc mode. Code cleanup. (#1964)
* Code cleanup
* SubGhz: correct logic in RPC
* SubGhz: do not blink on app rpc fail

Co-authored-by: あく <alleteam@gmail.com>
2022-11-04 15:08:51 +09:00
あく
d68ac50efd Storage: tree timestamps (#1971)
* Storage: tree timestamps
* Rpc: add storage timestamp
* Storage: correct timestamp owner
* Storage: update timestamp at sd mount

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2022-11-04 15:26:04 +10:00
あく
e3ea5bca76 Dolphin: add L1_Mods_128x64 animation (#1973) 2022-11-04 14:44:28 +10:00
MX
8ea0178a0d Merge pull request #149 from an4tur0r/feature/flappy_assets
Flappy Bird: draw bird via icon animation
2022-11-03 19:11:28 +03:00
MX
24d65e8655 Fix badusb gui 2022-11-03 16:57:12 +03:00
MX
d92212f0ea Merge branch 'fz-dev' into dev 2022-11-03 16:56:15 +03:00
Alexandre Díaz
60d125e72a subghz: add analyzer frequency logs (#1914)
* subghz: add analyzer frequency logs
* SubGhz: switch to change on short press
* SubGhz: use full RSSI bar for history view

Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 16:57:56 +09:00
an4tur0r
bb2bcc63a4 Flappy Bird: draw bird via icon animation 2022-11-03 10:10:54 +03:00
head47
eee90c6c40 Run Bad USB immediately after connection (#1955)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 14:21:44 +09:00
Nikolay Minaylov
95182b266c BadUSB scrolllock typo fix (#1968)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 13:42:54 +09:00
MX
7973013085 Fix DHT22 timeout bug
as suggested by @quen0n
2022-11-03 02:13:25 +03:00
MX
0b1f573a72 update naming 2022-11-03 00:53:28 +03:00
MX
677de32026 Revert TOTP changes
"Preload failed, invalid file"
2022-11-03 00:41:17 +03:00
MX
5ac2431cd1 update readme and changelog 2022-11-03 00:26:19 +03:00
MX
4b408b6988 Merge pull request #148 from msvsergey/flappy-animation-fix
Flappy: Fix animation.
2022-11-03 00:08:49 +03:00
MX
af1647c84b Update DHT montior plugin 2022-11-02 23:52:03 +03:00
MX
356389ace9 Disable halloween theme
New xmas theme is coming in december :)
2022-11-02 23:51:47 +03:00
MX
345d9704fd Plugins: Added Game15 + run fbt format 2022-11-02 23:39:54 +03:00
nminaylov
0b2867aaa4 BadUSB scrolllock typo fix 2022-11-02 23:32:01 +03:00
MX
fe199ab54a Fix part 2 2022-11-02 23:19:33 +03:00
MX
adab2b9e03 Update and fix TOTP
fix - added this in every button event switch:
default:
                    break;
2022-11-02 23:10:14 +03:00
MX
c8bc9e26e0 Fix part 1 2022-11-02 23:07:00 +03:00
MX
e1f5999095 update lib paths 2022-11-02 22:54:44 +03:00
MX
79b37556d4 Merge branch 'fz-dev' into dev 2022-11-02 22:53:12 +03:00
MX
9c4612e571 Plugins: New AM2320 Sensor plugin 2022-11-02 22:18:08 +03:00
Skorpionm
0652830c51 [FL-2940] WS: add protocol Ambient_Weather (#1960)
* WS: add protocol Ambient_Weather
* WS: fix link
* WS: removing unused code

Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 01:24:07 +09:00
Georgii Surkov
c417d467f7 Handle storage full error (#1958)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 01:13:06 +09:00
Konstantin Volkov
a09d0a8bd4 fixed job name, renamed compile step id (#1952)
Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 00:21:43 +09:00
hedger
ebc2b66372 fbt fixes for mfbt pt2 (#1951)
* fbt: split sdk management code
* scripts: fixed import handling
* fbt: sdk: reformatted paths
* scrips: dist: bundling libs as a build artifact
* fbt: sdk: better path management
* typo fix
* fbt: sdk: minor path handling fixes
* toolchain: fixed windows toolchain download
* fbt: minor refactorin
* fbt: moved sdk management code to extapps.scons
* fbt: fixed sdk symbols header path; disabled -fstack-usage
* fbt: changed pathing for .py scripts
* fbt: changed SDK_HEADERS pathing; added libusb to SDK; added icon_i.h to SDK; added hw target to SDK meta
* fbt: added libusb headers to SDK
* picopass: include cleanup; api: added subghz/registry.h; api: added mbedtls to exported headers
* picopass: fixed formatting
* fbt: fixed COPRO_ASSETS_SCRIPT
* sdk: added basic infrared apis
* toolchain: added ufbt to list of legal fbtenv callers; updated error messages
* fbt: changed manifest collection & icon processing code
* fbt: simpler srcdir lookup
* toolchain: path management fixes; fbt: fixes for fap private libs paths
* scripts: toolchain: reworked download on Windows
* toolchain: v17
* scripts: added colorlog for logging
* Github: fix unit tests

Co-authored-by: あく <alleteam@gmail.com>
2022-11-03 00:15:40 +09:00
Vasyl "vk" Kaigorodov
abfa804ae0 Gui: refactor buttons remapping (#1949)
* Gui: refactor buttons remapping
  Instead of calling 3 separate functions with a ton of switch/case statements,
  use a 2-dimensional lookup table to remap buttons based on the orientation.
* Gui: cleanup input mapping and fix incorrect asserts
* SnakeGame: handle input special case

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-11-02 23:36:17 +09:00
Sergey Monchenko
9a0eacc91c Fix flappy animation. 2022-11-02 14:40:54 +03:00
MX
a22b107335 Plugins: Update Wifi Marauder
https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion
2022-11-02 13:28:43 +03:00
MX
0f1e03fa51 Fix: proper deinit of gpio and spi bus in NRF24 driver 2022-11-02 03:42:38 +03:00
MX
2ab9769b4b Merge remote-tracking branch 'origin/dev' into dev 2022-11-02 01:54:42 +03:00
MX
ee665e1089 Merge pull request #144 from wh00hw/dev
Morse Code FAP
2022-11-02 01:52:59 +03:00
MX
5e940ea9d0 Merge pull request #145 from huuck/usbkeyboard_function_keys
added additional row for function keys
2022-11-02 01:47:38 +03:00
MX
f3d45ab350 Merge pull request #147 from quen0n/dev
New plugin - DHT Monitor
2022-11-02 01:44:22 +03:00
MX
7d139517b8 add plugin as plain files 2022-11-02 01:38:09 +03:00
Victor
f51877b7c8 Revert "New plugin - DHT Monitor"
This reverts commit bb5c545211.
2022-11-02 01:35:08 +03:00
MX
92b8a256e4 Snake game: Fix food spawn bug 2022-11-02 01:29:01 +03:00
MX
0d27086c40 Merge branch 'fz-dev' into dev 2022-11-02 01:09:39 +03:00
MX
46bffba498 replace furi check hotfix with ofw proper fix 2022-11-02 01:08:54 +03:00
MX
165d9972e7 SubGHz Fixes: BFT fix, other small fixes 2022-11-02 01:05:05 +03:00
Victor
bb5c545211 New plugin - DHT Monitor 2022-11-01 22:15:58 +03:00
huc
ddaa8ec1fd added additional row for function keys 2022-11-01 13:51:30 -04:00
あく
104a1998a5 Furi: raise bkpt only if debug session initiated, add debug support for release builds (#1957)
* Fix hard crash on some custom firmwares in RELEASE mode
* Furi: anya wa erai, anya wa eleganto, raise bkpt only if debug session initiated, add debug support for release builds

Co-authored-by: DerSkythe <skif@skif.ws>
2022-11-01 19:27:25 +09:00
wh00hw
38297cb7af Update ReadMe.md 2022-11-01 11:09:55 +01:00
wh00hw
419a90aa28 Add MorseCode fap 2022-11-01 11:08:53 +01:00
MX
348c4c3b5f update link 2022-10-30 02:05:23 +03:00
MX
0bcfe7b7a4 update readme and changelog 2022-10-30 02:02:42 +03:00
MX
7fe0e6c073 update changelog 2022-10-29 23:17:34 +03:00
MX
28d9d5194f simpler version
as @DerSkythe suggested
2022-10-29 20:13:07 +03:00
MX
296bdfd433 actual proper fix of furi_halt 2022-10-29 19:36:40 +03:00
MX
ddc6265920 Revert "downgrade check.c/.h - see desc"
This reverts commit 2d3469e057.
2022-10-29 19:21:23 +03:00
MX
2d3469e057 downgrade check.c/.h - see desc
(Furi: smaller crash routine) causes crashes when furi_halt is called, why? I donT knoW
This is temporary solution until real bug will be found
2022-10-29 19:15:46 +03:00
MX
8e4595e4f7 fix nfc worker merge issues 2022-10-29 17:21:30 +03:00
MX
328fcdd924 update chlog 2022-10-29 16:09:28 +03:00
MX
0dc55957ae Merge pull request #141 from TQMatvey/dev
Wifi Marauder: make "add random" not overlap > symbol
2022-10-29 16:08:37 +03:00
MX
5319c69e59 update changelog 2022-10-29 15:48:26 +03:00
MX
1115a0b877 fix subghz bruteforcer 2022-10-29 15:45:51 +03:00
TQMatvey
908eca335e Wifi Marauder:make "add random" not overlap > symbol 2022-10-29 13:49:29 +07:00
MX
e242941d70 update changelog 2022-10-29 03:38:40 +03:00
MX
4e66d37ac8 fix i2c tools menu bug 2022-10-29 03:36:18 +03:00
MX
0dff574757 downgrade TOTP to 1.1.0 due to strange bug
also keep new icons layout
2022-10-29 03:33:02 +03:00
MX
6acf76e4ed fix wrong import 2022-10-29 02:58:22 +03:00
MX
d7c75b9db8 fix tg message 2022-10-29 02:53:11 +03:00
MX
4fd52b0564 update changelog 2022-10-29 02:29:25 +03:00
MX
95bfaa8b23 update changelog and readme 2022-10-29 02:19:29 +03:00
MX
639988a979 format 2022-10-29 00:45:20 +03:00
MX
0a63b2fdd8 upd icon file naming 2022-10-29 00:40:17 +03:00
MX
00b430a912 Merge pull request #140 from ahumeniy/unleashed_flappy_pilars_visibility
Increase pilars line width to improve visibility
2022-10-28 21:50:08 +03:00
MX
73b8d496fe infrared api for .fap's 2022-10-28 21:44:36 +03:00
MX
d52d9ffe79 update keeloq with new magic type 2022-10-28 21:40:59 +03:00
MX
0dcf752342 update subbrute 2022-10-28 20:05:50 +03:00
MX
9b55076eed Revert "Merge branch 'fz-dev' into dev"
This reverts commit c4479a9056.
2022-10-28 19:55:24 +03:00
MX
c4479a9056 Merge branch 'fz-dev' into dev 2022-10-28 19:55:17 +03:00
MX
e7316464cb Merge branch 'fz-dev' into dev 2022-10-28 19:51:50 +03:00
Vladimir
85d341104f Update ac.ir (#1945)
Added conditioner Saturn CS-TL09CHR ir signals (Dh, Cool_hi, Cool_lo, Heat_hi, Heat_lo, Off)

Co-authored-by: あく <alleteam@gmail.com>
2022-10-29 01:50:07 +09:00
MX
cb47edf82f rm unused file 2022-10-28 19:45:59 +03:00
Georgii Surkov
d5f791b1fa [FL-2911] IR Universal Audio Remote (#1942)
* Add Audio universal remote
* Add signal library for Audio Universal Remote
* Update UniversalRemotes.md
* Added IR profile for Samsung K450 soundbar (#1892)
* Add symbols to API file
* Rearrange Audio remote buttons
* Add new icons, remove old ones
* Remove old signals, add new ones
* Add universal audio remote to CLI, refactor code
* Improve help text
* Correct formatting
* Update UniversalRemotes.md
* Furi: restore correct api_symbols.csv version

Co-authored-by: Alexei Humeniy <yo@ahumeniy.net>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-29 01:43:54 +09:00
MX
4da3f9cf15 Merge branch 'fz-dev' into dev 2022-10-28 19:43:22 +03:00
MX
8333ebd401 new icons for subghz signals and infrared remotes
by @Svaarich
2022-10-28 19:41:56 +03:00
MX
3d25838a53 update gps
https://github.com/ezod/flipperzero-gps
2022-10-28 19:23:02 +03:00
MX
3ea6d59c2f fmt + update subbrute submodule 2022-10-28 19:18:42 +03:00
MX
5277933980 finish icon changes 2022-10-28 19:12:31 +03:00
gornekich
93a6e17ce5 [FL-2933] Mf Classic initial write, update, detect reader (#1941)
* nfc: introduce nfc write
* nfc: add write logic
* nfc worker: add write state
* nfc: add mfc update logic
* nfc: add update success logic
* nfc: add custom card for detect reader
* nfc: update write logic
* nfc: add halt command, add notifications
* nfc: add write fail scene
* nfc: fixes and clean up
* nfc: fix navigation ad notifications
* nfc: fix detect reader nfc data setter

Co-authored-by: あく <alleteam@gmail.com>
2022-10-29 01:10:16 +09:00
MX
0349380347 update i2c tools 2022-10-28 18:46:40 +03:00
Konstantin Volkov
09b622d4ae UnitTests: removed all continue-on-error lines (#1946)
* removed all continue-on-error lines
* Github: add assets deployment after format

Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-29 00:45:22 +09:00
MX
20e3a202aa more icons 2022-10-28 18:44:01 +03:00
MX
0a68d80028 update totp
https://github.com/akopachov/flipper-zero_authenticator
2022-10-28 18:34:35 +03:00
MX
457b9ae2a9 icons upgrade, keeloq fix, api bump 2022-10-28 18:32:52 +03:00
hedger
4b921803cb fbt: fixes for ufbt compat (#1940)
* fbt: split sdk management code
* scripts: fixed import handling
* fbt: sdk: reformatted paths
* scrips: dist: bundling libs as a build artifact
* fbt: sdk: better path management
* typo fix
* fbt: sdk: minor path handling fixes
* toolchain: fixed windows toolchain download

Co-authored-by: あく <alleteam@gmail.com>
2022-10-29 00:32:06 +09:00
Alexei Humeniy
9e8c841df0 Increase pilars line width to improve visibility 2022-10-28 12:15:59 -03:00
MX
2cfb5bdfc6 Merge branch 'fz-dev' into dev 2022-10-28 18:03:31 +03:00
MX
b287cb4b4a Merge pull request #139 from askoriy/file-show-content
Browser: Context menu to show file content
2022-10-28 17:55:47 +03:00
MX
99ddb235e0 Merge pull request #137 from RogueMaster/ul-betterdummy
Add Dummy Mode Game Shortcuts to Scene & View
2022-10-28 17:32:37 +03:00
Skorpionm
9cd0592aaf SubGhz: add keeloq potocol JCM_Tech (#1939)
* SubGhz: add keeloq potocol  JCM_Tech
* SubGhz: add new metod decoder

Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 23:31:41 +09:00
MX
fa7aa00f57 also allow to use it not in dummy mode 2022-10-28 17:30:53 +03:00
MX
981740bcc6 Merge branch 'dev' into ul-betterdummy 2022-10-28 17:24:26 +03:00
MX
09fec61153 ability to switch animations only when debug -> on 2022-10-28 17:24:10 +03:00
MX
dcf076b11e more checks and limits 2022-10-28 17:16:47 +03:00
Sergey Gavrilov
3434305630 [FL-2937] Remove resources from API to prevent frequent API version increase (#1935)
* Remove all icons from API
* Music player: icons
* Signal generator: icons
* Bt hid: icons
* Weather station: icons
* Picopass: icons
* File browser test: icons
* Example images: documentation
* Remove global assets header
* Fix picopass

Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 23:08:50 +09:00
Konstantin Volkov
492f147568 [FL-2887] actions unit tests runner (#1920)
Co-authored-by: Konstantin Volkov <k.volkov@flipperdevices.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 22:59:09 +09:00
Oleg Moiseenko
be3ee9f2fe Oregon2 additional sensors defines (#1933)
* added a list of sensors and added several additional temperature and temperature/humidity sensor id's
* now here are only sensors that have test data

Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 22:42:59 +09:00
MX
9fae52166c fixes and improvements 2022-10-28 16:05:17 +03:00
MX
8dab5fd231 Merge branch 'dev' into file-show-content 2022-10-28 14:42:35 +03:00
MX
4c0c70ff64 Merge branch 'fz-dev' into dev 2022-10-28 14:39:14 +03:00
Skorpionm
26f852839a WS: fix Acurite-606TX protocol (#1938)
* WS: fix acurite_606tx protocol
* WS: update version
* WeatherStation: remove break from invalid place

Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 20:16:54 +09:00
Georgii Surkov
f11df49468 [FL-2828] Dolphin score update take 2 (#1929)
* Move DolphinDeedNfcRead
* Move DolphinDeedNfcReadSuccess
* Move DolphinDeedNfcSave
* Move DolphinDeedNfcDetectReader
* Move DolphinDeedNfcEmulate
* Count DolphinDeedNfcEmulate when launched from file browser
* Implement most of the score accounting for NFC
* Fully update Nfc icounter handling
* Move DolphinDeedSubGhzFrequencyAnalyzer
* Update the rest of icounter in SubGHz
* Adjust SubGHz icounter handling
* Adjust LFRFID icounter handling
* Adjust Infrared icounter handling
* Don't count renaming RFID tags as saving
* Don't count renaming SubGHz signals as saving
* Don't count renaming NFC tags as saving
* Adjust iButton icounter handling
* Minor code refactoring
* Correct formatting
* Account for emulating iButton keys from file manager/rpc

Co-authored-by: あく <alleteam@gmail.com>
2022-10-28 16:18:41 +09:00
Aleksandr Skoriy
2fd8c71626 fix missing furi_record_close 2022-10-28 08:24:09 +03:00
Aleksandr Skoriy
ba69ee88f3 Add limitation for file size to not crash 2022-10-28 08:05:31 +03:00
Aleksandr Skoriy
8e362b087a Browser: Context menu to show file content 2022-10-28 05:51:53 +03:00
RogueMaster
88ea7c8d12 Merge branch 'DarkFlippers:dev' into ul-betterdummy 2022-10-27 19:20:27 -04:00
MX
f9c08249a0 add forgotten import 2022-10-27 16:15:48 +03:00
RogueMaster
8995d03fad Merge branch 'DarkFlippers:dev' into ul-betterdummy 2022-10-26 20:57:26 -04:00
MX
b20c01d68b remove saving modulation due to strange bugs with custom modulations 2022-10-27 02:56:21 +03:00
RogueMaster
1d08a8aaa2 Added desktop_events entries that are needed 2022-10-26 19:45:53 -04:00
RogueMaster
2f1d20210b Add Dummy Mode Game Shortcuts to Scene & View 2022-10-26 19:19:14 -04:00
MX
85900c50ff add 330mhz 2022-10-27 01:26:04 +03:00
MX
fc3b62aa41 Merge branch 'fz-dev' into dev 2022-10-27 01:14:07 +03:00
hedger
8b7a52b97b fbt: fixed linter paths (#1930)
* fbt: fixed linter paths
* lint: changed file permissions

Co-authored-by: あく <alleteam@gmail.com>
2022-10-27 05:25:31 +09:00
MX
a99d29c0f3 Merge branch 'fz-dev' into dev 2022-10-26 23:09:58 +03:00
MX
72ab2b98ad move things a bit in subghz remote app 2022-10-26 22:47:32 +03:00
Skorpionm
aff99a72e8 SubGhz: fix variable types and CC1101 GPIO initialization optimization (#1931)
* SubGhz: fix variable types
* SubGhz: CC1101 GPIO initialization optimization
* SubGhz: return back gpio init
* SubGhz: cleanup grammar in math and format doxygen comments

Co-authored-by: あく <alleteam@gmail.com>
2022-10-27 04:40:13 +09:00
MX
56b9361bc0 Merge branch 'fz-dev' into dev 2022-10-26 21:57:53 +03:00
MX
7c9f2cd3e8 fix: gpio pins reset to default state, see desc.
fixed wrong text in wifi deauther
fixed hc sr04 gpio
other fixes
2022-10-26 21:54:23 +03:00
Vasyl "vk" Kaigorodov
ebaa84b0c2 Support for setting all screen orientations (#1928)
* Support for setting all screen orientations
* Gui: add flipped orientation to view
* Gui: correct assert conditions in gui_add_view_port

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-27 03:35:49 +09:00
MX
89e27d10a2 Merge branch 'fz-dev' into dev 2022-10-26 19:27:45 +03:00
hedger
a8edb41eae fbt, docs: typo fixes; vscode: fixed deprecated target names (#1926)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-27 00:18:06 +09:00
Skorpionm
5c8df66b7c [FL-2927] SubGhz: add RAW Read threshold rssi (#1911)
* SubGhz: add RAW Read threshold rssi
* SubGhz: update indicator RSSI
* SubGhz: fix record file

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-27 00:13:00 +09:00
Skorpionm
378bf05068 [FL-2934] WS: add protocol Acurite 592TXR (#1916)
* WS: add protocol Acurite 592TXR
* WS: fix decoder Acurite_592TXR
* SubGhz: proper types in math

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-26 23:56:54 +09:00
Max Lapan
406d830fb6 Oregon2 extra (#1924)
* Add support for temp-humid sensor 0x1D20
* Fix protocol type and flags, humidity decoding

Co-authored-by: あく <alleteam@gmail.com>
2022-10-26 22:37:58 +09:00
MX
85573745ec remove 2022-10-26 03:48:06 +03:00
MX
c72b305480 Merge branch 'fz-dev' into dev 2022-10-26 03:44:21 +03:00
gornekich
7d2d2b3dd9 [FL-2932] TikTok: reset cursor after enter and reconnect #1921
Co-authored-by: あく <alleteam@gmail.com>
2022-10-26 07:57:06 +09:00
Anna Prosvetova
d530238fae CI: Update web updater domain (#1919)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-26 07:48:33 +09:00
Astra
30f10dce80 Fix a typo in the factory reset screen "setting" -> "settings" #1917
Co-authored-by: あく <alleteam@gmail.com>
2022-10-26 07:44:27 +09:00
hedger
0adad32418 fbt fixes pt4 (#1899)
* fbt: fixed py scripts for gdb
* fbt: removed compiled dolphin assets from tracked files; resolved cached dependency issues by globally disabling deps cache; changed dependency tracking for dolphin assets
* fbt: fix for "resources" node lookup
* toolchain: bump to v.16 with scons + x64 win binaries
* fbt: using scons from toolchain
* vscode: fixed paths for 64-bit Windows toolchain
* fbt: added colors!
* fbt: moved import validator to ansi lib coloring
* fbt: moved COMSTR vars to tools
* fbt: custom action for fap dist
* fbt: added OPENOCD_ADAPTER_SERIAL configuration var for openocd operations
* fbt: added get_stlink target
* docs: details on libs for faps
* vscode: added DAP config for using Flipper as a debugger for a 2nd Flipper
* fbt: blind deps fix for sdk_origin
* fbt: sdk: moved deployment actions to pure python
* Github: disable disableLicenseExpirationCheck option for pvs

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-26 07:15:02 +09:00
MX
cf4a0b06e2 update temp sensor plugin 2022-10-25 03:59:40 +03:00
MX
fd127cee8c update changelog and readme 2022-10-24 22:01:18 +03:00
MX
e8920ef15a Merge pull request #130 from TQMatvey/dev
Snake: Allow food to spawn anywhere
2022-10-24 21:59:47 +03:00
MX
ee614f11fc fix fap_dist 2022-10-24 21:30:40 +03:00
MX
c2bf81dd64 forgot to add this 2022-10-24 21:28:39 +03:00
MX
c19a8fd636 halloween theme :) 2022-10-24 21:28:04 +03:00
gornekich
5ed9ca838a bt hid: reset cursor for ble tiktok controller 2022-10-24 21:24:21 +03:00
MX
29ab1088bd WS: add protocol Acurite 592TXR
OFW PR 1916 by Skorpionm
2022-10-24 21:22:11 +03:00
MX
517d4ffb73 new plugin, and use clear power in temp sensor 2022-10-24 19:53:59 +03:00
MX
b39e0dd09e cleanup 2022-10-24 18:31:47 +03:00
MX
1e7b45159e again.... 2022-10-24 17:26:03 +03:00
MX
9b75f957d9 update link 2022-10-24 17:15:38 +03:00
MX
e8f8cefd6f Merge branch 'fz-dev' into dev 2022-10-24 17:05:34 +03:00
あく
984d89c6d0 Furi: smaller crash routine (#1912)
* Furi: smaller crash routine
* Furi: small fixes
* Furi: cleanup check routines, more assembly code, force inline of __furi_halt_mcu
* SubGhz: cleanup residual line mess
* Documentation
* Dap-link: fix help
* Furi: replace __furi_halt_mcu with HALT_MCU macros
* Furi: disable IRQ earlier in crash handler
* Furi: properly handle masked mode when detecting ISR
* Ble: allow 0 length feed in rpc_session_feed
* Format sources
* Furi: better crash logic explanation.
* Furi: some grammar in check.h

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2022-10-24 20:50:34 +10:00
TQMatvey
d159c56e28 Snake: Allow food to spawn anywhere
food was only spawning on old snake path from previous firmware versions, now it can spawn on each pixel on new snake path
2022-10-24 09:31:18 +07:00
MX
d0e24bb455 fix oregon2 flags 2022-10-24 00:05:50 +03:00
MX
e00f7009f3 update link 2022-10-23 15:34:24 +03:00
MX
64ecdce5ca fix wrong type in oregon2 protocol 2022-10-22 23:51:44 +03:00
MX
de49bcc80c add a link to tg releases 2022-10-22 23:20:17 +03:00
MX
8793b9f0aa update changelog 2022-10-22 23:10:33 +03:00
MX
c6945313f6 Merge branch 'fz-dev' into dev 2022-10-22 22:12:49 +03:00
MX
fd41176353 furi crash are removed, so, upgrading major version 2022-10-22 22:12:04 +03:00
Max Lapan
d8fbaba7a0 Move Oregon2 to Weather Station FAP (#1910)
* Init copy of oregon2 to weather station app
* WS decoder
* Reuse decoded data
* Delete old protocol
* Delete oregon2 unit test
* Decrement count of random test

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-23 00:50:26 +09:00
MX
de1d83038f Merge branch 'fz-dev' into dev 2022-10-22 18:34:50 +03:00
あく
f8af0c1509 [FL-2892] Gui: update statusbar attention icon and better crash handling (#1908)
* Gui: update statusbar attention icon
* Furi: snapshot registers on crash and restore in halt
* Furi: document check routines
2022-10-23 01:21:10 +10:00
MX
9605af0e85 update changelog 2022-10-22 14:14:53 +03:00
MX
ed080ea5fc fixed bug when mobile app was unable to send raw file
file name should not contain dots
2022-10-22 13:09:41 +03:00
MX
a24ef44289 update changelog 2022-10-21 22:57:57 +03:00
MX
1019025b13 update totp
https://github.com/akopachov/flipper-zero_authenticator
2022-10-21 22:56:58 +03:00
MX
a44739cde9 emulate uid from fav 2022-10-21 22:15:36 +03:00
MX
c19f3a3a6a update changelog 2022-10-21 22:10:21 +03:00
MX
6189511a87 allow uid emulation of emv 2022-10-21 22:00:54 +03:00
MX
12bbe3e68e return saving of emv 2022-10-21 21:58:59 +03:00
MX
12dda6b76b update changelog 2022-10-21 21:52:06 +03:00
MX
92a6cce70e Merge pull request #125 from TQMatvey/dev
Snake: Allow snake to turn anywhere
2022-10-21 21:48:47 +03:00
MX
8fc3140292 Merge pull request #124 from ESurge/unleashed
UniRFRemix - Cleaned up error checking + Bug fix
2022-10-21 21:48:07 +03:00
SG
235af1aacb Dap-link: fix C symbol 2022-10-21 21:45:32 +03:00
TQMatvey
a0a8e0457a Snake: Allow snake to turn anywhere 2022-10-21 13:58:26 +07:00
ESurge
f291c9546d Cleaned up error checking in unirfremix_cfg_set_check
Fixed a bug where all options are disabled and set to N/A but it doesn't show Config is invalid screen.
2022-10-20 23:29:07 -07:00
MX
a73535070c cleanup instruction 2022-10-21 05:35:35 +03:00
MX
8931cb2088 update naming 2022-10-21 00:03:57 +03:00
MX
33e4d2a17f fbt format + fix bug 2022-10-20 23:53:08 +03:00
MX
ca3ce2edce add temp sensor plugin 2022-10-20 23:51:13 +03:00
MX
1ab59bac83 Update how to install
Thanks to @Svaarich for instruction images, and our community for android app screenshots
2022-10-20 22:43:25 +03:00
MX
221bd13e09 update subbrute module 2022-10-20 22:07:45 +03:00
MX
b508fa7dfc update changelog and readme
and assets
2022-10-20 21:43:27 +03:00
MX
fc2a643d12 bump 2022-10-20 21:04:33 +03:00
MX
2a30214ca2 Merge branch 'fz-dev' into dev 2022-10-20 21:04:10 +03:00
MX
120a74ee1a add two new plugins 2022-10-20 21:02:27 +03:00
Skorpionm
c1bb10a694 [FL-2920] WS: add protocol Acurite-606TX, LaCrosse_TX141THBv2 (#1898)
* WS: add protocol Acurite-606TX
* WS: history, added display of the channel (if any) in the general list
* WS: added display of the button state if it is on the transmitter, and displaying the data that is in the signal
* WS: fix batt info
* WS: add protocol LaCrosse_TX141THBv2
* WS; fix syntax
* Furi: bump api_symbols version

Co-authored-by: あく <alleteam@gmail.com>
2022-10-21 02:26:28 +09:00
あく
33892ebfb7 [FL-2818] FuriHal: add FuriHalCortexTimer, use it for i2c bus timeouts (#1900)
* FuriHal: add FuriHalCortexTimer, use it for i2c bus timeouts
* Furi: cleanup FuriHalCortexTimer sources and headers
2022-10-20 20:14:46 +03:00
MX
f8f7c2b895 bump 2022-10-20 19:22:27 +03:00
MX
96dd3ad1ce WS: add protocol Acurite-606TX, LaCrosse_TX141THBv2
OFW PR 1898 by Skorpionm - Details will be in changelog
2022-10-20 19:14:04 +03:00
MX
2740368b0e Merge branch 'fz-dev'
Conflicts:
	.gitmodules
	firmware/targets/f7/api_symbols.csv
2022-10-20 19:06:56 +03:00
Sergey Gavrilov
f56c94922d CMSIS DAP/DAP Link Debugger (#1897)
* Apps: DAP Link
* API: furi_hal_console_init

Co-authored-by: あく <alleteam@gmail.com>
2022-10-20 20:42:55 +09:00
Sergey Gavrilov
42df7aa04a Fix FuriString oplist (init move) (#1894)
* FuriString, Infrared: fix oplist and drop string_t.
* Elf loader: log size
* Comment fix
* API: furi_hal_console_init
2022-10-20 19:58:11 +09:00
MX
732f744b3c Merge pull request #122 from derskythe/fix-auto-correction
fix by autocorrection
2022-10-20 01:09:55 +03:00
DerSkythe
5c821eb076 fix by autocorrection 2022-10-20 02:07:01 +04:00
MX
e8d62db634 update changelog 2022-10-19 23:47:43 +03:00
MX
e56f97245b Merge pull request #121 from derskythe/dev-master
SubGHz Frequency Analyzer sync with OFW
2022-10-19 23:38:05 +03:00
DerSkythe
26dfa9b9a5 fix for update cursor 2022-10-20 00:18:40 +04:00
Der Skythe
62284209e6 Merge branch 'DarkFlippers:dev' into dev-master 2022-10-19 23:31:07 +04:00
DerSkythe
6d86629e9a minor changes 2022-10-19 23:31:04 +04:00
DerSkythe
0139891d64 Add cursor frame to selected preferred signal 2022-10-19 23:29:46 +04:00
MX
8415dcf823 Merge branch 'fz-dev' into dev 2022-10-19 21:16:59 +03:00
Skorpionm
9a9abd59e9 [FL-2904, FL-2900, FL-2890] WS: add app WeatherStation (#1833)
* WeatherStation: start
* SubGhz: rename protocol magellen -> magellan
* WeatherStation: err Unresolved symbols: {'subghz_protocol_decoder_base_get_string'}
* WeatherStation: fix Unresolved symbols: {'subghz_protocol_decoder_base_get_string'}
* Subghz: add set protocol_items
* WeatherStation: adding your protocols
* WS: add Infactory protocol
* WS: add history
* WS: add setting
* WS: add lock
* WS: add hopper frequency
* WS: fix history
* WS fix string_t -> FuriString*
* WS: add images
* WS: history record update when receiving data from the sensor again
* WS: add receiver info, delete extra code
* WS: add protocol ThermoPRO_TX4
* [FL-2900] SubGhz: Move icons in Sub-GHz
* WS: add Notification
* [FL-2890] SubGhz: Rename *_user files in resources to _user.example
* WS: add about scene
* WS: removing redundant code
* WS: add  protocol Nexus-TH
* WS: add protocol GT_WT03
* WS: fix notification and rename "Weather Station" -> "Read Weather Station"
* SubGhz: partial unit tests fix
* SubGhz: fix unit_test
* SubGhz: remove dead code
* SubGhz: rename SubGhzPresetDefinition into SubGhzRadioPreset, cleanup subghz types.

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-20 02:27:26 +09:00
MX
7417259dcd update changelog and add freq 2022-10-19 19:09:12 +03:00
MX
a3c6d8bb4a SubGhz: rename SubGhzPresetDefinition into SubGhzRadioPreset, cleanup subghz types. 2022-10-19 18:52:21 +03:00
Aleksandr Kutuzov
3807d61034 SubGhz: remove dead code 2022-10-19 18:41:04 +03:00
derskythe
ab55ddbfb1 fix position and sort array taking latest to first 2022-10-19 19:29:48 +04:00
MX
328fbffb80 Merge branch 'fz-dev' into dev 2022-10-19 18:24:56 +03:00
hedger
79c3040629 fbt: fixed dependency issues with SDK definition file (#1893)
* fbt: fixed dependency issues with SDK definition file
* fbt: more path fixes; marked up new symbols
2022-10-19 23:28:48 +09:00
derskythe
4f6d27a214 Don't add to to array if value already exists 2022-10-19 13:12:47 +04:00
DerSkythe
f0e8da98ee Fix interface and add extra history field 2022-10-19 12:20:58 +04:00
Der Skythe
c2e58f9633 Merge branch 'DarkFlippers:dev' into dev-master 2022-10-19 11:03:49 +04:00
DerSkythe
63eced449e Applied OFW version but not yet resized to correct view 2022-10-19 09:39:11 +04:00
MX
49ba5fc9f3 moved subghz bruteforcer into submodule 2022-10-19 06:32:31 +03:00
MX
dd28e5ea7b moving into submodule 2022-10-19 06:31:39 +03:00
MX
da7b9c86b9 add 434.19mhz 2022-10-19 05:55:26 +03:00
MX
3303047a4a update changelog 2022-10-19 02:52:25 +03:00
MX
488563000a subghz bruteforce - add chamberlain 7b and 8b 2022-10-19 02:47:44 +03:00
MX
6c08564d37 rm 313 from hopper 2022-10-19 01:41:59 +03:00
MX
5b8311cdea rename setting user back (since we are using it for custom stuff)
update change log too
2022-10-19 01:03:46 +03:00
MX
68429e191d Merge pull request #119 from ankris812/dev
replacing dict with expanded one
2022-10-19 00:55:52 +03:00
MX
5e7bcea29d removed duplicates 2022-10-19 00:54:27 +03:00
SkorP
a139f015b9 SubGhz: fix unit_test 2022-10-18 20:38:57 +03:00
MX
6579576490 fix protocol items requirement 2022-10-18 20:38:37 +03:00
MX
57251eb028 Merge branch 'fz-dev' into dev 2022-10-18 19:55:26 +03:00
Aleksandr Kutuzov
f33ea3ebe0 SubGhz: partial unit tests fix 2022-10-18 19:54:40 +03:00
MX
84d12da45a add app WeatherStation
OFW PR 1833 by Skorpionm
2022-10-18 19:51:44 +03:00
Kevin Kwok
72713d6f4e Allow pins 0 and 1 as RTS/DTR for USB UART Bridge (#1864)
* Allow pins 0 and 1 as RTS/DTR for USB UART Bridge
* add logic to gpio_scene_usb_uart_config, fix flow_pins
* fixing count of pins
* disable PC0,PC1 RTS/DTR when using LPUART
* add logic to ensure flow pins dont overlap with uart lines

Co-authored-by: あく <alleteam@gmail.com>
2022-10-19 00:06:18 +09:00
ankris812
468bc1dace added dict with extra keys 2022-10-18 17:02:30 +02:00
Patrick Cunningham
56f760aa07 Picopass: Read Elite (#1888)
* working elite dict
* add csn to display

Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 23:58:26 +09:00
ankris812
6db6d123d5 replacing dict with expanded one 2022-10-18 16:52:58 +02:00
Skorpionm
68009c6230 [FL-2919] SubGhz: CAME Wrong number of bits in key (add protocol Airforce) (#1890)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 23:24:53 +09:00
Georgii Surkov
02c27becb0 [FL-2912] Forced RAW receive option for Infrared CLI #1891
Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 23:10:21 +09:00
MX
576dab02a4 Merge branch 'fz-dev' into dev 2022-10-18 16:28:20 +03:00
hedger
4942bd2105 scripts: fixed c2 bundle format (#1889)
* scripts: fixed c2 bundle format
* scripts: copro.py: small refactoring

Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 21:13:28 +09:00
MX
1ee82ba865 update changelog and readme 2022-10-18 04:28:44 +03:00
MX
6e9658608e Merge remote-tracking branch 'origin/dev' into dev 2022-10-18 04:27:52 +03:00
MX
d49ca17824 Merge pull request #115 from TQMatvey/batter_percentage
Power: remove % sign from desktop and center numbers
2022-10-18 04:27:24 +03:00
MX
fc776446de heap defence, aka stack attack, ported to latest fw 2022-10-18 04:20:37 +03:00
MX
5a7fa30199 fix cli 2022-10-18 00:01:08 +03:00
MX
e4cdae4922 lfrfid cli help update 2022-10-17 23:33:54 +03:00
MX
c7a67c1308 update changelog and ir assets 2022-10-17 23:27:35 +03:00
MX
fd3e70492d add support for Normstahl, Mutancode, FAAC RC, XT 2022-10-17 22:43:33 +03:00
MX
a4ee73b470 add dtmf dolphin plugin
https://github.com/litui/dtmf_dolphin
2022-10-17 22:40:14 +03:00
MX
8f5cbdc4c2 Merge pull request #113 from TQMatvey/dev
Minesweeper: Set cursor to initial position on death
2022-10-17 21:41:57 +03:00
MX
6d999abb80 Merge pull request #114 from TQMatvey/flappy_patches
Flappy: Border hitboxes, bigger Pilars
2022-10-17 21:41:24 +03:00
MX
89d49fdba7 Merge branch 'dev' into flappy_patches 2022-10-17 21:39:09 +03:00
MX
04d67ca8ae update totp
https://github.com/akopachov/flipper-zero_authenticator
2022-10-17 21:22:34 +03:00
MX
4f7ca617cc Merge branch 'fz-dev' into dev 2022-10-17 21:20:28 +03:00
Travis Montoya
f61a8fda53 Feature/infrared add remote to cli (#1856)
* Initial testing of remote using cli
* More fixes for cli ir remote
* Fixes. Turns off power now
* Finished adding other tv remote commands
* Changed if-else formatting
* Cleaned up unused variables
* Updating cli unviersal remote to accept tv, ac and more modular. Listing signals still does not work properly
* Using mlib dictionary to get unique signals from files for ir universal list
* Fixing progress bar
* Added error checking for invalid signal to stop freezing cli
* Added error checking for arg length
* Api symbols was changed somehow.. changed back and updated the argument check to account for newline
* Fixing string compares and argument length issue
* Freeing InfraredBruteForce in cli brute force signals

Co-authored-by: sqlsquirreltm <sqlsquirreltm>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 03:07:05 +09:00
Astra
5e35e51c57 [FL-2907] Remove the back button from MFC keys list #1878
Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 02:49:00 +09:00
gornekich
dfbe21e720 NFC fixes part 3 (#1885)
* nfc: fix read next key
* nfc: verify new line ending in user dictionary file
* nfc: fix cache save
* nfc: add unit test for dict load
* nfc: fix total key count in dictionary

Co-authored-by: あく <alleteam@gmail.com>
2022-10-18 02:10:41 +09:00
MX
18e7d2eb41 Merge branch 'fz-dev' into dev 2022-10-17 19:27:29 +03:00
Ivan Podogov
e7aaf3dbb2 Enable all view_ methods in SDK (#1884) 2022-10-18 01:17:04 +10:00
TQMatvey
76aecb597a Power: remove % sign from desktop and center numbers 2022-10-17 15:14:31 +07:00
MX
d2018dfa1d Merge branch 'fz-dev' into dev 2022-10-17 02:54:39 +03:00
hedger
8ec5527ae4 fbt: fix for cincludes in app's private library definition (#1882) 2022-10-17 03:11:27 +10:00
TQMatvey
3a50021348 Flappy: Allow using UP key to jump 2022-10-15 12:54:00 +07:00
TQMatvey
20c63664ca Flappy: Border hitboxes, bigger Pilars 2022-10-15 12:46:59 +07:00
TQMatvey
9b6abd8ef0 Minesweeper: Set cursor to initial position on death 2022-10-15 10:53:45 +07:00
MX
f96f2e2411 Merge branch 'fz-dev' into dev 2022-10-14 22:25:48 +03:00
MX
6442caa3e4 Revert "fbt - fix flash usb without resources "
This reverts commit ce173fd44c.
2022-10-14 22:25:11 +03:00
あく
f06930e4ae Desktop: fix fap in settings (#1877) 2022-10-14 21:23:06 +03:00
Kevin Kwok
865baed0bb Fix FileNotFoundError in ./fbt flash_usb (#1876)
* Fix FileNotFoundError in ./fbt flash_usb
* scripts: update.py: proper fix for file naming

Co-authored-by: あく <alleteam@gmail.com>
Co-authored-by: hedger <hedger@nanode.su>
2022-10-15 03:07:23 +09:00
Nikolay Minaylov
f81999ea4a Fix number of dolphin_apps (#1874)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-15 02:35:53 +09:00
MX
89a4b77e73 Merge branch 'fz-dev' into dev 2022-10-14 20:23:11 +03:00
gornekich
ead9f134f4 [FL-2623] Add BLE disconnect request #1686
Co-authored-by: LionZXY <nikita@kulikof.ru>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-15 02:21:23 +09:00
Johannes Mittendorfer
9ff29d12b2 Fix typo in fap loader logging (#1875) 2022-10-15 01:54:52 +09:00
MX
5f3637ca44 update discord link with qr code 2022-10-14 19:48:05 +03:00
MX
effcb445ce update minesweeper
https://github.com/panki27/minesweeper
2022-10-14 19:19:44 +03:00
MX
55bad280ee update changelog 2022-10-14 17:59:53 +03:00
nminaylov
b003ede76c Fix number of dolphin_apps 2022-10-14 17:59:09 +03:00
MX
57362b3eab update changelog 2022-10-14 01:53:09 +03:00
MX
cb0d9ec591 add sec+ 1.0/2.0 433mhz in add manually, and run fbt fmt 2022-10-14 01:49:32 +03:00
MX
dad4772bec update minesweeper
https://github.com/panki27/minesweeper
2022-10-14 01:43:57 +03:00
MX
a16542cda6 update readme 2022-10-14 01:36:37 +03:00
MX
a5d22154a9 update changelog 2022-10-14 01:34:12 +03:00
MX
ce173fd44c fbt - fix flash usb without resources
this is not "stolen" from official, bug are present in ofw at current moment
2022-10-14 01:31:44 +03:00
MX
d547307357 Fix DTM Neo encoder 2022-10-14 01:30:20 +03:00
MX
c198a51b1c Merge branch 'fz-dev' into dev 2022-10-14 01:11:00 +03:00
David
d5b239595f Desktop: Set external apps as favorites (#1816)
* MVP
* Display app name and icon in browser
* Pre-select favorites in submenu and browser
* Show animation while external favorite is loading
* A little birdie told me... (Missing record_close)
* DesktopSettings: reset submenu before running dialog

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-14 03:09:37 +09:00
MX
947e44ce86 Merge branch 'fz-dev' into dev 2022-10-13 20:32:05 +03:00
Astra
55f8beef9f [FL-2876] MFC Improvements Part 2/2 (#1868)
* Remove keys incorrectly added by the key cache
* Improve responsiveness while checking for re-used keys and fix skipping keys when card is removed
* Actually check if the card is completely read
* Discard incorrect keys on a lower level
* nfc: clean up

Co-authored-by: gornekich <n.gorbadey@gmail.com>
2022-10-14 01:23:29 +09:00
Dzhos Oleksii
e46e6f8ee9 Update title for web updater (#1872)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-14 00:34:27 +09:00
MX
ff6c4f9957 Merge branch 'fz-dev' into dev 2022-10-13 18:07:58 +03:00
hedger
8fdee1e460 Scripts: simpler tar format (#1871)
* scriptsL simpler tar format
* scripts: shorter names for files in update bundle
* scripts: limiting max OTA package dir name length to 80
* scripts: resource bundle: checks for file name length
* scripts: made resource packing errors critical
2022-10-14 00:05:07 +09:00
MX
558f85603d update changelog 2022-10-13 18:03:24 +03:00
MX
b909321699 Merge pull request #107 from an4tur0r/feature/fast_pin_lock
Feature: lock device with pin by long pressing up button
2022-10-13 17:54:43 +03:00
MX
ff52f7d9ba Merge branch 'hedger/fbt_tarfix' into dev 2022-10-13 17:48:16 +03:00
hedger
abfe53f156 scripts: made resource packing errors critical 2022-10-13 18:27:21 +04:00
hedger
9a2228bfa4 scripts: resource bundle: checks for file name length 2022-10-13 18:09:04 +04:00
MX
da17adb5ee update tar formats 2022-10-13 17:08:00 +03:00
hedger
7b16de2d6f scripts: limiting max OTA package dir name length to 80 2022-10-13 17:03:11 +03:00
hedger
735056628c scripts: limiting max OTA package dir name length to 80 2022-10-13 18:01:49 +04:00
MX
9941df48bb run fbt format 2022-10-13 17:00:20 +03:00
MX
8e0e4b5e2c update totp plugin
https://github.com/akopachov/flipper-zero_authenticator
2022-10-13 16:57:08 +03:00
hedger
220adf2375 scripts: shorter names for files in update bundle 2022-10-13 16:55:04 +03:00
an4tur0r
39cd10f061 lock device shortcut 2022-10-13 16:54:13 +03:00
hedger
af1fb2018a scripts: shorter names for files in update bundle 2022-10-13 17:38:47 +04:00
MX
3dde6089fc update mfc improvements
OFW PR 1868 by Astrrra
2022-10-13 16:06:34 +03:00
MX
5f28eafcd2 scripts: fix tar format
OFW PR 1871 by hedger
2022-10-13 01:47:03 +03:00
MX
94d2d5c99f tgz is now built by fbt 2022-10-13 00:49:17 +03:00
MX
3a569d4be8 Merge branch 'fz-dev' into dev 2022-10-13 00:42:15 +03:00
hedger
db2f4847ba scriptsL simpler tar format 2022-10-12 23:13:17 +04:00
Luke Williams
50dc2d7389 36-bit AWID (L11601 Lenel) (#1838)
* 36-bit AWID
* Rfid: correct vendor name AWIG -> AWID

Co-authored-by: Sergey Gavrilov <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-13 01:31:54 +09:00
Thibaut CHARLES
ede3bac799 Badusb: show script errors on screen (#1506)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-13 01:21:54 +09:00
hedger
eb4ff3c0fd [FL-2832] fbt: more fixes & improvements (#1854)
* github: bundling debug folder with scripts; docs: fixes & updates; fbt: added FAP_EXAMPLES variable to enable building example apps. Disabled by default. fbt: added TERM to list of proxied environment variables
* fbt: better help output; disabled implicit_deps_unchanged; added color to import validator reports
* fbt: moved debug configuration to separate tool
* fbt: proper dependency tracker for SDK source file; renamed linker script for external apps
* fbt: fixed debug elf path
* fbt: packaging sdk archive
* scripts: fixed sconsdist.py
* fbt: reworked sdk packing; docs: updates
* docs: info on cli target; linter fixes
* fbt: moved main code to scripts folder
* scripts: packing update into .tgz
* fbt, scripts: reworked copro_dist to build .tgz
* scripts: fixed naming for archived updater package
* Scripts: fix ぐるぐる回る

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-13 01:12:05 +09:00
gornekich
afff1adf8f [FL-2882] BLE tiktok controller (#1859)
* bt hid: introduce tiktok controller
* assets: add bt tiktok assets
* bt hid: finish tiktok draw
* bt hid: add input process to tiktok view
* bt hid: add tiktok swipe emulation
* bt hid: fix exit from tiktok controller
* ble hid: add delay to emulate double tap
* ble hid: change options order
* bt hid: build as external application
* ble hid: fix naming

Co-authored-by: あく <alleteam@gmail.com>
2022-10-13 00:48:13 +09:00
あく
92a738bf77 Dolphin: add L1_Painting animation (#1863)
Co-authored-by: hedger <hedger@users.noreply.github.com>
2022-10-13 00:39:39 +09:00
Max Andreev
b3d9523322 Github actions on kubernetes runners (#1861)
* Change toolchain path and runner tag
* fix check_submdules.yml
* try to fix errors
* create .ssh directory
* fix toolchain path
* add empty line for test
* testing 3 k8s nodes speed
* Test speed again
* change tag, move reindex job
* bring reindex.yml back
* fix build.yml
* fix reindex.yml

Co-authored-by: あく <alleteam@gmail.com>
2022-10-13 00:31:25 +09:00
MX
155cbeeb11 fix app id for assets 2022-10-12 05:43:22 +03:00
MX
0d273bd15c update assets and changelog 2022-10-12 05:36:40 +03:00
MX
2e047ff411 allow 36-bit AWID (L11601 Lenel)
OFW PR 1838 by ae5au
2022-10-12 05:32:58 +03:00
MX
80a406afd3 BLE tiktok controller - why? :(
OFW PR 1859 by gornekich
2022-10-12 05:31:19 +03:00
MX
6b5631e5b0 MFC Improvements Part 2/2
OFW PR 1868 by Astrrra
2022-10-12 05:29:42 +03:00
MX
80735d4f51 Merge pull request #102 from derskythe/fix-read-in-readraw-crash
flipper_format_free after all and only if we failed with all plans
2022-10-12 05:17:37 +03:00
MX
e1e46b89b1 Merge pull request #103 from derskythe/subghz-improvements
SubGHz improvements
2022-10-12 05:17:08 +03:00
MX
b7bdc4c985 sorry, i added "Mod:", and did fbt format 2022-10-12 05:15:45 +03:00
MX
f429d14ab5 Merge branch 'dev' into subghz-improvements 2022-10-12 05:04:55 +03:00
MX
744b61ca28 include license 2022-10-12 05:03:33 +03:00
MX
8520daf28b addding some great plugins to be preinstalled
and running fbt format, and fixing TOTP printf format
2022-10-12 05:01:37 +03:00
MX
aa9f958f07 Merge branch 'fz-dev' into dev 2022-10-12 04:37:59 +03:00
MX
b3f96306ed oooooops, added forgotten thing 2022-10-12 04:35:36 +03:00
MX
022315e93d Improve keeloq, add JCM support, fix Nice Smilo, MHouse, and more
now manufacturer name is saved into file, and will not change randomly, 
added support for JCM
fixed Nice Smilo, MHouse
2022-10-12 04:18:29 +03:00
DerSkythe
702786078d in PNG waves down 2 px, MHZ in Read screen 2022-10-11 22:38:36 +04:00
DerSkythe
e78d73c35f fix PNG, move waves 2px down and code to correct values 2022-10-11 21:56:00 +04:00
gornekich
2552278a3d [FL-2883] NFC: bank card rework reading (#1858)
* nfc: remove bank card save option
* nfc: remove bank card save from nfc device
* nfc: remove unused function in emv
* nfc: try several times to start emv application
* nfc: add AID display fallback for bank cards

Co-authored-by: あく <alleteam@gmail.com>
2022-10-12 02:13:12 +09:00
DerSkythe
34406f0607 flipper_format_free after all and only if we failed with all plans 2022-10-11 21:09:41 +04:00
Nikolay Minaylov
04f5ad83f8 [FL-2828] Dolphin score points update #1809 2022-10-12 01:54:35 +09:00
derskythe
06c0adfe98 Save in last settings FrequencyAnalyzer last feedback set 2022-10-11 18:45:46 +04:00
derskythe
b0d4146c76 Write full name of preset on Read/ReadRAW screen 2022-10-11 18:26:16 +04:00
MX
be293757c0 update changelog 2022-10-11 04:10:54 +03:00
MX
79e7c87b94 Merge pull request #98 from derskythe/fix-read-in-readraw-crash
Add split RAW files ability
2022-10-11 03:42:12 +03:00
MX
b6dfeac7ca rfid fuzzer fix 2022-10-11 03:39:48 +03:00
MX
349a151330 fix memory leak 2022-10-11 03:29:59 +03:00
MX
40dc80499f Merge pull request #97 from derskythe/subbrute-rev3
SubBrute Rev3
2022-10-11 00:57:08 +03:00
MX
b0c31da36a update name 2022-10-11 00:52:43 +03:00
MX
a76259add9 Merge pull request #99 from derskythe/dev-master
Fix line interval
2022-10-11 00:37:25 +03:00
DerSkythe
3f3ee1822a Update upper buttons 2022-10-10 23:24:10 +04:00
DerSkythe
0714df4a4a Fix line interval 2022-10-10 20:30:28 +04:00
DerSkythe
52361b4adf Add split RAW files ability 2022-10-10 20:20:56 +04:00
Der Skythe
61fe66c178 Merge branch 'DarkFlippers:dev' into subbrute-rev3 2022-10-10 19:26:25 +04:00
MX
016ebd3afc update changelog 2022-10-10 16:51:48 +03:00
MX
82b9d74b38 new animation :)
by @Svaarich
2022-10-10 16:47:15 +03:00
MX
6d1929af25 Merge branch 'fz-dev' into dev 2022-10-10 16:44:29 +03:00
MX
384397c282 fix .fap's debug 2022-10-10 16:43:48 +03:00
MX
0abd54ccc8 fix rfid fuzzer crash 2022-10-10 16:43:31 +03:00
MX
ea833d891f discord removes features without new boosts...
so here is new link that will always be available
2022-10-10 16:42:57 +03:00
DerSkythe
9152299562 Fix max value in BF dump brute 2022-10-10 12:53:33 +04:00
Skorpionm
906124b091 [FL-2886] SubGhz: fix text overlap in read (#1853) 2022-10-10 13:43:15 +09:00
DerSkythe
9c0391a887 minor changes 2022-10-10 04:44:23 +04:00
DerSkythe
7ded162c94 add vibro on stop to in-pocket mode 2022-10-10 03:24:44 +04:00
Der Skythe
382f620aff Merge branch 'DarkFlippers:dev' into subbrute-rev3 2022-10-10 03:03:41 +04:00
DerSkythe
323a56e987 fix saving files 2022-10-10 03:05:51 +04:00
DerSkythe
b65a2e9c94 fix send with dump file 2022-10-10 02:52:32 +04:00
DerSkythe
eed8cd1824 fix problem with sending 2022-10-10 01:44:37 +04:00
DerSkythe
500456b03d Returned to Worker model 2022-10-10 00:35:44 +04:00
MX
4b8221d813 add new icon for uart echo
icon by @Svaarich
2022-10-09 23:32:04 +03:00
MX
c7a454752a Merge pull request #95 from hardcod3dd/dev
Turkish language support
2022-10-09 22:41:46 +03:00
hardcod3d
b1f8073333 Turkish language support 2022-10-09 22:34:37 +03:00
MX
e489c57fc0 update changelog 2022-10-09 21:49:59 +03:00
Der Skythe
b4a3ac468f Merge branch 'DarkFlippers:dev' into subbrute-rev3 2022-10-09 21:39:58 +04:00
MX
877a9202fd fix decode raw bugs (blank screen, broken files) 2022-10-09 19:45:39 +03:00
MX
acbe7a10e2 enable hopping with detect raw, and trying to fix crashes
feature still very unstable, use at your own risk!!!
2022-10-09 14:43:18 +03:00
MX
b6b33a70e9 Merge pull request #93 from UberGuidoZ/patch-1
Slight update for newest dev method
2022-10-09 14:38:20 +03:00
MX
1132653d7a Merge branch 'fz-dev' into dev 2022-10-09 14:37:18 +03:00
UberGuidoZ
3fd30a9132 docs: update on FAP build process (#1852) 2022-10-09 09:20:15 +03:00
UberGuidoZ
50e9f7d3ca Slight update for newest dev method 2022-10-08 22:43:08 -07:00
MX
e7de975885 update changelog 2022-10-09 05:19:57 +03:00
MX
f5a1872db4 Desktop: Set external apps as favorites (& fix forgotten record close)
OFW PR 1816 by @djsime1
2022-10-09 05:18:24 +03:00
MX
409d2e5f05 replace usb mouse with new plugin (see readme and changelog) 2022-10-09 04:37:14 +03:00
MX
91d7a38ca6 update changelog and fix subghz issues 2022-10-09 04:24:51 +03:00
MX
00323892f2 rebranding :) 2022-10-09 02:27:38 +03:00
MX
45840a1146 rise and shine mr freeman... 2022-10-09 00:37:22 +03:00
MX
b0c9af9c06 Merge branch 'fz-dev' into dev 2022-10-08 23:11:16 +03:00
DerSkythe
7643fdad7c Seems we have cross-thread violation 2022-10-08 22:54:30 +04:00
Roland Kammerer
a1ede0a2fc BadUSB: add SYSRQ keys (#1460)
This allows sending of SysRq keys[1]. This then for example allows
sending the well known 'reisub' commands to safely reboot a otherwise
frozen Linux box. Or obviously any of the other magic keys.

The advantage compared to sending it to /proc/sysrq-trigger is that one
does not need a shell and depending on how broken the system is, one
might not even be able to get a new shell. The SysRq keys still work.

The cost is adding a new/"non-standard" keyword, IMO it is worth it.

Example:
DEFAULTDELAY 200
DELAY 1000
SYSRQ r
SYSRQ e
SYSRQ i
SYSRQ s
SYSRQ u
SYSRQ b

If one really wants to test it, I suggest h(elp) or w(ait).

[1] https://en.wikipedia.org/wiki/Magic_SysRq_key

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-09 02:56:56 +09:00
DerSkythe
b86f42e7fb Changed protocol info 2022-10-08 21:53:31 +04:00
Sergey Gavrilov
31c0346adc [FL-976] Removing lambdas (#1849)
* Removing lambdas...
* Wake the fk up, Gordon! We have a citadel to burn!
* Here comes the Nihilanth
* Lambda documentation

Co-authored-by: あく <alleteam@gmail.com>
2022-10-09 02:38:29 +09:00
Der Skythe
9ba7e625ca Merge branch 'Eng1n33r:dev' into subbrute-rev3 2022-10-08 21:00:31 +04:00
Sergey Gavrilov
981f7ff8b0 Elf loader: do not load .ARM.* sections (#1850)
* Elf loader: do not load .ARM sections
* Fix section name
2022-10-09 00:51:51 +09:00
SG
c38c42906f Elf loader: do not load .ARM sections 2022-10-08 17:50:26 +03:00
MX
7c8eacb168 Merge branch 'fz-dev' into dev 2022-10-08 15:14:15 +03:00
あく
c13929330e Gui: fix memory leak in file browser module (#1848) 2022-10-08 19:57:53 +09:00
Yukai Li
88ca267466 music_player: Return to browser instead of exiting on back button (#1846)
* music_player: Return to browser instead of exiting on back button
* music_player: Fix number and dots extraction
2022-10-08 19:13:26 +09:00
DerSkythe
1adf76d54d Revert application.fam 2022-10-08 02:25:22 +04:00
DerSkythe
7ec4cb4b7a Fix compile errors 2022-10-08 02:24:19 +04:00
MX
aedde45de8 Merge pull request #92 from an4tur0r/feature/arkanoid_speed
Feature: allow to set ball speed in Arkanoid
2022-10-08 00:20:14 +03:00
MX
184b467f62 add nfc feature back, bug seems to be fixed 2022-10-08 00:03:06 +03:00
DerSkythe
0c5146e047 Merge branch 'dev-master' into subbrute-rev3 2022-10-08 00:42:57 +04:00
an4tur0r
221ac1ed3b allow to set ball speed in Arkanoid 2022-10-07 23:09:17 +03:00
MX
464c725a48 fix debug logs 2022-10-07 23:05:00 +03:00
MX
3e538a8ade bump ver 2022-10-07 22:51:34 +03:00
MX
ae76f45339 sub brute fixes 2022-10-07 22:13:45 +03:00
MX
4cb585e4b9 fix subghz display bug 2022-10-07 21:34:01 +03:00
MX
16ea8dc568 Merge branch 'fz-dev' into dev 2022-10-07 21:11:40 +03:00
MX
4c9d62a33f adapt plugins to furi stream, fix printf formats 2022-10-07 21:05:16 +03:00
Sergey Gavrilov
d10e16ca3c Snake game: nokia 6110-like sound (#1844)
* Snake game: nokia 6110-like sound
* Snake game: blocking sound notifications
* SnakeGame: flush notification queue with backlight enforce block

Co-authored-by: あく <alleteam@gmail.com>
2022-10-08 02:27:32 +09:00
Sergey Gavrilov
37b5e58a60 More correct elf loader (#1839)
* ELF File: more robust section loader
* ELF File: faster and smaller preinit, init and fini arrays handling
* ELF File: load sections on preload stage
* ELF File: naming
* Furi: fix use after free in thread join

Co-authored-by: あく <alleteam@gmail.com>
2022-10-08 02:06:29 +09:00
MX
b4b3c182c5 fixes for new printf and furistream 2022-10-07 18:32:58 +03:00
MX
bdd052937b Merge branch 'fz-dev' into dev 2022-10-07 17:24:20 +03:00
Nikolay Minaylov
1a1f711897 Signal Generator app: UI update (#1829)
* Signal Generator: UI update
* icons renamed

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-07 22:58:36 +09:00
Sergey Gavrilov
4000f0cac5 [FL-2870] Printf function attributes (#1841)
* Furi strings: printf attribute
* Logs: printf attribute
* Plugins: adapt
* Plugins: accommodate
* Unit tests: accommodate

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 22:35:15 +09:00
Nikolay Minaylov
1f742b611a [FL-2651, FL-2863] App name in CLI loader command, RFID data edit fix #1835
Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 21:46:58 +09:00
Sergey Gavrilov
38a82a1907 [FL-2839] Furi stream buffer (#1834)
* Core: stream buffer
* stream buffer: API and usage
* stream buffer: documentation
* stream buffer: more documentation
* Furi: fix spelling

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-07 21:27:11 +09:00
Max Andreev
d1843c0094 Disable PVS-Studio license check (#1840) 2022-10-07 16:56:19 +10:00
Matvey Gerasimov
3367bc6f68 Documentation: AppManifests.md typo fix (#1836) 2022-10-07 10:23:21 +04:00
MX
515e6db69c Merge branch 'fz-dev' into dev 2022-10-07 00:35:01 +03:00
MX
81faca79ee remove duplicate allocs from subghz history 2022-10-07 00:31:29 +03:00
Astra
eaa3adf98a [FL-2868] Remove string_push_uint64 (#1832)
* Remove string_pust_uint64
* Oops, furi strings now
* Remove dead code
* Remove unneeded import

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 03:51:30 +09:00
Björn Kimminich
dde18cd343 Add exit label to keyboard connection screen (#1830)
* Add exit label to keyboard connection screen (resolves #1814)
* BtHid: align baselines on connection screen

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 02:40:18 +09:00
Georgii Surkov
72b3d7f414 [FL-2620] Infrared error message (#1827)
* Show an error message if the remote could not be saved/renamed

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 02:25:54 +09:00
Astra
19cb469e4b [FL-2877] Don't turn off the backlight on MFC dict attack #1826
Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 02:19:35 +09:00
gornekich
01f7a3e5b5 [FL-2874] Remove bank card uid emulation (#1823)
* nfc: open bank card info from archive
* nfc: remove emulate uid option from bank cards menu

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 02:12:45 +09:00
Astra
6dde5586af [FL-2803] Mifare Classic read improvements Part 1 (#1822)
* Reuse found keys when reading a card
* Fix keys not being read if no newline at the end of the file
* Actually read all keys from the dictionary
* Support for furi_string
* Check only for re-used key after the current sector
* Declare the key attack function as static
* nfc: change logs, check worker state

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 02:07:56 +09:00
gornekich
5de2c32c81 [FL-2864] NFC update detect reader (#1820)
* nfc: update detect reader view
* nfc: make detect reader more interractive
* nfc: update icons
* nfc: fix detect reader gui
* nfc: fix gui, fix worker events
* nfc: fix notifications
* nfc: add nfc_worker NULL assert

Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 01:58:17 +09:00
Evgenii Tereshkov
69b9c54b2f Update ac.ir: add Daichi model DA25AVQS1-W (#1819)
Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 01:18:23 +09:00
MX
dbf4b65d84 update changelog 2022-10-06 19:18:09 +03:00
MX
2ffb246e69 Merge branch 'fz-dev' into dev 2022-10-06 19:17:56 +03:00
Sergey Gavrilov
e3a5df5959 CLI: log command argument (#1817)
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-07 01:13:02 +09:00
MX
90eefeb2ed Merge pull request #88 from jd-raymaker/dev
Added norwegian keyboard layout
2022-10-06 18:56:33 +03:00
MX
fda541c7fb update changelog 2022-10-06 18:45:53 +03:00
MX
42494d801f fix merge issue 2022-10-06 18:42:59 +03:00
MX
1253a78dba Merge branch 'fz-dev' into dev 2022-10-06 18:41:48 +03:00
Max Andreev
d07c2dbe54 ".fap" extention in file browser and archive tab (#1812)
* Add .fap extention, and Applications tab
* Using new icon, renaming tab to Apps
* Change tabs order
* Add first ugly implementation of in-app icons in archive browser
* Starting using FAPLoader callback
* Getting all metafata from fap
* add app filename fallback
* using fap_loader_item_callback in archive_list_item_cb
* FAP-Loader: removed minimal allocation
* Removed strange code

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-10-07 00:37:53 +09:00
nminaylov
8f1812655e CLI loader shows app name, rfid edit fix 2022-10-06 18:26:15 +03:00
MX
3802171009 Revert "Merge branch 'fz-dev' into dev"
This reverts commit 03ad1770f8.
2022-10-06 18:23:50 +03:00
MX
03ad1770f8 Merge branch 'fz-dev' into dev 2022-10-06 18:23:44 +03:00
MX
b86756b581 don't include example app in releases 2022-10-06 17:58:18 +03:00
Skorpionm
11681d8ee8 [FL-2866, FL-2865] SubGhz: add frequency analyzer history (#1810)
* SubGhz: frequency analyzer history
* SubGhz: add vibro
* SubGhz: turn on the display when receiving a signal
* SubGhz: add signal reception indicator
* SubGhz: fix indicator
* SubGhz: fix FA history

Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 23:48:29 +09:00
Skorpionm
061f53cd3c [FL-2849] SubGhz: read RAW auto generation of names (#1772)
* SubGhz: read RAW auto auto generation of names depending on the date of the entry
* SubGhz: name generation modification RAW-YYYYMMDD-HHMMSS
* SubGhz: replace m-string with FuriString

Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 23:43:17 +09:00
MX
4bbeeb19e2 Merge branch 'fz-dev' into dev 2022-10-06 17:31:43 +03:00
Georgii Surkov
61189c3c82 [FL-2847] FFF trailing space fix (#1811)
* Improve whitespace handlilng in FFF
* Add tests for odd fff user input
* Adjust formatting

Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 23:18:20 +09:00
hedger
9bf11d9fd2 [FL-2859,2838] fbt: improvements for FAPs (#1813)
* fbt: assets builder for apps WIP
* fbt: automatically building private fap assets
* docs: details on how to use image assets
* fbt: renamed fap_assets -> fap_icons
* fbt: support for fap_extbuild field
* docs: info on fap_extbuild
* fbt: added --proxy-env parame ter
* fbt: made firmware_cdb & updater_cdb targets always available
* fbt: renamed fap_icons -> fap_icon_assets
* fbt: deprecated firmware_* target names for faps; new alias is "fap_APPID"
* fbt: changed intermediate file locations for external apps
* fbt: support for fap_private_libs; docs: updates
* restored mbedtls as global lib
* scripts: lint.py: skip "lib" subfolder
* fbt: Sanity checks for building advanced faps as part of fw
* docs: info on fap_private_libs; fbt: optimized *.fam indexing
* fbt: cleanup; samples: added sample_icons app
* fbt: moved example app to applications/examples
* linter fix
* docs: readme fixes
* added applications/examples/application.fam stub
* docs: more info on private libs

Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 22:55:57 +09:00
MX
c76fcf5072 Merge branch 'fz-dev' into dev 2022-10-06 15:50:59 +03:00
MX
007a11d70d upd ofw pr 1832 2022-10-06 15:26:23 +03:00
MX
b61e41163b fix subghz double click after delete, fix rename bug, fix unirf 2022-10-06 15:10:08 +03:00
Nikolay Minaylov
a69e150e2f [FL-2812] RFID: write fix for some protocols #1828
Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 20:36:21 +09:00
Matvey Gerasimov
f16cdd1477 fix: typo badusb demo windows (#1824)
Fix a typo in the badusb demo script for Windows.

Co-authored-by: あく <alleteam@gmail.com>
2022-10-06 20:18:40 +09:00
MX
ac286dfed8 fix subghz bruteforcer, change subghz raw naming 2022-10-06 14:10:56 +03:00
MX
a93008b218 fix rfid fuzzer 2022-10-06 03:09:20 +03:00
MX
31aaa593fc fixes, rfid fuzzer still crashes 2022-10-06 02:30:40 +03:00
MX
5a2719663f fix archive, update changelog 2022-10-06 00:55:26 +03:00
JayDee Raymaker
adccb87499 Added norwegian keyboard layout 2022-10-05 23:26:24 +02:00
MX
693f78e501 update icon naming
OFW PR 1829 by nminaylov
2022-10-05 23:15:14 +03:00
MX
6eb610762e bump api version 2022-10-05 21:40:06 +03:00
MX
3e4d8a41e0 Remove string_push_uint64
OFW PR 1832 by Astrrra
2022-10-05 21:39:40 +03:00
MX
c60bfbf271 oh no 2022-10-05 21:27:13 +03:00
MX
0796263e81 Merge branch 'fz-dev' into dev 2022-10-05 19:27:46 +03:00
Sergey Gavrilov
4bf29827f8 M*LIB: non-inlined strings, FuriString primitive (#1795)
* Quicksave 1
* Header stage complete
* Source stage complete
* Lint & merge fixes
* Includes
* Documentation step 1
* FBT: output free size considering BT STACK
* Documentation step 2
* py lint
* Fix music player plugin
* unit test stage 1: string allocator, mem, getters, setters, appends, compare, search.
* unit test: string equality
* unit test: string replace
* unit test: string start_with, end_with
* unit test: string trim
* unit test: utf-8
* Rename
* Revert fw_size changes
* Simplify CLI backspace handling
* Simplify CLI character insert
* Merge fixes
* Furi: correct filenaming and spelling
* Bt: remove furi string include

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-10-06 00:15:23 +09:00
MX
baf5034817 Merge pull request #87 from derskythe/feat-add-subbrute-frequency
Add CAME 12bit 303MHz to SubBrute
2022-10-05 17:26:02 +03:00
derskythe
04e16970db Add CAME 12bit 303MHz to SubBrute 2022-10-05 17:45:45 +04:00
MX
a8b48771e4 rfid fuzzer, ability to change time delay 2022-10-04 23:43:15 +03:00
MX
1424878d65 update assets and changelog 2022-10-04 21:40:07 +03:00
MX
a37b0d464c Signal Generator app: UI update
OFW PR 1829 by nminaylov
2022-10-04 21:07:10 +03:00
MX
96502e21ae RFID: write fix for some protocols
OFW PR 1828 by nminaylov
2022-10-04 21:06:16 +03:00
MX
b5d6d60535 New notification sequence for Frequency Analyser
PR #86 by @BastienB3
2022-10-04 21:05:09 +03:00
MX
32e64fd29e update changelog 2022-10-04 18:40:57 +03:00
MX
8f9d81b972 Merge pull request #84 from colingrady/wrap_rfid_fuzzer_menu
Allow the RFID protocol menu to wrap
2022-10-04 18:25:29 +03:00
MX
23e0566273 Merge pull request #85 from mvanzanten/adding-on-the-fly-changes-ui-addition
Improve UI for added on-the-fly feature
2022-10-04 18:25:07 +03:00
MX
4141483147 NFC update detect reader
OFW PR 1820 by gornekich
2022-10-04 18:23:11 +03:00
Matt Van Zanten
30e005d5c4 improve UI for added on the fly feature 2022-10-04 08:07:53 -07:00
MX
e3a2711eb3 Remove bank card uid emulation & fix emv info
OFW PR 1823 by gornekich
2022-10-04 18:05:57 +03:00
MX
8569641ce6 Infrared error message
OFW PR 1827 by gsurkov
2022-10-04 18:02:21 +03:00
MX
cafd06c71b Don't turn off the backlight on MFC dict attack
OFW PR 1826 by Astrrra
2022-10-04 17:59:22 +03:00
MX
06a7bda69b block hopping and detect raw at same time
and fix freq analyzer feedback display backlight
2022-10-04 17:58:12 +03:00
Colin Grady
c43ce93936 Allow the RFID protocol menu to wrap 2022-10-04 08:53:58 -06:00
MX
2288855163 update assets and changelog 2022-10-04 03:29:02 +03:00
MX
c0765c1114 rfid fuzzer H10301 support and bug fixes 2022-10-04 03:15:28 +03:00
MX
683c6254da Merge remote-tracking branch 'origin/dev' into dev 2022-10-04 02:36:19 +03:00
MX
2ef515ef56 Merge pull request #83 from mvanzanten/adding-on-the-fly-changes-2
Adding on the fly bit changes
2022-10-04 02:35:57 +03:00
MX
667be798fc rfid fuzzer, fix bugs, improve gui, add PAC/Stanley support
add more example files
2022-10-04 02:33:39 +03:00
MX
0f9598099a fix rfid fuzzer crash, fix bug when dict attack can't be restarted 2022-10-04 01:15:15 +03:00
MX
0d6f729386 CLI: log command argument (log level)
OFW PR 1817 by DrZlo13
2022-10-04 00:48:25 +03:00
MX
b452b6fd32 FFF trailing space fix
OFW PR 1811 by gsurkov
2022-10-04 00:45:09 +03:00
Matt Van Zanten
9403128a03 moving to center nicer 2022-10-03 11:32:10 -07:00
Matt Van Zanten
71589b28a7 removing debug logs 2022-10-03 11:09:51 -07:00
Matt Van Zanten
8b0fa6d0b1 running fbt format 2022-10-03 11:07:16 -07:00
Matt Van Zanten
cf47da0ff4 Merge branch 'dev' into adding-on-the-fly-changes-2 2022-10-03 10:47:17 -07:00
Matt Van Zanten
d6b7fae7e4 working version of the on the fly bit switcher 2022-10-03 10:29:04 -07:00
MX
110dc48b96 Merge remote-tracking branch 'origin/dev' into dev 2022-10-03 18:42:52 +03:00
MX
37c666ddf5 Merge pull request #82 from TQMatvey/pr_temp
SubGhz: Enable backlight on new signal
2022-10-03 18:42:18 +03:00
MX
6ddca568b9 correct notification sequence 2022-10-03 18:41:37 +03:00
MX
8993db56b8 this was not part of previous change 2022-10-03 18:40:22 +03:00
MX
3c1efda1db return carrier test included with non debug builds 2022-10-03 18:36:06 +03:00
MX
b62b7956a6 Merge pull request #80 from derskythe/fix-read-in-readraw-crash
Fix-read-in-readraw-crash
2022-10-03 18:27:54 +03:00
MX
dce5af5c2e hmm 2022-10-03 18:22:09 +03:00
MX
fbacdc5b7b fix critical bug with subghz rpc 2022-10-03 18:21:18 +03:00
MX
8dba4f25ae unused 2022-10-03 18:20:49 +03:00
derskythe
43ef4046ed Add stubs for split 2022-10-03 19:00:35 +04:00
mvanzanten
1e63f57bf7 working version, change bits on the fly 2022-10-02 12:06:06 -07:00
Matt Van Zanten
649887fe0f progress, adding on the fly 2022-10-02 08:18:01 -07:00
derskythe
be42c390f2 Save on SD Card only RAW files 2022-10-02 16:57:32 +04:00
derskythe
cbda5d996f Fix uncommited merge 2022-10-02 16:50:03 +04:00
derskythe
de1ec97512 Merge remote-tracking branch 'refs/remotes/origin/fix-read-in-readraw-crash' into fix-read-in-readraw-crash 2022-10-02 16:20:18 +04:00
MX
8af749c965 enable saving detect raw state via define 2022-10-02 13:50:29 +03:00
MX
4d3f45e911 Don’t show temp history dir in filebrowser 2022-10-02 10:18:31 +03:00
MX
63fee41a1f enable worker back 2022-10-02 09:51:27 +03:00
TQMatvey
f441fed68d SubGhz: Follow system backlight timer 2022-10-02 13:48:06 +07:00
TQMatvey
6e0eeed773 SubGhz: turn on display for new signal 2022-10-02 13:29:16 +07:00
MX
6bf306200e make loading subghz file from favourites a bit faster 2022-10-02 08:50:41 +03:00
MX
e2faf31b45 debug in subghz only when compiled with DEBUG=1 2022-10-02 07:34:39 +03:00
MX
85eb740559 do not save detect raw on/off settings 2022-10-02 06:38:34 +03:00
MX
cea14ae9c5 fix dir creation bug, save files only for RAW
TODO: files are broken when they have more than 512 elements in one line
Split file to 512 element chunks as it done in regular Read RAW
2022-10-02 06:23:09 +03:00
MX
e9a11cfce0 Merge branch 'dev' into fix-read-in-readraw-crash 2022-10-02 04:06:01 +03:00
MX
87a14b96e1 Merge branch 'fz-dev' into dev 2022-10-02 04:05:07 +03:00
derskythe
bbd3f9cf71 Fixed all bugs with saving directly to file, also fixed misspeled if/ifdef in all app 2022-10-02 03:18:30 +04:00
derskythe
230f09dddd enable delete temp files 2022-10-01 08:47:44 +04:00
derskythe
24e744f1d1 Added saving DetectRAW settings, trying to write files on SD instead of memory 2022-10-01 08:39:51 +04:00
derskythe
127b700642 Init work on rev3, but this is not working code 2022-09-30 18:36:56 +04:00
あく
0f9ea925d3 UnitTests: fix thread join test (#1808) 2022-09-30 22:03:57 +09:00
Nikolay Minaylov
836de3df16 [FL-2825] iButton GUI fixes (#1805)
* Ibutton GUI fixes
* Fix memory leak in lfRFID write

Co-authored-by: あく <alleteam@gmail.com>
2022-09-30 21:56:12 +09:00
Sergey Gavrilov
c92217a109 Thread: Clear TLS after thread stop (#1807) 2022-09-30 19:59:11 +09:00
MX
41c93431c8 update changelog, readme, assets 2022-09-30 03:46:06 +03:00
MX
f0ea8f3a84 fix clock am/pm logic 2022-09-29 23:50:49 +03:00
MX
4d8f294e7a Merge pull request #79 from derskythe/subghz-freq-analyzer-long-press
Long press OK button in SubGHz Frequency analyzer switch to Read menu
2022-09-29 23:26:02 +03:00
derskythe
f543753873 Long press OK button in SubGHz Frequency analyzer switch to Read menu with selected frequency 2022-09-29 23:46:54 +04:00
MX
1fb1a68842 iButton GUI fixes
OFW PR 1805 by nminaylov
2022-09-29 20:56:04 +03:00
MX
54fedb9bc8 Merge pull request #78 from alexberkowitz/dev
Increase Sub-GHz remote label line length to 16
2022-09-29 18:34:22 +03:00
MX
8af9c00ddb Merge branch 'fz-dev' into dev 2022-09-29 18:20:05 +03:00
Sergey Gavrilov
5a22803bbc Revert "Revert "Furi Thread: don't use thread pointer after FuriThreadStateStopped callback (#1799)""
This reverts commit 7df70d7c62.
2022-09-29 18:15:02 +03:00
Alex Berkowitz
824f5ea027 Merge branch 'Eng1n33r:dev' into dev 2022-09-29 10:04:21 -05:00
hedger
76d38e832e fbt: reproducible manifest builds & improvements (#1801)
* fbt: reproducible manifest builds, less rebuild on small updates; scripts: assets: using timestamp from commandline af available
* fbt: added app import validation for launch_app & single app build targets
* fbt: COMSTR for app imports validation
* docs: minor fixes
* docs: markdown fix
* vscode: comments for RTOS startup

Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 20:00:22 +09:00
Sergey Gavrilov
aba20b6af8 Furi Thread: fixed furi_thread_join, check if thread has not been started (#1803)
* furi thread: fixed furi_thread_join, check if thread has not been started
* Furi: correct returns in furi_thread_join

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-09-29 19:42:15 +09:00
MX
226f8517f3 update readme and changelog 2022-09-29 11:01:15 +03:00
Sergey Gavrilov
7df70d7c62 Revert "Furi Thread: don't use thread pointer after FuriThreadStateStopped callback (#1799)"
This reverts commit 5883e134d4.
2022-09-29 09:27:03 +03:00
MX
9176387b9f update assets and changelog 2022-09-29 09:14:47 +03:00
MX
972c0dcb4a hide layouts folder in badusb app 2022-09-29 08:20:30 +03:00
MX
62e56e2618 rename apps to make it look a bit better in Apps tab in archive app
now old assets are removed so we can avoid duplicates
2022-09-29 08:20:00 +03:00
MX
f202d27206 Merge branch 'fz-dev' into dev 2022-09-29 05:57:02 +03:00
Mewa
bcfb12bf28 Keyboard: show Uppercase keys when replacing content (#1548)
Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 02:44:24 +09:00
Sergey Gavrilov
5883e134d4 Furi Thread: don't use thread pointer after FuriThreadStateStopped callback (#1799)
* Furi Thread: correct furi_thread_join, do not use thread pointer after FuriThreadStateStopped callback
* Furi: a little bit easier way to do harakiri
* Furi: crash on thread self join attempt

Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 02:37:07 +09:00
hedger
f8b532f063 [FL-2831] Resources cleanup in updater (#1796)
* updater: remove files from existing resources Manifest file before deploying new resources
* toolbox: tar: single file extraction API

Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 02:13:12 +09:00
Vyacheslav Tumanov
e25b424188 Typos fix in some strings/comments #1794
Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 01:52:46 +09:00
Nikolay Minaylov
4241ad24a3 [FL-2797] Signal Generator app (#1793)
* Signal Generator app
* MCO pin initialization in app
* furi_hal_pwm documentation

Co-authored-by: あく <alleteam@gmail.com>
2022-09-29 01:37:24 +09:00
MX
6bcc6f363b add 868.8 mhz for sommer systems 2022-09-28 16:35:40 +03:00
MX
3dcd8a73f1 update changelog 2022-09-28 08:06:47 +03:00
MX
9ad7f7825d update projector asset
by @Amec0e
2022-09-28 07:50:43 +03:00
MX
aa00606d22 remove unnecessary checks from brute plugin, subghz improvements
fix subghz gui in add manually, add BETT protocol in add manually
2022-09-28 07:50:09 +03:00
MX
9c62e1f6ac Merge pull request #77 from derskythe/subghz-save-settings-v2
SubGHz save settings version 2
2022-09-28 07:00:15 +03:00
MX
b934c41ed0 close file 2022-09-28 06:51:13 +03:00
MX
0ebb3f060e add a bit of changes 2022-09-28 06:46:45 +03:00
derskythe
8f2bd3be57 Update list of frequencies and change name of file of settings to not able to run in browser 2022-09-28 07:14:38 +04:00
derskythe
cc02d57857 Merge remote-tracking branch 'origin/subghz-save-settings-v2' into subghz-save-settings-v2
# Conflicts:
#	applications/main/subghz/subghz_last_settings.c
2022-09-28 07:09:58 +04:00
MX
0c5f11f713 return fix 2022-09-28 06:02:23 +03:00
derskythe
006d27ed93 Add removed fixed 2022-09-28 06:53:52 +04:00
MX
746b732034 remove unused code 2022-09-28 05:49:21 +03:00
Der Skythe
2ec9aeeefa Merge branch 'Eng1n33r:dev' into subghz-save-settings-v2 2022-09-28 06:32:54 +04:00
derskythe
8be08093e2 Change name of file to not able to "Run in App" in Browser 2022-09-28 06:28:23 +04:00
derskythe
406247c5d8 Ok button in frequency analyzer will set this frequency to receiver 2022-09-28 06:22:02 +04:00
derskythe
22a87d5707 struct doesn't correct written 2022-09-28 05:49:06 +04:00
MX
4271246d8a Merge branch 'fz-dev' into dev 2022-09-28 04:04:12 +03:00
derskythe
a3db6718c2 fix bug with invalid settings values in config 2022-09-28 04:31:29 +04:00
derskythe
0f0473bee6 fix bug with invalid settings values in config 2022-09-28 03:27:47 +04:00
derskythe
497be7ccb0 Last SubGHz settings is ready 2022-09-28 02:01:09 +04:00
Georgii Surkov
12a6290e91 [FL-2853] Reorganise Universal A/C library (#1792)
* Reorganise A/C universal remote library file
* Refactor infrared brute force code
* Update UniversalRemotes.md

Co-authored-by: あく <alleteam@gmail.com>
2022-09-28 02:11:28 +09:00
Tom Samstag
e6e1e7fe15 Add formatting to DESfire data dump (#1784)
Co-authored-by: gornekich <n.gorbadey@gmail.com>
2022-09-28 02:02:18 +09:00
MX
cb14d23108 format, add chamberlain 9bit 300mhz 2022-09-27 04:31:52 +03:00
MX
c4783664c0 subghz bruteforcer plugin: move title a bit 2022-09-27 00:51:36 +03:00
MX
91f3774246 update changelog 2022-09-26 23:55:39 +03:00
MX
1f8a034a71 Merge pull request #76 from derskythe/subbrute-deep-refactor
Fix speed problems with linear and some bugs
2022-09-26 23:09:13 +03:00
MX
8cc3e2f35a remove extra environment alloc 2022-09-26 23:07:53 +03:00
MX
069dd29f08 Revert "some fixes, trying to speed up bruteforce(unsuccessful)"
This reverts commit 61fee8e269.
2022-09-26 22:52:22 +03:00
derskythe
91c06a2168 fix disable env allocation many times 2022-09-26 21:41:49 +04:00
derskythe
545c4349d6 add vibro on finish and main menu set left 2022-09-26 21:26:51 +04:00
derskythe
a40e1a2be2 set big step to 50 2022-09-26 21:15:46 +04:00
derskythe
286300b35b fix disable env allocation many times 2022-09-26 21:15:02 +04:00
derskythe
633145495c fix twice button press in manual mode 2022-09-26 21:10:41 +04:00
derskythe
a0bcbf731d fix error on back when selecting existing dump 2022-09-26 21:01:14 +04:00
MX
60242cd7c4 fix nfc device typo, doesn’t affect resulting keys 2022-09-26 19:46:12 +03:00
Alex Berkowitz
3e9409a1a8 Merge branch 'dev' of https://github.com/alexberkowitz/flipperzero-firmware into dev 2022-09-26 11:43:31 -05:00
MX
a9210b2849 Merge branch 'fz-dev' into dev 2022-09-26 19:37:37 +03:00
derskythe
a58807c57a Add SubGhzTxRxWorker for later use 2022-09-26 20:14:33 +04:00
Sergey Gavrilov
5bb7cabea6 Applications loader: do not use view dispatcher queue #1788 2022-09-27 00:59:28 +09:00
phreakocious
f201062819 Add Hisense A/C IR signals.. (#1773)
* add Hisense A/C IR signals.. note that using any will toggle the power and apply the settings
* re-order the entries to be grouped by function

Co-authored-by: あく <alleteam@gmail.com>
2022-09-27 00:42:29 +09:00
Shane Synan
9f501034c3 Power: Also ask charger if charge done (#1378)
* power: Also ask charger if charge done
* F7: bump API Symbols version
* Lib: remove double include in bq25896.c

Co-authored-by: あく <alleteam@gmail.com>
2022-09-27 00:34:59 +09:00
derskythe
7bd0c8ff2c application.fam revert 2022-09-26 18:30:04 +04:00
derskythe
cdcf80ed05 speed-up linear to 07:10 2022-09-26 18:27:58 +04:00
Georgii Surkov
3e3a167764 [FL-2852] Update Universal Remote documentation (#1786)
* Update Universal Remote documentation
* Change formatting
2022-09-26 22:49:18 +09:00
MX
fa9602bd68 Merge branch 'fz-dev' into dev 2022-09-26 15:27:24 +03:00
hedger
efb09380bd [FL-2836] Fast flash programming mode (#1782)
* updater: lowered logging level for resources unpacking; hal: implemented fast flash write mode
* hal: reworked fast flash programming; clearing most error flags on flash init; changed some flash functions return type from bool to void; scripts: fixed malformed CRC values in update bundles in certain cases;
* hal: flash: larger critical section
* hal: flash: enabling fast write inside critical section
* api_symbols: bump minor version
2022-09-26 20:03:21 +09:00
MX
61fee8e269 some fixes, trying to speed up bruteforce(unsuccessful) 2022-09-26 06:24:47 +03:00
MX
5e30b14d90 update changelog 2022-09-26 02:12:11 +03:00
MX
c07e3a34dd Merge pull request #75 from derskythe/subbrute-deep-refactor
SubBrute deep refactor
2022-09-26 02:08:45 +03:00
MX
be7e11e60f Merge branch 'dev' into subbrute-deep-refactor 2022-09-26 02:06:50 +03:00
MX
e96e414561 Merge branch 'fz-dev' into dev 2022-09-26 02:06:09 +03:00
derskythe
0c99cb52ec free transmitter during subbrute_worker_init_manual_transmit 2022-09-26 02:45:09 +04:00
derskythe
ad9e1ce4df set furi_hal_subghz_set_path to FuriHalSubGhzPathIsolate on each manual iteration 2022-09-26 02:42:39 +04:00
derskythe
22dc5190d1 remove furi_hal_power_suppress_charge_enter/exit from other places 2022-09-26 02:39:17 +04:00
derskythe
f2fd97d9c5 fix memory leaks 2022-09-26 02:36:38 +04:00
derskythe
08084d5763 fix first send signal equals last transferred or 0x00 2022-09-26 02:03:36 +04:00
derskythe
add1ad6949 fix manual select key on max and min values 2022-09-26 01:48:51 +04:00
DerSkythe
87654e60b8 Merge remote-tracking branch 'origin/subbrute-deep-refactor' into subbrute-deep-refactor 2022-09-26 01:10:21 +04:00
DerSkythe
6f92cd645e fixed frame width to scroll 2022-09-26 01:09:00 +04:00
DerSkythe
23f6ea2e05 refactor worker moved it to SubBruteState 2022-09-26 01:07:16 +04:00
David Coles
a6b98ccbbe Preliminary Rust support (#1781)
* Add support for R_ARM_THM_MOVW_ABS_NC/THM_MOVT_ABS

These are sometimes emitted by the Rust LLVM compiler.

Ref: https://github.com/ARM-software/abi-aa/blob/main/aaelf32/aaelf32.rst#56relocation

* Discard LLVM bitcode from extension applications

LLVM-based compilers may include uncompressed bitcode in object files
to help with link-time optimization. However this can bloat binary sizes
from KB to MB.

* Expose alligned_malloc/free functions to applications

This is required to implement a global allocator in Rust.
2022-09-26 07:06:46 +10:00
DerSkythe
ba5f590dab switched to manual transmit 2022-09-26 00:07:14 +04:00
Der Skythe
f1048733d2 Merge branch 'Eng1n33r:dev' into subbrute-deep-refactor 2022-09-25 23:16:27 +04:00
DerSkythe
ea7f68fcab fixed load existing dump 2022-09-25 23:12:31 +04:00
MX
8013aacd94 oops 2022-09-25 21:03:32 +03:00
MX
be8f409098 update changelog 2022-09-25 21:01:12 +03:00
MX
97e6fe8f4e update universal remote assets
by @amec0e
2022-09-25 20:39:22 +03:00
DerSkythe
54757428e6 fix bug with return to main menu when choice file 2022-09-25 21:31:33 +04:00
MX
bd39d81324 Merge branch 'fz-dev' into dev 2022-09-25 19:55:35 +03:00
Chris van Marle
2a2078d9b5 Text input overwrite max size template (#1687) 2022-09-26 01:17:09 +09:00
MX
01ca588488 Merge branch 'fz-dev' into dev 2022-09-25 18:27:58 +03:00
Kowalski Dragon
f86eada292 Remove unused headers (#1751) 2022-09-25 23:39:06 +09:00
Skorpionm
bc777b2eff SubGhz: fix config menu (#1748)
* SubGhz: fix config menu
* SubGhz: fix gui Magellen protocol
* SubGhz: fix gui Transmit SubGhz
* SubGhz: keeloq, new gen manufacture code
* SubGhz: Update keeloq_mfcodes

Co-authored-by: あく <alleteam@gmail.com>
2022-09-25 23:34:52 +09:00
DerSkythe
6f91fa42f0 Added additional graphic decorations 2022-09-25 18:26:10 +04:00
Sergey Gavrilov
e6d22ed147 ELF-Loader: C++ plugin support, loader overhaul. (#1744)
* fap-loader: load all code and data sections
* fap-loader: relocate all code and data sections
* fap-loader: remove old elf loader
* fap-loader: new jmp call relocation
* openocd: resume on detach
* fap-loader: trampoline for big jumps
* fap-loader: rename cache
* fap-loader: init_array support
* fap-loader: untangled flipper_application into separate entities
* fap-loader: fix debug
* fap-loader: optimize section container
* fap-loader: optimize key for section container
* fap-loader: disable debug log
* documentation
* F7: bump api symbols version
* Lib: cleanup elf_file.c

Co-authored-by: あく <alleteam@gmail.com>
2022-09-25 23:11:29 +09:00
MX
436f70b69b Merge branch 'fz-dev' into dev 2022-09-25 16:46:23 +03:00
DerSkythe
ec9ce0cad7 Working prototype, but not yet tested on a real device 2022-09-25 17:05:52 +04:00
Jauder Ho
7e2008095e Bump protobuf from 3.20.1 to 3.20.2 in /scripts (#1774) 2022-09-25 20:56:53 +09:00
Sergey Gavrilov
92e440c77d Core: simplify record container (#1776)
Co-authored-by: あく <alleteam@gmail.com>
2022-09-25 20:48:57 +09:00
DerSkythe
666821e9ce SubBruteMainView is ready 2022-09-25 00:46:43 +04:00
MX
1bca477a43 update install instructions
thanks to @Svaarich !
2022-09-24 22:20:13 +03:00
MX
41571ce9ad SubGHz RAW - datetime in default names (+ format changed)
OFW PR 1772 by Skorpionm / printf text format changed by me
2022-09-24 22:15:06 +03:00
MX
038d098c85 Merge branch 'fz-dev' into dev 2022-09-24 21:56:17 +03:00
DerSkythe
b03cc8ddc3 trying to fix load failure 2022-09-24 22:30:08 +04:00
DerSkythe
c8e3d9b040 fix repeat call of view_dispatcher_alloc 2022-09-24 22:15:09 +04:00
DerSkythe
aeb02500de Deep refactor of SubBrute was made, but it doesn't start. Debug device needed 2022-09-24 21:47:21 +04:00
ghettorce
eadd7801af fbt: exclude user site-packages directory from sys.path (#1778)
* fbt: exclude user site-packages directory from sys.path
* fbt: python path fixes for *nix
* fbt: fixed cli target on Windows

Co-authored-by: hedger <hedger@users.noreply.github.com>
2022-09-24 15:30:19 +04:00
Yoanndp
6d2b0a3b6c Update ReadMe.md (#1766) 2022-09-24 19:36:11 +09:00
Alex Berkowitz
8093721c24 Change Sub-Ghz Remote line length max to 16 2022-09-23 20:37:02 -05:00
MX
32a7642761 remove duplicate function, update changelog 2022-09-22 21:51:47 +03:00
MX
e8bb45496d Merge branch 'fz-dev' into dev 2022-09-22 21:45:26 +03:00
Andrea Sacchi
3846852f2b NFC Fix Mifare Classic (#1769)
* Fix Mifare Classic key str to int conversion: Wrong cast lead to unexpected behavior converting key from str to int.
* Nfc: fix type cast in mf_classic_dict and add basic unit tests

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-09-23 02:35:28 +09:00
Georgii Surkov
17d01f5c29 [FL-2848] Universal Remote fix (#1770)
* Reset BruteForce on exit from Universal Remote
* Reset current button in ButtonPanel
2022-09-23 01:13:00 +09:00
MX
e6bcba6959 update changelog, minor fixes 2022-09-22 18:23:32 +03:00
MX
e13edc2f70 keeeloq update 2022-09-22 18:01:54 +03:00
MX
de6ff1d9c9 update changelog 2022-09-21 23:07:39 +03:00
MX
bea15134ba fix mousejacker gui 2022-09-21 22:29:42 +03:00
MX
28a55bf576 Merge branch 'fz-dev' into dev 2022-09-21 22:02:02 +03:00
gornekich
e70121e20f [FL-2843] NFC fixes (#1764)
* nfc: fix empty desfire card message
* nfc: limit total user keys to list
* nfc: increase popup timeout

Co-authored-by: あく <alleteam@gmail.com>
2022-09-22 00:53:25 +09:00
hedger
432ff41d6a [FL-2844] desktop: removing slideshow file when leaving slideshow view (#1762)
* [FL-2844] desktop: removing slideshow file when leaving slideshow view; vscode: fix for BM port fetcher; fap api: more symbols for LL
* desktop: actually removing slideshow file
* desktop: moved slideshow removal to scene code; fbt: better blackmagic device handling
* fbt: disabled pagination for gdb
* vscode: restored blackmagic command line
* fbt: fixed debug_other target; added debug_other_blackmagic
* furi: added furi_thread_suspend API group; fixed null-pointer deref for thread name; cleaned up RTOS config
* furi: changed thread state check to eTaskGetState
2022-09-21 23:42:59 +09:00
MX
87393a086c fix rfid fuzzer crashes, some new random names 2022-09-21 08:43:07 +03:00
MX
6000d47a0f allow saving only for protocols without encoder 2022-09-21 07:12:09 +03:00
MX
d986ef4104 fix nice flor s crash, fix debug pack for debug builds 2022-09-21 06:52:34 +03:00
MX
f85dc1675d update changelog, rm unused var from clock 2022-09-21 01:00:56 +03:00
MX
7c7ac07e6a Merge pull request #74 from mvanzanten/adding-support-for-hidprox
adding support for HIDProx, updating the UI to switch between protocols
2022-09-20 23:25:45 +03:00
MX
ca02826cfd set time between cards to 6, run fbt format 2022-09-20 23:24:34 +03:00
MX
96ad7f3cef fix nfc list crash, fix magellen gui, fix transmitter gui 2022-09-20 23:13:15 +03:00
Matt Van Zanten
c213ff596a adding support for HIDProx, updating the UI to switch between protocols 2022-09-20 11:45:16 -07:00
MX
b2589698ff Merge branch 'fz-dev' into dev 2022-09-20 21:39:22 +03:00
Max Lapan
3360f818a1 Subghz: Adding checks for get_upload functions (#1704)
* Adding checks for get_upload functions
  Almost in every protocol, function which generates upload might fail and return false.
  But we don't check this result, which might end up sending random memory contents to the air.
* Format sources and fix crash on ivalid bit count in chamberlain

Co-authored-by: あく <alleteam@gmail.com>
2022-09-20 14:29:10 +09:00
Georgii Surkov
066da4080b [FL-2792] AC Universal Remote (#1725)
* Add Universal AC Remote scene
* Implement AC gui
* Basic working implemetation
* Another Universal AC Remote implementation
* Update icons
* Adjust button positions
* Revert old ButtonPanel class
* Update resource manifest
* [FL-2627] Flipper applications: SDK, build and debug system (#1387)
* Update api definitions
* Add UniversalRemotes documentation
* Use more Flipper-friendly signal names

Co-authored-by: SG <who.just.the.doctor@gmail.com>
2022-09-20 14:09:37 +09:00
MX
b2c118f267 fix null pointer dereference in archive -> Info
and fix long path display
2022-09-20 05:52:13 +03:00
MX
a8db46124e update docs & changelog 2022-09-20 04:09:14 +03:00
MX
672e27f258 fix icon name 2022-09-20 03:23:22 +03:00
MX
e762a68265 Merge pull request #72 from RogueMaster/ApplicationsFromArchive
Applications from archive
2022-09-20 03:20:25 +03:00
MX
8659becc9d fix tab name and add new icon
icon by @Svaarich
2022-09-20 03:19:31 +03:00
RogueMaster
82e1e8af6a Enable fap support on Archive app 2022-09-19 18:47:22 -04:00
RogueMaster
a71d05a114 Update archive_browser.h 2022-09-19 18:39:38 -04:00
MX
8d68bf62a5 update changelog 2022-09-19 23:34:31 +03:00
MX
2c85adb270 remove unused icon, update api symbols and unirf 2022-09-19 21:21:31 +03:00
MX
e2123c55bb Merge branch 'fz-dev' into dev 2022-09-19 21:15:04 +03:00
David
f5ff6438d1 NFC user dict list, delete, and de-duplication. (#1533)
* Add MFC user keys list
* Leakey submenu fix
* Set next target for Save/Delete success scenes
* Delete individual user keys
* Update count of total keys
* Fix memory leak
* Check for duplicate keys
* Remove a submodule that I never added?
* Swap and position icons
* Revamp according to design doc
* Rename icons to include size and replace keychain icon with smaller variant
* Fix typos
* Final fixes
* Fufill requested changes
* Cleanup comments
* Merge dev after SD app loading
* Fixing icon names
* Revert merge mistakes and API version
* Scene switching adjustments
* F7: add/change/remove some nfc icons in api_symbols.csv

Co-authored-by: あく <alleteam@gmail.com>
2022-09-20 01:43:53 +09:00
Astra
9f3b80e606 Add new card parsers (#1503)
* Add the "Two cities" parser
* Add plantain and plantain4k parsers
* Add new parsers to the supported list
* United card PoC
* Fix nfc device not sleeping
* Completely read the 4K troika variants
* Correct naming
* Update to reflect upstream changes
* Add support for MfUl info
* Fix parsers
* Card type detection fixes
* Remove debug info
* Fixes for the verification of cards
* nfc: fix verification for supported cards
* nfc: remove unused vars
* Improve card reading reliability and fix plantain
* plantain: change log level

Co-authored-by: gornekich <n.gorbadey@gmail.com>
2022-09-20 01:05:04 +09:00
MX
111656d2c1 Merge branch 'fz-dev' into dev 2022-09-19 18:50:20 +03:00
MX
2045a29d3f lower frame rate in custom anim to save a bit of battery charge 2022-09-19 18:40:50 +03:00
MX
26e46f9267 Merge pull request #71 from TasyDevilsky/patch-1
Update setting_user
2022-09-19 17:47:12 +03:00
Max Lapan
d003db0404 SubGhz: Oregon v2.1 decoder (#1678)
* Oregon v2.1 decoder
* Refactor FSM to switch
* Refactor headers
* Format strings
* Unit tests of oregon2
* Cleanups
* Add oregon2 raw data to random_test_raw.sub
* Adjust count of packets detected on random test
* Format sources

Co-authored-by: あく <alleteam@gmail.com>
2022-09-19 23:24:24 +09:00
MX
5a31e35dc2 Merge branch 'fz-dev' into dev 2022-09-19 17:21:31 +03:00
Patrick Cunningham
c7cd5721ed Picopass: detect and show SE / SIO (#1701)
* detect and show SE / SIO
* fix fault
* remove bad read check

Co-authored-by: あく <alleteam@gmail.com>
2022-09-19 22:37:12 +09:00
Nikolay Minaylov
fb476c29e6 RFID: fix read info screen (#1723)
* RFID: fix read info screen
* Fix line break for long data string
* Protocol data redecoding before write

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-09-19 22:21:40 +09:00
Nikolay Minaylov
d80329b323 [FL-2815, FL-2821] Dummy mode (#1739)
* Dummy mode implementation
* dumb -> dummy
* F7: Add new api_symbols: game icon
* Starting snake game from dummy mode

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-09-19 22:03:42 +09:00
Astra
3d3c422751 [FL-2674] Show error popup when NFC chip is not init/disconnected (#1722)
* Show error popup when NFC chip is not init/disconnected
* Move to dialogs for the error message
* Fix a memory leak and wrap the hal check
* F7: update api_symbols.csv, add furi_hal_nfc_is_init

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-09-19 21:46:56 +09:00
hedger
ed385594a3 faploader: more subsystem headers in API table (#1742)
* faploader: more subsystem headers in API table; not counting header entries for SDK version change
* subghz: removed dead function
* Adjusted API version
* hal: removed furi_hal_power_get_system_voltage
* lib: mbedtls: additional flags for .fap linkage
* fbt: rebuilding assets when git commit id changes
* fbt: removed assets rebuild on git commit id change; added explicit dependency for SDK source on compiled assets parts; removed unneeded sdk regeneration runs
* fbt: changed stock plugins to EXTERNAL apps; restored building app as a PLUGIN as a part of main fw as well as a .fap; readme fixes
* fbt: restored certain apps to PLUGIN type
* fbt: app manifests: renamed version->fap_version, added extra fields
* fbt: fixed version processing after rename

Co-authored-by: あく <alleteam@gmail.com>
2022-09-19 21:39:00 +09:00
Astra
787df44c79 [FL-2800] Fix Mifare Classic 4K reading of the last 8 sectors (#1712)
* Fix FURI_BIT_SET

Co-authored-by: gornekich <n.gorbadey@gmail.com>
Co-authored-by: SG <who.just.the.doctor@gmail.com>
2022-09-19 21:30:18 +09:00
TasmanDevil
f0eedc3243 Update setting_user
Adding the 868.95 frequency for the Sommer device, the `Sommer(fsk476)` protocol was recently added but Flipper could not read it until now.
2022-09-19 08:59:13 +02:00
MX
365d055dc5 update changelog again 2022-09-19 05:55:54 +03:00
MX
650ba8a91f Update HowToInstall.md 2022-09-19 05:53:23 +03:00
MX
654d6dc6ec update changelog 2022-09-19 05:51:10 +03:00
MX
18b70ac6b5 update universal ir assets
by @amec0e
2022-09-19 05:45:58 +03:00
hedger
51369d6219 fbt: removed assets rebuild on git commit id change; added explicit dependency for SDK source on compiled assets parts; removed unneeded sdk regeneration runs 2022-09-19 05:27:21 +03:00
MX
181533df1b fixed bug with power suppress in unirf, removed icon from api 2022-09-19 05:22:50 +03:00
MX
d85731636f move spectrum analyzer into plugins, fix debug builds 2022-09-19 04:59:28 +03:00
MX
6f66f87fab add new frequency to user config 2022-09-18 21:10:08 +03:00
MX
85d4dedb15 update changelog 2022-09-18 05:18:17 +03:00
MX
0a4cddb84c update assets 2022-09-18 01:53:50 +03:00
MX
4e17230290 fix subghz read issues 2022-09-18 01:48:10 +03:00
MX
aa99ac53c7 delete 2022-09-17 20:34:46 +03:00
MX
875f70196b drop setting save feature 2022-09-17 20:33:26 +03:00
MX
1e71d212fe Trying to fix strange bug 2022-09-17 17:53:44 +03:00
MX
269a6ce562 update how to install with animated instructions
sorry for quality, will be fixed later
2022-09-17 03:19:38 +03:00
MX
cd2014c51b Update ReadMe.md 2022-09-17 02:23:33 +03:00
MX
08f80ab645 update changelog 2022-09-17 01:40:35 +03:00
MX
14bd8f2c49 ofw pr: dummy mode
OFW PR 1739 by nminaylov
2022-09-17 00:43:21 +03:00
MX
8ce5fae626 fix config 2022-09-17 00:19:43 +03:00
MX
087bf41392 commented back 2022-09-16 22:47:52 +03:00
MX
d390381d5a Merge branch 'fix-subghz-last-used-settings' into dev 2022-09-16 22:45:43 +03:00
Der Skythe
c3e31663ef Minor changes 2022-09-16 23:08:45 +04:00
MX
c28e4ea733 Merge pull request #69 from h4sh5/random_uid_reader_detect
random uid for detect reader each time NFC app exists and comes back
2022-09-16 22:01:08 +03:00
MX
96a3da24c9 Merge pull request #70 from derskythe/fix-subghz-last-used-settings
Fix SubGHz last used settings
2022-09-16 21:58:24 +03:00
MX
9d4b318357 Merge branch 'dev' into fix-subghz-last-used-settings 2022-09-16 21:55:52 +03:00
MX
ef5d0aa483 fix null pointer dereference 2022-09-16 21:48:03 +03:00
MX
66487abaee disable some logs 2022-09-16 21:37:01 +03:00
MX
d2bb1ef4d3 fix receiver filter set-up 2022-09-16 21:30:53 +03:00
hedger
0e15090629 fbt: rebuilding assets when git commit id changes 2022-09-16 21:16:32 +03:00
MX
1413d7c937 secret
special secret animation by @Svaarich
2022-09-16 21:14:00 +03:00
Der Skythe
d97a3ef161 fix: change SUBGHZ_HISTORY_MAX to 50 according off-firm 2022-09-16 21:35:26 +04:00
MX
870dfd188c ofw pr: picopass se identify
OFW PR 1701 by pcunning
2022-09-16 18:42:12 +03:00
MX
71a6844a5f drop dfu's from releases
qflipper and android app is not allowing to use new update method with custom firmware, so we have 3 methods only
2022-09-16 18:14:28 +03:00
Der Skythe
d67d5da034 fix: SubGhz Read reset setting ReadRAW after using scene ReadRAW 2022-09-16 18:38:08 +04:00
MX
c894948d4f faploader api extension and lib fixes
OFW PR 1742 by hedger

keeping api version the same to allow compatibility 
it might be changed in next releases if api changes are destructive
2022-09-16 17:30:07 +03:00
MX
e25148ce72 update changelog 2022-09-16 03:12:07 +03:00
MX
07301935b5 update universal ac asset
by @amec0e
2022-09-16 02:56:58 +03:00
MX
3a1705bcf9 Merge pull request #68 from derskythe/fixed-archive-app
Fixed archive app
2022-09-16 02:53:15 +03:00
MX
df87b04fa9 disable debug logs to make gui faster 2022-09-16 02:52:43 +03:00
MX
75f5efce03 Merge branch 'dev' into fixed-archive-app 2022-09-16 02:50:24 +03:00
MX
00585fa16a add free back 2022-09-16 02:32:03 +03:00
Der Skythe
30aaae33be Revert "Fix bugs with new model"
This reverts commit 8915c0c66c.
2022-09-16 02:30:42 +03:00
MX
c0e7c2a929 remove merge bug 2022-09-16 02:27:08 +03:00
Der Skythe
286b4876ce Fix bugs with new model 2022-09-16 03:22:53 +04:00
Der Skythe
10c2ae5a05 Merge branch 'fixed-archive-app' of https://github.com/derskythe/flipperzero-firmware-wPlugins into fixed-archive-app 2022-09-16 03:20:45 +04:00
Der Skythe
8915c0c66c Fix bugs with new model 2022-09-16 03:16:46 +04:00
MX
ec7676182a fix null pointer dereference 2022-09-16 02:15:58 +03:00
MX
e23dbb9f99 add new start screen for doom
by @Svaarich
2022-09-16 01:54:17 +03:00
MX
19d201085b reduce max subghz history items to resolve memory issues 2022-09-16 01:23:29 +03:00
Der Skythe
17a4e03656 Fix bugs with new model 2022-09-16 02:21:10 +04:00
Der Skythe
1fd9240481 Add Info to all files, fix file info elements position 2022-09-15 23:33:43 +04:00
MX
fc9996377d fix subghz read mode doesn’t work at all 2022-09-15 22:10:18 +03:00
Der Skythe
7f4b586b13 Init archive app with Rename, normal context menu and file info 2022-09-15 22:00:51 +04:00
MX
72de4af6db change it back temporarily 2022-09-15 19:59:00 +03:00
MX
5bbb13c5c9 Merge branch 'fz-dev' into dev 2022-09-15 19:58:11 +03:00
MX
3efb093125 change app type and category for music players 2022-09-15 19:37:06 +03:00
Astra
60bce7b8d8 [FL-2780] NFC Notifications fix (#1731)
* Show error popup when NFC chip is not init/disconnected
* Move to dialogs for the error message
* NFC notifications fixed to match the intended design
* Revert "Move to dialogs for the error message"
* Revert "Show error popup when NFC chip is not init/disconnected"

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-09-16 00:49:10 +09:00
Skorpionm
8b05bd1106 [FL-2814] SubGhz: fix display information in the file if the frequency is not available for transmission in the given region (#1724) 2022-09-16 00:42:44 +09:00
MX
668b7857b4 Merge branch 'fz-dev' into dev 2022-09-15 18:28:57 +03:00
MX
8b3b5fa802 fix nrfsniff log spam, add new icons
icons by @Svaarich
2022-09-15 18:27:27 +03:00
Nikolay Minaylov
a6052be0f1 Charging icon update fix (#1733)
* Power: refresh battery indicator on charger plug/unplug

Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-09-15 23:13:48 +09:00
hedger
007a3d295e [FL-2819] updater: fixed failing backups on /int with empty files in it #1735
Co-authored-by: あく <alleteam@gmail.com>
2022-09-15 22:55:55 +09:00
hedger
28beff1ab6 Fbt: fixed gdb-py path for MacOS, docs: spelling fixes, codeowners (#1736)
* fbt: fixed gdb-py path for MacOS, docs: spelling fixes
* Gtihub: update codeowners

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2022-09-15 22:40:26 +09:00
MX
9c95562fad enable uart echo and usb mouse apps 2022-09-15 08:17:58 +03:00
MX
83e036da14 update readme & changelog 2022-09-15 07:28:26 +03:00
MX
8fd4225939 fix detect raw bug, fix came atomo 2022-09-15 06:45:19 +03:00
MX
a3234995db make zombiez input faster 2022-09-15 05:17:19 +03:00
MX
98312860a6 resolve merge conflict 2022-09-15 05:09:27 +03:00
MX
9dbcd43e66 Merge branch 'fz-dev' into dev 2022-09-15 05:08:53 +03:00
MX
ffce0aeec9 NFC Notifications fix
OFW PR 1731 by Astrrra
2022-09-15 04:54:18 +03:00
MX
361a239d3e add some games, make DOOM somewhat playable 2022-09-15 04:42:17 +03:00
MX
51ffdcd3bc update api, add icons, fix picopass again 2022-09-15 01:14:55 +03:00
hedger
d47fdce337 updater: fixed failing backups on /int with empty files in it 2022-09-14 21:04:46 +03:00
MX
3fbaad1488 Merge branch 'fz-dev' into dev 2022-09-14 21:04:04 +03:00
SG
b9a766d909 [FL-2627] Flipper applications: SDK, build and debug system (#1387)
* Added support for running applications from SD card (FAPs - Flipper Application Packages)
* Added plugin_dist target for fbt to build FAPs
* All apps of type FlipperAppType.EXTERNAL and FlipperAppType.PLUGIN are built as FAPs by default
* Updated VSCode configuration for new fbt features - re-deploy stock configuration to use them
* Added debugging support for FAPs with fbt debug & VSCode
* Added public firmware API with automated versioning

Co-authored-by: hedger <hedger@users.noreply.github.com>
Co-authored-by: SG <who.just.the.doctor@gmail.com>
Co-authored-by: あく <alleteam@gmail.com>
2022-09-15 02:21:03 +09:00
MX
1b8684eb53 drop games menu, preparing for app loader 2022-09-14 19:32:41 +03:00
MX
7a2b5be137 new clock
timer by GMMan and settings by kowalski7cc
2022-09-14 19:25:31 +03:00
SG
873e1f114b [FL-2627] Flipper applications: SDK, build and debug system (#1387) 2022-09-15 01:11:38 +09:00
MX
abce958db9 Merge pull request #66 from TQMatvey/dev
Arkanoid: rand_range, remove temp number
2022-09-14 17:36:07 +03:00
MX
d4c44d7500 Merge pull request #67 from derskythe/eng1n33r-save-subghz
Save last used SubGHZ config settings
2022-09-14 17:35:54 +03:00
Der Skythe
444035d06a Add missing settings 2022-09-14 18:12:27 +04:00
Der Skythe
c8c75d5f14 Merge remote-tracking branch 'upstream/dev' into eng1n33r-save-subghz 2022-09-14 17:57:00 +04:00
Der Skythe
1fda069579 Save Read and ReadRAW Config settings in subghz/assets/last_used.txt file 2022-09-14 17:41:44 +04:00
MX
fccb99d847 Power: refresh battery indicator on charger plug/unplug
OFW PR 1733 by nminaylov
2022-09-14 16:29:17 +03:00
MX
4a61a28f57 Protocol data redecoding before write
OFW PR 1723 by nminaylov
2022-09-14 16:18:23 +03:00
MX
b00117e02c Detect RAW feature
by perspecdev
2022-09-14 16:01:30 +03:00
Haoxi Tan
6b91c660d4 random uid each time NFC app exists and comes back 2022-09-14 20:10:49 +10:00
TQMatvey
9c3406895c Arkanoid: rand_range, remote temp number 2022-09-14 12:46:40 +07:00
MX
ee6b59ab9d update universal ac asset
by @Amec0e
2022-09-14 02:01:58 +03:00
MX
bd594c7134 update mf classic dict and ir universal remote assets 2022-09-13 16:53:48 +03:00
MX
4417a37a2e update changelog 2022-09-12 02:09:02 +03:00
MX
1b6794ce7c update manifest 2022-09-12 02:06:44 +03:00
MX
c96bfba95a update slideshow images
author - @Svaarich
2022-09-12 01:18:25 +03:00
MX
fe8ad22132 Merge pull request #65 from web-mancha/dev
Added Brazilian Portuguese keyboard layout
2022-09-12 01:09:19 +03:00
Mancha
bcb5af1813 Added Brazilian Portuguese keyboard layout
Created the BadUSB keyboard layout for the Brazilian Portuguese ABNT-2 keyboard layout configuration
2022-09-11 14:40:00 -03:00
MX
77be3db143 update changelog 2022-09-11 15:59:42 +03:00
MX
7a2a1d6007 Merge remote-tracking branch 'origin/dev' into dev 2022-09-11 15:03:54 +03:00
MX
1c00709ea6 fix custom name serial, bt mac, fix subghz starline 2022-09-11 15:03:44 +03:00
MX
9ad96f782e Merge pull request #64 from TQMatvey/dev
arkanoid: dont allow user to jump after start
2022-09-11 14:06:24 +03:00
TQMatvey
67955b6ab8 arkanoid: dont allow user to jump after start 2022-09-11 15:15:03 +07:00
MX
37ce143527 update changelog 2022-09-11 04:26:30 +03:00
MX
771e948cfc update message 2022-09-11 03:46:55 +03:00
MX
9dc337a02c Merge branch 'mpu' into dev 2022-09-11 03:44:11 +03:00
MX
3ea01f8413 fix broken save 2022-09-11 03:29:21 +03:00
MX
5623842892 Merge branch 'dev' into mpu 2022-09-11 02:10:46 +03:00
MX
a8d37879cb Merge pull request #63 from enovella/subghz-came12bits-on-307.80mhz
Include CAME 12 bits bruteforce on 307.80Mhz
2022-09-11 02:09:51 +03:00
MX
bcaf898c57 fixes and impovements 2022-09-11 02:09:02 +03:00
Eduardo Novella
248d222459 Respect the whitespaces 2022-09-11 00:57:13 +02:00
Eduardo Novella
fd230b6d09 Refactor switch case with duplicated code 2022-09-11 00:52:34 +02:00
Eduardo Novella
d55da415c2 Include CAME 12 bits bruteforce on 307.80Mhz 2022-09-11 00:37:08 +02:00
MX
f94517fdab lower stack sizes for apps 2022-09-10 20:37:00 +03:00
MX
177fabe50c add mpu, fix keeloq 2022-09-10 20:16:08 +03:00
MX
7930f73a4e introduce example, update changelog/readme 2022-09-10 17:51:13 +03:00
MX
b0633af0b6 Merge pull request #62 from darmiel/feat/playlist
feat: .sub playlist plugin
2022-09-10 17:05:00 +03:00
MX
e0efb2bf37 change log type and move power suppress 2022-09-10 17:04:15 +03:00
darmiel
239eca0543 Merge branch 'dev' of github.com:Eng1n33r/flipperzero-firmware into feat/playlist 2022-09-10 14:31:45 +02:00
MX
de4e7b9dd9 update changelog 2022-09-09 15:26:29 +03:00
MX
8e986c58c3 disable some debug tools in releases, actually fix tv.ir 2022-09-09 15:25:12 +03:00
MX
bbe5c9cae1 fix universal tv, lfrfid gui 2022-09-09 14:33:18 +03:00
Daniel
b10727435a fix: removed converter app (missed that while merging) 2022-08-24 15:36:30 +02:00
Daniel
fe7d089593 Merge remote-tracking branch 'upstream/dev' into feat/playlist 2022-08-24 15:30:22 +02:00
Daniel
380fe2633a Merge remote-tracking branch 'upstream/dev' into feat/playlist 2022-08-24 15:29:02 +02:00
Daniel
58cc7c1814 feat[playlist]: redesign (implements #2) 2022-08-18 01:39:25 +02:00
Daniel Statzner
7681e9a257 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-18 00:50:53 +02:00
Daniel
365d2977ef feat[playlist]: repeat (implements #1) 2022-08-18 00:50:19 +02:00
Daniel Statzner
a8895d56ea Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-15 20:51:30 +02:00
Daniel Statzner
7acd814970 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-14 21:44:58 +02:00
Daniel
2ad9aec802 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-12 14:27:06 +02:00
Daniel
f84d5e9b85 refactor[playlist]: made app a plugin 2022-08-11 20:47:08 +02:00
Daniel
1a60093689 feat[playlist]: overview view 2022-08-11 20:05:56 +02:00
Daniel
a8eb53af4e fix[playlist]: resending playlist 2022-08-11 18:48:02 +02:00
Daniel
5cb074fc24 fix[playlist]: crash & mass send on pause 2022-08-11 18:24:35 +02:00
Daniel
d9265164a3 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-11 18:08:25 +02:00
Daniel
b67dfb5821 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-11 01:34:10 +02:00
Daniel
4c2e38b51c refactor[playlist]: repetitions 2022-08-11 01:33:41 +02:00
Daniel
d13b4e3bd5 feat[playlist]: implementd sending 2022-08-11 00:44:35 +02:00
MX
91c7441fa8 Update Frequency analyzer by @ClusterM
OFW PR #1557
2022-08-10 22:46:12 +03:00
Daniel
b7922a2a49 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-10 17:04:10 +02:00
Daniel
f0937e91f1 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-10 03:43:43 +02:00
Daniel
ac08c92a35 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-09 02:13:02 +02:00
Daniel
b2ba7b5e59 feat[playlist]: display history 2022-08-09 01:14:28 +02:00
Daniel
9b89acfec0 feat[playlist]: basic controls 2022-08-09 00:12:06 +02:00
Daniel
7c1a48a377 refactor[playlist]: remove unused includes 2022-08-08 19:19:51 +02:00
Daniel
c8ad361818 Merge branch 'Eng1n33r:dev' into feat/playlist 2022-08-08 18:32:04 +02:00
Daniel
1a52e55a73 feat[playlist]: display current .sub 2022-08-08 02:55:18 +02:00
Daniel
f6a071ed6b feat[playlist]: worker thread 2022-08-08 02:02:39 +02:00
Daniel
05b6f9a901 refactor: rebrand brute-helper to playlist 2022-08-08 00:05:49 +02:00
Daniel
31e06da7e7 Merge branch 'Eng1n33r:dev' into feat/brute-helper 2022-08-07 15:37:51 +02:00
Daniel
1bb1022d51 feat[brutehelper]: initial commit 2022-08-07 02:02:01 +02:00
3588 changed files with 193953 additions and 152168 deletions

177
.ci_files/anims_ofw.txt Normal file
View File

@@ -0,0 +1,177 @@
Filetype: Flipper Animation Manifest
Version: 1
Name: L1_Waves_128x50
Min butthurt: 0
Max butthurt: 5
Min level: 1
Max level: 3
Weight: 3
Name: L1_Laptop_128x51
Min butthurt: 0
Max butthurt: 7
Min level: 1
Max level: 1
Weight: 3
Name: L1_Sleep_128x64
Min butthurt: 0
Max butthurt: 10
Min level: 1
Max level: 3
Weight: 3
Name: L1_Recording_128x51
Min butthurt: 0
Max butthurt: 8
Min level: 1
Max level: 1
Weight: 3
Name: L1_Furippa1_128x64
Min butthurt: 0
Max butthurt: 6
Min level: 1
Max level: 1
Weight: 3
Name: L1_Read_books_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 1
Max level: 1
Weight: 3
Name: L1_Cry_128x64
Min butthurt: 8
Max butthurt: 13
Min level: 1
Max level: 3
Weight: 3
Name: L1_Boxing_128x64
Min butthurt: 10
Max butthurt: 13
Min level: 1
Max level: 3
Weight: 3
Name: L1_Mad_fist_128x64
Min butthurt: 9
Max butthurt: 13
Min level: 1
Max level: 3
Weight: 3
Name: L1_Mods_128x64
Min butthurt: 0
Max butthurt: 9
Min level: 1
Max level: 3
Weight: 4
Name: L1_Painting_128x64
Min butthurt: 0
Max butthurt: 7
Min level: 1
Max level: 3
Weight: 3
Name: L1_Leaving_sad_128x64
Min butthurt: 14
Max butthurt: 14
Min level: 1
Max level: 3
Weight: 3
Name: L1_Kaiju_128x64
Min butthurt: 0
Max butthurt: 10
Min level: 1
Max level: 3
Weight: 4
Name: L1_My_dude_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 1
Max level: 3
Weight: 4
Name: L2_Wake_up_128x64
Min butthurt: 0
Max butthurt: 12
Min level: 2
Max level: 3
Weight: 4
Name: L2_Furippa2_128x64
Min butthurt: 0
Max butthurt: 6
Min level: 2
Max level: 2
Weight: 3
Name: L2_Hacking_pc_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 2
Max level: 2
Weight: 3
Name: L2_Soldering_128x64
Min butthurt: 0
Max butthurt: 10
Min level: 2
Max level: 2
Weight: 3
Name: L2_Dj_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 2
Max level: 3
Weight: 4
Name: L3_Furippa3_128x64
Min butthurt: 0
Max butthurt: 6
Min level: 3
Max level: 3
Weight: 3
Name: L3_Hijack_radio_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 3
Max level: 3
Weight: 3
Name: L3_Lab_research_128x54
Min butthurt: 0
Max butthurt: 10
Min level: 3
Max level: 3
Weight: 3
Name: L1_Senpai_128x64
Min butthurt: 0
Max butthurt: 5
Min level: 1
Max level: 3
Weight: 4
Name: L1_Sad_song_128x64
Min butthurt: 8
Max butthurt: 13
Min level: 1
Max level: 3
Weight: 4
Name: L2_Coding_in_the_shell_128x64
Min butthurt: 0
Max butthurt: 12
Min level: 2
Max level: 3
Weight: 4

677
.ci_files/rgb.patch Normal file
View File

@@ -0,0 +1,677 @@
diff --git a/applications/services/notification/notification_app.c b/applications/services/notification/notification_app.c
index 5769ced..c5d3088 100644
--- a/applications/services/notification/notification_app.c
+++ b/applications/services/notification/notification_app.c
@@ -9,6 +9,7 @@
#include "notification.h"
#include "notification_messages.h"
#include "notification_app.h"
+#include "applications/settings/notification_settings/rgb_backlight.h"
#define TAG "NotificationSrv"
@@ -589,6 +590,7 @@ int32_t notification_srv(void* p) {
break;
case SaveSettingsMessage:
notification_save_settings(app);
+ rgb_backlight_save_settings();
break;
}
diff --git a/applications/settings/notification_settings/notification_settings_app.c b/applications/settings/notification_settings/notification_settings_app.c
index 1955012..19d953d 100644
--- a/applications/settings/notification_settings/notification_settings_app.c
+++ b/applications/settings/notification_settings/notification_settings_app.c
@@ -3,6 +3,7 @@
#include <gui/modules/variable_item_list.h>
#include <gui/view_dispatcher.h>
#include <lib/toolbox/value_index.h>
+#include <applications/settings/notification_settings/rgb_backlight.h>
#define MAX_NOTIFICATION_SETTINGS 4
@@ -20,6 +21,8 @@ static const NotificationSequence sequence_note_c = {
NULL,
};
+static VariableItem* temp_item;
+
#define CONTRAST_COUNT 11
const char* const contrast_text[CONTRAST_COUNT] = {
"-5",
@@ -156,6 +159,59 @@ static void vibro_changed(VariableItem* item) {
notification_message(app->notification, &sequence_single_vibro);
}
+// Set RGB backlight color
+static void color_changed(VariableItem* item) {
+ NotificationAppSettings* app = variable_item_get_context(item);
+ uint8_t index = variable_item_get_current_value_index(item);
+ rgb_backlight_set_color(index);
+ variable_item_set_current_value_text(item, rgb_backlight_get_color_text(index));
+ notification_message(app->notification, &sequence_display_backlight_on);
+}
+
+// TODO: refactor and fix this
+static void color_set_custom_red(VariableItem* item) {
+ NotificationAppSettings* app = variable_item_get_context(item);
+ uint8_t index = variable_item_get_current_value_index(item);
+ rgb_backlight_set_custom_color(index, 0);
+ char valtext[4] = {};
+ snprintf(valtext, sizeof(valtext), "%d", index);
+ variable_item_set_current_value_text(item, valtext);
+ rgb_backlight_set_color(13);
+ rgb_backlight_update(app->notification->settings.display_brightness * 0xFF, true);
+ // Set to custom color explicitly
+ variable_item_set_current_value_index(temp_item, 13);
+ variable_item_set_current_value_text(temp_item, rgb_backlight_get_color_text(13));
+ notification_message(app->notification, &sequence_display_backlight_on);
+}
+static void color_set_custom_green(VariableItem* item) {
+ NotificationAppSettings* app = variable_item_get_context(item);
+ uint8_t index = variable_item_get_current_value_index(item);
+ rgb_backlight_set_custom_color(index, 1);
+ char valtext[4] = {};
+ snprintf(valtext, sizeof(valtext), "%d", index);
+ variable_item_set_current_value_text(item, valtext);
+ rgb_backlight_set_color(13);
+ rgb_backlight_update(app->notification->settings.display_brightness * 0xFF, true);
+ // Set to custom color explicitly
+ variable_item_set_current_value_index(temp_item, 13);
+ variable_item_set_current_value_text(temp_item, rgb_backlight_get_color_text(13));
+ notification_message(app->notification, &sequence_display_backlight_on);
+}
+static void color_set_custom_blue(VariableItem* item) {
+ NotificationAppSettings* app = variable_item_get_context(item);
+ uint8_t index = variable_item_get_current_value_index(item);
+ rgb_backlight_set_custom_color(index, 2);
+ char valtext[4] = {};
+ snprintf(valtext, sizeof(valtext), "%d", index);
+ variable_item_set_current_value_text(item, valtext);
+ rgb_backlight_set_color(13);
+ rgb_backlight_update(app->notification->settings.display_brightness * 0xFF, true);
+ // Set to custom color explicitly
+ variable_item_set_current_value_index(temp_item, 13);
+ variable_item_set_current_value_text(temp_item, rgb_backlight_get_color_text(13));
+ notification_message(app->notification, &sequence_display_backlight_on);
+}
+
static uint32_t notification_app_settings_exit(void* context) {
UNUSED(context);
return VIEW_NONE;
@@ -180,8 +236,40 @@ static NotificationAppSettings* alloc_settings() {
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, contrast_text[value_index]);
+ // RGB Colors
+ item = variable_item_list_add(
+ app->variable_item_list, "LCD Color", rgb_backlight_get_color_count(), color_changed, app);
+ value_index = rgb_backlight_get_settings()->display_color_index;
+ variable_item_set_current_value_index(item, value_index);
+ variable_item_set_current_value_text(item, rgb_backlight_get_color_text(value_index));
+ temp_item = item;
+
+ // Custom Color - REFACTOR THIS
+ item = variable_item_list_add(
+ app->variable_item_list, "Custom Red", 255, color_set_custom_red, app);
+ value_index = rgb_backlight_get_settings()->custom_r;
+ variable_item_set_current_value_index(item, value_index);
+ char valtext[4] = {};
+ snprintf(valtext, sizeof(valtext), "%d", value_index);
+ variable_item_set_current_value_text(item, valtext);
+
+ item = variable_item_list_add(
+ app->variable_item_list, "Custom Green", 255, color_set_custom_green, app);
+ value_index = rgb_backlight_get_settings()->custom_g;
+ variable_item_set_current_value_index(item, value_index);
+ snprintf(valtext, sizeof(valtext), "%d", value_index);
+ variable_item_set_current_value_text(item, valtext);
+
+ item = variable_item_list_add(
+ app->variable_item_list, "Custom Blue", 255, color_set_custom_blue, app);
+ value_index = rgb_backlight_get_settings()->custom_b;
+ variable_item_set_current_value_index(item, value_index);
+ snprintf(valtext, sizeof(valtext), "%d", value_index);
+ variable_item_set_current_value_text(item, valtext);
+ // End of RGB
+
item = variable_item_list_add(
- app->variable_item_list, "LCD Backlight", BACKLIGHT_COUNT, backlight_changed, app);
+ app->variable_item_list, "LCD Brightness", BACKLIGHT_COUNT, backlight_changed, app);
value_index = value_index_float(
app->notification->settings.display_brightness, backlight_value, BACKLIGHT_COUNT);
variable_item_set_current_value_index(item, value_index);
diff --git a/applications/settings/notification_settings/rgb_backlight.c b/applications/settings/notification_settings/rgb_backlight.c
new file mode 100644
index 0000000..98f0d3a
--- /dev/null
+++ b/applications/settings/notification_settings/rgb_backlight.c
@@ -0,0 +1,217 @@
+/*
+ RGB backlight FlipperZero driver
+ Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+#include "rgb_backlight.h"
+#include <furi_hal.h>
+#include <storage/storage.h>
+
+#define RGB_BACKLIGHT_SETTINGS_VERSION 6
+#define RGB_BACKLIGHT_SETTINGS_FILE_NAME ".rgb_backlight.settings"
+#define RGB_BACKLIGHT_SETTINGS_PATH INT_PATH(RGB_BACKLIGHT_SETTINGS_FILE_NAME)
+
+#define COLOR_COUNT (sizeof(colors) / sizeof(RGBBacklightColor))
+
+#define TAG "RGB Backlight"
+
+static RGBBacklightSettings rgb_settings = {
+ .version = RGB_BACKLIGHT_SETTINGS_VERSION,
+ .display_color_index = 0,
+ .custom_r = 254,
+ .custom_g = 254,
+ .custom_b = 254,
+ .settings_is_loaded = false};
+
+static const RGBBacklightColor colors[] = {
+ {"Orange", 255, 60, 0},
+ {"Yellow", 255, 144, 0},
+ {"Spring", 167, 255, 0},
+ {"Lime", 0, 255, 0},
+ {"Aqua", 0, 255, 127},
+ {"Cyan", 0, 210, 210},
+ {"Azure", 0, 127, 255},
+ {"Blue", 0, 0, 255},
+ {"Purple", 127, 0, 255},
+ {"Magenta", 210, 0, 210},
+ {"Pink", 255, 0, 127},
+ {"Red", 255, 0, 0},
+ {"White", 254, 210, 200},
+ {"Custom", 0, 0, 0},
+};
+
+uint8_t rgb_backlight_get_color_count(void) {
+ return COLOR_COUNT;
+}
+
+const char* rgb_backlight_get_color_text(uint8_t index) {
+ return colors[index].name;
+}
+
+void rgb_backlight_load_settings(void) {
+ // Do not load settings if we are in other boot modes than normal
+ if(furi_hal_rtc_get_boot_mode() != FuriHalRtcBootModeNormal) {
+ rgb_settings.settings_is_loaded = true;
+ return;
+ }
+
+ // Wait for all required services to start and create their records
+ uint8_t timeout = 0;
+ while(!furi_record_exists(RECORD_STORAGE)) {
+ timeout++;
+ if(timeout > 150) {
+ rgb_settings.settings_is_loaded = true;
+ return;
+ }
+ furi_delay_ms(5);
+ }
+
+ RGBBacklightSettings settings;
+ File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE));
+ const size_t settings_size = sizeof(RGBBacklightSettings);
+
+ FURI_LOG_D(TAG, "loading settings from \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH);
+ bool fs_result =
+ storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
+
+ if(fs_result) {
+ uint16_t bytes_count = storage_file_read(file, &settings, settings_size);
+
+ if(bytes_count != settings_size) {
+ fs_result = false;
+ }
+ }
+
+ if(fs_result) {
+ FURI_LOG_D(TAG, "load success");
+ if(settings.version != RGB_BACKLIGHT_SETTINGS_VERSION) {
+ FURI_LOG_E(
+ TAG,
+ "version(%d != %d) mismatch",
+ settings.version,
+ RGB_BACKLIGHT_SETTINGS_VERSION);
+ } else {
+ memcpy(&rgb_settings, &settings, settings_size);
+ }
+ } else {
+ FURI_LOG_E(TAG, "load failed, %s", storage_file_get_error_desc(file));
+ }
+
+ storage_file_close(file);
+ storage_file_free(file);
+ furi_record_close(RECORD_STORAGE);
+ rgb_settings.settings_is_loaded = true;
+};
+
+void rgb_backlight_save_settings(void) {
+ RGBBacklightSettings settings;
+ File* file = storage_file_alloc(furi_record_open(RECORD_STORAGE));
+ const size_t settings_size = sizeof(RGBBacklightSettings);
+
+ FURI_LOG_D(TAG, "saving settings to \"%s\"", RGB_BACKLIGHT_SETTINGS_PATH);
+
+ memcpy(&settings, &rgb_settings, settings_size);
+
+ bool fs_result =
+ storage_file_open(file, RGB_BACKLIGHT_SETTINGS_PATH, FSAM_WRITE, FSOM_CREATE_ALWAYS);
+
+ if(fs_result) {
+ uint16_t bytes_count = storage_file_write(file, &settings, settings_size);
+
+ if(bytes_count != settings_size) {
+ fs_result = false;
+ }
+ }
+
+ if(fs_result) {
+ FURI_LOG_D(TAG, "save success");
+ } else {
+ FURI_LOG_E(TAG, "save failed, %s", storage_file_get_error_desc(file));
+ }
+
+ storage_file_close(file);
+ storage_file_free(file);
+ furi_record_close(RECORD_STORAGE);
+};
+
+RGBBacklightSettings* rgb_backlight_get_settings(void) {
+ if(!rgb_settings.settings_is_loaded) {
+ rgb_backlight_load_settings();
+ }
+ return &rgb_settings;
+}
+
+void rgb_backlight_set_color(uint8_t color_index) {
+ if(color_index > (rgb_backlight_get_color_count() - 1)) color_index = 0;
+ rgb_settings.display_color_index = color_index;
+}
+
+void rgb_backlight_set_custom_color(uint8_t color, uint8_t index) {
+ if(index > 2) return;
+ if(index == 0) {
+ rgb_settings.custom_r = color;
+ } else if(index == 1) {
+ rgb_settings.custom_g = color;
+ } else if(index == 2) {
+ rgb_settings.custom_b = color;
+ }
+}
+
+void rgb_backlight_update(uint8_t brightness, bool bypass) {
+ if(!rgb_settings.settings_is_loaded) {
+ rgb_backlight_load_settings();
+ }
+
+ if(!bypass) {
+ static uint8_t last_color_index = 255;
+ static uint8_t last_brightness = 123;
+
+ if(last_brightness == brightness && last_color_index == rgb_settings.display_color_index) {
+ return;
+ }
+
+ last_brightness = brightness;
+ last_color_index = rgb_settings.display_color_index;
+ }
+
+ for(uint8_t i = 0; i < SK6805_get_led_count(); i++) {
+ if(rgb_settings.display_color_index == 13) {
+ uint8_t r = rgb_settings.custom_r * (brightness / 255.0f);
+ uint8_t g = rgb_settings.custom_g * (brightness / 255.0f);
+ uint8_t b = rgb_settings.custom_b * (brightness / 255.0f);
+
+ SK6805_set_led_color(i, r, g, b);
+ } else {
+ if((colors[rgb_settings.display_color_index].red == 0) &&
+ (colors[rgb_settings.display_color_index].green == 0) &&
+ (colors[rgb_settings.display_color_index].blue == 0)) {
+ uint8_t r = colors[0].red * (brightness / 255.0f);
+ uint8_t g = colors[0].green * (brightness / 255.0f);
+ uint8_t b = colors[0].blue * (brightness / 255.0f);
+
+ SK6805_set_led_color(i, r, g, b);
+ } else {
+ uint8_t r = colors[rgb_settings.display_color_index].red * (brightness / 255.0f);
+ uint8_t g = colors[rgb_settings.display_color_index].green * (brightness / 255.0f);
+ uint8_t b = colors[rgb_settings.display_color_index].blue * (brightness / 255.0f);
+
+ SK6805_set_led_color(i, r, g, b);
+ }
+ }
+ }
+
+ SK6805_update();
+}
diff --git a/applications/settings/notification_settings/rgb_backlight.h b/applications/settings/notification_settings/rgb_backlight.h
new file mode 100644
index 0000000..68dacda
--- /dev/null
+++ b/applications/settings/notification_settings/rgb_backlight.h
@@ -0,0 +1,91 @@
+/*
+ RGB backlight FlipperZero driver
+ Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+#include <furi.h>
+#include "SK6805.h"
+
+typedef struct {
+ char* name;
+ uint8_t red;
+ uint8_t green;
+ uint8_t blue;
+} RGBBacklightColor;
+
+typedef struct {
+ uint8_t version;
+ uint8_t display_color_index;
+ uint8_t custom_r;
+ uint8_t custom_g;
+ uint8_t custom_b;
+ bool settings_is_loaded;
+} RGBBacklightSettings;
+
+/**
+ * @brief Получить текущие настройки RGB-подсветки
+ *
+ * @return Указатель на структуру настроек
+ */
+RGBBacklightSettings* rgb_backlight_get_settings(void);
+
+/**
+ * @brief Загрузить настройки подсветки с SD-карты
+ */
+void rgb_backlight_load_settings(void);
+
+/**
+ * @brief Сохранить текущие настройки RGB-подсветки
+ */
+void rgb_backlight_save_settings(void);
+
+/**
+ * @brief Применить текущие настройки RGB-подсветки
+ *
+ * @param brightness Яркость свечения (0-255)
+ * @param bypass Применить настройки принудительно
+ */
+void rgb_backlight_update(uint8_t brightness, bool bypass);
+
+/**
+ * @brief Установить цвет RGB-подсветки
+ *
+ * @param color_index Индекс цвета (0 - rgb_backlight_get_color_count())
+ */
+void rgb_backlight_set_color(uint8_t color_index);
+
+/**
+ * @brief Set custom color values by index - 0=R 1=G 2=B
+ *
+ * @param color - color value (0-255)
+ * @param index - color index (0-2) 0=R 1=G 2=B
+ */
+void rgb_backlight_set_custom_color(uint8_t color, uint8_t index);
+
+/**
+ * @brief Получить количество доступных цветов
+ *
+ * @return Число доступных вариантов цвета
+ */
+uint8_t rgb_backlight_get_color_count(void);
+
+/**
+ * @brief Получить текстовое название цвета
+ *
+ * @param index Индекс из доступных вариантов цвета
+ * @return Указатель на строку с названием цвета
+ */
+const char* rgb_backlight_get_color_text(uint8_t index);
\ No newline at end of file
diff --git a/firmware/targets/f7/furi_hal/furi_hal_light.c b/firmware/targets/f7/furi_hal/furi_hal_light.c
index 83e1603..45798ca 100644
--- a/firmware/targets/f7/furi_hal/furi_hal_light.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_light.c
@@ -3,6 +3,7 @@
#include <furi_hal_light.h>
#include <lp5562.h>
#include <stdint.h>
+#include <applications/settings/notification_settings/rgb_backlight.h>
#define LED_CURRENT_RED 50
#define LED_CURRENT_GREEN 50
@@ -31,22 +32,21 @@ void furi_hal_light_init() {
}
void furi_hal_light_set(Light light, uint8_t value) {
- furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
- if(light & LightRed) {
- lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelRed, value);
- }
- if(light & LightGreen) {
- lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelGreen, value);
- }
- if(light & LightBlue) {
- lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, value);
- }
if(light & LightBacklight) {
- uint8_t prev = lp5562_get_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelWhite);
- lp5562_execute_ramp(
- &furi_hal_i2c_handle_power, LP5562Engine1, LP5562ChannelWhite, prev, value, 100);
+ rgb_backlight_update(value, false);
+ } else {
+ furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
+ if(light & LightRed) {
+ lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelRed, value);
+ }
+ if(light & LightGreen) {
+ lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelGreen, value);
+ }
+ if(light & LightBlue) {
+ lp5562_set_channel_value(&furi_hal_i2c_handle_power, LP5562ChannelBlue, value);
+ }
+ furi_hal_i2c_release(&furi_hal_i2c_handle_power);
}
- furi_hal_i2c_release(&furi_hal_i2c_handle_power);
}
void furi_hal_light_blink_start(Light light, uint8_t brightness, uint16_t on_time, uint16_t period) {
diff --git a/lib/drivers/SK6805.c b/lib/drivers/SK6805.c
new file mode 100644
index 0000000..572e1df
--- /dev/null
+++ b/lib/drivers/SK6805.c
@@ -0,0 +1,101 @@
+/*
+ SK6805 FlipperZero driver
+ Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+#include "SK6805.h"
+#include <furi_hal.h>
+
+/* Настройки */
+#define SK6805_LED_COUNT 3 //Количество светодиодов на плате подсветки
+#define SK6805_LED_PIN &led_pin //Порт подключения светодиодов
+
+#ifdef FURI_DEBUG
+#define DEBUG_PIN &gpio_ext_pa7
+#define DEBUG_INIT() \
+ furi_hal_gpio_init(DEBUG_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh)
+#define DEBUG_SET_HIGH() furi_hal_gpio_write(DEBUG_PIN, true)
+#define DEBUG_SET_LOW() furi_hal_gpio_write(DEBUG_PIN, false)
+#else
+#define DEBUG_INIT()
+#define DEBUG_SET_HIGH()
+#define DEBUG_SET_LOW()
+#endif
+
+static const GpioPin led_pin = {.port = GPIOA, .pin = LL_GPIO_PIN_8};
+static uint8_t led_buffer[SK6805_LED_COUNT][3];
+
+void SK6805_init(void) {
+ DEBUG_INIT();
+ furi_hal_gpio_write(SK6805_LED_PIN, false);
+ furi_hal_gpio_init(SK6805_LED_PIN, GpioModeOutputPushPull, GpioPullNo, GpioSpeedVeryHigh);
+}
+
+uint8_t SK6805_get_led_count(void) {
+ return (const uint8_t)SK6805_LED_COUNT;
+}
+void SK6805_set_led_color(uint8_t led_index, uint8_t r, uint8_t g, uint8_t b) {
+ furi_check(led_index < SK6805_LED_COUNT);
+
+ led_buffer[led_index][0] = g;
+ led_buffer[led_index][1] = r;
+ led_buffer[led_index][2] = b;
+}
+
+void SK6805_update(void) {
+ SK6805_init();
+ furi_kernel_lock();
+ uint32_t end;
+ /* Последовательная отправка цветов светодиодов */
+ for(uint8_t lednumber = 0; lednumber < SK6805_LED_COUNT; lednumber++) {
+ //Последовательная отправка цветов светодиода
+ for(uint8_t color = 0; color < 3; color++) {
+ //Последовательная отправка битов цвета
+ uint8_t i = 0b10000000;
+ while(i != 0) {
+ if(led_buffer[lednumber][color] & (i)) {
+ furi_hal_gpio_write(SK6805_LED_PIN, true);
+ DEBUG_SET_HIGH();
+ end = DWT->CYCCNT + 30;
+ //T1H 600 us (615 us)
+ while(DWT->CYCCNT < end) {
+ }
+ furi_hal_gpio_write(SK6805_LED_PIN, false);
+ DEBUG_SET_LOW();
+ end = DWT->CYCCNT + 26;
+ //T1L 600 us (587 us)
+ while(DWT->CYCCNT < end) {
+ }
+ } else {
+ furi_hal_gpio_write(SK6805_LED_PIN, true);
+ DEBUG_SET_HIGH();
+ end = DWT->CYCCNT + 11;
+ //T0H 300 ns (312 ns)
+ while(DWT->CYCCNT < end) {
+ }
+ furi_hal_gpio_write(SK6805_LED_PIN, false);
+ DEBUG_SET_LOW();
+ end = DWT->CYCCNT + 43;
+ //T0L 900 ns (890 ns)
+ while(DWT->CYCCNT < end) {
+ }
+ }
+ i >>= 1;
+ }
+ }
+ }
+ furi_kernel_unlock();
+}
diff --git a/lib/drivers/SK6805.h b/lib/drivers/SK6805.h
new file mode 100644
index 0000000..7c58956
--- /dev/null
+++ b/lib/drivers/SK6805.h
@@ -0,0 +1,51 @@
+/*
+ SK6805 FlipperZero driver
+ Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+#ifndef SK6805_H_
+#define SK6805_H_
+
+#include <furi.h>
+
+/**
+ * @brief Инициализация линии управления подсветкой
+ */
+void SK6805_init(void);
+
+/**
+ * @brief Получить количество светодиодов в подсветке
+ *
+ * @return Количество светодиодов
+ */
+uint8_t SK6805_get_led_count(void);
+
+/**
+ * @brief Установить цвет свечения светодиода
+ *
+ * @param led_index номер светодиода (от 0 до SK6805_get_led_count())
+ * @param r значение красного (0-255)
+ * @param g значение зелёного (0-255)
+ * @param b значение синего (0-255)
+ */
+void SK6805_set_led_color(uint8_t led_index, uint8_t r, uint8_t g, uint8_t b);
+
+/**
+ * @brief Обновление состояния подсветки дисплея
+ */
+void SK6805_update(void);
+
+#endif /* SK6805_H_ */
\ No newline at end of file

View File

@@ -1,86 +1,191 @@
---
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignArrayOfStructures: None
AlignConsecutiveMacros: None
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Left
AlignOperands: true
AlignOperands: Align
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortEnumsOnASingleLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: true
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: WithoutElse
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeConceptDeclarations: true
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: false
ColumnLimit: 99
ColumnLimit: 99
CommentPragmas: '^ IWYU pragma:'
QualifierAlignment: Leave
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
DisableFormat: false
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
ExperimentalAutoDetectBinPacking: false
PackConstructorInitializers: BinPack
BasedOnStyle: ''
ConstructorInitializerAllOnOneLineOrOnePerLine: false
AllowAllConstructorInitializersOnNextLine: true
FixNamespaceComments: false
IncludeBlocks: Preserve
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IfMacros:
- KJ_IF_MAYBE
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '.*'
Priority: 1
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
CaseSensitive: false
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: false
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: false
IndentCaseLabels: false
IndentCaseBlocks: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentExternBlock: AfterExternBlock
IndentRequires: false
IndentWidth: 4
IndentWrappedFunctionNames: true
InsertTrailingCommas: None
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
LambdaBodyIndentation: Signature
MacroBlockBegin: ''
MacroBlockEnd: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCBreakBeforeNestedBlockParam: true
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
# Taken from git's rules
PenaltyBreakAssignment: 10
PenaltyBreakBeforeFirstCallParameter: 30
PenaltyBreakComment: 10
PenaltyBreakFirstLessLess: 0
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 10
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 100
PenaltyReturnTypeOnItsOwnLine: 60
PenaltyIndentedWhitespace: 0
PointerAlignment: Left
ReflowComments: false
SortIncludes: false
PPIndentWidth: -1
ReferenceAlignment: Pointer
ReflowComments: false
RemoveBracesLLVM: false
SeparateDefinitionBlocks: Leave
ShortNamespaceLines: 1
SortIncludes: Never
SortJavaStaticImport: Before
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: Never
SpaceBeforeParensOptions:
AfterControlStatements: false
AfterForeachMacros: false
AfterFunctionDefinitionName: false
AfterFunctionDeclarationName: false
AfterIfMacros: false
AfterOverloadedOperator: false
BeforeNonEmptyParentheses: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInAngles: Never
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp03
TabWidth: 4
UseTab: Never
SpaceBeforeSquareBrackets: false
BitFieldColonSpacing: Both
Standard: c++03
StatementAttributeLikeMacros:
- Q_EMIT
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
WhitespaceSensitiveMacros:
- STRINGIZE
- PP_STRINGIZE
- BOOST_PP_STRINGIZE
- NS_SWIFT_NAME
- CF_SWIFT_NAME
...

View File

@@ -1,71 +1,176 @@
kind: pipeline
type: docker
name: "Build firmware"
name: "Release firmware"
platform:
os: linux
arch: amd64
steps:
- name: "Update submodules"
image: alpine/git
commands:
- git submodule sync
- git -c protocol.version=2 submodule update --init --force --recursive
- git -c protocol.version=2 submodule update --init --force --recursive --jobs 4
- git submodule foreach git config --local gc.auto 0
- git log -1 --format='%H'
- name: "Build default fw"
- name: "Build clean"
image: hfdj/fztools
pull: never
commands:
- export DIST_SUFFIX=${DRONE_TAG}c
- export WORKFLOW_BRANCH_OR_TAG=release-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -rf applications/main/clock_app/resources/apps/
- rm -rf build/
- rm -rf dist/
- rm -rf .sconsign.dblite
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-clean
- mv dist/f7-C/* artifacts-clean/
- ls -laS artifacts-clean
- ls -laS artifacts-clean/f7-update-${DRONE_TAG}c
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build default"
image: hfdj/fztools
pull: never
commands:
- export DIST_SUFFIX=${DRONE_TAG}
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw
- export WORKFLOW_BRANCH_OR_TAG=release-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz
- tar zxvf all-the-apps-base.tgz
- cp -R base_pack_build/artifacts-base/* applications/main/clock_app/resources/apps/
- cp -R base_pack_build/apps_data/* applications/main/clock_app/resources/apps_data/
- rm -rf base_pack_build
- rm -rf all-the-apps-base.tgz
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-default
- mv dist/f7-C/* artifacts-default/
- ls -laS artifacts-default
- ls -laS artifacts-default/f7-update-${DRONE_TAG}
- sed -i 's/(version)/'${DRONE_TAG}'/g' CHANGELOG.md
- echo '# [Install via Web Updater](https://my.flipp.dev/?url=https://unleashedflip.com/builds/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=dev-cfw&version='${DRONE_TAG}')' >> CHANGELOG.md
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Bundle resources"
image: kramos/alpine-zip
- name: "Build with extra apps"
image: hfdj/fztools
pull: never
commands:
- mkdir sd-card
- mkdir -p sd-card/subghz/assets
- mkdir -p sd-card/nfc/assets
- mkdir -p sd-card/infrared/assets
- mkdir -p sd-card/unirf
- mkdir -p sd-card/rfidfuzzer
- mkdir -p sd-card/badusb/layouts
- cp assets/resources/badusb/layouts/* sd-card/badusb/layouts/
- cp assets/resources/subghz/assets/dangerous_settings sd-card/subghz/assets/dangerous_settings
- cp assets/resources/subghz/assets/setting_user sd-card/subghz/assets/setting_user
- cp assets/resources/subghz/assets/keeloq_mfcodes sd-card/subghz/assets/keeloq_mfcodes
- cp assets/resources/nfc/assets/mf_classic_dict.nfc sd-card/nfc/assets/mf_classic_dict.nfc
- cp assets/resources/infrared/assets/tv.ir sd-card/infrared/assets/tv.ir
- cp assets/resources/infrared/assets/ac.ir sd-card/infrared/assets/ac.ir
- cp assets/resources/infrared/assets/fans.ir sd-card/infrared/assets/fans.ir
- cp assets/resources/infrared/assets/projectors.ir sd-card/infrared/assets/projectors.ir
- cp assets/resources/infrared/assets/audio.ir sd-card/infrared/assets/audio.ir
- cp assets/resources/unirf/unirf_map_example.txt sd-card/unirf/unirf_map_example.txt
- cp assets/resources/rfidfuzzer/example_uids.txt sd-card/rfidfuzzer/example_uids.txt
- cp assets/resources/Manifest sd-card/Manifest
- zip -r artifacts-default/sd-card-${DRONE_TAG}.zip sd-card
- rm -rf sd-card
- ls -laS artifacts-default
- wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-extra.tgz
- tar zxvf all-the-apps-extra.tgz
- cp -R extra_pack_build/artifacts-extra/* applications/main/clock_app/resources/apps/
- rm -rf extra_pack_build
- export DIST_SUFFIX=${DRONE_TAG}e
- export WORKFLOW_BRANCH_OR_TAG=release-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-extra-apps
- mv dist/f7-C/* artifacts-extra-apps/
- ls -laS artifacts-extra-apps
- ls -laS artifacts-extra-apps/f7-update-${DRONE_TAG}e
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build with RGB patch"
image: hfdj/fztools
pull: never
commands:
- git apply .ci_files/rgb.patch
- export DIST_SUFFIX=${DRONE_TAG}r
- export WORKFLOW_BRANCH_OR_TAG=release-cfw-rgb
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-rgb-patch
- mv dist/f7-C/* artifacts-rgb-patch/
- ls -laS artifacts-rgb-patch
- ls -laS artifacts-rgb-patch/f7-update-${DRONE_TAG}r
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build with ofw anims"
image: hfdj/fztools
pull: never
commands:
- git clean -df
- git checkout -- .
- rm -f assets/dolphin/external/manifest.txt
- cp .ci_files/anims_ofw.txt assets/dolphin/external/manifest.txt
- rm -rf applications/main/clock_app/resources/apps/
- export DIST_SUFFIX=${DRONE_TAG}n
- export WORKFLOW_BRANCH_OR_TAG=no-custom-anims
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz
- tar zxvf all-the-apps-base.tgz
- cp -R base_pack_build/artifacts-base/* applications/main/clock_app/resources/apps/
- cp -R base_pack_build/apps_data/* applications/main/clock_app/resources/apps_data/
- rm -rf base_pack_build
- rm -rf all-the-apps-base.tgz
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-ofw-anims
- mv dist/f7-C/* artifacts-ofw-anims/
- ls -laS artifacts-ofw-anims
- ls -laS artifacts-ofw-anims/f7-update-${DRONE_TAG}n
- sed -i 's/(version)/'${DRONE_TAG}'/g' CHANGELOG.md
- echo '# [Install via Web Updater](https://lab.flipper.net/?url=https://unleashedflip.com/fw/${DRONE_TAG}/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')' >> CHANGELOG.md
- echo '' >> CHANGELOG.md
- echo '### [Version with only main apps - Install via Web Updater](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'c.tgz&channel=release-cfw&version='${DRONE_TAG}'c)' >> CHANGELOG.md
- echo '' >> CHANGELOG.md
- echo '### [Version without custom animations - Install via Web Updater](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)' >> CHANGELOG.md
- echo '' >> CHANGELOG.md
- echo '### [Version with RGB patch - only for hardware mod! - Install via Web Updater](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'r.tgz&channel=release-cfw&version='${DRONE_TAG}'r)' >> CHANGELOG.md
- echo '' >> CHANGELOG.md
- echo '## [Version with Extra apps - Install via Web Updater](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)' >> CHANGELOG.md
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Bundle self-update packages"
image: kramos/alpine-zip
commands:
- tar czpf artifacts-default/flipper-z-f7-update-${DRONE_TAG}.tgz -C artifacts-default f7-update-${DRONE_TAG}
- cp artifacts-extra-apps/flipper-z-f7-update-${DRONE_TAG}e.tgz .
- cp artifacts-rgb-patch/flipper-z-f7-update-${DRONE_TAG}r.tgz .
- cp artifacts-clean/flipper-z-f7-update-${DRONE_TAG}c.tgz .
- cp artifacts-ofw-anims/flipper-z-f7-update-${DRONE_TAG}n.tgz .
- cp artifacts-default/flipper-z-f7-update-${DRONE_TAG}.tgz .
- zip -r artifacts-extra-apps/flipper-z-f7-update-${DRONE_TAG}e.zip artifacts-extra-apps/f7-update-${DRONE_TAG}e
- zip -r artifacts-rgb-patch/flipper-z-f7-update-${DRONE_TAG}r.zip artifacts-rgb-patch/f7-update-${DRONE_TAG}r
- zip -r artifacts-clean/flipper-z-f7-update-${DRONE_TAG}c.zip artifacts-clean/f7-update-${DRONE_TAG}c
- zip -r artifacts-ofw-anims/flipper-z-f7-update-${DRONE_TAG}n.zip artifacts-ofw-anims/f7-update-${DRONE_TAG}n
- zip -r artifacts-default/flipper-z-f7-update-${DRONE_TAG}.zip artifacts-default/f7-update-${DRONE_TAG}
- tar czpf artifacts-default/flipper-z-any-scripts-${DRONE_TAG}.tgz scripts
- rm -rf artifacts-extra-apps/f7-update-${DRONE_TAG}
- rm -rf artifacts-rgb-patch/f7-update-${DRONE_TAG}
- rm -rf artifacts-clean/f7-update-${DRONE_TAG}
- rm -rf artifacts-ofw-anims/f7-update-${DRONE_TAG}
- rm -rf artifacts-default/f7-update-${DRONE_TAG}
- ls -laS artifacts-extra-apps
- ls -laS artifacts-rgb-patch
- ls -laS artifacts-clean
- ls -laS artifacts-ofw-anims
- ls -laS artifacts-default
- mv artifacts-default/ ${DRONE_TAG}
- ls -laS ${DRONE_TAG}
- name: "Upload to updates server"
image: appleboy/drone-scp
- name: "Upload default to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
@@ -76,8 +181,74 @@ steps:
port:
from_secret: dep_port
target:
from_secret: dep_target
source: flipper-z-f7-update-${DRONE_TAG}.tgz
from_secret: dep_target_new
source:
- ${DRONE_TAG}/*.tgz
- ${DRONE_TAG}/*.zip
- ${DRONE_TAG}/*.json
- ${DRONE_TAG}/*.elf
- ${DRONE_TAG}/*.dfu
- ${DRONE_TAG}/*.bin
- name: "Upload no-anims to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_noanim
source: flipper-z-f7-update-${DRONE_TAG}n.tgz
- name: "Upload extra apps version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_TAG}e.tgz
- name: "Upload rgb patch version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_TAG}r.tgz
- name: "Upload clean version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_TAG}c.tgz
- name: "Do Github release"
image: ddplugins/github-release
@@ -89,9 +260,12 @@ steps:
api_key:
from_secret: github_apikey
files:
- artifacts-default/*.tgz
- artifacts-default/*.zip
- artifacts-default/flipper-z-f7-full-${DRONE_TAG}.dfu
- ${DRONE_TAG}/*.tgz
- ${DRONE_TAG}/*.zip
- artifacts-ofw-anims/*.tgz
- artifacts-extra-apps/*.tgz
- artifacts-rgb-patch/*.tgz
- artifacts-clean/*.tgz
title: ${DRONE_TAG}
note: CHANGELOG.md
checksum:
@@ -99,6 +273,17 @@ steps:
- sha1
- crc32
- name: "Trigger update server reindex"
image: hfdj/fztools
pull: never
environment:
UPD_KEY:
from_secret: git_update_serv_token
UPD_URL:
from_secret: git_update_server_url
commands:
- curl -X POST -F 'key='$UPD_KEY'' $UPD_URL
- name: "Send files to telegram"
image: appleboy/drone-telegram
settings:
@@ -113,30 +298,71 @@ steps:
Version: {{build.tag}}
[-Github-](https://github.com/Eng1n33r/flipperzero-firmware/releases/tag/${DRONE_TAG})
[-> Sponsor our project](https://boosty.to/mmxdev)
[-Install via Web Updater-](https://my.flipp.dev/?url=https://unleashedflip.com/builds/flipper-z-f7-update-${DRONE_TAG}.tgz&channel=dev-cfw&version=${DRONE_TAG})"
[-Github - Changelog-](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/${DRONE_TAG})
[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)
[-Download latest extra apps pack-](https://github.com/xMasterX/all-the-plugins/releases/latest)
[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/${DRONE_TAG}/flipper-z-f7-update-${DRONE_TAG}.tgz&channel=release-cfw&version=${DRONE_TAG})
[-Version with only main apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_TAG}c.tgz&channel=release-cfw&version=${DRONE_TAG}c)
[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-${DRONE_TAG}n.tgz&channel=release-cfw&version=${DRONE_TAG}n)
[-Version with RGB patch - only for hardware mod! - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_TAG}r.tgz&channel=release-cfw&version=${DRONE_TAG}r)
[-Version with RGB patch - only for hardware mod! - Direct download-](https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_TAG}r.tgz)
[-Version with Extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_TAG}e.tgz&channel=release-cfw&version=${DRONE_TAG}e)"
document:
- artifacts-default/flipper-z-f7-update-${DRONE_TAG}.tgz
- ${DRONE_TAG}/flipper-z-f7-update-${DRONE_TAG}.tgz
- name: "Send discord notification"
image: appleboy/drone-discord
image: hfdj/fztools
pull: never
environment:
DISCORD_WEBHOOK:
from_secret: dis_release_webhook
commands:
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
- chmod +x ./discord.sh
- ./discord.sh --text 'New Unleashed firmware released!\n\nVersion - '${DRONE_TAG}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[[Github - Changelog]](https://github.com/DarkFlippers/unleashed-firmware/releases/tag/'${DRONE_TAG}')\n\n[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)\n\n[-Download latest extra apps pack-](https://github.com/xMasterX/all-the-plugins/releases/latest)\n\n[-Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/'${DRONE_TAG}'/flipper-z-f7-update-'${DRONE_TAG}'.tgz&channel=release-cfw&version='${DRONE_TAG}')\n\n[-Version with only main apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'c.tgz&channel=release-cfw&version='${DRONE_TAG}'c)\n\n[-Version without custom animations - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_no_anim/flipper-z-f7-update-'${DRONE_TAG}'n.tgz&channel=release-cfw&version='${DRONE_TAG}'n)\n\n[-Version with RGB patch - only for hardware mod! - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'r.tgz&channel=release-cfw&version='${DRONE_TAG}'r)\n\n[-Version with RGB patch - only for hardware mod! - Direct download-](https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'r.tgz)\n\n[-Version with Extra apps - Install FW via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_TAG}'e.tgz&channel=release-cfw&version='${DRONE_TAG}'e)'
- name: "Send clean build to telegram"
image: appleboy/drone-telegram
settings:
webhook_id:
from_secret: ds_wh_id
webhook_token:
from_secret: ds_wh_token
message: "New Unleashed firmware released!
token:
from_secret: tgtoken
to:
from_secret: tgid
format: markdown
message: "Build with only main apps:"
document:
- flipper-z-f7-update-${DRONE_TAG}c.tgz
Version: {{build.tag}}
[[Github]](https://github.com/Eng1n33r/flipperzero-firmware/releases/tag/${DRONE_TAG})
[-Install via Web Updater-](https://my.flipp.dev/?url=https://unleashedflip.com/builds/flipper-z-f7-update-${DRONE_TAG}.tgz&channel=dev-cfw&version=${DRONE_TAG})"
- name: "Send extra pack build to telegram"
image: appleboy/drone-telegram
settings:
token:
from_secret: tgtoken
to:
from_secret: tgid
format: markdown
message: "Build with extra apps pack:"
document:
- flipper-z-f7-update-${DRONE_TAG}e.tgz
trigger:
event:
@@ -144,3 +370,302 @@ trigger:
node:
typ: haupt
---
kind: pipeline
type: docker
name: "Dev build"
platform:
os: linux
arch: amd64
steps:
- name: "Update submodules"
image: alpine/git
commands:
- git submodule sync
- git -c protocol.version=2 submodule update --init --force --recursive --jobs 4
- git submodule foreach git config --local gc.auto 0
- git log -1 --format='%H'
- name: "Build dev clean"
image: hfdj/fztools
pull: never
commands:
- export DIST_SUFFIX=${DRONE_BUILD_NUMBER}c
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -rf applications/main/clock_app/resources/apps/
- rm -rf build/
- rm -rf dist/
- rm -rf .sconsign.dblite
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-clean
- mv dist/f7-C/* artifacts-clean/
- ls -laS artifacts-clean
- ls -laS artifacts-clean/f7-update-${DRONE_BUILD_NUMBER}c
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build dev default"
image: hfdj/fztools
pull: never
commands:
- export DIST_SUFFIX=${DRONE_BUILD_NUMBER}
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-base.tgz
- tar zxvf all-the-apps-base.tgz
- cp -R base_pack_build/artifacts-base/* applications/main/clock_app/resources/apps/
- cp -R base_pack_build/apps_data/* applications/main/clock_app/resources/apps_data/
- rm -rf base_pack_build
- rm -rf all-the-apps-base.tgz
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-default
- mv dist/f7-C/* artifacts-default/
- ls -laS artifacts-default
- ls -laS artifacts-default/f7-update-${DRONE_BUILD_NUMBER}
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build dev with extra apps"
image: hfdj/fztools
pull: never
commands:
- wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-extra.tgz
- tar zxvf all-the-apps-extra.tgz
- cp -R extra_pack_build/artifacts-extra/* applications/main/clock_app/resources/apps/
- rm -rf extra_pack_build
- export DIST_SUFFIX=${DRONE_BUILD_NUMBER}e
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-extra-apps
- mv dist/f7-C/* artifacts-extra-apps/
- ls -laS artifacts-extra-apps
- ls -laS artifacts-extra-apps/f7-update-${DRONE_BUILD_NUMBER}e
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Build dev with rgb patch"
image: hfdj/fztools
pull: never
commands:
- git apply .ci_files/rgb.patch
- export DIST_SUFFIX=${DRONE_BUILD_NUMBER}r
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw-rgb
- export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-rgb-patch
- mv dist/f7-C/* artifacts-rgb-patch/
- ls -laS artifacts-rgb-patch
- ls -laS artifacts-rgb-patch/f7-update-${DRONE_BUILD_NUMBER}r
environment:
FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link
- name: "Bundle self-update packages"
image: kramos/alpine-zip
commands:
- cp artifacts-extra-apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz .
- cp artifacts-rgb-patch/flipper-z-f7-update-${DRONE_BUILD_NUMBER}r.tgz .
- cp artifacts-clean/flipper-z-f7-update-${DRONE_BUILD_NUMBER}c.tgz .
- cp artifacts-default/flipper-z-f7-update-${DRONE_BUILD_NUMBER}.tgz .
- rm -rf artifacts-default/f7-update-${DRONE_BUILD_NUMBER}
- ls -laS artifacts-default
- mv artifacts-default/ dev
- ls -laS dev
- name: "Clean dev folder"
image: appleboy/drone-ssh:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
command_timeout: 30s
script:
- cd web/unleashedflip.com/public_html/fw/dev && rm -f ./*
- name: "Upload default to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_new
source:
- dev/*.tgz
- dev/*.zip
- dev/*.json
- dev/*.elf
- dev/*.dfu
- dev/*.bin
- name: "Upload extra apps version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz
- name: "Upload rgb patch version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_BUILD_NUMBER}r.tgz
- name: "Upload clean version to updates srv"
image: appleboy/drone-scp:linux-amd64
settings:
host:
from_secret: dep_host
username:
from_secret: dep_user
password:
from_secret: dep_passwd
port:
from_secret: dep_port
target:
from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_BUILD_NUMBER}c.tgz
- name: "Trigger update server reindex"
image: hfdj/fztools
pull: never
environment:
UPD_KEY:
from_secret: git_update_serv_token
UPD_URL:
from_secret: git_update_server_url
commands:
- curl -X POST -F 'key='$UPD_KEY'' $UPD_URL
- name: "Send message to telegram"
image: appleboy/drone-telegram
settings:
token:
from_secret: tgtoken
to:
from_secret: tgid_dev
format: markdown
message: "Unleashed firmware dev build successful!
Build: {{build.number}}
Commit: https://github.com/DarkFlippers/unleashed-firmware/commit/{{commit.sha}}
[-> Sponsor our project](https://boosty.to/mmxdev)
[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-${DRONE_BUILD_NUMBER}.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER})
[-Version with only main apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}c.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER}c)
[-Version with RGB patch - only for hardware mod! - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}r.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER}r)
[-Version with RGB patch - only for hardware mod! - Direct download-](https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}r.tgz)
[-Version with Extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz&channel=dev-cfw&version=${DRONE_BUILD_NUMBER}e)"
- name: "Send build to telegram"
image: appleboy/drone-telegram
settings:
token:
from_secret: tgtoken
to:
from_secret: tgid_dev
format: markdown
message: "Regular Build:"
document:
- dev/flipper-z-f7-update-${DRONE_BUILD_NUMBER}.tgz
- name: "Send clean build to telegram"
image: appleboy/drone-telegram
settings:
token:
from_secret: tgtoken
to:
from_secret: tgid_dev
format: markdown
message: "Clean (Main apps only) Build:"
document:
- flipper-z-f7-update-${DRONE_BUILD_NUMBER}c.tgz
- name: "Send extra pack build to telegram"
image: appleboy/drone-telegram
settings:
token:
from_secret: tgtoken
to:
from_secret: tgid_dev
format: markdown
message: "Build with extra apps pack:"
document:
- flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz
- name: "Send discord notification"
image: hfdj/fztools
pull: never
environment:
DISCORD_WEBHOOK:
from_secret: dis_dev_webhook
commands:
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
- chmod +x ./discord.sh
- ./discord.sh --text 'Unleashed firmware dev build successful!\n\nBuild - '${DRONE_BUILD_NUMBER}'\n\nCommit - https://github.com/DarkFlippers/unleashed-firmware/commit/'${DRONE_COMMIT_SHA}'\n\n[-> Sponsor our project](https://boosty.to/mmxdev)\n\n[-Version with Extra apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'e.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'e)\n\n[-Version with only main apps - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'c.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'c)\n\n[-Version with RGB patch - only for hardware mod! - Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'r.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}'r)\n\n[-Version with RGB patch - only for hardware mod! - Direct download-](https://unleashedflip.com/fw_extra_apps/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'r.tgz)\n\n[-Install via Web Updater-](https://lab.flipper.net/?url=https://unleashedflip.com/fw/dev/flipper-z-f7-update-'${DRONE_BUILD_NUMBER}'.tgz&channel=dev-cfw&version='${DRONE_BUILD_NUMBER}')'
trigger:
branch:
- dev
event:
- push
node:
typ: haupt

5
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,5 @@
# Default
* @xMasterX
# Assets
/assets/resources/infrared/assets/ @amec0e @Leptopt1los @xMasterX

7
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
patreon: mmxdev
custom:
[
"https://boosty.to/mmxdev",
"https://pay.cloudtips.ru/p/7b3e9d65",
"https://yoomoney.ru/fundraise/XA49mgQLPA0.221209",
]

View File

@@ -4,5 +4,5 @@ contact_links:
url: https://t.me/flipperzero_unofficial
about: Unofficial Telegram chat
- name: Discord
url: https://discord.gg/58D6E8BtTU
url: https://discord.unleashedflip.com
about: Unofficial Discord Community

114
.github/workflows/codeql.yml vendored Normal file
View File

@@ -0,0 +1,114 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
run-name: "CodeQL Analyze ${{ github.ref_name }} by @${{ github.ACTOR }}"
on:
push:
branches: ["dev"]
workflow_dispatch:
jobs:
analyze:
name: Analyze
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners
# Consider using larger runners for possible analysis time improvements.
runs-on: [ "ubuntu-latest" ]
timeout-minutes: 60
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: ["cpp"]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
env:
PATH_SARIF_DIR: ".github/results.sarif"
PATH_SARIF_FILE: ".github/results.sarif/${{ matrix.language }}.sarif"
FBT_NO_SYNC: 0
DIST_SUFFIX: "codeql"
WORKFLOW_BRANCH_OR_TAG: release-cfw
LANG_CATEGORY: "/language:${{matrix.language}}"
steps:
- name: Checkout Firmware Files
uses: actions/checkout@v3
with:
clean: "true"
submodules: "true"
fetch-depth: "0"
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
setup-python-dependencies: true
- name: Resolve CodeQL Build Env
uses: github/codeql-action/resolve-environment@v2
with:
language: ${{ matrix.language }}
#debug: true
- name: Build Firmware
shell: bash
if: ${{ success() }}
run: |
./fbt COMPACT=1 DEBUG=0 FBT_NO_SYNC=${{ env.FBT_NO_SYNC }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
if: ${{ success() }}
with:
threads: 4
category: "${{ env.LANG_CATEGORY }}"
output: "${{ env.PATH_SARIF_DIR }}"
upload-database: false
upload: "failure-only" # disable the upload here - we will upload in a different action
- name: Filter dirs for SARIF
uses: advanced-security/filter-sarif@v1
if: ${{ success() }}
with:
# filter out all test files unless they contain a sql-injection vulnerability
patterns: |
-build/**
-dist/**
-toolchain/**
-lib/**
input: "${{ env.PATH_SARIF_FILE }}"
output: "${{ env.PATH_SARIF_FILE }}"
- name: Upload CodeQL SARIF
uses: github/codeql-action/upload-sarif@v2
if: ${{ success() }}
with:
category: "${{ env.LANG_CATEGORY }}"
sarif_file: "${{ env.PATH_SARIF_FILE }}"
# optional: for debugging the uploaded sarif
# - name: Upload loc as a Build Artifact
# uses: actions/upload-artifact@v3
# with:
# name: sarif-results
# path: sarif-results
# retention-days: 1

35
.gitignore vendored
View File

@@ -1,5 +1,8 @@
*~
*.swp
*.swo
*.gdb_history
*.old
# LSP
@@ -27,15 +30,9 @@ bindings/
.mxproject
Brewfile.lock.json
# Visual Studio Code
.vscode/
# legendary cmake's
build
CMakeLists.txt
# bundle output
dist
# Kate
.kateproject
.kateconfig
# kde
.directory
@@ -43,8 +40,21 @@ null.d
# SCons
.sconsign.dblite
# Visual Studio Code
/.vscode
# bundle output
/dist
/artifacts-default
/artifacts-ofw-anims
/artifacts-rgb-patch
/artifacts-extra-apps
/artifacts-clean
# SCons build dir
build/
/build
# Toolchain
/toolchain
@@ -55,3 +65,8 @@ openocd.log
# PVS Studio temporary files
.PVS-Studio/
PVS-Studio.log
*.PVS-Studio.*
.gdbinit
/fbt_options_local.py

26
.gitmodules vendored
View File

@@ -1,9 +1,6 @@
[submodule "lib/mlib"]
path = lib/mlib
url = https://github.com/P-p-H-d/mlib.git
[submodule "lib/STM32CubeWB"]
path = lib/STM32CubeWB
url = https://github.com/Flipper-Zero/STM32CubeWB.git
[submodule "lib/littlefs"]
path = lib/littlefs
url = https://github.com/littlefs-project/littlefs.git
@@ -13,6 +10,7 @@
[submodule "assets/protobuf"]
path = assets/protobuf
url = https://github.com/flipperdevices/flipperzero-protobuf.git
shallow = false
[submodule "lib/libusb_stm32"]
path = lib/libusb_stm32
url = https://github.com/flipperdevices/libusb_stm32.git
@@ -22,9 +20,25 @@
[submodule "lib/microtar"]
path = lib/microtar
url = https://github.com/amachronic/microtar.git
[submodule "lib/scons"]
path = lib/scons
url = https://github.com/SCons/scons.git
[submodule "lib/mbedtls"]
path = lib/mbedtls
url = https://github.com/Mbed-TLS/mbedtls.git
[submodule "lib/cxxheaderparser"]
path = lib/cxxheaderparser
url = https://github.com/robotpy/cxxheaderparser.git
[submodule "lib/heatshrink"]
path = lib/heatshrink
url = https://github.com/flipperdevices/heatshrink.git
[submodule "lib/st_cmsis_device_wb"]
path = lib/stm32wb_cmsis
url = https://github.com/STMicroelectronics/cmsis_device_wb
[submodule "lib/stm32wbxx_hal_driver"]
path = lib/stm32wb_hal
url = https://github.com/STMicroelectronics/stm32wbxx_hal_driver
[submodule "lib/stm32wb_copro"]
path = lib/stm32wb_copro
url = https://github.com/flipperdevices/stm32wb_copro.git
[submodule "subghz_remote"]
path = applications/main/subghz_remote
url = https://github.com/DarkFlippers/SubGHz_Remote.git
branch = ufw_main_app

View File

@@ -1,10 +1,12 @@
# MLib macros we can't do much about.
//-V:M_LET:1048,1044
//-V:M_EACH:1048,1044
//-V:ARRAY_DEF:760,747,568,776,729,712,654
//-V:LIST_DEF:760,747,568,712,729,654,776
//-V:BPTREE_DEF2:779,1086,557,773,512
//-V:DICT_DEF2:779,524,776,760,1044,1001,729,590,568,747,685
//-V:ALGO_DEF:1048,747,1044
//-V:TUPLE_DEF2:524,590,1001,760
# Non-severe malloc/null pointer deref warnings
//-V::522:2,3
@@ -15,8 +17,33 @@
# Potentially null argument warnings
//-V:memset:575
//-V:memcpy:575
//-V:memcmp:575
//-V:strlen:575
//-V:strcpy:575
//-V:strncpy:575
//-V:strchr:575
# For loop warning on M_FOREACH
//-V:for:1044
# Bitwise OR
//-V:bit:792
# Do not complain about similar code
//-V::525
# Common embedded development pointer operations
//-V::566
//-V::1032
# Warnings about length mismatch
//-V:property_value_out:666
# Model-related warnings
//-V:with_view_model:1044,1048
# Functions that always return the same error code
//-V:picopass_device_decrypt:1048
# Examples
//V_EXCLUDE_PATH applications/examples/

View File

@@ -1 +1 @@
--rules-config .pvsconfig -e lib/fatfs -e lib/fnv1a-hash -e lib/FreeRTOS-Kernel -e lib/heatshrink -e lib/libusb_stm32 -e lib/littlefs -e lib/mbedtls -e lib/micro-ecc -e lib/microtar -e lib/mlib -e lib/qrcode -e lib/ST25RFAL002 -e lib/STM32CubeWB -e lib/u8g2 -e */arm-none-eabi/*
--ignore-ccache -C gccarm --rules-config .pvsconfig -e lib/cmsis_core -e lib/fatfs -e lib/fnv1a-hash -e lib/FreeRTOS-Kernel -e lib/heatshrink -e lib/libusb_stm32 -e lib/littlefs -e lib/mbedtls -e lib/micro-ecc -e lib/microtar -e lib/mlib -e lib/qrcode -e lib/stm32wb_cmsis -e lib/stm32wb_copro -e lib/stm32wb_hal -e lib/u8g2 -e lib/nanopb -e */arm-none-eabi/*

9
.vscode/.gitignore vendored
View File

@@ -1,4 +1,5 @@
./c_cpp_properties.json
./launch.json
./settings.json
./tasks.json
/c_cpp_properties.json
/extensions.json
/launch.json
/settings.json
/tasks.json

View File

@@ -1,32 +0,0 @@
{
"configurations": [
{
"name": "Win32",
"compilerPath": "${workspaceFolder}/toolchain/i686-windows/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
},
{
"name": "Linux",
"compilerPath": "${workspaceFolder}/toolchain/x86_64-linux/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
},
{
"name": "Mac",
"compilerPath": "${workspaceFolder}/toolchain/x86_64-darwin/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
}
],
"version": 4
}

19
.vscode/example/clangd/extensions.json vendored Normal file
View File

@@ -0,0 +1,19 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"ms-python.black-formatter",
"llvm-vs-code-extensions.vscode-clangd",
"amiralizadeh9480.cpp-helper",
"marus25.cortex-debug",
"zxh404.vscode-proto3",
"augustocdias.tasks-shell-input"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
"twxs.cmake",
"ms-vscode.cpptools",
"ms-vscode.cmake-tools"
]
}

View File

@@ -0,0 +1,32 @@
{
"configurations": [
{
"name": "Win32",
"compilerPath": "${workspaceFolder}/toolchain/x86_64-windows/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
},
{
"name": "Linux",
"compilerPath": "${workspaceFolder}/toolchain/x86_64-linux/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
},
{
"name": "Mac",
"compilerPath": "${workspaceFolder}/toolchain/x86_64-darwin/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm",
"compileCommands": "${workspaceFolder}/build/latest/compile_commands.json",
"configurationProvider": "ms-vscode.cpptools",
"cStandard": "gnu17",
"cppStandard": "c++17"
}
],
"version": 4
}

View File

@@ -0,0 +1,20 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"ms-python.black-formatter",
"ms-vscode.cpptools",
"amiralizadeh9480.cpp-helper",
"marus25.cortex-debug",
"zxh404.vscode-proto3",
"augustocdias.tasks-shell-input",
"rioj7.command-variable"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
"llvm-vs-code-extensions.vscode-clangd",
"twxs.cmake",
"ms-vscode.cmake-tools"
]
}

View File

@@ -9,8 +9,12 @@
"type": "command",
"command": "shellCommand.execute",
"args": {
"command": "./fbt get_blackmagic",
"description": "Get Blackmagic device",
"useSingleResult": true,
"env": {
"PATH": "${workspaceFolder}${command:extension.commandvariable.envListSep}${env:PATH}"
},
"command": "fbt -s get_blackmagic",
"description": "Get Blackmagic device"
}
}
],
@@ -23,15 +27,21 @@
"type": "cortex-debug",
"servertype": "openocd",
"device": "stlink",
"svdFile": "./debug/STM32WB55_CM4.svd",
"svdFile": "./scripts/debug/STM32WB55_CM4.svd",
// If you're debugging early in the boot process, before OS scheduler is running,
// you have to comment out the following line.
"rtos": "FreeRTOS",
"configFiles": [
"interface/stlink.cfg",
"./debug/stm32wbx.cfg",
"./scripts/debug/stm32wbx.cfg",
],
"postAttachCommands": [
// "attach 1",
"compare-sections",
"source scripts/debug/flipperversion.py",
"fw-version",
// "compare-sections",
"source scripts/debug/flipperapps.py",
"fap-set-debug-elf-root build/latest/.extapps",
// "source scripts/debug/FreeRTOS/FreeRTOS.py",
]
// "showDevDebugOutput": "raw",
},
@@ -43,14 +53,18 @@
"type": "cortex-debug",
"servertype": "external",
"gdbTarget": "${input:BLACKMAGIC}",
"svdFile": "./debug/STM32WB55_CM4.svd",
"svdFile": "./scripts/debug/STM32WB55_CM4.svd",
"rtos": "FreeRTOS",
"postAttachCommands": [
"monitor swdp_scan",
"attach 1",
"set confirm off",
"set mem inaccessible-by-default off",
"compare-sections",
"source scripts/debug/flipperversion.py",
"fw-version",
"source scripts/debug/flipperapps.py",
"fap-set-debug-elf-root build/latest/.extapps",
// "compare-sections",
]
// "showDevDebugOutput": "raw",
},
@@ -63,18 +77,37 @@
"servertype": "jlink",
"interface": "swd",
"device": "STM32WB55RG",
"svdFile": "./debug/STM32WB55_CM4.svd",
"svdFile": "./scripts/debug/STM32WB55_CM4.svd",
"rtos": "FreeRTOS",
"postAttachCommands": [
"source scripts/debug/flipperversion.py",
"fw-version",
"source scripts/debug/flipperapps.py",
"fap-set-debug-elf-root build/latest/.extapps",
]
// "showDevDebugOutput": "raw",
},
{
"name": "fbt debug",
"type": "python",
"request": "launch",
"program": "./lib/scons/scripts/scons.py",
"args": [
"sdk"
]
"name": "Attach FW (DAP)",
"cwd": "${workspaceFolder}",
"executable": "./build/latest/firmware.elf",
"request": "attach",
"type": "cortex-debug",
"servertype": "openocd",
"device": "cmsis-dap",
"svdFile": "./scripts/debug/STM32WB55_CM4.svd",
"rtos": "FreeRTOS",
"configFiles": [
"interface/cmsis-dap.cfg",
"./scripts/debug/stm32wbx.cfg",
],
"postAttachCommands": [
"source scripts/debug/flipperversion.py",
"fw-version",
"source scripts/debug/flipperapps.py",
"fap-set-debug-elf-root build/latest/.extapps",
],
// "showDevDebugOutput": "raw",
},
{
"name": "python debug",

View File

@@ -6,17 +6,25 @@
"cortex-debug.enableTelemetry": false,
"cortex-debug.variableUseNaturalFormat": true,
"cortex-debug.showRTOS": true,
"cortex-debug.armToolchainPath.windows": "${workspaceFolder}/toolchain/i686-windows/bin",
"cortex-debug.armToolchainPath.windows": "${workspaceFolder}/toolchain/x86_64-windows/bin",
"cortex-debug.armToolchainPath.linux": "${workspaceFolder}/toolchain/x86_64-linux/bin",
"cortex-debug.armToolchainPath.osx": "${workspaceFolder}/toolchain/x86_64-darwin/bin",
"cortex-debug.openocdPath.windows": "${workspaceFolder}/toolchain/i686-windows/openocd/bin/openocd.exe",
"cortex-debug.openocdPath.windows": "${workspaceFolder}/toolchain/x86_64-windows/openocd/bin/openocd.exe",
"cortex-debug.openocdPath.linux": "${workspaceFolder}/toolchain/x86_64-linux/openocd/bin/openocd",
"cortex-debug.openocdPath.osx": "${workspaceFolder}/toolchain/x86_64-darwin/openocd/bin/openocd",
"cortex-debug.gdbPath.windows": "${workspaceFolder}/toolchain/x86_64-windows/bin/arm-none-eabi-gdb-py.bat",
"cortex-debug.gdbPath.linux": "${workspaceFolder}/toolchain/x86_64-linux/bin/arm-none-eabi-gdb-py",
"cortex-debug.gdbPath.osx": "${workspaceFolder}/toolchain/x86_64-darwin/bin/arm-none-eabi-gdb-py",
"editor.formatOnSave": true,
"files.associations": {
"*.scons": "python",
"SConscript": "python",
"SConstruct": "python",
"*.fam": "python",
}
},
"clangd.arguments": [
// We might be able to tighten this a bit more to only include the correct toolchain.
"--query-driver=**",
"--compile-commands-dir=${workspaceFolder}/build/latest"
]
}

View File

@@ -4,41 +4,41 @@
"version": "2.0.0",
"tasks": [
{
"label": "[Release] Build",
"label": "[Release] Build Firmware",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0"
},
{
"label": "[Debug] Build",
"label": "[Debug] Build Firmware",
"group": "build",
"type": "shell",
"command": "./fbt"
},
{
"label": "[Release] Flash (ST-Link)",
"label": "[FBT] Format",
"group": "build",
"type": "shell",
"command": "./fbt format"
},
{
"label": "[FBT] Clear",
"group": "build",
"type": "shell",
"command": "./fbt -c"
},
{
"label": "[Release] Flash (SWD)",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 FORCE=1 flash"
},
{
"label": "[Debug] Flash (ST-Link)",
"label": "[Debug] Flash (SWD)",
"group": "build",
"type": "shell",
"command": "./fbt FORCE=1 flash"
},
{
"label": "[Release] Flash (blackmagic)",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 FORCE=1 flash_blackmagic"
},
{
"label": "[Debug] Flash (blackmagic)",
"group": "build",
"type": "shell",
"command": "./fbt FORCE=1 flash_blackmagic"
},
{
"label": "[Release] Flash (JLink)",
"group": "build",
@@ -93,11 +93,103 @@
"type": "shell",
"command": "./fbt FIRMWARE_APP_SET=unit_tests FORCE=1 flash_usb"
},
{
"label": "[Debug] Flash (USB, with resources)",
"group": "build",
"type": "shell",
"command": "./fbt FORCE=1 flash_usb_full"
},
{
"label": "[Release] Flash (USB, with resources)",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 FORCE=1 flash_usb_full"
},
{
"label": "[Debug] Create PVS-Studio report",
"group": "build",
"type": "shell",
"command": "./fbt firmware_pvs"
},
{
"label": "[Debug] Build FAPs",
"group": "build",
"type": "shell",
"command": "./fbt fap_dist"
},
{
"label": "[Release] Build FAPs",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 fap_dist"
},
{
"label": "[Debug] Build App",
"group": "build",
"type": "shell",
"command": "./fbt build APPSRC=${relativeFileDirname}"
},
{
"label": "[Release] Build App",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 build APPSRC=${relativeFileDirname}"
},
{
"label": "[Debug] Launch App on Flipper",
"group": "build",
"type": "shell",
"command": "./fbt launch APPSRC=${relativeFileDirname}"
},
{
"label": "[Release] Launch App on Flipper",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 launch APPSRC=${relativeFileDirname}"
},
{
"label": "[Debug] Launch App on Flipper with Serial Console",
"dependsOrder": "sequence",
"group": "build",
"dependsOn": [
"[Debug] Launch App on Flipper",
"Serial Console"
]
},
{
"label": "[Debug] Build and upload all FAPs to Flipper over USB",
"group": "build",
"type": "shell",
"command": "./fbt fap_deploy"
},
{
"label": "[Release] Build and upload all FAPs to Flipper over USB",
"group": "build",
"type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 fap_deploy"
},
{
// Press Ctrl+] to quit
"label": "Serial Console",
"type": "shell",
"command": "./fbt cli",
"group": "none",
"isBackground": true,
"options": {
"env": {
"FBT_NO_SYNC": "0"
}
},
"presentation": {
"reveal": "always",
"revealProblems": "never",
"showReuseMessage": false,
"panel": "dedicated",
"focus": true,
"echo": true,
"close": true,
"group": "Logger"
}
}
]
}

View File

@@ -1,15 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"ms-python.black-formatter",
"ms-vscode.cpptools",
"amiralizadeh9480.cpp-helper",
"marus25.cortex-debug",
"zxh404.vscode-proto3",
"augustocdias.tasks-shell-input"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": []
}

View File

@@ -1,26 +1,62 @@
### New changes
* Fix picopass plugin (revert OFW PR 1701)
* Updated universal remote assets (by @Amec0e)
### Changes from previous release
* Add SubGhz Bruteforce plugin (by @Ganapati & @xMasterX) (PR #57) - saving functionality and many fixes by @xMasterX
* Fix GUI and add new icon in LF-RFID App (icon by @Svaarich)
* GUI Changes to LFRFID Fuzzer
* New Battery info (from @theeogflip) (PR #60)
* NRFSniff: Adds unique count display (by @Graf3x) (PR #56)
* Updated universal remote assets (by @Amec0e)
* OFW: RFID app port to plain C
* OFW: SubGhz: fix decoder keeloq
* OFW PR: Picopass: detect and show SE / SIO - OFW PR 1701 (by pcunning)
* OFW PR: Fix MFClassic 4k reading - OFW PR 1712 (by Astrrra)
* OFW: SubGhz: handle missing key in cryptostore. Lib: lower default display contrast.
* OFW: Furi: wait for timer wind down in destructor
## New changes
* SubGHz: Add 4 more systems to Add Manually (untested!)
* SubGHz: Add Manually fixes
* SubGHz: Added NiceFlor-S to ignore options, removed colons. (by @G2Dolphin | PR #620)
* Misc code cleanup
* RGB: Fix white color on reboot, move settings, add custom color option
* **BLE Spam app** updated to latest version (Android, Windows support) (by @Willy-JL) -> (app can be found in builds ` `, `e`, `n`, `r`)
* OFW: Fix double arrows and add proper indication
* OFW: SubGHz: add manually fix 12-bits is 0xFFF (or 0xFF0) CAME/NICE 12-bit
* OFW: Fix various crashes if debug libraries used
**Note: To avoid issues prefer installing using web updater or by self update package, all needed assets will be installed**
----
Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip` or `.tgz` for iOS mobile app
[-> How to install firmware](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)
[-> Download qFlipper (official link)](https://flipperzero.one/update)
## Please support development of the project
|Service|Remark|Link/Wallet|
|-|-|-|
|**Patreon**||https://patreon.com/mmxdev|
|**Boosty**|patreon alternative|https://boosty.to/mmxdev|
|cloudtips|only RU payments accepted|https://pay.cloudtips.ru/p/7b3e9d65|
|YooMoney|only RU payments accepted|https://yoomoney.ru/fundraise/XA49mgQLPA0.221209|
|USDT|(TRC20)|`TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`|
|BCH||`qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`|
|ETH|(BSC/ERC20-Tokens)|`darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)|
|BTC||`bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`|
|DOGE||`D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`|
|LTC||`ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`|
|XMR|(Monero)| `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`|
|TON||`EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`|
#### Thanks to our sponsors:
callmezimbra, Quen0n, MERRON, grvpvl (lvpvrg), art_col, ThurstonWaffles, Moneron, UterGrooll, LUCFER, Northpirate, zloepuzo, T.Rat, Alexey B., ionelife, ...
and all other great people who supported our project and me (xMasterX), thanks to you all!
## **Recommended update option - Web Updater**
### What `n`, `r`, `e`, ` `, `c` means? What I need to download if I don't want to use Web updater?
What build I should download and what this name means - `flipper-z-f7-update-(version)(n / r / e / c).tgz` ? <br>
`flipper-z` = for Flipper Zero device<br>
`f7` = Hardware version - same for all flipper zero devices<br>
`update` = Update package, contains updater, all assets (plugins, IR libs, etc.), and firmware itself<br>
`(version)` = Firmware version<br>
| Designation | 3 Custom Animation | [Base Apps](https://github.com/xMasterX/all-the-plugins#default-pack) | [Extra Apps](https://github.com/xMasterX/all-the-plugins#extra-pack) | ⚠RGB mode* |
|-----|:---:|:---:|:---:|:---:|
| ` ` | ✅ | ✅ | | |
| `c` | ✅ | | | |
| `n` | | ✅ | | |
| `e` | ✅ | ✅ | ✅ | |
| `r` | ✅ | ✅ | ✅ | ✅ |
This is [hardware mod](https://github.com/quen0n/flipperzero-firmware-rgb#readme), works only on modded flippers! do not install on non modded device!
Firmware Self-update package (update from microSD) - `flipper-z-f7-update-(version).tgz` for mobile app / qFlipper / web<br>
Archive of `scripts` folder (contains scripts for FW/plugins development) - `flipper-z-any-scripts-(version).tgz`<br>
SDK files for plugins development and uFBT - `flipper-z-f7-sdk-(version).zip`
DFU for update using qFlipper - `flipper-z-f7-full-(version).dfu`
If using DFU update method, download this archive and unpack it to your microSD, replacing all files except files you have edited manually -
`sd-card-(version).zip`

View File

@@ -3,15 +3,15 @@
Nice to see you reading this document, we really appreciate it.
As all documents of this kind it's unable to cover everything.
But it will cover general rules that we enforcing on PR review.
But it will cover general rules that we are enforcing on PR review.
Also we already have automatic rules checking and formatting,
but it got it's limitations and this guide is still mandatory.
Also, we already have automatic rules checking and formatting,
but it got its limitations and this guide is still mandatory.
Some part of this project do have it's own naming and coding guides.
Some part of this project do have its own naming and coding guides.
For example: assets. Take a look into `ReadMe.md` in assets folder for more details.
Also 3rd party libraries are none of our concern.
Also, 3rd party libraries are none of our concern.
And yes, this set is not final and we are open to discussion.
If you want to add/remove/change something here please feel free to open new ticket.
@@ -30,7 +30,7 @@ Our guide is inspired by, but not claiming to be compatible with:
Code we write is intended to be public.
Avoid one-liners from hell and keep code complexity under control.
Try to make code self explanatory and add comments if needed.
Try to make code self-explanatory and add comments if needed.
Leave references to standards that you are implementing.
Use project wiki to document new/reverse engineered standards.
@@ -48,11 +48,11 @@ Almost everything in flipper firmware is built around this concept.
# C coding style
- Tab is 4 spaces
- Use `fbt format` to reformat source code and check style guide before commit
- Use `./fbt format` to reformat source code and check style guide before commit
## Naming
### Type names are CamelCase
### Type names are PascalCase
Examples:
@@ -89,7 +89,7 @@ Enforced by linter.
Suffixes:
- `alloc` - allocate and init instance. C style constructor. Returns pointer to instance.
- `free` - deinit and release instance. C style destructor. Takes pointer to instance.
- `free` - de-init and release instance. C style destructor. Takes pointer to instance.
# C++ coding style

View File

@@ -1,21 +0,0 @@
$(info +-------------------------------------------------+)
$(info | |)
$(info | Hello, this is Flipper team speaking! |)
$(info | |)
$(info | We've migrated to new build system |)
$(info | It's nice and based on scons |)
$(info | |)
$(info | Crash course: |)
$(info | |)
$(info | `./fbt` |)
$(info | `./fbt flash` |)
$(info | `./fbt debug` |)
$(info | |)
$(info | More details in documentation/fbt.md |)
$(info | |)
$(info | Also Please leave your feedback here: |)
$(info | https://flipp.dev/4RDu |)
$(info | or |)
$(info | https://flipp.dev/2XM8 |)
$(info | |)
$(info +-------------------------------------------------+)

293
ReadMe.md
View File

@@ -1,153 +1,268 @@
<h3 align="center">
<a href="https://github.com/Eng1n33r/flipperzero-firmware">
<a href="https://github.com/DarkFlippers/unleashed-firmware">
<img src="https://user-images.githubusercontent.com/10697207/186202043-26947e28-b1cc-459a-8f20-ffcc7fc0c71c.png" align="center" alt="fzCUSTOM" border="0">
</a>
</h3>
<div align="center" id="badges">
<a href="https://discord.unleashedflip.com">
<img src="https://img.shields.io/discord/937479784148115456?style=flat-square&logo=discord&label=Discord&color=%237289DA&link=https%3A%2F%2Fdiscord.unleashedflip.com%2F" alt="Discord server"/>
</a>
<a href="https://t.me/flipperzero_unofficial">
<img src="https://img.shields.io/endpoint?label=EN%20Channel&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dflipperzero_unofficial" alt="EN TG channel"/>
</a>
<a href="https://t.me/flipperzero_unofficial_ru">
<img src="https://img.shields.io/endpoint?label=RU%20Channel&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dflipperzero_unofficial_ru" alt="RU TG channel"/>
</a>
<a href="https://t.me/flipperzero_unofficial_ua">
<img src="https://img.shields.io/endpoint?label=UA%20Channel&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dflipperzero_unofficial_ua" alt="UA TG channel"/>
</a>
</div>
### Welcome to Flipper Zero Unleashed Firmware repo!
Our goal is to make any features possible in this device without any limitations!
### Welcome to the Flipper Zero Unleashed Firmware repo!
Please help us implement emulation for all subghz dynamic (rolling code) protocols!
#### **This firmware is a fork from** [flipperdevices/flipperzero-firmware](https://github.com/flipperdevices/flipperzero-firmware)
<br>
### This software is for experimental purposes only and is not meant for any illegal activity/purposes. <br> We do not condone illegal activity and strongly encourage keeping transmissions to legal/valid uses allowed by law. <br> Also this software is made without any support from Flipper Devices and in no way related to official devs.
### Most stable custom firmware focused on new features and improvements of original firmware components, with almost no UI changes
<br>
Our Discord Community:
<br>
<a href="https://discord.gg/58D6E8BtTU"><img src="https://discordapp.com/api/guilds/937479784148115456/widget.png?style=banner4" alt="Unofficial Discord Community"></a>
##### This software is for experimental purposes only and is not meant for any illegal activity/purposes. <br> We do not condone illegal activity and strongly encourage keeping transmissions to legal/valid uses allowed by law. <br> Also, this software is made without any support from Flipper Devices and is in no way related to the official devs.
<br>
<br>
<br>
## FAQ (frequently asked questions)
[Follow this link to find answers to most asked questions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/FAQ.md)
## Dev builds (unstable)
- https://dev.unleashedflip.com/
- https://t.me/kotnehleb
## Releases in Telegram
- https://t.me/unleashed_fw
# What's changed
* SubGHz regional TX restrictions removed
* SubGHz frequecy range can be extended in settings file (Warning: It can damage flipper's hardware)
* Many rolling code protocols now have the ability to save & send captured signals
* FAAC SLH (Spa) & BFT Mitto (secure with seed) manual creation
* Sub-GHz static code brute-force plugin
* LFRFID Fuzzer plugin
* Custom community plugins and games added
* Extra SubGHz frequencies + extra Mifare Classic keys
* Picopass/iClass plugin included in releases
* Recompiled IR TV Universal Remote for ALL buttons
* Universal remote for Projectors, Fans, A/Cs and Audio(soundbars, etc.)
* BadUSB keyboard layouts
* Customizable Flipper name
* Other small fixes and changes throughout
- **Sub-GHz** *lib & hal*
- Regional TX restrictions removed
- Extra Sub-GHz frequencies
- Frequency range can be extended in settings file (Warning: It can damage Flipper's hardware)
- Many rolling code [protocols](https://github.com/DarkFlippers/unleashed-firmware#current-modified-and-new-sub-ghz-protocols-list) now have the ability to save & send captured signals
- FAAC SLH (Spa) & BFT Mitto (keeloq secure with seed) manual creation
- External CC1101 module support [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307)
- **Sub-GHz** *Main App*
- Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
- New frequency analyzer [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43)
- Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
- Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79)
- New option to use timestamps + protocol name when you saving file, instead of random name - Enable in `Radio Settings -> Time in names = ON`
- Read mode UI improvements (shows time when signal was received) (by @wosk)
- External CC1101 module support (Hardware SPI used)
- **Hold right in received signal list to delete selected signal**
- **Custom buttons for Keeloq / Alutech AT4N / Nice Flor S / Somfy Telis / Security+ 2.0 / CAME Atomo** - now you can use arrow buttons to send signal with different button code
- `Add manually` menu extended with new protocols
- FAAC SLH, BFT Mitto / Somfy Telis / Nice Flor S / CAME Atomo, etc.. manual creation with programming new remote into receiver (use button 0xF for BFT Mitto, 0x8 (Prog) on Somfy Telis)
- Debug mode counter increase settings (+1 -> +5, +10, default: +1)
- Debug PIN output settings for protocol development
- **Sub-GHz apps** *by unleashed team*
- Sub-GHz Bruteforce - static code brute-force plugin |
- Time delay (between signals) setting (hold Up in main screen(says Up to Save)) + configure repeats in protocols list by pressing right button on selected protocol
- Load your own file and select bytes you want to bruteforce or use preconfigured options in protocols list
- Sub-GHz Remote - remote control for 5 sub-ghz files | bind one file for each button
- use the built-in constructor or make config file by following this [instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md)
- **Infrared**
- Recompiled IR TV Universal Remote for ALL buttons
- Universal remotes for Projectors, Fans, A/Cs and Audio(soundbars, etc.) -> Also always updated and verified by our team
- Infrared -> `RCA` Protocol
- Infrared -> Debug TX PIN output settings
- **NFC/RFID/iButton**
* LFRFID/iButton Fuzzer plugins
* Extra Mifare Classic keys
* `Add manually` -> Mifare Classic with custom UID
* Picopass/iClass plugin (now with emulation support!) included in releases
- **Quality of life & other features**
- Customizable Flipper name **Update! Now can be changed in Settings->Desktop** (by @xMasterX and @Willy-JL)
- Text Input UI element -> Cursor feature (by @Willy-JL)
- Byte Input Mini editor -> **Press UP** multiple times until the nibble editor appears
- Clock on Desktop -> `Settings -> Desktop -> Show Clock`
- Battery percentage display with different styles `Settings -> Desktop -> Battery View`
- More games in Dummy Mode -> click or hold any of arrow buttons
- Lock device with pin(or regular lock if pin not set) by holding UP button on main screen [(by an4tur0r)](https://github.com/DarkFlippers/unleashed-firmware/pull/107)
- **BadBT** plugin (BT version of BadKB) [(by Willy-JL, ClaraCrazy, XFW contributors)](https://github.com/ClaraCrazy/Flipper-Xtreme/tree/dev/applications/main/bad_kb) - (See in Applications->Tools) - (aka BadUSB via Bluetooth)
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
- Custom community plugins and games added + all known working apps can be downloaded in extra pack in every release
- Other small fixes and changes throughout
- See other changes in readme below
See changelog in releases for latest updates!
Also check the [changelog in releases](https://github.com/DarkFlippers/unleashed-firmware/releases) for latest updates!
### Current modified and new SubGHz protocols list:
- HCS101
- An-Motors
- CAME Atomo
- FAAC SLH (Spa) [External seed calculation required]
- BFT Mitto [External seed calculation required]
- Keeloq [Not ALL systems supported yet!]
- Nice Flor S
- Security+ v1 & v2
### Current modified and new Sub-GHz protocols list:
Thanks to Official team (to their SubGHz Developer, Skorp) for implementing decoders for these protocols in OFW.
Keeloq [Not ALL systems supported for decode or emulation yet!] - [Supported manufacturers list](https://0bin.net/paste/VwR2lNJY#WH9vnPgvcp7w6zVKucFCuNREKAcOij8KsJ6vqLfMn3b)
Encoders or sending made by @xMasterX:
- Nero Radio 57bit (+ 56bit encoder improvements)
- CAME 12bit/24bit encoder fixes (Fixes now merged in OFW)
- Keeloq: HCS101
- Keeloq: AN-Motors
- Keeloq: JCM Tech
- Keeloq: MHouse
- Keeloq: Nice Smilo
- Keeloq: DTM Neo
- Keeloq: FAAC RC,XT
- Keeloq: Mutancode
- Keeloq: Normstahl
- Keeloq: Beninca + Allmatic
- Keeloq: Stilmatic
- Keeloq: CAME Space
- Keeloq: Aprimatic (model TR and similar)
- Keeloq: Centurion Nova (thanks Carlos !)
Encoders or sending made by @Eng1n33r(first implementation in Q2 2022) & @xMasterX (current version):
- CAME Atomo -> Update! check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Nice Flor S -> How to create new remote - [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- FAAC SLH (Spa) -> Update!!! Check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Keeloq: BFT Mitto -> Update! Check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Star Line
- Security+ v1 & v2 (encoders was made in OFW)
## Support us so we can buy equipment and develop new features
* ETH/BSC/ERC20-Tokens: `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`
Encoders made by @assasinfil & @xMasterX:
- Somfy Telis -> How to create new remote - [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Somfy Keytis
- KingGates Stylo 4k
- Alutech AT-4N -> How to create new remote - [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Nice ON2E (Nice One) -> How to create new remote - [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
### Community apps included:
## Please support development of the project
The majority of this project is developed and maintained by me, @xMasterX.
I'm unemployed, and the only income I receive is from your donations.
Our team is small and the guys are working on this project as much as they can solely based on the enthusiasm they have for this project and the community.
- @gid9798 - SubGHz, Plugins, many other things
- @assasinfil - SubGHz protocols
- @Svaarich - UI design and animations
- @amec0e & @Leptopt1los - Infrared assets
- Community moderators in Telegram, Discord, and Reddit
- And of course our GitHub community. Your PRs are a very important part of this firmware and open-source development.
- RFID Fuzzer plugin [(by Ganapati)](https://github.com/Eng1n33r/flipperzero-firmware/pull/54) with some changes by xMasterX
- Sub-GHz bruteforce plugin [(by Ganapati & xMasterX)](https://github.com/Eng1n33r/flipperzero-firmware/pull/57)
- ESP8266 Deauther plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module)
- WiFi Scanner plugin [(by SequoiaSan)](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module)
- MultiConverter plugin [(by theisolinearchip)](https://github.com/theisolinearchip/flipperzero_stuff)
- WAV player plugin (fixed) [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player)
- UPC-A Barcode generator plugin [(by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator)
- GPIO: Sentry Safe plugin [(by H4ckd4ddy)](https://github.com/H4ckd4ddy/flipperzero-sentry-safe-plugin)
- ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-firmware-with-wifi-marauder-companion)
- NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker)
- Simple Clock (fixed) [(Original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61)
- UniversalRF Remix / Sub-GHz Remote [(by ESurge)](https://github.com/ESurge/flipperzero-firmware-unirfremix)[(updated and all protocol support added by darmiel & xMasterX)](https://github.com/darmiel/flipper-playlist/tree/feat/unirf-protocols)
- Tetris (with fixes) [(by jeffplang)](https://github.com/jeffplang/flipperzero-firmware/tree/tetris_game/applications/tetris_game)
- Spectrum Analyzer (with changes) [(by jolcese)](https://github.com/jolcese/flipperzero-firmware/tree/spectrum/applications/spectrum_analyzer) - [Ultra Narrow mode & scan channels non-consecutively](https://github.com/theY4Kman/flipperzero-firmware/commits?author=theY4Kman)
- Arkanoid (with fixes) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins)
- Tic Tac Toe (with fixes) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins)
The amount of work done on this project is huge and we need your support, no matter how large or small. Even if you just say, "Thank you Unleashed firmware developers!" somewhere. Doing so will help us continue our work and will help drive us to make the firmware better every time.
Also, regarding our releases, every build has and always will be free and open-source. There will be no paywall releases or closed-source apps within the firmware. As long as I am working on this project it will never happen.
You can support us by using links or addresses below:
|Service|Remark|Link/Wallet|
|-|-|-|
|**Patreon**||https://patreon.com/mmxdev|
|**Boosty**|patreon alternative|https://boosty.to/mmxdev|
|cloudtips|only RU payments accepted|https://pay.cloudtips.ru/p/7b3e9d65|
|YooMoney|only RU payments accepted|https://yoomoney.ru/fundraise/XA49mgQLPA0.221209|
|USDT|(TRC20)|`TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`|
|BCH||`qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`|
|ETH|(BSC/ERC20-Tokens)|`darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)|
|BTC||`bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`|
|DOGE||`D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`|
|LTC||`ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`|
|XMR|(Monero)| `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`|
|TON||`EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`|
### Other changes
## Community apps included
- BadUSB Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout)
- New frequency analyzer - [(by ClusterM)](https://github.com/ClusterM)
### [🎲 Download Extra plugins for Unleashed](https://github.com/xMasterX/all-the-plugins/releases/latest)
### [List of Extra pack](https://github.com/xMasterX/all-the-plugins/tree/dev#extra-pack) | [List of Base *(Deafult)* pack](https://github.com/xMasterX/all-the-plugins/tree/dev#default-pack)
See full list and sources here: [xMasterX/all-the-plugins](https://github.com/xMasterX/all-the-plugins/tree/dev)
### Official Flipper Zero Apps Catalog [web version](https://lab.flipper.net/apps) or mobile app
# Instructions
## [- How to install firmware](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/HowToInstall.md)
## First lock official docs [docs.flipper.net](https://docs.flipper.net/)
## [How to install](/documentation/HowToInstall.md) - [versions info](/CHANGELOG.md#recommended-update-option---web-updater): `n`,` `,`e`...
## Firmware & Development
## [- How to build firmware](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/HowToBuild.md)
### - **[How to build](/documentation/HowToBuild.md#how-to-build-by-yourself) | [Project-structure](#project-structure)**
## [- BadUSB: how to add new keyboard layouts](https://github.com/dummy-decoy/flipperzero_badusb_kl)
### - **CLion IDE** - How to setup workspace for flipper firmware development [by Savely Krasovsky](https://krasovs.ky/2022/11/01/flipper-zero-clion.html)
## [- How to change Flipper name](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/CustomFlipperName.md)
### - **"Hello world!"** - plugin tutorial [English<sub> by DroomOne</sub> ](https://github.com/DroomOne/Flipper-Plugin-Tutorial) | [Russian<sub> by Pavel Yakovlev</sub>](https://yakovlev.me/hello-flipper-zero/)
### **Plugins**
### - [How to write your own app](https://flipper.atmanos.com/docs/overview/intro). Docs by atmanos **⚠outdated API**
## [- Configure Sub-GHz Remote App](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/SubGHzRemotePlugin.md)
## Firmware & main Apps feature
## [- Barcode Generator](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/BarcodeGenerator.md)
### - System: [How to change Flipper name](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/CustomFlipperName.md)
## [- Multi Converter](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/MultiConverter.md)
### - BadUSB: [How to add new keyboard layouts](https://github.com/dummy-decoy/flipperzero_badusb_kl)
## [- WAV Player sample files & how to convert](https://github.com/UberGuidoZ/Flipper/tree/main/Wav_Player#readme)
### - Infrared: [How to make captures to add them into Universal IR remotes](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/InfraredCaptures.md)
### **Plugins that works with external hardware**
## **Sub-GHz**
## [- How to use: [NRF24] plugins](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/NRF24.md)
### - External Radio: [How to connect CC1101 module](https://github.com/quen0n/flipperzero-ext-cc1101)
## [- How to use: [WiFi] Scanner](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme)
### - Transmission is blocked? [How to extend Sub-GHz frequency range](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/DangerousSettings.md)
## [- How to use: [ESP8266] Deauther](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module#readme)
### - [How to add extra Sub-GHz frequencies](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md)
## [- How to use: [ESP32] WiFi Marauder](https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard)
### - [How to use Flipper as new remote (Nice FlorS, BFT Mitto, Somfy Telis, Aprimatic, AN-Motors, etc..)](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
## [- [WiFi] Scanner - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/)
### - [~~Configure Sub-GHz Remote App~~](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md) Not recomeded, please use embedded configurator
## [- [ESP8266] Deauther - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-Wifi-ESP8266-Deauther-Module/)
## **Plugins**
## [- Windows: How to Upload .bin to ESP32/ESP8266](https://github.com/SequoiaSan/Guide-How-To-Upload-bin-to-ESP8266-ESP32)
### - TOTP (Authenticator): [config description](https://github.com/akopachov/flipper-zero_authenticator/blob/master/docs/conf-file_description.md)
## [- How to use: [GPIO] SentrySafe plugin](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/SentrySafe.md)
### - Mifare Nested plugin: [How to recover keys](https://github.com/AloneLiberty/FlipperNested#how-to-use-it)
### **SubGHz**
### - Barcode Generator: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/BarcodeGenerator.md)
## [- Transmission is blocked? - How to extend SubGHz frequency range](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/DangerousSettings.md)
### - Multi Converter: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/MultiConverter.md)
## [- How to add extra SubGHz frequencies](https://github.com/Eng1n33r/flipperzero-firmware/blob/dev/documentation/SubGHzSettings.md)
### - WAV Player: [sample files & how to convert](https://github.com/UberGuidoZ/Flipper/tree/main/Wav_Player#readme)
### - Sub-GHz playlist: [generator script](https://github.com/darmiel/flipper-scripts/blob/main/playlist/playlist_creator_by_chunk.py)
## **Plugins that works with external hardware** [GPIO]
### - Unitemp - Temperature sensors reader: [How to use & supported sensors](https://github.com/quen0n/unitemp-flipperzero#readme)
### - [NMEA] GPS: [How to use](https://github.com/xMasterX/all-the-plugins/blob/dev/base_pack/gps_nmea_uart/README.md)
### - i2c Tools [How to use](https://github.com/xMasterX/all-the-plugins/blob/dev/base_pack/flipper_i2ctools/README.md)
### - [NRF24] plugins: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/NRF24.md)
### - [WiFi] Scanner: [How to use](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme) | [Web Flasher](https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/)
### - [ESP8266] Deauther: [How to use](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module#readme) | [Web Flasher](https://sequoiasan.github.io/FlipperZero-Wifi-ESP8266-Deauther-Module/)
### - [ESP32] WiFi Marauder: [How to use](https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard)<sub> docs by UberGuidoZ</sub> | [Marauder repo](https://github.com/justcallmekoko/ESP32Marauder)
### - [ESP32-CAM] Camera Suite: [How to use](https://github.com/CodyTolene/Flipper-Zero-Camera-Suite)
### - How to Upload `.bin` to ESP32/ESP8266: [Windows](https://github.com/SequoiaSan/Guide-How-To-Upload-bin-to-ESP8266-ESP32) | [FAP "ESP flasher"](https://github.com/0xchocolate/flipperzero-esp-flasher)
### - [GPIO] SentrySafe plugin: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SentrySafe.md)
<br>
<br>
# Where I can find IR, SubGhz, ... files, DBs, and other stuff?
## [Awesome Flipper Zero - Github](https://github.com/djsime1/awesome-flipperzero)
# Where I can find IR, Sub-GHz, ... files, DBs, and other stuff?
## [UberGuidoZ Playground - Large collection of files - Github](https://github.com/UberGuidoZ/Flipper)
## [CAME-12bit, NICE-12bit, Linear-10bit, PT-2240 - SubGHz fixed code bruteforce](https://github.com/tobiabocchi/flipperzero-bruteforce)
## [Awesome Flipper Zero - Github](https://github.com/djsime1/awesome-flipperzero)
<br>
<br>
# Links
* Unofficial Discord: [discord.gg/58D6E8BtTU](https://discord.gg/58D6E8BtTU)
* Docs by atmanos / How to write your own app (outdated API): [https://flipper.atmanos.com/docs/overview/intro](https://flipper.atmanos.com/docs/overview/intro)
* Official Docs: [http://docs.flipperzero.one](http://docs.flipperzero.one)
* Official Docs: [docs.flipper.net](https://docs.flipper.net/)
* Official Forum: [forum.flipperzero.one](https://forum.flipperzero.one/)
# Project structure
- `applications` - Applications and services used in firmware
- `assets` - Assets used by applications and services
- `furi` - Furi Core: os level primitives and helpers
- `furi` - Furi Core: OS-level primitives and helpers
- `debug` - Debug tool: GDB-plugins, SVD-file and etc
- `documentation` - Documentation generation system configs and input files
- `firmware` - Firmware source code
@@ -155,4 +270,4 @@ See changelog in releases for latest updates!
- `site_scons` - Build helpers
- `scripts` - Supplementary scripts and python libraries home
Also pay attention to `ReadMe.md` files inside of those directories.
Also, pay attention to the `ReadMe.md` files inside those directories.

View File

@@ -7,65 +7,45 @@
# construction of certain targets behind command-line options.
import os
import subprocess
from fbt.util import path_as_posix
DefaultEnvironment(tools=[])
EnsurePythonVersion(3, 8)
DefaultEnvironment(tools=[])
# Progress(["OwO\r", "owo\r", "uwu\r", "owo\r"], interval=15)
# This environment is created only for loading options & validating file/dir existence
fbt_variables = SConscript("site_scons/commandline.scons")
cmd_environment = Environment(tools=[], variables=fbt_variables)
Help(fbt_variables.GenerateHelpText(cmd_environment))
cmd_environment = Environment(
toolpath=["#/scripts/fbt_tools"],
tools=[
("fbt_help", {"vars": fbt_variables}),
],
variables=fbt_variables,
)
# Building basic environment - tools, utility methods, cross-compilation
# settings, gcc flags for Cortex-M4, basic builders and more
coreenv = SConscript(
"site_scons/environ.scons",
exports={"VAR_ENV": cmd_environment},
toolpath=["#/scripts/fbt_tools"],
)
SConscript("site_scons/cc.scons", exports={"ENV": coreenv})
# Store root dir in environment for certain tools
coreenv["ROOT_DIR"] = Dir(".")
# Create a separate "dist" environment and add construction envs to it
distenv = coreenv.Clone(
tools=["fbt_dist", "openocd", "blackmagic", "jflash"],
OPENOCD_GDB_PIPE=[
"|openocd -c 'gdb_port pipe; log_output debug/openocd.log' ${[SINGLEQUOTEFUNC(OPENOCD_OPTS)]}"
tools=[
"fbt_dist",
"fbt_debugopts",
"openocd",
"blackmagic",
"jflash",
],
GDBOPTS_BASE=[
"-ex",
"target extended-remote ${GDBREMOTE}",
"-ex",
"set confirm off",
],
GDBOPTS_BLACKMAGIC=[
"-ex",
"monitor swdp_scan",
"-ex",
"monitor debug_bmp enable",
"-ex",
"attach 1",
"-ex",
"set mem inaccessible-by-default off",
],
GDBPYOPTS=[
"-ex",
"source debug/FreeRTOS/FreeRTOS.py",
"-ex",
"source debug/PyCortexMDebug/PyCortexMDebug.py",
"-ex",
"svd_load ${SVD_FILE}",
"-ex",
"compare-sections",
],
JFLASHPROJECT="${ROOT_DIR.abspath}/debug/fw.jflash",
ENV=os.environ,
UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}",
VSCODE_LANG_SERVER=ARGUMENTS.get("LANG_SERVER", "cpptools"),
)
firmware_env = distenv.AddFwProject(
@@ -87,20 +67,22 @@ if GetOption("fullenv") or any(
# Target for self-update package
dist_basic_arguments = [
"--bundlever",
'"${UPDATE_VERSION_STRING}"',
"${UPDATE_VERSION_STRING}",
]
dist_radio_arguments = [
"--radio",
'"${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}"',
"${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}",
"--radiotype",
"${COPRO_STACK_TYPE}",
"${COPRO_DISCLAIMER}",
"--obdata",
'"${ROOT_DIR.abspath}/${COPRO_OB_DATA}"',
"${ROOT_DIR.abspath}/${COPRO_OB_DATA}",
"--stackversion",
"${COPRO_CUBE_VERSION}",
]
dist_resource_arguments = [
"-r",
'"${ROOT_DIR.abspath}/assets/resources"',
firmware_env.subst("${RESOURCES_ROOT}"),
]
dist_splash_arguments = (
[
@@ -113,7 +95,7 @@ if GetOption("fullenv") or any(
selfupdate_dist = distenv.DistCommand(
"updater_package",
(distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES"]),
(distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES_MANIFEST"]),
DIST_EXTRA=[
*dist_basic_arguments,
*dist_radio_arguments,
@@ -146,7 +128,8 @@ if GetOption("fullenv") or any(
# Installation over USB & CLI
usb_update_package = distenv.AddUsbFlashTarget(
"#build/usbinstall.flag", (firmware_env["FW_RESOURCES"], selfupdate_dist)
"#build/usbinstall.flag",
(firmware_env["FW_RESOURCES_MANIFEST"], selfupdate_dist),
)
distenv.Alias("flash_usb_full", usb_update_package)
@@ -160,28 +143,76 @@ if GetOption("fullenv") or any(
basic_dist = distenv.DistCommand("fw_dist", distenv["DIST_DEPENDS"])
distenv.Default(basic_dist)
dist_dir_name = distenv.GetProjectDirName()
dist_dir = distenv.Dir(f"#/dist/{dist_dir_name}")
external_apps_artifacts = firmware_env["FW_EXTAPPS"]
external_app_list = external_apps_artifacts.application_map.values()
fap_dist = [
distenv.Install(
dist_dir.Dir("debug_elf"),
list(app_artifact.debug for app_artifact in external_app_list),
),
*(
distenv.Install(
dist_dir.File(dist_entry[1]).dir,
app_artifact.compact,
)
for app_artifact in external_app_list
for dist_entry in app_artifact.dist_entries
),
]
Depends(
fap_dist,
list(app_artifact.validator for app_artifact in external_app_list),
)
Alias("fap_dist", fap_dist)
# Copy all faps to device
fap_deploy = distenv.PhonyTarget(
"fap_deploy",
[
[
"${PYTHON3}",
"${FBT_SCRIPT_DIR}/storage.py",
"-p",
"${FLIP_PORT}",
"send",
"${SOURCE}",
"/ext/apps",
]
],
source=firmware_env.Dir(("${RESOURCES_ROOT}/apps")),
)
Depends(fap_deploy, firmware_env["FW_RESOURCES_MANIFEST"])
# Target for bundling core2 package for qFlipper
copro_dist = distenv.CoproBuilder(
distenv.Dir("assets/core2_firmware"),
"#/build/core2_firmware.tgz",
[],
)
distenv.AlwaysBuild(copro_dist)
distenv.Alias("copro_dist", copro_dist)
firmware_flash = distenv.AddOpenOCDFlashTarget(firmware_env)
firmware_flash = distenv.AddFwFlashTarget(firmware_env)
distenv.Alias("flash", firmware_flash)
# To be implemented in fwflash.py
firmware_jflash = distenv.AddJFlashTarget(firmware_env)
distenv.Alias("jflash", firmware_jflash)
firmware_bm_flash = distenv.PhonyTarget(
"flash_blackmagic",
distenv.PhonyTarget(
"gdb_trace_all",
"$GDB $GDBOPTS $SOURCES $GDBFLASH",
source=firmware_env["FW_ELF"],
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
GDBREMOTE="${BLACKMAGIC_ADDR}",
GDBOPTS="${GDBOPTS_BASE}",
GDBREMOTE="${OPENOCD_GDB_PIPE}",
GDBFLASH=[
"-ex",
"load",
"thread apply all bt",
"-ex",
"quit",
],
@@ -194,6 +225,7 @@ firmware_debug = distenv.PhonyTarget(
source=firmware_env["FW_ELF"],
GDBOPTS="${GDBOPTS_BASE}",
GDBREMOTE="${OPENOCD_GDB_PIPE}",
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(firmware_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
)
distenv.Depends(firmware_debug, firmware_flash)
@@ -203,16 +235,38 @@ distenv.PhonyTarget(
source=firmware_env["FW_ELF"],
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
GDBREMOTE="${BLACKMAGIC_ADDR}",
FBT_FAP_DEBUG_ELF_ROOT=path_as_posix(firmware_env.subst("$FBT_FAP_DEBUG_ELF_ROOT")),
)
# Debug alien elf
debug_other_opts = [
"-ex",
"source ${FBT_DEBUG_DIR}/PyCortexMDebug/PyCortexMDebug.py",
# "-ex",
# "source ${FBT_DEBUG_DIR}/FreeRTOS/FreeRTOS.py",
"-ex",
"source ${FBT_DEBUG_DIR}/flipperversion.py",
"-ex",
"fw-version",
]
distenv.PhonyTarget(
"debug_other",
"${GDBPYCOM}",
GDBPYOPTS='-ex "source debug/PyCortexMDebug/PyCortexMDebug.py" ',
GDBOPTS="${GDBOPTS_BASE}",
GDBREMOTE="${OPENOCD_GDB_PIPE}",
GDBPYOPTS=debug_other_opts,
)
distenv.PhonyTarget(
"debug_other_blackmagic",
"${GDBPYCOM}",
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
GDBREMOTE="${BLACKMAGIC_ADDR}",
GDBPYOPTS=debug_other_opts,
)
# Just start OpenOCD
distenv.PhonyTarget(
"openocd",
@@ -222,14 +276,14 @@ distenv.PhonyTarget(
# Linter
distenv.PhonyTarget(
"lint",
"${PYTHON3} scripts/lint.py check ${LINT_SOURCES}",
LINT_SOURCES=firmware_env["LINT_SOURCES"],
"${PYTHON3} ${FBT_SCRIPT_DIR}/lint.py check ${LINT_SOURCES}",
LINT_SOURCES=[n.srcnode() for n in firmware_env["LINT_SOURCES"]],
)
distenv.PhonyTarget(
"format",
"${PYTHON3} scripts/lint.py format ${LINT_SOURCES}",
LINT_SOURCES=firmware_env["LINT_SOURCES"],
"${PYTHON3} ${FBT_SCRIPT_DIR}/lint.py format ${LINT_SOURCES}",
LINT_SOURCES=[n.srcnode() for n in firmware_env["LINT_SOURCES"]],
)
# PY_LINT_SOURCES contains recursively-built modules' SConscript files + application manifests
@@ -240,7 +294,6 @@ firmware_env.Append(
"site_scons",
"scripts",
# Extra files
"applications/extapps.scons",
"SConstruct",
"firmware.scons",
"fbt_options.py",
@@ -270,7 +323,10 @@ distenv.PhonyTarget(
)
# Start Flipper CLI via PySerial's miniterm
distenv.PhonyTarget("cli", "${PYTHON3} scripts/serial_cli.py")
distenv.PhonyTarget("cli", "${PYTHON3} ${FBT_SCRIPT_DIR}/serial_cli.py -p ${FLIP_PORT}")
# Update WiFi devboard firmware
distenv.PhonyTarget("devboard_flash", "${PYTHON3} ${FBT_SCRIPT_DIR}/wifi_board.py")
# Find blackmagic probe
@@ -279,8 +335,31 @@ distenv.PhonyTarget(
"@echo $( ${BLACKMAGIC_ADDR} $)",
)
# Find STLink probe ids
distenv.PhonyTarget(
"get_stlink",
distenv.Action(
lambda **kw: distenv.GetDevices(),
None,
),
)
# Prepare vscode environment
vscode_dist = distenv.Install("#.vscode", distenv.Glob("#.vscode/example/*"))
VSCODE_LANG_SERVER = cmd_environment["LANG_SERVER"]
vscode_dist = distenv.Install(
"#.vscode",
[
distenv.Glob("#.vscode/example/*.json"),
distenv.Glob(f"#.vscode/example/{VSCODE_LANG_SERVER}/*.json"),
],
)
distenv.Precious(vscode_dist)
distenv.NoClean(vscode_dist)
distenv.Alias("vscode_dist", vscode_dist)
# Configure shell with build tools
distenv.PhonyTarget(
"env",
"@echo $( ${FBT_SCRIPT_DIR}/toolchain/fbtenv.sh $)",
)

View File

@@ -1,38 +1,78 @@
# Structure
- `about` - Small About application that shows flipper info
- `accessor` - Wiegand server
## debug
Applications for factory testing the Flipper.
- `accessor` - Wiegand server
- `battery_test_app` - Battery debug app
- `blink_test` - LED blinker
- `bt_debug_app` - BT test app. Requires full BT stack installed
- `display_test` - Various display tests & tweaks
- `file_browser_test` - Test UI for file picker
- `keypad_test` - Keypad test
- `lfrfid_debug` - LF RFID debug tool
- `text_box_test` - UI tests
- `uart_echo` - UART mode test
- `unit_tests` - Unit tests
- `usb_mouse` - USB HID test
- `usb_test` - Other USB tests
- `vibro_test` - Vibro test
## main
Applications for main Flipper menu.
- `archive` - Archive and file manager
- `bad_usb` - Bad USB application
- `gpio` - GPIO application: includes USART bridge and GPIO control
- `ibutton` - iButton application, onewire keys and more
- `infrared` - Infrared application, controls your IR devices
- `lfrfid` - LF RFID application
- `nfc` - NFC application, HF rfid, EMV and etc
- `subghz` - SubGhz application, 433 fobs and etc
- `u2f` - U2F Application
## services
Background services providing system APIs to applications.
- `applications.h` - Firmware application list header
- `bt` - BLE service and application
- `cli` - Console service and API
- `crypto` - Crypto cli tools
- `debug_tools` - Different tools that we use for debug
- `desktop` - Desktop service
- `dialogs` - Dialogs service: GUI Dialogs for your app
- `dolphin` - Dolphin service and supplementary apps
- `gpio` - GPIO application: includes USART bridge and GPIO control
- `gui` - GUI service and API
- `ibutton` - iButton application, onewire keys and more
- `input` - Input service
- `infrared` - Infrared application, controls your IR devices
- `lfrfid` - LF RFID application
- `lfrfid_debug` - LF RFID debug tool
- `loader` - Application loader service
- `music_player` - Music player app (demo)
- `nfc` - NFC application, HF rfid, EMV and etc
- `notification` - Notification service
- `power` - Power service
- `power_observer` - Power debug tool
- `rpc` - RPC service and API
- `scened_app_example` - C++ application example
- `snake_game` - Snake game application
- `storage` - Storage service, internal + sdcard
- `storage_settings` - Storage settings app
- `subghz` - SubGhz application, 433 fobs and etc
- `system` - System settings, tools and API
- `tests` - Unit tests and etc
- `u2f` - U2F Application
- `updater` - Update service & application
- `application.h` - Firmware application list header
## settings
Small applications providing configuration for basic firmware and its services.
- `about` - Small About application that shows flipper info
- `bt_settings_app` - Bluetooth options
- `desktop_settings` - Desktop configuration
- `dolphin_passport` - Dolphin passport app
- `notification_settings` - LCD brightness, sound volume, etc configuration
- `power_settings_app` - Basic power options
- `storage_settings` - Storage settings app
- `system` - System settings
## system
Utility apps not visible in other menus.
- `storage_move_to_sd` - Data migration tool for internal storage
- `updater` - Update service & application

View File

@@ -1,10 +0,0 @@
App(
appid="accessor",
name="Accessor",
apptype=FlipperAppType.DEBUG,
entry_point="accessor_app",
cdefines=["APP_ACCESSOR"],
requires=["gui"],
stack_size=4 * 1024,
order=40,
)

View File

@@ -1,78 +0,0 @@
#pragma once
#include <furi.h>
#include <gui/icon.h>
typedef enum {
FlipperApplicationFlagDefault = 0,
FlipperApplicationFlagInsomniaSafe = (1 << 0),
} FlipperApplicationFlag;
typedef struct {
const FuriThreadCallback app;
const char* name;
const size_t stack_size;
const Icon* icon;
const FlipperApplicationFlag flags;
} FlipperApplication;
typedef void (*FlipperOnStartHook)(void);
extern const char* FLIPPER_AUTORUN_APP_NAME;
/* Services list
* Spawned on startup
*/
extern const FlipperApplication FLIPPER_SERVICES[];
extern const size_t FLIPPER_SERVICES_COUNT;
/* Apps list
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_APPS[];
extern const size_t FLIPPER_APPS_COUNT;
/* On system start hooks
* Called by loader, after OS initialization complete
*/
extern const FlipperOnStartHook FLIPPER_ON_SYSTEM_START[];
extern const size_t FLIPPER_ON_SYSTEM_START_COUNT;
/* Plugins list
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_PLUGINS[];
extern const size_t FLIPPER_PLUGINS_COUNT;
/* Games list
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_GAMES[];
extern const size_t FLIPPER_GAMES_COUNT;
/* Debug menu apps
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_DEBUG_APPS[];
extern const size_t FLIPPER_DEBUG_APPS_COUNT;
/* System apps
* Can only be spawned by loader by name
*/
extern const FlipperApplication FLIPPER_SYSTEM_APPS[];
extern const size_t FLIPPER_SYSTEM_APPS_COUNT;
/* Seperate scene app holder
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_SCENE;
extern const FlipperApplication FLIPPER_SCENE_APPS[];
extern const size_t FLIPPER_SCENE_APPS_COUNT;
extern const FlipperApplication FLIPPER_ARCHIVE;
/* Settings list
* Spawned by loader
*/
extern const FlipperApplication FLIPPER_SETTINGS_APPS[];
extern const size_t FLIPPER_SETTINGS_APPS_COUNT;

View File

@@ -1,11 +0,0 @@
App(
appid="archive",
name="Archive",
apptype=FlipperAppType.ARCHIVE,
entry_point="archive_app",
cdefines=["APP_ARCHIVE"],
requires=["gui"],
stack_size=4 * 1024,
icon="A_FileManager_14",
order=0,
)

View File

@@ -1,79 +0,0 @@
#include "archive_i.h"
#include "m-string.h"
bool archive_custom_event_callback(void* context, uint32_t event) {
furi_assert(context);
ArchiveApp* archive = (ArchiveApp*)context;
return scene_manager_handle_custom_event(archive->scene_manager, event);
}
bool archive_back_event_callback(void* context) {
furi_assert(context);
ArchiveApp* archive = (ArchiveApp*)context;
return scene_manager_handle_back_event(archive->scene_manager);
}
ArchiveApp* archive_alloc() {
ArchiveApp* archive = malloc(sizeof(ArchiveApp));
archive->gui = furi_record_open(RECORD_GUI);
archive->text_input = text_input_alloc();
string_init(archive->fav_move_str);
archive->view_dispatcher = view_dispatcher_alloc();
archive->scene_manager = scene_manager_alloc(&archive_scene_handlers, archive);
view_dispatcher_enable_queue(archive->view_dispatcher);
view_dispatcher_attach_to_gui(
archive->view_dispatcher, archive->gui, ViewDispatcherTypeFullscreen);
view_dispatcher_set_event_callback_context(archive->view_dispatcher, archive);
view_dispatcher_set_custom_event_callback(
archive->view_dispatcher, archive_custom_event_callback);
view_dispatcher_set_navigation_event_callback(
archive->view_dispatcher, archive_back_event_callback);
archive->browser = browser_alloc();
view_dispatcher_add_view(
archive->view_dispatcher, ArchiveViewBrowser, archive_browser_get_view(archive->browser));
view_dispatcher_add_view(
archive->view_dispatcher, ArchiveViewTextInput, text_input_get_view(archive->text_input));
archive->widget = widget_alloc();
view_dispatcher_add_view(
archive->view_dispatcher, ArchiveViewWidget, widget_get_view(archive->widget));
return archive;
}
void archive_free(ArchiveApp* archive) {
furi_assert(archive);
view_dispatcher_remove_view(archive->view_dispatcher, ArchiveViewBrowser);
view_dispatcher_remove_view(archive->view_dispatcher, ArchiveViewTextInput);
view_dispatcher_remove_view(archive->view_dispatcher, ArchiveViewWidget);
widget_free(archive->widget);
view_dispatcher_free(archive->view_dispatcher);
scene_manager_free(archive->scene_manager);
browser_free(archive->browser);
string_clear(archive->fav_move_str);
text_input_free(archive->text_input);
furi_record_close(RECORD_GUI);
archive->gui = NULL;
free(archive);
}
int32_t archive_app(void* p) {
UNUSED(p);
ArchiveApp* archive = archive_alloc();
scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneBrowser);
view_dispatcher_run(archive->view_dispatcher);
archive_free(archive);
return 0;
}

View File

@@ -1,34 +0,0 @@
#pragma once
#include "archive.h"
#include <stdint.h>
#include <furi.h>
#include <gui/gui_i.h>
#include <gui/view_dispatcher.h>
#include <gui/scene_manager.h>
#include <gui/modules/text_input.h>
#include <gui/modules/widget.h>
#include <loader/loader.h>
#include "views/archive_browser_view.h"
#include "scenes/archive_scene.h"
typedef enum {
ArchiveViewBrowser,
ArchiveViewTextInput,
ArchiveViewWidget,
ArchiveViewTotal,
} ArchiveViewEnum;
struct ArchiveApp {
Gui* gui;
ViewDispatcher* view_dispatcher;
SceneManager* scene_manager;
ArchiveBrowserView* browser;
TextInput* text_input;
Widget* widget;
FuriPubSubSubscription* loader_stop_subscription;
string_t fav_move_str;
char text_store[MAX_NAME_LEN];
char file_extension[MAX_EXT_LEN + 1];
};

View File

@@ -1,506 +0,0 @@
#include "archive/views/archive_browser_view.h"
#include "archive_files.h"
#include "archive_apps.h"
#include "archive_browser.h"
#include <core/common_defines.h>
#include <core/log.h>
#include "gui/modules/file_browser_worker.h"
#include "m-string.h"
#include <math.h>
static void
archive_folder_open_cb(void* context, uint32_t item_cnt, int32_t file_idx, bool is_root) {
furi_assert(context);
ArchiveBrowserView* browser = (ArchiveBrowserView*)context;
int32_t load_offset = 0;
browser->is_root = is_root;
ArchiveTabEnum tab = archive_get_tab(browser);
if((item_cnt == 0) && (archive_is_home(browser)) && (tab != ArchiveTabBrowser)) {
archive_switch_tab(browser, browser->last_tab_switch_dir);
} else if(!string_start_with_str_p(browser->path, "/app:")) {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_reset(model->files);
model->item_cnt = item_cnt;
model->item_idx = (file_idx > 0) ? file_idx : 0;
load_offset =
CLAMP(model->item_idx - FILE_LIST_BUF_LEN / 2, (int32_t)model->item_cnt, 0);
model->array_offset = 0;
model->list_offset = 0;
model->list_loading = true;
model->folder_loading = false;
return false;
});
archive_update_offset(browser);
file_browser_worker_load(browser->worker, load_offset, FILE_LIST_BUF_LEN);
}
}
static void archive_list_load_cb(void* context, uint32_t list_load_offset) {
furi_assert(context);
ArchiveBrowserView* browser = (ArchiveBrowserView*)context;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_reset(model->files);
model->array_offset = list_load_offset;
return false;
});
}
static void archive_list_item_cb(void* context, string_t item_path, bool is_folder, bool is_last) {
furi_assert(context);
ArchiveBrowserView* browser = (ArchiveBrowserView*)context;
if(!is_last) {
archive_add_file_item(browser, is_folder, string_get_cstr(item_path));
} else {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->list_loading = false;
return true;
});
}
}
static void archive_long_load_cb(void* context) {
furi_assert(context);
ArchiveBrowserView* browser = (ArchiveBrowserView*)context;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->folder_loading = true;
return true;
});
}
static void archive_file_browser_set_path(
ArchiveBrowserView* browser,
string_t path,
const char* filter_ext,
bool skip_assets) {
furi_assert(browser);
if(!browser->worker_running) {
browser->worker = file_browser_worker_alloc(path, filter_ext, skip_assets);
file_browser_worker_set_callback_context(browser->worker, browser);
file_browser_worker_set_folder_callback(browser->worker, archive_folder_open_cb);
file_browser_worker_set_list_callback(browser->worker, archive_list_load_cb);
file_browser_worker_set_item_callback(browser->worker, archive_list_item_cb);
file_browser_worker_set_long_load_callback(browser->worker, archive_long_load_cb);
browser->worker_running = true;
} else {
furi_assert(browser->worker);
file_browser_worker_set_config(browser->worker, path, filter_ext, skip_assets);
}
}
bool archive_is_item_in_array(ArchiveBrowserViewModel* model, uint32_t idx) {
size_t array_size = files_array_size(model->files);
if((idx >= (uint32_t)model->array_offset + array_size) ||
(idx < (uint32_t)model->array_offset)) {
return false;
}
return true;
}
void archive_update_offset(ArchiveBrowserView* browser) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
uint16_t bounds = model->item_cnt > 3 ? 2 : model->item_cnt;
if((model->item_cnt > 3u) && (model->item_idx >= ((int32_t)model->item_cnt - 1))) {
model->list_offset = model->item_idx - 3;
} else if(model->list_offset < model->item_idx - bounds) {
model->list_offset =
CLAMP(model->item_idx - 2, (int32_t)model->item_cnt - bounds, 0);
} else if(model->list_offset > model->item_idx - bounds) {
model->list_offset =
CLAMP(model->item_idx - 1, (int32_t)model->item_cnt - bounds, 0);
}
return true;
});
}
void archive_update_focus(ArchiveBrowserView* browser, const char* target) {
furi_assert(browser);
furi_assert(target);
archive_get_items(browser, string_get_cstr(browser->path));
if(!archive_file_get_array_size(browser) && archive_is_home(browser)) {
archive_switch_tab(browser, TAB_RIGHT);
} else {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
uint16_t idx = 0;
while(idx < files_array_size(model->files)) {
ArchiveFile_t* current = files_array_get(model->files, idx);
if(!string_search(current->path, target)) {
model->item_idx = idx + model->array_offset;
break;
}
++idx;
}
return false;
});
archive_update_offset(browser);
}
}
size_t archive_file_get_array_size(ArchiveBrowserView* browser) {
furi_assert(browser);
uint16_t size = 0;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
size = files_array_size(model->files);
return false;
});
return size;
}
void archive_set_item_count(ArchiveBrowserView* browser, uint32_t count) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->item_cnt = count;
model->item_idx = CLAMP(model->item_idx, (int32_t)model->item_cnt - 1, 0);
return false;
});
archive_update_offset(browser);
}
void archive_file_array_rm_selected(ArchiveBrowserView* browser) {
furi_assert(browser);
uint32_t items_cnt = 0;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_remove_v(
model->files,
model->item_idx - model->array_offset,
model->item_idx - model->array_offset + 1);
model->item_cnt--;
model->item_idx = CLAMP(model->item_idx, (int32_t)model->item_cnt - 1, 0);
items_cnt = model->item_cnt;
return false;
});
if((items_cnt == 0) && (archive_is_home(browser))) {
archive_switch_tab(browser, TAB_RIGHT);
}
archive_update_offset(browser);
}
void archive_file_array_swap(ArchiveBrowserView* browser, int8_t dir) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
ArchiveFile_t temp;
size_t array_size = files_array_size(model->files) - 1;
uint8_t swap_idx = CLAMP((size_t)(model->item_idx + dir), array_size, 0u);
if(model->item_idx == 0 && dir < 0) {
ArchiveFile_t_init(&temp);
files_array_pop_at(&temp, model->files, array_size);
files_array_push_at(model->files, model->item_idx, temp);
ArchiveFile_t_clear(&temp);
} else if(((uint32_t)model->item_idx == array_size) && (dir > 0)) {
ArchiveFile_t_init(&temp);
files_array_pop_at(&temp, model->files, 0);
files_array_push_at(model->files, array_size, temp);
ArchiveFile_t_clear(&temp);
} else {
files_array_swap_at(model->files, model->item_idx, swap_idx);
}
return false;
});
}
void archive_file_array_rm_all(ArchiveBrowserView* browser) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_reset(model->files);
return false;
});
}
void archive_file_array_load(ArchiveBrowserView* browser, int8_t dir) {
furi_assert(browser);
int32_t offset_new = 0;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
if(model->item_cnt > FILE_LIST_BUF_LEN) {
if(dir < 0) {
offset_new = model->item_idx - FILE_LIST_BUF_LEN / 4 * 3;
} else if(dir == 0) {
offset_new = model->item_idx - FILE_LIST_BUF_LEN / 4 * 2;
} else {
offset_new = model->item_idx - FILE_LIST_BUF_LEN / 4 * 1;
}
if(offset_new > 0) {
offset_new =
CLAMP(offset_new, (int32_t)model->item_cnt - FILE_LIST_BUF_LEN, 0);
} else {
offset_new = 0;
}
}
return false;
});
file_browser_worker_load(browser->worker, offset_new, FILE_LIST_BUF_LEN);
}
ArchiveFile_t* archive_get_current_file(ArchiveBrowserView* browser) {
furi_assert(browser);
ArchiveFile_t* selected;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
selected = files_array_size(model->files) ?
files_array_get(model->files, model->item_idx - model->array_offset) :
NULL;
return false;
});
return selected;
}
ArchiveFile_t* archive_get_file_at(ArchiveBrowserView* browser, size_t idx) {
furi_assert(browser);
ArchiveFile_t* selected;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
idx = CLAMP(idx - model->array_offset, files_array_size(model->files), 0u);
selected = files_array_size(model->files) ? files_array_get(model->files, idx) : NULL;
return false;
});
return selected;
}
ArchiveTabEnum archive_get_tab(ArchiveBrowserView* browser) {
furi_assert(browser);
ArchiveTabEnum tab_id;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
tab_id = model->tab_idx;
return false;
});
return tab_id;
}
bool archive_is_home(ArchiveBrowserView* browser) {
furi_assert(browser);
if(browser->is_root) {
return true;
}
const char* default_path = archive_get_default_path(archive_get_tab(browser));
return (string_cmp_str(browser->path, default_path) == 0);
}
const char* archive_get_name(ArchiveBrowserView* browser) {
ArchiveFile_t* selected = archive_get_current_file(browser);
return string_get_cstr(selected->path);
}
void archive_set_tab(ArchiveBrowserView* browser, ArchiveTabEnum tab) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->tab_idx = tab;
return false;
});
}
void archive_add_app_item(ArchiveBrowserView* browser, const char* name) {
furi_assert(browser);
furi_assert(name);
ArchiveFile_t item;
ArchiveFile_t_init(&item);
string_set_str(item.path, name);
archive_set_file_type(&item, name, false, true);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_push_back(model->files, item);
model->item_cnt = files_array_size(model->files);
return false;
});
ArchiveFile_t_clear(&item);
}
void archive_add_file_item(ArchiveBrowserView* browser, bool is_folder, const char* name) {
furi_assert(browser);
furi_assert(name);
ArchiveFile_t item;
ArchiveFile_t_init(&item);
string_init_set_str(item.path, name);
archive_set_file_type(&item, string_get_cstr(browser->path), is_folder, false);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_push_back(model->files, item);
return false;
});
ArchiveFile_t_clear(&item);
}
void archive_show_file_menu(ArchiveBrowserView* browser, bool show) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
if(show) {
if(archive_is_item_in_array(model, model->item_idx)) {
model->menu = true;
model->menu_idx = 0;
ArchiveFile_t* selected =
files_array_get(model->files, model->item_idx - model->array_offset);
selected->fav = archive_is_favorite("%s", string_get_cstr(selected->path));
}
} else {
model->menu = false;
model->menu_idx = 0;
}
return true;
});
}
void archive_favorites_move_mode(ArchiveBrowserView* browser, bool active) {
furi_assert(browser);
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->move_fav = active;
return true;
});
}
static bool archive_is_dir_exists(string_t path) {
if(string_equal_str_p(path, STORAGE_ANY_PATH_PREFIX)) {
return true;
}
bool state = false;
FileInfo file_info;
Storage* storage = furi_record_open(RECORD_STORAGE);
if(storage_common_stat(storage, string_get_cstr(path), &file_info) == FSE_OK) {
if(file_info.flags & FSF_DIRECTORY) {
state = true;
}
}
furi_record_close(RECORD_STORAGE);
return state;
}
void archive_switch_tab(ArchiveBrowserView* browser, InputKey key) {
furi_assert(browser);
ArchiveTabEnum tab = archive_get_tab(browser);
browser->last_tab_switch_dir = key;
if(key == InputKeyLeft) {
tab = ((tab - 1) + ArchiveTabTotal) % ArchiveTabTotal;
} else {
tab = (tab + 1) % ArchiveTabTotal;
}
browser->is_root = true;
archive_set_tab(browser, tab);
string_set_str(browser->path, archive_get_default_path(tab));
bool tab_empty = true;
if(tab == ArchiveTabFavorites) {
if(archive_favorites_count(browser) > 0) {
tab_empty = false;
}
} else if(string_start_with_str_p(browser->path, "/app:")) {
char* app_name = strchr(string_get_cstr(browser->path), ':');
if(app_name != NULL) {
if(archive_app_is_available(browser, string_get_cstr(browser->path))) {
tab_empty = false;
}
}
} else {
tab = archive_get_tab(browser);
if(archive_is_dir_exists(browser->path)) {
bool skip_assets = (strcmp(archive_get_tab_ext(tab), "*") == 0) ? false : true;
archive_file_browser_set_path(
browser, browser->path, archive_get_tab_ext(tab), skip_assets);
tab_empty = false; // Empty check will be performed later
} else {
tab_empty = true;
}
}
if((tab_empty) && (tab != ArchiveTabBrowser)) {
archive_switch_tab(browser, key);
} else {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
model->item_idx = 0;
model->array_offset = 0;
return false;
});
archive_get_items(browser, string_get_cstr(browser->path));
archive_update_offset(browser);
}
}
void archive_enter_dir(ArchiveBrowserView* browser, string_t path) {
furi_assert(browser);
furi_assert(path);
int32_t idx_temp = 0;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
idx_temp = model->item_idx;
return false;
});
string_set(browser->path, path);
file_browser_worker_folder_enter(browser->worker, path, idx_temp);
}
void archive_leave_dir(ArchiveBrowserView* browser) {
furi_assert(browser);
file_browser_worker_folder_exit(browser->worker);
}
void archive_refresh_dir(ArchiveBrowserView* browser) {
furi_assert(browser);
int32_t idx_temp = 0;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
idx_temp = model->item_idx;
return false;
});
file_browser_worker_folder_refresh(browser->worker, idx_temp);
}

View File

@@ -1,337 +0,0 @@
#include "archive_favorites.h"
#include "archive_files.h"
#include "archive_apps.h"
#include "archive_browser.h"
#define ARCHIVE_FAV_FILE_BUF_LEN 32
static bool archive_favorites_read_line(File* file, string_t str_result) {
string_reset(str_result);
uint8_t buffer[ARCHIVE_FAV_FILE_BUF_LEN];
bool result = false;
do {
uint16_t read_count = storage_file_read(file, buffer, ARCHIVE_FAV_FILE_BUF_LEN);
if(storage_file_get_error(file) != FSE_OK) {
return false;
}
for(uint16_t i = 0; i < read_count; i++) {
if(buffer[i] == '\n') {
uint32_t position = storage_file_tell(file);
if(storage_file_get_error(file) != FSE_OK) {
return false;
}
position = position - read_count + i + 1;
storage_file_seek(file, position, true);
if(storage_file_get_error(file) != FSE_OK) {
return false;
}
result = true;
break;
} else {
string_push_back(str_result, buffer[i]);
}
}
if(result || read_count == 0) {
break;
}
} while(true);
return result;
}
uint16_t archive_favorites_count(void* context) {
furi_assert(context);
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
string_t buffer;
string_init(buffer);
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
uint16_t lines = 0;
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue; // Skip empty lines
}
++lines;
}
}
storage_file_close(file);
string_clear(buffer);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
return lines;
}
static bool archive_favourites_rescan() {
string_t buffer;
string_init(buffer);
Storage* storage = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(storage);
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue;
}
if(string_search(buffer, "/app:") == 0) {
if(archive_app_is_available(NULL, string_get_cstr(buffer))) {
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
}
} else {
if(storage_file_exists(storage, string_get_cstr(buffer))) {
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
}
}
}
}
string_clear(buffer);
storage_file_close(file);
storage_common_remove(storage, ARCHIVE_FAV_PATH);
storage_common_rename(storage, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(storage, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
return result;
}
bool archive_favorites_read(void* context) {
furi_assert(context);
ArchiveBrowserView* browser = context;
Storage* storage = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(storage);
string_t buffer;
FileInfo file_info;
string_init(buffer);
bool need_refresh = false;
uint16_t file_count = 0;
archive_file_array_rm_all(browser);
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue;
}
if(string_search(buffer, "/app:") == 0) {
if(archive_app_is_available(browser, string_get_cstr(buffer))) {
archive_add_app_item(browser, string_get_cstr(buffer));
file_count++;
} else {
need_refresh = true;
}
} else {
if(storage_file_exists(storage, string_get_cstr(buffer))) {
storage_common_stat(storage, string_get_cstr(buffer), &file_info);
archive_add_file_item(
browser, (file_info.flags & FSF_DIRECTORY), string_get_cstr(buffer));
file_count++;
} else {
need_refresh = true;
}
}
string_reset(buffer);
}
}
storage_file_close(file);
string_clear(buffer);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
archive_set_item_count(browser, file_count);
if(need_refresh) {
archive_favourites_rescan();
}
return result;
}
bool archive_favorites_delete(const char* format, ...) {
string_t buffer;
string_t filename;
va_list args;
va_start(args, format);
string_init_vprintf(filename, format, args);
va_end(args);
string_init(buffer);
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue;
}
if(string_search(buffer, filename)) {
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(buffer));
}
}
}
string_clear(buffer);
string_clear(filename);
storage_file_close(file);
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
return result;
}
bool archive_is_favorite(const char* format, ...) {
string_t buffer;
string_t filename;
va_list args;
va_start(args, format);
string_init_vprintf(filename, format, args);
va_end(args);
string_init(buffer);
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
bool found = false;
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue;
}
if(!string_search(buffer, filename)) {
found = true;
break;
}
}
}
storage_file_close(file);
string_clear(buffer);
string_clear(filename);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
return found;
}
bool archive_favorites_rename(const char* src, const char* dst) {
furi_assert(src);
furi_assert(dst);
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
string_t path;
string_t buffer;
string_init(buffer);
string_init(path);
string_printf(path, "%s", src);
bool result = storage_file_open(file, ARCHIVE_FAV_PATH, FSAM_READ, FSOM_OPEN_EXISTING);
if(result) {
while(1) {
if(!archive_favorites_read_line(file, buffer)) {
break;
}
if(!string_size(buffer)) {
continue;
}
archive_file_append(
ARCHIVE_FAV_TEMP_PATH,
"%s\n",
string_search(buffer, path) ? string_get_cstr(buffer) : dst);
}
}
string_clear(buffer);
string_clear(path);
storage_file_close(file);
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
return result;
}
void archive_add_to_favorites(const char* file_path) {
furi_assert(file_path);
archive_file_append(ARCHIVE_FAV_PATH, "%s\n", file_path);
}
void archive_favorites_save(void* context) {
furi_assert(context);
ArchiveBrowserView* browser = context;
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
for(size_t i = 0; i < archive_file_get_array_size(browser); i++) {
ArchiveFile_t* item = archive_get_file_at(browser, i);
archive_file_append(ARCHIVE_FAV_TEMP_PATH, "%s\n", string_get_cstr(item->path));
}
storage_common_remove(fs_api, ARCHIVE_FAV_PATH);
storage_common_rename(fs_api, ARCHIVE_FAV_TEMP_PATH, ARCHIVE_FAV_PATH);
storage_common_remove(fs_api, ARCHIVE_FAV_TEMP_PATH);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
}

View File

@@ -1,14 +0,0 @@
#pragma once
#include <storage/storage.h>
#define ARCHIVE_FAV_PATH ANY_PATH("favorites.txt")
#define ARCHIVE_FAV_TEMP_PATH ANY_PATH("favorites.tmp")
uint16_t archive_favorites_count(void* context);
bool archive_favorites_read(void* context);
bool archive_favorites_delete(const char* format, ...);
bool archive_is_favorite(const char* format, ...);
bool archive_favorites_rename(const char* src, const char* dst);
void archive_add_to_favorites(const char* file_path);
void archive_favorites_save(void* context);

View File

@@ -1,111 +0,0 @@
#include "archive_files.h"
#include "archive_apps.h"
#include "archive_browser.h"
#define TAG "Archive"
#define ASSETS_DIR "assets"
void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder, bool is_app) {
furi_assert(file);
file->is_app = is_app;
if(is_app) {
file->type = archive_get_app_filetype(archive_get_app_type(path));
} else {
for(size_t i = 0; i < COUNT_OF(known_ext); i++) {
if((known_ext[i][0] == '?') || (known_ext[i][0] == '*')) continue;
if(string_search_str(file->path, known_ext[i], 0) != STRING_FAILURE) {
if(i == ArchiveFileTypeBadUsb) {
if(string_search_str(file->path, archive_get_default_path(ArchiveTabBadUsb)) ==
0) {
file->type = i;
return; // *.txt file is a BadUSB script only if it is in BadUSB folder
}
} else {
file->type = i;
return;
}
}
}
if(is_folder) {
file->type = ArchiveFileTypeFolder;
} else {
file->type = ArchiveFileTypeUnknown;
}
}
}
bool archive_get_items(void* context, const char* path) {
furi_assert(context);
bool res = false;
ArchiveBrowserView* browser = context;
if(archive_get_tab(browser) == ArchiveTabFavorites) {
res = archive_favorites_read(browser);
} else if(strncmp(path, "/app:", 5) == 0) {
res = archive_app_read_dir(browser, path);
}
return res;
}
void archive_file_append(const char* path, const char* format, ...) {
furi_assert(path);
string_t string;
va_list args;
va_start(args, format);
string_init_vprintf(string, format, args);
va_end(args);
Storage* fs_api = furi_record_open(RECORD_STORAGE);
File* file = storage_file_alloc(fs_api);
bool res = storage_file_open(file, path, FSAM_WRITE, FSOM_OPEN_APPEND);
if(res) {
storage_file_write(file, string_get_cstr(string), string_size(string));
}
storage_file_close(file);
storage_file_free(file);
furi_record_close(RECORD_STORAGE);
}
void archive_delete_file(void* context, const char* format, ...) {
furi_assert(context);
string_t filename;
va_list args;
va_start(args, format);
string_init_vprintf(filename, format, args);
va_end(args);
ArchiveBrowserView* browser = context;
Storage* fs_api = furi_record_open(RECORD_STORAGE);
FileInfo fileinfo;
storage_common_stat(fs_api, string_get_cstr(filename), &fileinfo);
bool res = false;
if(fileinfo.flags & FSF_DIRECTORY) {
res = storage_simply_remove_recursive(fs_api, string_get_cstr(filename));
} else {
res = (storage_common_remove(fs_api, string_get_cstr(filename)) == FSE_OK);
}
furi_record_close(RECORD_STORAGE);
if(archive_is_favorite("%s", string_get_cstr(filename))) {
archive_favorites_delete("%s", string_get_cstr(filename));
}
if(res) {
archive_file_array_rm_selected(browser);
}
string_clear(filename);
}

View File

@@ -1,64 +0,0 @@
#pragma once
#include <m-array.h>
#include <m-string.h>
#include <storage/storage.h>
typedef enum {
ArchiveFileTypeIButton,
ArchiveFileTypeNFC,
ArchiveFileTypeSubGhz,
ArchiveFileTypeLFRFID,
ArchiveFileTypeInfrared,
ArchiveFileTypeBadUsb,
ArchiveFileTypeU2f,
ArchiveFileTypeUpdateManifest,
ArchiveFileTypeFolder,
ArchiveFileTypeUnknown,
ArchiveFileTypeLoading,
} ArchiveFileTypeEnum;
typedef struct {
string_t path;
ArchiveFileTypeEnum type;
bool fav;
bool is_app;
} ArchiveFile_t;
static void ArchiveFile_t_init(ArchiveFile_t* obj) {
obj->type = ArchiveFileTypeUnknown;
obj->is_app = false;
obj->fav = false;
string_init(obj->path);
}
static void ArchiveFile_t_init_set(ArchiveFile_t* obj, const ArchiveFile_t* src) {
obj->type = src->type;
obj->is_app = src->is_app;
obj->fav = src->fav;
string_init_set(obj->path, src->path);
}
static void ArchiveFile_t_set(ArchiveFile_t* obj, const ArchiveFile_t* src) {
obj->type = src->type;
obj->is_app = src->is_app;
obj->fav = src->fav;
string_set(obj->path, src->path);
}
static void ArchiveFile_t_clear(ArchiveFile_t* obj) {
string_clear(obj->path);
}
ARRAY_DEF(
files_array,
ArchiveFile_t,
(INIT(API_2(ArchiveFile_t_init)),
SET(API_6(ArchiveFile_t_set)),
INIT_SET(API_6(ArchiveFile_t_init_set)),
CLEAR(API_2(ArchiveFile_t_clear))))
void archive_set_file_type(ArchiveFile_t* file, const char* path, bool is_folder, bool is_app);
bool archive_get_items(void* context, const char* path);
void archive_file_append(const char* path, const char* format, ...);
void archive_delete_file(void* context, const char* format, ...);

View File

@@ -1,221 +0,0 @@
#include "../archive_i.h"
#include "../helpers/archive_files.h"
#include "../helpers/archive_apps.h"
#include "../helpers/archive_favorites.h"
#include "../helpers/archive_browser.h"
#include "../views/archive_browser_view.h"
#include "archive/scenes/archive_scene.h"
#define TAG "ArchiveSceneBrowser"
#define SCENE_STATE_DEFAULT (0)
#define SCENE_STATE_NEED_REFRESH (1)
static const char* flipper_app_name[] = {
[ArchiveFileTypeIButton] = "iButton",
[ArchiveFileTypeNFC] = "NFC",
[ArchiveFileTypeSubGhz] = "Sub-GHz",
[ArchiveFileTypeLFRFID] = "125 kHz RFID",
[ArchiveFileTypeInfrared] = "Infrared",
[ArchiveFileTypeBadUsb] = "Bad USB",
[ArchiveFileTypeU2f] = "U2F",
[ArchiveFileTypeUpdateManifest] = "UpdaterApp",
};
static void archive_loader_callback(const void* message, void* context) {
furi_assert(message);
furi_assert(context);
const LoaderEvent* event = message;
ArchiveApp* archive = (ArchiveApp*)context;
if(event->type == LoaderEventTypeApplicationStopped) {
view_dispatcher_send_custom_event(
archive->view_dispatcher, ArchiveBrowserEventListRefresh);
}
}
static void archive_run_in_app(ArchiveBrowserView* browser, ArchiveFile_t* selected) {
UNUSED(browser);
Loader* loader = furi_record_open(RECORD_LOADER);
LoaderStatus status;
if(selected->is_app) {
char* param = strrchr(string_get_cstr(selected->path), '/');
if(param != NULL) {
param++;
}
status = loader_start(loader, flipper_app_name[selected->type], param);
} else {
status = loader_start(
loader, flipper_app_name[selected->type], string_get_cstr(selected->path));
}
if(status != LoaderStatusOk) {
FURI_LOG_E(TAG, "loader_start failed: %d", status);
}
furi_record_close(RECORD_LOADER);
}
void archive_scene_browser_callback(ArchiveBrowserEvent event, void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
view_dispatcher_send_custom_event(archive->view_dispatcher, event);
}
void archive_scene_browser_on_enter(void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
ArchiveBrowserView* browser = archive->browser;
browser->is_root = true;
archive_browser_set_callback(browser, archive_scene_browser_callback, archive);
archive_update_focus(browser, archive->text_store);
view_dispatcher_switch_to_view(archive->view_dispatcher, ArchiveViewBrowser);
Loader* loader = furi_record_open(RECORD_LOADER);
archive->loader_stop_subscription =
furi_pubsub_subscribe(loader_get_pubsub(loader), archive_loader_callback, archive);
furi_record_close(RECORD_LOADER);
uint32_t state = scene_manager_get_scene_state(archive->scene_manager, ArchiveAppSceneBrowser);
if(state == SCENE_STATE_NEED_REFRESH) {
view_dispatcher_send_custom_event(
archive->view_dispatcher, ArchiveBrowserEventListRefresh);
}
scene_manager_set_scene_state(
archive->scene_manager, ArchiveAppSceneBrowser, SCENE_STATE_DEFAULT);
}
bool archive_scene_browser_on_event(void* context, SceneManagerEvent event) {
ArchiveApp* archive = (ArchiveApp*)context;
ArchiveBrowserView* browser = archive->browser;
ArchiveFile_t* selected = archive_get_current_file(browser);
bool favorites = archive_get_tab(browser) == ArchiveTabFavorites;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) {
case ArchiveBrowserEventFileMenuOpen:
archive_show_file_menu(browser, true);
consumed = true;
break;
case ArchiveBrowserEventFileMenuClose:
archive_show_file_menu(browser, false);
consumed = true;
break;
case ArchiveBrowserEventFileMenuRun:
if(archive_is_known_app(selected->type)) {
archive_run_in_app(browser, selected);
archive_show_file_menu(browser, false);
}
consumed = true;
break;
case ArchiveBrowserEventFileMenuPin: {
const char* name = archive_get_name(browser);
if(favorites) {
archive_favorites_delete(name);
archive_file_array_rm_selected(browser);
archive_show_file_menu(browser, false);
} else if(archive_is_known_app(selected->type)) {
if(archive_is_favorite("%s", name)) {
archive_favorites_delete("%s", name);
} else {
archive_file_append(ARCHIVE_FAV_PATH, "%s\n", name);
}
archive_show_file_menu(browser, false);
}
consumed = true;
} break;
case ArchiveBrowserEventFileMenuRename:
if(favorites) {
browser->callback(ArchiveBrowserEventEnterFavMove, browser->context);
} else if((archive_is_known_app(selected->type)) && (selected->is_app == false)) {
archive_show_file_menu(browser, false);
scene_manager_set_scene_state(
archive->scene_manager, ArchiveAppSceneBrowser, SCENE_STATE_NEED_REFRESH);
scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneRename);
}
consumed = true;
break;
case ArchiveBrowserEventFileMenuDelete:
if(archive_get_tab(browser) != ArchiveTabFavorites) {
scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneDelete);
}
consumed = true;
break;
case ArchiveBrowserEventEnterDir:
archive_enter_dir(browser, selected->path);
consumed = true;
break;
case ArchiveBrowserEventFavMoveUp:
archive_file_array_swap(browser, 1);
consumed = true;
break;
case ArchiveBrowserEventFavMoveDown:
archive_file_array_swap(browser, -1);
consumed = true;
break;
case ArchiveBrowserEventEnterFavMove:
string_set(archive->fav_move_str, selected->path);
archive_show_file_menu(browser, false);
archive_favorites_move_mode(archive->browser, true);
consumed = true;
break;
case ArchiveBrowserEventExitFavMove:
archive_update_focus(browser, string_get_cstr(archive->fav_move_str));
archive_favorites_move_mode(archive->browser, false);
consumed = true;
break;
case ArchiveBrowserEventSaveFavMove:
archive_favorites_move_mode(archive->browser, false);
archive_favorites_save(archive->browser);
consumed = true;
break;
case ArchiveBrowserEventLoadPrevItems:
archive_file_array_load(archive->browser, -1);
consumed = true;
break;
case ArchiveBrowserEventLoadNextItems:
archive_file_array_load(archive->browser, 1);
consumed = true;
break;
case ArchiveBrowserEventListRefresh:
if(!favorites) {
archive_refresh_dir(browser);
} else {
archive_favorites_read(browser);
}
consumed = true;
break;
case ArchiveBrowserEventExit:
if(!archive_is_home(browser)) {
archive_leave_dir(browser);
} else {
Loader* loader = furi_record_open(RECORD_LOADER);
furi_pubsub_unsubscribe(
loader_get_pubsub(loader), archive->loader_stop_subscription);
furi_record_close(RECORD_LOADER);
view_dispatcher_stop(archive->view_dispatcher);
}
consumed = true;
break;
default:
break;
}
}
return consumed;
}
void archive_scene_browser_on_exit(void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
Loader* loader = furi_record_open(RECORD_LOADER);
furi_pubsub_unsubscribe(loader_get_pubsub(loader), archive->loader_stop_subscription);
furi_record_close(RECORD_LOADER);
}

View File

@@ -1,3 +0,0 @@
ADD_SCENE(archive, browser, Browser)
ADD_SCENE(archive, rename, Rename)
ADD_SCENE(archive, delete, Delete)

View File

@@ -1,89 +0,0 @@
#include "../archive_i.h"
#include "../helpers/archive_favorites.h"
#include "../helpers/archive_files.h"
#include "../helpers/archive_browser.h"
#include "archive/views/archive_browser_view.h"
#include "toolbox/path.h"
#define SCENE_RENAME_CUSTOM_EVENT (0UL)
#define MAX_TEXT_INPUT_LEN 22
void archive_scene_rename_text_input_callback(void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
view_dispatcher_send_custom_event(archive->view_dispatcher, SCENE_RENAME_CUSTOM_EVENT);
}
void archive_scene_rename_on_enter(void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
TextInput* text_input = archive->text_input;
ArchiveFile_t* current = archive_get_current_file(archive->browser);
string_t filename;
string_init(filename);
path_extract_filename(current->path, filename, true);
strlcpy(archive->text_store, string_get_cstr(filename), MAX_NAME_LEN);
path_extract_extension(current->path, archive->file_extension, MAX_EXT_LEN);
text_input_set_header_text(text_input, "Rename:");
text_input_set_result_callback(
text_input,
archive_scene_rename_text_input_callback,
archive,
archive->text_store,
MAX_TEXT_INPUT_LEN,
false);
ValidatorIsFile* validator_is_file = validator_is_file_alloc_init(
string_get_cstr(archive->browser->path), archive->file_extension, "");
text_input_set_validator(text_input, validator_is_file_callback, validator_is_file);
string_clear(filename);
view_dispatcher_switch_to_view(archive->view_dispatcher, ArchiveViewTextInput);
}
bool archive_scene_rename_on_event(void* context, SceneManagerEvent event) {
ArchiveApp* archive = (ArchiveApp*)context;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SCENE_RENAME_CUSTOM_EVENT) {
Storage* fs_api = furi_record_open(RECORD_STORAGE);
const char* path_src = archive_get_name(archive->browser);
ArchiveFile_t* file = archive_get_current_file(archive->browser);
string_t path_dst;
string_init(path_dst);
path_extract_dirname(path_src, path_dst);
string_cat_printf(path_dst, "/%s%s", archive->text_store, known_ext[file->type]);
storage_common_rename(fs_api, path_src, string_get_cstr(path_dst));
furi_record_close(RECORD_STORAGE);
if(file->fav) {
archive_favorites_rename(path_src, string_get_cstr(path_dst));
}
string_clear(path_dst);
scene_manager_next_scene(archive->scene_manager, ArchiveAppSceneBrowser);
consumed = true;
}
}
return consumed;
}
void archive_scene_rename_on_exit(void* context) {
ArchiveApp* archive = (ArchiveApp*)context;
// Clear view
void* validator_context = text_input_get_validator_callback_context(archive->text_input);
text_input_set_validator(archive->text_input, NULL, NULL);
validator_is_file_free(validator_context);
text_input_reset(archive->text_input);
}

View File

@@ -1,393 +0,0 @@
#include "assets_icons.h"
#include "toolbox/path.h"
#include <furi.h>
#include "../archive_i.h"
#include "archive_browser_view.h"
#include "../helpers/archive_browser.h"
static const char* ArchiveTabNames[] = {
[ArchiveTabFavorites] = "Favorites",
[ArchiveTabIButton] = "iButton",
[ArchiveTabNFC] = "NFC",
[ArchiveTabSubGhz] = "Sub-GHz",
[ArchiveTabLFRFID] = "RFID LF",
[ArchiveTabInfrared] = "Infrared",
[ArchiveTabBadUsb] = "Bad USB",
[ArchiveTabU2f] = "U2F",
[ArchiveTabBrowser] = "Browser",
};
static const Icon* ArchiveItemIcons[] = {
[ArchiveFileTypeIButton] = &I_ibutt_10px,
[ArchiveFileTypeNFC] = &I_Nfc_10px,
[ArchiveFileTypeSubGhz] = &I_sub1_10px,
[ArchiveFileTypeLFRFID] = &I_125_10px,
[ArchiveFileTypeInfrared] = &I_ir_10px,
[ArchiveFileTypeBadUsb] = &I_badusb_10px,
[ArchiveFileTypeU2f] = &I_u2f_10px,
[ArchiveFileTypeUpdateManifest] = &I_update_10px,
[ArchiveFileTypeFolder] = &I_dir_10px,
[ArchiveFileTypeUnknown] = &I_unknown_10px,
[ArchiveFileTypeLoading] = &I_loading_10px,
};
void archive_browser_set_callback(
ArchiveBrowserView* browser,
ArchiveBrowserViewCallback callback,
void* context) {
furi_assert(browser);
furi_assert(callback);
browser->callback = callback;
browser->context = context;
}
static void render_item_menu(Canvas* canvas, ArchiveBrowserViewModel* model) {
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 71, 17, 57, 46);
canvas_set_color(canvas, ColorBlack);
elements_slightly_rounded_frame(canvas, 70, 16, 58, 48);
string_t menu[MENU_ITEMS];
string_init_set_str(menu[0], "Run in app");
string_init_set_str(menu[1], "Pin");
string_init_set_str(menu[2], "Rename");
string_init_set_str(menu[3], "Delete");
ArchiveFile_t* selected = files_array_get(model->files, model->item_idx - model->array_offset);
if((selected->fav) || (model->tab_idx == ArchiveTabFavorites)) {
string_set_str(menu[1], "Unpin");
}
if(!archive_is_known_app(selected->type)) {
string_set_str(menu[0], "---");
string_set_str(menu[1], "---");
string_set_str(menu[2], "---");
} else {
if(model->tab_idx == ArchiveTabFavorites) {
string_set_str(menu[2], "Move");
string_set_str(menu[3], "---");
} else if(selected->is_app) {
string_set_str(menu[2], "---");
}
}
for(size_t i = 0; i < MENU_ITEMS; i++) {
canvas_draw_str(canvas, 82, 27 + i * 11, string_get_cstr(menu[i]));
string_clear(menu[i]);
}
canvas_draw_icon(canvas, 74, 20 + model->menu_idx * 11, &I_ButtonRight_4x7);
}
static void archive_draw_frame(Canvas* canvas, uint16_t idx, bool scrollbar, bool moving) {
uint8_t x_offset = moving ? MOVE_OFFSET : 0;
canvas_set_color(canvas, ColorBlack);
canvas_draw_box(
canvas,
0 + x_offset,
15 + idx * FRAME_HEIGHT,
(scrollbar ? 122 : 127) - x_offset,
FRAME_HEIGHT);
canvas_set_color(canvas, ColorWhite);
canvas_draw_dot(canvas, 0 + x_offset, 15 + idx * FRAME_HEIGHT);
canvas_draw_dot(canvas, 1 + x_offset, 15 + idx * FRAME_HEIGHT);
canvas_draw_dot(canvas, 0 + x_offset, (15 + idx * FRAME_HEIGHT) + 1);
canvas_draw_dot(canvas, 0 + x_offset, (15 + idx * FRAME_HEIGHT) + 11);
canvas_draw_dot(canvas, scrollbar ? 121 : 126, 15 + idx * FRAME_HEIGHT);
canvas_draw_dot(canvas, scrollbar ? 121 : 126, (15 + idx * FRAME_HEIGHT) + 11);
}
static void archive_draw_loading(Canvas* canvas, ArchiveBrowserViewModel* model) {
furi_assert(model);
uint8_t x = 128 / 2 - 24 / 2;
uint8_t y = 64 / 2 - 24 / 2;
canvas_draw_icon(canvas, x, y, &A_Loading_24);
}
static void draw_list(Canvas* canvas, ArchiveBrowserViewModel* model) {
furi_assert(model);
size_t array_size = files_array_size(model->files);
bool scrollbar = model->item_cnt > 4;
for(uint32_t i = 0; i < MIN(model->item_cnt, MENU_ITEMS); ++i) {
string_t str_buf;
string_init(str_buf);
int32_t idx = CLAMP((uint32_t)(i + model->list_offset), model->item_cnt, 0u);
uint8_t x_offset = (model->move_fav && model->item_idx == idx) ? MOVE_OFFSET : 0;
ArchiveFileTypeEnum file_type = ArchiveFileTypeLoading;
if(archive_is_item_in_array(model, idx)) {
ArchiveFile_t* file = files_array_get(
model->files, CLAMP(idx - model->array_offset, (int32_t)(array_size - 1), 0));
path_extract_filename(file->path, str_buf, archive_is_known_app(file->type));
file_type = file->type;
} else {
string_set_str(str_buf, "---");
}
elements_string_fit_width(
canvas, str_buf, (scrollbar ? MAX_LEN_PX - 6 : MAX_LEN_PX) - x_offset);
if(model->item_idx == idx) {
archive_draw_frame(canvas, i, scrollbar, model->move_fav);
} else {
canvas_set_color(canvas, ColorBlack);
}
canvas_draw_icon(canvas, 2 + x_offset, 16 + i * FRAME_HEIGHT, ArchiveItemIcons[file_type]);
canvas_draw_str(canvas, 15 + x_offset, 24 + i * FRAME_HEIGHT, string_get_cstr(str_buf));
string_clear(str_buf);
}
if(scrollbar) {
elements_scrollbar_pos(canvas, 126, 15, 49, model->item_idx, model->item_cnt);
}
if(model->menu) {
render_item_menu(canvas, model);
}
}
static void archive_render_status_bar(Canvas* canvas, ArchiveBrowserViewModel* model) {
furi_assert(model);
const char* tab_name = ArchiveTabNames[model->tab_idx];
canvas_draw_icon(canvas, 0, 0, &I_Background_128x11);
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, 0, 0, 50, 13);
canvas_draw_box(canvas, 107, 0, 20, 13);
canvas_set_color(canvas, ColorBlack);
canvas_draw_rframe(canvas, 0, 0, 51, 13, 1); // frame
canvas_draw_line(canvas, 49, 1, 49, 11); // shadow right
canvas_draw_line(canvas, 1, 11, 49, 11); // shadow bottom
canvas_draw_str_aligned(canvas, 25, 9, AlignCenter, AlignBottom, tab_name);
canvas_draw_rframe(canvas, 107, 0, 21, 13, 1);
canvas_draw_line(canvas, 126, 1, 126, 11);
canvas_draw_line(canvas, 108, 11, 126, 11);
if(model->move_fav) {
canvas_draw_icon(canvas, 110, 4, &I_ButtonUp_7x4);
canvas_draw_icon(canvas, 117, 4, &I_ButtonDown_7x4);
} else {
canvas_draw_icon(canvas, 111, 2, &I_ButtonLeft_4x7);
canvas_draw_icon(canvas, 119, 2, &I_ButtonRight_4x7);
}
canvas_set_color(canvas, ColorWhite);
canvas_draw_dot(canvas, 50, 0);
canvas_draw_dot(canvas, 127, 0);
canvas_set_color(canvas, ColorBlack);
}
void archive_view_render(Canvas* canvas, void* mdl) {
ArchiveBrowserViewModel* model = mdl;
archive_render_status_bar(canvas, mdl);
if(model->folder_loading) {
archive_draw_loading(canvas, model);
} else if(model->item_cnt > 0) {
draw_list(canvas, model);
} else {
canvas_draw_str_aligned(
canvas, GUI_DISPLAY_WIDTH / 2, 40, AlignCenter, AlignCenter, "Empty");
}
}
View* archive_browser_get_view(ArchiveBrowserView* browser) {
furi_assert(browser);
return browser->view;
}
static bool is_file_list_load_required(ArchiveBrowserViewModel* model) {
size_t array_size = files_array_size(model->files);
if((model->list_loading) || (array_size >= model->item_cnt)) {
return false;
}
if((model->array_offset > 0) &&
(model->item_idx < (model->array_offset + FILE_LIST_BUF_LEN / 4))) {
return true;
}
if(((model->array_offset + array_size) < model->item_cnt) &&
(model->item_idx > (int32_t)(model->array_offset + array_size - FILE_LIST_BUF_LEN / 4))) {
return true;
}
return false;
}
bool archive_view_input(InputEvent* event, void* context) {
furi_assert(event);
furi_assert(context);
ArchiveBrowserView* browser = context;
bool in_menu;
bool move_fav_mode;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
in_menu = model->menu;
move_fav_mode = model->move_fav;
return false;
});
if(in_menu) {
if(event->type == InputTypeShort) {
if(event->key == InputKeyUp || event->key == InputKeyDown) {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
if(event->key == InputKeyUp) {
model->menu_idx = ((model->menu_idx - 1) + MENU_ITEMS) % MENU_ITEMS;
} else if(event->key == InputKeyDown) {
model->menu_idx = (model->menu_idx + 1) % MENU_ITEMS;
}
return true;
});
}
if(event->key == InputKeyOk) {
uint8_t idx;
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
idx = model->menu_idx;
return false;
});
browser->callback(file_menu_actions[idx], browser->context);
} else if(event->key == InputKeyBack) {
browser->callback(ArchiveBrowserEventFileMenuClose, browser->context);
}
}
} else {
if(event->type == InputTypeShort) {
if(event->key == InputKeyLeft || event->key == InputKeyRight) {
if(move_fav_mode) return false;
archive_switch_tab(browser, event->key);
} else if(event->key == InputKeyBack) {
if(move_fav_mode) {
browser->callback(ArchiveBrowserEventExitFavMove, browser->context);
} else {
browser->callback(ArchiveBrowserEventExit, browser->context);
}
}
}
if((event->key == InputKeyUp || event->key == InputKeyDown) &&
(event->type == InputTypeShort || event->type == InputTypeRepeat)) {
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
if(event->key == InputKeyUp) {
model->item_idx =
((model->item_idx - 1) + model->item_cnt) % model->item_cnt;
if(is_file_list_load_required(model)) {
model->list_loading = true;
browser->callback(ArchiveBrowserEventLoadPrevItems, browser->context);
}
if(move_fav_mode) {
browser->callback(ArchiveBrowserEventFavMoveUp, browser->context);
}
} else if(event->key == InputKeyDown) {
model->item_idx = (model->item_idx + 1) % model->item_cnt;
if(is_file_list_load_required(model)) {
model->list_loading = true;
browser->callback(ArchiveBrowserEventLoadNextItems, browser->context);
}
if(move_fav_mode) {
browser->callback(ArchiveBrowserEventFavMoveDown, browser->context);
}
}
return true;
});
archive_update_offset(browser);
}
if(event->key == InputKeyOk) {
ArchiveFile_t* selected = archive_get_current_file(browser);
if(selected) {
bool favorites = archive_get_tab(browser) == ArchiveTabFavorites;
bool folder = selected->type == ArchiveFileTypeFolder;
if(event->type == InputTypeShort) {
if(favorites) {
if(move_fav_mode) {
browser->callback(ArchiveBrowserEventSaveFavMove, browser->context);
} else {
browser->callback(ArchiveBrowserEventFileMenuRun, browser->context);
}
} else if(folder) {
browser->callback(ArchiveBrowserEventEnterDir, browser->context);
} else {
browser->callback(ArchiveBrowserEventFileMenuOpen, browser->context);
}
} else if(event->type == InputTypeLong) {
if(move_fav_mode) {
browser->callback(ArchiveBrowserEventSaveFavMove, browser->context);
} else if(folder || favorites) {
browser->callback(ArchiveBrowserEventFileMenuOpen, browser->context);
}
}
}
}
}
return true;
}
ArchiveBrowserView* browser_alloc() {
ArchiveBrowserView* browser = malloc(sizeof(ArchiveBrowserView));
browser->view = view_alloc();
view_allocate_model(browser->view, ViewModelTypeLocking, sizeof(ArchiveBrowserViewModel));
view_set_context(browser->view, browser);
view_set_draw_callback(browser->view, archive_view_render);
view_set_input_callback(browser->view, archive_view_input);
string_init_set_str(browser->path, archive_get_default_path(TAB_DEFAULT));
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_init(model->files);
model->tab_idx = TAB_DEFAULT;
return true;
});
return browser;
}
void browser_free(ArchiveBrowserView* browser) {
furi_assert(browser);
if(browser->worker_running) {
file_browser_worker_free(browser->worker);
}
with_view_model(
browser->view, (ArchiveBrowserViewModel * model) {
files_array_clear(model->files);
return false;
});
string_clear(browser->path);
view_free(browser->view);
free(browser);
}

View File

@@ -1,109 +0,0 @@
#pragma once
#include <gui/gui_i.h>
#include <gui/view.h>
#include <gui/canvas.h>
#include <gui/elements.h>
#include <furi.h>
#include <storage/storage.h>
#include "../helpers/archive_files.h"
#include "../helpers/archive_favorites.h"
#include "gui/modules/file_browser_worker.h"
#define MAX_LEN_PX 110
#define MAX_NAME_LEN 255
#define MAX_EXT_LEN 6
#define FRAME_HEIGHT 12
#define MENU_ITEMS 4u
#define MOVE_OFFSET 5u
typedef enum {
ArchiveTabFavorites,
ArchiveTabSubGhz,
ArchiveTabLFRFID,
ArchiveTabNFC,
ArchiveTabInfrared,
ArchiveTabIButton,
ArchiveTabBadUsb,
ArchiveTabU2f,
ArchiveTabBrowser,
ArchiveTabTotal,
} ArchiveTabEnum;
typedef enum {
ArchiveBrowserEventFileMenuOpen,
ArchiveBrowserEventFileMenuClose,
ArchiveBrowserEventFileMenuRun,
ArchiveBrowserEventFileMenuPin,
ArchiveBrowserEventFileMenuRename,
ArchiveBrowserEventFileMenuDelete,
ArchiveBrowserEventEnterDir,
ArchiveBrowserEventFavMoveUp,
ArchiveBrowserEventFavMoveDown,
ArchiveBrowserEventEnterFavMove,
ArchiveBrowserEventExitFavMove,
ArchiveBrowserEventSaveFavMove,
ArchiveBrowserEventLoadPrevItems,
ArchiveBrowserEventLoadNextItems,
ArchiveBrowserEventListRefresh,
ArchiveBrowserEventExit,
} ArchiveBrowserEvent;
static const uint8_t file_menu_actions[MENU_ITEMS] = {
[0] = ArchiveBrowserEventFileMenuRun,
[1] = ArchiveBrowserEventFileMenuPin,
[2] = ArchiveBrowserEventFileMenuRename,
[3] = ArchiveBrowserEventFileMenuDelete,
};
typedef struct ArchiveBrowserView ArchiveBrowserView;
typedef void (*ArchiveBrowserViewCallback)(ArchiveBrowserEvent event, void* context);
typedef enum {
BrowserActionBrowse,
BrowserActionItemMenu,
BrowserActionTotal,
} BrowserActionEnum;
struct ArchiveBrowserView {
View* view;
BrowserWorker* worker;
bool worker_running;
ArchiveBrowserViewCallback callback;
void* context;
string_t path;
InputKey last_tab_switch_dir;
bool is_root;
};
typedef struct {
ArchiveTabEnum tab_idx;
files_array_t files;
uint8_t menu_idx;
bool menu;
bool move_fav;
bool list_loading;
bool folder_loading;
uint32_t item_cnt;
int32_t item_idx;
int32_t array_offset;
int32_t list_offset;
} ArchiveBrowserViewModel;
void archive_browser_set_callback(
ArchiveBrowserView* browser,
ArchiveBrowserViewCallback callback,
void* context);
View* archive_browser_get_view(ArchiveBrowserView* browser);
ArchiveBrowserView* browser_alloc();
void browser_free(ArchiveBrowserView* browser);

View File

@@ -1,10 +0,0 @@
App(
appid="arkanoid_game",
name="Arkanoid",
apptype=FlipperAppType.GAME,
entry_point="arkanoid_game_app",
cdefines=["APP_ARKANOID_GAME"],
requires=["gui"],
stack_size=4 * 1024,
order=30,
)

View File

@@ -1,456 +0,0 @@
#include <furi.h>
#include <gui/gui.h>
#include <input/input.h>
#include <stdlib.h>
#include <gui/view.h>
#include <notification/notification.h>
#include <notification/notification_messages.h>
#define TAG "Arkanoid"
#define FLIPPER_LCD_WIDTH 128
#define FLIPPER_LCD_HEIGHT 64
typedef enum { EventTypeTick, EventTypeKey } EventType;
typedef struct {
//Brick Bounds used in collision detection
int leftBrick;
int rightBrick;
int topBrick;
int bottomBrick;
bool isHit[4][13]; //Array of if bricks are hit or not
} BrickState;
typedef struct {
int dx; //Initial movement of ball
int dy; //Initial movement of ball
int xb; //Balls starting possition
int yb; //Balls starting possition
bool released; //If the ball has been released by the player
//Ball Bounds used in collision detection
int leftBall;
int rightBall;
int topBall;
int bottomBall;
} BallState;
typedef struct {
BallState ball_state;
BrickState brick_state;
NotificationApp* notify;
unsigned int COLUMNS; //Columns of bricks
unsigned int ROWS; //Rows of bricks
bool initialDraw; //If the inital draw has happened
int xPaddle; //X position of paddle
char text[16]; //General string buffer
bool bounced; //Used to fix double bounce glitch
int lives; //Amount of lives
int level; //Current level
unsigned int score; //Score for the game
unsigned int brickCount; //Amount of bricks hit
int tick; //Tick counter
} ArkanoidState;
typedef struct {
EventType type;
InputEvent input;
} GameEvent;
static const NotificationSequence sequence_short_sound = {
&message_note_c5,
&message_delay_50,
&message_sound_off,
NULL,
};
// generate number in range [min,max)
int rand_range(int min, int max) {
int number = min + rand() % (max - min);
return number;
}
void move_ball(Canvas* canvas, ArkanoidState* st) {
st->tick++;
if(st->ball_state.released) {
//Move ball
if(abs(st->ball_state.dx) == 2) {
st->ball_state.xb += st->ball_state.dx / 2;
// 2x speed is really 1.5 speed
if(st->tick % 2 == 0) st->ball_state.xb += st->ball_state.dx / 2;
} else {
st->ball_state.xb += st->ball_state.dx;
}
st->ball_state.yb = st->ball_state.yb + st->ball_state.dy;
//Set bounds
st->ball_state.leftBall = st->ball_state.xb;
st->ball_state.rightBall = st->ball_state.xb + 2;
st->ball_state.topBall = st->ball_state.yb;
st->ball_state.bottomBall = st->ball_state.yb + 2;
//Bounce off top edge
if(st->ball_state.yb <= 0) {
st->ball_state.yb = 2;
st->ball_state.dy = -st->ball_state.dy;
}
//Lose a life if bottom edge hit
if(st->ball_state.yb >= FLIPPER_LCD_HEIGHT) {
canvas_draw_frame(canvas, st->xPaddle, FLIPPER_LCD_HEIGHT - 1, 11, 1);
st->xPaddle = 54;
st->ball_state.yb = 60;
st->ball_state.released = false;
st->lives--;
if(rand_range(0, 2) == 0) {
st->ball_state.dx = 1;
} else {
st->ball_state.dx = -1;
}
}
//Bounce off left side
if(st->ball_state.xb <= 0) {
st->ball_state.xb = 2;
st->ball_state.dx = -st->ball_state.dx;
}
//Bounce off right side
if(st->ball_state.xb >= FLIPPER_LCD_WIDTH - 2) {
st->ball_state.xb = FLIPPER_LCD_WIDTH - 4;
st->ball_state.dx = -st->ball_state.dx;
// arduboy.tunes.tone(523, 250);
}
//Bounce off paddle
if(st->ball_state.xb + 1 >= st->xPaddle && st->ball_state.xb <= st->xPaddle + 12 &&
st->ball_state.yb + 2 >= FLIPPER_LCD_HEIGHT - 1 &&
st->ball_state.yb <= FLIPPER_LCD_HEIGHT) {
st->ball_state.dy = -st->ball_state.dy;
st->ball_state.dx =
((st->ball_state.xb - (st->xPaddle + 6)) / 3); //Applies spin on the ball
// prevent straight bounce, but not prevent roguuemaster from stealing
if(st->ball_state.dx == 0) {
st->ball_state.dx = (rand_range(0, 2) == 1) ? 1 : -1;
}
}
//Bounce off Bricks
for(unsigned int row = 0; row < st->ROWS; row++) {
for(unsigned int column = 0; column < st->COLUMNS; column++) {
if(!st->brick_state.isHit[row][column]) {
//Sets Brick bounds
st->brick_state.leftBrick = 10 * column;
st->brick_state.rightBrick = 10 * column + 10;
st->brick_state.topBrick = 6 * row + 1;
st->brick_state.bottomBrick = 6 * row + 7;
//If A collison has occured
if(st->ball_state.topBall <= st->brick_state.bottomBrick &&
st->ball_state.bottomBall >= st->brick_state.topBrick &&
st->ball_state.leftBall <= st->brick_state.rightBrick &&
st->ball_state.rightBall >= st->brick_state.leftBrick) {
st->score += st->level;
// Blink led when we hit some brick
notification_message(st->notify, &sequence_short_sound);
//notification_message(st->notify, &sequence_blink_white_100);
st->brickCount++;
st->brick_state.isHit[row][column] = true;
canvas_draw_frame(canvas, 10 * column, 2 + 6 * row, 8, 4);
//Vertical collision
if(st->ball_state.bottomBall > st->brick_state.bottomBrick ||
st->ball_state.topBall < st->brick_state.topBrick) {
//Only bounce once each ball move
if(!st->bounced) {
st->ball_state.dy = -st->ball_state.dy;
st->ball_state.yb += st->ball_state.dy;
st->bounced = true;
}
}
//Hoizontal collision
if(st->ball_state.leftBall < st->brick_state.leftBrick ||
st->ball_state.rightBall > st->brick_state.rightBrick) {
//Only bounce once brick each ball move
if(!st->bounced) {
st->ball_state.dx = -st->ball_state.dx;
st->ball_state.xb += st->ball_state.dx;
st->bounced = true;
}
}
}
}
}
}
//Reset Bounce
st->bounced = false;
} else {
//Ball follows paddle
st->ball_state.xb = st->xPaddle + 5;
}
}
void draw_lives(Canvas* canvas, ArkanoidState* arkanoid_state) {
if(arkanoid_state->lives == 3) {
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 11);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 11);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 12);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 12);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 15);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 15);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 16);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 16);
} else if(arkanoid_state->lives == 2) {
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 11);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 11);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 12);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 12);
} else {
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
}
}
void draw_score(Canvas* canvas, ArkanoidState* arkanoid_state) {
snprintf(arkanoid_state->text, sizeof(arkanoid_state->text), "%u", arkanoid_state->score);
canvas_draw_str_aligned(
canvas,
FLIPPER_LCD_WIDTH - 2,
FLIPPER_LCD_HEIGHT - 6,
AlignRight,
AlignBottom,
arkanoid_state->text);
}
void draw_ball(Canvas* canvas, ArkanoidState* ast) {
canvas_draw_dot(canvas, ast->ball_state.xb, ast->ball_state.yb);
canvas_draw_dot(canvas, ast->ball_state.xb + 1, ast->ball_state.yb);
canvas_draw_dot(canvas, ast->ball_state.xb, ast->ball_state.yb + 1);
canvas_draw_dot(canvas, ast->ball_state.xb + 1, ast->ball_state.yb + 1);
move_ball(canvas, ast);
}
void draw_paddle(Canvas* canvas, ArkanoidState* arkanoid_state) {
canvas_draw_frame(canvas, arkanoid_state->xPaddle, FLIPPER_LCD_HEIGHT - 1, 11, 1);
}
void reset_level(Canvas* canvas, ArkanoidState* arkanoid_state) {
//Undraw paddle
canvas_draw_frame(canvas, arkanoid_state->xPaddle, FLIPPER_LCD_HEIGHT - 1, 11, 1);
//Undraw ball
canvas_draw_dot(canvas, arkanoid_state->ball_state.xb, arkanoid_state->ball_state.yb);
canvas_draw_dot(canvas, arkanoid_state->ball_state.xb + 1, arkanoid_state->ball_state.yb);
canvas_draw_dot(canvas, arkanoid_state->ball_state.xb, arkanoid_state->ball_state.yb + 1);
canvas_draw_dot(canvas, arkanoid_state->ball_state.xb + 1, arkanoid_state->ball_state.yb + 1);
//Alter various variables to reset the game
arkanoid_state->xPaddle = 54;
arkanoid_state->ball_state.yb = 60;
arkanoid_state->brickCount = 0;
arkanoid_state->ball_state.released = false;
// Reset all brick hit states
for(unsigned int row = 0; row < arkanoid_state->ROWS; row++) {
for(unsigned int column = 0; column < arkanoid_state->COLUMNS; column++) {
arkanoid_state->brick_state.isHit[row][column] = false;
}
}
}
static void arkanoid_state_init(ArkanoidState* arkanoid_state) {
// Init notification
arkanoid_state->notify = furi_record_open(RECORD_NOTIFICATION);
// Set the initial game state
arkanoid_state->COLUMNS = 13;
arkanoid_state->ROWS = 4;
arkanoid_state->ball_state.dx = -1;
arkanoid_state->ball_state.dy = -1;
arkanoid_state->bounced = false;
arkanoid_state->lives = 3;
arkanoid_state->level = 1;
arkanoid_state->score = 0;
arkanoid_state->COLUMNS = 13;
arkanoid_state->COLUMNS = 13;
// Reset initial state
arkanoid_state->initialDraw = false;
}
static void arkanoid_draw_callback(Canvas* const canvas, void* ctx) {
ArkanoidState* arkanoid_state = acquire_mutex((ValueMutex*)ctx, 25);
if(arkanoid_state == NULL) {
return;
}
//Initial level draw
if(!arkanoid_state->initialDraw) {
arkanoid_state->initialDraw = true;
// Set default font for text
canvas_set_font(canvas, FontSecondary);
//Draws the new level
reset_level(canvas, arkanoid_state);
}
//Draws new bricks and resets their values
for(unsigned int row = 0; row < arkanoid_state->ROWS; row++) {
for(unsigned int column = 0; column < arkanoid_state->COLUMNS; column++) {
if(!arkanoid_state->brick_state.isHit[row][column]) {
canvas_draw_frame(canvas, 10 * column, 2 + 6 * row, 8, 4);
}
}
}
if(arkanoid_state->lives > 0) {
draw_paddle(canvas, arkanoid_state);
draw_ball(canvas, arkanoid_state);
draw_score(canvas, arkanoid_state);
draw_lives(canvas, arkanoid_state);
if(arkanoid_state->brickCount == arkanoid_state->ROWS * arkanoid_state->COLUMNS) {
arkanoid_state->level++;
reset_level(canvas, arkanoid_state);
}
} else {
reset_level(canvas, arkanoid_state);
arkanoid_state->initialDraw = false;
arkanoid_state->lives = 3;
arkanoid_state->score = 0;
}
release_mutex((ValueMutex*)ctx, arkanoid_state);
}
static void arkanoid_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
furi_assert(event_queue);
GameEvent event = {.type = EventTypeKey, .input = *input_event};
furi_message_queue_put(event_queue, &event, FuriWaitForever);
}
static void arkanoid_update_timer_callback(FuriMessageQueue* event_queue) {
furi_assert(event_queue);
GameEvent event = {.type = EventTypeTick};
furi_message_queue_put(event_queue, &event, 0);
}
int32_t arkanoid_game_app(void* p) {
UNUSED(p);
int32_t return_code = 0;
// Set random seed from interrupts
srand(DWT->CYCCNT);
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(GameEvent));
ArkanoidState* arkanoid_state = malloc(sizeof(ArkanoidState));
arkanoid_state_init(arkanoid_state);
ValueMutex state_mutex;
if(!init_mutex(&state_mutex, arkanoid_state, sizeof(ArkanoidState))) {
FURI_LOG_E(TAG, "Cannot create mutex\r\n");
return_code = 255;
goto free_and_exit;
}
// Set system callbacks
ViewPort* view_port = view_port_alloc();
view_port_draw_callback_set(view_port, arkanoid_draw_callback, &state_mutex);
view_port_input_callback_set(view_port, arkanoid_input_callback, event_queue);
FuriTimer* timer =
furi_timer_alloc(arkanoid_update_timer_callback, FuriTimerTypePeriodic, event_queue);
furi_timer_start(timer, furi_kernel_get_tick_frequency() / 22);
// Open GUI and register view_port
Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
GameEvent event;
for(bool processing = true; processing;) {
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
ArkanoidState* arkanoid_state = (ArkanoidState*)acquire_mutex_block(&state_mutex);
if(event_status == FuriStatusOk) {
// Key events
if(event.type == EventTypeKey) {
if(event.input.type == InputTypePress || event.input.type == InputTypeLong ||
event.input.type == InputTypeRepeat) {
switch(event.input.key) {
case InputKeyBack:
processing = false;
break;
case InputKeyRight:
if(arkanoid_state->xPaddle < FLIPPER_LCD_WIDTH - 12) {
arkanoid_state->xPaddle += 8;
}
break;
case InputKeyLeft:
if(arkanoid_state->xPaddle > 0) {
arkanoid_state->xPaddle -= 8;
}
break;
case InputKeyUp:
break;
case InputKeyDown:
break;
case InputKeyOk:
//Release ball if FIRE pressed
arkanoid_state->ball_state.released = true;
//Apply random direction to ball on release
if(rand_range(0, 2) == 0) {
arkanoid_state->ball_state.dx = 1;
} else {
arkanoid_state->ball_state.dx = -1;
}
//Makes sure the ball heads upwards
arkanoid_state->ball_state.dy = -1;
break;
}
}
}
} else {
// Event timeout
FURI_LOG_D(TAG, "furi_message_queue: Event timeout");
}
view_port_update(view_port);
release_mutex(&state_mutex, arkanoid_state);
}
furi_timer_free(timer);
view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
furi_record_close(RECORD_GUI);
furi_record_close(RECORD_NOTIFICATION);
view_port_free(view_port);
delete_mutex(&state_mutex);
free_and_exit:
free(arkanoid_state);
furi_message_queue_free(event_queue);
return return_code;
}

View File

@@ -1,14 +0,0 @@
App(
appid="bad_usb",
name="Bad USB",
apptype=FlipperAppType.APP,
entry_point="bad_usb_app",
cdefines=["APP_BAD_USB"],
requires=[
"gui",
"dialogs",
],
stack_size=2 * 1024,
icon="A_BadUsb_14",
order=70,
)

View File

@@ -1,664 +0,0 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <input/input.h>
#include <lib/toolbox/args.h>
#include <furi_hal_usb_hid.h>
#include <storage/storage.h>
#include "bad_usb_script.h"
#include <dolphin/dolphin.h>
#define TAG "BadUSB"
#define WORKER_TAG TAG "Worker"
#define FILE_BUFFER_LEN 16
#define SCRIPT_STATE_ERROR (-1)
#define SCRIPT_STATE_END (-2)
#define SCRIPT_STATE_NEXT_LINE (-3)
#define BADUSB_ASCII_TO_KEY(script, x) \
(((uint8_t)x < 128) ? (script->layout[(uint8_t)x]) : HID_KEYBOARD_NONE)
typedef enum {
WorkerEvtToggle = (1 << 0),
WorkerEvtEnd = (1 << 1),
WorkerEvtConnect = (1 << 2),
WorkerEvtDisconnect = (1 << 3),
} WorkerEvtFlags;
struct BadUsbScript {
FuriHalUsbHidConfig hid_cfg;
BadUsbState st;
string_t file_path;
uint32_t defdelay;
uint16_t layout[128];
FuriThread* thread;
uint8_t file_buf[FILE_BUFFER_LEN + 1];
uint8_t buf_start;
uint8_t buf_len;
bool file_end;
string_t line;
string_t line_prev;
uint32_t repeat_cnt;
};
typedef struct {
char* name;
uint16_t keycode;
} DuckyKey;
static const DuckyKey ducky_keys[] = {
{"CTRL-ALT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_ALT},
{"CTRL-SHIFT", KEY_MOD_LEFT_CTRL | KEY_MOD_LEFT_SHIFT},
{"ALT-SHIFT", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_SHIFT},
{"ALT-GUI", KEY_MOD_LEFT_ALT | KEY_MOD_LEFT_GUI},
{"GUI-SHIFT", KEY_MOD_LEFT_GUI | KEY_MOD_LEFT_SHIFT},
{"CTRL", KEY_MOD_LEFT_CTRL},
{"CONTROL", KEY_MOD_LEFT_CTRL},
{"SHIFT", KEY_MOD_LEFT_SHIFT},
{"ALT", KEY_MOD_LEFT_ALT},
{"GUI", KEY_MOD_LEFT_GUI},
{"WINDOWS", KEY_MOD_LEFT_GUI},
{"DOWNARROW", HID_KEYBOARD_DOWN_ARROW},
{"DOWN", HID_KEYBOARD_DOWN_ARROW},
{"LEFTARROW", HID_KEYBOARD_LEFT_ARROW},
{"LEFT", HID_KEYBOARD_LEFT_ARROW},
{"RIGHTARROW", HID_KEYBOARD_RIGHT_ARROW},
{"RIGHT", HID_KEYBOARD_RIGHT_ARROW},
{"UPARROW", HID_KEYBOARD_UP_ARROW},
{"UP", HID_KEYBOARD_UP_ARROW},
{"ENTER", HID_KEYBOARD_RETURN},
{"BREAK", HID_KEYBOARD_PAUSE},
{"PAUSE", HID_KEYBOARD_PAUSE},
{"CAPSLOCK", HID_KEYBOARD_CAPS_LOCK},
{"DELETE", HID_KEYBOARD_DELETE},
{"BACKSPACE", HID_KEYPAD_BACKSPACE},
{"END", HID_KEYBOARD_END},
{"ESC", HID_KEYBOARD_ESCAPE},
{"ESCAPE", HID_KEYBOARD_ESCAPE},
{"HOME", HID_KEYBOARD_HOME},
{"INSERT", HID_KEYBOARD_INSERT},
{"NUMLOCK", HID_KEYPAD_NUMLOCK},
{"PAGEUP", HID_KEYBOARD_PAGE_UP},
{"PAGEDOWN", HID_KEYBOARD_PAGE_DOWN},
{"PRINTSCREEN", HID_KEYBOARD_PRINT_SCREEN},
{"SCROLLOCK", HID_KEYBOARD_SCROLL_LOCK},
{"SPACE", HID_KEYBOARD_SPACEBAR},
{"TAB", HID_KEYBOARD_TAB},
{"MENU", HID_KEYBOARD_APPLICATION},
{"APP", HID_KEYBOARD_APPLICATION},
{"F1", HID_KEYBOARD_F1},
{"F2", HID_KEYBOARD_F2},
{"F3", HID_KEYBOARD_F3},
{"F4", HID_KEYBOARD_F4},
{"F5", HID_KEYBOARD_F5},
{"F6", HID_KEYBOARD_F6},
{"F7", HID_KEYBOARD_F7},
{"F8", HID_KEYBOARD_F8},
{"F9", HID_KEYBOARD_F9},
{"F10", HID_KEYBOARD_F10},
{"F11", HID_KEYBOARD_F11},
{"F12", HID_KEYBOARD_F12},
};
static const char ducky_cmd_comment[] = {"REM"};
static const char ducky_cmd_id[] = {"ID"};
static const char ducky_cmd_delay[] = {"DELAY "};
static const char ducky_cmd_string[] = {"STRING "};
static const char ducky_cmd_defdelay_1[] = {"DEFAULT_DELAY "};
static const char ducky_cmd_defdelay_2[] = {"DEFAULTDELAY "};
static const char ducky_cmd_repeat[] = {"REPEAT "};
static const char ducky_cmd_altchar[] = {"ALTCHAR "};
static const char ducky_cmd_altstr_1[] = {"ALTSTRING "};
static const char ducky_cmd_altstr_2[] = {"ALTCODE "};
static const char ducky_cmd_lang[] = {"DUCKY_LANG"};
static const uint8_t numpad_keys[10] = {
HID_KEYPAD_0,
HID_KEYPAD_1,
HID_KEYPAD_2,
HID_KEYPAD_3,
HID_KEYPAD_4,
HID_KEYPAD_5,
HID_KEYPAD_6,
HID_KEYPAD_7,
HID_KEYPAD_8,
HID_KEYPAD_9,
};
static bool ducky_get_number(const char* param, uint32_t* val) {
uint32_t value = 0;
if(sscanf(param, "%lu", &value) == 1) {
*val = value;
return true;
}
return false;
}
static uint32_t ducky_get_command_len(const char* line) {
uint32_t len = strlen(line);
for(uint32_t i = 0; i < len; i++) {
if(line[i] == ' ') return i;
}
return 0;
}
static bool ducky_is_line_end(const char chr) {
return ((chr == ' ') || (chr == '\0') || (chr == '\r') || (chr == '\n'));
}
static void ducky_numlock_on() {
if((furi_hal_hid_get_led_state() & HID_KB_LED_NUM) == 0) {
furi_hal_hid_kb_press(HID_KEYBOARD_LOCK_NUM_LOCK);
furi_hal_hid_kb_release(HID_KEYBOARD_LOCK_NUM_LOCK);
}
}
static bool ducky_numpad_press(const char num) {
if((num < '0') || (num > '9')) return false;
uint16_t key = numpad_keys[num - '0'];
furi_hal_hid_kb_press(key);
furi_hal_hid_kb_release(key);
return true;
}
static bool ducky_altchar(const char* charcode) {
uint8_t i = 0;
bool state = false;
FURI_LOG_I(WORKER_TAG, "char %s", charcode);
furi_hal_hid_kb_press(KEY_MOD_LEFT_ALT);
while(!ducky_is_line_end(charcode[i])) {
state = ducky_numpad_press(charcode[i]);
if(state == false) break;
i++;
}
furi_hal_hid_kb_release(KEY_MOD_LEFT_ALT);
return state;
}
static bool ducky_altstring(const char* param) {
uint32_t i = 0;
bool state = false;
while(param[i] != '\0') {
if((param[i] < ' ') || (param[i] > '~')) {
i++;
continue; // Skip non-printable chars
}
char temp_str[4];
snprintf(temp_str, 4, "%u", param[i]);
state = ducky_altchar(temp_str);
if(state == false) break;
i++;
}
return state;
}
static bool ducky_string(BadUsbScript* bad_usb, const char* param) {
uint32_t i = 0;
while(param[i] != '\0') {
uint16_t keycode = BADUSB_ASCII_TO_KEY(bad_usb, param[i]);
if(keycode != HID_KEYBOARD_NONE) {
furi_hal_hid_kb_press(keycode);
furi_hal_hid_kb_release(keycode);
}
i++;
}
return true;
}
static uint16_t ducky_get_keycode(BadUsbScript* bad_usb, const char* param, bool accept_chars) {
for(uint8_t i = 0; i < (sizeof(ducky_keys) / sizeof(ducky_keys[0])); i++) {
uint8_t key_cmd_len = strlen(ducky_keys[i].name);
if((strncmp(param, ducky_keys[i].name, key_cmd_len) == 0) &&
(ducky_is_line_end(param[key_cmd_len]))) {
return ducky_keys[i].keycode;
}
}
if((accept_chars) && (strlen(param) > 0)) {
return (BADUSB_ASCII_TO_KEY(bad_usb, param[0]) & 0xFF);
}
return 0;
}
static int32_t ducky_parse_line(BadUsbScript* bad_usb, string_t line) {
uint32_t line_len = string_size(line);
const char* line_tmp = string_get_cstr(line);
bool state = false;
for(uint32_t i = 0; i < line_len; i++) {
if((line_tmp[i] != ' ') && (line_tmp[i] != '\t') && (line_tmp[i] != '\n')) {
line_tmp = &line_tmp[i];
break; // Skip spaces and tabs
}
if(i == line_len - 1) return SCRIPT_STATE_NEXT_LINE; // Skip empty lines
}
FURI_LOG_D(WORKER_TAG, "line:%s", line_tmp);
// General commands
if(strncmp(line_tmp, ducky_cmd_comment, strlen(ducky_cmd_comment)) == 0) {
// REM - comment line
return (0);
} else if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) {
// ID - executed in ducky_script_preload
return (0);
} else if(strncmp(line_tmp, ducky_cmd_lang, strlen(ducky_cmd_lang)) == 0) {
// DUCKY_LANG - ignore command to retain compatibility with existing scripts
return (0);
} else if(strncmp(line_tmp, ducky_cmd_delay, strlen(ducky_cmd_delay)) == 0) {
// DELAY
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
uint32_t delay_val = 0;
state = ducky_get_number(line_tmp, &delay_val);
if((state) && (delay_val > 0)) {
return (int32_t)delay_val;
}
return SCRIPT_STATE_ERROR;
} else if(
(strncmp(line_tmp, ducky_cmd_defdelay_1, strlen(ducky_cmd_defdelay_1)) == 0) ||
(strncmp(line_tmp, ducky_cmd_defdelay_2, strlen(ducky_cmd_defdelay_2)) == 0)) {
// DEFAULT_DELAY
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
state = ducky_get_number(line_tmp, &bad_usb->defdelay);
return (state) ? (0) : SCRIPT_STATE_ERROR;
} else if(strncmp(line_tmp, ducky_cmd_string, strlen(ducky_cmd_string)) == 0) {
// STRING
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
state = ducky_string(bad_usb, line_tmp);
return (state) ? (0) : SCRIPT_STATE_ERROR;
} else if(strncmp(line_tmp, ducky_cmd_altchar, strlen(ducky_cmd_altchar)) == 0) {
// ALTCHAR
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
ducky_numlock_on();
state = ducky_altchar(line_tmp);
return (state) ? (0) : SCRIPT_STATE_ERROR;
} else if(
(strncmp(line_tmp, ducky_cmd_altstr_1, strlen(ducky_cmd_altstr_1)) == 0) ||
(strncmp(line_tmp, ducky_cmd_altstr_2, strlen(ducky_cmd_altstr_2)) == 0)) {
// ALTSTRING
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
ducky_numlock_on();
state = ducky_altstring(line_tmp);
return (state) ? (0) : SCRIPT_STATE_ERROR;
} else if(strncmp(line_tmp, ducky_cmd_repeat, strlen(ducky_cmd_repeat)) == 0) {
// REPEAT
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
state = ducky_get_number(line_tmp, &bad_usb->repeat_cnt);
return (state) ? (0) : SCRIPT_STATE_ERROR;
} else {
// Special keys + modifiers
uint16_t key = ducky_get_keycode(bad_usb, line_tmp, false);
if(key == HID_KEYBOARD_NONE) return SCRIPT_STATE_ERROR;
if((key & 0xFF00) != 0) {
// It's a modifier key
line_tmp = &line_tmp[ducky_get_command_len(line_tmp) + 1];
key |= ducky_get_keycode(bad_usb, line_tmp, true);
}
furi_hal_hid_kb_press(key);
furi_hal_hid_kb_release(key);
return (0);
}
return SCRIPT_STATE_ERROR;
}
static bool ducky_set_usb_id(BadUsbScript* bad_usb, const char* line) {
if(sscanf(line, "%lX:%lX", &bad_usb->hid_cfg.vid, &bad_usb->hid_cfg.pid) == 2) {
bad_usb->hid_cfg.manuf[0] = '\0';
bad_usb->hid_cfg.product[0] = '\0';
uint8_t id_len = ducky_get_command_len(line);
if(!ducky_is_line_end(line[id_len + 1])) {
sscanf(
&line[id_len + 1],
"%31[^\r\n:]:%31[^\r\n]",
bad_usb->hid_cfg.manuf,
bad_usb->hid_cfg.product);
}
FURI_LOG_D(
WORKER_TAG,
"set id: %04X:%04X mfr:%s product:%s",
bad_usb->hid_cfg.vid,
bad_usb->hid_cfg.pid,
bad_usb->hid_cfg.manuf,
bad_usb->hid_cfg.product);
return true;
}
return false;
}
static bool ducky_script_preload(BadUsbScript* bad_usb, File* script_file) {
uint8_t ret = 0;
uint32_t line_len = 0;
string_reset(bad_usb->line);
do {
ret = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN);
for(uint16_t i = 0; i < ret; i++) {
if(bad_usb->file_buf[i] == '\n' && line_len > 0) {
bad_usb->st.line_nb++;
line_len = 0;
} else {
if(bad_usb->st.line_nb == 0) { // Save first line
string_push_back(bad_usb->line, bad_usb->file_buf[i]);
}
line_len++;
}
}
if(storage_file_eof(script_file)) {
if(line_len > 0) {
bad_usb->st.line_nb++;
break;
}
}
} while(ret > 0);
const char* line_tmp = string_get_cstr(bad_usb->line);
bool id_set = false; // Looking for ID command at first line
if(strncmp(line_tmp, ducky_cmd_id, strlen(ducky_cmd_id)) == 0) {
id_set = ducky_set_usb_id(bad_usb, &line_tmp[strlen(ducky_cmd_id) + 1]);
}
if(id_set) {
furi_check(furi_hal_usb_set_config(&usb_hid, &bad_usb->hid_cfg));
} else {
furi_check(furi_hal_usb_set_config(&usb_hid, NULL));
}
storage_file_seek(script_file, 0, true);
string_reset(bad_usb->line);
return true;
}
static int32_t ducky_script_execute_next(BadUsbScript* bad_usb, File* script_file) {
int32_t delay_val = 0;
if(bad_usb->repeat_cnt > 0) {
bad_usb->repeat_cnt--;
delay_val = ducky_parse_line(bad_usb, bad_usb->line_prev);
if(delay_val == SCRIPT_STATE_NEXT_LINE) { // Empty line
return 0;
} else if(delay_val < 0) { // Script error
bad_usb->st.error_line = bad_usb->st.line_cur - 1;
FURI_LOG_E(WORKER_TAG, "Unknown command at line %lu", bad_usb->st.line_cur - 1);
return SCRIPT_STATE_ERROR;
} else {
return (delay_val + bad_usb->defdelay);
}
}
string_set(bad_usb->line_prev, bad_usb->line);
string_reset(bad_usb->line);
while(1) {
if(bad_usb->buf_len == 0) {
bad_usb->buf_len = storage_file_read(script_file, bad_usb->file_buf, FILE_BUFFER_LEN);
if(storage_file_eof(script_file)) {
if((bad_usb->buf_len < FILE_BUFFER_LEN) && (bad_usb->file_end == false)) {
bad_usb->file_buf[bad_usb->buf_len] = '\n';
bad_usb->buf_len++;
bad_usb->file_end = true;
}
}
bad_usb->buf_start = 0;
if(bad_usb->buf_len == 0) return SCRIPT_STATE_END;
}
for(uint8_t i = bad_usb->buf_start; i < (bad_usb->buf_start + bad_usb->buf_len); i++) {
if(bad_usb->file_buf[i] == '\n' && string_size(bad_usb->line) > 0) {
bad_usb->st.line_cur++;
bad_usb->buf_len = bad_usb->buf_len + bad_usb->buf_start - (i + 1);
bad_usb->buf_start = i + 1;
delay_val = ducky_parse_line(bad_usb, bad_usb->line);
if(delay_val < 0) {
bad_usb->st.error_line = bad_usb->st.line_cur;
FURI_LOG_E(WORKER_TAG, "Unknown command at line %lu", bad_usb->st.line_cur);
return SCRIPT_STATE_ERROR;
} else {
return (delay_val + bad_usb->defdelay);
}
} else {
string_push_back(bad_usb->line, bad_usb->file_buf[i]);
}
}
bad_usb->buf_len = 0;
if(bad_usb->file_end) return SCRIPT_STATE_END;
}
return 0;
}
static void bad_usb_hid_state_callback(bool state, void* context) {
furi_assert(context);
BadUsbScript* bad_usb = context;
if(state == true)
furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtConnect);
else
furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtDisconnect);
}
static int32_t bad_usb_worker(void* context) {
BadUsbScript* bad_usb = context;
BadUsbWorkerState worker_state = BadUsbStateInit;
int32_t delay_val = 0;
FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config();
FURI_LOG_I(WORKER_TAG, "Init");
File* script_file = storage_file_alloc(furi_record_open(RECORD_STORAGE));
string_init(bad_usb->line);
string_init(bad_usb->line_prev);
furi_hal_hid_set_state_callback(bad_usb_hid_state_callback, bad_usb);
while(1) {
if(worker_state == BadUsbStateInit) { // State: initialization
if(storage_file_open(
script_file,
string_get_cstr(bad_usb->file_path),
FSAM_READ,
FSOM_OPEN_EXISTING)) {
if((ducky_script_preload(bad_usb, script_file)) && (bad_usb->st.line_nb > 0)) {
if(furi_hal_hid_is_connected()) {
worker_state = BadUsbStateIdle; // Ready to run
} else {
worker_state = BadUsbStateNotConnected; // USB not connected
}
} else {
worker_state = BadUsbStateScriptError; // Script preload error
}
} else {
FURI_LOG_E(WORKER_TAG, "File open error");
worker_state = BadUsbStateFileError; // File open error
}
bad_usb->st.state = worker_state;
} else if(worker_state == BadUsbStateNotConnected) { // State: USB not connected
uint32_t flags = furi_thread_flags_wait(
WorkerEvtEnd | WorkerEvtConnect, FuriFlagWaitAny, FuriWaitForever);
furi_check((flags & FuriFlagError) == 0);
if(flags & WorkerEvtEnd) {
break;
} else if(flags & WorkerEvtConnect) {
worker_state = BadUsbStateIdle; // Ready to run
}
bad_usb->st.state = worker_state;
} else if(worker_state == BadUsbStateIdle) { // State: ready to start
uint32_t flags = furi_thread_flags_wait(
WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect,
FuriFlagWaitAny,
FuriWaitForever);
furi_check((flags & FuriFlagError) == 0);
if(flags & WorkerEvtEnd) {
break;
} else if(flags & WorkerEvtToggle) { // Start executing script
DOLPHIN_DEED(DolphinDeedBadUsbPlayScript);
delay_val = 0;
bad_usb->buf_len = 0;
bad_usb->st.line_cur = 0;
bad_usb->defdelay = 0;
bad_usb->repeat_cnt = 0;
bad_usb->file_end = false;
storage_file_seek(script_file, 0, true);
worker_state = BadUsbStateRunning;
} else if(flags & WorkerEvtDisconnect) {
worker_state = BadUsbStateNotConnected; // USB disconnected
}
bad_usb->st.state = worker_state;
} else if(worker_state == BadUsbStateRunning) { // State: running
uint16_t delay_cur = (delay_val > 1000) ? (1000) : (delay_val);
uint32_t flags = furi_thread_flags_wait(
WorkerEvtEnd | WorkerEvtToggle | WorkerEvtDisconnect, FuriFlagWaitAny, delay_cur);
delay_val -= delay_cur;
if(!(flags & FuriFlagError)) {
if(flags & WorkerEvtEnd) {
break;
} else if(flags & WorkerEvtToggle) {
worker_state = BadUsbStateIdle; // Stop executing script
furi_hal_hid_kb_release_all();
} else if(flags & WorkerEvtDisconnect) {
worker_state = BadUsbStateNotConnected; // USB disconnected
furi_hal_hid_kb_release_all();
}
bad_usb->st.state = worker_state;
continue;
} else if((flags == FuriFlagErrorTimeout) || (flags == FuriFlagErrorResource)) {
if(delay_val > 0) {
bad_usb->st.delay_remain--;
continue;
}
bad_usb->st.state = BadUsbStateRunning;
delay_val = ducky_script_execute_next(bad_usb, script_file);
if(delay_val == SCRIPT_STATE_ERROR) { // Script error
delay_val = 0;
worker_state = BadUsbStateScriptError;
bad_usb->st.state = worker_state;
} else if(delay_val == SCRIPT_STATE_END) { // End of script
delay_val = 0;
worker_state = BadUsbStateIdle;
bad_usb->st.state = BadUsbStateDone;
furi_hal_hid_kb_release_all();
continue;
} else if(delay_val > 1000) {
bad_usb->st.state = BadUsbStateDelay; // Show long delays
bad_usb->st.delay_remain = delay_val / 1000;
}
} else {
furi_check((flags & FuriFlagError) == 0);
}
} else if(
(worker_state == BadUsbStateFileError) ||
(worker_state == BadUsbStateScriptError)) { // State: error
uint32_t flags = furi_thread_flags_wait(
WorkerEvtEnd, FuriFlagWaitAny, FuriWaitForever); // Waiting for exit command
furi_check((flags & FuriFlagError) == 0);
if(flags & WorkerEvtEnd) {
break;
}
}
}
furi_hal_hid_set_state_callback(NULL, NULL);
furi_hal_usb_set_config(usb_mode_prev, NULL);
storage_file_close(script_file);
storage_file_free(script_file);
string_clear(bad_usb->line);
string_clear(bad_usb->line_prev);
FURI_LOG_I(WORKER_TAG, "End");
return 0;
}
static void bad_usb_script_set_default_keyboard_layout(BadUsbScript* bad_usb) {
furi_assert(bad_usb);
memset(bad_usb->layout, HID_KEYBOARD_NONE, sizeof(bad_usb->layout));
memcpy(bad_usb->layout, hid_asciimap, MIN(sizeof(hid_asciimap), sizeof(bad_usb->layout)));
}
BadUsbScript* bad_usb_script_open(string_t file_path) {
furi_assert(file_path);
BadUsbScript* bad_usb = malloc(sizeof(BadUsbScript));
string_init(bad_usb->file_path);
string_set(bad_usb->file_path, file_path);
bad_usb_script_set_default_keyboard_layout(bad_usb);
bad_usb->st.state = BadUsbStateInit;
bad_usb->thread = furi_thread_alloc();
furi_thread_set_name(bad_usb->thread, "BadUsbWorker");
furi_thread_set_stack_size(bad_usb->thread, 2048);
furi_thread_set_context(bad_usb->thread, bad_usb);
furi_thread_set_callback(bad_usb->thread, bad_usb_worker);
furi_thread_start(bad_usb->thread);
return bad_usb;
}
void bad_usb_script_close(BadUsbScript* bad_usb) {
furi_assert(bad_usb);
furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtEnd);
furi_thread_join(bad_usb->thread);
furi_thread_free(bad_usb->thread);
string_clear(bad_usb->file_path);
free(bad_usb);
}
void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, string_t layout_path) {
furi_assert(bad_usb);
if((bad_usb->st.state == BadUsbStateRunning) || (bad_usb->st.state == BadUsbStateDelay)) {
// do not update keyboard layout while a script is running
return;
}
File* layout_file = storage_file_alloc(furi_record_open(RECORD_STORAGE));
if(!string_empty_p(layout_path)) {
if(storage_file_open(
layout_file, string_get_cstr(layout_path), FSAM_READ, FSOM_OPEN_EXISTING)) {
uint16_t layout[128];
if(storage_file_read(layout_file, layout, sizeof(layout)) == sizeof(layout)) {
memcpy(bad_usb->layout, layout, sizeof(layout));
}
}
storage_file_close(layout_file);
} else {
bad_usb_script_set_default_keyboard_layout(bad_usb);
}
storage_file_free(layout_file);
}
void bad_usb_script_toggle(BadUsbScript* bad_usb) {
furi_assert(bad_usb);
furi_thread_flags_set(furi_thread_get_id(bad_usb->thread), WorkerEvtToggle);
}
BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb) {
furi_assert(bad_usb);
return &(bad_usb->st);
}

View File

@@ -1,47 +0,0 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <furi.h>
#include <m-string.h>
typedef struct BadUsbScript BadUsbScript;
typedef enum {
BadUsbStateInit,
BadUsbStateNotConnected,
BadUsbStateIdle,
BadUsbStateRunning,
BadUsbStateDelay,
BadUsbStateDone,
BadUsbStateScriptError,
BadUsbStateFileError,
} BadUsbWorkerState;
typedef struct {
BadUsbWorkerState state;
uint16_t line_cur;
uint16_t line_nb;
uint32_t delay_remain;
uint16_t error_line;
} BadUsbState;
BadUsbScript* bad_usb_script_open(string_t file_path);
void bad_usb_script_close(BadUsbScript* bad_usb);
void bad_usb_script_set_keyboard_layout(BadUsbScript* bad_usb, string_t layout_path);
void bad_usb_script_start(BadUsbScript* bad_usb);
void bad_usb_script_stop(BadUsbScript* bad_usb);
void bad_usb_script_toggle(BadUsbScript* bad_usb);
BadUsbState* bad_usb_script_get_state(BadUsbScript* bad_usb);
#ifdef __cplusplus
}
#endif

View File

@@ -1,50 +0,0 @@
#include "../bad_usb_app_i.h"
#include "furi_hal_power.h"
#include "furi_hal_usb.h"
#include <storage/storage.h>
static bool bad_usb_layout_select(BadUsbApp* bad_usb) {
furi_assert(bad_usb);
string_t predefined_path;
string_init(predefined_path);
if(!string_empty_p(bad_usb->keyboard_layout)) {
string_set(predefined_path, bad_usb->keyboard_layout);
} else {
string_set_str(predefined_path, BAD_USB_APP_PATH_LAYOUT_FOLDER);
}
// Input events and views are managed by file_browser
bool res = dialog_file_browser_show(
bad_usb->dialogs,
bad_usb->keyboard_layout,
predefined_path,
BAD_USB_APP_LAYOUT_EXTENSION,
true,
&I_keyboard_10px,
true);
string_clear(predefined_path);
return res;
}
void bad_usb_scene_config_layout_on_enter(void* context) {
BadUsbApp* bad_usb = context;
if(bad_usb_layout_select(bad_usb)) {
bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout);
}
scene_manager_previous_scene(bad_usb->scene_manager);
}
bool bad_usb_scene_config_layout_on_event(void* context, SceneManagerEvent event) {
UNUSED(context);
UNUSED(event);
// BadUsbApp* bad_usb = context;
return false;
}
void bad_usb_scene_config_layout_on_exit(void* context) {
UNUSED(context);
// BadUsbApp* bad_usb = context;
}

View File

@@ -1,51 +0,0 @@
#include "../bad_usb_app_i.h"
#include "furi_hal_power.h"
#include "furi_hal_usb.h"
static bool bad_usb_file_select(BadUsbApp* bad_usb) {
furi_assert(bad_usb);
// Input events and views are managed by file_browser
bool res = dialog_file_browser_show(
bad_usb->dialogs,
bad_usb->file_path,
bad_usb->file_path,
BAD_USB_APP_SCRIPT_EXTENSION,
true,
&I_badusb_10px,
true);
return res;
}
void bad_usb_scene_file_select_on_enter(void* context) {
BadUsbApp* bad_usb = context;
furi_hal_usb_disable();
if(bad_usb->bad_usb_script) {
bad_usb_script_close(bad_usb->bad_usb_script);
bad_usb->bad_usb_script = NULL;
}
if(bad_usb_file_select(bad_usb)) {
bad_usb->bad_usb_script = bad_usb_script_open(bad_usb->file_path);
bad_usb_script_set_keyboard_layout(bad_usb->bad_usb_script, bad_usb->keyboard_layout);
scene_manager_next_scene(bad_usb->scene_manager, BadUsbSceneWork);
} else {
furi_hal_usb_enable();
view_dispatcher_stop(bad_usb->view_dispatcher);
}
}
bool bad_usb_scene_file_select_on_event(void* context, SceneManagerEvent event) {
UNUSED(context);
UNUSED(event);
// BadUsbApp* bad_usb = context;
return false;
}
void bad_usb_scene_file_select_on_exit(void* context) {
UNUSED(context);
// BadUsbApp* bad_usb = context;
}

View File

@@ -1,55 +0,0 @@
#include "../bad_usb_script.h"
#include "../bad_usb_app_i.h"
#include "../views/bad_usb_view.h"
#include "furi_hal.h"
#include "m-string.h"
#include "toolbox/path.h"
void bad_usb_scene_work_button_callback(InputKey key, void* context) {
furi_assert(context);
BadUsbApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, key);
}
bool bad_usb_scene_work_on_event(void* context, SceneManagerEvent event) {
BadUsbApp* app = context;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == InputKeyLeft) {
scene_manager_next_scene(app->scene_manager, BadUsbSceneConfig);
consumed = true;
} else if(event.event == InputKeyOk) {
bad_usb_script_toggle(app->bad_usb_script);
consumed = true;
}
} else if(event.type == SceneManagerEventTypeTick) {
bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script));
}
return consumed;
}
void bad_usb_scene_work_on_enter(void* context) {
BadUsbApp* app = context;
string_t file_name;
string_init(file_name);
path_extract_filename(app->file_path, file_name, true);
bad_usb_set_file_name(app->bad_usb_view, string_get_cstr(file_name));
string_clear(file_name);
string_t layout;
string_init(layout);
path_extract_filename(app->keyboard_layout, layout, true);
bad_usb_set_layout(app->bad_usb_view, string_get_cstr(layout));
string_clear(layout);
bad_usb_set_state(app->bad_usb_view, bad_usb_script_get_state(app->bad_usb_script));
bad_usb_set_button_callback(app->bad_usb_view, bad_usb_scene_work_button_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, BadUsbAppViewWork);
}
void bad_usb_scene_work_on_exit(void* context) {
UNUSED(context);
}

View File

@@ -1,199 +0,0 @@
#include "bad_usb_view.h"
#include "../bad_usb_script.h"
#include <toolbox/path.h>
#include <gui/elements.h>
#define MAX_NAME_LEN 64
struct BadUsb {
View* view;
BadUsbButtonCallback callback;
void* context;
};
typedef struct {
char file_name[MAX_NAME_LEN];
char layout[MAX_NAME_LEN];
BadUsbState state;
uint8_t anim_frame;
} BadUsbModel;
static void bad_usb_draw_callback(Canvas* canvas, void* _model) {
BadUsbModel* model = _model;
string_t disp_str;
string_init_set_str(disp_str, model->file_name);
elements_string_fit_width(canvas, disp_str, 128 - 2);
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 2, 8, string_get_cstr(disp_str));
if(strlen(model->layout) == 0) {
string_set(disp_str, "(default)");
} else {
string_reset(disp_str);
string_push_back(disp_str, '(');
for(size_t i = 0; i < strlen(model->layout); i++)
string_push_back(disp_str, model->layout[i]);
string_push_back(disp_str, ')');
}
elements_string_fit_width(canvas, disp_str, 128 - 2);
canvas_draw_str(canvas, 2, 8 + canvas_current_font_height(canvas), string_get_cstr(disp_str));
string_reset(disp_str);
canvas_draw_icon(canvas, 22, 24, &I_UsbTree_48x22);
if((model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) {
elements_button_center(canvas, "Run");
} else if((model->state.state == BadUsbStateRunning) || (model->state.state == BadUsbStateDelay)) {
elements_button_center(canvas, "Stop");
}
if((model->state.state == BadUsbStateNotConnected) ||
(model->state.state == BadUsbStateIdle) || (model->state.state == BadUsbStateDone)) {
elements_button_left(canvas, "Config");
}
if(model->state.state == BadUsbStateNotConnected) {
canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "Connect");
canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "to USB");
} else if(model->state.state == BadUsbStateFileError) {
canvas_draw_icon(canvas, 4, 26, &I_Error_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 31, AlignRight, AlignBottom, "File");
canvas_draw_str_aligned(canvas, 127, 43, AlignRight, AlignBottom, "ERROR");
} else if(model->state.state == BadUsbStateScriptError) {
canvas_draw_icon(canvas, 4, 26, &I_Error_18x18);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:");
canvas_set_font(canvas, FontSecondary);
string_printf(disp_str, "line %u", model->state.error_line);
canvas_draw_str_aligned(
canvas, 127, 46, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
} else if(model->state.state == BadUsbStateIdle) {
canvas_draw_icon(canvas, 4, 26, &I_Smile_18x18);
canvas_set_font(canvas, FontBigNumbers);
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "0");
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateRunning) {
if(model->anim_frame == 0) {
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
} else {
canvas_draw_icon(canvas, 4, 23, &I_EviSmile2_18x21);
}
canvas_set_font(canvas, FontBigNumbers);
string_printf(disp_str, "%u", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
canvas_draw_str_aligned(
canvas, 114, 40, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateDone) {
canvas_draw_icon(canvas, 4, 23, &I_EviSmile1_18x21);
canvas_set_font(canvas, FontBigNumbers);
canvas_draw_str_aligned(canvas, 114, 40, AlignRight, AlignBottom, "100");
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
} else if(model->state.state == BadUsbStateDelay) {
if(model->anim_frame == 0) {
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting1_18x21);
} else {
canvas_draw_icon(canvas, 4, 23, &I_EviWaiting2_18x21);
}
canvas_set_font(canvas, FontBigNumbers);
string_printf(disp_str, "%u", ((model->state.line_cur - 1) * 100) / model->state.line_nb);
canvas_draw_str_aligned(
canvas, 114, 40, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
canvas_draw_icon(canvas, 117, 26, &I_Percent_10x14);
canvas_set_font(canvas, FontSecondary);
string_printf(disp_str, "delay %us", model->state.delay_remain);
canvas_draw_str_aligned(
canvas, 127, 50, AlignRight, AlignBottom, string_get_cstr(disp_str));
string_reset(disp_str);
} else {
canvas_draw_icon(canvas, 4, 26, &I_Clock_18x18);
}
string_clear(disp_str);
}
static bool bad_usb_input_callback(InputEvent* event, void* context) {
furi_assert(context);
BadUsb* bad_usb = context;
bool consumed = false;
if(event->type == InputTypeShort) {
if((event->key == InputKeyLeft) || (event->key == InputKeyOk)) {
consumed = true;
furi_assert(bad_usb->callback);
bad_usb->callback(event->key, bad_usb->context);
}
}
return consumed;
}
BadUsb* bad_usb_alloc() {
BadUsb* bad_usb = malloc(sizeof(BadUsb));
bad_usb->view = view_alloc();
view_allocate_model(bad_usb->view, ViewModelTypeLocking, sizeof(BadUsbModel));
view_set_context(bad_usb->view, bad_usb);
view_set_draw_callback(bad_usb->view, bad_usb_draw_callback);
view_set_input_callback(bad_usb->view, bad_usb_input_callback);
return bad_usb;
}
void bad_usb_free(BadUsb* bad_usb) {
furi_assert(bad_usb);
view_free(bad_usb->view);
free(bad_usb);
}
View* bad_usb_get_view(BadUsb* bad_usb) {
furi_assert(bad_usb);
return bad_usb->view;
}
void bad_usb_set_button_callback(BadUsb* bad_usb, BadUsbButtonCallback callback, void* context) {
furi_assert(bad_usb);
furi_assert(callback);
with_view_model(
bad_usb->view, (BadUsbModel * model) {
UNUSED(model);
bad_usb->callback = callback;
bad_usb->context = context;
return true;
});
}
void bad_usb_set_file_name(BadUsb* bad_usb, const char* name) {
furi_assert(name);
with_view_model(
bad_usb->view, (BadUsbModel * model) {
strlcpy(model->file_name, name, MAX_NAME_LEN);
return true;
});
}
void bad_usb_set_layout(BadUsb* bad_usb, const char* layout) {
furi_assert(layout);
with_view_model(
bad_usb->view, (BadUsbModel * model) {
strlcpy(model->layout, layout, MAX_NAME_LEN);
return true;
});
}
void bad_usb_set_state(BadUsb* bad_usb, BadUsbState* st) {
furi_assert(st);
with_view_model(
bad_usb->view, (BadUsbModel * model) {
memcpy(&(model->state), st, sizeof(BadUsbState));
model->anim_frame ^= 1;
return true;
});
}

View File

@@ -1,13 +0,0 @@
App(
appid="barcode_generator",
name="UPC-A Generator",
apptype=FlipperAppType.PLUGIN,
entry_point="barcode_UPCA_generator_app",
cdefines=["APP_BARCODE_GEN"],
requires=[
"gui",
"dialogs",
],
stack_size=1 * 1024,
order=50,
)

View File

@@ -1,545 +0,0 @@
#include <furi.h>
#include <gui/gui.h>
#include <input/input.h>
#include <stdlib.h>
#define BARCODE_STARTING_POS 16
#define BARCODE_HEIGHT 50
#define BARCODE_Y_START 3
#define BARCODE_TEXT_OFFSET 9
typedef enum {
EventTypeTick,
EventTypeKey,
} EventType;
typedef struct {
EventType type;
InputEvent input;
} PluginEvent;
typedef struct {
int barcodeNumeral[12]; //The current barcode number
int editingIndex; //The index of the editing symbol
int menuIndex; //The index of the menu cursor
int modeIndex; //Set to 0 for view, 1 for edit, 2 for menu
bool doParityCalculation; //Should do parity check?
} PluginState;
void number_0(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #0 on left is OOOIIOI
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "0");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 3, BARCODE_HEIGHT); //OOO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 6, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
}
void number_1(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #1 on left is OOIIOOI
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "1");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 2, BARCODE_HEIGHT); //OO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 2, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 4, BARCODE_Y_START, 2, BARCODE_HEIGHT); //OO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 6, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
}
void number_2(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #2 on left is OOIOOII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "2");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 2, BARCODE_HEIGHT); //OO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 2, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 2, BARCODE_HEIGHT); //OO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
}
void number_3(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #3 on left is OIIIIOI
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "3");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 4, BARCODE_HEIGHT); //IIII
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 6, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
}
void number_4(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #4 on left is OIOOOII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "4");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 2, BARCODE_Y_START, 3, BARCODE_HEIGHT); //OOO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
}
void number_5(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #5 on left is OIIOOOI
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "5");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 3, BARCODE_HEIGHT); //OOO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 6, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
}
void number_6(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #6 on left is OIOIIII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "6");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 2, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 4, BARCODE_HEIGHT); //IIII
}
void number_7(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #7 on left is OIIIOII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "7");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 3, BARCODE_HEIGHT); //III
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 4, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
}
void number_8(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #8 on left is OIIOIII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "8");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 1, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 4, BARCODE_Y_START, 3, BARCODE_HEIGHT); //III
}
void number_9(
Canvas* canvas,
bool rightHand,
int startingPosition) { //UPC Code for #9 on left is OOOIOII
canvas_set_color(canvas, ColorBlack);
canvas_draw_str(
canvas, startingPosition, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, "9");
if(rightHand) {
canvas_set_color(canvas, ColorBlack);
} else {
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_box(canvas, startingPosition, BARCODE_Y_START, 3, BARCODE_HEIGHT); //OOO
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 3, BARCODE_Y_START, 1, BARCODE_HEIGHT); //I
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 4, BARCODE_Y_START, 1, BARCODE_HEIGHT); //O
canvas_invert_color(canvas);
canvas_draw_box(canvas, startingPosition + 5, BARCODE_Y_START, 2, BARCODE_HEIGHT); //II
}
static void render_callback(Canvas* const canvas, void* ctx) {
PluginState* plugin_state = acquire_mutex((ValueMutex*)ctx, 25);
if(plugin_state == NULL) {
return;
}
//I originally had all of these values being generated at runtime by math, but that kept giving me trouble.
int editingMarkerPosition[12] = {
19,
26,
33,
40,
47,
54,
66,
73,
80,
87,
94,
101,
};
int menuTextLocations[6] = {
20,
30,
40,
50,
60,
70,
};
if(plugin_state->modeIndex == 2) { //if in the menu
canvas_set_color(canvas, ColorBlack);
canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignCenter, "MENU");
canvas_draw_frame(canvas, 50, 0, 29, 11); //box around Menu
canvas_draw_str_aligned(
canvas, 64, menuTextLocations[0], AlignCenter, AlignCenter, "View");
canvas_draw_str_aligned(
canvas, 64, menuTextLocations[1], AlignCenter, AlignCenter, "Edit");
canvas_draw_str_aligned(
canvas, 64, menuTextLocations[2], AlignCenter, AlignCenter, "Parity?");
canvas_draw_frame(canvas, 81, menuTextLocations[2] - 2, 6, 6);
if(plugin_state->doParityCalculation == true) {
canvas_draw_box(canvas, 83, menuTextLocations[2], 2, 2);
}
canvas_draw_str_aligned(
canvas, 64, menuTextLocations[3], AlignCenter, AlignCenter, "TODO");
canvas_draw_disc(
canvas, 40, menuTextLocations[plugin_state->menuIndex], 2); //draw menu cursor
}
if(plugin_state->modeIndex != 2) { //if not in the menu
canvas_set_color(canvas, ColorBlack);
//canvas_draw_glyph(canvas, 115, BARCODE_Y_START + BARCODE_HEIGHT + BARCODE_TEXT_OFFSET, 'M');
canvas_draw_box(canvas, BARCODE_STARTING_POS, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2);
//canvas_draw_box(canvas, BARCODE_STARTING_POS + 1, 1, 1, 50); //left blank on purpose
canvas_draw_box(
canvas,
(BARCODE_STARTING_POS + 2),
BARCODE_Y_START,
1,
BARCODE_HEIGHT + 2); //start saftey
for(int index = 0; index < 12; index++) {
bool isOnRight = false;
if(index >= 6) {
isOnRight = true;
}
if((index == 11) && (plugin_state->doParityCalculation)) { //calculate the check digit
int checkDigit =
plugin_state->barcodeNumeral[0] + plugin_state->barcodeNumeral[2] +
plugin_state->barcodeNumeral[4] + plugin_state->barcodeNumeral[6] +
plugin_state->barcodeNumeral[8] + plugin_state->barcodeNumeral[10];
//add all odd positions Confusing because 0index
checkDigit = checkDigit * 3; //times 3
checkDigit += plugin_state->barcodeNumeral[1] + plugin_state->barcodeNumeral[3] +
plugin_state->barcodeNumeral[5] + plugin_state->barcodeNumeral[7] +
plugin_state->barcodeNumeral[9];
//add all even positions to above. Confusing because 0index
checkDigit = checkDigit % 10; //mod 10
//if m - 0 then x12 = 0, otherwise x12 is 10 - m
if(checkDigit == 0) {
plugin_state->barcodeNumeral[11] = 0;
} else {
checkDigit = 10 - checkDigit;
plugin_state->barcodeNumeral[11] = checkDigit;
}
}
switch(plugin_state->barcodeNumeral[index]) {
case 0:
number_0(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 1:
number_1(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 2:
number_2(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 3:
number_3(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 4:
number_4(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 5:
number_5(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 6:
number_6(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 7:
number_7(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 8:
number_8(canvas, isOnRight, editingMarkerPosition[index]);
break;
case 9:
number_9(canvas, isOnRight, editingMarkerPosition[index]);
break;
}
}
canvas_set_color(canvas, ColorBlack);
//canvas_draw_box(canvas, BARCODE_STARTING_POS + 45, BARCODE_Y_START, 1, BARCODE_HEIGHT);
canvas_draw_box(canvas, BARCODE_STARTING_POS + 46, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2);
//canvas_draw_box(canvas, BARCODE_STARTING_POS + 47, BARCODE_Y_START, 1, BARCODE_HEIGHT);
canvas_draw_box(canvas, BARCODE_STARTING_POS + 48, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2);
//canvas_draw_box(canvas, BARCODE_STARTING_POS + 49, BARCODE_Y_START, 1, BARCODE_HEIGHT);
if(plugin_state->modeIndex == 1) {
canvas_set_color(canvas, ColorBlack);
canvas_draw_box(
canvas,
editingMarkerPosition[plugin_state->editingIndex],
63,
7,
1); //draw editing cursor
}
canvas_set_color(canvas, ColorBlack);
canvas_draw_box(canvas, BARCODE_STARTING_POS + 92, BARCODE_Y_START, 1, BARCODE_HEIGHT + 2);
//canvas_draw_box(canvas, 14, 1, 1, 50); //left blank on purpose
canvas_draw_box(
canvas,
(BARCODE_STARTING_POS + 2) + 92,
BARCODE_Y_START,
1,
BARCODE_HEIGHT + 2); //end safety
}
release_mutex((ValueMutex*)ctx, plugin_state);
}
static void input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
furi_assert(event_queue);
PluginEvent event = {.type = EventTypeKey, .input = *input_event};
furi_message_queue_put(event_queue, &event, FuriWaitForever);
}
static void barcode_UPCA_generator_state_init(PluginState* const plugin_state) {
int i;
for(i = 0; i < 12; ++i) {
if(i > 9) {
plugin_state->barcodeNumeral[i] = i - 10;
} else if(i < 10) {
plugin_state->barcodeNumeral[i] = i;
}
}
plugin_state->editingIndex = 0;
plugin_state->modeIndex = 0;
plugin_state->doParityCalculation = true;
plugin_state->menuIndex = 0;
}
int32_t barcode_UPCA_generator_app(void* p) {
UNUSED(p);
//testing
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));
PluginState* plugin_state = malloc(sizeof(PluginState));
barcode_UPCA_generator_state_init(plugin_state);
ValueMutex state_mutex;
if(!init_mutex(&state_mutex, plugin_state, sizeof(PluginState))) {
FURI_LOG_E("barcode_UPCA_generator", "cannot create mutex\r\n");
furi_message_queue_free(event_queue);
free(plugin_state);
return 255;
}
// Set system callbacks
ViewPort* view_port = view_port_alloc();
view_port_draw_callback_set(view_port, render_callback, &state_mutex);
view_port_input_callback_set(view_port, input_callback, event_queue);
// Open GUI and register view_port
Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
PluginEvent event;
for(bool processing = true; processing;) {
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
PluginState* plugin_state = (PluginState*)acquire_mutex_block(&state_mutex);
int barcodeMaxIndex;
if(plugin_state->doParityCalculation == true) {
barcodeMaxIndex = 11;
}
if(plugin_state->doParityCalculation == false) {
barcodeMaxIndex = 12;
}
if(event_status == FuriStatusOk) {
// press events
if(event.type == EventTypeKey) {
if((event.input.type == InputTypePress) || (event.input.type == InputTypeRepeat)) {
switch(event.input.key) {
case InputKeyUp:
if(plugin_state->modeIndex == 1) { //if edit mode
plugin_state->barcodeNumeral[plugin_state->editingIndex]++;
}
if(plugin_state->barcodeNumeral[plugin_state->editingIndex] > 9) {
plugin_state->barcodeNumeral[plugin_state->editingIndex] = 0;
}
if(plugin_state->modeIndex == 2) { //if menu mode
plugin_state->menuIndex--;
}
if(plugin_state->menuIndex < 0) {
plugin_state->menuIndex = 3;
}
break;
case InputKeyDown:
if(plugin_state->modeIndex == 1) {
plugin_state->barcodeNumeral[plugin_state->editingIndex]--;
}
if(plugin_state->barcodeNumeral[plugin_state->editingIndex] < 0) {
plugin_state->barcodeNumeral[plugin_state->editingIndex] = 9;
}
if(plugin_state->modeIndex == 2) { //if menu mode
plugin_state->menuIndex++;
}
if(plugin_state->menuIndex > 3) {
plugin_state->menuIndex = 0;
}
break;
case InputKeyRight:
if(plugin_state->modeIndex == 1) {
plugin_state->editingIndex++;
}
if(plugin_state->editingIndex >= barcodeMaxIndex) {
plugin_state->editingIndex = 0;
}
break;
case InputKeyLeft:
if(plugin_state->modeIndex == 1) {
plugin_state->editingIndex--;
}
if(plugin_state->editingIndex < 0) {
plugin_state->editingIndex = barcodeMaxIndex - 1;
}
break;
case InputKeyOk:
if((plugin_state->modeIndex == 0) ||
(plugin_state->modeIndex == 1)) { //if normal or edit more, open menu
plugin_state->modeIndex = 2;
break;
} else if(
(plugin_state->modeIndex == 2) &&
(plugin_state->menuIndex ==
1)) { //if hits select in menu, while index is 1. edit mode
plugin_state->modeIndex = 1;
break;
} else if(
(plugin_state->modeIndex == 2) &&
(plugin_state->menuIndex ==
0)) { //if hits select in menu, while index is 0. view mode
plugin_state->modeIndex = 0;
break;
} else if(
(plugin_state->modeIndex == 2) &&
(plugin_state->menuIndex ==
2)) { //if hits select in menu, while index is 2. Parity switch
plugin_state->doParityCalculation =
!plugin_state->doParityCalculation; //invert bool
break;
} else {
break;
}
case InputKeyBack:
if(plugin_state->modeIndex == 0) {
processing = false;
}
if(plugin_state->modeIndex == 2) {
plugin_state->modeIndex = 0;
}
break;
}
}
}
} else {
FURI_LOG_D("barcode_UPCA_generator", "osMessageQueue: event timeout");
// event timeout
}
view_port_update(view_port);
release_mutex(&state_mutex, plugin_state);
}
view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
furi_record_close(RECORD_GUI);
view_port_free(view_port);
furi_message_queue_free(event_queue);
return 0;
}

View File

@@ -1,66 +0,0 @@
App(
appid="bt",
name="BtSrv",
apptype=FlipperAppType.SERVICE,
entry_point="bt_srv",
cdefines=["SRV_BT"],
requires=[
"cli",
"dialogs",
],
provides=[
"bt_start",
"bt_settings",
"bt_debug",
],
stack_size=1 * 1024,
order=20,
)
App(
appid="bt_start",
apptype=FlipperAppType.STARTUP,
entry_point="bt_on_system_start",
order=70,
)
App(
appid="bt_settings",
name="Bluetooth",
apptype=FlipperAppType.SETTINGS,
entry_point="bt_settings_app",
stack_size=1 * 1024,
requires=[
"bt",
"gui",
],
order=10,
)
App(
appid="bt_debug",
name="Bluetooth Debug",
apptype=FlipperAppType.DEBUG,
entry_point="bt_debug_app",
stack_size=1 * 1024,
requires=[
"bt",
"gui",
"dialogs",
],
order=110,
)
App(
appid="bt_hid",
name="Bluetooth Remote",
apptype=FlipperAppType.PLUGIN,
entry_point="bt_hid_app",
stack_size=1 * 1024,
cdefines=["APP_BLE_HID"],
requires=[
"bt",
"gui",
],
order=10,
)

View File

@@ -1,422 +0,0 @@
#include "bt_test.h"
#include <gui/canvas.h>
#include <gui/elements.h>
#include <m-array.h>
#include <m-string.h>
#include <furi.h>
#include <stdint.h>
struct BtTestParam {
const char* label;
uint8_t current_value_index;
string_t current_value_text;
uint8_t values_count;
BtTestParamChangeCallback change_callback;
void* context;
};
ARRAY_DEF(BtTestParamArray, BtTestParam, M_POD_OPLIST);
struct BtTest {
View* view;
BtTestChangeStateCallback change_state_callback;
BtTestBackCallback back_callback;
void* context;
};
typedef struct {
BtTestState state;
BtTestParamArray_t params;
uint8_t position;
uint8_t window_position;
const char* message;
float rssi;
uint32_t packets_num_rx;
uint32_t packets_num_tx;
} BtTestModel;
#define BT_TEST_START_MESSAGE "Ok - Start"
#define BT_TEST_STOP_MESSAGE "Ok - Stop"
static void bt_test_process_up(BtTest* bt_test);
static void bt_test_process_down(BtTest* bt_test);
static void bt_test_process_left(BtTest* bt_test);
static void bt_test_process_right(BtTest* bt_test);
static void bt_test_process_ok(BtTest* bt_test);
static void bt_test_process_back(BtTest* bt_test);
static void bt_test_draw_callback(Canvas* canvas, void* _model) {
BtTestModel* model = _model;
char info_str[32];
const uint8_t param_height = 16;
const uint8_t param_width = 123;
canvas_clear(canvas);
uint8_t position = 0;
BtTestParamArray_it_t it;
canvas_set_font(canvas, FontSecondary);
for(BtTestParamArray_it(it, model->params); !BtTestParamArray_end_p(it);
BtTestParamArray_next(it)) {
uint8_t param_position = position - model->window_position;
uint8_t params_on_screen = 3;
uint8_t y_offset = 0;
if(param_position < params_on_screen) {
const BtTestParam* param = BtTestParamArray_cref(it);
uint8_t param_y = y_offset + (param_position * param_height);
uint8_t param_text_y = param_y + param_height - 4;
if(position == model->position) {
canvas_set_color(canvas, ColorBlack);
elements_slightly_rounded_box(
canvas, 0, param_y + 1, param_width, param_height - 2);
canvas_set_color(canvas, ColorWhite);
} else {
canvas_set_color(canvas, ColorBlack);
}
canvas_draw_str(canvas, 6, param_text_y, param->label);
if(param->current_value_index > 0) {
canvas_draw_str(canvas, 50, param_text_y, "<");
}
canvas_draw_str(canvas, 61, param_text_y, string_get_cstr(param->current_value_text));
if(param->current_value_index < (param->values_count - 1)) {
canvas_draw_str(canvas, 113, param_text_y, ">");
}
}
position++;
}
elements_scrollbar(canvas, model->position, BtTestParamArray_size(model->params));
canvas_draw_str(canvas, 6, 60, model->message);
if(model->state == BtTestStateStarted) {
if(model->rssi != 0.0f) {
snprintf(info_str, sizeof(info_str), "RSSI:%3.1f dB", (double)model->rssi);
canvas_draw_str_aligned(canvas, 124, 60, AlignRight, AlignBottom, info_str);
}
} else if(model->state == BtTestStateStopped) {
if(model->packets_num_rx) {
snprintf(info_str, sizeof(info_str), "%ld pack rcv", model->packets_num_rx);
canvas_draw_str_aligned(canvas, 124, 60, AlignRight, AlignBottom, info_str);
} else if(model->packets_num_tx) {
snprintf(info_str, sizeof(info_str), "%ld pack sent", model->packets_num_tx);
canvas_draw_str_aligned(canvas, 124, 60, AlignRight, AlignBottom, info_str);
}
}
}
static bool bt_test_input_callback(InputEvent* event, void* context) {
BtTest* bt_test = context;
furi_assert(bt_test);
bool consumed = false;
if(event->type == InputTypeShort) {
switch(event->key) {
case InputKeyUp:
consumed = true;
bt_test_process_up(bt_test);
break;
case InputKeyDown:
consumed = true;
bt_test_process_down(bt_test);
break;
case InputKeyLeft:
consumed = true;
bt_test_process_left(bt_test);
break;
case InputKeyRight:
consumed = true;
bt_test_process_right(bt_test);
break;
case InputKeyOk:
consumed = true;
bt_test_process_ok(bt_test);
break;
case InputKeyBack:
consumed = false;
bt_test_process_back(bt_test);
break;
default:
break;
}
}
return consumed;
}
void bt_test_process_up(BtTest* bt_test) {
with_view_model(
bt_test->view, (BtTestModel * model) {
uint8_t params_on_screen = 3;
if(model->position > 0) {
model->position--;
if(((model->position - model->window_position) < 1) &&
model->window_position > 0) {
model->window_position--;
}
} else {
model->position = BtTestParamArray_size(model->params) - 1;
if(model->position > (params_on_screen - 1)) {
model->window_position = model->position - (params_on_screen - 1);
}
}
return true;
});
}
void bt_test_process_down(BtTest* bt_test) {
with_view_model(
bt_test->view, (BtTestModel * model) {
uint8_t params_on_screen = 3;
if(model->position < (BtTestParamArray_size(model->params) - 1)) {
model->position++;
if((model->position - model->window_position) > (params_on_screen - 2) &&
model->window_position <
(BtTestParamArray_size(model->params) - params_on_screen)) {
model->window_position++;
}
} else {
model->position = 0;
model->window_position = 0;
}
return true;
});
}
BtTestParam* bt_test_get_selected_param(BtTestModel* model) {
BtTestParam* param = NULL;
BtTestParamArray_it_t it;
uint8_t position = 0;
for(BtTestParamArray_it(it, model->params); !BtTestParamArray_end_p(it);
BtTestParamArray_next(it)) {
if(position == model->position) {
break;
}
position++;
}
param = BtTestParamArray_ref(it);
furi_assert(param);
return param;
}
void bt_test_process_left(BtTest* bt_test) {
BtTestParam* param;
with_view_model(
bt_test->view, (BtTestModel * model) {
param = bt_test_get_selected_param(model);
if(param->current_value_index > 0) {
param->current_value_index--;
if(param->change_callback) {
model->state = BtTestStateStopped;
model->message = BT_TEST_START_MESSAGE;
model->rssi = 0.0f;
model->packets_num_rx = 0;
model->packets_num_tx = 0;
}
}
return true;
});
if(param->change_callback) {
param->change_callback(param);
}
}
void bt_test_process_right(BtTest* bt_test) {
BtTestParam* param;
with_view_model(
bt_test->view, (BtTestModel * model) {
param = bt_test_get_selected_param(model);
if(param->current_value_index < (param->values_count - 1)) {
param->current_value_index++;
if(param->change_callback) {
model->state = BtTestStateStopped;
model->message = BT_TEST_START_MESSAGE;
model->rssi = 0.0f;
model->packets_num_rx = 0;
model->packets_num_tx = 0;
}
}
return true;
});
if(param->change_callback) {
param->change_callback(param);
}
}
void bt_test_process_ok(BtTest* bt_test) {
BtTestState state;
with_view_model(
bt_test->view, (BtTestModel * model) {
if(model->state == BtTestStateStarted) {
model->state = BtTestStateStopped;
model->message = BT_TEST_START_MESSAGE;
model->rssi = 0.0f;
model->packets_num_rx = 0;
model->packets_num_tx = 0;
} else if(model->state == BtTestStateStopped) {
model->state = BtTestStateStarted;
model->message = BT_TEST_STOP_MESSAGE;
}
state = model->state;
return true;
});
if(bt_test->change_state_callback) {
bt_test->change_state_callback(state, bt_test->context);
}
}
void bt_test_process_back(BtTest* bt_test) {
with_view_model(
bt_test->view, (BtTestModel * model) {
model->state = BtTestStateStopped;
model->rssi = 0.0f;
model->packets_num_rx = 0;
model->packets_num_tx = 0;
return false;
});
if(bt_test->back_callback) {
bt_test->back_callback(bt_test->context);
}
}
BtTest* bt_test_alloc() {
BtTest* bt_test = malloc(sizeof(BtTest));
bt_test->view = view_alloc();
view_set_context(bt_test->view, bt_test);
view_allocate_model(bt_test->view, ViewModelTypeLocking, sizeof(BtTestModel));
view_set_draw_callback(bt_test->view, bt_test_draw_callback);
view_set_input_callback(bt_test->view, bt_test_input_callback);
with_view_model(
bt_test->view, (BtTestModel * model) {
model->state = BtTestStateStopped;
model->message = "Ok - Start";
BtTestParamArray_init(model->params);
model->position = 0;
model->window_position = 0;
model->rssi = 0.0f;
model->packets_num_tx = 0;
model->packets_num_rx = 0;
return true;
});
return bt_test;
}
void bt_test_free(BtTest* bt_test) {
furi_assert(bt_test);
with_view_model(
bt_test->view, (BtTestModel * model) {
BtTestParamArray_it_t it;
for(BtTestParamArray_it(it, model->params); !BtTestParamArray_end_p(it);
BtTestParamArray_next(it)) {
string_clear(BtTestParamArray_ref(it)->current_value_text);
}
BtTestParamArray_clear(model->params);
return false;
});
view_free(bt_test->view);
free(bt_test);
}
View* bt_test_get_view(BtTest* bt_test) {
furi_assert(bt_test);
return bt_test->view;
}
BtTestParam* bt_test_param_add(
BtTest* bt_test,
const char* label,
uint8_t values_count,
BtTestParamChangeCallback change_callback,
void* context) {
BtTestParam* param = NULL;
furi_assert(label);
furi_assert(bt_test);
with_view_model(
bt_test->view, (BtTestModel * model) {
param = BtTestParamArray_push_new(model->params);
param->label = label;
param->values_count = values_count;
param->change_callback = change_callback;
param->context = context;
param->current_value_index = 0;
string_init(param->current_value_text);
return true;
});
return param;
}
void bt_test_set_rssi(BtTest* bt_test, float rssi) {
furi_assert(bt_test);
with_view_model(
bt_test->view, (BtTestModel * model) {
model->rssi = rssi;
return true;
});
}
void bt_test_set_packets_tx(BtTest* bt_test, uint32_t packets_num) {
furi_assert(bt_test);
with_view_model(
bt_test->view, (BtTestModel * model) {
model->packets_num_tx = packets_num;
return true;
});
}
void bt_test_set_packets_rx(BtTest* bt_test, uint32_t packets_num) {
furi_assert(bt_test);
with_view_model(
bt_test->view, (BtTestModel * model) {
model->packets_num_rx = packets_num;
return true;
});
}
void bt_test_set_change_state_callback(BtTest* bt_test, BtTestChangeStateCallback callback) {
furi_assert(bt_test);
furi_assert(callback);
bt_test->change_state_callback = callback;
}
void bt_test_set_back_callback(BtTest* bt_test, BtTestBackCallback callback) {
furi_assert(bt_test);
furi_assert(callback);
bt_test->back_callback = callback;
}
void bt_test_set_context(BtTest* bt_test, void* context) {
furi_assert(bt_test);
bt_test->context = context;
}
void bt_test_set_current_value_index(BtTestParam* param, uint8_t current_value_index) {
param->current_value_index = current_value_index;
}
void bt_test_set_current_value_text(BtTestParam* param, const char* current_value_text) {
string_set_str(param->current_value_text, current_value_text);
}
uint8_t bt_test_get_current_value_index(BtTestParam* param) {
return param->current_value_index;
}
void* bt_test_get_context(BtTestParam* param) {
return param->context;
}

View File

@@ -1,197 +0,0 @@
#include "bt_hid.h"
#include <furi_hal_bt.h>
#include <applications/notification/notification_messages.h>
#define TAG "BtHidApp"
enum BtDebugSubmenuIndex {
BtHidSubmenuIndexKeynote,
BtHidSubmenuIndexKeyboard,
BtHidSubmenuIndexMedia,
BtHidSubmenuIndexMouse,
};
void bt_hid_submenu_callback(void* context, uint32_t index) {
furi_assert(context);
BtHid* app = context;
if(index == BtHidSubmenuIndexKeynote) {
app->view_id = BtHidViewKeynote;
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeynote);
} else if(index == BtHidSubmenuIndexKeyboard) {
app->view_id = BtHidViewKeyboard;
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewKeyboard);
} else if(index == BtHidSubmenuIndexMedia) {
app->view_id = BtHidViewMedia;
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewMedia);
} else if(index == BtHidSubmenuIndexMouse) {
app->view_id = BtHidViewMouse;
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewMouse);
}
}
void bt_hid_dialog_callback(DialogExResult result, void* context) {
furi_assert(context);
BtHid* app = context;
if(result == DialogExResultLeft) {
view_dispatcher_stop(app->view_dispatcher);
} else if(result == DialogExResultRight) {
view_dispatcher_switch_to_view(app->view_dispatcher, app->view_id); // Show last view
} else if(result == DialogExResultCenter) {
view_dispatcher_switch_to_view(app->view_dispatcher, BtHidViewSubmenu);
}
}
uint32_t bt_hid_exit_confirm_view(void* context) {
UNUSED(context);
return BtHidViewExitConfirm;
}
uint32_t bt_hid_exit(void* context) {
UNUSED(context);
return VIEW_NONE;
}
void bt_hid_connection_status_changed_callback(BtStatus status, void* context) {
furi_assert(context);
BtHid* bt_hid = context;
bool connected = (status == BtStatusConnected);
if(connected) {
notification_internal_message(bt_hid->notifications, &sequence_set_blue_255);
} else {
notification_internal_message(bt_hid->notifications, &sequence_reset_blue);
}
bt_hid_keynote_set_connected_status(bt_hid->bt_hid_keynote, connected);
bt_hid_keyboard_set_connected_status(bt_hid->bt_hid_keyboard, connected);
bt_hid_media_set_connected_status(bt_hid->bt_hid_media, connected);
bt_hid_mouse_set_connected_status(bt_hid->bt_hid_mouse, connected);
}
BtHid* bt_hid_app_alloc() {
BtHid* app = malloc(sizeof(BtHid));
// Gui
app->gui = furi_record_open(RECORD_GUI);
// Bt
app->bt = furi_record_open(RECORD_BT);
// Notifications
app->notifications = furi_record_open(RECORD_NOTIFICATION);
// View dispatcher
app->view_dispatcher = view_dispatcher_alloc();
view_dispatcher_enable_queue(app->view_dispatcher);
view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
// Submenu view
app->submenu = submenu_alloc();
submenu_add_item(
app->submenu, "Keynote", BtHidSubmenuIndexKeynote, bt_hid_submenu_callback, app);
submenu_add_item(
app->submenu, "Keyboard", BtHidSubmenuIndexKeyboard, bt_hid_submenu_callback, app);
submenu_add_item(app->submenu, "Media", BtHidSubmenuIndexMedia, bt_hid_submenu_callback, app);
submenu_add_item(app->submenu, "Mouse", BtHidSubmenuIndexMouse, bt_hid_submenu_callback, app);
view_set_previous_callback(submenu_get_view(app->submenu), bt_hid_exit);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewSubmenu, submenu_get_view(app->submenu));
// Dialog view
app->dialog = dialog_ex_alloc();
dialog_ex_set_result_callback(app->dialog, bt_hid_dialog_callback);
dialog_ex_set_context(app->dialog, app);
dialog_ex_set_left_button_text(app->dialog, "Exit");
dialog_ex_set_right_button_text(app->dialog, "Stay");
dialog_ex_set_center_button_text(app->dialog, "Menu");
dialog_ex_set_header(app->dialog, "Close Current App?", 16, 12, AlignLeft, AlignTop);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewExitConfirm, dialog_ex_get_view(app->dialog));
// Keynote view
app->bt_hid_keynote = bt_hid_keynote_alloc();
view_set_previous_callback(
bt_hid_keynote_get_view(app->bt_hid_keynote), bt_hid_exit_confirm_view);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewKeynote, bt_hid_keynote_get_view(app->bt_hid_keynote));
// Keyboard view
app->bt_hid_keyboard = bt_hid_keyboard_alloc();
view_set_previous_callback(
bt_hid_keyboard_get_view(app->bt_hid_keyboard), bt_hid_exit_confirm_view);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewKeyboard, bt_hid_keyboard_get_view(app->bt_hid_keyboard));
// Media view
app->bt_hid_media = bt_hid_media_alloc();
view_set_previous_callback(bt_hid_media_get_view(app->bt_hid_media), bt_hid_exit_confirm_view);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewMedia, bt_hid_media_get_view(app->bt_hid_media));
// Mouse view
app->bt_hid_mouse = bt_hid_mouse_alloc();
view_set_previous_callback(bt_hid_mouse_get_view(app->bt_hid_mouse), bt_hid_exit_confirm_view);
view_dispatcher_add_view(
app->view_dispatcher, BtHidViewMouse, bt_hid_mouse_get_view(app->bt_hid_mouse));
// TODO switch to menu after Media is done
app->view_id = BtHidViewSubmenu;
view_dispatcher_switch_to_view(app->view_dispatcher, app->view_id);
return app;
}
void bt_hid_app_free(BtHid* app) {
furi_assert(app);
// Reset notification
notification_internal_message(app->notifications, &sequence_reset_blue);
// Free views
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewSubmenu);
submenu_free(app->submenu);
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewExitConfirm);
dialog_ex_free(app->dialog);
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewKeynote);
bt_hid_keynote_free(app->bt_hid_keynote);
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewKeyboard);
bt_hid_keyboard_free(app->bt_hid_keyboard);
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewMedia);
bt_hid_media_free(app->bt_hid_media);
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewMouse);
bt_hid_mouse_free(app->bt_hid_mouse);
view_dispatcher_free(app->view_dispatcher);
// Close records
furi_record_close(RECORD_GUI);
app->gui = NULL;
furi_record_close(RECORD_NOTIFICATION);
app->notifications = NULL;
furi_record_close(RECORD_BT);
app->bt = NULL;
// Free rest
free(app);
}
int32_t bt_hid_app(void* p) {
UNUSED(p);
// Switch profile to Hid
BtHid* app = bt_hid_app_alloc();
bt_set_status_changed_callback(app->bt, bt_hid_connection_status_changed_callback, app);
// Change profile
if(!bt_set_profile(app->bt, BtProfileHidKeyboard)) {
FURI_LOG_E(TAG, "Failed to switch profile");
bt_hid_app_free(app);
return -1;
}
furi_hal_bt_start_advertising();
view_dispatcher_run(app->view_dispatcher);
bt_set_status_changed_callback(app->bt, NULL, NULL);
// Change back profile to Serial
bt_set_profile(app->bt, BtProfileSerial);
bt_hid_app_free(app);
return 0;
}

View File

@@ -1,38 +0,0 @@
#pragma once
#include <furi.h>
#include <bt/bt_service/bt.h>
#include <gui/gui.h>
#include <gui/view.h>
#include <gui/view_dispatcher.h>
#include <applications/notification/notification.h>
#include <gui/modules/submenu.h>
#include <gui/modules/dialog_ex.h>
#include "views/bt_hid_keynote.h"
#include "views/bt_hid_keyboard.h"
#include "views/bt_hid_media.h"
#include "views/bt_hid_mouse.h"
typedef struct {
Bt* bt;
Gui* gui;
NotificationApp* notifications;
ViewDispatcher* view_dispatcher;
Submenu* submenu;
DialogEx* dialog;
BtHidKeynote* bt_hid_keynote;
BtHidKeyboard* bt_hid_keyboard;
BtHidMedia* bt_hid_media;
BtHidMouse* bt_hid_mouse;
uint32_t view_id;
} BtHid;
typedef enum {
BtHidViewSubmenu,
BtHidViewKeynote,
BtHidViewKeyboard,
BtHidViewMedia,
BtHidViewMouse,
BtHidViewExitConfirm,
} BtHidView;

View File

@@ -1,384 +0,0 @@
#include "bt_hid_keyboard.h"
#include <furi.h>
#include <furi_hal_bt_hid.h>
#include <furi_hal_usb_hid.h>
#include <gui/elements.h>
#include <gui/icon_i.h>
struct BtHidKeyboard {
View* view;
};
typedef struct {
bool shift;
bool alt;
bool ctrl;
bool gui;
uint8_t x;
uint8_t y;
uint8_t last_key_code;
uint16_t modifier_code;
bool ok_pressed;
bool back_pressed;
bool connected;
char key_string[5];
} BtHidKeyboardModel;
typedef struct {
uint8_t width;
char* key;
const Icon* icon;
char* shift_key;
uint8_t value;
} BtHidKeyboardKey;
typedef struct {
int8_t x;
int8_t y;
} BtHidKeyboardPoint;
// 4 BY 12
#define MARGIN_TOP 0
#define MARGIN_LEFT 4
#define KEY_WIDTH 9
#define KEY_HEIGHT 12
#define KEY_PADDING 1
#define ROW_COUNT 6
#define COLUMN_COUNT 12
// 0 width items are not drawn, but there value is used
const BtHidKeyboardKey bt_hid_keyboard_keyset[ROW_COUNT][COLUMN_COUNT] = {
{
{.width = 1, .icon = NULL, .key = "1", .shift_key = "!", .value = HID_KEYBOARD_1},
{.width = 1, .icon = NULL, .key = "2", .shift_key = "@", .value = HID_KEYBOARD_2},
{.width = 1, .icon = NULL, .key = "3", .shift_key = "#", .value = HID_KEYBOARD_3},
{.width = 1, .icon = NULL, .key = "4", .shift_key = "$", .value = HID_KEYBOARD_4},
{.width = 1, .icon = NULL, .key = "5", .shift_key = "%", .value = HID_KEYBOARD_5},
{.width = 1, .icon = NULL, .key = "6", .shift_key = "^", .value = HID_KEYBOARD_6},
{.width = 1, .icon = NULL, .key = "7", .shift_key = "&", .value = HID_KEYBOARD_7},
{.width = 1, .icon = NULL, .key = "8", .shift_key = "*", .value = HID_KEYBOARD_8},
{.width = 1, .icon = NULL, .key = "9", .shift_key = "(", .value = HID_KEYBOARD_9},
{.width = 1, .icon = NULL, .key = "0", .shift_key = ")", .value = HID_KEYBOARD_0},
{.width = 2, .icon = &I_Pin_arrow_left_9x7, .value = HID_KEYBOARD_DELETE},
{.width = 0, .value = HID_KEYBOARD_DELETE},
},
{
{.width = 1, .icon = NULL, .key = "q", .shift_key = "Q", .value = HID_KEYBOARD_Q},
{.width = 1, .icon = NULL, .key = "w", .shift_key = "W", .value = HID_KEYBOARD_W},
{.width = 1, .icon = NULL, .key = "e", .shift_key = "E", .value = HID_KEYBOARD_E},
{.width = 1, .icon = NULL, .key = "r", .shift_key = "R", .value = HID_KEYBOARD_R},
{.width = 1, .icon = NULL, .key = "t", .shift_key = "T", .value = HID_KEYBOARD_T},
{.width = 1, .icon = NULL, .key = "y", .shift_key = "Y", .value = HID_KEYBOARD_Y},
{.width = 1, .icon = NULL, .key = "u", .shift_key = "U", .value = HID_KEYBOARD_U},
{.width = 1, .icon = NULL, .key = "i", .shift_key = "I", .value = HID_KEYBOARD_I},
{.width = 1, .icon = NULL, .key = "o", .shift_key = "O", .value = HID_KEYBOARD_O},
{.width = 1, .icon = NULL, .key = "p", .shift_key = "P", .value = HID_KEYBOARD_P},
{.width = 1, .icon = NULL, .key = "[", .shift_key = "{", .value = HID_KEYBOARD_OPEN_BRACKET},
{.width = 1,
.icon = NULL,
.key = "]",
.shift_key = "}",
.value = HID_KEYBOARD_CLOSE_BRACKET},
},
{
{.width = 1, .icon = NULL, .key = "a", .shift_key = "A", .value = HID_KEYBOARD_A},
{.width = 1, .icon = NULL, .key = "s", .shift_key = "S", .value = HID_KEYBOARD_S},
{.width = 1, .icon = NULL, .key = "d", .shift_key = "D", .value = HID_KEYBOARD_D},
{.width = 1, .icon = NULL, .key = "f", .shift_key = "F", .value = HID_KEYBOARD_F},
{.width = 1, .icon = NULL, .key = "g", .shift_key = "G", .value = HID_KEYBOARD_G},
{.width = 1, .icon = NULL, .key = "h", .shift_key = "H", .value = HID_KEYBOARD_H},
{.width = 1, .icon = NULL, .key = "j", .shift_key = "J", .value = HID_KEYBOARD_J},
{.width = 1, .icon = NULL, .key = "k", .shift_key = "K", .value = HID_KEYBOARD_K},
{.width = 1, .icon = NULL, .key = "l", .shift_key = "L", .value = HID_KEYBOARD_L},
{.width = 1, .icon = NULL, .key = ";", .shift_key = ":", .value = HID_KEYBOARD_SEMICOLON},
{.width = 2, .icon = &I_Pin_arrow_right_9x7, .value = HID_KEYBOARD_RETURN},
{.width = 0, .value = HID_KEYBOARD_RETURN},
},
{
{.width = 1, .icon = NULL, .key = "z", .shift_key = "Z", .value = HID_KEYBOARD_Z},
{.width = 1, .icon = NULL, .key = "x", .shift_key = "X", .value = HID_KEYBOARD_X},
{.width = 1, .icon = NULL, .key = "c", .shift_key = "C", .value = HID_KEYBOARD_C},
{.width = 1, .icon = NULL, .key = "v", .shift_key = "V", .value = HID_KEYBOARD_V},
{.width = 1, .icon = NULL, .key = "b", .shift_key = "B", .value = HID_KEYBOARD_B},
{.width = 1, .icon = NULL, .key = "n", .shift_key = "N", .value = HID_KEYBOARD_N},
{.width = 1, .icon = NULL, .key = "m", .shift_key = "M", .value = HID_KEYBOARD_M},
{.width = 1, .icon = NULL, .key = "/", .shift_key = "?", .value = HID_KEYBOARD_SLASH},
{.width = 1, .icon = NULL, .key = "\\", .shift_key = "|", .value = HID_KEYBOARD_BACKSLASH},
{.width = 1, .icon = NULL, .key = "`", .shift_key = "~", .value = HID_KEYBOARD_GRAVE_ACCENT},
{.width = 1, .icon = &I_ButtonUp_7x4, .value = HID_KEYBOARD_UP_ARROW},
{.width = 1, .icon = NULL, .key = "-", .shift_key = "_", .value = HID_KEYBOARD_MINUS},
},
{
{.width = 1, .icon = &I_Pin_arrow_up7x9, .value = HID_KEYBOARD_L_SHIFT},
{.width = 1, .icon = NULL, .key = ",", .shift_key = "<", .value = HID_KEYPAD_COMMA},
{.width = 1, .icon = NULL, .key = ".", .shift_key = ">", .value = HID_KEYBOARD_DOT},
{.width = 4, .icon = NULL, .key = " ", .value = HID_KEYBOARD_SPACEBAR},
{.width = 0, .value = HID_KEYBOARD_SPACEBAR},
{.width = 0, .value = HID_KEYBOARD_SPACEBAR},
{.width = 0, .value = HID_KEYBOARD_SPACEBAR},
{.width = 1, .icon = NULL, .key = "'", .shift_key = "\"", .value = HID_KEYBOARD_APOSTROPHE},
{.width = 1, .icon = NULL, .key = "=", .shift_key = "+", .value = HID_KEYBOARD_EQUAL_SIGN},
{.width = 1, .icon = &I_ButtonLeft_4x7, .value = HID_KEYBOARD_LEFT_ARROW},
{.width = 1, .icon = &I_ButtonDown_7x4, .value = HID_KEYBOARD_DOWN_ARROW},
{.width = 1, .icon = &I_ButtonRight_4x7, .value = HID_KEYBOARD_RIGHT_ARROW},
},
{
{.width = 3, .icon = NULL, .key = "Ctrl", .value = HID_KEYBOARD_L_CTRL},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_CTRL},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_CTRL},
{.width = 3, .icon = NULL, .key = "Alt", .value = HID_KEYBOARD_L_ALT},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_ALT},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_ALT},
{.width = 3, .icon = NULL, .key = "Cmd", .value = HID_KEYBOARD_L_GUI},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_GUI},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_L_GUI},
{.width = 3, .icon = NULL, .key = "Tab", .value = HID_KEYBOARD_TAB},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_TAB},
{.width = 0, .icon = NULL, .value = HID_KEYBOARD_TAB},
},
};
static void bt_hid_keyboard_to_upper(char* str) {
while(*str) {
*str = toupper((unsigned char)*str);
str++;
}
}
static void bt_hid_keyboard_draw_key(
Canvas* canvas,
BtHidKeyboardModel* model,
uint8_t x,
uint8_t y,
BtHidKeyboardKey key,
bool selected) {
if(!key.width) return;
canvas_set_color(canvas, ColorBlack);
uint8_t keyWidth = KEY_WIDTH * key.width + KEY_PADDING * (key.width - 1);
if(selected) {
// Draw a filled box
elements_slightly_rounded_box(
canvas,
MARGIN_LEFT + x * (KEY_WIDTH + KEY_PADDING),
MARGIN_TOP + y * (KEY_HEIGHT + KEY_PADDING),
keyWidth,
KEY_HEIGHT);
canvas_set_color(canvas, ColorWhite);
} else {
// Draw a framed box
elements_slightly_rounded_frame(
canvas,
MARGIN_LEFT + x * (KEY_WIDTH + KEY_PADDING),
MARGIN_TOP + y * (KEY_HEIGHT + KEY_PADDING),
keyWidth,
KEY_HEIGHT);
}
if(key.icon != NULL) {
// Draw the icon centered on the button
canvas_draw_icon(
canvas,
MARGIN_LEFT + x * (KEY_WIDTH + KEY_PADDING) + keyWidth / 2 - key.icon->width / 2,
MARGIN_TOP + y * (KEY_HEIGHT + KEY_PADDING) + KEY_HEIGHT / 2 - key.icon->height / 2,
key.icon);
} else {
// If shift is toggled use the shift key when available
strcpy(model->key_string, (model->shift && key.shift_key != 0) ? key.shift_key : key.key);
// Upper case if ctrl or alt was toggled true
if((model->ctrl && key.value == HID_KEYBOARD_L_CTRL) ||
(model->alt && key.value == HID_KEYBOARD_L_ALT) ||
(model->gui && key.value == HID_KEYBOARD_L_GUI)) {
bt_hid_keyboard_to_upper(model->key_string);
}
canvas_draw_str_aligned(
canvas,
MARGIN_LEFT + x * (KEY_WIDTH + KEY_PADDING) + keyWidth / 2 + 1,
MARGIN_TOP + y * (KEY_HEIGHT + KEY_PADDING) + KEY_HEIGHT / 2,
AlignCenter,
AlignCenter,
model->key_string);
}
}
static void bt_hid_keyboard_draw_callback(Canvas* canvas, void* context) {
furi_assert(context);
BtHidKeyboardModel* model = context;
// Header
if(!model->connected) {
canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15);
canvas_set_font(canvas, FontPrimary);
elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Keyboard");
elements_multiline_text_aligned(
canvas, 4, 60, AlignLeft, AlignBottom, "Waiting for Connection...");
return; // Dont render the keyboard if we are not yet connected
}
canvas_set_font(canvas, FontKeyboard);
// Start shifting the all keys up if on the next row (Scrolling)
uint8_t initY = model->y - 4 > 0 ? model->y - 4 : 0;
for(uint8_t y = initY; y < ROW_COUNT; y++) {
const BtHidKeyboardKey* keyboardKeyRow = bt_hid_keyboard_keyset[y];
uint8_t x = 0;
for(uint8_t i = 0; i < COLUMN_COUNT; i++) {
BtHidKeyboardKey key = keyboardKeyRow[i];
// Select when the button is hovered
// Select if the button is hovered within its width
// Select if back is clicked and its the backspace key
// Deselect when the button clicked or not hovered
bool keySelected = (x <= model->x && model->x < (x + key.width)) && y == model->y;
bool backSelected = model->back_pressed && key.value == HID_KEYBOARD_DELETE;
bt_hid_keyboard_draw_key(
canvas,
model,
x,
y - initY,
key,
(!model->ok_pressed && keySelected) || backSelected);
x += key.width;
}
}
}
static uint8_t bt_hid_keyboard_get_selected_key(BtHidKeyboardModel* model) {
BtHidKeyboardKey key = bt_hid_keyboard_keyset[model->y][model->x];
// Use upper case if shift is toggled
bool useUppercase = model->shift;
// Check if the key has an upper case version
bool hasUppercase = key.shift_key != 0;
if(useUppercase && hasUppercase)
return key.value;
else
return key.value;
}
static void bt_hid_keyboard_get_select_key(BtHidKeyboardModel* model, BtHidKeyboardPoint delta) {
// Keep going until a valid spot is found, this allows for nulls and zero width keys in the map
do {
if(((int8_t)model->y) + delta.y < 0)
model->y = ROW_COUNT - 1;
else
model->y = (model->y + delta.y) % ROW_COUNT;
} while(delta.y != 0 && bt_hid_keyboard_keyset[model->y][model->x].value == 0);
do {
if(((int8_t)model->x) + delta.x < 0)
model->x = COLUMN_COUNT - 1;
else
model->x = (model->x + delta.x) % COLUMN_COUNT;
} while(delta.x != 0 && bt_hid_keyboard_keyset[model->y][model->x].width ==
0); // Skip zero width keys, pretend they are one key
}
static void bt_hid_keyboard_process(BtHidKeyboard* bt_hid_keyboard, InputEvent* event) {
with_view_model(
bt_hid_keyboard->view, (BtHidKeyboardModel * model) {
if(event->key == InputKeyOk) {
if(event->type == InputTypePress) {
model->ok_pressed = true;
} else if(event->type == InputTypeLong || event->type == InputTypeShort) {
model->last_key_code = bt_hid_keyboard_get_selected_key(model);
// Toggle the modifier key when clicked, and click the key
if(model->last_key_code == HID_KEYBOARD_L_SHIFT) {
model->shift = !model->shift;
if(model->shift)
model->modifier_code |= KEY_MOD_LEFT_SHIFT;
else
model->modifier_code &= ~KEY_MOD_LEFT_SHIFT;
} else if(model->last_key_code == HID_KEYBOARD_L_ALT) {
model->alt = !model->alt;
if(model->alt)
model->modifier_code |= KEY_MOD_LEFT_ALT;
else
model->modifier_code &= ~KEY_MOD_LEFT_ALT;
} else if(model->last_key_code == HID_KEYBOARD_L_CTRL) {
model->ctrl = !model->ctrl;
if(model->ctrl)
model->modifier_code |= KEY_MOD_LEFT_CTRL;
else
model->modifier_code &= ~KEY_MOD_LEFT_CTRL;
} else if(model->last_key_code == HID_KEYBOARD_L_GUI) {
model->gui = !model->gui;
if(model->gui)
model->modifier_code |= KEY_MOD_LEFT_GUI;
else
model->modifier_code &= ~KEY_MOD_LEFT_GUI;
}
furi_hal_bt_hid_kb_press(model->modifier_code | model->last_key_code);
} else if(event->type == InputTypeRelease) {
// Release happens after short and long presses
furi_hal_bt_hid_kb_release(model->modifier_code | model->last_key_code);
model->ok_pressed = false;
}
} else if(event->key == InputKeyBack) {
// If back is pressed for a short time, backspace
if(event->type == InputTypePress) {
model->back_pressed = true;
} else if(event->type == InputTypeShort) {
furi_hal_bt_hid_kb_press(HID_KEYBOARD_DELETE);
furi_hal_bt_hid_kb_release(HID_KEYBOARD_DELETE);
} else if(event->type == InputTypeRelease) {
model->back_pressed = false;
}
} else if(event->type == InputTypePress || event->type == InputTypeRepeat) {
// Cycle the selected keys
if(event->key == InputKeyUp) {
bt_hid_keyboard_get_select_key(model, (BtHidKeyboardPoint){.x = 0, .y = -1});
} else if(event->key == InputKeyDown) {
bt_hid_keyboard_get_select_key(model, (BtHidKeyboardPoint){.x = 0, .y = 1});
} else if(event->key == InputKeyLeft) {
bt_hid_keyboard_get_select_key(model, (BtHidKeyboardPoint){.x = -1, .y = 0});
} else if(event->key == InputKeyRight) {
bt_hid_keyboard_get_select_key(model, (BtHidKeyboardPoint){.x = 1, .y = 0});
}
}
return true;
});
}
static bool bt_hid_keyboard_input_callback(InputEvent* event, void* context) {
furi_assert(context);
BtHidKeyboard* bt_hid_keyboard = context;
bool consumed = false;
if(event->type == InputTypeLong && event->key == InputKeyBack) {
furi_hal_bt_hid_kb_release_all();
} else {
bt_hid_keyboard_process(bt_hid_keyboard, event);
consumed = true;
}
return consumed;
}
BtHidKeyboard* bt_hid_keyboard_alloc() {
BtHidKeyboard* bt_hid_keyboard = malloc(sizeof(BtHidKeyboard));
bt_hid_keyboard->view = view_alloc();
view_set_context(bt_hid_keyboard->view, bt_hid_keyboard);
view_allocate_model(bt_hid_keyboard->view, ViewModelTypeLocking, sizeof(BtHidKeyboardModel));
view_set_draw_callback(bt_hid_keyboard->view, bt_hid_keyboard_draw_callback);
view_set_input_callback(bt_hid_keyboard->view, bt_hid_keyboard_input_callback);
return bt_hid_keyboard;
}
void bt_hid_keyboard_free(BtHidKeyboard* bt_hid_keyboard) {
furi_assert(bt_hid_keyboard);
view_free(bt_hid_keyboard->view);
free(bt_hid_keyboard);
}
View* bt_hid_keyboard_get_view(BtHidKeyboard* bt_hid_keyboard) {
furi_assert(bt_hid_keyboard);
return bt_hid_keyboard->view;
}
void bt_hid_keyboard_set_connected_status(BtHidKeyboard* bt_hid_keyboard, bool connected) {
furi_assert(bt_hid_keyboard);
with_view_model(
bt_hid_keyboard->view, (BtHidKeyboardModel * model) {
model->connected = connected;
return true;
});
}

View File

@@ -1,13 +0,0 @@
#pragma once
#include <gui/view.h>
typedef struct BtHidKeyboard BtHidKeyboard;
BtHidKeyboard* bt_hid_keyboard_alloc();
void bt_hid_keyboard_free(BtHidKeyboard* bt_hid_keyboard);
View* bt_hid_keyboard_get_view(BtHidKeyboard* bt_hid_keyboard);
void bt_hid_keyboard_set_connected_status(BtHidKeyboard* bt_hid_keyboard, bool connected);

View File

@@ -1,204 +0,0 @@
#include "bt_hid_keynote.h"
#include <furi.h>
#include <furi_hal_bt_hid.h>
#include <furi_hal_usb_hid.h>
#include <gui/elements.h>
struct BtHidKeynote {
View* view;
};
typedef struct {
bool left_pressed;
bool up_pressed;
bool right_pressed;
bool down_pressed;
bool ok_pressed;
bool back_pressed;
bool connected;
} BtHidKeynoteModel;
static void bt_hid_keynote_draw_arrow(Canvas* canvas, uint8_t x, uint8_t y, CanvasDirection dir) {
canvas_draw_triangle(canvas, x, y, 5, 3, dir);
if(dir == CanvasDirectionBottomToTop) {
canvas_draw_line(canvas, x, y + 6, x, y - 1);
} else if(dir == CanvasDirectionTopToBottom) {
canvas_draw_line(canvas, x, y - 6, x, y + 1);
} else if(dir == CanvasDirectionRightToLeft) {
canvas_draw_line(canvas, x + 6, y, x - 1, y);
} else if(dir == CanvasDirectionLeftToRight) {
canvas_draw_line(canvas, x - 6, y, x + 1, y);
}
}
static void bt_hid_keynote_draw_callback(Canvas* canvas, void* context) {
furi_assert(context);
BtHidKeynoteModel* model = context;
// Header
if(model->connected) {
canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15);
} else {
canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15);
}
canvas_set_font(canvas, FontPrimary);
elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Keynote");
canvas_draw_icon(canvas, 68, 2, &I_Pin_back_arrow_10x8);
canvas_set_font(canvas, FontSecondary);
elements_multiline_text_aligned(canvas, 127, 3, AlignRight, AlignTop, "Hold to exit");
// Up
canvas_draw_icon(canvas, 21, 24, &I_Button_18x18);
if(model->up_pressed) {
elements_slightly_rounded_box(canvas, 24, 26, 13, 13);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_keynote_draw_arrow(canvas, 30, 30, CanvasDirectionBottomToTop);
canvas_set_color(canvas, ColorBlack);
// Down
canvas_draw_icon(canvas, 21, 45, &I_Button_18x18);
if(model->down_pressed) {
elements_slightly_rounded_box(canvas, 24, 47, 13, 13);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_keynote_draw_arrow(canvas, 30, 55, CanvasDirectionTopToBottom);
canvas_set_color(canvas, ColorBlack);
// Left
canvas_draw_icon(canvas, 0, 45, &I_Button_18x18);
if(model->left_pressed) {
elements_slightly_rounded_box(canvas, 3, 47, 13, 13);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_keynote_draw_arrow(canvas, 7, 53, CanvasDirectionRightToLeft);
canvas_set_color(canvas, ColorBlack);
// Right
canvas_draw_icon(canvas, 42, 45, &I_Button_18x18);
if(model->right_pressed) {
elements_slightly_rounded_box(canvas, 45, 47, 13, 13);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_keynote_draw_arrow(canvas, 53, 53, CanvasDirectionLeftToRight);
canvas_set_color(canvas, ColorBlack);
// Ok
canvas_draw_icon(canvas, 63, 25, &I_Space_65x18);
if(model->ok_pressed) {
elements_slightly_rounded_box(canvas, 66, 27, 60, 13);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 74, 29, &I_Ok_btn_9x9);
elements_multiline_text_aligned(canvas, 91, 36, AlignLeft, AlignBottom, "Space");
canvas_set_color(canvas, ColorBlack);
// Back
canvas_draw_icon(canvas, 63, 45, &I_Space_65x18);
if(model->back_pressed) {
elements_slightly_rounded_box(canvas, 66, 47, 60, 13);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 74, 49, &I_Pin_back_arrow_10x8);
elements_multiline_text_aligned(canvas, 91, 57, AlignLeft, AlignBottom, "Back");
}
static void bt_hid_keynote_process(BtHidKeynote* bt_hid_keynote, InputEvent* event) {
with_view_model(
bt_hid_keynote->view, (BtHidKeynoteModel * model) {
if(event->type == InputTypePress) {
if(event->key == InputKeyUp) {
model->up_pressed = true;
furi_hal_bt_hid_kb_press(HID_KEYBOARD_UP_ARROW);
} else if(event->key == InputKeyDown) {
model->down_pressed = true;
furi_hal_bt_hid_kb_press(HID_KEYBOARD_DOWN_ARROW);
} else if(event->key == InputKeyLeft) {
model->left_pressed = true;
furi_hal_bt_hid_kb_press(HID_KEYBOARD_LEFT_ARROW);
} else if(event->key == InputKeyRight) {
model->right_pressed = true;
furi_hal_bt_hid_kb_press(HID_KEYBOARD_RIGHT_ARROW);
} else if(event->key == InputKeyOk) {
model->ok_pressed = true;
furi_hal_bt_hid_kb_press(HID_KEYBOARD_SPACEBAR);
} else if(event->key == InputKeyBack) {
model->back_pressed = true;
}
} else if(event->type == InputTypeRelease) {
if(event->key == InputKeyUp) {
model->up_pressed = false;
furi_hal_bt_hid_kb_release(HID_KEYBOARD_UP_ARROW);
} else if(event->key == InputKeyDown) {
model->down_pressed = false;
furi_hal_bt_hid_kb_release(HID_KEYBOARD_DOWN_ARROW);
} else if(event->key == InputKeyLeft) {
model->left_pressed = false;
furi_hal_bt_hid_kb_release(HID_KEYBOARD_LEFT_ARROW);
} else if(event->key == InputKeyRight) {
model->right_pressed = false;
furi_hal_bt_hid_kb_release(HID_KEYBOARD_RIGHT_ARROW);
} else if(event->key == InputKeyOk) {
model->ok_pressed = false;
furi_hal_bt_hid_kb_release(HID_KEYBOARD_SPACEBAR);
} else if(event->key == InputKeyBack) {
model->back_pressed = false;
}
} else if(event->type == InputTypeShort) {
if(event->key == InputKeyBack) {
furi_hal_bt_hid_kb_press(HID_KEYBOARD_DELETE);
furi_hal_bt_hid_kb_release(HID_KEYBOARD_DELETE);
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_AC_BACK);
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_AC_BACK);
}
}
return true;
});
}
static bool bt_hid_keynote_input_callback(InputEvent* event, void* context) {
furi_assert(context);
BtHidKeynote* bt_hid_keynote = context;
bool consumed = false;
if(event->type == InputTypeLong && event->key == InputKeyBack) {
furi_hal_bt_hid_kb_release_all();
} else {
bt_hid_keynote_process(bt_hid_keynote, event);
consumed = true;
}
return consumed;
}
BtHidKeynote* bt_hid_keynote_alloc() {
BtHidKeynote* bt_hid_keynote = malloc(sizeof(BtHidKeynote));
bt_hid_keynote->view = view_alloc();
view_set_context(bt_hid_keynote->view, bt_hid_keynote);
view_allocate_model(bt_hid_keynote->view, ViewModelTypeLocking, sizeof(BtHidKeynoteModel));
view_set_draw_callback(bt_hid_keynote->view, bt_hid_keynote_draw_callback);
view_set_input_callback(bt_hid_keynote->view, bt_hid_keynote_input_callback);
return bt_hid_keynote;
}
void bt_hid_keynote_free(BtHidKeynote* bt_hid_keynote) {
furi_assert(bt_hid_keynote);
view_free(bt_hid_keynote->view);
free(bt_hid_keynote);
}
View* bt_hid_keynote_get_view(BtHidKeynote* bt_hid_keynote) {
furi_assert(bt_hid_keynote);
return bt_hid_keynote->view;
}
void bt_hid_keynote_set_connected_status(BtHidKeynote* bt_hid_keynote, bool connected) {
furi_assert(bt_hid_keynote);
with_view_model(
bt_hid_keynote->view, (BtHidKeynoteModel * model) {
model->connected = connected;
return true;
});
}

View File

@@ -1,13 +0,0 @@
#pragma once
#include <gui/view.h>
typedef struct BtHidKeynote BtHidKeynote;
BtHidKeynote* bt_hid_keynote_alloc();
void bt_hid_keynote_free(BtHidKeynote* bt_hid_keynote);
View* bt_hid_keynote_get_view(BtHidKeynote* bt_hid_keynote);
void bt_hid_keynote_set_connected_status(BtHidKeynote* bt_hid_keynote, bool connected);

View File

@@ -1,203 +0,0 @@
#include "bt_hid_media.h"
#include <furi.h>
#include <furi_hal_bt_hid.h>
#include <furi_hal_usb_hid.h>
#include <gui/elements.h>
struct BtHidMedia {
View* view;
};
typedef struct {
bool left_pressed;
bool up_pressed;
bool right_pressed;
bool down_pressed;
bool ok_pressed;
bool connected;
} BtHidMediaModel;
static void bt_hid_media_draw_arrow(Canvas* canvas, uint8_t x, uint8_t y, CanvasDirection dir) {
canvas_draw_triangle(canvas, x, y, 5, 3, dir);
if(dir == CanvasDirectionBottomToTop) {
canvas_draw_dot(canvas, x, y - 1);
} else if(dir == CanvasDirectionTopToBottom) {
canvas_draw_dot(canvas, x, y + 1);
} else if(dir == CanvasDirectionRightToLeft) {
canvas_draw_dot(canvas, x - 1, y);
} else if(dir == CanvasDirectionLeftToRight) {
canvas_draw_dot(canvas, x + 1, y);
}
}
static void bt_hid_media_draw_callback(Canvas* canvas, void* context) {
furi_assert(context);
BtHidMediaModel* model = context;
// Header
if(model->connected) {
canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15);
} else {
canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15);
}
canvas_set_font(canvas, FontPrimary);
elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Media");
canvas_set_font(canvas, FontSecondary);
// Keypad circles
canvas_draw_icon(canvas, 76, 8, &I_Circles_47x47);
// Up
if(model->up_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 93, 9, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 96, 12, &I_Volup_8x6);
canvas_set_color(canvas, ColorBlack);
// Down
if(model->down_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 93, 41, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 96, 45, &I_Voldwn_6x6);
canvas_set_color(canvas, ColorBlack);
// Left
if(model->left_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 77, 25, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_media_draw_arrow(canvas, 82, 31, CanvasDirectionRightToLeft);
bt_hid_media_draw_arrow(canvas, 86, 31, CanvasDirectionRightToLeft);
canvas_set_color(canvas, ColorBlack);
// Right
if(model->right_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 109, 25, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_media_draw_arrow(canvas, 112, 31, CanvasDirectionLeftToRight);
bt_hid_media_draw_arrow(canvas, 116, 31, CanvasDirectionLeftToRight);
canvas_set_color(canvas, ColorBlack);
// Ok
if(model->ok_pressed) {
canvas_draw_icon(canvas, 93, 25, &I_Pressed_Button_13x13);
canvas_set_color(canvas, ColorWhite);
}
bt_hid_media_draw_arrow(canvas, 96, 31, CanvasDirectionLeftToRight);
canvas_draw_line(canvas, 100, 29, 100, 33);
canvas_draw_line(canvas, 102, 29, 102, 33);
canvas_set_color(canvas, ColorBlack);
// Exit
canvas_draw_icon(canvas, 0, 54, &I_Pin_back_arrow_10x8);
canvas_set_font(canvas, FontSecondary);
elements_multiline_text_aligned(canvas, 13, 62, AlignLeft, AlignBottom, "Hold to exit");
}
static void bt_hid_media_process_press(BtHidMedia* bt_hid_media, InputEvent* event) {
with_view_model(
bt_hid_media->view, (BtHidMediaModel * model) {
if(event->key == InputKeyUp) {
model->up_pressed = true;
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_VOLUME_INCREMENT);
} else if(event->key == InputKeyDown) {
model->down_pressed = true;
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_VOLUME_DECREMENT);
} else if(event->key == InputKeyLeft) {
model->left_pressed = true;
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_SCAN_PREVIOUS_TRACK);
} else if(event->key == InputKeyRight) {
model->right_pressed = true;
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_SCAN_NEXT_TRACK);
} else if(event->key == InputKeyOk) {
model->ok_pressed = true;
furi_hal_bt_hid_consumer_key_press(HID_CONSUMER_PLAY_PAUSE);
}
return true;
});
}
static void bt_hid_media_process_release(BtHidMedia* bt_hid_media, InputEvent* event) {
with_view_model(
bt_hid_media->view, (BtHidMediaModel * model) {
if(event->key == InputKeyUp) {
model->up_pressed = false;
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_VOLUME_INCREMENT);
} else if(event->key == InputKeyDown) {
model->down_pressed = false;
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_VOLUME_DECREMENT);
} else if(event->key == InputKeyLeft) {
model->left_pressed = false;
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_SCAN_PREVIOUS_TRACK);
} else if(event->key == InputKeyRight) {
model->right_pressed = false;
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_SCAN_NEXT_TRACK);
} else if(event->key == InputKeyOk) {
model->ok_pressed = false;
furi_hal_bt_hid_consumer_key_release(HID_CONSUMER_PLAY_PAUSE);
}
return true;
});
}
static bool bt_hid_media_input_callback(InputEvent* event, void* context) {
furi_assert(context);
BtHidMedia* bt_hid_media = context;
bool consumed = false;
if(event->type == InputTypePress) {
bt_hid_media_process_press(bt_hid_media, event);
consumed = true;
} else if(event->type == InputTypeRelease) {
bt_hid_media_process_release(bt_hid_media, event);
consumed = true;
} else if(event->type == InputTypeShort) {
if(event->key == InputKeyBack) {
furi_hal_bt_hid_consumer_key_release_all();
}
}
return consumed;
}
BtHidMedia* bt_hid_media_alloc() {
BtHidMedia* bt_hid_media = malloc(sizeof(BtHidMedia));
bt_hid_media->view = view_alloc();
view_set_context(bt_hid_media->view, bt_hid_media);
view_allocate_model(bt_hid_media->view, ViewModelTypeLocking, sizeof(BtHidMediaModel));
view_set_draw_callback(bt_hid_media->view, bt_hid_media_draw_callback);
view_set_input_callback(bt_hid_media->view, bt_hid_media_input_callback);
return bt_hid_media;
}
void bt_hid_media_free(BtHidMedia* bt_hid_media) {
furi_assert(bt_hid_media);
view_free(bt_hid_media->view);
free(bt_hid_media);
}
View* bt_hid_media_get_view(BtHidMedia* bt_hid_media) {
furi_assert(bt_hid_media);
return bt_hid_media->view;
}
void bt_hid_media_set_connected_status(BtHidMedia* bt_hid_media, bool connected) {
furi_assert(bt_hid_media);
with_view_model(
bt_hid_media->view, (BtHidMediaModel * model) {
model->connected = connected;
return true;
});
}

View File

@@ -1,13 +0,0 @@
#pragma once
#include <gui/view.h>
typedef struct BtHidMedia BtHidMedia;
BtHidMedia* bt_hid_media_alloc();
void bt_hid_media_free(BtHidMedia* bt_hid_media);
View* bt_hid_media_get_view(BtHidMedia* bt_hid_media);
void bt_hid_media_set_connected_status(BtHidMedia* bt_hid_media, bool connected);

View File

@@ -1,218 +0,0 @@
#include "bt_hid_mouse.h"
#include <furi.h>
#include <furi_hal_bt_hid.h>
#include <furi_hal_usb_hid.h>
#include <gui/elements.h>
struct BtHidMouse {
View* view;
};
#define MOUSE_MOVE_SHORT 5
#define MOUSE_MOVE_LONG 20
typedef struct {
bool left_pressed;
bool up_pressed;
bool right_pressed;
bool down_pressed;
bool left_mouse_pressed;
bool left_mouse_held;
bool right_mouse_pressed;
bool connected;
} BtHidMouseModel;
static void bt_hid_mouse_draw_callback(Canvas* canvas, void* context) {
furi_assert(context);
BtHidMouseModel* model = context;
// Header
if(model->connected) {
canvas_draw_icon(canvas, 0, 0, &I_Ble_connected_15x15);
} else {
canvas_draw_icon(canvas, 0, 0, &I_Ble_disconnected_15x15);
}
canvas_set_font(canvas, FontPrimary);
elements_multiline_text_aligned(canvas, 17, 3, AlignLeft, AlignTop, "Mouse");
canvas_set_font(canvas, FontSecondary);
if(model->left_mouse_held == true) {
elements_multiline_text_aligned(canvas, 0, 62, AlignLeft, AlignBottom, "Selecting...");
} else {
canvas_draw_icon(canvas, 0, 54, &I_Pin_back_arrow_10x8);
canvas_set_font(canvas, FontSecondary);
elements_multiline_text_aligned(canvas, 13, 62, AlignLeft, AlignBottom, "Hold to exit");
}
// Keypad circles
canvas_draw_icon(canvas, 64, 8, &I_Circles_47x47);
// Up
if(model->up_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 81, 9, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 84, 10, &I_Pin_arrow_up7x9);
canvas_set_color(canvas, ColorBlack);
// Down
if(model->down_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 81, 41, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 84, 43, &I_Pin_arrow_down_7x9);
canvas_set_color(canvas, ColorBlack);
// Left
if(model->left_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 65, 25, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 67, 28, &I_Pin_arrow_left_9x7);
canvas_set_color(canvas, ColorBlack);
// Right
if(model->right_pressed) {
canvas_set_bitmap_mode(canvas, 1);
canvas_draw_icon(canvas, 97, 25, &I_Pressed_Button_13x13);
canvas_set_bitmap_mode(canvas, 0);
canvas_set_color(canvas, ColorWhite);
}
canvas_draw_icon(canvas, 99, 28, &I_Pin_arrow_right_9x7);
canvas_set_color(canvas, ColorBlack);
// Ok
if(model->left_mouse_pressed) {
canvas_draw_icon(canvas, 81, 25, &I_Ok_btn_pressed_13x13);
} else {
canvas_draw_icon(canvas, 83, 27, &I_Left_mouse_icon_9x9);
}
// Back
if(model->right_mouse_pressed) {
canvas_draw_icon(canvas, 108, 48, &I_Ok_btn_pressed_13x13);
} else {
canvas_draw_icon(canvas, 110, 50, &I_Right_mouse_icon_9x9);
}
}
static void bt_hid_mouse_process(BtHidMouse* bt_hid_mouse, InputEvent* event) {
with_view_model(
bt_hid_mouse->view, (BtHidMouseModel * model) {
if(event->key == InputKeyBack) {
if(event->type == InputTypeShort) {
furi_hal_bt_hid_mouse_press(HID_MOUSE_BTN_RIGHT);
furi_hal_bt_hid_mouse_release(HID_MOUSE_BTN_RIGHT);
} else if(event->type == InputTypePress) {
model->right_mouse_pressed = true;
} else if(event->type == InputTypeRelease) {
model->right_mouse_pressed = false;
}
} else if(event->key == InputKeyOk) {
if(event->type == InputTypeShort) {
// Just release if it was being held before
if(!model->left_mouse_held) furi_hal_bt_hid_mouse_press(HID_MOUSE_BTN_LEFT);
furi_hal_bt_hid_mouse_release(HID_MOUSE_BTN_LEFT);
model->left_mouse_held = false;
} else if(event->type == InputTypeLong) {
furi_hal_bt_hid_mouse_press(HID_MOUSE_BTN_LEFT);
model->left_mouse_held = true;
model->left_mouse_pressed = true;
} else if(event->type == InputTypePress) {
model->left_mouse_pressed = true;
} else if(event->type == InputTypeRelease) {
// Only release if it wasn't a long press
if(!model->left_mouse_held) model->left_mouse_pressed = false;
}
} else if(event->key == InputKeyRight) {
if(event->type == InputTypePress) {
model->right_pressed = true;
furi_hal_bt_hid_mouse_move(MOUSE_MOVE_SHORT, 0);
} else if(event->type == InputTypeRepeat) {
furi_hal_bt_hid_mouse_move(MOUSE_MOVE_LONG, 0);
} else if(event->type == InputTypeRelease) {
model->right_pressed = false;
}
} else if(event->key == InputKeyLeft) {
if(event->type == InputTypePress) {
model->left_pressed = true;
furi_hal_bt_hid_mouse_move(-MOUSE_MOVE_SHORT, 0);
} else if(event->type == InputTypeRepeat) {
furi_hal_bt_hid_mouse_move(-MOUSE_MOVE_LONG, 0);
} else if(event->type == InputTypeRelease) {
model->left_pressed = false;
}
} else if(event->key == InputKeyDown) {
if(event->type == InputTypePress) {
model->down_pressed = true;
furi_hal_bt_hid_mouse_move(0, MOUSE_MOVE_SHORT);
} else if(event->type == InputTypeRepeat) {
furi_hal_bt_hid_mouse_move(0, MOUSE_MOVE_LONG);
} else if(event->type == InputTypeRelease) {
model->down_pressed = false;
}
} else if(event->key == InputKeyUp) {
if(event->type == InputTypePress) {
model->up_pressed = true;
furi_hal_bt_hid_mouse_move(0, -MOUSE_MOVE_SHORT);
} else if(event->type == InputTypeRepeat) {
furi_hal_bt_hid_mouse_move(0, -MOUSE_MOVE_LONG);
} else if(event->type == InputTypeRelease) {
model->up_pressed = false;
}
}
return true;
});
}
static bool bt_hid_mouse_input_callback(InputEvent* event, void* context) {
furi_assert(context);
BtHidMouse* bt_hid_mouse = context;
bool consumed = false;
if(event->type == InputTypeLong && event->key == InputKeyBack) {
furi_hal_bt_hid_mouse_release_all();
} else {
bt_hid_mouse_process(bt_hid_mouse, event);
consumed = true;
}
return consumed;
}
BtHidMouse* bt_hid_mouse_alloc() {
BtHidMouse* bt_hid_mouse = malloc(sizeof(BtHidMouse));
bt_hid_mouse->view = view_alloc();
view_set_context(bt_hid_mouse->view, bt_hid_mouse);
view_allocate_model(bt_hid_mouse->view, ViewModelTypeLocking, sizeof(BtHidMouseModel));
view_set_draw_callback(bt_hid_mouse->view, bt_hid_mouse_draw_callback);
view_set_input_callback(bt_hid_mouse->view, bt_hid_mouse_input_callback);
return bt_hid_mouse;
}
void bt_hid_mouse_free(BtHidMouse* bt_hid_mouse) {
furi_assert(bt_hid_mouse);
view_free(bt_hid_mouse->view);
free(bt_hid_mouse);
}
View* bt_hid_mouse_get_view(BtHidMouse* bt_hid_mouse) {
furi_assert(bt_hid_mouse);
return bt_hid_mouse->view;
}
void bt_hid_mouse_set_connected_status(BtHidMouse* bt_hid_mouse, bool connected) {
furi_assert(bt_hid_mouse);
with_view_model(
bt_hid_mouse->view, (BtHidMouseModel * model) {
model->connected = connected;
return true;
});
}

View File

@@ -1,13 +0,0 @@
#pragma once
#include <gui/view.h>
typedef struct BtHidMouse BtHidMouse;
BtHidMouse* bt_hid_mouse_alloc();
void bt_hid_mouse_free(BtHidMouse* bt_hid_mouse);
View* bt_hid_mouse_get_view(BtHidMouse* bt_hid_mouse);
void bt_hid_mouse_set_connected_status(BtHidMouse* bt_hid_mouse, bool connected);

View File

@@ -1,61 +0,0 @@
#pragma once
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define RECORD_BT "bt"
typedef struct Bt Bt;
typedef enum {
BtStatusUnavailable,
BtStatusOff,
BtStatusAdvertising,
BtStatusConnected,
} BtStatus;
typedef enum {
BtProfileSerial,
BtProfileHidKeyboard,
} BtProfile;
typedef void (*BtStatusChangedCallback)(BtStatus status, void* context);
/** Change BLE Profile
* @note Call of this function leads to 2nd core restart
*
* @param bt Bt instance
* @param profile BtProfile
*
* @return true on success
*/
bool bt_set_profile(Bt* bt, BtProfile profile);
/** Disconnect from Central
*
* @param bt Bt instance
*/
void bt_disconnect(Bt* bt);
/** Set callback for Bluetooth status change notification
*
* @param bt Bt instance
* @param callback BtStatusChangedCallback instance
* @param context pointer to context
*/
void bt_set_status_changed_callback(Bt* bt, BtStatusChangedCallback callback, void* context);
/** Forget bonded devices
* @note Leads to wipe ble key storage and deleting bt.keys
*
* @param bt Bt instance
*/
void bt_forget_bonded_devices(Bt* bt);
#ifdef __cplusplus
}
#endif

View File

@@ -1,41 +0,0 @@
#include "bt_i.h"
bool bt_set_profile(Bt* bt, BtProfile profile) {
furi_assert(bt);
// Send message
bool result = false;
BtMessage message = {
.type = BtMessageTypeSetProfile, .data.profile = profile, .result = &result};
furi_check(
furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk);
// Wait for unlock
furi_event_flag_wait(bt->api_event, BT_API_UNLOCK_EVENT, FuriFlagWaitAny, FuriWaitForever);
return result;
}
void bt_disconnect(Bt* bt) {
furi_assert(bt);
// Send message
BtMessage message = {.type = BtMessageTypeDisconnect};
furi_check(
furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk);
// Wait for unlock
furi_event_flag_wait(bt->api_event, BT_API_UNLOCK_EVENT, FuriFlagWaitAny, FuriWaitForever);
}
void bt_set_status_changed_callback(Bt* bt, BtStatusChangedCallback callback, void* context) {
furi_assert(bt);
bt->status_changed_cb = callback;
bt->status_changed_ctx = context;
}
void bt_forget_bonded_devices(Bt* bt) {
furi_assert(bt);
BtMessage message = {.type = BtMessageTypeForgetBondedDevices};
furi_check(
furi_message_queue_put(bt->message_queue, &message, FuriWaitForever) == FuriStatusOk);
}

View File

@@ -1,66 +0,0 @@
#pragma once
#include "bt.h"
#include <furi.h>
#include <furi_hal.h>
#include <gui/gui.h>
#include <gui/view_port.h>
#include <gui/view.h>
#include <dialogs/dialogs.h>
#include <power/power_service/power.h>
#include <applications/rpc/rpc.h>
#include <applications/notification/notification.h>
#include "../bt_settings.h"
#define BT_API_UNLOCK_EVENT (1UL << 0)
typedef enum {
BtMessageTypeUpdateStatus,
BtMessageTypeUpdateBatteryLevel,
BtMessageTypeUpdatePowerState,
BtMessageTypePinCodeShow,
BtMessageTypeKeysStorageUpdated,
BtMessageTypeSetProfile,
BtMessageTypeDisconnect,
BtMessageTypeForgetBondedDevices,
} BtMessageType;
typedef union {
uint32_t pin_code;
uint8_t battery_level;
BtProfile profile;
} BtMessageData;
typedef struct {
BtMessageType type;
BtMessageData data;
bool* result;
} BtMessage;
struct Bt {
uint8_t* bt_keys_addr_start;
uint16_t bt_keys_size;
uint16_t max_packet_size;
BtSettings bt_settings;
BtStatus status;
BtProfile profile;
FuriMessageQueue* message_queue;
NotificationApp* notification;
Gui* gui;
ViewPort* statusbar_view_port;
ViewPort* pin_code_view_port;
uint32_t pin_code;
DialogsApp* dialogs;
DialogMessage* dialog_message;
Power* power;
Rpc* rpc;
RpcSession* rpc_session;
FuriEventFlag* rpc_event;
FuriEventFlag* api_event;
BtStatusChangedCallback status_changed_cb;
void* status_changed_ctx;
};

View File

@@ -1,57 +0,0 @@
#include "bt_keys_storage.h"
#include <furi.h>
#include <lib/toolbox/saved_struct.h>
#include <storage/storage.h>
#define BT_KEYS_STORAGE_PATH INT_PATH(BT_KEYS_STORAGE_FILE_NAME)
#define BT_KEYS_STORAGE_VERSION (0)
#define BT_KEYS_STORAGE_MAGIC (0x18)
bool bt_keys_storage_load(Bt* bt) {
furi_assert(bt);
bool file_loaded = false;
furi_hal_bt_get_key_storage_buff(&bt->bt_keys_addr_start, &bt->bt_keys_size);
furi_hal_bt_nvm_sram_sem_acquire();
file_loaded = saved_struct_load(
BT_KEYS_STORAGE_PATH,
bt->bt_keys_addr_start,
bt->bt_keys_size,
BT_KEYS_STORAGE_MAGIC,
BT_KEYS_STORAGE_VERSION);
furi_hal_bt_nvm_sram_sem_release();
return file_loaded;
}
bool bt_keys_storage_save(Bt* bt) {
furi_assert(bt);
furi_assert(bt->bt_keys_addr_start);
bool file_saved = false;
furi_hal_bt_nvm_sram_sem_acquire();
file_saved = saved_struct_save(
BT_KEYS_STORAGE_PATH,
bt->bt_keys_addr_start,
bt->bt_keys_size,
BT_KEYS_STORAGE_MAGIC,
BT_KEYS_STORAGE_VERSION);
furi_hal_bt_nvm_sram_sem_release();
return file_saved;
}
bool bt_keys_storage_delete(Bt* bt) {
furi_assert(bt);
bool delete_succeed = false;
bool bt_is_active = furi_hal_bt_is_active();
furi_hal_bt_stop_advertising();
delete_succeed = furi_hal_bt_clear_white_list();
if(bt_is_active) {
furi_hal_bt_start_advertising();
}
return delete_succeed;
}

View File

@@ -1,10 +0,0 @@
#pragma once
#include "bt_i.h"
#include "bt_keys_filename.h"
bool bt_keys_storage_load(Bt* bt);
bool bt_keys_storage_save(Bt* bt);
bool bt_keys_storage_delete(Bt* bt);

View File

@@ -1,9 +0,0 @@
App(
appid="cli",
name="CliSrv",
apptype=FlipperAppType.SERVICE,
entry_point="cli_srv",
cdefines=["SRV_CLI"],
stack_size=4 * 1024,
order=30,
)

View File

@@ -1,228 +0,0 @@
#include "cli_command_gpio.h"
#include <furi.h>
#include <furi_hal.h>
#include <lib/toolbox/args.h>
typedef struct {
const GpioPin* pin;
const char* name;
const bool debug;
} CliCommandGpio;
const CliCommandGpio cli_command_gpio_pins[] = {
{.pin = &gpio_ext_pc0, .name = "PC0", .debug = false},
{.pin = &gpio_ext_pc1, .name = "PC1", .debug = false},
{.pin = &gpio_ext_pc3, .name = "PC3", .debug = false},
{.pin = &gpio_ext_pb2, .name = "PB2", .debug = false},
{.pin = &gpio_ext_pb3, .name = "PB3", .debug = false},
{.pin = &gpio_ext_pa4, .name = "PA4", .debug = false},
{.pin = &gpio_ext_pa6, .name = "PA6", .debug = false},
{.pin = &gpio_ext_pa7, .name = "PA7", .debug = false},
/* Dangerous pins, may damage hardware */
{.pin = &gpio_infrared_rx, .name = "PA0", .debug = true},
{.pin = &gpio_usart_rx, .name = "PB7", .debug = true},
{.pin = &gpio_speaker, .name = "PB8", .debug = true},
{.pin = &gpio_infrared_tx, .name = "PB9", .debug = true},
};
void cli_command_gpio_print_usage() {
printf("Usage:\r\n");
printf("gpio <cmd> <args>\r\n");
printf("Cmd list:\r\n");
printf("\tmode <pin_name> <0|1>\t - Set gpio mode: 0 - input, 1 - output\r\n");
printf("\tset <pin_name> <0|1>\t - Set gpio value\r\n");
printf("\tread <pin_name>\t - Read gpio value\r\n");
}
static bool pin_name_to_int(string_t pin_name, size_t* result) {
bool found = false;
bool debug = furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug);
for(size_t i = 0; i < COUNT_OF(cli_command_gpio_pins); i++) {
if(!string_cmp(pin_name, cli_command_gpio_pins[i].name)) {
if(!cli_command_gpio_pins[i].debug || (cli_command_gpio_pins[i].debug && debug)) {
*result = i;
found = true;
break;
}
}
}
return found;
}
static void gpio_print_pins(void) {
printf("Wrong pin name. Available pins: ");
bool debug = furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug);
for(size_t i = 0; i < COUNT_OF(cli_command_gpio_pins); i++) {
if(!cli_command_gpio_pins[i].debug || (cli_command_gpio_pins[i].debug && debug)) {
printf("%s ", cli_command_gpio_pins[i].name);
}
}
}
typedef enum { OK, ERR_CMD_SYNTAX, ERR_PIN, ERR_VALUE } GpioParseError;
static GpioParseError gpio_command_parse(string_t args, size_t* pin_num, uint8_t* value) {
string_t pin_name;
string_init(pin_name);
size_t ws = string_search_char(args, ' ');
if(ws == STRING_FAILURE) {
return ERR_CMD_SYNTAX;
}
string_set_n(pin_name, args, 0, ws);
string_right(args, ws);
string_strim(args);
if(!pin_name_to_int(pin_name, pin_num)) {
string_clear(pin_name);
return ERR_PIN;
}
string_clear(pin_name);
if(!string_cmp(args, "0")) {
*value = 0;
} else if(!string_cmp(args, "1")) {
*value = 1;
} else {
return ERR_VALUE;
}
return OK;
}
void cli_command_gpio_mode(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
size_t num = 0;
uint8_t value = 255;
GpioParseError err = gpio_command_parse(args, &num, &value);
if(ERR_CMD_SYNTAX == err) {
cli_print_usage("gpio mode", "<pin_name> <0|1>", string_get_cstr(args));
return;
} else if(ERR_PIN == err) {
gpio_print_pins();
return;
} else if(ERR_VALUE == err) {
printf("Value is invalid. Enter 1 for input or 0 for output");
return;
}
if(cli_command_gpio_pins[num].debug) {
printf(
"Changeing this pin mode may damage hardware. Are you sure you want to continue? (y/n)?\r\n");
char c = cli_getc(cli);
if(c != 'y' && c != 'Y') {
printf("Cancelled.\r\n");
return;
}
}
if(value == 1) { // output
furi_hal_gpio_write(cli_command_gpio_pins[num].pin, false);
furi_hal_gpio_init_simple(cli_command_gpio_pins[num].pin, GpioModeOutputPushPull);
printf("Pin %s is now an output (low)", cli_command_gpio_pins[num].name);
} else { // input
furi_hal_gpio_init_simple(cli_command_gpio_pins[num].pin, GpioModeInput);
printf("Pin %s is now an input", cli_command_gpio_pins[num].name);
}
}
void cli_command_gpio_read(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
size_t num = 0;
if(!pin_name_to_int(args, &num)) {
gpio_print_pins();
return;
}
if(LL_GPIO_MODE_INPUT !=
LL_GPIO_GetPinMode(
cli_command_gpio_pins[num].pin->port, cli_command_gpio_pins[num].pin->pin)) {
printf("Err: pin %s is not set as an input.", cli_command_gpio_pins[num].name);
return;
}
uint8_t val = !!furi_hal_gpio_read(cli_command_gpio_pins[num].pin);
printf("Pin %s <= %u", cli_command_gpio_pins[num].name, val);
}
void cli_command_gpio_set(Cli* cli, string_t args, void* context) {
UNUSED(context);
size_t num = 0;
uint8_t value = 0;
GpioParseError err = gpio_command_parse(args, &num, &value);
if(ERR_CMD_SYNTAX == err) {
cli_print_usage("gpio set", "<pin_name> <0|1>", string_get_cstr(args));
return;
} else if(ERR_PIN == err) {
gpio_print_pins();
return;
} else if(ERR_VALUE == err) {
printf("Value is invalid. Enter 1 for high or 0 for low");
return;
}
if(LL_GPIO_MODE_OUTPUT !=
LL_GPIO_GetPinMode(
cli_command_gpio_pins[num].pin->port, cli_command_gpio_pins[num].pin->pin)) {
printf("Err: pin %s is not set as an output.", cli_command_gpio_pins[num].name);
return;
}
// Extra check if debug pins used
if(cli_command_gpio_pins[num].debug) {
printf(
"Setting this pin may damage hardware. Are you sure you want to continue? (y/n)?\r\n");
char c = cli_getc(cli);
if(c != 'y' && c != 'Y') {
printf("Cancelled.\r\n");
return;
}
}
furi_hal_gpio_write(cli_command_gpio_pins[num].pin, !!value);
printf("Pin %s => %u", cli_command_gpio_pins[num].name, !!value);
}
void cli_command_gpio(Cli* cli, string_t args, void* context) {
string_t cmd;
string_init(cmd);
do {
if(!args_read_string_and_trim(args, cmd)) {
cli_command_gpio_print_usage();
break;
}
if(string_cmp_str(cmd, "mode") == 0) {
cli_command_gpio_mode(cli, args, context);
break;
}
if(string_cmp_str(cmd, "set") == 0) {
cli_command_gpio_set(cli, args, context);
break;
}
if(string_cmp_str(cmd, "read") == 0) {
cli_command_gpio_read(cli, args, context);
break;
}
cli_command_gpio_print_usage();
} while(false);
string_clear(cmd);
}

View File

@@ -1,5 +0,0 @@
#pragma once
#include "cli_i.h"
void cli_command_gpio(Cli* cli, string_t args, void* context);

View File

@@ -1,338 +0,0 @@
#include "cli_commands.h"
#include "cli_command_gpio.h"
#include <furi_hal.h>
#include <furi_hal_info.h>
#include <task_control_block.h>
#include <time.h>
#include <notification/notification_messages.h>
#include <loader/loader.h>
#include <stream_buffer.h>
// Close to ISO, `date +'%Y-%m-%d %H:%M:%S %u'`
#define CLI_DATE_FORMAT "%.4d-%.2d-%.2d %.2d:%.2d:%.2d %d"
void cli_command_device_info_callback(const char* key, const char* value, bool last, void* context) {
UNUSED(context);
UNUSED(last);
printf("%-30s: %s\r\n", key, value);
}
/*
* Device Info Command
* This command is intended to be used by humans
*/
void cli_command_device_info(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(args);
furi_hal_info_get(cli_command_device_info_callback, context);
}
void cli_command_help(Cli* cli, string_t args, void* context) {
UNUSED(args);
UNUSED(context);
printf("Commands we have:");
// Command count
const size_t commands_count = CliCommandTree_size(cli->commands);
const size_t commands_count_mid = commands_count / 2 + commands_count % 2;
// Use 2 iterators from start and middle to show 2 columns
CliCommandTree_it_t it_left;
CliCommandTree_it(it_left, cli->commands);
CliCommandTree_it_t it_right;
CliCommandTree_it(it_right, cli->commands);
for(size_t i = 0; i < commands_count_mid; i++) CliCommandTree_next(it_right);
// Iterate throw tree
for(size_t i = 0; i < commands_count_mid; i++) {
printf("\r\n");
// Left Column
if(!CliCommandTree_end_p(it_left)) {
printf("%-30s", string_get_cstr(*CliCommandTree_ref(it_left)->key_ptr));
CliCommandTree_next(it_left);
}
// Right Column
if(!CliCommandTree_end_p(it_right)) {
printf("%s", string_get_cstr(*CliCommandTree_ref(it_right)->key_ptr));
CliCommandTree_next(it_right);
}
};
if(string_size(args) > 0) {
cli_nl();
printf("Also I have no clue what '");
printf("%s", string_get_cstr(args));
printf("' is.");
}
}
void cli_command_date(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
FuriHalRtcDateTime datetime = {0};
if(string_size(args) > 0) {
uint16_t hours, minutes, seconds, month, day, year, weekday;
int ret = sscanf(
string_get_cstr(args),
"%hu-%hu-%hu %hu:%hu:%hu %hu",
&year,
&month,
&day,
&hours,
&minutes,
&seconds,
&weekday);
// Some variables are going to discard upper byte
// There will be some funky behaviour which is not breaking anything
datetime.hour = hours;
datetime.minute = minutes;
datetime.second = seconds;
datetime.weekday = weekday;
datetime.month = month;
datetime.day = day;
datetime.year = year;
if(ret != 7) {
printf(
"Invalid datetime format, use `%s`. sscanf %d %s",
"%Y-%m-%d %H:%M:%S %u",
ret,
string_get_cstr(args));
return;
}
if(!furi_hal_rtc_validate_datetime(&datetime)) {
printf("Invalid datetime data");
return;
}
furi_hal_rtc_set_datetime(&datetime);
// Verification
furi_hal_rtc_get_datetime(&datetime);
printf(
"New datetime is: " CLI_DATE_FORMAT,
datetime.year,
datetime.month,
datetime.day,
datetime.hour,
datetime.minute,
datetime.second,
datetime.weekday);
} else {
furi_hal_rtc_get_datetime(&datetime);
printf(
CLI_DATE_FORMAT,
datetime.year,
datetime.month,
datetime.day,
datetime.hour,
datetime.minute,
datetime.second,
datetime.weekday);
}
}
#define CLI_COMMAND_LOG_RING_SIZE 2048
#define CLI_COMMAND_LOG_BUFFER_SIZE 64
void cli_command_log_tx_callback(const uint8_t* buffer, size_t size, void* context) {
xStreamBufferSend(context, buffer, size, 0);
}
void cli_command_log(Cli* cli, string_t args, void* context) {
UNUSED(args);
UNUSED(context);
StreamBufferHandle_t ring = xStreamBufferCreate(CLI_COMMAND_LOG_RING_SIZE, 1);
uint8_t buffer[CLI_COMMAND_LOG_BUFFER_SIZE];
furi_hal_console_set_tx_callback(cli_command_log_tx_callback, ring);
printf("Press CTRL+C to stop...\r\n");
while(!cli_cmd_interrupt_received(cli)) {
size_t ret = xStreamBufferReceive(ring, buffer, CLI_COMMAND_LOG_BUFFER_SIZE, 50);
cli_write(cli, buffer, ret);
}
furi_hal_console_set_tx_callback(NULL, NULL);
vStreamBufferDelete(ring);
}
void cli_command_vibro(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
if(!string_cmp(args, "0")) {
NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
notification_message_block(notification, &sequence_reset_vibro);
furi_record_close(RECORD_NOTIFICATION);
} else if(!string_cmp(args, "1")) {
NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
notification_message_block(notification, &sequence_set_vibro_on);
furi_record_close(RECORD_NOTIFICATION);
} else {
cli_print_usage("vibro", "<1|0>", string_get_cstr(args));
}
}
void cli_command_debug(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
if(!string_cmp(args, "0")) {
furi_hal_rtc_reset_flag(FuriHalRtcFlagDebug);
loader_update_menu();
printf("Debug disabled.");
} else if(!string_cmp(args, "1")) {
furi_hal_rtc_set_flag(FuriHalRtcFlagDebug);
loader_update_menu();
printf("Debug enabled.");
} else {
cli_print_usage("debug", "<1|0>", string_get_cstr(args));
}
}
void cli_command_led(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(context);
// Get first word as light name
NotificationMessage notification_led_message;
string_t light_name;
string_init(light_name);
size_t ws = string_search_char(args, ' ');
if(ws == STRING_FAILURE) {
cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
string_clear(light_name);
return;
} else {
string_set_n(light_name, args, 0, ws);
string_right(args, ws);
string_strim(args);
}
// Check light name
if(!string_cmp(light_name, "r")) {
notification_led_message.type = NotificationMessageTypeLedRed;
} else if(!string_cmp(light_name, "g")) {
notification_led_message.type = NotificationMessageTypeLedGreen;
} else if(!string_cmp(light_name, "b")) {
notification_led_message.type = NotificationMessageTypeLedBlue;
} else if(!string_cmp(light_name, "bl")) {
notification_led_message.type = NotificationMessageTypeLedDisplayBacklight;
} else {
cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
string_clear(light_name);
return;
}
string_clear(light_name);
// Read light value from the rest of the string
char* end_ptr;
uint32_t value = strtoul(string_get_cstr(args), &end_ptr, 0);
if(!(value < 256 && *end_ptr == '\0')) {
cli_print_usage("led", "<r|g|b|bl> <0-255>", string_get_cstr(args));
return;
}
// Set led value
notification_led_message.data.led.value = value;
// Form notification sequence
const NotificationSequence notification_sequence = {
&notification_led_message,
NULL,
};
// Send notification
NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION);
notification_internal_message_block(notification, &notification_sequence);
furi_record_close(RECORD_NOTIFICATION);
}
void cli_command_ps(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(args);
UNUSED(context);
const uint8_t threads_num_max = 32;
FuriThreadId threads_ids[threads_num_max];
uint8_t thread_num = furi_thread_enumerate(threads_ids, threads_num_max);
printf(
"%-20s %-14s %-8s %-8s %s\r\n", "Name", "Stack start", "Heap", "Stack", "Stack min free");
for(uint8_t i = 0; i < thread_num; i++) {
TaskControlBlock* tcb = (TaskControlBlock*)threads_ids[i];
printf(
"%-20s 0x%-12lx %-8d %-8ld %-8ld\r\n",
furi_thread_get_name(threads_ids[i]),
(uint32_t)tcb->pxStack,
memmgr_heap_get_thread_memory(threads_ids[i]),
(uint32_t)(tcb->pxEndOfStack - tcb->pxStack + 1) * sizeof(StackType_t),
furi_thread_get_stack_space(threads_ids[i]));
}
printf("\r\nTotal: %d", thread_num);
}
void cli_command_free(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(args);
UNUSED(context);
printf("Free heap size: %d\r\n", memmgr_get_free_heap());
printf("Total heap size: %d\r\n", memmgr_get_total_heap());
printf("Minimum heap size: %d\r\n", memmgr_get_minimum_free_heap());
printf("Maximum heap block: %d\r\n", memmgr_heap_get_max_free_block());
printf("Pool free: %d\r\n", memmgr_pool_get_free());
printf("Maximum pool block: %d\r\n", memmgr_pool_get_max_block());
}
void cli_command_free_blocks(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(args);
UNUSED(context);
memmgr_heap_printf_free_blocks();
}
void cli_command_i2c(Cli* cli, string_t args, void* context) {
UNUSED(cli);
UNUSED(args);
UNUSED(context);
furi_hal_i2c_acquire(&furi_hal_i2c_handle_external);
printf("Scanning external i2c on PC0(SCL)/PC1(SDA)\r\n"
"Clock: 100khz, 7bit address\r\n"
"\r\n");
printf(" | 0 1 2 3 4 5 6 7 8 9 A B C D E F\r\n");
printf("--+--------------------------------\r\n");
for(uint8_t row = 0; row < 0x8; row++) {
printf("%x | ", row);
for(uint8_t column = 0; column <= 0xF; column++) {
bool ret = furi_hal_i2c_is_device_ready(
&furi_hal_i2c_handle_external, ((row << 4) + column) << 1, 2);
printf("%c ", ret ? '#' : '-');
}
printf("\r\n");
}
furi_hal_i2c_release(&furi_hal_i2c_handle_external);
}
void cli_commands_init(Cli* cli) {
cli_add_command(cli, "!", CliCommandFlagParallelSafe, cli_command_device_info, NULL);
cli_add_command(cli, "device_info", CliCommandFlagParallelSafe, cli_command_device_info, NULL);
cli_add_command(cli, "?", CliCommandFlagParallelSafe, cli_command_help, NULL);
cli_add_command(cli, "help", CliCommandFlagParallelSafe, cli_command_help, NULL);
cli_add_command(cli, "date", CliCommandFlagParallelSafe, cli_command_date, NULL);
cli_add_command(cli, "log", CliCommandFlagParallelSafe, cli_command_log, NULL);
cli_add_command(cli, "debug", CliCommandFlagDefault, cli_command_debug, NULL);
cli_add_command(cli, "ps", CliCommandFlagParallelSafe, cli_command_ps, NULL);
cli_add_command(cli, "free", CliCommandFlagParallelSafe, cli_command_free, NULL);
cli_add_command(cli, "free_blocks", CliCommandFlagParallelSafe, cli_command_free_blocks, NULL);
cli_add_command(cli, "vibro", CliCommandFlagDefault, cli_command_vibro, NULL);
cli_add_command(cli, "led", CliCommandFlagDefault, cli_command_led, NULL);
cli_add_command(cli, "gpio", CliCommandFlagDefault, cli_command_gpio, NULL);
cli_add_command(cli, "i2c", CliCommandFlagDefault, cli_command_i2c, NULL);
}

View File

@@ -1,326 +0,0 @@
#include <furi_hal_usb_cdc_i.h>
#include <furi_hal.h>
#include <furi.h>
#include <stream_buffer.h>
#include "cli_i.h"
#define TAG "CliVcp"
#define USB_CDC_PKT_LEN CDC_DATA_SZ
#define VCP_RX_BUF_SIZE (USB_CDC_PKT_LEN * 3)
#define VCP_TX_BUF_SIZE (USB_CDC_PKT_LEN * 3)
#define VCP_IF_NUM 0
typedef enum {
VcpEvtStop = (1 << 0),
VcpEvtConnect = (1 << 1),
VcpEvtDisconnect = (1 << 2),
VcpEvtStreamRx = (1 << 3),
VcpEvtRx = (1 << 4),
VcpEvtStreamTx = (1 << 5),
VcpEvtTx = (1 << 6),
} WorkerEvtFlags;
#define VCP_THREAD_FLAG_ALL \
(VcpEvtStop | VcpEvtConnect | VcpEvtDisconnect | VcpEvtRx | VcpEvtTx | VcpEvtStreamRx | \
VcpEvtStreamTx)
typedef struct {
FuriThread* thread;
StreamBufferHandle_t tx_stream;
StreamBufferHandle_t rx_stream;
volatile bool connected;
volatile bool running;
FuriHalUsbInterface* usb_if_prev;
uint8_t data_buffer[USB_CDC_PKT_LEN];
} CliVcp;
static int32_t vcp_worker(void* context);
static void vcp_on_cdc_tx_complete(void* context);
static void vcp_on_cdc_rx(void* context);
static void vcp_state_callback(void* context, uint8_t state);
static void vcp_on_cdc_control_line(void* context, uint8_t state);
static CdcCallbacks cdc_cb = {
vcp_on_cdc_tx_complete,
vcp_on_cdc_rx,
vcp_state_callback,
vcp_on_cdc_control_line,
NULL,
};
static CliVcp* vcp = NULL;
static const uint8_t ascii_soh = 0x01;
static const uint8_t ascii_eot = 0x04;
static void cli_vcp_init() {
if(vcp == NULL) {
vcp = malloc(sizeof(CliVcp));
vcp->tx_stream = xStreamBufferCreate(VCP_TX_BUF_SIZE, 1);
vcp->rx_stream = xStreamBufferCreate(VCP_RX_BUF_SIZE, 1);
}
furi_assert(vcp->thread == NULL);
vcp->connected = false;
vcp->thread = furi_thread_alloc();
furi_thread_set_name(vcp->thread, "CliVcpWorker");
furi_thread_set_stack_size(vcp->thread, 1024);
furi_thread_set_callback(vcp->thread, vcp_worker);
furi_thread_start(vcp->thread);
FURI_LOG_I(TAG, "Init OK");
}
static void cli_vcp_deinit() {
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtStop);
furi_thread_join(vcp->thread);
furi_thread_free(vcp->thread);
vcp->thread = NULL;
}
static int32_t vcp_worker(void* context) {
UNUSED(context);
bool tx_idle = true;
size_t missed_rx = 0;
uint8_t last_tx_pkt_len = 0;
// Switch USB to VCP mode (if it is not set yet)
vcp->usb_if_prev = furi_hal_usb_get_config();
if((vcp->usb_if_prev != &usb_cdc_single) && (vcp->usb_if_prev != &usb_cdc_dual)) {
furi_hal_usb_set_config(&usb_cdc_single, NULL);
}
furi_hal_cdc_set_callbacks(VCP_IF_NUM, &cdc_cb, NULL);
FURI_LOG_D(TAG, "Start");
vcp->running = true;
while(1) {
uint32_t flags =
furi_thread_flags_wait(VCP_THREAD_FLAG_ALL, FuriFlagWaitAny, FuriWaitForever);
furi_assert((flags & FuriFlagError) == 0);
// VCP session opened
if(flags & VcpEvtConnect) {
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "Connect");
#endif
if(vcp->connected == false) {
vcp->connected = true;
xStreamBufferSend(vcp->rx_stream, &ascii_soh, 1, FuriWaitForever);
}
}
// VCP session closed
if(flags & VcpEvtDisconnect) {
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "Disconnect");
#endif
if(vcp->connected == true) {
vcp->connected = false;
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, FuriWaitForever);
}
}
// Rx buffer was read, maybe there is enough space for new data?
if((flags & VcpEvtStreamRx) && (missed_rx > 0)) {
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "StreamRx");
#endif
if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
flags |= VcpEvtRx;
missed_rx--;
}
}
// New data received
if(flags & VcpEvtRx) {
if(xStreamBufferSpacesAvailable(vcp->rx_stream) >= USB_CDC_PKT_LEN) {
int32_t len = furi_hal_cdc_receive(VCP_IF_NUM, vcp->data_buffer, USB_CDC_PKT_LEN);
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "Rx %d", len);
#endif
if(len > 0) {
furi_check(
xStreamBufferSend(vcp->rx_stream, vcp->data_buffer, len, FuriWaitForever) ==
(size_t)len);
}
} else {
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "Rx missed");
#endif
missed_rx++;
}
}
// New data in Tx buffer
if(flags & VcpEvtStreamTx) {
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "StreamTx");
#endif
if(tx_idle) {
flags |= VcpEvtTx;
}
}
// CDC write transfer done
if(flags & VcpEvtTx) {
size_t len =
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "Tx %d", len);
#endif
if(len > 0) { // Some data left in Tx buffer. Sending it now
tx_idle = false;
furi_hal_cdc_send(VCP_IF_NUM, vcp->data_buffer, len);
last_tx_pkt_len = len;
} else { // There is nothing to send.
if(last_tx_pkt_len == 64) {
// Send extra zero-length packet if last packet len is 64 to indicate transfer end
furi_hal_cdc_send(VCP_IF_NUM, NULL, 0);
} else {
// Set flag to start next transfer instantly
tx_idle = true;
}
last_tx_pkt_len = 0;
}
}
if(flags & VcpEvtStop) {
vcp->connected = false;
vcp->running = false;
furi_hal_cdc_set_callbacks(VCP_IF_NUM, NULL, NULL);
// Restore previous USB mode (if it was set during init)
if((vcp->usb_if_prev != &usb_cdc_single) && (vcp->usb_if_prev != &usb_cdc_dual)) {
furi_hal_usb_unlock();
furi_hal_usb_set_config(vcp->usb_if_prev, NULL);
}
xStreamBufferReceive(vcp->tx_stream, vcp->data_buffer, USB_CDC_PKT_LEN, 0);
xStreamBufferSend(vcp->rx_stream, &ascii_eot, 1, FuriWaitForever);
break;
}
}
FURI_LOG_D(TAG, "End");
return 0;
}
static size_t cli_vcp_rx(uint8_t* buffer, size_t size, uint32_t timeout) {
furi_assert(vcp);
furi_assert(buffer);
if(vcp->running == false) {
return 0;
}
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u start", size);
#endif
size_t rx_cnt = 0;
while(size > 0) {
size_t batch_size = size;
if(batch_size > VCP_RX_BUF_SIZE) batch_size = VCP_RX_BUF_SIZE;
size_t len = xStreamBufferReceive(vcp->rx_stream, buffer, batch_size, timeout);
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u ", batch_size);
#endif
if(len == 0) break;
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtStreamRx);
size -= len;
buffer += len;
rx_cnt += len;
}
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "rx %u end", size);
#endif
return rx_cnt;
}
static void cli_vcp_tx(const uint8_t* buffer, size_t size) {
furi_assert(vcp);
furi_assert(buffer);
if(vcp->running == false) {
return;
}
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u start", size);
#endif
while(size > 0 && vcp->connected) {
size_t batch_size = size;
if(batch_size > USB_CDC_PKT_LEN) batch_size = USB_CDC_PKT_LEN;
xStreamBufferSend(vcp->tx_stream, buffer, batch_size, FuriWaitForever);
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtStreamTx);
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u", batch_size);
#endif
size -= batch_size;
buffer += batch_size;
}
#ifdef CLI_VCP_DEBUG
FURI_LOG_D(TAG, "tx %u end", size);
#endif
}
static void cli_vcp_tx_stdout(const char* data, size_t size) {
cli_vcp_tx((const uint8_t*)data, size);
}
static void vcp_state_callback(void* context, uint8_t state) {
UNUSED(context);
if(state == 0) {
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtDisconnect);
}
}
static void vcp_on_cdc_control_line(void* context, uint8_t state) {
UNUSED(context);
// bit 0: DTR state, bit 1: RTS state
bool dtr = state & (1 << 0);
if(dtr == true) {
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtConnect);
} else {
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtDisconnect);
}
}
static void vcp_on_cdc_rx(void* context) {
UNUSED(context);
uint32_t ret = furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtRx);
furi_check((ret & FuriFlagError) == 0);
}
static void vcp_on_cdc_tx_complete(void* context) {
UNUSED(context);
furi_thread_flags_set(furi_thread_get_id(vcp->thread), VcpEvtTx);
}
static bool cli_vcp_is_connected(void) {
furi_assert(vcp);
return vcp->connected;
}
CliSession cli_vcp = {
cli_vcp_init,
cli_vcp_deinit,
cli_vcp_rx,
cli_vcp_tx,
cli_vcp_tx_stdout,
cli_vcp_is_connected,
};

View File

@@ -1,11 +0,0 @@
App(
appid="clock",
name="Clock",
apptype=FlipperAppType.APP,
entry_point="clock_app",
cdefines=["APP_CLOCK"],
requires=["gui"],
icon="A_Clock_14",
stack_size=2 * 1024,
order=9,
)

View File

@@ -1,146 +0,0 @@
#include <furi.h>
#include <furi_hal.h>
#include <gui/elements.h>
#include <gui/gui.h>
#include <input/input.h>
#define TAG "Clock"
#define CLOCK_DATE_FORMAT "%.4d-%.2d-%.2d"
#define CLOCK_TIME_FORMAT "%.2d:%.2d:%.2d"
typedef enum {
EventTypeTick,
EventTypeKey,
} EventType;
typedef struct {
EventType type;
InputEvent input;
} PluginEvent;
typedef struct {
FuriHalRtcDateTime datetime;
} ClockState;
static void clock_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
furi_assert(event_queue);
PluginEvent event = {.type = EventTypeKey, .input = *input_event};
furi_message_queue_put(event_queue, &event, FuriWaitForever);
}
static void clock_render_callback(Canvas* const canvas, void* ctx) {
canvas_clear(canvas);
canvas_set_color(canvas, ColorBlack);
ClockState* state = (ClockState*)acquire_mutex((ValueMutex*)ctx, 25);
char strings[2][20];
snprintf(
strings[0],
sizeof(strings[0]),
CLOCK_DATE_FORMAT,
state->datetime.year,
state->datetime.month,
state->datetime.day);
snprintf(
strings[1],
sizeof(strings[1]),
CLOCK_TIME_FORMAT,
state->datetime.hour,
state->datetime.minute,
state->datetime.second);
release_mutex((ValueMutex*)ctx, state);
canvas_set_font(canvas, FontBigNumbers);
canvas_draw_str_aligned(canvas, 64, 42 - 16, AlignCenter, AlignCenter, strings[1]);
canvas_set_font(canvas, FontSecondary);
canvas_draw_str_aligned(canvas, 64, 52 - 8, AlignCenter, AlignTop, strings[0]);
}
static void clock_state_init(ClockState* const state) {
furi_hal_rtc_get_datetime(&state->datetime);
}
// Runs every 1000ms by default
static void clock_tick(void* ctx) {
furi_assert(ctx);
FuriMessageQueue* event_queue = ctx;
PluginEvent event = {.type = EventTypeTick};
// It's OK to loose this event if system overloaded
furi_message_queue_put(event_queue, &event, 0);
}
int32_t clock_app(void* p) {
UNUSED(p);
FuriMessageQueue* event_queue = furi_message_queue_alloc(8, sizeof(PluginEvent));
ClockState* plugin_state = malloc(sizeof(ClockState));
clock_state_init(plugin_state);
ValueMutex state_mutex;
if(!init_mutex(&state_mutex, plugin_state, sizeof(ClockState))) {
FURI_LOG_E(TAG, "cannot create mutex\r\n");
furi_message_queue_free(event_queue);
free(plugin_state);
return 255;
}
// Set system callbacks
ViewPort* view_port = view_port_alloc();
view_port_draw_callback_set(view_port, clock_render_callback, &state_mutex);
view_port_input_callback_set(view_port, clock_input_callback, event_queue);
FuriTimer* timer = furi_timer_alloc(clock_tick, FuriTimerTypePeriodic, event_queue);
furi_timer_start(timer, furi_kernel_get_tick_frequency());
// Open GUI and register view_port
Gui* gui = furi_record_open(RECORD_GUI);
gui_add_view_port(gui, view_port, GuiLayerFullscreen);
// Main loop
PluginEvent event;
for(bool processing = true; processing;) {
FuriStatus event_status = furi_message_queue_get(event_queue, &event, 100);
ClockState* plugin_state = (ClockState*)acquire_mutex_block(&state_mutex);
if(event_status == FuriStatusOk) {
// press events
if(event.type == EventTypeKey) {
if(event.input.type == InputTypeShort || event.input.type == InputTypeRepeat) {
switch(event.input.key) {
case InputKeyUp:
case InputKeyDown:
case InputKeyRight:
case InputKeyLeft:
case InputKeyOk:
break;
case InputKeyBack:
// Exit the plugin
processing = false;
break;
}
}
} else if(event.type == EventTypeTick) {
furi_hal_rtc_get_datetime(&plugin_state->datetime);
}
} else {
FURI_LOG_D(TAG, "furi_message_queue: event timeout");
// event timeout
}
view_port_update(view_port);
release_mutex(&state_mutex, plugin_state);
}
furi_timer_free(timer);
view_port_enabled_set(view_port, false);
gui_remove_view_port(gui, view_port);
furi_record_close(RECORD_GUI);
view_port_free(view_port);
furi_message_queue_free(event_queue);
delete_mutex(&state_mutex);
return 0;
}

View File

@@ -31,9 +31,10 @@ void AccessorApp::run(void) {
onewire_host_stop(onewire_host);
}
AccessorApp::AccessorApp() {
AccessorApp::AccessorApp()
: text_store{0} {
notification = static_cast<NotificationApp*>(furi_record_open(RECORD_NOTIFICATION));
onewire_host = onewire_host_alloc();
onewire_host = onewire_host_alloc(&gpio_ibutton);
furi_hal_power_enable_otg();
}

View File

@@ -0,0 +1,12 @@
App(
appid="accessor",
name="Accessor",
apptype=FlipperAppType.DEBUG,
targets=["f7"],
entry_point="accessor_app",
cdefines=["APP_ACCESSOR"],
requires=["gui"],
stack_size=4 * 1024,
order=40,
fap_category="Debug",
)

View File

@@ -71,7 +71,7 @@ void WIEGAND::end() {
}
void WIEGAND::ReadD0() {
_bitCount++; // Increament bit count for Interrupt connected to D0
_bitCount++; // Increment bit count for Interrupt connected to D0
if(_bitCount > 31) // If bit count more than 31, process high bits
{
_cardTempHigh |= ((0x80000000 & _cardTemp) >> 31); // shift value to high bits
@@ -171,13 +171,10 @@ bool WIEGAND::DoWiegandConversion() {
return true;
} else {
_lastWiegand = sysTick;
_bitCount = 0;
_cardTemp = 0;
_cardTempHigh = 0;
return false;
}
// TODO: Handle validation failure case!
// TODO FL-3490: Handle validation failure case!
} else if(4 == _bitCount) {
// 4-bit Wiegand codes have no data integrity check so we just
// read the LOW nibble.

View File

@@ -0,0 +1,17 @@
App(
appid="debug_apps",
name="Basic debug apps bundle",
apptype=FlipperAppType.METAPACKAGE,
provides=[
"blink_test",
"vibro_test",
"keypad_test",
"usb_test",
"usb_mouse",
"uart_echo",
"display_test",
"text_box_test",
"file_browser_test",
"speaker_debug",
],
)

View File

@@ -0,0 +1,15 @@
App(
appid="battery_test",
name="Battery Test",
apptype=FlipperAppType.DEBUG,
entry_point="battery_test_app",
cdefines=["APP_BATTERY_TEST"],
requires=[
"gui",
"power",
],
stack_size=1 * 1024,
order=130,
fap_category="Debug",
fap_libs=["assets"],
)

View File

@@ -27,7 +27,7 @@ static void battery_test_battery_info_update_model(void* context) {
.charge = app->info.charge,
.health = app->info.health,
};
battery_info_set_data(app->batery_info, &battery_info_data);
battery_info_set_data(app->battery_info, &battery_info_data);
notification_message(app->notifications, &sequence_display_backlight_on);
}
@@ -48,13 +48,13 @@ BatteryTestApp* battery_test_alloc() {
view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
// Views
app->batery_info = battery_info_alloc();
app->battery_info = battery_info_alloc();
view_set_previous_callback(
battery_info_get_view(app->batery_info), battery_test_exit_confirm_view);
battery_info_get_view(app->battery_info), battery_test_exit_confirm_view);
view_dispatcher_add_view(
app->view_dispatcher,
BatteryTestAppViewBatteryInfo,
battery_info_get_view(app->batery_info));
battery_info_get_view(app->battery_info));
app->dialog = dialog_ex_alloc();
dialog_ex_set_header(app->dialog, "Close Battery Test?", 64, 12, AlignCenter, AlignTop);
@@ -76,7 +76,7 @@ void battery_test_free(BatteryTestApp* app) {
// Views
view_dispatcher_remove_view(app->view_dispatcher, BatteryTestAppViewBatteryInfo);
battery_info_free(app->batery_info);
battery_info_free(app->battery_info);
view_dispatcher_remove_view(app->view_dispatcher, BatteryTestAppViewExitDialog);
dialog_ex_free(app->dialog);
// View dispatcher

View File

@@ -6,14 +6,15 @@
#include <notification/notification.h>
#include <gui/modules/dialog_ex.h>
#include <power/power_settings_app/views/battery_info.h>
// FIXME
#include "../settings/power_settings_app/views/battery_info.h"
typedef struct {
Power* power;
Gui* gui;
NotificationApp* notifications;
ViewDispatcher* view_dispatcher;
BatteryInfo* batery_info;
BatteryInfo* battery_info;
DialogEx* dialog;
PowerInfo info;
} BatteryTestApp;

View File

@@ -0,0 +1,148 @@
#include "battery_info.h"
#include <furi.h>
#include <gui/elements.h>
#include <assets_icons.h>
#define LOW_CHARGE_THRESHOLD 10
#define HIGH_DRAIN_CURRENT_THRESHOLD 100
struct BatteryInfo {
View* view;
};
static void draw_stat(Canvas* canvas, int x, int y, const Icon* icon, char* val) {
canvas_draw_frame(canvas, x - 7, y + 7, 30, 13);
canvas_draw_icon(canvas, x, y, icon);
canvas_set_color(canvas, ColorWhite);
canvas_draw_box(canvas, x - 4, y + 16, 24, 6);
canvas_set_color(canvas, ColorBlack);
canvas_draw_str_aligned(canvas, x + 8, y + 22, AlignCenter, AlignBottom, val);
};
static void draw_battery(Canvas* canvas, BatteryInfoModel* data, int x, int y) {
char emote[20] = {};
char header[20] = {};
char value[20] = {};
int32_t drain_current = data->gauge_current * (-1000);
uint32_t charge_current = data->gauge_current * 1000;
// Draw battery
canvas_draw_icon(canvas, x, y, &I_BatteryBody_52x28);
if(charge_current > 0) {
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceCharging_29x14);
} else if(drain_current > HIGH_DRAIN_CURRENT_THRESHOLD) {
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceConfused_29x14);
} else if(data->charge < LOW_CHARGE_THRESHOLD) {
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceNopower_29x14);
} else {
canvas_draw_icon(canvas, x + 16, y + 7, &I_FaceNormal_29x14);
}
// Draw bubble
elements_bubble(canvas, 53, 0, 71, 39);
// Set text
if(charge_current > 0) {
snprintf(emote, sizeof(emote), "%s", "Yummy!");
snprintf(header, sizeof(header), "%s", "Charging at");
snprintf(
value,
sizeof(value),
"%lu.%luV %lumA",
(uint32_t)(data->vbus_voltage),
(uint32_t)(data->vbus_voltage * 10) % 10,
charge_current);
} else if(drain_current > 0) {
snprintf(
emote,
sizeof(emote),
"%s",
drain_current > HIGH_DRAIN_CURRENT_THRESHOLD ? "Oh no!" : "Om-nom-nom!");
snprintf(header, sizeof(header), "%s", "Consumption is");
snprintf(
value,
sizeof(value),
"%ld %s",
drain_current,
drain_current > HIGH_DRAIN_CURRENT_THRESHOLD ? "mA!" : "mA");
} else if(drain_current != 0) {
snprintf(header, 20, "...");
} else if(data->charging_voltage < 4.2) {
// Non-default battery charging limit, mention it
snprintf(emote, sizeof(emote), "Charged!");
snprintf(header, sizeof(header), "Limited to");
snprintf(
value,
sizeof(value),
"%lu.%luV",
(uint32_t)(data->charging_voltage),
(uint32_t)(data->charging_voltage * 10) % 10);
} else {
snprintf(header, sizeof(header), "Charged!");
}
canvas_draw_str_aligned(canvas, 92, y + 3, AlignCenter, AlignCenter, emote);
canvas_draw_str_aligned(canvas, 92, y + 15, AlignCenter, AlignCenter, header);
canvas_draw_str_aligned(canvas, 92, y + 27, AlignCenter, AlignCenter, value);
};
static void battery_info_draw_callback(Canvas* canvas, void* context) {
furi_assert(context);
BatteryInfoModel* model = context;
canvas_clear(canvas);
canvas_set_color(canvas, ColorBlack);
draw_battery(canvas, model, 0, 5);
char batt_level[10];
char temperature[10];
char voltage[10];
char health[10];
snprintf(batt_level, sizeof(batt_level), "%lu%%", (uint32_t)model->charge);
snprintf(temperature, sizeof(temperature), "%lu C", (uint32_t)model->gauge_temperature);
snprintf(
voltage,
sizeof(voltage),
"%lu.%01lu V",
(uint32_t)model->gauge_voltage,
(uint32_t)(model->gauge_voltage * 10) % 10UL);
snprintf(health, sizeof(health), "%d%%", model->health);
draw_stat(canvas, 8, 42, &I_Battery_16x16, batt_level);
draw_stat(canvas, 40, 42, &I_Temperature_16x16, temperature);
draw_stat(canvas, 72, 42, &I_Voltage_16x16, voltage);
draw_stat(canvas, 104, 42, &I_Health_16x16, health);
}
BatteryInfo* battery_info_alloc() {
BatteryInfo* battery_info = malloc(sizeof(BatteryInfo));
battery_info->view = view_alloc();
view_set_context(battery_info->view, battery_info);
view_allocate_model(battery_info->view, ViewModelTypeLocking, sizeof(BatteryInfoModel));
view_set_draw_callback(battery_info->view, battery_info_draw_callback);
return battery_info;
}
void battery_info_free(BatteryInfo* battery_info) {
furi_assert(battery_info);
view_free(battery_info->view);
free(battery_info);
}
View* battery_info_get_view(BatteryInfo* battery_info) {
furi_assert(battery_info);
return battery_info->view;
}
void battery_info_set_data(BatteryInfo* battery_info, BatteryInfoModel* data) {
furi_assert(battery_info);
furi_assert(data);
with_view_model(
battery_info->view,
BatteryInfoModel * model,
{ memcpy(model, data, sizeof(BatteryInfoModel)); },
true);
}

View File

@@ -0,0 +1,23 @@
#pragma once
#include <gui/view.h>
typedef struct BatteryInfo BatteryInfo;
typedef struct {
float vbus_voltage;
float gauge_voltage;
float gauge_current;
float gauge_temperature;
float charging_voltage;
uint8_t charge;
uint8_t health;
} BatteryInfoModel;
BatteryInfo* battery_info_alloc();
void battery_info_free(BatteryInfo* battery_info);
View* battery_info_get_view(BatteryInfo* battery_info);
void battery_info_set_data(BatteryInfo* battery_info, BatteryInfoModel* data);

View File

@@ -0,0 +1,11 @@
App(
appid="blink_test",
name="Blink Test",
apptype=FlipperAppType.DEBUG,
entry_point="blink_test_app",
cdefines=["APP_BLINK"],
requires=["gui"],
stack_size=1 * 1024,
order=10,
fap_category="Debug",
)

View File

@@ -0,0 +1,18 @@
App(
appid="bt_debug",
name="Bluetooth Debug",
apptype=FlipperAppType.DEBUG,
entry_point="bt_debug_app",
cdefines=["SRV_BT"],
requires=[
"bt",
"gui",
"dialogs",
],
provides=[
"bt_debug",
],
stack_size=1 * 1024,
order=110,
fap_category="Debug",
)

View File

@@ -31,9 +31,6 @@ uint32_t bt_debug_start_view(void* context) {
BtDebugApp* bt_debug_app_alloc() {
BtDebugApp* app = malloc(sizeof(BtDebugApp));
// Load settings
bt_settings_load(&app->settings);
// Gui
app->gui = furi_record_open(RECORD_GUI);
@@ -98,20 +95,22 @@ void bt_debug_app_free(BtDebugApp* app) {
int32_t bt_debug_app(void* p) {
UNUSED(p);
if(!furi_hal_bt_is_testing_supported()) {
FURI_LOG_E(TAG, "Incorrect radio stack: radio testing fetures are absent.");
FURI_LOG_E(TAG, "Incorrect radio stack: radio testing features are absent.");
DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
dialog_message_show_storage_error(dialogs, "Incorrect\nRadioStack");
return 255;
}
BtDebugApp* app = bt_debug_app_alloc();
// Was bt active?
const bool was_active = furi_hal_bt_is_active();
// Stop advertising
furi_hal_bt_stop_advertising();
view_dispatcher_run(app->view_dispatcher);
// Restart advertising
if(app->settings.enabled) {
if(was_active) {
furi_hal_bt_start_advertising();
}
bt_debug_app_free(app);

View File

@@ -4,15 +4,14 @@
#include <gui/gui.h>
#include <gui/view.h>
#include <gui/view_dispatcher.h>
#include <gui/modules/submenu.h>
#include <dialogs/dialogs.h>
#include <gui/modules/submenu.h>
#include "views/bt_carrier_test.h"
#include "views/bt_packet_test.h"
#include "../bt_settings.h"
typedef struct {
BtSettings settings;
Gui* gui;
ViewDispatcher* view_dispatcher;
Submenu* submenu;

Some files were not shown because too many files have changed in this diff Show More