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

Compare commits

...

849 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
3169 changed files with 84877 additions and 235338 deletions

View File

@@ -92,6 +92,13 @@ Min level: 1
Max level: 3 Max level: 3
Weight: 4 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 Name: L2_Wake_up_128x64
Min butthurt: 0 Min butthurt: 0
Max butthurt: 12 Max butthurt: 12
@@ -120,6 +127,13 @@ Min level: 2
Max level: 2 Max level: 2
Weight: 3 Weight: 3
Name: L2_Dj_128x64
Min butthurt: 0
Max butthurt: 8
Min level: 2
Max level: 3
Weight: 4
Name: L3_Furippa3_128x64 Name: L3_Furippa3_128x64
Min butthurt: 0 Min butthurt: 0
Max butthurt: 6 Max butthurt: 6
@@ -147,3 +161,17 @@ Max butthurt: 5
Min level: 1 Min level: 1
Max level: 3 Max level: 3
Weight: 4 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

@@ -15,23 +15,47 @@ steps:
- git submodule foreach git config --local gc.auto 0 - git submodule foreach git config --local gc.auto 0
- git log -1 --format='%H' - git log -1 --format='%H'
- name: "Build firmware" - 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 image: hfdj/fztools
pull: never pull: never
commands: commands:
- export DIST_SUFFIX=${DRONE_TAG} - export DIST_SUFFIX=${DRONE_TAG}
- export WORKFLOW_BRANCH_OR_TAG=release-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 - ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-default - mkdir artifacts-default
- mv dist/f7-C/* artifacts-default/ - mv dist/f7-C/* artifacts-default/
- ls -laS artifacts-default - ls -laS artifacts-default
- ls -laS artifacts-default/f7-update-${DRONE_TAG} - ls -laS artifacts-default/f7-update-${DRONE_TAG}
- 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 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 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: environment:
FBT_TOOLS_CUSTOM_LINK: FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link from_secret: fbt_link
@@ -40,12 +64,14 @@ steps:
image: hfdj/fztools image: hfdj/fztools
pull: never pull: never
commands: commands:
- git clone https://github.com/xMasterX/all-the-plugins.git - wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-extra.tgz
- cp -R all-the-plugins/apps/* assets/resources/apps/ - tar zxvf all-the-apps-extra.tgz
- rm -rf all-the-plugins - 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 DIST_SUFFIX=${DRONE_TAG}e
- export WORKFLOW_BRANCH_OR_TAG=release-cfw - export WORKFLOW_BRANCH_OR_TAG=release-cfw
- export FORCE_NO_DIRTY=yes - export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.* - rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package - ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-extra-apps - mkdir artifacts-extra-apps
@@ -56,22 +82,62 @@ steps:
FBT_TOOLS_CUSTOM_LINK: FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_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" - name: "Build with ofw anims"
image: hfdj/fztools image: hfdj/fztools
pull: never pull: never
commands: commands:
- git clean -df
- git checkout -- .
- rm -f assets/dolphin/external/manifest.txt - rm -f assets/dolphin/external/manifest.txt
- cp .ci_files/anims_ofw.txt assets/dolphin/external/manifest.txt - cp .ci_files/anims_ofw.txt assets/dolphin/external/manifest.txt
- rm -rf assets/resources/apps/ - rm -rf applications/main/clock_app/resources/apps/
- export DIST_SUFFIX=${DRONE_TAG}n - export DIST_SUFFIX=${DRONE_TAG}n
- export WORKFLOW_BRANCH_OR_TAG=no-custom-anims - export WORKFLOW_BRANCH_OR_TAG=no-custom-anims
- export FORCE_NO_DIRTY=yes - 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.* - rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package - ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-ofw-anims - mkdir artifacts-ofw-anims
- mv dist/f7-C/* artifacts-ofw-anims/ - mv dist/f7-C/* artifacts-ofw-anims/
- ls -laS artifacts-ofw-anims - ls -laS artifacts-ofw-anims
- ls -laS artifacts-ofw-anims/f7-update-${DRONE_TAG}n - 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: environment:
FBT_TOOLS_CUSTOM_LINK: FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_link from_secret: fbt_link
@@ -80,16 +146,24 @@ steps:
image: kramos/alpine-zip image: kramos/alpine-zip
commands: commands:
- cp artifacts-extra-apps/flipper-z-f7-update-${DRONE_TAG}e.tgz . - 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-ofw-anims/flipper-z-f7-update-${DRONE_TAG}n.tgz .
- cp artifacts-default/flipper-z-f7-update-${DRONE_TAG}.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-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-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} - 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 - tar czpf artifacts-default/flipper-z-any-scripts-${DRONE_TAG}.tgz scripts
- rm -rf artifacts-extra-apps/f7-update-${DRONE_TAG} - 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-ofw-anims/f7-update-${DRONE_TAG}
- rm -rf artifacts-default/f7-update-${DRONE_TAG} - rm -rf artifacts-default/f7-update-${DRONE_TAG}
- ls -laS artifacts-extra-apps - ls -laS artifacts-extra-apps
- ls -laS artifacts-rgb-patch
- ls -laS artifacts-clean
- ls -laS artifacts-ofw-anims - ls -laS artifacts-ofw-anims
- ls -laS artifacts-default - ls -laS artifacts-default
- mv artifacts-default/ ${DRONE_TAG} - mv artifacts-default/ ${DRONE_TAG}
@@ -146,6 +220,36 @@ steps:
from_secret: dep_target_extra from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_TAG}e.tgz 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" - name: "Do Github release"
image: ddplugins/github-release image: ddplugins/github-release
pull: never pull: never
@@ -160,6 +264,8 @@ steps:
- ${DRONE_TAG}/*.zip - ${DRONE_TAG}/*.zip
- artifacts-ofw-anims/*.tgz - artifacts-ofw-anims/*.tgz
- artifacts-extra-apps/*.tgz - artifacts-extra-apps/*.tgz
- artifacts-rgb-patch/*.tgz
- artifacts-clean/*.tgz
title: ${DRONE_TAG} title: ${DRONE_TAG}
note: CHANGELOG.md note: CHANGELOG.md
checksum: checksum:
@@ -201,16 +307,25 @@ steps:
[-How to install firmware-](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md) [-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/archive/refs/heads/main.zip) [-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}) [-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 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 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)" [-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: document:
- ${DRONE_TAG}/flipper-z-f7-update-${DRONE_TAG}.tgz - ${DRONE_TAG}/flipper-z-f7-update-${DRONE_TAG}.tgz
@@ -223,7 +338,19 @@ steps:
commands: commands:
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh" - wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
- chmod +x ./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/archive/refs/heads/main.zip)\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 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 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)' - ./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:
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
- name: "Send extra pack build to telegram" - name: "Send extra pack build to telegram"
image: appleboy/drone-telegram image: appleboy/drone-telegram
@@ -262,12 +389,43 @@ steps:
- git submodule foreach git config --local gc.auto 0 - git submodule foreach git config --local gc.auto 0
- git log -1 --format='%H' - git log -1 --format='%H'
- name: "Build dev FW" - 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 image: hfdj/fztools
pull: never pull: never
commands: commands:
- export DIST_SUFFIX=${DRONE_BUILD_NUMBER} - export DIST_SUFFIX=${DRONE_BUILD_NUMBER}
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw - 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 - ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-default - mkdir artifacts-default
- mv dist/f7-C/* artifacts-default/ - mv dist/f7-C/* artifacts-default/
@@ -281,12 +439,14 @@ steps:
image: hfdj/fztools image: hfdj/fztools
pull: never pull: never
commands: commands:
- git clone --branch dev https://github.com/xMasterX/all-the-plugins.git - wget https://github.com/xMasterX/all-the-plugins/releases/latest/download/all-the-apps-extra.tgz
- cp -R all-the-plugins/apps/* assets/resources/apps/ - tar zxvf all-the-apps-extra.tgz
- rm -rf all-the-plugins - 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 DIST_SUFFIX=${DRONE_BUILD_NUMBER}e
- export WORKFLOW_BRANCH_OR_TAG=dev-cfw - export WORKFLOW_BRANCH_OR_TAG=dev-cfw
- export FORCE_NO_DIRTY=yes - export FORCE_NO_DIRTY=yes
- export FBT_GIT_SUBMODULE_SHALLOW=1
- rm -f build/f7-firmware-C/toolbox/version.* - rm -f build/f7-firmware-C/toolbox/version.*
- ./fbt COMPACT=1 DEBUG=0 updater_package - ./fbt COMPACT=1 DEBUG=0 updater_package
- mkdir artifacts-extra-apps - mkdir artifacts-extra-apps
@@ -297,10 +457,31 @@ steps:
FBT_TOOLS_CUSTOM_LINK: FBT_TOOLS_CUSTOM_LINK:
from_secret: fbt_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" - name: "Bundle self-update packages"
image: kramos/alpine-zip image: kramos/alpine-zip
commands: commands:
- cp artifacts-extra-apps/flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz . - 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 . - cp artifacts-default/flipper-z-f7-update-${DRONE_BUILD_NUMBER}.tgz .
- rm -rf artifacts-default/f7-update-${DRONE_BUILD_NUMBER} - rm -rf artifacts-default/f7-update-${DRONE_BUILD_NUMBER}
- ls -laS artifacts-default - ls -laS artifacts-default
@@ -358,6 +539,36 @@ steps:
from_secret: dep_target_extra from_secret: dep_target_extra
source: flipper-z-f7-update-${DRONE_BUILD_NUMBER}e.tgz 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" - name: "Trigger update server reindex"
image: hfdj/fztools image: hfdj/fztools
pull: never pull: never
@@ -392,7 +603,16 @@ steps:
[-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}) [-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 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)" [-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" - name: "Send build to telegram"
image: appleboy/drone-telegram image: appleboy/drone-telegram
@@ -406,6 +626,18 @@ steps:
document: document:
- dev/flipper-z-f7-update-${DRONE_BUILD_NUMBER}.tgz - 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" - name: "Send extra pack build to telegram"
image: appleboy/drone-telegram image: appleboy/drone-telegram
settings: settings:
@@ -427,7 +659,7 @@ steps:
commands: commands:
- wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh" - wget "https://raw.githubusercontent.com/fieu/discord.sh/e1dc1a7595efad2cad8f072f0b3531c470f5b7c8/discord.sh"
- chmod +x ./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[-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}')' - ./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: trigger:
branch: branch:

2
.github/CODEOWNERS vendored
View File

@@ -2,4 +2,4 @@
* @xMasterX * @xMasterX
# Assets # Assets
/assets/resources/infrared/ @xMasterX @amec0e /assets/resources/infrared/assets/ @amec0e @Leptopt1los @xMasterX

1
.github/FUNDING.yml vendored
View File

@@ -1,3 +1,4 @@
patreon: mmxdev
custom: custom:
[ [
"https://boosty.to/mmxdev", "https://boosty.to/mmxdev",

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

5
.gitignore vendored
View File

@@ -47,6 +47,11 @@ null.d
# bundle output # bundle output
/dist /dist
/artifacts-default
/artifacts-ofw-anims
/artifacts-rgb-patch
/artifacts-extra-apps
/artifacts-clean
# SCons build dir # SCons build dir
/build /build

11
.gitmodules vendored
View File

@@ -10,6 +10,7 @@
[submodule "assets/protobuf"] [submodule "assets/protobuf"]
path = assets/protobuf path = assets/protobuf
url = https://github.com/flipperdevices/flipperzero-protobuf.git url = https://github.com/flipperdevices/flipperzero-protobuf.git
shallow = false
[submodule "lib/libusb_stm32"] [submodule "lib/libusb_stm32"]
path = lib/libusb_stm32 path = lib/libusb_stm32
url = https://github.com/flipperdevices/libusb_stm32.git url = https://github.com/flipperdevices/libusb_stm32.git
@@ -25,12 +26,6 @@
[submodule "lib/cxxheaderparser"] [submodule "lib/cxxheaderparser"]
path = lib/cxxheaderparser path = lib/cxxheaderparser
url = https://github.com/robotpy/cxxheaderparser.git url = https://github.com/robotpy/cxxheaderparser.git
[submodule "applications/external/dap_link/lib/free-dap"]
path = applications/external/dap_link/lib/free-dap
url = https://github.com/ataradov/free-dap.git
[submodule "applications/external/subbrute"]
path = applications/external/subbrute
url = https://github.com/DarkFlippers/flipperzero-subbrute.git
[submodule "lib/heatshrink"] [submodule "lib/heatshrink"]
path = lib/heatshrink path = lib/heatshrink
url = https://github.com/flipperdevices/heatshrink.git url = https://github.com/flipperdevices/heatshrink.git
@@ -43,3 +38,7 @@
[submodule "lib/stm32wb_copro"] [submodule "lib/stm32wb_copro"]
path = lib/stm32wb_copro path = lib/stm32wb_copro
url = https://github.com/flipperdevices/stm32wb_copro.git 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 +1 @@
--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/ST25RFAL002 -e lib/stm32wb_cmsis -e lib/stm32wb_copro -e lib/stm32wb_hal -e lib/u8g2 -e lib/nanopb -e */arm-none-eabi/* -e applications/external/dap_link/lib/free-dap --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 /c_cpp_properties.json
./launch.json /extensions.json
./settings.json /launch.json
./tasks.json /settings.json
/tasks.json

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,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

@@ -21,5 +21,10 @@
"SConscript": "python", "SConscript": "python",
"SConstruct": "python", "SConstruct": "python",
"*.fam": "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,40 +4,40 @@
"version": "2.0.0", "version": "2.0.0",
"tasks": [ "tasks": [
{ {
"label": "[Release] Build", "label": "[Release] Build Firmware",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0" "command": "./fbt COMPACT=1 DEBUG=0"
}, },
{ {
"label": "[Debug] Build", "label": "[Debug] Build Firmware",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack" "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", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 FORCE=1 flash" "command": "./fbt COMPACT=1 DEBUG=0 FORCE=1 flash"
}, },
{ {
"label": "[Debug] Flash (ST-Link)", "label": "[Debug] Flash (SWD)",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack FORCE=1 flash" "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 FIRMWARE_APP_SET=debug_pack FORCE=1 flash_blackmagic"
}, },
{ {
"label": "[Release] Flash (JLink)", "label": "[Release] Flash (JLink)",
@@ -49,7 +49,7 @@
"label": "[Debug] Flash (JLink)", "label": "[Debug] Flash (JLink)",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack FORCE=1 jflash" "command": "./fbt FORCE=1 jflash"
}, },
{ {
"label": "[Release] Build update bundle", "label": "[Release] Build update bundle",
@@ -61,7 +61,7 @@
"label": "[Debug] Build update bundle", "label": "[Debug] Build update bundle",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack updater_package" "command": "./fbt updater_package"
}, },
{ {
"label": "[Release] Build updater", "label": "[Release] Build updater",
@@ -73,13 +73,13 @@
"label": "[Debug] Build updater", "label": "[Debug] Build updater",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack updater_all" "command": "./fbt updater_all"
}, },
{ {
"label": "[Debug] Flash (USB, w/o resources)", "label": "[Debug] Flash (USB, w/o resources)",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack FORCE=1 flash_usb" "command": "./fbt FORCE=1 flash_usb"
}, },
{ {
"label": "[Release] Flash (USB, w/o resources)", "label": "[Release] Flash (USB, w/o resources)",
@@ -97,7 +97,7 @@
"label": "[Debug] Flash (USB, with resources)", "label": "[Debug] Flash (USB, with resources)",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt FIRMWARE_APP_SET=debug_pack FORCE=1 flash_usb_full" "command": "./fbt FORCE=1 flash_usb_full"
}, },
{ {
"label": "[Release] Flash (USB, with resources)", "label": "[Release] Flash (USB, with resources)",
@@ -123,17 +123,29 @@
"type": "shell", "type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 fap_dist" "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", "label": "[Debug] Launch App on Flipper",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt launch_app APPSRC=${relativeFileDirname}" "command": "./fbt launch APPSRC=${relativeFileDirname}"
}, },
{ {
"label": "[Release] Launch App on Flipper", "label": "[Release] Launch App on Flipper",
"group": "build", "group": "build",
"type": "shell", "type": "shell",
"command": "./fbt COMPACT=1 DEBUG=0 launch_app APPSRC=${relativeFileDirname}" "command": "./fbt COMPACT=1 DEBUG=0 launch APPSRC=${relativeFileDirname}"
}, },
{ {
"label": "[Debug] Launch App on Flipper with Serial Console", "label": "[Debug] Launch App on Flipper with Serial Console",

View File

@@ -1,19 +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",
"rioj7.command-variable"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
"twxs.cmake",
"ms-vscode.cmake-tools"
]
}

View File

@@ -1,65 +1,62 @@
### New changes ## New changes
* If you have copied any apps manually into `apps` folder - remove `apps` folder or that specific apps you copied on your microSD before installing this release to avoid issues due to OFW API version update! If you using regular builds or extra pack builds (e) without your manually added apps, all included apps will be installed automatically, no extra actions needed! * SubGHz: Add 4 more systems to Add Manually (untested!)
----- * SubGHz: Add Manually fixes
* SubGHz Remote: Fixed BinRAW support, + many other fixes (by @gid9798 | PR #492) * SubGHz: Added NiceFlor-S to ignore options, removed colons. (by @G2Dolphin | PR #620)
* SubGHz: Fix KL: Stilmatic support + add manually support * Misc code cleanup
* SubGHz: Keeloq mfname refactoring (by @gid9798 | PR #479) * RGB: Fix white color on reboot, move settings, add custom color option
* Desktop Clock: Some improvements and fixes (by @gid9798 | PR #490) * **BLE Spam app** updated to latest version (Android, Windows support) (by @Willy-JL) -> (app can be found in builds ` `, `e`, `n`, `r`)
* LF RFID: Cleanup duplicated code (by @gid9798 | PR #493) * OFW: Fix double arrows and add proper indication
* NFC V: Code review fixes + some GUI rework (by @nvx & @xMasterX) * OFW: SubGHz: add manually fix 12-bits is 0xFFF (or 0xFF0) CAME/NICE 12-bit
* NFC V: Fixed crash when exiting emulation and starting it again * OFW: Fix various crashes if debug libraries used
* Infrared: Use Universal AC Remote from OFW, same for Audio remote, and rename buttons in OFW naming scheme
* Infrared: Update universal remote assets (by @amec0e)
* GUI Keyboard: Fix crash when renaming files with long file name (Fixed issue #489)
* Misc: Fix APP_IDs to match new regex (regex check will be added in OFW soon)
* Plugins: Protoview, WAV Player, DTMF Dolphin - fixed all known crashes, ported to latest hal bus system
* Plugins: ESP8266 Deauther - Crash fix (Fixed issue #497)
* Plugins: Update -> Mifare Nested [(by AloneLiberty)](https://github.com/AloneLiberty/FlipperNested)
* Plugins: Update -> TOTP (Authenticator) [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator)
* Plugins: Update -> ESP32: WiFi Marauder companion plugin [(by 0xchocolate)](https://github.com/0xchocolate/flipperzero-wifi-marauder)
* Plugins: Update -> UART Terminal [(by cool4uma)](https://github.com/cool4uma/UART_Terminal/tree/main)
* OFW: FuriHal: disable bus re-initialization on early init and extra asserts for AHB1,AHB2,AHB3 which must be left intact on entering to FUS -> **Fixes updater error 1-100**
* OFW: NFC: fix MFC timings -> **Fixes issues with Mifare Classic emulation that could happen after unlshd-049 release**
* OFW: Update dolphin.py
* OFW: NFC Magic: Fix gen1 writing with invalid BCC (lost fix from PR 2511)
* OFW: SubGhz: fix flipper crashes after exiting broadcast blocking message and crash cli
* OFW: Dolphin: new animation
* OFW: fbt: added hooks for build & dist environments; added FW_ORIGIN_* macro for apps & SDK
* OFW: FuriHal: add bus abstraction -> **Breaking API change, API version was changed from 27.x to 28.x**
* OFW: Implement support for reading Opal card (Sydney, Australia)
* OFW: BadUSB: script execution pause
* OFW: IR Universal AC: Add Carrier 42QHB12D8S
#### [🎲 Download latest extra apps pack](https://github.com/xMasterX/all-the-plugins/archive/refs/heads/main.zip) ----
[-> How to install firmware](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md) [-> How to install firmware](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToInstall.md)
[-> Download qFlipper (official link)](https://flipperzero.one/update) [-> Download qFlipper (official link)](https://flipperzero.one/update)
## Please support development of the project ## Please support development of the project
* **Boosty** (patreon alternative): https://boosty.to/mmxdev |Service|Remark|Link/Wallet|
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 |-|-|-|
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 |**Patreon**||https://patreon.com/mmxdev|
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs` |**Boosty**|patreon alternative|https://boosty.to/mmxdev|
* BCH: `qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3` |cloudtips|only RU payments accepted|https://pay.cloudtips.ru/p/7b3e9d65|
* ETH/BSC/ERC20-Tokens: `darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`) |YooMoney|only RU payments accepted|https://yoomoney.ru/fundraise/XA49mgQLPA0.221209|
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9` |USDT|(TRC20)|`TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`|
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv` |BCH||`qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`|
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9` |ETH|(BSC/ERC20-Tokens)|`darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)|
* XMR (Monero): `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn` |BTC||`bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`|
* TON: `EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf` |DOGE||`D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`|
|LTC||`ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`|
|XMR|(Monero)| `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`|
|TON||`EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`|
### Thanks to our sponsors: #### Thanks to our sponsors:
callmezimbra, Quen0n, MERRON, grvpvl (lvpvrg), art_col, ThurstonWaffles, Moneron, UterGrooll, LUCFER, Northpirate, zloepuzo, T.Rat, Alexey B., ionelife, ... 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! and all other great people who supported our project and me (xMasterX), thanks to you all!
**Note: To avoid issues with .dfu, prefer installing using .tgz with qFlipper, web updater or by self update package, all needed assets will be installed**
**Recommended option - Web Updater** ## **Recommended update option - Web Updater**
What means `n` or `e` in - `flipper-z-f7-update-(version)(n / e).tgz` ? - `n` means this build comes without our custom animations, only official flipper animations, ### What `n`, `r`, `e`, ` `, `c` means? What I need to download if I don't want to use Web updater?
`e` means build has extra apps pack preinstalled 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`
Self-update package (update from microSD) - `flipper-z-f7-update-(version).zip` or download `.tgz` for mobile app / qFlipper

View File

@@ -48,7 +48,7 @@ Almost everything in flipper firmware is built around this concept.
# C coding style # C coding style
- Tab is 4 spaces - 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 ## Naming

284
ReadMe.md
View File

@@ -3,27 +3,38 @@
<img src="https://user-images.githubusercontent.com/10697207/186202043-26947e28-b1cc-459a-8f20-ffcc7fc0c71c.png" align="center" alt="fzCUSTOM" border="0"> <img src="https://user-images.githubusercontent.com/10697207/186202043-26947e28-b1cc-459a-8f20-ffcc7fc0c71c.png" align="center" alt="fzCUSTOM" border="0">
</a> </a>
</h3> </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 the Flipper Zero Unleashed Firmware repo! ### Welcome to the Flipper Zero Unleashed Firmware repo!
**This firmware is a fork from** [flipperdevices/flipperzero-firmware](https://github.com/flipperdevices/flipperzero-firmware) #### **This firmware is a fork from** [flipperdevices/flipperzero-firmware](https://github.com/flipperdevices/flipperzero-firmware)
<br> <br>
Most stable custom firmware focused on new features and improvements of original firmware components, with almost no UI changes ### Most stable custom firmware focused on new features and improvements of original firmware components, with almost no UI changes
<br> <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 is in no way related to the official devs. ##### 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>
Our Discord Community:
<br>
<a href="https://discord.unleashedflip.com"><img src="https://discordapp.com/api/guilds/937479784148115456/widget.png?style=banner4" alt="Unofficial Discord Community" target="_blank"></a>
<br> ## FAQ (frequently asked questions)
<br> [Follow this link to find answers to most asked questions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/FAQ.md)
<br>
## Dev builds (unstable) ## Dev builds (unstable)
- https://dev.unleashedflip.com/ - https://dev.unleashedflip.com/
@@ -32,43 +43,59 @@ Our Discord Community:
- https://t.me/unleashed_fw - https://t.me/unleashed_fw
# What's changed # What's changed
* Sub-GHz regional TX restrictions removed - **Sub-GHz** *lib & hal*
* Sub-GHz frequency range can be extended in settings file (Warning: It can damage Flipper's hardware) - Regional TX restrictions removed
* Many rolling code protocols now have the ability to save & send captured signals - Extra Sub-GHz frequencies
* FAAC SLH (Spa) & BFT Mitto (keeloq secure with seed) manual creation - Frequency range can be extended in settings file (Warning: It can damage Flipper's hardware)
* Sub-GHz static code brute-force plugin - 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
* LFRFID Fuzzer plugin - FAAC SLH (Spa) & BFT Mitto (keeloq secure with seed) manual creation
* Custom community plugins and games added + all known working apps can be downloaded in extra pack in every release - External CC1101 module support [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307)
* Extra Sub-GHz frequencies + extra Mifare Classic keys - **Sub-GHz** *Main App*
* Picopass/iClass plugin included in releases - Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
* Recompiled IR TV Universal Remote for ALL buttons - New frequency analyzer [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43)
* Universal remote for Projectors, Fans, A/Cs and Audio(soundbars, etc.) - Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77)
* Customizable Flipper name **Update! Now can be changed in Settings->Desktop** (by @xMasterX and @Willy-JL) - Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79)
* Text Input UI element -> Cursor feature (by @Willy-JL) - New option to use timestamps + protocol name when you saving file, instead of random name - Enable in `Radio Settings -> Time in names = ON`
- **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) - Read mode UI improvements (shows time when signal was received) (by @wosk)
- BadUSB -> Keyboard layouts [(by rien > dummy-decoy)](https://github.com/dummy-decoy/flipperzero-firmware/tree/dummy_decoy/bad_usb_keyboard_layout) - External CC1101 module support (Hardware SPI used)
- Sub-GHz -> External CC1101 module support - [(by quen0n)](https://github.com/DarkFlippers/unleashed-firmware/pull/307) - **Hold right in received signal list to delete selected signal**
- Sub-GHz -> `Add manually` menu extended with new protocols - **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
- Sub-GHz -> New frequency analyzer - [(by ClusterM)](https://github.com/DarkFlippers/unleashed-firmware/pull/43) - `Add manually` menu extended with new protocols
- Sub-GHz -> Save last used frequency [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - 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)
- Sub-GHz -> Press OK in frequency analyzer to use detected frequency in Read modes [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/77) - Debug mode counter increase settings (+1 -> +5, +10, default: +1)
- Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu [(by derskythe)](https://github.com/DarkFlippers/unleashed-firmware/pull/79) - Debug PIN output settings for protocol development
- 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)
* Sub-GHz -> Short press OK in frequency analyzer to save detected frequency for usage in Read modes - **Sub-GHz apps** *by unleashed team*
* Sub-GHz -> Long press OK button in Sub-GHz Frequency analyzer to switch to Read menu and automatically use selected frequency - Sub-GHz Bruteforce - static code brute-force plugin |
* SubGHz -> New option to use timestamps + protocol name when you saving file, instead of random name - Enable in `Radio Settings -> Time in names = ON` - 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
* SubGHz -> Read mode UI improvements (scrolling text, + shows time when signal was received) (by @wosk) - Load your own file and select bytes you want to bruteforce or use preconfigured options in protocols list
* Sub-GHz -> External CC1101 module support (Hardware SPI used) - Sub-GHz Remote - remote control for 5 sub-ghz files | bind one file for each button
* SubGHz -> **Hold right in received signal list to delete selected signal** - use the built-in constructor or make config file by following this [instruction](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md)
* SubGHz -> **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 - **Infrared**
* SubGHz -> 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) - Recompiled IR TV Universal Remote for ALL buttons
* SubGHz -> Debug mode counter increase settings (+1 -> +5, +10, default: +1) - Universal remotes for Projectors, Fans, A/Cs and Audio(soundbars, etc.) -> Also always updated and verified by our team
* SubGHz -> Debug PIN output settings for protocol development - Infrared -> `RCA` Protocol
* Infrared -> Debug TX PIN output settings - Infrared -> Debug TX PIN output settings
* Other small fixes and changes throughout - **NFC/RFID/iButton**
* See other changes in readme below * 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
Also check the 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 Sub-GHz protocols list: ### 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. Thanks to Official team (to their SubGHz Developer, Skorp) for implementing decoders for these protocols in OFW.
@@ -77,7 +104,7 @@ Keeloq [Not ALL systems supported for decode or emulation yet!] - [Supported man
Encoders or sending made by @xMasterX: Encoders or sending made by @xMasterX:
- Nero Radio 57bit (+ 56bit encoder improvements) - Nero Radio 57bit (+ 56bit encoder improvements)
- CAME 12bit/24bit encoder fixes (already merged in OFW) - CAME 12bit/24bit encoder fixes (Fixes now merged in OFW)
- Keeloq: HCS101 - Keeloq: HCS101
- Keeloq: AN-Motors - Keeloq: AN-Motors
- Keeloq: JCM Tech - Keeloq: JCM Tech
@@ -91,12 +118,13 @@ Encoders or sending made by @xMasterX:
- Keeloq: Stilmatic - Keeloq: Stilmatic
- Keeloq: CAME Space - Keeloq: CAME Space
- Keeloq: Aprimatic (model TR and similar) - 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): 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) - 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) - Nice Flor S -> How to create new remote - [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- FAAC SLH (Spa) [External seed calculation required (For info contact me in Discord: Nano#8998)] - FAAC SLH (Spa) -> Update!!! Check out new [instructions](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemoteProg.md)
- Keeloq: BFT Mitto [External seed calculation required (For info contact me in Discord: Nano#8998)] -> 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 - Star Line
- Security+ v1 & v2 (encoders was made in OFW) - Security+ v1 & v2 (encoders was made in OFW)
@@ -111,139 +139,109 @@ Encoders made by @assasinfil & @xMasterX:
The majority of this project is developed and maintained by me, @xMasterX. 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. 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. 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.
- @assasinfil - SubGHz - @gid9798 - SubGHz, Plugins, many other things
- @assasinfil - SubGHz protocols
- @Svaarich - UI design and animations - @Svaarich - UI design and animations
- @Amec0e - Infrared assets - @amec0e & @Leptopt1los - Infrared assets
- Community moderators in Telegram, Discord, and Reddit - 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. - And of course our GitHub community. Your PRs are a very important part of this firmware and open-source development.
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. 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. 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: You can support us by using links or addresses below:
* **Boosty** (patreon alternative): https://boosty.to/mmxdev |Service|Remark|Link/Wallet|
* cloudtips (only RU payments accepted): https://pay.cloudtips.ru/p/7b3e9d65 |-|-|-|
* YooMoney (only RU payments accepted): https://yoomoney.ru/fundraise/XA49mgQLPA0.221209 |**Patreon**||https://patreon.com/mmxdev|
* USDT(TRC20): `TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs` |**Boosty**|patreon alternative|https://boosty.to/mmxdev|
* BCH: `qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3` |cloudtips|only RU payments accepted|https://pay.cloudtips.ru/p/7b3e9d65|
* ETH/BSC/ERC20-Tokens: `darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`) |YooMoney|only RU payments accepted|https://yoomoney.ru/fundraise/XA49mgQLPA0.221209|
* BTC: `bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9` |USDT|(TRC20)|`TSXcitMSnWXUFqiUfEXrTVpVewXy2cYhrs`|
* DOGE: `D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv` |BCH||`qquxfyzntuqufy2dx0hrfr4sndp0tucvky4sw8qyu3`|
* LTC: `ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9` |ETH|(BSC/ERC20-Tokens)|`darkflippers.eth` (or `0xFebF1bBc8229418FF2408C07AF6Afa49152fEc6a`)|
* XMR (Monero): `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn` |BTC||`bc1q0np836jk9jwr4dd7p6qv66d04vamtqkxrecck9`|
* TON: `EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf` |DOGE||`D6R6gYgBn5LwTNmPyvAQR6bZ9EtGgFCpvv`|
|LTC||`ltc1q3ex4ejkl0xpx3znwrmth4lyuadr5qgv8tmq8z9`|
|XMR|(Monero)| `41xUz92suUu1u5Mu4qkrcs52gtfpu9rnZRdBpCJ244KRHf6xXSvVFevdf2cnjS7RAeYr5hn9MsEfxKoFDRSctFjG5fv1Mhn`|
|TON||`EQCOqcnYkvzOZUV_9bPE_8oTbOrOF03MnF-VcJyjisTZmpGf`|
### Community apps included: ## Community apps included
- **RFID Fuzzer** [(by Ganapati & @xMasterX)](https://github.com/DarkFlippers/unleashed-firmware/pull/54) & New protocols by @mvanzanten ### [🎲 Download Extra plugins for Unleashed](https://github.com/xMasterX/all-the-plugins/releases/latest)
- **Sub-GHz bruteforcer** [(by @derskythe & xMasterX)](https://github.com/derskythe/flipperzero-subbrute) [(original by Ganapati & xMasterX)](https://github.com/DarkFlippers/unleashed-firmware/pull/57) ### [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)
- **Sub-GHz playlist** [(by darmiel)](https://github.com/DarkFlippers/unleashed-firmware/pull/62)
- 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 [(OFW: DrZlo13)](https://github.com/flipperdevices/flipperzero-firmware/tree/zlo/wav-player) - Fixed and improved by [LTVA1](https://github.com/LTVA1/wav_player) -> Also outputs audio on `PA6` - `3(A6)` pin
- Barcode generator plugin [(original by McAzzaMan)](https://github.com/McAzzaMan/flipperzero-firmware/tree/UPC-A_Barcode_Generator/applications/barcode_generator) - [EAN-8 and refactoring](https://github.com/DarkFlippers/unleashed-firmware/pull/154) by @msvsergey
- 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-wifi-marauder) - Saving .pcap on flipper microSD [by tcpassos](https://github.com/tcpassos/flipperzero-firmware-with-wifi-marauder-companion) -> Only with custom marauder build (It is necessary to uncomment "#define WRITE_PACKETS_SERIAL" in configs.h (in marauder fw) and compile the firmware for the wifi board.) Or download precompiled build -> [Download esp32_marauder_ver_flipper_sd_serial.bin](https://github.com/justcallmekoko/ESP32Marauder/releases/latest)
- NRF24: Sniffer & MouseJacker (with changes) [(by mothball187)](https://github.com/mothball187/flipperzero-nrf24/tree/main/mousejacker)
- Simple Clock (timer by GMMan) [(original by CompaqDisc)](https://gist.github.com/CompaqDisc/4e329c501bd03c1e801849b81f48ea61)
- **Sub-GHz Remote** [(by @gid9798)](https://github.com/gid9798)
- 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)
- Metronome [(by panki27)](https://github.com/panki27/Metronome)
- DTMF Dolphin [(by litui)](https://github.com/litui/dtmf_dolphin)
- **TOTP (Authenticator)** [(by akopachov)](https://github.com/akopachov/flipper-zero_authenticator)
- GPS [(by ezod)](https://github.com/ezod/flipperzero-gps) works with module `NMEA 0183` via UART (13TX, 14RX, GND pins on Flipper)
- i2c Tools [(by NaejEL)](https://github.com/NaejEL/flipperzero-i2ctools) - C0 -> SCL / C1 -> SDA / GND -> GND | 3v3 logic levels only!
- HC-SR04 Distance sensor - Ported and modified by @xMasterX [(original by Sanqui)](https://github.com/Sanqui/flipperzero-firmware/tree/hc_sr04) - How to connect -> (5V -> VCC) / (GND -> GND) / (13|TX -> Trig) / (14|RX -> Echo)
- Morse Code [(by wh00hw)](https://github.com/wh00hw/MorseCodeFAP)
- **Unitemp - Temperature sensors reader** (DHT11/22, DS18B20, BMP280, HTU21x and more) [(by quen0n)](https://github.com/quen0n/unitemp-flipperzero)
- BH1750 - Lightmeter [(by oleksiikutuzov)](https://github.com/oleksiikutuzov/flipperzero-lightmeter)
- **iButton Fuzzer** [(by xMasterX)](https://github.com/xMasterX/ibutton-fuzzer)
- HEX Viewer [(by QtRoS)](https://github.com/QtRoS/flipper-zero-hex-viewer)
- POCSAG Pager [(by xMasterX & Shmuma)](https://github.com/xMasterX/flipper-pager)
- Text Viewer [(by kowalski7cc & kyhwana)](https://github.com/kowalski7cc/flipper-zero-text-viewer/tree/refactor-text-app)
- **UART Terminal** [(by cool4uma)](https://github.com/cool4uma/UART_Terminal/tree/main)
- **ProtoView** [(by antirez)](https://github.com/antirez/protoview)
- **SWD Probe** [(by g3gg0)](https://github.com/g3gg0/flipper-swd_probe)
- IR Scope [(by kallanreed)](https://github.com/DarkFlippers/unleashed-firmware/pull/407)
- **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)
- **Mifare Nested** [(by AloneLiberty)](https://github.com/AloneLiberty/FlipperNested) - Works with PC and python app `FlipperNested`
Games: See full list and sources here: [xMasterX/all-the-plugins](https://github.com/xMasterX/all-the-plugins/tree/dev)
- DOOM (fixed) [(by p4nic4ttack)](https://github.com/p4nic4ttack/doom-flipper-zero/)
- Zombiez [(Reworked By DevMilanIan)](https://github.com/RogueMaster/flipperzero-firmware-wPlugins/pull/240) [(Original By Dooskington)](https://github.com/Dooskington/flipperzero-zombiez)
- Flappy Bird [(by DroomOne)](https://github.com/DroomOne/flipperzero-firmware/tree/dev/applications/flappy_bird)
- Arkanoid (refactored by xMasterX) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins)
- Tic Tac Toe (refactored by xMasterX) [(by gotnull)](https://github.com/gotnull/flipperzero-firmware-wPlugins)
- Tetris (with fixes) [(by jeffplang)](https://github.com/jeffplang/flipperzero-firmware/tree/tetris_game/applications/tetris_game)
- Minesweeper [(by panki27)](https://github.com/panki27/minesweeper)
- Heap Defence (aka Stack Attack) - Ported to latest firmware by @xMasterX - [(original by wquinoa & Vedmein)](https://github.com/Vedmein/flipperzero-firmware/tree/hd/svisto-perdelki)
- Game15 [(by x27)](https://github.com/x27/flipperzero-game15)
- Solitaire [(by teeebor)](https://github.com/teeebor/flipper_games)
- BlackJack [(by teeebor)](https://github.com/teeebor/flipper_games)
- 2048 game [(by eugene-kirzhanov)](https://github.com/eugene-kirzhanov/flipper-zero-2048-game)
- Bomberduck [(by leo-need-more-coffee)](https://github.com/leo-need-more-coffee/flipperzero-bomberduck)
### Official Flipper Zero Apps Catalog [web version](https://lab.flipper.net/apps) or mobile app
# Instructions # Instructions
## [- How to install firmware](https://github.com/DarkFlippers/unleashed-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/DarkFlippers/unleashed-firmware/blob/dev/documentation/HowToBuild.md) ### - **[How to build](/documentation/HowToBuild.md#how-to-build-by-yourself) | [Project-structure](#project-structure)**
## [- How to connect external CC1101 module](https://github.com/quen0n/flipperzero-ext-cc1101) ### - **CLion IDE** - How to setup workspace for flipper firmware development [by Savely Krasovsky](https://krasovs.ky/2022/11/01/flipper-zero-clion.html)
## [- BadUSB: how to add new keyboard layouts](https://github.com/dummy-decoy/flipperzero_badusb_kl) ### - **"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/)
## [- How to change Flipper name](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/CustomFlipperName.md) ### - [How to write your own app](https://flipper.atmanos.com/docs/overview/intro). Docs by atmanos **⚠outdated API**
## [- How to use Mifare Nested plugin to recover keys](https://github.com/AloneLiberty/FlipperNested#how-to-use-it) ## Firmware & main Apps feature
### **Sub-GHz** ### - System: [How to change Flipper name](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/CustomFlipperName.md)
## [- Transmission is blocked? - How to extend Sub-GHz frequency range](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/DangerousSettings.md) ### - BadUSB: [How to add new keyboard layouts](https://github.com/dummy-decoy/flipperzero_badusb_kl)
## [- How to add extra Sub-GHz frequencies](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md) ### - Infrared: [How to make captures to add them into Universal IR remotes](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/InfraredCaptures.md)
## [- 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) ## **Sub-GHz**
## [- Configure Sub-GHz Remote App](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md) ### - External Radio: [How to connect CC1101 module](https://github.com/quen0n/flipperzero-ext-cc1101)
### **Plugins** ### - Transmission is blocked? [How to extend Sub-GHz frequency range](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/DangerousSettings.md)
## [- 🎲 Download Extra plugins for Unleashed](https://github.com/xMasterX/all-the-plugins) ### - [How to add extra Sub-GHz frequencies](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzSettings.md)
## [- TOTP (Authenticator) config description](https://github.com/akopachov/flipper-zero_authenticator/blob/master/docs/conf-file_description.md) ### - [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)
## [- Barcode Generator](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/BarcodeGenerator.md) ### - [~~Configure Sub-GHz Remote App~~](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SubGHzRemotePlugin.md) Not recomeded, please use embedded configurator
## [- Multi Converter](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/MultiConverter.md) ## **Plugins**
## [- WAV Player sample files & how to convert](https://github.com/UberGuidoZ/Flipper/tree/main/Wav_Player#readme) ### - TOTP (Authenticator): [config description](https://github.com/akopachov/flipper-zero_authenticator/blob/master/docs/conf-file_description.md)
## [- Sub-GHz playlist generator script](https://github.com/darmiel/flipper-scripts/blob/main/playlist/playlist_creator_by_chunk.py) ### - Mifare Nested plugin: [How to recover keys](https://github.com/AloneLiberty/FlipperNested#how-to-use-it)
### **Plugins that works with external hardware** ### - Barcode Generator: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/BarcodeGenerator.md)
## [- How to use: Unitemp - Temperature sensors reader](https://github.com/quen0n/unitemp-flipperzero#readme) ### - Multi Converter: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/MultiConverter.md)
## [- How to use: [NMEA] GPS](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/external/gps_nmea_uart/README.md) ### - WAV Player: [sample files & how to convert](https://github.com/UberGuidoZ/Flipper/tree/main/Wav_Player#readme)
## [- How to use: i2c Tools](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/applications/external/flipper_i2ctools/README.md) ### - Sub-GHz playlist: [generator script](https://github.com/darmiel/flipper-scripts/blob/main/playlist/playlist_creator_by_chunk.py)
## [- How to use: [NRF24] plugins](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/NRF24.md) ## **Plugins that works with external hardware** [GPIO]
## [- How to use: [WiFi] Scanner](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme) ### - Unitemp - Temperature sensors reader: [How to use & supported sensors](https://github.com/quen0n/unitemp-flipperzero#readme)
## [- How to use: [ESP8266] Deauther](https://github.com/SequoiaSan/FlipperZero-Wifi-ESP8266-Deauther-Module#readme) ### - [NMEA] GPS: [How to use](https://github.com/xMasterX/all-the-plugins/blob/dev/base_pack/gps_nmea_uart/README.md)
## [- How to use: [ESP32] WiFi Marauder](https://github.com/UberGuidoZ/Flipper/tree/main/Wifi_DevBoard) ### - i2c Tools [How to use](https://github.com/xMasterX/all-the-plugins/blob/dev/base_pack/flipper_i2ctools/README.md)
## [- [WiFi] Scanner - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/) ### - [NRF24] plugins: [How to use](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/NRF24.md)
## [- [ESP8266] Deauther - Web Flasher for module firmware](https://sequoiasan.github.io/FlipperZero-Wifi-ESP8266-Deauther-Module/)
## [- Windows: How to Upload .bin to ESP32/ESP8266](https://github.com/SequoiaSan/Guide-How-To-Upload-bin-to-ESP8266-ESP32) ### - [WiFi] Scanner: [How to use](https://github.com/SequoiaSan/FlipperZero-WiFi-Scanner_Module#readme) | [Web Flasher](https://sequoiasan.github.io/FlipperZero-WiFi-Scanner_Module/)
## [- How to use: [GPIO] SentrySafe plugin](https://github.com/DarkFlippers/unleashed-firmware/blob/dev/documentation/SentrySafe.md) ### - [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>
<br> <br>
@@ -257,13 +255,7 @@ Games:
# Links # Links
* Unofficial Discord: [discord.unleashedflip.com](https://discord.unleashedflip.com) * Official Docs: [docs.flipper.net](https://docs.flipper.net/)
* Hello world - plugin tutorial (English): [https://github.com/DroomOne/Flipper-Plugin-Tutorial](https://github.com/DroomOne/Flipper-Plugin-Tutorial)
* Hello world - plugin tutorial (in Russian): [https://yakovlev.me/hello-flipper-zero/](https://yakovlev.me/hello-flipper-zero/)
* CLion IDE - How to setup workspace for flipper firmware development: [https://krasovs.ky/2022/11/01/flipper-zero-clion.html](https://krasovs.ky/2022/11/01/flipper-zero-clion.html)
* 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 Forum: [forum.flipperzero.one](https://forum.flipperzero.one/) * Official Forum: [forum.flipperzero.one](https://forum.flipperzero.one/)
# Project structure # Project structure

View File

@@ -45,6 +45,7 @@ distenv = coreenv.Clone(
], ],
ENV=os.environ, ENV=os.environ,
UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}", UPDATE_BUNDLE_DIR="dist/${DIST_DIR}/f${TARGET_HW}-update-${DIST_SUFFIX}",
VSCODE_LANG_SERVER=ARGUMENTS.get("LANG_SERVER", "cpptools"),
) )
firmware_env = distenv.AddFwProject( firmware_env = distenv.AddFwProject(
@@ -66,20 +67,22 @@ if GetOption("fullenv") or any(
# Target for self-update package # Target for self-update package
dist_basic_arguments = [ dist_basic_arguments = [
"--bundlever", "--bundlever",
'"${UPDATE_VERSION_STRING}"', "${UPDATE_VERSION_STRING}",
] ]
dist_radio_arguments = [ dist_radio_arguments = [
"--radio", "--radio",
'"${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}"', "${ROOT_DIR.abspath}/${COPRO_STACK_BIN_DIR}/${COPRO_STACK_BIN}",
"--radiotype", "--radiotype",
"${COPRO_STACK_TYPE}", "${COPRO_STACK_TYPE}",
"${COPRO_DISCLAIMER}", "${COPRO_DISCLAIMER}",
"--obdata", "--obdata",
'"${ROOT_DIR.abspath}/${COPRO_OB_DATA}"', "${ROOT_DIR.abspath}/${COPRO_OB_DATA}",
"--stackversion",
"${COPRO_CUBE_VERSION}",
] ]
dist_resource_arguments = [ dist_resource_arguments = [
"-r", "-r",
'"${ROOT_DIR.abspath}/assets/resources"', firmware_env.subst("${RESOURCES_ROOT}"),
] ]
dist_splash_arguments = ( dist_splash_arguments = (
[ [
@@ -92,7 +95,7 @@ if GetOption("fullenv") or any(
selfupdate_dist = distenv.DistCommand( selfupdate_dist = distenv.DistCommand(
"updater_package", "updater_package",
(distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES"]), (distenv["DIST_DEPENDS"], firmware_env["FW_RESOURCES_MANIFEST"]),
DIST_EXTRA=[ DIST_EXTRA=[
*dist_basic_arguments, *dist_basic_arguments,
*dist_radio_arguments, *dist_radio_arguments,
@@ -125,7 +128,8 @@ if GetOption("fullenv") or any(
# Installation over USB & CLI # Installation over USB & CLI
usb_update_package = distenv.AddUsbFlashTarget( 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) distenv.Alias("flash_usb_full", usb_update_package)
@@ -163,17 +167,25 @@ Depends(
list(app_artifact.validator for app_artifact in external_app_list), list(app_artifact.validator for app_artifact in external_app_list),
) )
Alias("fap_dist", fap_dist) Alias("fap_dist", fap_dist)
# distenv.Default(fap_dist)
distenv.Depends(firmware_env["FW_RESOURCES"], external_apps_artifacts.resources_dist)
# Copy all faps to device # Copy all faps to device
fap_deploy = distenv.PhonyTarget( fap_deploy = distenv.PhonyTarget(
"fap_deploy", "fap_deploy",
"${PYTHON3} ${ROOT_DIR}/scripts/storage.py send ${SOURCE} /ext/apps", [
source=Dir("#/assets/resources/apps"), [
"${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 # Target for bundling core2 package for qFlipper
@@ -184,27 +196,15 @@ copro_dist = distenv.CoproBuilder(
distenv.AlwaysBuild(copro_dist) distenv.AlwaysBuild(copro_dist)
distenv.Alias("copro_dist", 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) distenv.Alias("flash", firmware_flash)
# To be implemented in fwflash.py
firmware_jflash = distenv.AddJFlashTarget(firmware_env) firmware_jflash = distenv.AddJFlashTarget(firmware_env)
distenv.Alias("jflash", firmware_jflash) distenv.Alias("jflash", firmware_jflash)
firmware_bm_flash = distenv.PhonyTarget( distenv.PhonyTarget(
"flash_blackmagic",
"$GDB $GDBOPTS $SOURCES $GDBFLASH",
source=firmware_env["FW_ELF"],
GDBOPTS="${GDBOPTS_BASE} ${GDBOPTS_BLACKMAGIC}",
GDBREMOTE="${BLACKMAGIC_ADDR}",
GDBFLASH=[
"-ex",
"load",
"-ex",
"quit",
],
)
gdb_backtrace_all_threads = distenv.PhonyTarget(
"gdb_trace_all", "gdb_trace_all",
"$GDB $GDBOPTS $SOURCES $GDBFLASH", "$GDB $GDBOPTS $SOURCES $GDBFLASH",
source=firmware_env["FW_ELF"], source=firmware_env["FW_ELF"],
@@ -323,7 +323,10 @@ distenv.PhonyTarget(
) )
# Start Flipper CLI via PySerial's miniterm # Start Flipper CLI via PySerial's miniterm
distenv.PhonyTarget("cli", "${PYTHON3} ${FBT_SCRIPT_DIR}/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 # Find blackmagic probe
@@ -343,7 +346,14 @@ distenv.PhonyTarget(
) )
# Prepare vscode environment # 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.Precious(vscode_dist)
distenv.NoClean(vscode_dist) distenv.NoClean(vscode_dist)
distenv.Alias("vscode_dist", vscode_dist) distenv.Alias("vscode_dist", vscode_dist)

View File

@@ -26,7 +26,6 @@ Applications for main Flipper menu.
- `archive` - Archive and file manager - `archive` - Archive and file manager
- `bad_usb` - Bad USB application - `bad_usb` - Bad USB application
- `fap_loader` - External applications loader
- `gpio` - GPIO application: includes USART bridge and GPIO control - `gpio` - GPIO application: includes USART bridge and GPIO control
- `ibutton` - iButton application, onewire keys and more - `ibutton` - iButton application, onewire keys and more
- `infrared` - Infrared application, controls your IR devices - `infrared` - Infrared application, controls your IR devices
@@ -36,21 +35,6 @@ Applications for main Flipper menu.
- `u2f` - U2F Application - `u2f` - U2F Application
## External
External applications deployed to SD Card
- `clock` - Clock application
- `dap_link` - DAP Link OnChip debugger
- `hid_app` - USB/BT Remote controller
- `music_player` - Music player app (demo)
- `nfc_magic` - NFC MFC Magic card application
- `picopass` - Picopass reader / writer
- `signal_generator` - Signal generator app: PWM and clock generator
- `snake_game` - Snake game application
- `spi_mem_manager` - SPI Memory reader / flasher
- `weather_station` - SubGHz weather station
## services ## services
Background services providing system APIs to applications. Background services providing system APIs to applications.

View File

@@ -174,7 +174,7 @@ bool WIEGAND::DoWiegandConversion() {
return false; return false;
} }
// TODO: Handle validation failure case! // TODO FL-3490: Handle validation failure case!
} else if(4 == _bitCount) { } else if(4 == _bitCount) {
// 4-bit Wiegand codes have no data integrity check so we just // 4-bit Wiegand codes have no data integrity check so we just
// read the LOW nibble. // read the LOW nibble.

View File

@@ -12,5 +12,6 @@ App(
"display_test", "display_test",
"text_box_test", "text_box_test",
"file_browser_test", "file_browser_test",
"speaker_debug",
], ],
) )

View File

@@ -0,0 +1,16 @@
App(
appid="ccid_test",
name="CCID Debug",
apptype=FlipperAppType.DEBUG,
entry_point="ccid_test_app",
cdefines=["CCID_TEST"],
requires=[
"gui",
],
provides=[
"ccid_test",
],
stack_size=1 * 1024,
order=120,
fap_category="Debug",
)

View File

@@ -0,0 +1,169 @@
#include <stdint.h>
#include <furi.h>
#include <furi_hal.h>
#include <gui/view.h>
#include <gui/view_dispatcher.h>
#include <gui/modules/submenu.h>
#include <gui/gui.h>
#include "iso7816_t0_apdu.h"
typedef enum {
EventTypeInput,
} EventType;
typedef struct {
Gui* gui;
ViewPort* view_port;
FuriMessageQueue* event_queue;
FuriHalUsbCcidConfig ccid_cfg;
} CcidTestApp;
typedef struct {
union {
InputEvent input;
};
EventType type;
} CcidTestAppEvent;
typedef enum {
CcidTestSubmenuIndexInsertSmartcard,
CcidTestSubmenuIndexRemoveSmartcard,
CcidTestSubmenuIndexInsertSmartcardReader
} SubmenuIndex;
void icc_power_on_callback(uint8_t* atrBuffer, uint32_t* atrlen, void* context) {
UNUSED(context);
iso7816_answer_to_reset(atrBuffer, atrlen);
}
//dataBlock points to the buffer
//dataBlockLen tells reader how nany bytes should be read
void xfr_datablock_callback(
const uint8_t* dataBlock,
uint32_t dataBlockLen,
uint8_t* responseDataBlock,
uint32_t* responseDataBlockLen,
void* context) {
UNUSED(context);
struct ISO7816_Command_APDU commandAPDU;
iso7816_read_command_apdu(&commandAPDU, dataBlock, dataBlockLen);
struct ISO7816_Response_APDU responseAPDU;
//class not supported
responseAPDU.SW1 = 0x6E;
responseAPDU.SW2 = 0x00;
iso7816_write_response_apdu(&responseAPDU, responseDataBlock, responseDataBlockLen);
}
static const CcidCallbacks ccid_cb = {
icc_power_on_callback,
xfr_datablock_callback,
};
static void ccid_test_app_render_callback(Canvas* canvas, void* ctx) {
UNUSED(ctx);
canvas_clear(canvas);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 0, 10, "CCID Test App");
canvas_set_font(canvas, FontSecondary);
canvas_draw_str(canvas, 0, 63, "Hold [back] to exit");
}
static void ccid_test_app_input_callback(InputEvent* input_event, void* ctx) {
FuriMessageQueue* event_queue = ctx;
CcidTestAppEvent event;
event.type = EventTypeInput;
event.input = *input_event;
furi_message_queue_put(event_queue, &event, FuriWaitForever);
}
uint32_t ccid_test_exit(void* context) {
UNUSED(context);
return VIEW_NONE;
}
CcidTestApp* ccid_test_app_alloc() {
CcidTestApp* app = malloc(sizeof(CcidTestApp));
// Gui
app->gui = furi_record_open(RECORD_GUI);
//viewport
app->view_port = view_port_alloc();
gui_add_view_port(app->gui, app->view_port, GuiLayerFullscreen);
view_port_draw_callback_set(app->view_port, ccid_test_app_render_callback, NULL);
//message queue
app->event_queue = furi_message_queue_alloc(8, sizeof(CcidTestAppEvent));
furi_check(app->event_queue);
view_port_input_callback_set(app->view_port, ccid_test_app_input_callback, app->event_queue);
return app;
}
void ccid_test_app_free(CcidTestApp* app) {
furi_assert(app);
//message queue
furi_message_queue_free(app->event_queue);
//view port
gui_remove_view_port(app->gui, app->view_port);
view_port_free(app->view_port);
// Close gui record
furi_record_close(RECORD_GUI);
app->gui = NULL;
// Free rest
free(app);
}
int32_t ccid_test_app(void* p) {
UNUSED(p);
//setup view
CcidTestApp* app = ccid_test_app_alloc();
//setup CCID USB
// On linux: set VID PID using: /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
app->ccid_cfg.vid = 0x1234;
app->ccid_cfg.pid = 0x5678;
FuriHalUsbInterface* usb_mode_prev = furi_hal_usb_get_config();
furi_hal_usb_unlock();
furi_hal_ccid_set_callbacks((CcidCallbacks*)&ccid_cb);
furi_check(furi_hal_usb_set_config(&usb_ccid, &app->ccid_cfg) == true);
//handle button events
CcidTestAppEvent event;
while(1) {
FuriStatus event_status =
furi_message_queue_get(app->event_queue, &event, FuriWaitForever);
if(event_status == FuriStatusOk) {
if(event.type == EventTypeInput) {
if(event.input.type == InputTypeLong && event.input.key == InputKeyBack) {
break;
}
}
}
view_port_update(app->view_port);
}
//tear down USB
furi_hal_usb_set_config(usb_mode_prev, NULL);
furi_hal_ccid_set_callbacks(NULL);
//teardown view
ccid_test_app_free(app);
return 0;
}

View File

@@ -0,0 +1,37 @@
/* Implements rudimentary iso7816-3 support for APDU (T=0) */
#include <stdint.h>
#include <string.h>
#include <furi.h>
#include "iso7816_t0_apdu.h"
void iso7816_answer_to_reset(uint8_t* dataBuffer, uint32_t* atrlen) {
//minimum valid ATR: https://smartcard-atr.apdu.fr/parse?ATR=3B+00
uint8_t AtrBuffer[2] = {
0x3B, //TS (direct convention)
0x00 // T0 (Y(1): b0000, K: 0 (historical bytes))
};
*atrlen = 2;
memcpy(dataBuffer, AtrBuffer, sizeof(uint8_t) * (*atrlen));
}
void iso7816_read_command_apdu(
struct ISO7816_Command_APDU* command,
const uint8_t* dataBuffer,
uint32_t dataLen) {
UNUSED(dataLen);
command->CLA = dataBuffer[0];
command->INS = dataBuffer[1];
command->P1 = dataBuffer[2];
command->P2 = dataBuffer[3];
command->Lc = dataBuffer[4];
}
void iso7816_write_response_apdu(
const struct ISO7816_Response_APDU* response,
uint8_t* dataBuffer,
uint32_t* dataLen) {
dataBuffer[0] = response->SW1;
dataBuffer[1] = response->SW2;
*dataLen = 2;
}

View File

@@ -0,0 +1,32 @@
#ifndef _ISO7816_T0_APDU_H_
#define _ISO7816_T0_APDU_H_
#include <stdint.h>
struct ISO7816_Command_APDU {
//header
uint8_t CLA;
uint8_t INS;
uint8_t P1;
uint8_t P2;
//body
uint8_t Lc;
uint8_t Le;
} __attribute__((packed));
struct ISO7816_Response_APDU {
uint8_t SW1;
uint8_t SW2;
} __attribute__((packed));
void iso7816_answer_to_reset(uint8_t* atrBuffer, uint32_t* atrlen);
void iso7816_read_command_apdu(
struct ISO7816_Command_APDU* command,
const uint8_t* dataBuffer,
uint32_t dataLen);
void iso7816_write_response_apdu(
const struct ISO7816_Response_APDU* response,
uint8_t* dataBuffer,
uint32_t* dataLen);
#endif //_ISO7816_T0_APDU_H_

View File

@@ -0,0 +1,10 @@
App(
appid="crash_test",
name="Crash Test",
apptype=FlipperAppType.DEBUG,
entry_point="crash_test_app",
cdefines=["APP_CRASH_TEST"],
requires=["gui"],
stack_size=1 * 1024,
fap_category="Debug",
)

View File

@@ -0,0 +1,128 @@
#include <furi_hal.h>
#include <furi.h>
#include <gui/gui.h>
#include <gui/view_dispatcher.h>
#include <gui/modules/submenu.h>
#define TAG "CrashTest"
typedef struct {
Gui* gui;
ViewDispatcher* view_dispatcher;
Submenu* submenu;
} CrashTest;
typedef enum {
CrashTestViewSubmenu,
} CrashTestView;
typedef enum {
CrashTestSubmenuCheck,
CrashTestSubmenuCheckMessage,
CrashTestSubmenuAssert,
CrashTestSubmenuAssertMessage,
CrashTestSubmenuCrash,
CrashTestSubmenuHalt,
} CrashTestSubmenu;
static void crash_test_submenu_callback(void* context, uint32_t index) {
CrashTest* instance = (CrashTest*)context;
UNUSED(instance);
switch(index) {
case CrashTestSubmenuCheck:
furi_check(false);
break;
case CrashTestSubmenuCheckMessage:
furi_check(false, "Crash test: furi_check with message");
break;
case CrashTestSubmenuAssert:
furi_assert(false);
break;
case CrashTestSubmenuAssertMessage:
furi_assert(false, "Crash test: furi_assert with message");
break;
case CrashTestSubmenuCrash:
furi_crash("Crash test: furi_crash");
break;
case CrashTestSubmenuHalt:
furi_halt("Crash test: furi_halt");
break;
default:
furi_crash("Programming error");
}
}
static uint32_t crash_test_exit_callback(void* context) {
UNUSED(context);
return VIEW_NONE;
}
CrashTest* crash_test_alloc() {
CrashTest* instance = malloc(sizeof(CrashTest));
View* view = NULL;
instance->gui = furi_record_open(RECORD_GUI);
instance->view_dispatcher = view_dispatcher_alloc();
view_dispatcher_enable_queue(instance->view_dispatcher);
view_dispatcher_attach_to_gui(
instance->view_dispatcher, instance->gui, ViewDispatcherTypeFullscreen);
// Menu
instance->submenu = submenu_alloc();
view = submenu_get_view(instance->submenu);
view_set_previous_callback(view, crash_test_exit_callback);
view_dispatcher_add_view(instance->view_dispatcher, CrashTestViewSubmenu, view);
submenu_add_item(
instance->submenu, "Check", CrashTestSubmenuCheck, crash_test_submenu_callback, instance);
submenu_add_item(
instance->submenu,
"Check with message",
CrashTestSubmenuCheckMessage,
crash_test_submenu_callback,
instance);
submenu_add_item(
instance->submenu, "Assert", CrashTestSubmenuAssert, crash_test_submenu_callback, instance);
submenu_add_item(
instance->submenu,
"Assert with message",
CrashTestSubmenuAssertMessage,
crash_test_submenu_callback,
instance);
submenu_add_item(
instance->submenu, "Crash", CrashTestSubmenuCrash, crash_test_submenu_callback, instance);
submenu_add_item(
instance->submenu, "Halt", CrashTestSubmenuHalt, crash_test_submenu_callback, instance);
return instance;
}
void crash_test_free(CrashTest* instance) {
view_dispatcher_remove_view(instance->view_dispatcher, CrashTestViewSubmenu);
submenu_free(instance->submenu);
view_dispatcher_free(instance->view_dispatcher);
furi_record_close(RECORD_GUI);
free(instance);
}
int32_t crash_test_run(CrashTest* instance) {
view_dispatcher_switch_to_view(instance->view_dispatcher, CrashTestViewSubmenu);
view_dispatcher_run(instance->view_dispatcher);
return 0;
}
int32_t crash_test_app(void* p) {
UNUSED(p);
CrashTest* instance = crash_test_alloc();
int32_t ret = crash_test_run(instance);
crash_test_free(instance);
return ret;
}

View File

@@ -71,7 +71,7 @@ static void direct_draw_run(DirectDraw* instance) {
size_t counter = 0; size_t counter = 0;
float fps = 0; float fps = 0;
vTaskPrioritySet(furi_thread_get_current_id(), FuriThreadPriorityIdle); furi_thread_set_current_priority(FuriThreadPriorityIdle);
do { do {
size_t elapsed = DWT->CYCCNT - start; size_t elapsed = DWT->CYCCNT - start;

View File

@@ -6,6 +6,11 @@ static void comparator_trigger_callback(bool level, void* comp_ctx) {
furi_hal_gpio_write(&gpio_ext_pa7, !level); furi_hal_gpio_write(&gpio_ext_pa7, !level);
} }
void lfrfid_debug_view_tune_callback(void* context) {
LfRfidDebug* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, 0xBA);
}
void lfrfid_debug_scene_tune_on_enter(void* context) { void lfrfid_debug_scene_tune_on_enter(void* context) {
LfRfidDebug* app = context; LfRfidDebug* app = context;
@@ -16,6 +21,8 @@ void lfrfid_debug_scene_tune_on_enter(void* context) {
furi_hal_rfid_tim_read_start(125000, 0.5); furi_hal_rfid_tim_read_start(125000, 0.5);
lfrfid_debug_view_tune_set_callback(app->tune_view, lfrfid_debug_view_tune_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidDebugViewTune); view_dispatcher_switch_to_view(app->view_dispatcher, LfRfidDebugViewTune);
} }

View File

@@ -13,6 +13,8 @@ typedef struct {
uint32_t ARR; uint32_t ARR;
uint32_t CCR; uint32_t CCR;
int pos; int pos;
void (*update_callback)(void* context);
void* update_context;
} LfRfidTuneViewModel; } LfRfidTuneViewModel;
static void lfrfid_debug_view_tune_draw_callback(Canvas* canvas, void* _model) { static void lfrfid_debug_view_tune_draw_callback(Canvas* canvas, void* _model) {
@@ -151,6 +153,18 @@ static bool lfrfid_debug_view_tune_input_callback(InputEvent* event, void* conte
consumed = false; consumed = false;
break; break;
} }
if(event->key == InputKeyLeft || event->key == InputKeyRight) {
with_view_model(
tune_view->view,
LfRfidTuneViewModel * model,
{
if(model->update_callback) {
model->update_callback(model->update_context);
}
},
false);
}
} }
return consumed; return consumed;
@@ -161,19 +175,7 @@ LfRfidTuneView* lfrfid_debug_view_tune_alloc() {
tune_view->view = view_alloc(); tune_view->view = view_alloc();
view_set_context(tune_view->view, tune_view); view_set_context(tune_view->view, tune_view);
view_allocate_model(tune_view->view, ViewModelTypeLocking, sizeof(LfRfidTuneViewModel)); view_allocate_model(tune_view->view, ViewModelTypeLocking, sizeof(LfRfidTuneViewModel));
lfrfid_debug_view_tune_clean(tune_view);
with_view_model(
tune_view->view,
LfRfidTuneViewModel * model,
{
model->dirty = true;
model->fine = false;
model->ARR = 511;
model->CCR = 255;
model->pos = 0;
},
true);
view_set_draw_callback(tune_view->view, lfrfid_debug_view_tune_draw_callback); view_set_draw_callback(tune_view->view, lfrfid_debug_view_tune_draw_callback);
view_set_input_callback(tune_view->view, lfrfid_debug_view_tune_input_callback); view_set_input_callback(tune_view->view, lfrfid_debug_view_tune_input_callback);
@@ -199,6 +201,8 @@ void lfrfid_debug_view_tune_clean(LfRfidTuneView* tune_view) {
model->ARR = 511; model->ARR = 511;
model->CCR = 255; model->CCR = 255;
model->pos = 0; model->pos = 0;
model->update_callback = NULL;
model->update_context = NULL;
}, },
true); true);
} }
@@ -232,3 +236,17 @@ uint32_t lfrfid_debug_view_tune_get_ccr(LfRfidTuneView* tune_view) {
return result; return result;
} }
void lfrfid_debug_view_tune_set_callback(
LfRfidTuneView* tune_view,
void (*callback)(void* context),
void* context) {
with_view_model(
tune_view->view,
LfRfidTuneViewModel * model,
{
model->update_callback = callback;
model->update_context = context;
},
false);
}

View File

@@ -16,3 +16,8 @@ bool lfrfid_debug_view_tune_is_dirty(LfRfidTuneView* tune_view);
uint32_t lfrfid_debug_view_tune_get_arr(LfRfidTuneView* tune_view); uint32_t lfrfid_debug_view_tune_get_arr(LfRfidTuneView* tune_view);
uint32_t lfrfid_debug_view_tune_get_ccr(LfRfidTuneView* tune_view); uint32_t lfrfid_debug_view_tune_get_ccr(LfRfidTuneView* tune_view);
void lfrfid_debug_view_tune_set_callback(
LfRfidTuneView* tune_view,
void (*callback)(void* context),
void* context);

View File

@@ -21,22 +21,51 @@ static void rpc_debug_app_tick_event_callback(void* context) {
scene_manager_handle_tick_event(app->scene_manager); scene_manager_handle_tick_event(app->scene_manager);
} }
static void rpc_debug_app_rpc_command_callback(RpcAppSystemEvent event, void* context) { static void
rpc_debug_app_format_hex(const uint8_t* data, size_t data_size, char* buf, size_t buf_size) {
if(data == NULL || data_size == 0) {
strncpy(buf, "<Data empty>", buf_size);
return;
}
const size_t byte_width = 3;
const size_t line_width = 7;
data_size = MIN(data_size, buf_size / (byte_width + 1));
for(size_t i = 0; i < data_size; ++i) {
char* p = buf + (i * byte_width);
char sep = !((i + 1) % line_width) ? '\n' : ' ';
snprintf(p, byte_width + 1, "%02X%c", data[i], sep);
}
buf[buf_size - 1] = '\0';
}
static void rpc_debug_app_rpc_command_callback(const RpcAppSystemEvent* event, void* context) {
furi_assert(context); furi_assert(context);
RpcDebugApp* app = context; RpcDebugApp* app = context;
furi_assert(app->rpc); furi_assert(app->rpc);
if(event == RpcAppEventSessionClose) { if(event->type == RpcAppEventTypeSessionClose) {
scene_manager_stop(app->scene_manager); scene_manager_stop(app->scene_manager);
view_dispatcher_stop(app->view_dispatcher); view_dispatcher_stop(app->view_dispatcher);
rpc_system_app_set_callback(app->rpc, NULL, NULL); rpc_system_app_set_callback(app->rpc, NULL, NULL);
app->rpc = NULL; app->rpc = NULL;
} else if(event == RpcAppEventAppExit) { } else if(event->type == RpcAppEventTypeAppExit) {
scene_manager_stop(app->scene_manager); scene_manager_stop(app->scene_manager);
view_dispatcher_stop(app->view_dispatcher); view_dispatcher_stop(app->view_dispatcher);
rpc_system_app_confirm(app->rpc, RpcAppEventAppExit, true); rpc_system_app_confirm(app->rpc, true);
} else if(event->type == RpcAppEventTypeDataExchange) {
furi_assert(event->data.type == RpcAppSystemEventDataTypeBytes);
rpc_debug_app_format_hex(
event->data.bytes.ptr, event->data.bytes.size, app->text_store, TEXT_STORE_SIZE);
view_dispatcher_send_custom_event(
app->view_dispatcher, RpcDebugAppCustomEventRpcDataExchange);
} else { } else {
rpc_system_app_confirm(app->rpc, event, false); rpc_system_app_confirm(app->rpc, false);
} }
} }

View File

@@ -1,40 +1,5 @@
#include "../rpc_debug_app.h" #include "../rpc_debug_app.h"
static void rpc_debug_app_scene_start_format_hex(
const uint8_t* data,
size_t data_size,
char* buf,
size_t buf_size) {
furi_assert(data);
furi_assert(buf);
const size_t byte_width = 3;
const size_t line_width = 7;
data_size = MIN(data_size, buf_size / (byte_width + 1));
for(size_t i = 0; i < data_size; ++i) {
char* p = buf + (i * byte_width);
char sep = !((i + 1) % line_width) ? '\n' : ' ';
snprintf(p, byte_width + 1, "%02X%c", data[i], sep);
}
buf[buf_size - 1] = '\0';
}
static void rpc_debug_app_scene_receive_data_exchange_callback(
const uint8_t* data,
size_t data_size,
void* context) {
RpcDebugApp* app = context;
if(data) {
rpc_debug_app_scene_start_format_hex(data, data_size, app->text_store, TEXT_STORE_SIZE);
} else {
strncpy(app->text_store, "<Data empty>", TEXT_STORE_SIZE);
}
view_dispatcher_send_custom_event(app->view_dispatcher, RpcDebugAppCustomEventRpcDataExchange);
}
void rpc_debug_app_scene_receive_data_exchange_on_enter(void* context) { void rpc_debug_app_scene_receive_data_exchange_on_enter(void* context) {
RpcDebugApp* app = context; RpcDebugApp* app = context;
strncpy(app->text_store, "Received data will appear here...", TEXT_STORE_SIZE); strncpy(app->text_store, "Received data will appear here...", TEXT_STORE_SIZE);
@@ -42,8 +7,6 @@ void rpc_debug_app_scene_receive_data_exchange_on_enter(void* context) {
text_box_set_text(app->text_box, app->text_store); text_box_set_text(app->text_box, app->text_store);
text_box_set_font(app->text_box, TextBoxFontHex); text_box_set_font(app->text_box, TextBoxFontHex);
rpc_system_app_set_data_exchange_callback(
app->rpc, rpc_debug_app_scene_receive_data_exchange_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, RpcDebugAppViewTextBox); view_dispatcher_switch_to_view(app->view_dispatcher, RpcDebugAppViewTextBox);
} }
@@ -53,6 +16,7 @@ bool rpc_debug_app_scene_receive_data_exchange_on_event(void* context, SceneMana
if(event.type == SceneManagerEventTypeCustom) { if(event.type == SceneManagerEventTypeCustom) {
if(event.event == RpcDebugAppCustomEventRpcDataExchange) { if(event.event == RpcDebugAppCustomEventRpcDataExchange) {
rpc_system_app_confirm(app->rpc, true);
notification_message(app->notifications, &sequence_blink_cyan_100); notification_message(app->notifications, &sequence_blink_cyan_100);
notification_message(app->notifications, &sequence_display_backlight_on); notification_message(app->notifications, &sequence_display_backlight_on);
text_box_set_text(app->text_box, app->text_store); text_box_set_text(app->text_box, app->text_store);
@@ -66,5 +30,4 @@ bool rpc_debug_app_scene_receive_data_exchange_on_event(void* context, SceneMana
void rpc_debug_app_scene_receive_data_exchange_on_exit(void* context) { void rpc_debug_app_scene_receive_data_exchange_on_exit(void* context) {
RpcDebugApp* app = context; RpcDebugApp* app = context;
text_box_reset(app->text_box); text_box_reset(app->text_box);
rpc_system_app_set_data_exchange_callback(app->rpc, NULL, NULL);
} }

View File

@@ -0,0 +1,11 @@
App(
appid="speaker_debug",
name="Speaker Debug",
apptype=FlipperAppType.DEBUG,
entry_point="speaker_debug_app",
requires=["gui", "notification"],
stack_size=2 * 1024,
order=10,
fap_category="Debug",
fap_libs=["music_worker"],
)

View File

@@ -0,0 +1,120 @@
#include <furi.h>
#include <notification/notification.h>
#include <music_worker/music_worker.h>
#include <cli/cli.h>
#include <toolbox/args.h>
#define TAG "SpeakerDebug"
#define CLI_COMMAND "speaker_debug"
typedef enum {
SpeakerDebugAppMessageTypeStop,
} SpeakerDebugAppMessageType;
typedef struct {
SpeakerDebugAppMessageType type;
} SpeakerDebugAppMessage;
typedef struct {
MusicWorker* music_worker;
FuriMessageQueue* message_queue;
Cli* cli;
} SpeakerDebugApp;
static SpeakerDebugApp* speaker_app_alloc() {
SpeakerDebugApp* app = (SpeakerDebugApp*)malloc(sizeof(SpeakerDebugApp));
app->music_worker = music_worker_alloc();
app->message_queue = furi_message_queue_alloc(8, sizeof(SpeakerDebugAppMessage));
app->cli = furi_record_open(RECORD_CLI);
return app;
}
static void speaker_app_free(SpeakerDebugApp* app) {
music_worker_free(app->music_worker);
furi_message_queue_free(app->message_queue);
furi_record_close(RECORD_CLI);
free(app);
}
static void speaker_app_cli(Cli* cli, FuriString* args, void* context) {
UNUSED(cli);
SpeakerDebugApp* app = (SpeakerDebugApp*)context;
SpeakerDebugAppMessage message;
FuriString* cmd = furi_string_alloc();
if(!args_read_string_and_trim(args, cmd)) {
furi_string_free(cmd);
printf("Usage:\r\n");
printf("\t" CLI_COMMAND " stop\r\n");
return;
}
if(furi_string_cmp(cmd, "stop") == 0) {
message.type = SpeakerDebugAppMessageTypeStop;
FuriStatus status = furi_message_queue_put(app->message_queue, &message, 100);
if(status != FuriStatusOk) {
printf("Failed to send message\r\n");
} else {
printf("Stopping\r\n");
}
} else {
printf("Usage:\r\n");
printf("\t" CLI_COMMAND " stop\r\n");
}
furi_string_free(cmd);
}
static bool speaker_app_music_play(SpeakerDebugApp* app, const char* rtttl) {
if(music_worker_is_playing(app->music_worker)) {
music_worker_stop(app->music_worker);
}
if(!music_worker_load_rtttl_from_string(app->music_worker, rtttl)) {
FURI_LOG_E(TAG, "Failed to load RTTTL");
return false;
}
music_worker_set_volume(app->music_worker, 1.0f);
music_worker_start(app->music_worker);
return true;
}
static void speaker_app_music_stop(SpeakerDebugApp* app) {
if(music_worker_is_playing(app->music_worker)) {
music_worker_stop(app->music_worker);
}
}
static void speaker_app_run(SpeakerDebugApp* app, const char* arg) {
if(!arg || !speaker_app_music_play(app, arg)) {
FURI_LOG_E(TAG, "Provided RTTTL is invalid");
return;
}
cli_add_command(app->cli, CLI_COMMAND, CliCommandFlagParallelSafe, speaker_app_cli, app);
SpeakerDebugAppMessage message;
FuriStatus status;
while(true) {
status = furi_message_queue_get(app->message_queue, &message, FuriWaitForever);
if(status == FuriStatusOk) {
if(message.type == SpeakerDebugAppMessageTypeStop) {
speaker_app_music_stop(app);
break;
}
}
}
cli_delete_command(app->cli, CLI_COMMAND);
}
int32_t speaker_debug_app(void* arg) {
SpeakerDebugApp* app = speaker_app_alloc();
speaker_app_run(app, arg);
speaker_app_free(app);
return 0;
}

View File

@@ -0,0 +1,14 @@
App(
appid="subghz_test",
name="Sub-Ghz test",
apptype=FlipperAppType.DEBUG,
targets=["f7"],
entry_point="subghz_test_app",
requires=["gui"],
stack_size=4 * 1024,
order=50,
fap_icon="subghz_test_10px.png",
fap_category="Debug",
fap_icon_assets="images",
fap_version="0.1",
)

View File

@@ -0,0 +1,7 @@
#pragma once
typedef enum {
//SubGhzTestCustomEvent
SubGhzTestCustomEventStartId = 100,
SubGhzTestCustomEventSceneShowOnlyRX,
} SubGhzTestCustomEvent;

View File

@@ -0,0 +1,38 @@
#include "subghz_test_frequency.h"
const uint32_t subghz_frequencies_testing[] = {
/* 300 - 348 */
300000000,
304500000,
310000000,
312025000,
313250000,
313625000,
315000000,
315225000,
321950000,
348000000,
/* 387 - 464 */
387000000,
433075000, /* LPD433 first */
433825000,
433920000, /* LPD433 mid */
434420000,
434775000, /* LPD433 last channels */
438900000,
464000000,
/* 779 - 928 */
779000000,
868150000,
868350000,
868550000,
915000000,
925000000,
926500000,
927950000,
928000000,
};
const uint32_t subghz_frequencies_count_testing =
sizeof(subghz_frequencies_testing) / sizeof(uint32_t);
const uint32_t subghz_frequencies_433_92_testing = 13;

View File

@@ -0,0 +1,6 @@
#pragma once
#include "../subghz_test_app_i.h"
extern const uint32_t subghz_frequencies_testing[];
extern const uint32_t subghz_frequencies_count_testing;
extern const uint32_t subghz_frequencies_433_92_testing;

View File

@@ -0,0 +1,18 @@
#pragma once
#include <furi.h>
#include <furi_hal.h>
#define SUBGHZ_TEST_VERSION_APP "0.1"
#define SUBGHZ_TEST_DEVELOPED "SkorP"
#define SUBGHZ_TEST_GITHUB "https://github.com/flipperdevices/flipperzero-firmware"
typedef enum {
SubGhzTestViewVariableItemList,
SubGhzTestViewSubmenu,
SubGhzTestViewStatic,
SubGhzTestViewCarrier,
SubGhzTestViewPacket,
SubGhzTestViewWidget,
SubGhzTestViewPopup,
} SubGhzTestView;

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,244 @@
#include "math.h"
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t bit_count) {
uint64_t reverse_key = 0;
for(uint8_t i = 0; i < bit_count; i++) {
reverse_key = reverse_key << 1 | bit_read(key, i);
}
return reverse_key;
}
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t bit_count) {
uint8_t parity = 0;
for(uint8_t i = 0; i < bit_count; i++) {
parity += bit_read(key, i);
}
return parity & 0x01;
}
uint8_t subghz_protocol_blocks_crc4(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init) {
uint8_t remainder = init << 4; // LSBs are unused
uint8_t poly = polynomial << 4;
uint8_t bit;
while(size--) {
remainder ^= *message++;
for(bit = 0; bit < 8; bit++) {
if(remainder & 0x80) {
remainder = (remainder << 1) ^ poly;
} else {
remainder = (remainder << 1);
}
}
}
return remainder >> 4 & 0x0f; // discard the LSBs
}
uint8_t subghz_protocol_blocks_crc7(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init) {
uint8_t remainder = init << 1; // LSB is unused
uint8_t poly = polynomial << 1;
for(size_t byte = 0; byte < size; ++byte) {
remainder ^= message[byte];
for(uint8_t bit = 0; bit < 8; ++bit) {
if(remainder & 0x80) {
remainder = (remainder << 1) ^ poly;
} else {
remainder = (remainder << 1);
}
}
}
return remainder >> 1 & 0x7f; // discard the LSB
}
uint8_t subghz_protocol_blocks_crc8(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init) {
uint8_t remainder = init;
for(size_t byte = 0; byte < size; ++byte) {
remainder ^= message[byte];
for(uint8_t bit = 0; bit < 8; ++bit) {
if(remainder & 0x80) {
remainder = (remainder << 1) ^ polynomial;
} else {
remainder = (remainder << 1);
}
}
}
return remainder;
}
uint8_t subghz_protocol_blocks_crc8le(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init) {
uint8_t remainder = subghz_protocol_blocks_reverse_key(init, 8);
polynomial = subghz_protocol_blocks_reverse_key(polynomial, 8);
for(size_t byte = 0; byte < size; ++byte) {
remainder ^= message[byte];
for(uint8_t bit = 0; bit < 8; ++bit) {
if(remainder & 1) {
remainder = (remainder >> 1) ^ polynomial;
} else {
remainder = (remainder >> 1);
}
}
}
return remainder;
}
uint16_t subghz_protocol_blocks_crc16lsb(
uint8_t const message[],
size_t size,
uint16_t polynomial,
uint16_t init) {
uint16_t remainder = init;
for(size_t byte = 0; byte < size; ++byte) {
remainder ^= message[byte];
for(uint8_t bit = 0; bit < 8; ++bit) {
if(remainder & 1) {
remainder = (remainder >> 1) ^ polynomial;
} else {
remainder = (remainder >> 1);
}
}
}
return remainder;
}
uint16_t subghz_protocol_blocks_crc16(
uint8_t const message[],
size_t size,
uint16_t polynomial,
uint16_t init) {
uint16_t remainder = init;
for(size_t byte = 0; byte < size; ++byte) {
remainder ^= message[byte] << 8;
for(uint8_t bit = 0; bit < 8; ++bit) {
if(remainder & 0x8000) {
remainder = (remainder << 1) ^ polynomial;
} else {
remainder = (remainder << 1);
}
}
}
return remainder;
}
uint8_t subghz_protocol_blocks_lfsr_digest8(
uint8_t const message[],
size_t size,
uint8_t gen,
uint8_t key) {
uint8_t sum = 0;
for(size_t byte = 0; byte < size; ++byte) {
uint8_t data = message[byte];
for(int i = 7; i >= 0; --i) {
// XOR key into sum if data bit is set
if((data >> i) & 1) sum ^= key;
// roll the key right (actually the LSB is dropped here)
// and apply the gen (needs to include the dropped LSB as MSB)
if(key & 1)
key = (key >> 1) ^ gen;
else
key = (key >> 1);
}
}
return sum;
}
uint8_t subghz_protocol_blocks_lfsr_digest8_reflect(
uint8_t const message[],
size_t size,
uint8_t gen,
uint8_t key) {
uint8_t sum = 0;
// Process message from last byte to first byte (reflected)
for(int byte = size - 1; byte >= 0; --byte) {
uint8_t data = message[byte];
// Process individual bits of each byte (reflected)
for(uint8_t i = 0; i < 8; ++i) {
// XOR key into sum if data bit is set
if((data >> i) & 1) {
sum ^= key;
}
// roll the key left (actually the LSB is dropped here)
// and apply the gen (needs to include the dropped lsb as MSB)
if(key & 0x80)
key = (key << 1) ^ gen;
else
key = (key << 1);
}
}
return sum;
}
uint16_t subghz_protocol_blocks_lfsr_digest16(
uint8_t const message[],
size_t size,
uint16_t gen,
uint16_t key) {
uint16_t sum = 0;
for(size_t byte = 0; byte < size; ++byte) {
uint8_t data = message[byte];
for(int8_t i = 7; i >= 0; --i) {
// if data bit is set then xor with key
if((data >> i) & 1) sum ^= key;
// roll the key right (actually the LSB is dropped here)
// and apply the gen (needs to include the dropped LSB as MSB)
if(key & 1)
key = (key >> 1) ^ gen;
else
key = (key >> 1);
}
}
return sum;
}
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t size) {
uint32_t result = 0;
for(size_t i = 0; i < size; ++i) {
result += message[i];
}
return (uint8_t)result;
}
uint8_t subghz_protocol_blocks_parity8(uint8_t byte) {
byte ^= byte >> 4;
byte &= 0xf;
return (0x6996 >> byte) & 1;
}
uint8_t subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t size) {
uint8_t result = 0;
for(size_t i = 0; i < size; ++i) {
result ^= subghz_protocol_blocks_parity8(message[i]);
}
return result;
}
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t size) {
uint8_t result = 0;
for(size_t i = 0; i < size; ++i) {
result ^= message[i];
}
return result;
}

View File

@@ -0,0 +1,222 @@
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#define bit_read(value, bit) (((value) >> (bit)) & 0x01)
#define bit_set(value, bit) \
({ \
__typeof__(value) _one = (1); \
(value) |= (_one << (bit)); \
})
#define bit_clear(value, bit) \
({ \
__typeof__(value) _one = (1); \
(value) &= ~(_one << (bit)); \
})
#define bit_write(value, bit, bitvalue) (bitvalue ? bit_set(value, bit) : bit_clear(value, bit))
#define DURATION_DIFF(x, y) (((x) < (y)) ? ((y) - (x)) : ((x) - (y)))
#ifdef __cplusplus
extern "C" {
#endif
/** Flip the data bitwise
*
* @param key In data
* @param bit_count number of data bits
*
* @return Reverse data
*/
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t bit_count);
/** Get parity the data bitwise
*
* @param key In data
* @param bit_count number of data bits
*
* @return parity
*/
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t bit_count);
/** CRC-4
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial CRC polynomial
* @param init starting crc value
*
* @return CRC value
*/
uint8_t subghz_protocol_blocks_crc4(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init);
/** CRC-7
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial CRC polynomial
* @param init starting crc value
*
* @return CRC value
*/
uint8_t subghz_protocol_blocks_crc7(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init);
/** Generic Cyclic Redundancy Check CRC-8. Example polynomial: 0x31 = x8 + x5 +
* x4 + 1 (x8 is implicit) Example polynomial: 0x80 = x8 + x7 (a normal
* bit-by-bit parity XOR)
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial byte is from x^7 to x^0 (x^8 is implicitly one)
* @param init starting crc value
*
* @return CRC value
*/
uint8_t subghz_protocol_blocks_crc8(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init);
/** "Little-endian" Cyclic Redundancy Check CRC-8 LE Input and output are
* reflected, i.e. least significant bit is shifted in first
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial CRC polynomial
* @param init starting crc value
*
* @return CRC value
*/
uint8_t subghz_protocol_blocks_crc8le(
uint8_t const message[],
size_t size,
uint8_t polynomial,
uint8_t init);
/** CRC-16 LSB. Input and output are reflected, i.e. least significant bit is
* shifted in first. Note that poly and init already need to be reflected
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial CRC polynomial
* @param init starting crc value
*
* @return CRC value
*/
uint16_t subghz_protocol_blocks_crc16lsb(
uint8_t const message[],
size_t size,
uint16_t polynomial,
uint16_t init);
/** CRC-16
*
* @param message array of bytes to check
* @param size number of bytes in message
* @param polynomial CRC polynomial
* @param init starting crc value
*
* @return CRC value
*/
uint16_t subghz_protocol_blocks_crc16(
uint8_t const message[],
size_t size,
uint16_t polynomial,
uint16_t init);
/** Digest-8 by "LFSR-based Toeplitz hash"
*
* @param message bytes of message data
* @param size number of bytes to digest
* @param gen key stream generator, needs to includes the MSB if the
* LFSR is rolling
* @param key initial key
*
* @return digest value
*/
uint8_t subghz_protocol_blocks_lfsr_digest8(
uint8_t const message[],
size_t size,
uint8_t gen,
uint8_t key);
/** Digest-8 by "LFSR-based Toeplitz hash", byte reflect, bit reflect
*
* @param message bytes of message data
* @param size number of bytes to digest
* @param gen key stream generator, needs to includes the MSB if the
* LFSR is rolling
* @param key initial key
*
* @return digest value
*/
uint8_t subghz_protocol_blocks_lfsr_digest8_reflect(
uint8_t const message[],
size_t size,
uint8_t gen,
uint8_t key);
/** Digest-16 by "LFSR-based Toeplitz hash"
*
* @param message bytes of message data
* @param size number of bytes to digest
* @param gen key stream generator, needs to includes the MSB if the
* LFSR is rolling
* @param key initial key
*
* @return digest value
*/
uint16_t subghz_protocol_blocks_lfsr_digest16(
uint8_t const message[],
size_t size,
uint16_t gen,
uint16_t key);
/** Compute Addition of a number of bytes
*
* @param message bytes of message data
* @param size number of bytes to sum
*
* @return summation value
*/
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t size);
/** Compute bit parity of a single byte (8 bits)
*
* @param byte single byte to check
*
* @return 1 odd parity, 0 even parity
*/
uint8_t subghz_protocol_blocks_parity8(uint8_t byte);
/** Compute bit parity of a number of bytes
*
* @param message bytes of message data
* @param size number of bytes to sum
*
* @return 1 odd parity, 0 even parity
*/
uint8_t subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t size);
/** Compute XOR (byte-wide parity) of a number of bytes
*
* @param message bytes of message data
* @param size number of bytes to sum
*
* @return summation value, per bit-position 1 odd parity, 0 even parity
*/
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t size);
#ifdef __cplusplus
}
#endif

View File

@@ -1,7 +1,7 @@
#include "princeton_for_testing.h" #include "princeton_for_testing.h"
#include <furi_hal.h> #include <furi_hal.h>
#include "../blocks/math.h" #include "math.h"
/* /*
* Help * Help

View File

@@ -1,6 +1,8 @@
#pragma once #pragma once
#include "base.h" //#include "base.h"
#include <furi.h>
#include <lib/toolbox/level_duration.h>
/** SubGhzDecoderPrinceton anonymous type */ /** SubGhzDecoderPrinceton anonymous type */
typedef struct SubGhzDecoderPrinceton SubGhzDecoderPrinceton; typedef struct SubGhzDecoderPrinceton SubGhzDecoderPrinceton;

View File

@@ -0,0 +1,30 @@
#include "../subghz_test_app_i.h"
// Generate scene on_enter handlers array
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter,
void (*const subghz_test_scene_on_enter_handlers[])(void*) = {
#include "subghz_test_scene_config.h"
};
#undef ADD_SCENE
// Generate scene on_event handlers array
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event,
bool (*const subghz_test_scene_on_event_handlers[])(void* context, SceneManagerEvent event) = {
#include "subghz_test_scene_config.h"
};
#undef ADD_SCENE
// Generate scene on_exit handlers array
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit,
void (*const subghz_test_scene_on_exit_handlers[])(void* context) = {
#include "subghz_test_scene_config.h"
};
#undef ADD_SCENE
// Initialize scene handlers configuration structure
const SceneManagerHandlers subghz_test_scene_handlers = {
.on_enter_handlers = subghz_test_scene_on_enter_handlers,
.on_event_handlers = subghz_test_scene_on_event_handlers,
.on_exit_handlers = subghz_test_scene_on_exit_handlers,
.scene_num = SubGhzTestSceneNum,
};

View File

@@ -0,0 +1,29 @@
#pragma once
#include <gui/scene_manager.h>
// Generate scene id and total number
#define ADD_SCENE(prefix, name, id) SubGhzTestScene##id,
typedef enum {
#include "subghz_test_scene_config.h"
SubGhzTestSceneNum,
} SubGhzTestScene;
#undef ADD_SCENE
extern const SceneManagerHandlers subghz_test_scene_handlers;
// Generate scene on_enter handlers declaration
#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*);
#include "subghz_test_scene_config.h"
#undef ADD_SCENE
// Generate scene on_event handlers declaration
#define ADD_SCENE(prefix, name, id) \
bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event);
#include "subghz_test_scene_config.h"
#undef ADD_SCENE
// Generate scene on_exit handlers declaration
#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context);
#include "subghz_test_scene_config.h"
#undef ADD_SCENE

View File

@@ -0,0 +1,66 @@
#include "../subghz_test_app_i.h"
void subghz_test_scene_about_widget_callback(GuiButtonType result, InputType type, void* context) {
SubGhzTestApp* app = context;
if(type == InputTypeShort) {
view_dispatcher_send_custom_event(app->view_dispatcher, result);
}
}
void subghz_test_scene_about_on_enter(void* context) {
SubGhzTestApp* app = context;
FuriString* temp_str;
temp_str = furi_string_alloc();
furi_string_printf(temp_str, "\e#%s\n", "Information");
furi_string_cat_printf(temp_str, "Version: %s\n", SUBGHZ_TEST_VERSION_APP);
furi_string_cat_printf(temp_str, "Developed by: %s\n", SUBGHZ_TEST_DEVELOPED);
furi_string_cat_printf(temp_str, "Github: %s\n\n", SUBGHZ_TEST_GITHUB);
furi_string_cat_printf(temp_str, "\e#%s\n", "Description");
furi_string_cat_printf(
temp_str,
"This application is designed\nto test the functionality of the\nbuilt-in CC1101 module.\n\n");
widget_add_text_box_element(
app->widget,
0,
0,
128,
14,
AlignCenter,
AlignBottom,
"\e#\e! \e!\n",
false);
widget_add_text_box_element(
app->widget,
0,
2,
128,
14,
AlignCenter,
AlignBottom,
"\e#\e! Sub-Ghz Test \e!\n",
false);
widget_add_text_scroll_element(app->widget, 0, 16, 128, 50, furi_string_get_cstr(temp_str));
furi_string_free(temp_str);
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewWidget);
}
bool subghz_test_scene_about_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
bool consumed = false;
UNUSED(app);
UNUSED(event);
return consumed;
}
void subghz_test_scene_about_on_exit(void* context) {
SubGhzTestApp* app = context;
// Clear views
widget_reset(app->widget);
}

View File

@@ -0,0 +1,29 @@
#include "../subghz_test_app_i.h"
void subghz_test_scene_carrier_callback(SubGhzTestCarrierEvent event, void* context) {
furi_assert(context);
SubGhzTestApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, event);
}
void subghz_test_scene_carrier_on_enter(void* context) {
SubGhzTestApp* app = context;
subghz_test_carrier_set_callback(
app->subghz_test_carrier, subghz_test_scene_carrier_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewCarrier);
}
bool subghz_test_scene_carrier_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzTestCarrierEventOnlyRx) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneShowOnlyRx);
return true;
}
}
return false;
}
void subghz_test_scene_carrier_on_exit(void* context) {
UNUSED(context);
}

View File

@@ -0,0 +1,6 @@
ADD_SCENE(subghz_test, start, Start)
ADD_SCENE(subghz_test, about, About)
ADD_SCENE(subghz_test, carrier, Carrier)
ADD_SCENE(subghz_test, packet, Packet)
ADD_SCENE(subghz_test, static, Static)
ADD_SCENE(subghz_test, show_only_rx, ShowOnlyRx)

View File

@@ -0,0 +1,29 @@
#include "../subghz_test_app_i.h"
void subghz_test_scene_packet_callback(SubGhzTestPacketEvent event, void* context) {
furi_assert(context);
SubGhzTestApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, event);
}
void subghz_test_scene_packet_on_enter(void* context) {
SubGhzTestApp* app = context;
subghz_test_packet_set_callback(
app->subghz_test_packet, subghz_test_scene_packet_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewPacket);
}
bool subghz_test_scene_packet_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzTestPacketEventOnlyRx) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneShowOnlyRx);
return true;
}
}
return false;
}
void subghz_test_scene_packet_on_exit(void* context) {
UNUSED(context);
}

View File

@@ -0,0 +1,49 @@
#include "../subghz_test_app_i.h"
#include <subghz_test_icons.h>
void subghz_test_scene_show_only_rx_popup_callback(void* context) {
SubGhzTestApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, SubGhzTestCustomEventSceneShowOnlyRX);
}
void subghz_test_scene_show_only_rx_on_enter(void* context) {
SubGhzTestApp* app = context;
// Setup view
Popup* popup = app->popup;
const char* header_text = "Transmission is blocked";
const char* message_text = "Transmission on\nthis frequency is\nrestricted in\nyour region";
if(!furi_hal_region_is_provisioned()) {
header_text = "Firmware update needed";
message_text = "Please update\nfirmware before\nusing this feature\nflipp.dev/upd";
}
popup_set_header(popup, header_text, 63, 3, AlignCenter, AlignTop);
popup_set_text(popup, message_text, 0, 17, AlignLeft, AlignTop);
popup_set_icon(popup, 72, 17, &I_DolphinCommon_56x48);
popup_set_timeout(popup, 1500);
popup_set_context(popup, app);
popup_set_callback(popup, subghz_test_scene_show_only_rx_popup_callback);
popup_enable_timeout(popup);
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewPopup);
}
bool subghz_test_scene_show_only_rx_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzTestCustomEventSceneShowOnlyRX) {
scene_manager_previous_scene(app->scene_manager);
return true;
}
}
return false;
}
void subghz_test_scene_show_only_rx_on_exit(void* context) {
SubGhzTestApp* app = context;
Popup* popup = app->popup;
popup_reset(popup);
}

View File

@@ -0,0 +1,77 @@
#include "../subghz_test_app_i.h"
typedef enum {
SubmenuIndexSubGhzTestCarrier,
SubmenuIndexSubGhzTestPacket,
SubmenuIndexSubGhzTestStatic,
SubmenuIndexSubGhzTestAbout,
} SubmenuIndex;
void subghz_test_scene_start_submenu_callback(void* context, uint32_t index) {
SubGhzTestApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, index);
}
void subghz_test_scene_start_on_enter(void* context) {
SubGhzTestApp* app = context;
Submenu* submenu = app->submenu;
submenu_add_item(
submenu,
"Carrier",
SubmenuIndexSubGhzTestCarrier,
subghz_test_scene_start_submenu_callback,
app);
submenu_add_item(
submenu,
"Packet",
SubmenuIndexSubGhzTestPacket,
subghz_test_scene_start_submenu_callback,
app);
submenu_add_item(
submenu,
"Static",
SubmenuIndexSubGhzTestStatic,
subghz_test_scene_start_submenu_callback,
app);
submenu_add_item(
submenu,
"About",
SubmenuIndexSubGhzTestAbout,
subghz_test_scene_start_submenu_callback,
app);
submenu_set_selected_item(
submenu, scene_manager_get_scene_state(app->scene_manager, SubGhzTestSceneStart));
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewSubmenu);
}
bool subghz_test_scene_start_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
bool consumed = false;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubmenuIndexSubGhzTestAbout) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneAbout);
consumed = true;
} else if(event.event == SubmenuIndexSubGhzTestCarrier) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneCarrier);
consumed = true;
} else if(event.event == SubmenuIndexSubGhzTestPacket) {
scene_manager_next_scene(app->scene_manager, SubGhzTestScenePacket);
consumed = true;
} else if(event.event == SubmenuIndexSubGhzTestStatic) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneStatic);
consumed = true;
}
scene_manager_set_scene_state(app->scene_manager, SubGhzTestSceneStart, event.event);
}
return consumed;
}
void subghz_test_scene_start_on_exit(void* context) {
SubGhzTestApp* app = context;
submenu_reset(app->submenu);
}

View File

@@ -0,0 +1,29 @@
#include "../subghz_test_app_i.h"
void subghz_test_scene_static_callback(SubGhzTestStaticEvent event, void* context) {
furi_assert(context);
SubGhzTestApp* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, event);
}
void subghz_test_scene_static_on_enter(void* context) {
SubGhzTestApp* app = context;
subghz_test_static_set_callback(
app->subghz_test_static, subghz_test_scene_static_callback, app);
view_dispatcher_switch_to_view(app->view_dispatcher, SubGhzTestViewStatic);
}
bool subghz_test_scene_static_on_event(void* context, SceneManagerEvent event) {
SubGhzTestApp* app = context;
if(event.type == SceneManagerEventTypeCustom) {
if(event.event == SubGhzTestStaticEventOnlyRx) {
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneShowOnlyRx);
return true;
}
}
return false;
}
void subghz_test_scene_static_on_exit(void* context) {
UNUSED(context);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

View File

@@ -0,0 +1,139 @@
#include "subghz_test_app_i.h"
#include <furi.h>
#include <furi_hal.h>
static bool subghz_test_app_custom_event_callback(void* context, uint32_t event) {
furi_assert(context);
SubGhzTestApp* app = context;
return scene_manager_handle_custom_event(app->scene_manager, event);
}
static bool subghz_test_app_back_event_callback(void* context) {
furi_assert(context);
SubGhzTestApp* app = context;
return scene_manager_handle_back_event(app->scene_manager);
}
static void subghz_test_app_tick_event_callback(void* context) {
furi_assert(context);
SubGhzTestApp* app = context;
scene_manager_handle_tick_event(app->scene_manager);
}
SubGhzTestApp* subghz_test_app_alloc() {
SubGhzTestApp* app = malloc(sizeof(SubGhzTestApp));
// GUI
app->gui = furi_record_open(RECORD_GUI);
// View Dispatcher
app->view_dispatcher = view_dispatcher_alloc();
app->scene_manager = scene_manager_alloc(&subghz_test_scene_handlers, app);
view_dispatcher_enable_queue(app->view_dispatcher);
view_dispatcher_set_event_callback_context(app->view_dispatcher, app);
view_dispatcher_set_custom_event_callback(
app->view_dispatcher, subghz_test_app_custom_event_callback);
view_dispatcher_set_navigation_event_callback(
app->view_dispatcher, subghz_test_app_back_event_callback);
view_dispatcher_set_tick_event_callback(
app->view_dispatcher, subghz_test_app_tick_event_callback, 100);
view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
// Open Notification record
app->notifications = furi_record_open(RECORD_NOTIFICATION);
// SubMenu
app->submenu = submenu_alloc();
view_dispatcher_add_view(
app->view_dispatcher, SubGhzTestViewSubmenu, submenu_get_view(app->submenu));
// Widget
app->widget = widget_alloc();
view_dispatcher_add_view(
app->view_dispatcher, SubGhzTestViewWidget, widget_get_view(app->widget));
// Popup
app->popup = popup_alloc();
view_dispatcher_add_view(
app->view_dispatcher, SubGhzTestViewPopup, popup_get_view(app->popup));
// Carrier Test Module
app->subghz_test_carrier = subghz_test_carrier_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
SubGhzTestViewCarrier,
subghz_test_carrier_get_view(app->subghz_test_carrier));
// Packet Test
app->subghz_test_packet = subghz_test_packet_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
SubGhzTestViewPacket,
subghz_test_packet_get_view(app->subghz_test_packet));
// Static send
app->subghz_test_static = subghz_test_static_alloc();
view_dispatcher_add_view(
app->view_dispatcher,
SubGhzTestViewStatic,
subghz_test_static_get_view(app->subghz_test_static));
scene_manager_next_scene(app->scene_manager, SubGhzTestSceneStart);
return app;
}
void subghz_test_app_free(SubGhzTestApp* app) {
furi_assert(app);
// Submenu
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewSubmenu);
submenu_free(app->submenu);
// Widget
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewWidget);
widget_free(app->widget);
// Popup
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewPopup);
popup_free(app->popup);
// Carrier Test
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewCarrier);
subghz_test_carrier_free(app->subghz_test_carrier);
// Packet Test
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewPacket);
subghz_test_packet_free(app->subghz_test_packet);
// Static
view_dispatcher_remove_view(app->view_dispatcher, SubGhzTestViewStatic);
subghz_test_static_free(app->subghz_test_static);
// View dispatcher
view_dispatcher_free(app->view_dispatcher);
scene_manager_free(app->scene_manager);
// Notifications
furi_record_close(RECORD_NOTIFICATION);
app->notifications = NULL;
// Close records
furi_record_close(RECORD_GUI);
free(app);
}
int32_t subghz_test_app(void* p) {
UNUSED(p);
SubGhzTestApp* subghz_test_app = subghz_test_app_alloc();
view_dispatcher_run(subghz_test_app->view_dispatcher);
subghz_test_app_free(subghz_test_app);
return 0;
}

View File

@@ -0,0 +1,5 @@
#include "subghz_test_app_i.h"
#include <furi.h>
#define TAG "SubGhzTest"

View File

@@ -0,0 +1,32 @@
#pragma once
#include "helpers/subghz_test_types.h"
#include "helpers/subghz_test_event.h"
#include "scenes/subghz_test_scene.h"
#include <gui/gui.h>
#include <gui/view_dispatcher.h>
#include <gui/scene_manager.h>
#include <gui/modules/submenu.h>
#include <gui/modules/widget.h>
#include <gui/modules/popup.h>
#include <notification/notification_messages.h>
#include "views/subghz_test_static.h"
#include "views/subghz_test_carrier.h"
#include "views/subghz_test_packet.h"
typedef struct SubGhzTestApp SubGhzTestApp;
struct SubGhzTestApp {
Gui* gui;
ViewDispatcher* view_dispatcher;
SceneManager* scene_manager;
NotificationApp* notifications;
Submenu* submenu;
Widget* widget;
Popup* popup;
SubGhzTestStatic* subghz_test_static;
SubGhzTestCarrier* subghz_test_carrier;
SubGhzTestPacket* subghz_test_packet;
};

View File

@@ -0,0 +1,258 @@
#include "subghz_test_carrier.h"
#include "../subghz_test_app_i.h"
#include "../helpers/subghz_test_frequency.h"
#include <lib/subghz/devices/cc1101_configs.h>
#include <math.h>
#include <furi.h>
#include <furi_hal.h>
#include <input/input.h>
struct SubGhzTestCarrier {
View* view;
FuriTimer* timer;
SubGhzTestCarrierCallback callback;
// const SubGhzDevice* radio_device;
void* context;
};
typedef enum {
SubGhzTestCarrierModelStatusRx,
SubGhzTestCarrierModelStatusTx,
} SubGhzTestCarrierModelStatus;
typedef struct {
uint8_t frequency;
uint32_t real_frequency;
FuriHalSubGhzPath path;
float rssi;
SubGhzTestCarrierModelStatus status;
} SubGhzTestCarrierModel;
void subghz_test_carrier_set_callback(
SubGhzTestCarrier* subghz_test_carrier,
SubGhzTestCarrierCallback callback,
void* context) {
furi_assert(subghz_test_carrier);
furi_assert(callback);
subghz_test_carrier->callback = callback;
subghz_test_carrier->context = context;
}
void subghz_test_carrier_draw(Canvas* canvas, SubGhzTestCarrierModel* model) {
char buffer[64];
canvas_set_color(canvas, ColorBlack);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str(canvas, 0, 8, "CC1101 Basic Test");
canvas_set_font(canvas, FontSecondary);
// Frequency
snprintf(
buffer,
sizeof(buffer),
"Freq: %03ld.%03ld.%03ld Hz",
model->real_frequency / 1000000 % 1000,
model->real_frequency / 1000 % 1000,
model->real_frequency % 1000);
canvas_draw_str(canvas, 0, 20, buffer);
// Path
char* path_name = "Unknown";
if(model->path == FuriHalSubGhzPathIsolate) {
path_name = "isolate";
} else if(model->path == FuriHalSubGhzPath433) {
path_name = "433MHz";
} else if(model->path == FuriHalSubGhzPath315) {
path_name = "315MHz";
} else if(model->path == FuriHalSubGhzPath868) {
path_name = "868MHz";
}
snprintf(buffer, sizeof(buffer), "Path: %d - %s", model->path, path_name);
canvas_draw_str(canvas, 0, 31, buffer);
if(model->status == SubGhzTestCarrierModelStatusRx) {
snprintf(
buffer,
sizeof(buffer),
"RSSI: %ld.%ld dBm",
(int32_t)(model->rssi),
(int32_t)fabs(model->rssi * 10) % 10);
canvas_draw_str(canvas, 0, 42, buffer);
} else {
canvas_draw_str(canvas, 0, 42, "TX");
}
}
bool subghz_test_carrier_input(InputEvent* event, void* context) {
furi_assert(context);
SubGhzTestCarrier* subghz_test_carrier = context;
// const SubGhzDevice* radio_device = subghz_test_carrier->radio_device;
if(event->key == InputKeyBack || event->type != InputTypeShort) {
return false;
}
with_view_model(
subghz_test_carrier->view,
SubGhzTestCarrierModel * model,
{
furi_hal_subghz_idle();
// subghz_devices_idle(radio_device);
if(event->key == InputKeyLeft) {
if(model->frequency > 0) model->frequency--;
} else if(event->key == InputKeyRight) {
if(model->frequency < subghz_frequencies_count_testing - 1) model->frequency++;
} else if(event->key == InputKeyDown) {
if(model->path > 0) model->path--;
} else if(event->key == InputKeyUp) {
if(model->path < FuriHalSubGhzPath868) model->path++;
} else if(event->key == InputKeyOk) {
if(model->status == SubGhzTestCarrierModelStatusTx) {
model->status = SubGhzTestCarrierModelStatusRx;
} else {
model->status = SubGhzTestCarrierModelStatusTx;
}
}
model->real_frequency =
furi_hal_subghz_set_frequency(subghz_frequencies_testing[model->frequency]);
furi_hal_subghz_set_path(model->path);
// model->real_frequency = subghz_devices_set_frequency(
// radio_device, subghz_frequencies_testing[model->frequency]);
if(model->status == SubGhzTestCarrierModelStatusRx) {
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
furi_hal_subghz_rx();
// furi_hal_gpio_init(
// subghz_devices_get_data_gpio(radio_device),
// GpioModeInput,
// GpioPullNo,
// GpioSpeedLow);
// subghz_devices_set_rx(radio_device);
} else {
furi_hal_gpio_init(
&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
furi_hal_gpio_write(&gpio_cc1101_g0, true);
if(!furi_hal_subghz_tx()) {
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
subghz_test_carrier->callback(
SubGhzTestCarrierEventOnlyRx, subghz_test_carrier->context);
}
// if(!subghz_devices_set_tx(radio_device)) {
// furi_hal_gpio_init(
// subghz_devices_get_data_gpio(radio_device),
// GpioModeInput,
// GpioPullNo,
// GpioSpeedLow);
// subghz_test_carrier->callback(
// SubGhzTestCarrierEventOnlyRx, subghz_test_carrier->context);
// }
}
},
true);
return true;
}
void subghz_test_carrier_enter(void* context) {
furi_assert(context);
SubGhzTestCarrier* subghz_test_carrier = context;
// furi_assert(subghz_test_carrier->radio_device);
// const SubGhzDevice* radio_device = subghz_test_carrier->radio_device;
furi_hal_subghz_reset();
furi_hal_subghz_load_custom_preset(subghz_device_cc1101_preset_ook_650khz_async_regs);
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
// subghz_devices_reset(radio_device);
// subghz_devices_load_preset(radio_device, FuriHalSubGhzPresetOok650Async, NULL);
// furi_hal_gpio_init(
// subghz_devices_get_data_gpio(radio_device), GpioModeInput, GpioPullNo, GpioSpeedLow);
with_view_model(
subghz_test_carrier->view,
SubGhzTestCarrierModel * model,
{
model->frequency = subghz_frequencies_433_92_testing; // 433
model->real_frequency =
furi_hal_subghz_set_frequency(subghz_frequencies_testing[model->frequency]);
// model->real_frequency = subghz_devices_set_frequency(
// radio_device, subghz_frequencies_testing[model->frequency]);
model->path = FuriHalSubGhzPathIsolate; // isolate
model->rssi = 0.0f;
model->status = SubGhzTestCarrierModelStatusRx;
},
true);
furi_hal_subghz_rx();
// subghz_devices_set_rx(radio_device);
furi_timer_start(subghz_test_carrier->timer, furi_kernel_get_tick_frequency() / 4);
}
void subghz_test_carrier_exit(void* context) {
furi_assert(context);
SubGhzTestCarrier* subghz_test_carrier = context;
furi_timer_stop(subghz_test_carrier->timer);
// Reinitialize IC to default state
furi_hal_subghz_sleep();
// subghz_devices_sleep(subghz_test_carrier->radio_device);
}
void subghz_test_carrier_rssi_timer_callback(void* context) {
furi_assert(context);
SubGhzTestCarrier* subghz_test_carrier = context;
with_view_model(
subghz_test_carrier->view,
SubGhzTestCarrierModel * model,
{
if(model->status == SubGhzTestCarrierModelStatusRx) {
model->rssi = furi_hal_subghz_get_rssi();
// model->rssi = subghz_devices_get_rssi(subghz_test_carrier->radio_device);
}
},
false);
}
SubGhzTestCarrier* subghz_test_carrier_alloc() {
SubGhzTestCarrier* subghz_test_carrier = malloc(sizeof(SubGhzTestCarrier));
// View allocation and configuration
subghz_test_carrier->view = view_alloc();
view_allocate_model(
subghz_test_carrier->view, ViewModelTypeLocking, sizeof(SubGhzTestCarrierModel));
view_set_context(subghz_test_carrier->view, subghz_test_carrier);
view_set_draw_callback(subghz_test_carrier->view, (ViewDrawCallback)subghz_test_carrier_draw);
view_set_input_callback(subghz_test_carrier->view, subghz_test_carrier_input);
view_set_enter_callback(subghz_test_carrier->view, subghz_test_carrier_enter);
view_set_exit_callback(subghz_test_carrier->view, subghz_test_carrier_exit);
subghz_test_carrier->timer = furi_timer_alloc(
subghz_test_carrier_rssi_timer_callback, FuriTimerTypePeriodic, subghz_test_carrier);
return subghz_test_carrier;
}
void subghz_test_carrier_free(SubGhzTestCarrier* subghz_test_carrier) {
furi_assert(subghz_test_carrier);
furi_timer_free(subghz_test_carrier->timer);
view_free(subghz_test_carrier->view);
free(subghz_test_carrier);
}
View* subghz_test_carrier_get_view(SubGhzTestCarrier* subghz_test_carrier) {
furi_assert(subghz_test_carrier);
return subghz_test_carrier->view;
}
// void subghz_test_carrier_set_radio(
// SubGhzTestCarrier* subghz_test_carrier,
// const SubGhzDevice* radio_device) {
// furi_assert(subghz_test_carrier);
// subghz_test_carrier->radio_device = radio_device;
// }

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include <gui/view.h> #include <gui/view.h>
// #include <lib/subghz/devices/devices.h>
typedef enum { typedef enum {
SubGhzTestCarrierEventOnlyRx, SubGhzTestCarrierEventOnlyRx,
@@ -20,3 +21,7 @@ SubGhzTestCarrier* subghz_test_carrier_alloc();
void subghz_test_carrier_free(SubGhzTestCarrier* subghz_test_carrier); void subghz_test_carrier_free(SubGhzTestCarrier* subghz_test_carrier);
View* subghz_test_carrier_get_view(SubGhzTestCarrier* subghz_test_carrier); View* subghz_test_carrier_get_view(SubGhzTestCarrier* subghz_test_carrier);
// void subghz_test_carrier_set_radio(
// SubGhzTestCarrier* subghz_test_carrier,
// const SubGhzDevice* radio_device);

View File

@@ -1,13 +1,14 @@
#include "subghz_test_packet.h" #include "subghz_test_packet.h"
#include "../subghz_i.h" #include "../subghz_test_app_i.h"
#include "../helpers/subghz_testing.h" #include "../helpers/subghz_test_frequency.h"
#include <lib/subghz/devices/cc1101_configs.h>
#include <math.h> #include <math.h>
#include <furi.h> #include <furi.h>
#include <furi_hal.h> #include <furi_hal.h>
#include <input/input.h> #include <input/input.h>
#include <toolbox/level_duration.h> #include <toolbox/level_duration.h>
#include <lib/subghz/protocols/princeton_for_testing.h> #include "../protocol/princeton_for_testing.h"
#define SUBGHZ_TEST_PACKET_COUNT 500 #define SUBGHZ_TEST_PACKET_COUNT 500
@@ -55,7 +56,6 @@ static void subghz_test_packet_rx_callback(bool level, uint32_t duration, void*
subghz_decoder_princeton_for_testing_parse(instance->decoder, level, duration); subghz_decoder_princeton_for_testing_parse(instance->decoder, level, duration);
} }
//todo
static void subghz_test_packet_rx_pt_callback(SubGhzDecoderPrinceton* parser, void* context) { static void subghz_test_packet_rx_pt_callback(SubGhzDecoderPrinceton* parser, void* context) {
UNUSED(parser); UNUSED(parser);
furi_assert(context); furi_assert(context);
@@ -194,7 +194,7 @@ void subghz_test_packet_enter(void* context) {
SubGhzTestPacket* instance = context; SubGhzTestPacket* instance = context;
furi_hal_subghz_reset(); furi_hal_subghz_reset();
furi_hal_subghz_load_preset(FuriHalSubGhzPresetOok650Async); furi_hal_subghz_load_custom_preset(subghz_device_cc1101_preset_ook_650khz_async_regs);
with_view_model( with_view_model(
instance->view, instance->view,

View File

@@ -1,13 +1,14 @@
#include "subghz_test_static.h" #include "subghz_test_static.h"
#include "../subghz_i.h" #include "../subghz_test_app_i.h"
#include "../helpers/subghz_testing.h" #include "../helpers/subghz_test_frequency.h"
#include <lib/subghz/devices/cc1101_configs.h>
#include <math.h> #include <math.h>
#include <furi.h> #include <furi.h>
#include <furi_hal.h> #include <furi_hal.h>
#include <input/input.h> #include <input/input.h>
#include <notification/notification_messages.h> #include <notification/notification_messages.h>
#include <lib/subghz/protocols/princeton_for_testing.h> #include "../protocol/princeton_for_testing.h"
#define TAG "SubGhzTestStatic" #define TAG "SubGhzTestStatic"
@@ -141,11 +142,10 @@ void subghz_test_static_enter(void* context) {
SubGhzTestStatic* instance = context; SubGhzTestStatic* instance = context;
furi_hal_subghz_reset(); furi_hal_subghz_reset();
furi_hal_subghz_load_preset(FuriHalSubGhzPresetOok650Async); furi_hal_subghz_load_custom_preset(subghz_device_cc1101_preset_ook_650khz_async_regs);
furi_hal_gpio_init( furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
furi_hal_subghz.cc1101_g0_pin, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow); furi_hal_gpio_write(&gpio_cc1101_g0, false);
furi_hal_gpio_write(furi_hal_subghz.cc1101_g0_pin, false);
instance->status_tx = SubGhzTestStaticStatusIDLE; instance->status_tx = SubGhzTestStaticStatusIDLE;
with_view_model( with_view_model(

View File

@@ -10,6 +10,8 @@
#define LINES_ON_SCREEN 6 #define LINES_ON_SCREEN 6
#define COLUMNS_ON_SCREEN 21 #define COLUMNS_ON_SCREEN 21
#define TAG "UartEcho"
#define DEFAULT_BAUD_RATE 230400
typedef struct UartDumpModel UartDumpModel; typedef struct UartDumpModel UartDumpModel;
@@ -179,7 +181,7 @@ static int32_t uart_echo_worker(void* context) {
return 0; return 0;
} }
static UartEchoApp* uart_echo_app_alloc() { static UartEchoApp* uart_echo_app_alloc(uint32_t baudrate) {
UartEchoApp* app = malloc(sizeof(UartEchoApp)); UartEchoApp* app = malloc(sizeof(UartEchoApp));
app->rx_stream = furi_stream_buffer_alloc(2048, 1); app->rx_stream = furi_stream_buffer_alloc(2048, 1);
@@ -220,7 +222,7 @@ static UartEchoApp* uart_echo_app_alloc() {
// Enable uart listener // Enable uart listener
furi_hal_console_disable(); furi_hal_console_disable();
furi_hal_uart_set_br(FuriHalUartIdUSART1, 115200); furi_hal_uart_set_br(FuriHalUartIdUSART1, baudrate);
furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, uart_echo_on_irq_cb, app); furi_hal_uart_set_irq_cb(FuriHalUartIdUSART1, uart_echo_on_irq_cb, app);
return app; return app;
@@ -263,8 +265,18 @@ static void uart_echo_app_free(UartEchoApp* app) {
} }
int32_t uart_echo_app(void* p) { int32_t uart_echo_app(void* p) {
UNUSED(p); uint32_t baudrate = DEFAULT_BAUD_RATE;
UartEchoApp* app = uart_echo_app_alloc(); if(p) {
const char* baudrate_str = p;
if(sscanf(baudrate_str, "%lu", &baudrate) != 1) {
FURI_LOG_E(TAG, "Invalid baudrate: %s", baudrate_str);
baudrate = DEFAULT_BAUD_RATE;
}
}
FURI_LOG_I(TAG, "Using baudrate: %lu", baudrate);
UartEchoApp* app = uart_echo_app_alloc(baudrate);
view_dispatcher_run(app->view_dispatcher); view_dispatcher_run(app->view_dispatcher);
uart_echo_app_free(app); uart_echo_app_free(app);
return 0; return 0;

View File

@@ -3,7 +3,9 @@ App(
apptype=FlipperAppType.STARTUP, apptype=FlipperAppType.STARTUP,
entry_point="unit_tests_on_system_start", entry_point="unit_tests_on_system_start",
cdefines=["APP_UNIT_TESTS"], cdefines=["APP_UNIT_TESTS"],
requires=["system_settings"],
provides=["delay_test"], provides=["delay_test"],
resources="resources",
order=100, order=100,
) )

View File

@@ -28,7 +28,7 @@ void bt_test_alloc() {
} }
void bt_test_free() { void bt_test_free() {
furi_assert(bt_test); furi_check(bt_test);
free(bt_test->nvm_ram_buff_ref); free(bt_test->nvm_ram_buff_ref);
free(bt_test->nvm_ram_buff_dut); free(bt_test->nvm_ram_buff_dut);
bt_keys_storage_free(bt_test->bt_keys_storage); bt_keys_storage_free(bt_test->bt_keys_storage);
@@ -89,7 +89,7 @@ static void bt_test_keys_remove_test_file() {
} }
MU_TEST(bt_test_keys_storage_serial_profile) { MU_TEST(bt_test_keys_storage_serial_profile) {
furi_assert(bt_test); furi_check(bt_test);
bt_test_keys_remove_test_file(); bt_test_keys_remove_test_file();
bt_test_keys_storage_profile(); bt_test_keys_storage_profile();

View File

@@ -0,0 +1,32 @@
#include <dialogs/dialogs.h>
#include "../minunit.h"
MU_TEST(test_dialog_file_browser_set_basic_options_should_init_all_fields) {
mu_assert(
sizeof(DialogsFileBrowserOptions) == 28,
"Changes to `DialogsFileBrowserOptions` should also be reflected in `dialog_file_browser_set_basic_options`");
DialogsFileBrowserOptions options;
dialog_file_browser_set_basic_options(&options, ".fap", NULL);
// note: this assertions can safely be changed, their primary purpose is to remind the maintainer
// to update `dialog_file_browser_set_basic_options` by including all structure fields in it
mu_assert_string_eq(".fap", options.extension);
mu_assert_null(options.base_path);
mu_assert(options.skip_assets, "`skip_assets` should default to `true");
mu_assert(options.hide_dot_files, "`hide_dot_files` should default to `true");
mu_assert_null(options.icon);
mu_assert(options.hide_ext, "`hide_ext` should default to `true");
mu_assert_null(options.item_loader_callback);
mu_assert_null(options.item_loader_context);
}
MU_TEST_SUITE(dialogs_file_browser_options) {
MU_RUN_TEST(test_dialog_file_browser_set_basic_options_should_init_all_fields);
}
int run_minunit_test_dialogs_file_browser_options() {
MU_RUN_SUITE(dialogs_file_browser_options);
return MU_EXIT_CODE;
}

View File

@@ -26,7 +26,6 @@ void test_furi_memmgr() {
mu_assert_int_eq(66, ((uint8_t*)ptr)[i]); mu_assert_int_eq(66, ((uint8_t*)ptr)[i]);
} }
// TODO: fix realloc to copy only old size, and write testcase that leftover of reallocated memory is zero-initialized
free(ptr); free(ptr);
// allocate and zero-initialize array (calloc) // allocate and zero-initialize array (calloc)

View File

@@ -69,7 +69,7 @@ MU_TEST(mu_test_furi_string_mem) {
mu_check(string != NULL); mu_check(string != NULL);
mu_check(!furi_string_empty(string)); mu_check(!furi_string_empty(string));
// TODO: how to test furi_string_reserve? // TODO FL-3493: how to test furi_string_reserve?
// test furi_string_reset // test furi_string_reset
furi_string_reset(string); furi_string_reset(string);

View File

@@ -0,0 +1,602 @@
#include <stdio.h>
#include <furi.h>
#include <furi_hal.h>
#include "../minunit.h"
static const uint8_t key_ctr_1[32] = {
0x77, 0x6B, 0xEF, 0xF2, 0x85, 0x1D, 0xB0, 0x6F, 0x4C, 0x8A, 0x05, 0x42, 0xC8, 0x69, 0x6F, 0x6C,
0x6A, 0x81, 0xAF, 0x1E, 0xEC, 0x96, 0xB4, 0xD3, 0x7F, 0xC1, 0xD6, 0x89, 0xE6, 0xC1, 0xC1, 0x04,
};
static const uint8_t iv_ctr_1[16] = {
0x00,
0x00,
0x00,
0x60,
0xDB,
0x56,
0x72,
0xC9,
0x7A,
0xA8,
0xF0,
0xB2,
0x00,
0x00,
0x00,
0x01,
};
static const uint8_t pt_ctr_1[16] = {
0x53,
0x69,
0x6E,
0x67,
0x6C,
0x65,
0x20,
0x62,
0x6C,
0x6F,
0x63,
0x6B,
0x20,
0x6D,
0x73,
0x67,
};
static const uint8_t tv_ctr_ct_1[16] = {
0x14,
0x5A,
0xD0,
0x1D,
0xBF,
0x82,
0x4E,
0xC7,
0x56,
0x08,
0x63,
0xDC,
0x71,
0xE3,
0xE0,
0xC0,
};
static const uint8_t key_ctr_2[32] = {
0x77, 0x6B, 0xEF, 0xF2, 0x85, 0x1D, 0xB0, 0x6F, 0x4C, 0x8A, 0x05, 0x42, 0xC8, 0x69, 0x6F, 0x6C,
0x6A, 0x81, 0xAF, 0x1E, 0xEC, 0x96, 0xB4, 0xD3, 0x7F, 0xC1, 0xD6, 0x89, 0xE6, 0xC1, 0xC1, 0x04,
};
static const uint8_t iv_ctr_2[16] = {
0x00,
0x00,
0x00,
0x60,
0xDB,
0x56,
0x72,
0xC9,
0x7A,
0xA8,
0xF0,
0xB2,
0x00,
0x00,
0x00,
0x01,
};
static const uint8_t pt_ctr_2[0] = {};
//static const uint8_t tv_ctr_ct_2[0] = {};
static const uint8_t key_ctr_3[32] = {
0xF6, 0xD6, 0x6D, 0x6B, 0xD5, 0x2D, 0x59, 0xBB, 0x07, 0x96, 0x36, 0x58, 0x79, 0xEF, 0xF8, 0x86,
0xC6, 0x6D, 0xD5, 0x1A, 0x5B, 0x6A, 0x99, 0x74, 0x4B, 0x50, 0x59, 0x0C, 0x87, 0xA2, 0x38, 0x84,
};
static const uint8_t iv_ctr_3[16] = {
0x00,
0xFA,
0xAC,
0x24,
0xC1,
0x58,
0x5E,
0xF1,
0x5A,
0x43,
0xD8,
0x75,
0x00,
0x00,
0x00,
0x01,
};
static const uint8_t pt_ctr_3[32] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
};
static const uint8_t tv_ctr_ct_3[32] = {
0xF0, 0x5E, 0x23, 0x1B, 0x38, 0x94, 0x61, 0x2C, 0x49, 0xEE, 0x00, 0x0B, 0x80, 0x4E, 0xB2, 0xA9,
0xB8, 0x30, 0x6B, 0x50, 0x8F, 0x83, 0x9D, 0x6A, 0x55, 0x30, 0x83, 0x1D, 0x93, 0x44, 0xAF, 0x1C,
};
static const uint8_t key_ctr_4[32] = {
0xFF, 0x7A, 0x61, 0x7C, 0xE6, 0x91, 0x48, 0xE4, 0xF1, 0x72, 0x6E, 0x2F, 0x43, 0x58, 0x1D, 0xE2,
0xAA, 0x62, 0xD9, 0xF8, 0x05, 0x53, 0x2E, 0xDF, 0xF1, 0xEE, 0xD6, 0x87, 0xFB, 0x54, 0x15, 0x3D,
};
static const uint8_t iv_ctr_4[16] = {
0x00,
0x1C,
0xC5,
0xB7,
0x51,
0xA5,
0x1D,
0x70,
0xA1,
0xC1,
0x11,
0x48,
0x00,
0x00,
0x00,
0x01,
};
static const uint8_t pt_ctr_4[36] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23,
};
static const uint8_t tv_ctr_ct_4[36] = {
0xEB, 0x6C, 0x52, 0x82, 0x1D, 0x0B, 0xBB, 0xF7, 0xCE, 0x75, 0x94, 0x46,
0x2A, 0xCA, 0x4F, 0xAA, 0xB4, 0x07, 0xDF, 0x86, 0x65, 0x69, 0xFD, 0x07,
0xF4, 0x8C, 0xC0, 0xB5, 0x83, 0xD6, 0x07, 0x1F, 0x1E, 0xC0, 0xE6, 0xB8,
};
static const uint8_t key_ctr_5[32] = {
0xFF, 0x7A, 0x61, 0x7C, 0xE6, 0x91, 0x48, 0xE4, 0xF1, 0x72, 0x6E, 0x2F, 0x43, 0x58, 0x1D, 0xE2,
0xAA, 0x62, 0xD9, 0xF8, 0x05, 0x53, 0x2E, 0xDF, 0xF1, 0xEE, 0xD6, 0x87, 0xFB, 0x54, 0x15, 0x3D,
};
static const uint8_t iv_ctr_5[16] = {
0x00,
0x1C,
0xC5,
0xB7,
0x51,
0xA5,
0x1D,
0x70,
0xA1,
0xC1,
0x11,
0x48,
0x00,
0x00,
0x00,
0x01,
};
static const uint8_t pt_ctr_5[0] = {};
//static const uint8_t tv_ctr_ct_5[0] = {};
static const uint8_t key_gcm_1[32] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const uint8_t iv_gcm_1[16] = {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
static const uint8_t pt_gcm_1[0] = {};
//static const uint8_t tv_gcm_ct_1[0] = {};
static const uint8_t aad_gcm_1[0] = {};
static const uint8_t tv_gcm_tag_1[16] = {
0x53,
0x0F,
0x8A,
0xFB,
0xC7,
0x45,
0x36,
0xB9,
0xA9,
0x63,
0xB4,
0xF1,
0xC4,
0xCB,
0x73,
0x8B,
};
static const uint8_t key_gcm_2[32] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const uint8_t iv_gcm_2[16] = {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
static const uint8_t pt_gcm_2[16] = {
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
};
static const uint8_t tv_gcm_ct_2[16] = {
0xCE,
0xA7,
0x40,
0x3D,
0x4D,
0x60,
0x6B,
0x6E,
0x07,
0x4E,
0xC5,
0xD3,
0xBA,
0xF3,
0x9D,
0x18,
};
static const uint8_t aad_gcm_2[0] = {};
static const uint8_t tv_gcm_tag_2[16] = {
0xD0,
0xD1,
0xC8,
0xA7,
0x99,
0x99,
0x6B,
0xF0,
0x26,
0x5B,
0x98,
0xB5,
0xD4,
0x8A,
0xB9,
0x19,
};
static const uint8_t key_gcm_3[32] = {
0xFE, 0xFF, 0xE9, 0x92, 0x86, 0x65, 0x73, 0x1C, 0x6D, 0x6A, 0x8F, 0x94, 0x67, 0x30, 0x83, 0x08,
0xFE, 0xFF, 0xE9, 0x92, 0x86, 0x65, 0x73, 0x1C, 0x6D, 0x6A, 0x8F, 0x94, 0x67, 0x30, 0x83, 0x08,
};
static const uint8_t iv_gcm_3[16] = {
0xCA,
0xFE,
0xBA,
0xBE,
0xFA,
0xCE,
0xDB,
0xAD,
0xDE,
0xCA,
0xF8,
0x88,
0x00,
0x00,
0x00,
0x00,
};
static const uint8_t pt_gcm_3[64] = {
0xD9, 0x31, 0x32, 0x25, 0xF8, 0x84, 0x06, 0xE5, 0xA5, 0x59, 0x09, 0xC5, 0xAF, 0xF5, 0x26, 0x9A,
0x86, 0xA7, 0xA9, 0x53, 0x15, 0x34, 0xF7, 0xDA, 0x2E, 0x4C, 0x30, 0x3D, 0x8A, 0x31, 0x8A, 0x72,
0x1C, 0x3C, 0x0C, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2F, 0xCF, 0x0E, 0x24, 0x49, 0xA6, 0xB5, 0x25,
0xB1, 0x6A, 0xED, 0xF5, 0xAA, 0x0D, 0xE6, 0x57, 0xBA, 0x63, 0x7B, 0x39, 0x1A, 0xAF, 0xD2, 0x55,
};
static const uint8_t tv_gcm_ct_3[64] = {
0x52, 0x2D, 0xC1, 0xF0, 0x99, 0x56, 0x7D, 0x07, 0xF4, 0x7F, 0x37, 0xA3, 0x2A, 0x84, 0x42, 0x7D,
0x64, 0x3A, 0x8C, 0xDC, 0xBF, 0xE5, 0xC0, 0xC9, 0x75, 0x98, 0xA2, 0xBD, 0x25, 0x55, 0xD1, 0xAA,
0x8C, 0xB0, 0x8E, 0x48, 0x59, 0x0D, 0xBB, 0x3D, 0xA7, 0xB0, 0x8B, 0x10, 0x56, 0x82, 0x88, 0x38,
0xC5, 0xF6, 0x1E, 0x63, 0x93, 0xBA, 0x7A, 0x0A, 0xBC, 0xC9, 0xF6, 0x62, 0x89, 0x80, 0x15, 0xAD,
};
static const uint8_t aad_gcm_3[0] = {};
static const uint8_t tv_gcm_tag_3[16] = {
0xB0,
0x94,
0xDA,
0xC5,
0xD9,
0x34,
0x71,
0xBD,
0xEC,
0x1A,
0x50,
0x22,
0x70,
0xE3,
0xCC,
0x6C,
};
static const uint8_t key_gcm_4[32] = {
0xFE, 0xFF, 0xE9, 0x92, 0x86, 0x65, 0x73, 0x1C, 0x6D, 0x6A, 0x8F, 0x94, 0x67, 0x30, 0x83, 0x08,
0xFE, 0xFF, 0xE9, 0x92, 0x86, 0x65, 0x73, 0x1C, 0x6D, 0x6A, 0x8F, 0x94, 0x67, 0x30, 0x83, 0x08,
};
static const uint8_t iv_gcm_4[16] = {
0xCA,
0xFE,
0xBA,
0xBE,
0xFA,
0xCE,
0xDB,
0xAD,
0xDE,
0xCA,
0xF8,
0x88,
0x00,
0x00,
0x00,
0x00,
};
static const uint8_t pt_gcm_4[60] = {
0xD9, 0x31, 0x32, 0x25, 0xF8, 0x84, 0x06, 0xE5, 0xA5, 0x59, 0x09, 0xC5, 0xAF, 0xF5, 0x26,
0x9A, 0x86, 0xA7, 0xA9, 0x53, 0x15, 0x34, 0xF7, 0xDA, 0x2E, 0x4C, 0x30, 0x3D, 0x8A, 0x31,
0x8A, 0x72, 0x1C, 0x3C, 0x0C, 0x95, 0x95, 0x68, 0x09, 0x53, 0x2F, 0xCF, 0x0E, 0x24, 0x49,
0xA6, 0xB5, 0x25, 0xB1, 0x6A, 0xED, 0xF5, 0xAA, 0x0D, 0xE6, 0x57, 0xBA, 0x63, 0x7B, 0x39,
};
static const uint8_t tv_gcm_ct_4[60] = {
0x52, 0x2D, 0xC1, 0xF0, 0x99, 0x56, 0x7D, 0x07, 0xF4, 0x7F, 0x37, 0xA3, 0x2A, 0x84, 0x42,
0x7D, 0x64, 0x3A, 0x8C, 0xDC, 0xBF, 0xE5, 0xC0, 0xC9, 0x75, 0x98, 0xA2, 0xBD, 0x25, 0x55,
0xD1, 0xAA, 0x8C, 0xB0, 0x8E, 0x48, 0x59, 0x0D, 0xBB, 0x3D, 0xA7, 0xB0, 0x8B, 0x10, 0x56,
0x82, 0x88, 0x38, 0xC5, 0xF6, 0x1E, 0x63, 0x93, 0xBA, 0x7A, 0x0A, 0xBC, 0xC9, 0xF6, 0x62,
};
static const uint8_t aad_gcm_4[20] = {
0xFE, 0xED, 0xFA, 0xCE, 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED,
0xFA, 0xCE, 0xDE, 0xAD, 0xBE, 0xEF, 0xAB, 0xAD, 0xDA, 0xD2,
};
static const uint8_t tv_gcm_tag_4[16] = {
0x76,
0xFC,
0x6E,
0xCE,
0x0F,
0x4E,
0x17,
0x68,
0xCD,
0xDF,
0x88,
0x53,
0xBB,
0x2D,
0x55,
0x1B,
};
static void furi_hal_crypto_ctr_setup() {
}
static void furi_hal_crypto_ctr_teardown() {
}
static void furi_hal_crypto_gcm_setup() {
}
static void furi_hal_crypto_gcm_teardown() {
}
MU_TEST(furi_hal_crypto_ctr_1) {
bool ret = false;
uint8_t ct[sizeof(pt_ctr_1)];
ret = furi_hal_crypto_ctr(key_ctr_1, iv_ctr_1, pt_ctr_1, ct, sizeof(pt_ctr_1));
mu_assert(ret, "CTR 1 failed");
mu_assert_mem_eq(tv_ctr_ct_1, ct, sizeof(pt_ctr_1));
}
MU_TEST(furi_hal_crypto_ctr_2) {
bool ret = false;
uint8_t ct[sizeof(pt_ctr_2)];
ret = furi_hal_crypto_ctr(key_ctr_2, iv_ctr_2, pt_ctr_2, ct, sizeof(pt_ctr_2));
mu_assert(ret, "CTR 2 failed");
//mu_assert_mem_eq(tv_ctr_ct_2, ct, sizeof(pt_ctr_2));
}
MU_TEST(furi_hal_crypto_ctr_3) {
bool ret = false;
uint8_t ct[sizeof(pt_ctr_3)];
ret = furi_hal_crypto_ctr(key_ctr_3, iv_ctr_3, pt_ctr_3, ct, sizeof(pt_ctr_3));
mu_assert(ret, "CTR 3 failed");
mu_assert_mem_eq(tv_ctr_ct_3, ct, sizeof(pt_ctr_3));
}
MU_TEST(furi_hal_crypto_ctr_4) {
bool ret = false;
uint8_t ct[sizeof(pt_ctr_4)];
ret = furi_hal_crypto_ctr(key_ctr_4, iv_ctr_4, pt_ctr_4, ct, sizeof(pt_ctr_4));
mu_assert(ret, "CTR 4 failed");
mu_assert_mem_eq(tv_ctr_ct_4, ct, sizeof(pt_ctr_4));
}
MU_TEST(furi_hal_crypto_ctr_5) {
bool ret = false;
uint8_t ct[sizeof(pt_ctr_5)];
ret = furi_hal_crypto_ctr(key_ctr_5, iv_ctr_5, pt_ctr_5, ct, sizeof(pt_ctr_5));
mu_assert(ret, "CTR 5 failed");
//mu_assert_mem_eq(tv_ctr_ct_5, ct, sizeof(pt_ctr_5));
}
MU_TEST(furi_hal_crypto_gcm_1) {
bool ret = false;
uint8_t pt[sizeof(pt_gcm_1)];
uint8_t ct[sizeof(pt_gcm_1)];
uint8_t tag_enc[16];
uint8_t tag_dec[16];
ret = furi_hal_crypto_gcm(
key_gcm_1,
iv_gcm_1,
aad_gcm_1,
sizeof(aad_gcm_1),
pt_gcm_1,
ct,
sizeof(pt_gcm_1),
tag_enc,
false);
mu_assert(ret, "GCM 1 encryption failed");
//mu_assert_mem_eq(tv_gcm_ct_1, ct, sizeof(pt_gcm_1));
mu_assert_mem_eq(tv_gcm_tag_1, tag_enc, 16);
ret = furi_hal_crypto_gcm(
key_gcm_1, iv_gcm_1, aad_gcm_1, sizeof(aad_gcm_1), ct, pt, sizeof(pt_gcm_1), tag_dec, true);
mu_assert(ret, "GCM 1 decryption failed");
//mu_assert_mem_eq(pt_gcm_1, pt, sizeof(pt_gcm_1));
mu_assert_mem_eq(tv_gcm_tag_1, tag_dec, 16);
}
MU_TEST(furi_hal_crypto_gcm_2) {
bool ret = false;
uint8_t pt[sizeof(pt_gcm_2)];
uint8_t ct[sizeof(pt_gcm_2)];
uint8_t tag_enc[16];
uint8_t tag_dec[16];
ret = furi_hal_crypto_gcm(
key_gcm_2,
iv_gcm_2,
aad_gcm_2,
sizeof(aad_gcm_2),
pt_gcm_2,
ct,
sizeof(pt_gcm_2),
tag_enc,
false);
mu_assert(ret, "GCM 2 encryption failed");
mu_assert_mem_eq(tv_gcm_ct_2, ct, sizeof(pt_gcm_2));
mu_assert_mem_eq(tv_gcm_tag_2, tag_enc, 16);
ret = furi_hal_crypto_gcm(
key_gcm_2, iv_gcm_2, aad_gcm_2, sizeof(aad_gcm_2), ct, pt, sizeof(pt_gcm_2), tag_dec, true);
mu_assert(ret, "GCM 2 decryption failed");
mu_assert_mem_eq(pt_gcm_2, pt, sizeof(pt_gcm_2));
mu_assert_mem_eq(tv_gcm_tag_2, tag_dec, 16);
}
MU_TEST(furi_hal_crypto_gcm_3) {
bool ret = false;
uint8_t pt[sizeof(pt_gcm_3)];
uint8_t ct[sizeof(pt_gcm_3)];
uint8_t tag_enc[16];
uint8_t tag_dec[16];
ret = furi_hal_crypto_gcm(
key_gcm_3,
iv_gcm_3,
aad_gcm_3,
sizeof(aad_gcm_3),
pt_gcm_3,
ct,
sizeof(pt_gcm_3),
tag_enc,
false);
mu_assert(ret, "GCM 3 encryption failed");
mu_assert_mem_eq(tv_gcm_ct_3, ct, sizeof(pt_gcm_3));
mu_assert_mem_eq(tv_gcm_tag_3, tag_enc, 16);
ret = furi_hal_crypto_gcm(
key_gcm_3, iv_gcm_3, aad_gcm_3, sizeof(aad_gcm_3), ct, pt, sizeof(pt_gcm_3), tag_dec, true);
mu_assert(ret, "GCM 3 decryption failed");
mu_assert_mem_eq(pt_gcm_3, pt, sizeof(pt_gcm_3));
mu_assert_mem_eq(tv_gcm_tag_3, tag_dec, 16);
}
MU_TEST(furi_hal_crypto_gcm_4) {
bool ret = false;
uint8_t pt[sizeof(pt_gcm_4)];
uint8_t ct[sizeof(pt_gcm_4)];
uint8_t tag_enc[16];
uint8_t tag_dec[16];
ret = furi_hal_crypto_gcm(
key_gcm_4,
iv_gcm_4,
aad_gcm_4,
sizeof(aad_gcm_4),
pt_gcm_4,
ct,
sizeof(pt_gcm_4),
tag_enc,
false);
mu_assert(ret, "GCM 4 encryption failed");
mu_assert_mem_eq(tv_gcm_ct_4, ct, sizeof(pt_gcm_4));
mu_assert_mem_eq(tv_gcm_tag_4, tag_enc, 16);
ret = furi_hal_crypto_gcm(
key_gcm_4, iv_gcm_4, aad_gcm_4, sizeof(aad_gcm_4), ct, pt, sizeof(pt_gcm_4), tag_dec, true);
mu_assert(ret, "GCM 4 decryption failed");
mu_assert_mem_eq(pt_gcm_4, pt, sizeof(pt_gcm_4));
mu_assert_mem_eq(tv_gcm_tag_4, tag_dec, 16);
}
MU_TEST_SUITE(furi_hal_crypto_ctr_test) {
MU_SUITE_CONFIGURE(&furi_hal_crypto_ctr_setup, &furi_hal_crypto_ctr_teardown);
MU_RUN_TEST(furi_hal_crypto_ctr_1);
MU_RUN_TEST(furi_hal_crypto_ctr_2);
MU_RUN_TEST(furi_hal_crypto_ctr_3);
MU_RUN_TEST(furi_hal_crypto_ctr_4);
MU_RUN_TEST(furi_hal_crypto_ctr_5);
}
MU_TEST_SUITE(furi_hal_crypto_gcm_test) {
MU_SUITE_CONFIGURE(&furi_hal_crypto_gcm_setup, &furi_hal_crypto_gcm_teardown);
MU_RUN_TEST(furi_hal_crypto_gcm_1);
MU_RUN_TEST(furi_hal_crypto_gcm_2);
MU_RUN_TEST(furi_hal_crypto_gcm_3);
MU_RUN_TEST(furi_hal_crypto_gcm_4);
}
int run_minunit_test_furi_hal_crypto() {
MU_RUN_SUITE(furi_hal_crypto_ctr_test);
MU_RUN_SUITE(furi_hal_crypto_gcm_test);
return MU_EXIT_CODE;
}

View File

@@ -5,6 +5,11 @@
#include "../minunit.h" #include "../minunit.h"
#define DATA_SIZE 4 #define DATA_SIZE 4
#define EEPROM_ADDRESS 0b10101000
#define EEPROM_ADDRESS_HIGH (EEPROM_ADDRESS | 0b10)
#define EEPROM_SIZE 512
#define EEPROM_PAGE_SIZE 16
#define EEPROM_WRITE_DELAY_MS 6
static void furi_hal_i2c_int_setup() { static void furi_hal_i2c_int_setup() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_power); furi_hal_i2c_acquire(&furi_hal_i2c_handle_power);
@@ -14,6 +19,14 @@ static void furi_hal_i2c_int_teardown() {
furi_hal_i2c_release(&furi_hal_i2c_handle_power); furi_hal_i2c_release(&furi_hal_i2c_handle_power);
} }
static void furi_hal_i2c_ext_setup() {
furi_hal_i2c_acquire(&furi_hal_i2c_handle_external);
}
static void furi_hal_i2c_ext_teardown() {
furi_hal_i2c_release(&furi_hal_i2c_handle_external);
}
MU_TEST(furi_hal_i2c_int_1b) { MU_TEST(furi_hal_i2c_int_1b) {
bool ret = false; bool ret = false;
uint8_t data_one = 0; uint8_t data_one = 0;
@@ -103,14 +116,116 @@ MU_TEST(furi_hal_i2c_int_1b_fail) {
mu_assert(data_one != 0, "9 invalid data"); mu_assert(data_one != 0, "9 invalid data");
} }
MU_TEST(furi_hal_i2c_int_ext_3b) {
bool ret = false;
uint8_t data_many[DATA_SIZE] = {0};
// 3 byte: read
data_many[0] = LP5562_CHANNEL_BLUE_CURRENT_REGISTER;
ret = furi_hal_i2c_tx_ext(
&furi_hal_i2c_handle_power,
LP5562_ADDRESS,
false,
data_many,
1,
FuriHalI2cBeginStart,
FuriHalI2cEndAwaitRestart,
LP5562_I2C_TIMEOUT);
mu_assert(ret, "3 tx failed");
// Send a RESTART condition, then read the 3 bytes one after the other
ret = furi_hal_i2c_rx_ext(
&furi_hal_i2c_handle_power,
LP5562_ADDRESS,
false,
data_many + 1,
1,
FuriHalI2cBeginRestart,
FuriHalI2cEndPause,
LP5562_I2C_TIMEOUT);
mu_assert(ret, "4 rx failed");
mu_assert(data_many[1] != 0, "4 invalid data");
ret = furi_hal_i2c_rx_ext(
&furi_hal_i2c_handle_power,
LP5562_ADDRESS,
false,
data_many + 2,
1,
FuriHalI2cBeginResume,
FuriHalI2cEndPause,
LP5562_I2C_TIMEOUT);
mu_assert(ret, "5 rx failed");
mu_assert(data_many[2] != 0, "5 invalid data");
ret = furi_hal_i2c_rx_ext(
&furi_hal_i2c_handle_power,
LP5562_ADDRESS,
false,
data_many + 3,
1,
FuriHalI2cBeginResume,
FuriHalI2cEndStop,
LP5562_I2C_TIMEOUT);
mu_assert(ret, "6 rx failed");
mu_assert(data_many[3] != 0, "6 invalid data");
}
MU_TEST(furi_hal_i2c_ext_eeprom) {
if(!furi_hal_i2c_is_device_ready(&furi_hal_i2c_handle_external, EEPROM_ADDRESS, 100)) {
printf("no device connected, skipping\r\n");
return;
}
bool ret = false;
uint8_t buffer[EEPROM_SIZE] = {0};
for(size_t page = 0; page < (EEPROM_SIZE / EEPROM_PAGE_SIZE); ++page) {
// Fill page buffer
for(size_t page_byte = 0; page_byte < EEPROM_PAGE_SIZE; ++page_byte) {
// Each byte is its position in the EEPROM modulo 256
uint8_t byte = ((page * EEPROM_PAGE_SIZE) + page_byte) % 256;
buffer[page_byte] = byte;
}
uint8_t address = (page < 16) ? EEPROM_ADDRESS : EEPROM_ADDRESS_HIGH;
ret = furi_hal_i2c_write_mem(
&furi_hal_i2c_handle_external,
address,
page * EEPROM_PAGE_SIZE,
buffer,
EEPROM_PAGE_SIZE,
20);
mu_assert(ret, "EEPROM write failed");
furi_delay_ms(EEPROM_WRITE_DELAY_MS);
}
ret = furi_hal_i2c_read_mem(
&furi_hal_i2c_handle_external, EEPROM_ADDRESS, 0, buffer, EEPROM_SIZE, 100);
mu_assert(ret, "EEPROM read failed");
for(size_t pos = 0; pos < EEPROM_SIZE; ++pos) {
mu_assert_int_eq(pos % 256, buffer[pos]);
}
}
MU_TEST_SUITE(furi_hal_i2c_int_suite) { MU_TEST_SUITE(furi_hal_i2c_int_suite) {
MU_SUITE_CONFIGURE(&furi_hal_i2c_int_setup, &furi_hal_i2c_int_teardown); MU_SUITE_CONFIGURE(&furi_hal_i2c_int_setup, &furi_hal_i2c_int_teardown);
MU_RUN_TEST(furi_hal_i2c_int_1b); MU_RUN_TEST(furi_hal_i2c_int_1b);
MU_RUN_TEST(furi_hal_i2c_int_3b); MU_RUN_TEST(furi_hal_i2c_int_3b);
MU_RUN_TEST(furi_hal_i2c_int_ext_3b);
MU_RUN_TEST(furi_hal_i2c_int_1b_fail); MU_RUN_TEST(furi_hal_i2c_int_1b_fail);
} }
MU_TEST_SUITE(furi_hal_i2c_ext_suite) {
MU_SUITE_CONFIGURE(&furi_hal_i2c_ext_setup, &furi_hal_i2c_ext_teardown);
MU_RUN_TEST(furi_hal_i2c_ext_eeprom);
}
int run_minunit_test_furi_hal() { int run_minunit_test_furi_hal() {
MU_RUN_SUITE(furi_hal_i2c_int_suite); MU_RUN_SUITE(furi_hal_i2c_int_suite);
MU_RUN_SUITE(furi_hal_i2c_ext_suite);
return MU_EXIT_CODE; return MU_EXIT_CODE;
} }

View File

@@ -27,7 +27,7 @@ static void infrared_test_alloc() {
} }
static void infrared_test_free() { static void infrared_test_free() {
furi_assert(test); furi_check(test);
infrared_free_decoder(test->decoder_handler); infrared_free_decoder(test->decoder_handler);
infrared_free_encoder(test->encoder_handler); infrared_free_encoder(test->encoder_handler);
flipper_format_free(test->ff); flipper_format_free(test->ff);
@@ -425,6 +425,7 @@ MU_TEST(infrared_test_decoder_mixed) {
infrared_test_run_decoder(InfraredProtocolSamsung32, 1); infrared_test_run_decoder(InfraredProtocolSamsung32, 1);
infrared_test_run_decoder(InfraredProtocolSIRC, 3); infrared_test_run_decoder(InfraredProtocolSIRC, 3);
infrared_test_run_decoder(InfraredProtocolKaseikyo, 1); infrared_test_run_decoder(InfraredProtocolKaseikyo, 1);
infrared_test_run_decoder(InfraredProtocolRCA, 1);
} }
MU_TEST(infrared_test_decoder_nec) { MU_TEST(infrared_test_decoder_nec) {
@@ -499,6 +500,15 @@ MU_TEST(infrared_test_decoder_kaseikyo) {
infrared_test_run_decoder(InfraredProtocolKaseikyo, 6); infrared_test_run_decoder(InfraredProtocolKaseikyo, 6);
} }
MU_TEST(infrared_test_decoder_rca) {
infrared_test_run_decoder(InfraredProtocolRCA, 1);
infrared_test_run_decoder(InfraredProtocolRCA, 2);
infrared_test_run_decoder(InfraredProtocolRCA, 3);
infrared_test_run_decoder(InfraredProtocolRCA, 4);
infrared_test_run_decoder(InfraredProtocolRCA, 5);
infrared_test_run_decoder(InfraredProtocolRCA, 6);
}
MU_TEST(infrared_test_encoder_decoder_all) { MU_TEST(infrared_test_encoder_decoder_all) {
infrared_test_run_encoder_decoder(InfraredProtocolNEC, 1); infrared_test_run_encoder_decoder(InfraredProtocolNEC, 1);
infrared_test_run_encoder_decoder(InfraredProtocolNECext, 1); infrared_test_run_encoder_decoder(InfraredProtocolNECext, 1);
@@ -509,6 +519,7 @@ MU_TEST(infrared_test_encoder_decoder_all) {
infrared_test_run_encoder_decoder(InfraredProtocolRC5, 1); infrared_test_run_encoder_decoder(InfraredProtocolRC5, 1);
infrared_test_run_encoder_decoder(InfraredProtocolSIRC, 1); infrared_test_run_encoder_decoder(InfraredProtocolSIRC, 1);
infrared_test_run_encoder_decoder(InfraredProtocolKaseikyo, 1); infrared_test_run_encoder_decoder(InfraredProtocolKaseikyo, 1);
infrared_test_run_encoder_decoder(InfraredProtocolRCA, 1);
} }
MU_TEST_SUITE(infrared_test) { MU_TEST_SUITE(infrared_test) {
@@ -527,6 +538,7 @@ MU_TEST_SUITE(infrared_test) {
MU_RUN_TEST(infrared_test_decoder_samsung32); MU_RUN_TEST(infrared_test_decoder_samsung32);
MU_RUN_TEST(infrared_test_decoder_necext1); MU_RUN_TEST(infrared_test_decoder_necext1);
MU_RUN_TEST(infrared_test_decoder_kaseikyo); MU_RUN_TEST(infrared_test_decoder_kaseikyo);
MU_RUN_TEST(infrared_test_decoder_rca);
MU_RUN_TEST(infrared_test_decoder_mixed); MU_RUN_TEST(infrared_test_decoder_mixed);
MU_RUN_TEST(infrared_test_encoder_decoder_all); MU_RUN_TEST(infrared_test_encoder_decoder_all);
} }

View File

@@ -311,7 +311,7 @@ MU_TEST(test_bit_lib_test_parity) {
} }
MU_TEST(test_bit_lib_remove_bit_every_nth) { MU_TEST(test_bit_lib_remove_bit_every_nth) {
// TODO: more tests // TODO FL-3494: more tests
uint8_t data_i[1] = {0b00001111}; uint8_t data_i[1] = {0b00001111};
uint8_t data_o[1] = {0b00011111}; uint8_t data_o[1] = {0b00011111};
size_t length; size_t length;

View File

@@ -22,7 +22,7 @@ MU_TEST(manifest_iteration_test) {
ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(storage); ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(storage);
do { do {
// Open manifest file // Open manifest file
if(!resource_manifest_reader_open(manifest_reader, EXT_PATH("unit_tests/Manifest"))) { if(!resource_manifest_reader_open(manifest_reader, EXT_PATH("unit_tests/Manifest_test"))) {
result = false; result = false;
break; break;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,458 @@
#ifdef FW_CFG_unit_tests
#include <lib/nfc/nfc.h>
#include <lib/nfc/helpers/iso14443_crc.h>
#include <lib/nfc/protocols/iso14443_3a/iso14443_3a.h>
#include <furi/furi.h>
#define NFC_MAX_BUFFER_SIZE (256)
typedef enum {
NfcTransportLogLevelWarning,
NfcTransportLogLevelInfo,
} NfcTransportLogLevel;
FuriMessageQueue* poller_queue = NULL;
FuriMessageQueue* listener_queue = NULL;
typedef enum {
NfcMessageTypeTx,
NfcMessageTypeTimeout,
NfcMessageTypeAbort,
} NfcMessageType;
typedef struct {
uint16_t data_bits;
uint8_t data[NFC_MAX_BUFFER_SIZE];
} NfcMessageData;
typedef struct {
NfcMessageType type;
NfcMessageData data;
} NfcMessage;
typedef enum {
NfcStateIdle,
NfcStateReady,
NfcStateReset,
} NfcState;
typedef enum {
Iso14443_3aColResStatusIdle,
Iso14443_3aColResStatusInProgress,
Iso14443_3aColResStatusDone,
} Iso14443_3aColResStatus;
typedef struct {
Iso14443_3aSensResp sens_resp;
Iso14443_3aSddResp sdd_resp[2];
Iso14443_3aSelResp sel_resp[2];
} Iso14443_3aColResData;
struct Nfc {
NfcState state;
Iso14443_3aColResStatus col_res_status;
Iso14443_3aColResData col_res_data;
NfcEventCallback callback;
void* context;
NfcMode mode;
FuriThread* worker_thread;
};
static void nfc_test_print(
NfcTransportLogLevel log_level,
const char* message,
uint8_t* buffer,
uint16_t bits) {
FuriString* str = furi_string_alloc();
size_t bytes = (bits + 7) / 8;
for(size_t i = 0; i < bytes; i++) {
furi_string_cat_printf(str, " %02X", buffer[i]);
}
if(log_level == NfcTransportLogLevelWarning) {
FURI_LOG_W(message, "%s", furi_string_get_cstr(str));
} else {
FURI_LOG_I(message, "%s", furi_string_get_cstr(str));
}
furi_string_free(str);
}
static void nfc_prepare_col_res_data(
Nfc* instance,
uint8_t* uid,
uint8_t uid_len,
uint8_t* atqa,
uint8_t sak) {
memcpy(instance->col_res_data.sens_resp.sens_resp, atqa, 2);
if(uid_len == 7) {
instance->col_res_data.sdd_resp[0].nfcid[0] = 0x88;
memcpy(&instance->col_res_data.sdd_resp[0].nfcid[1], uid, 3);
uint8_t bss = 0;
for(size_t i = 0; i < 4; i++) {
bss ^= instance->col_res_data.sdd_resp[0].nfcid[i];
}
instance->col_res_data.sdd_resp[0].bss = bss;
instance->col_res_data.sel_resp[0].sak = 0x04;
memcpy(instance->col_res_data.sdd_resp[1].nfcid, &uid[3], 4);
bss = 0;
for(size_t i = 0; i < 4; i++) {
bss ^= instance->col_res_data.sdd_resp[1].nfcid[i];
}
instance->col_res_data.sdd_resp[1].bss = bss;
instance->col_res_data.sel_resp[1].sak = sak;
} else {
furi_crash("Not supporting not 7 bytes");
}
}
Nfc* nfc_alloc() {
Nfc* instance = malloc(sizeof(Nfc));
return instance;
}
void nfc_free(Nfc* instance) {
furi_check(instance);
free(instance);
}
void nfc_config(Nfc* instance, NfcMode mode, NfcTech tech) {
UNUSED(instance);
UNUSED(tech);
instance->mode = mode;
}
void nfc_set_fdt_poll_fc(Nfc* instance, uint32_t fdt_poll_fc) {
UNUSED(instance);
UNUSED(fdt_poll_fc);
}
void nfc_set_fdt_listen_fc(Nfc* instance, uint32_t fdt_listen_fc) {
UNUSED(instance);
UNUSED(fdt_listen_fc);
}
void nfc_set_mask_receive_time_fc(Nfc* instance, uint32_t mask_rx_time_fc) {
UNUSED(instance);
UNUSED(mask_rx_time_fc);
}
void nfc_set_fdt_poll_poll_us(Nfc* instance, uint32_t fdt_poll_poll_us) {
UNUSED(instance);
UNUSED(fdt_poll_poll_us);
}
void nfc_set_guard_time_us(Nfc* instance, uint32_t guard_time_us) {
UNUSED(instance);
UNUSED(guard_time_us);
}
NfcError nfc_iso14443a_listener_set_col_res_data(
Nfc* instance,
uint8_t* uid,
uint8_t uid_len,
uint8_t* atqa,
uint8_t sak) {
furi_check(instance);
furi_check(uid);
furi_check(atqa);
nfc_prepare_col_res_data(instance, uid, uid_len, atqa, sak);
return NfcErrorNone;
}
static int32_t nfc_worker_poller(void* context) {
Nfc* instance = context;
furi_check(instance->callback);
instance->state = NfcStateReady;
NfcCommand command = NfcCommandContinue;
NfcEvent event = {};
while(true) {
event.type = NfcEventTypePollerReady;
command = instance->callback(event, instance->context);
if(command == NfcCommandStop) {
break;
}
}
instance->state = NfcStateIdle;
return 0;
}
static void nfc_worker_listener_pass_col_res(Nfc* instance, uint8_t* rx_data, uint16_t rx_bits) {
furi_check(instance->col_res_status != Iso14443_3aColResStatusDone);
BitBuffer* tx_buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE);
bool processed = false;
if((rx_bits == 7) && (rx_data[0] == 0x52)) {
instance->col_res_status = Iso14443_3aColResStatusInProgress;
bit_buffer_copy_bytes(
tx_buffer,
instance->col_res_data.sens_resp.sens_resp,
sizeof(instance->col_res_data.sens_resp.sens_resp));
nfc_listener_tx(instance, tx_buffer);
processed = true;
} else if(rx_bits == 2 * 8) {
if((rx_data[0] == 0x93) && (rx_data[1] == 0x20)) {
bit_buffer_copy_bytes(
tx_buffer,
(const uint8_t*)&instance->col_res_data.sdd_resp[0],
sizeof(Iso14443_3aSddResp));
nfc_listener_tx(instance, tx_buffer);
processed = true;
} else if((rx_data[0] == 0x95) && (rx_data[1] == 0x20)) {
bit_buffer_copy_bytes(
tx_buffer,
(const uint8_t*)&instance->col_res_data.sdd_resp[1],
sizeof(Iso14443_3aSddResp));
nfc_listener_tx(instance, tx_buffer);
processed = true;
}
} else if(rx_bits == 9 * 8) {
if((rx_data[0] == 0x93) && (rx_data[1] == 0x70)) {
bit_buffer_set_size_bytes(tx_buffer, 1);
bit_buffer_set_byte(tx_buffer, 0, instance->col_res_data.sel_resp[0].sak);
iso14443_crc_append(Iso14443CrcTypeA, tx_buffer);
nfc_listener_tx(instance, tx_buffer);
processed = true;
} else if((rx_data[0] == 0x95) && (rx_data[1] == 0x70)) {
bit_buffer_set_size_bytes(tx_buffer, 1);
bit_buffer_set_byte(tx_buffer, 0, instance->col_res_data.sel_resp[1].sak);
iso14443_crc_append(Iso14443CrcTypeA, tx_buffer);
nfc_listener_tx(instance, tx_buffer);
instance->col_res_status = Iso14443_3aColResStatusDone;
NfcEvent event = {.type = NfcEventTypeListenerActivated};
instance->callback(event, instance->context);
processed = true;
}
}
if(!processed) {
NfcMessage message = {.type = NfcMessageTypeTimeout};
furi_message_queue_put(poller_queue, &message, FuriWaitForever);
}
bit_buffer_free(tx_buffer);
}
static int32_t nfc_worker_listener(void* context) {
Nfc* instance = context;
furi_check(instance->callback);
NfcMessage message = {};
NfcEventData event_data = {};
event_data.buffer = bit_buffer_alloc(NFC_MAX_BUFFER_SIZE);
NfcEvent nfc_event = {.data = event_data};
while(true) {
furi_message_queue_get(listener_queue, &message, FuriWaitForever);
bit_buffer_copy_bits(event_data.buffer, message.data.data, message.data.data_bits);
if((message.data.data[0] == 0x52) && (message.data.data_bits == 7)) {
instance->col_res_status = Iso14443_3aColResStatusIdle;
}
if(message.type == NfcMessageTypeAbort) {
break;
} else if(message.type == NfcMessageTypeTx) {
nfc_test_print(
NfcTransportLogLevelInfo, "RDR", message.data.data, message.data.data_bits);
if(instance->col_res_status != Iso14443_3aColResStatusDone) {
nfc_worker_listener_pass_col_res(
instance, message.data.data, message.data.data_bits);
} else {
instance->state = NfcStateReady;
nfc_event.type = NfcEventTypeRxEnd;
instance->callback(nfc_event, instance->context);
}
}
}
instance->state = NfcStateIdle;
instance->col_res_status = Iso14443_3aColResStatusIdle;
memset(&instance->col_res_data, 0, sizeof(instance->col_res_data));
bit_buffer_free(nfc_event.data.buffer);
return 0;
}
void nfc_start(Nfc* instance, NfcEventCallback callback, void* context) {
furi_check(instance);
furi_check(instance->worker_thread == NULL);
if(instance->mode == NfcModeListener) {
furi_check(listener_queue == NULL);
// Check that poller didn't start
furi_check(poller_queue == NULL);
} else {
furi_check(poller_queue == NULL);
// Check that poller is started after listener
furi_check(listener_queue);
}
instance->callback = callback;
instance->context = context;
if(instance->mode == NfcModeListener) {
listener_queue = furi_message_queue_alloc(4, sizeof(NfcMessage));
} else {
poller_queue = furi_message_queue_alloc(4, sizeof(NfcMessage));
}
instance->worker_thread = furi_thread_alloc();
furi_thread_set_context(instance->worker_thread, instance);
furi_thread_set_priority(instance->worker_thread, FuriThreadPriorityHigh);
furi_thread_set_stack_size(instance->worker_thread, 8 * 1024);
if(instance->mode == NfcModeListener) {
furi_thread_set_name(instance->worker_thread, "NfcWorkerListener");
furi_thread_set_callback(instance->worker_thread, nfc_worker_listener);
} else {
furi_thread_set_name(instance->worker_thread, "NfcWorkerPoller");
furi_thread_set_callback(instance->worker_thread, nfc_worker_poller);
}
furi_thread_start(instance->worker_thread);
}
void nfc_stop(Nfc* instance) {
furi_check(instance);
furi_check(instance->worker_thread);
if(instance->mode == NfcModeListener) {
NfcMessage message = {.type = NfcMessageTypeAbort};
furi_message_queue_put(listener_queue, &message, FuriWaitForever);
furi_thread_join(instance->worker_thread);
furi_message_queue_free(listener_queue);
listener_queue = NULL;
furi_thread_free(instance->worker_thread);
instance->worker_thread = NULL;
} else {
furi_thread_join(instance->worker_thread);
furi_message_queue_free(poller_queue);
poller_queue = NULL;
furi_thread_free(instance->worker_thread);
instance->worker_thread = NULL;
}
}
// Called from worker thread
NfcError nfc_listener_tx(Nfc* instance, const BitBuffer* tx_buffer) {
furi_check(instance);
furi_check(poller_queue);
furi_check(listener_queue);
furi_check(tx_buffer);
NfcMessage message = {};
message.type = NfcMessageTypeTx;
message.data.data_bits = bit_buffer_get_size(tx_buffer);
bit_buffer_write_bytes(tx_buffer, message.data.data, bit_buffer_get_size_bytes(tx_buffer));
furi_message_queue_put(poller_queue, &message, FuriWaitForever);
return NfcErrorNone;
}
NfcError nfc_iso14443a_listener_tx_custom_parity(Nfc* instance, const BitBuffer* tx_buffer) {
return nfc_listener_tx(instance, tx_buffer);
}
NfcError
nfc_poller_trx(Nfc* instance, const BitBuffer* tx_buffer, BitBuffer* rx_buffer, uint32_t fwt) {
furi_check(instance);
furi_check(tx_buffer);
furi_check(rx_buffer);
furi_check(poller_queue);
furi_check(listener_queue);
UNUSED(fwt);
NfcError error = NfcErrorNone;
NfcMessage message = {};
message.type = NfcMessageTypeTx;
message.data.data_bits = bit_buffer_get_size(tx_buffer);
bit_buffer_write_bytes(tx_buffer, message.data.data, bit_buffer_get_size_bytes(tx_buffer));
// Tx
furi_check(furi_message_queue_put(listener_queue, &message, FuriWaitForever) == FuriStatusOk);
// Rx
FuriStatus status = furi_message_queue_get(poller_queue, &message, 50);
if(status == FuriStatusErrorTimeout) {
error = NfcErrorTimeout;
} else if(message.type == NfcMessageTypeTx) {
bit_buffer_copy_bits(rx_buffer, message.data.data, message.data.data_bits);
nfc_test_print(
NfcTransportLogLevelWarning, "TAG", message.data.data, message.data.data_bits);
} else if(message.type == NfcMessageTypeTimeout) {
error = NfcErrorTimeout;
}
return error;
}
NfcError nfc_iso14443a_poller_trx_custom_parity(
Nfc* instance,
const BitBuffer* tx_buffer,
BitBuffer* rx_buffer,
uint32_t fwt) {
return nfc_poller_trx(instance, tx_buffer, rx_buffer, fwt);
}
// Technology specific API
NfcError nfc_iso14443a_poller_trx_short_frame(
Nfc* instance,
NfcIso14443aShortFrame frame,
BitBuffer* rx_buffer,
uint32_t fwt) {
UNUSED(frame);
BitBuffer* tx_buffer = bit_buffer_alloc(32);
bit_buffer_set_size(tx_buffer, 7);
bit_buffer_set_byte(tx_buffer, 0, 0x52);
NfcError error = nfc_poller_trx(instance, tx_buffer, rx_buffer, fwt);
bit_buffer_free(tx_buffer);
return error;
}
NfcError nfc_iso14443a_poller_trx_sdd_frame(
Nfc* instance,
const BitBuffer* tx_buffer,
BitBuffer* rx_buffer,
uint32_t fwt) {
return nfc_poller_trx(instance, tx_buffer, rx_buffer, fwt);
}
NfcError nfc_iso15693_listener_tx_sof(Nfc* instance) {
UNUSED(instance);
return NfcErrorNone;
}
#endif

View File

@@ -0,0 +1,105 @@
Filetype: IR tests file
Version: 1
#
name: decoder_input1
type: raw
data: 1000000 3994 3969 552 1945 551 1945 552 1945 551 1945 552 946 551 947 550 1947 548 951 546 1953 542 979 518 1979 517 981 492 1006 491 1006 492 1006 492 1006 492 2005 492 2005 492 1006 492 2005 492 1006 492 2005 492 1006 492 2006 491
#
name: decoder_expected1
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: 54 00 00 00
repeat: false
#
name: decoder_input2
type: raw
data: 1000000 4055 3941 605 1891 551 1947 550 1946 551 1946 551 947 551 947 550 1947 549 949 548 1951 545 1977 519 1978 519 1979 518 980 518 980 518 980 518 980 518 1979 518 1979 518 981 517 1979 518 980 518 980 518 980 518 980 518
#
name: decoder_expected2
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: F4 00 00 00
repeat: false
#
name: decoder_input3
type: raw
data: 1000000 4027 3970 551 1946 550 1946 551 1946 551 1946 551 946 551 947 550 1947 549 949 547 1951 545 1978 518 1979 492 1006 492 1007 491 1006 492 1006 492 1006 492 2006 491 2006 491 1006 492 2006 491 1007 491 1007 491 1006 492 2006 491
#
name: decoder_expected3
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: 74 00 00 00
repeat: false
#
name: decoder_input4
type: raw
data: 1000000 4021 3941 551 1946 550 1946 551 1946 551 1945 552 946 551 947 550 1947 549 950 547 1952 544 1977 519 979 519 1979 518 980 518 980 518 980 518 980 518 1979 518 1979 518 980 518 1979 518 980 518 980 518 1979 518 980 518
#
name: decoder_expected4
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: B4 00 00 00
repeat: false
#
name: decoder_input5
type: raw
data: 1000000 4022 3941 551 1946 551 1946 577 1919 578 1919 578 920 552 946 551 1946 550 947 550 1949 547 1952 544 978 520 979 519 980 518 980 518 980 518 980 518 1979 518 1979 518 980 518 1979 518 980 518 980 518 1979 518 1980 517
#
name: decoder_expected5
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: 34 00 00 00
repeat: false
#
name: decoder_input6
type: raw
data: 1000000 3995 3968 552 1944 552 1946 550 1946 550 1946 551 947 550 948 549 1947 549 1949 547 1952 544 1978 518 1979 492 2005 492 1006 492 1006 492 1006 492 1006 492 2005 492 2005 492 1006 492 1006 492 1006 492 1006 492 1006 492 1006 492
#
name: decoder_expected6
type: parsed_array
count: 1
#
protocol: RCA
address: 0F 00 00 00
command: FC 00 00 00
repeat: false
#
name: encoder_decoder_input1
type: parsed_array
count: 4
#
protocol: RCA
address: 0F 00 00 00
command: 74 00 00 00
repeat: false
#
protocol: RCA
address: 0F 00 00 00
command: B4 00 00 00
repeat: false
#
protocol: RCA
address: 0F 00 00 00
command: 34 00 00 00
repeat: false
#
protocol: RCA
address: 0F 00 00 00
command: FC 00 00 00
repeat: false
#

View File

@@ -0,0 +1,66 @@
Filetype: Flipper NFC device
Version: 3
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic
Device type: NTAG213
# UID, ATQA and SAK are common for all formats
UID: 04 AC 6B 72 BA 6C 80
ATQA: 00 44
SAK: 00
# Mifare Ultralight specific data
Data format version: 1
Signature: 2D AE BC AF 84 B8 85 87 C2 FB FE 76 13 58 86 72 8E 1D 3C B5 DA 24 23 44 E5 63 4D 4C 82 FB D7 18
Mifare version: 00 04 04 02 01 00 0F 03
Counter 0: 0
Tearing 0: 00
Counter 1: 0
Tearing 1: 00
Counter 2: 0
Tearing 2: 00
Pages total: 45
Pages read: 45
Page 0: 04 AC 6B 4B
Page 1: 72 BA 6C 80
Page 2: 24 48 00 00
Page 3: E1 10 12 00
Page 4: 00 00 41 50
Page 5: 00 00 31 31
Page 6: 00 20 09 28
Page 7: 00 03 31 59
Page 8: 91 DF D3 00
Page 9: 00 00 00 00
Page 10: 00 00 00 00
Page 11: 00 00 00 00
Page 12: 00 00 00 00
Page 13: 00 00 00 00
Page 14: 00 00 00 00
Page 15: 00 00 00 00
Page 16: 00 00 00 00
Page 17: 00 00 00 00
Page 18: 00 00 00 00
Page 19: 00 00 00 00
Page 20: 00 00 00 00
Page 21: 00 00 00 00
Page 22: 00 00 00 00
Page 23: 00 00 00 00
Page 24: 00 00 00 00
Page 25: 00 00 00 00
Page 26: 00 00 00 00
Page 27: 00 00 00 00
Page 28: 00 00 00 00
Page 29: 00 00 00 00
Page 30: 00 00 00 00
Page 31: 00 00 00 00
Page 32: 00 00 00 00
Page 33: 00 00 00 00
Page 34: 00 00 00 00
Page 35: 00 00 00 00
Page 36: 00 00 00 00
Page 37: 00 00 00 00
Page 38: 00 00 00 00
Page 39: 00 00 00 00
Page 40: 00 00 00 BD
Page 41: 04 00 00 04
Page 42: C0 05 00 00
Page 43: 95 3F 52 FF
Page 44: 00 00 00 00
Failed authentication attempts: 0

View File

@@ -0,0 +1,156 @@
Filetype: Flipper NFC device
Version: 3
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic
Device type: NTAG215
# UID, ATQA and SAK are common for all formats
UID: 04 51 5C FA 6F 73 81
ATQA: 00 44
SAK: 00
# Mifare Ultralight specific data
Data format version: 1
Signature: 42 21 E4 6C 79 6A 81 5E EA 0D 93 6D 85 EE 4B 0C 2A 00 D5 77 F1 C5 67 F3 63 75 F8 EB 86 48 5E 6B
Mifare version: 00 04 04 02 01 00 11 03
Counter 0: 0
Tearing 0: 00
Counter 1: 0
Tearing 1: 00
Counter 2: 00
Tearing 2: 00
Pages total: 135
Pages read: 135
Page 0: 04 51 5C 81
Page 1: FA 6F 73 81
Page 2: 67 48 0F E0
Page 3: F1 10 FF EE
Page 4: A5 00 00 00
Page 5: 90 42 74 71
Page 6: FD 8F 50 61
Page 7: C5 65 1B 54
Page 8: EF 68 D0 8E
Page 9: 3D 35 DB 83
Page 10: D3 00 29 F6
Page 11: 42 2A A5 5C
Page 12: F1 69 0A FC
Page 13: B6 44 E9 6B
Page 14: 77 41 88 81
Page 15: 86 31 CB AD
Page 16: B1 DE F1 AB
Page 17: DF 96 C2 C5
Page 18: C1 26 99 96
Page 19: 85 AF 9F 0E
Page 20: 58 FE ED DC
Page 21: 0A 0A 00 01
Page 22: 03 C1 05 02
Page 23: 38 39 34 33
Page 24: 49 2D 4E 5C
Page 25: 5B 21 0F 44
Page 26: 3F 3F 76 69
Page 27: B4 72 D8 38
Page 28: A0 35 53 51
Page 29: 53 EB A6 7C
Page 30: 3E 8B 97 C0
Page 31: 00 7A 45 13
Page 32: 3A 8B D4 0F
Page 33: 31 C2 32 CC
Page 34: B4 24 A6 1B
Page 35: D3 F5 4A 1F
Page 36: CD 8F 1D 64
Page 37: 01 F4 DF C2
Page 38: 11 16 C2 C5
Page 39: 30 6D 49 AF
Page 40: 10 D4 7C 3C
Page 41: 6E 36 4E 08
Page 42: 95 76 BC 84
Page 43: 35 50 DD F0
Page 44: 21 0F EE D9
Page 45: 85 19 54 5F
Page 46: 3E A9 04 20
Page 47: 1B 97 E4 39
Page 48: FF 0A 45 F6
Page 49: 13 D4 3E DD
Page 50: 97 42 FC 67
Page 51: 6A AC 78 96
Page 52: D1 DA 25 23
Page 53: BF 4D B3 76
Page 54: F1 21 ED 15
Page 55: BD 55 11 C4
Page 56: 4E 8C E9 23
Page 57: C0 C4 6D 5A
Page 58: 58 25 FF 95
Page 59: 3C 2B 7A 57
Page 60: 66 BE A0 61
Page 61: BC FC 4A 31
Page 62: 4D AC EE 81
Page 63: BE 1A 86 04
Page 64: F6 D7 5E B3
Page 65: E7 A8 A2 86
Page 66: E9 40 AB 47
Page 67: C8 36 E4 3E
Page 68: A7 4D D3 EA
Page 69: 83 9A 64 F7
Page 70: 96 6B 5D BF
Page 71: 4E A2 A6 0F
Page 72: BD 3D BE 7C
Page 73: 22 0C 68 51
Page 74: 0F 9A B8 AE
Page 75: 38 2C C4 CD
Page 76: 53 D8 DD 18
Page 77: A6 5D 35 87
Page 78: C9 6D 99 59
Page 79: 61 9F B6 DC
Page 80: E6 22 0F 99
Page 81: 39 82 79 60
Page 82: 58 2E BE F7
Page 83: EF F7 95 62
Page 84: D5 06 1B 58
Page 85: 65 05 A9 08
Page 86: 75 ED 5D 90
Page 87: 5A E1 7E C9
Page 88: 35 D6 29 BB
Page 89: D0 67 6C F9
Page 90: A0 FF 0B 93
Page 91: 22 EA A3 3F
Page 92: E2 BD BD 58
Page 93: BE 93 D9 94
Page 94: 41 CC 7E 40
Page 95: E6 8C 5A 43
Page 96: 65 C1 24 94
Page 97: B9 97 61 13
Page 98: AD 74 FF 21
Page 99: 0F EC F6 03
Page 100: 89 5D 89 E5
Page 101: 8D 11 F8 D7
Page 102: 33 43 79 2E
Page 103: 23 E5 29 B5
Page 104: 53 98 13 FF
Page 105: E8 79 8B 33
Page 106: 45 6C 34 38
Page 107: 3B 69 28 D7
Page 108: D2 80 B0 2F
Page 109: D0 18 D5 DD
Page 110: 6C 2D D9 97
Page 111: CA 78 B4 A2
Page 112: B7 3E B8 79
Page 113: A2 BE 54 E4
Page 114: C8 28 0C 4A
Page 115: 81 E7 EC 1C
Page 116: 39 93 6F 70
Page 117: 75 77 5C FC
Page 118: 66 58 0C 1C
Page 119: 9F 70 2E C8
Page 120: 52 4A 52 BD
Page 121: 56 D5 6A 15
Page 122: 54 1B 33 90
Page 123: 44 11 C1 07
Page 124: 11 5C BA 80
Page 125: 10 14 20 9A
Page 126: 4A D8 E6 36
Page 127: DA B8 59 E5
Page 128: 5E 48 95 DA
Page 129: 96 6A 26 85
Page 130: 01 00 0F BD
Page 131: 00 00 00 04
Page 132: 5F 00 00 00
Page 133: 00 00 00 00
Page 134: 00 00 00 00
Failed authentication attempts: 0

View File

@@ -0,0 +1,252 @@
Filetype: Flipper NFC device
Version: 2
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic, Bank card
Device type: NTAG216
# UID, ATQA and SAK are common for all formats
UID: 04 D9 65 0A 32 5E 80
ATQA: 44 00
SAK: 00
# Mifare Ultralight specific data
Data format version: 1
Signature: 48 2A F2 01 0F F2 F5 A7 9A D5 79 6E CB 14 54 48 98 D1 57 5D 8A 23 A9 B0 E8 20 02 3E CD C8 16 DB
Mifare version: 00 04 04 02 01 00 13 03
Counter 0: 0
Tearing 0: 00
Counter 1: 0
Tearing 1: 00
Counter 2: 0
Tearing 2: 00
Pages total: 231
Pages read: 231
Page 0: 04 D9 65 30
Page 1: 0A 32 5E 80
Page 2: E6 48 00 00
Page 3: E1 10 6D 00
Page 4: 03 37 D1 01
Page 5: 33 55 04 6D
Page 6: 2E 79 6F 75
Page 7: 74 75 62 65
Page 8: 2E 63 6F 6D
Page 9: 2F 77 61 74
Page 10: 63 68 3F 76
Page 11: 3D 62 78 71
Page 12: 4C 73 72 6C
Page 13: 61 6B 4B 38
Page 14: 26 66 65 61
Page 15: 74 75 72 65
Page 16: 3D 79 6F 75
Page 17: 74 75 2E 62
Page 18: 65 FE 00 00
Page 19: 00 00 00 00
Page 20: 00 00 00 00
Page 21: 00 00 00 00
Page 22: 00 00 00 00
Page 23: 00 00 00 00
Page 24: 00 00 00 00
Page 25: 00 00 00 00
Page 26: 00 00 00 00
Page 27: 00 00 00 00
Page 28: 00 00 00 00
Page 29: 00 00 00 00
Page 30: 00 00 00 00
Page 31: 00 00 00 00
Page 32: 00 00 00 00
Page 33: 00 00 00 00
Page 34: 00 00 00 00
Page 35: 00 00 00 00
Page 36: 00 00 00 00
Page 37: 00 00 00 00
Page 38: 00 00 00 00
Page 39: 00 00 00 00
Page 40: 00 00 00 00
Page 41: 00 00 00 00
Page 42: 00 00 00 00
Page 43: 00 00 00 00
Page 44: 00 00 00 00
Page 45: 00 00 00 00
Page 46: 00 00 00 00
Page 47: 00 00 00 00
Page 48: 00 00 00 00
Page 49: 00 00 00 00
Page 50: 00 00 00 00
Page 51: 00 00 00 00
Page 52: 00 00 00 00
Page 53: 00 00 00 00
Page 54: 00 00 00 00
Page 55: 00 00 00 00
Page 56: 00 00 00 00
Page 57: 00 00 00 00
Page 58: 00 00 00 00
Page 59: 00 00 00 00
Page 60: 00 00 00 00
Page 61: 00 00 00 00
Page 62: 00 00 00 00
Page 63: 00 00 00 00
Page 64: 00 00 00 00
Page 65: 00 00 00 00
Page 66: 00 00 00 00
Page 67: 00 00 00 00
Page 68: 00 00 00 00
Page 69: 00 00 00 00
Page 70: 00 00 00 00
Page 71: 00 00 00 00
Page 72: 00 00 00 00
Page 73: 00 00 00 00
Page 74: 00 00 00 00
Page 75: 00 00 00 00
Page 76: 00 00 00 00
Page 77: 00 00 00 00
Page 78: 00 00 00 00
Page 79: 00 00 00 00
Page 80: 00 00 00 00
Page 81: 00 00 00 00
Page 82: 00 00 00 00
Page 83: 00 00 00 00
Page 84: 00 00 00 00
Page 85: 00 00 00 00
Page 86: 00 00 00 00
Page 87: 00 00 00 00
Page 88: 00 00 00 00
Page 89: 00 00 00 00
Page 90: 00 00 00 00
Page 91: 00 00 00 00
Page 92: 00 00 00 00
Page 93: 00 00 00 00
Page 94: 00 00 00 00
Page 95: 00 00 00 00
Page 96: 00 00 00 00
Page 97: 00 00 00 00
Page 98: 00 00 00 00
Page 99: 00 00 00 00
Page 100: 00 00 00 00
Page 101: 00 00 00 00
Page 102: 00 00 00 00
Page 103: 00 00 00 00
Page 104: 00 00 00 00
Page 105: 00 00 00 00
Page 106: 00 00 00 00
Page 107: 00 00 00 00
Page 108: 00 00 00 00
Page 109: 00 00 00 00
Page 110: 00 00 00 00
Page 111: 00 00 00 00
Page 112: 00 00 00 00
Page 113: 00 00 00 00
Page 114: 00 00 00 00
Page 115: 00 00 00 00
Page 116: 00 00 00 00
Page 117: 00 00 00 00
Page 118: 00 00 00 00
Page 119: 00 00 00 00
Page 120: 00 00 00 00
Page 121: 00 00 00 00
Page 122: 00 00 00 00
Page 123: 00 00 00 00
Page 124: 00 00 00 00
Page 125: 00 00 00 00
Page 126: 00 00 00 00
Page 127: 00 00 00 00
Page 128: 00 00 00 00
Page 129: 00 00 00 00
Page 130: 00 00 00 00
Page 131: 00 00 00 00
Page 132: 00 00 00 00
Page 133: 00 00 00 00
Page 134: 00 00 00 00
Page 135: 00 00 00 00
Page 136: 00 00 00 00
Page 137: 00 00 00 00
Page 138: 00 00 00 00
Page 139: 00 00 00 00
Page 140: 00 00 00 00
Page 141: 00 00 00 00
Page 142: 00 00 00 00
Page 143: 00 00 00 00
Page 144: 00 00 00 00
Page 145: 00 00 00 00
Page 146: 00 00 00 00
Page 147: 00 00 00 00
Page 148: 00 00 00 00
Page 149: 00 00 00 00
Page 150: 00 00 00 00
Page 151: 00 00 00 00
Page 152: 00 00 00 00
Page 153: 00 00 00 00
Page 154: 00 00 00 00
Page 155: 00 00 00 00
Page 156: 00 00 00 00
Page 157: 00 00 00 00
Page 158: 00 00 00 00
Page 159: 00 00 00 00
Page 160: 00 00 00 00
Page 161: 00 00 00 00
Page 162: 00 00 00 00
Page 163: 00 00 00 00
Page 164: 00 00 00 00
Page 165: 00 00 00 00
Page 166: 00 00 00 00
Page 167: 00 00 00 00
Page 168: 00 00 00 00
Page 169: 00 00 00 00
Page 170: 00 00 00 00
Page 171: 00 00 00 00
Page 172: 00 00 00 00
Page 173: 00 00 00 00
Page 174: 00 00 00 00
Page 175: 00 00 00 00
Page 176: 00 00 00 00
Page 177: 00 00 00 00
Page 178: 00 00 00 00
Page 179: 00 00 00 00
Page 180: 00 00 00 00
Page 181: 00 00 00 00
Page 182: 00 00 00 00
Page 183: 00 00 00 00
Page 184: 00 00 00 00
Page 185: 00 00 00 00
Page 186: 00 00 00 00
Page 187: 00 00 00 00
Page 188: 00 00 00 00
Page 189: 00 00 00 00
Page 190: 00 00 00 00
Page 191: 00 00 00 00
Page 192: 00 00 00 00
Page 193: 00 00 00 00
Page 194: 00 00 00 00
Page 195: 00 00 00 00
Page 196: 00 00 00 00
Page 197: 00 00 00 00
Page 198: 00 00 00 00
Page 199: 00 00 00 00
Page 200: 00 00 00 00
Page 201: 00 00 00 00
Page 202: 00 00 00 00
Page 203: 00 00 00 00
Page 204: 00 00 00 00
Page 205: 00 00 00 00
Page 206: 00 00 00 00
Page 207: 00 00 00 00
Page 208: 00 00 00 00
Page 209: 00 00 00 00
Page 210: 00 00 00 00
Page 211: 00 00 00 00
Page 212: 00 00 00 00
Page 213: 00 00 00 00
Page 214: 00 00 00 00
Page 215: 00 00 00 00
Page 216: 00 00 00 00
Page 217: 00 00 00 00
Page 218: 00 00 00 00
Page 219: 00 00 00 00
Page 220: 00 00 00 00
Page 221: 00 00 00 00
Page 222: 00 00 00 00
Page 223: 00 00 00 00
Page 224: 00 00 00 00
Page 225: 00 00 00 00
Page 226: 00 00 00 BD
Page 227: 04 00 00 FF
Page 228: 00 05 00 00
Page 229: 00 00 00 00
Page 230: 00 00 00 00
Failed authentication attempts: 0

View File

@@ -0,0 +1,41 @@
Filetype: Flipper NFC device
Version: 3
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic
Device type: Mifare Ultralight 11
# UID, ATQA and SAK are common for all formats
UID: 04 15 74 F2 B0 5E 81
ATQA: 00 44
SAK: 00
# Mifare Ultralight specific data
Data format version: 1
Signature: A4 37 7D E5 8C 2F 88 D8 04 60 41 6E 3A C8 CD DB 19 94 26 12 C5 D0 12 B0 EB 88 05 72 89 F2 A5 61
Mifare version: 00 04 03 01 01 00 0B 03
Counter 0: 0
Tearing 0: BD
Counter 1: 0
Tearing 1: BD
Counter 2: 0
Tearing 2: BD
Pages total: 20
Pages read: 20
Page 0: 04 15 74 ED
Page 1: F2 B0 5E 81
Page 2: 9D 48 F8 FF
Page 3: C1 31 3E 3F
Page 4: B0 00 F0 02
Page 5: 2F B3 45 A0
Page 6: D4 9C 02 F2
Page 7: 4A B1 ED FF
Page 8: C8 01 00 02
Page 9: 4F B3 46 70
Page 10: EE F6 60 B0
Page 11: B6 C6 12 1B
Page 12: B9 1E 49 C3
Page 13: 49 DF 7A 57
Page 14: 08 52 2A 11
Page 15: 28 0A 28 59
Page 16: 00 00 00 FF
Page 17: 00 05 00 00
Page 18: FF FF FF FF
Page 19: 00 00 00 00
Failed authentication attempts: 0

View File

@@ -0,0 +1,62 @@
Filetype: Flipper NFC device
Version: 3
# Nfc device type can be UID, Mifare Ultralight, Mifare Classic
Device type: Mifare Ultralight 21
# UID, ATQA and SAK are common for all formats
UID: 34 BF AB B1 AE 73 D6
ATQA: 00 44
SAK: 00
# Mifare Ultralight specific data
Data format version: 1
Signature: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Mifare version: 00 34 21 01 01 00 0E 03
Counter 0: 0
Tearing 0: 00
Counter 1: 0
Tearing 1: 00
Counter 2: 0
Tearing 2: 00
Pages total: 41
Pages read: 41
Page 0: 34 BF AB A8
Page 1: B1 AE 73 D6
Page 2: BA 00 70 08
Page 3: FF FF FF FC
Page 4: 45 D9 BB A0
Page 5: 5D 9D FA 00
Page 6: 80 70 38 40
Page 7: 12 30 02 00
Page 8: 00 00 00 00
Page 9: 00 00 00 00
Page 10: AC A1 0D E4
Page 11: 80 70 38 40
Page 12: 00 57 A0 01
Page 13: 00 08 C1 40
Page 14: 00 00 00 00
Page 15: AC A1 0D E4
Page 16: 00 00 00 00
Page 17: 00 00 00 00
Page 18: 00 00 00 00
Page 19: 00 00 00 00
Page 20: 00 00 00 00
Page 21: 00 00 00 00
Page 22: 00 00 00 00
Page 23: 00 00 00 00
Page 24: 00 00 00 00
Page 25: 00 00 00 00
Page 26: 00 00 00 00
Page 27: 00 00 00 00
Page 28: 00 00 00 00
Page 29: 00 00 00 00
Page 30: 00 00 00 00
Page 31: 00 00 00 00
Page 32: 00 00 00 00
Page 33: 00 00 00 00
Page 34: 00 00 00 00
Page 35: 00 00 00 00
Page 36: 00 00 00 BD
Page 37: 00 00 00 FF
Page 38: 00 05 00 00
Page 39: FF FF FF FF
Page 40: 00 00 00 00
Failed authentication attempts: 0

View File

@@ -0,0 +1 @@
Yo dawg, I heard you like md5...

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