flipperzero-firmware/firmware
SG 1daef3d025
new iButton app (#328)
* rename old ibutton app to ibutton-test

* more renames

* updated onewire library compilation condition

* add submenu_clean subroutine

* add index for submenu callback

* c++ guard for gui modules

* add released ibutton app

* fix the position of the submenu window if there are too few items

* iButton app basis

* negative icon position info

* fix submenu_clean subroutine

* add ibutton app to applications makefile

* add onewire key read routine to read mode

* rename mode to scene

* rename files and folder (mode to scene)

* rename ibutton view to view manager

* rename get_view to get_view_manager

* cpp guards

* key read, store and notify features

* syntax fix

* make iButtonScene functions pure virtual

* fix syntax

* add text store, add new scene (crc error)

* not a key scene

* syntax fix

* read success scene

* app, switching to the previous scene with the number of scenes to be skipped

* scene whith menu when key is readed

* fix font height calculation, fix offsets

* add key write scene

* view_dispatcher_remove_view subroutine

* generic pause/resume os methods

* fix furi_assert usage

* key store, worker

* fix pointer comparsion

* saved keys, saved key action scenes

* key delete/confirm delete scenes and routines

* use last input subsystem changes

* fix syntax

* fix new model usage in submenu

* fix includes

* use vibro pin

* use stored key name if valid

* emulate scene

* random name generator

* name and save readed key scenes, new icon

* fix icon position

* fix text scene exit

* fix naming, fix text placement, new info scene

* state-driven cyfral decoder

* better cyfral decoder

* better cyfral decoder

* one wire: search command set

* metakom decoder

* more key types

* add next scene to error scenes

* universal key reader

* use new key reader

* syntax fix

* warning fix

* byte input module template

* new thread and insomnia api usage

* New element: slightly rounded frame

* Use elements_slightly_rounded_frame in text input

* Gui test app: byte input usage

* Byte input module: data drawing and selection

* Byte input: comment currently unused fns

* remove volatile qualifier

* base byte input realisation

* App gui test: remove internal fns visibility

* Byne input, final version

* test install gcc-arm-none-eabi-10-2020-q4-major

* test install gcc-arm-none-eabi-10-2020-q4-major

* App iButton: byte input view managment

* App iButton: add key manually scenes

* App iButton: rename scenes, add popup timeout

* App iButton: use new scenes, new fn for rollback to specific prevous scene.

* App iButton: remove byte input view on app exit

* App iButton: edit key scene

* Module byte input: reduce swintch value to uint8_t

* Module byte input: switch from switch-case to if, unfortunately we need compile-time constants to use with switch

* Icons: new small arrows

* Module byte input: new arrangement of elements

* OneWire slave lib: fix deattach sequence

* App iButton: pulse sequencer

* App iButton: add more keys to store

* App iButton: split key worker to separate read/write/emulate entitys

* App iButton: use new read/emulate entities

* fix callback pointer saving

* App iButton: use KeyReader error enum instead of KeyWorker error list handling

* App iButton: do not use insomnia fns in pulse sequencer

* App iButton: use KeyReader error enum in read scene

* OneWire slave lib: more READ ROM command variants, call callback only if positive result

* GPIO resources: add external gpio

* App SD/NFC: removed application

* App iButton-test: update to new light api

* App iButton: update to new light-api

* Outdated apps: add api-light-usage

* Gpio: update SD card CS pin settings

* API-power: added fns to disable/enable external 3v3 dc-dc

* API-gpio: separated SD card detect routines

* Resources: removed sd cs pin

* SD card: low level init now resets card power supply

* App SD-filesystem: use new card detect fns

* SD card: fix low level init headers

* SD card: more realilable low level init, power reset, exit from command read cycle conditionally

* App SD-filesystem: led notifiers, init cycling

* SD card: backport to F4

* Api PWM: add c++ guards

* App iButton: yellow blink in emulate scene, vibro on

* App iButton: one wire keys command set

* App iButton: successful write scene

* App iButton: key writer

* App iButton: syntax fix

* App iButton: notify write success

* App iButton: fix double scene change

* SD card: handle eject in init sequence

* SD card: api to set level on detect gpio

* SPI: api to set state on bus pins

* SD card: set low state on bus pins while power reset

* File select: init

* File select: fix input consuming

* SD Card: fixed dir open api error

* SD-card: replace strncpy by strlcpy. Fix buffer overflow error.

* API HAL OS: replace CMP based ticks with ARR based one, hard reset lptimer on reconfiguration.

* GUI: More stack size for (temporary, wee need to implement sd card api in separate thread)

* GUI: File select module.

* App iButton-test: remove obsolete app

Co-authored-by: rusdacent <rusdacentx0x08@gmail.com>
Co-authored-by: coreglitch <mail@s3f.ru>
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2021-03-12 15:45:18 +03:00
..
targets new iButton app (#328) 2021-03-12 15:45:18 +03:00
Makefile [FL-873] Add F5 target, lp5562 driver and api-hal-light (#347) 2021-02-18 15:49:32 +03:00
ReadMe.md Remove obsolete target. Cleanup and update ReadMe. (#279) 2020-12-28 11:52:35 +06:00

Project structure

.
├── applications    # Flipper applications
├── assets          # Assets: icons, animation
├── bootloader      # Bootloader make project
├── core            # Main feature like OS, HAL (target-independed)
├── core-rs         # Rust code
├── debug           # Debug helpers, configs and plugins
├── docker          # Docker toolchain container
├── firmware        # Firmware make project
├── lib             # Libs and 3rd parties
├── make            # Makefile scripts

Bootloader

Bootloader must be flashed first. Detailed instruction on how to compile and flash it you can find in bootloader folder.

OS

CMSIS-RTOS2 over FreeRTOS

Platform code

CMSIS, Freertos and HAL files are generated by CubeMX. You can find platform code for STM32WB55 version in f4 folder:

├── Inc                             # CubeMX generated headers
├── Src                             # CubeMX generated code
├── api-hal                         # Our HAL wrappers and platform specifics
├── ble-glue                        # BLE specific code(Glue for STMWPAN)
├── f4.ioc                          # CubeMX project file
├── startup_stm32wb55xx_cm4.s       # Board startup/initialization assembler code
├── stm32wb55xx_flash_cm4*.ld       # Linker scripts
├── target.mk                       # Makefile include

Working with CubeMX:

  1. Download CubeMX from st.com
  2. Open *.ioc file
  3. Do whatever you want to
  4. Click generate code
  5. After regenerating, look at git status, regeneration may brake some files.
  6. Check one more time that things that you've changes are not covered in platform api-hal. Because you know...

Flipper Universal Registry Implementation (FURI)

FURI is used to:

  • application control (start, exit, switch between active)
  • data exchange between application (create/open channel, subscribe and push messages or read/write values)
  • non-volatile data storage for application (create/open value and read/write)

Read more at FURI page

FS (not implemented)

File system is used to volaile storage some files (config, application data, etc.). There are some folders mounted to different volumes:

  • /usr for store static data like assets, menu items. Build system add files to usr while building. It can be useful for exchange some static data between application. For example, your app can add link to itself to Plugins menu items file, user will see your app and can call it from this menu.
  • Specially /usr/etc-default folder contains default configs for apps. Bootloader has factory default options to reset applications config. Also when new app is bootstapping, system copy files from default config folder to /etc.
  • /etc for store configs of application. This volume not overwrite during flashing.
  • /var for store some application data (saved keys, application database, logs). This volume also not overwrite during flashing.
  • /media/* mounted if SD card is inserted.

Flipper applications

Each flipper functionality except OS/HAL/FURI doing by Flipper application. Some application are called at startup, the rest are called by the user (for example, from menu).

(you can see some examples)

For exchange data between application each app expose own record in FURI. You can subscribe on/read record to get data from application and write to record to send data to application.

List of FURI records