[FL-3070] iButton system and app refactoring (#2388)

* Add 1-wire thermometer example app stub
* Working 1-wire thermometer app
* Refactor app to use threads
* Clean up code, add comments
* Add CRC checking
* Increase update period
* Fix error in fbt
* Revert the old update period
* Use settable pin in onewire_host
* Use settable pin for onewire_slave
* Clear EXTI flag after callback, make private methods static in onewire_slave
* Do not hardcode GPIO pin number
* Remove iButton hal from furi_hal_rfid
* Remove most of furi_hal_ibutton
* Add some of furi_hal_ibutton back
* Slightly neater code
* Update CODEOWNERS
* Add furi_hal_gpio_get_ext_pin_number
* Create README.md
* Temporary get Metakom and Cyfral keys out of the way
* Better enum name
* Syncing work, does not compile
* Syncing work, now compiles
* Working read impl for DS1990 and DS1992
* Add the ability to display extended key data
* Get rid of DialogEx
* Add save and load API
* Better iButtonKey encapsulation
* Fix crash
* Load key code boilerplate
* More load key code boilerplate
* Minor code cleanup
* Implement loading and saving DS1990 keys
* Implement the Info scene
* Implement loading & saving for DS1992
* Implement read error scene stub
* Implement delete confirmation screen
* Better error messages (protocol-dependent)
* Minor old code cleanup
* Remove iButtonDevice, add command callback to iButtonSlave
* Implement draft emulation for DS1990
* Better emulation for DS1990
* Initial emulation implementation for DS1992
* Better common command definitions
* Use common submenu callback, add protocol list
* Improve ViewData screen
* Improve scene_add_type
* Add stubs for write functionality
* Improve naming consistency
* Implement writing a DS1992 onto another one
* Improve DS1992 write code
* Improve DS1992 write code once more
* Prepare write_blank for DS1990, delete ibutton_writer
* Implement writing DS1990 onto blanks
* Fix reading DS1990
* Partially implement writing DS1992 onto blanks
* Implement GUI for writing keys
* Implement GUI for emulating keys
* Reduce memory usage for pretty_format
* Automatically truncate data more than 256 bytes
* Initial implementation of DS1996 (not tested)
* Fix crash due to missing virtual function
* Improve emulation code
* Improve DS1992 emulation code
* Correct return value for onewire_slave_send
* Correct return value for onewire_slave_receive
* Implement emulation for DS1992 & DS1996
* Better constant names
* Simplify & optimise the emulation code
* Remove duplicate code
* Add skip rom command emulation
* Show loading animation for large keys
* Implement manual adding & editing of keys
* Use buffered file streams to speed up saving & loading
* Reset key name before adding a new one
* Sync a buffered file stream before saving
* Use the DSGeneric protocol as a fallback option
* Implement emulation via RPC
* Refactor iButton code in preparation for comparator keys
* Refactor iButton code in preparation for comparator keys once more
* Make some functions static
* Make protocols not rely on one_wire classes
* Improve ProtocolDict usage
* Improve ProtocolDict usage more
* Implement reading Metakom & Cyfral keys
* Rename some files
* Better file structure
* Implement a unified interface for misc protocols
* Implement a unified interface for dallas protocols
* Concrete types for Dallas protocols
* Implement a unified interface for all key types
* Improved type naming
* Improved private types
* Proper types in protocol definitions
* Implement emulation for Cyfral & Metakom keys
* Implement save&load for Metakom & Cyfral keys
* Better type names
* Rename files, better names
* Allocate iButtonProtocols like a normal class
* Reset the key each time the start scene is selected
* Improve comments and constants
* Add ibutton_protocols to SDK headers
* Add ibutton_key to SDK headers
* Add ibutton_key to SDK headers
* Implement reading via cli
* Implement emulation via cli
* Implement writing Dallas blanks via cli
* Correctly revert the editing if cancelled by the user
* Correct committing mishap
* Elide the long text on the info screen
* Change key name for data in Misc keys
* Update iButtonFileFormat.md
* Remember the key's folder
* Save menu position in ReadKeyMenu and SavedKeyMenu
* Correct use of preselected path in file browser

Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
Georgii Surkov
2023-03-02 16:23:33 +03:00
committed by GitHub
parent 4359e2eaa9
commit 806428efeb
91 changed files with 3826 additions and 2166 deletions

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,15.0,,
Version,+,16.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
1 entry status name type params
2 Version + 15.0 16.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,15.1,,
Version,+,16.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@@ -162,9 +162,10 @@ Header,+,lib/mlib/m-rbtree.h,,
Header,+,lib/mlib/m-tuple.h,,
Header,+,lib/mlib/m-variant.h,,
Header,+,lib/nfc/nfc_device.h,,
Header,+,lib/one_wire/ibutton/ibutton_key.h,,
Header,+,lib/one_wire/ibutton/ibutton_protocols.h,,
Header,+,lib/one_wire/ibutton/ibutton_worker.h,,
Header,+,lib/one_wire/maxim_crc.h,,
Header,+,lib/one_wire/one_wire_device.h,,
Header,+,lib/one_wire/one_wire_host.h,,
Header,+,lib/one_wire/one_wire_host_timing.h,,
Header,+,lib/one_wire/one_wire_slave.h,,
@@ -191,6 +192,7 @@ Header,+,lib/toolbox/manchester_decoder.h,,
Header,+,lib/toolbox/manchester_encoder.h,,
Header,+,lib/toolbox/md5.h,,
Header,+,lib/toolbox/path.h,,
Header,+,lib/toolbox/pretty_format.h,,
Header,+,lib/toolbox/protocols/protocol_dict.h,,
Header,+,lib/toolbox/random_name.h,,
Header,+,lib/toolbox/saved_struct.h,,
@@ -874,6 +876,7 @@ Function,-,flipper_application_preload_status_to_string,const char*,FlipperAppli
Function,+,flipper_application_spawn,FuriThread*,"FlipperApplication*, void*"
Function,+,flipper_format_buffered_file_alloc,FlipperFormat*,Storage*
Function,+,flipper_format_buffered_file_close,_Bool,FlipperFormat*
Function,+,flipper_format_buffered_file_open_always,_Bool,"FlipperFormat*, const char*"
Function,+,flipper_format_buffered_file_open_existing,_Bool,"FlipperFormat*, const char*"
Function,+,flipper_format_delete_key,_Bool,"FlipperFormat*, const char*"
Function,+,flipper_format_file_alloc,FlipperFormat*,Storage*
@@ -1597,22 +1600,33 @@ Function,+,hmac_sha256_update,void,"const hmac_sha256_context*, const uint8_t*,
Function,-,hypot,double,"double, double"
Function,-,hypotf,float,"float, float"
Function,-,hypotl,long double,"long double, long double"
Function,+,ibutton_key_alloc,iButtonKey*,
Function,+,ibutton_key_clear_data,void,iButtonKey*
Function,+,ibutton_key_dallas_crc_is_valid,_Bool,iButtonKey*
Function,+,ibutton_key_dallas_is_1990_key,_Bool,iButtonKey*
Function,+,ibutton_key_alloc,iButtonKey*,size_t
Function,+,ibutton_key_free,void,iButtonKey*
Function,+,ibutton_key_get_data_p,const uint8_t*,iButtonKey*
Function,+,ibutton_key_get_data_size,uint8_t,iButtonKey*
Function,+,ibutton_key_get_max_size,uint8_t,
Function,+,ibutton_key_get_size_by_type,uint8_t,iButtonKeyType
Function,+,ibutton_key_get_string_by_type,const char*,iButtonKeyType
Function,+,ibutton_key_get_type,iButtonKeyType,iButtonKey*
Function,+,ibutton_key_get_type_by_string,_Bool,"const char*, iButtonKeyType*"
Function,+,ibutton_key_set,void,"iButtonKey*, const iButtonKey*"
Function,+,ibutton_key_set_data,void,"iButtonKey*, uint8_t*, uint8_t"
Function,+,ibutton_key_set_type,void,"iButtonKey*, iButtonKeyType"
Function,+,ibutton_worker_alloc,iButtonWorker*,
Function,+,ibutton_key_get_protocol_id,iButtonProtocolId,const iButtonKey*
Function,+,ibutton_key_reset,void,iButtonKey*
Function,+,ibutton_key_set_protocol_id,void,"iButtonKey*, iButtonProtocolId"
Function,+,ibutton_protocols_alloc,iButtonProtocols*,
Function,+,ibutton_protocols_apply_edits,void,"iButtonProtocols*, const iButtonKey*"
Function,+,ibutton_protocols_emulate_start,void,"iButtonProtocols*, iButtonKey*"
Function,+,ibutton_protocols_emulate_stop,void,"iButtonProtocols*, iButtonKey*"
Function,+,ibutton_protocols_free,void,iButtonProtocols*
Function,+,ibutton_protocols_get_editable_data,void,"iButtonProtocols*, const iButtonKey*, iButtonEditableData*"
Function,+,ibutton_protocols_get_features,uint32_t,"iButtonProtocols*, iButtonProtocolId"
Function,+,ibutton_protocols_get_id_by_name,iButtonProtocolId,"iButtonProtocols*, const char*"
Function,+,ibutton_protocols_get_manufacturer,const char*,"iButtonProtocols*, iButtonProtocolId"
Function,+,ibutton_protocols_get_max_data_size,size_t,iButtonProtocols*
Function,+,ibutton_protocols_get_name,const char*,"iButtonProtocols*, iButtonProtocolId"
Function,+,ibutton_protocols_get_protocol_count,uint32_t,
Function,+,ibutton_protocols_is_valid,_Bool,"iButtonProtocols*, const iButtonKey*"
Function,+,ibutton_protocols_load,_Bool,"iButtonProtocols*, iButtonKey*, const char*"
Function,+,ibutton_protocols_read,_Bool,"iButtonProtocols*, iButtonKey*"
Function,+,ibutton_protocols_render_brief_data,void,"iButtonProtocols*, const iButtonKey*, FuriString*"
Function,+,ibutton_protocols_render_data,void,"iButtonProtocols*, const iButtonKey*, FuriString*"
Function,+,ibutton_protocols_render_error,void,"iButtonProtocols*, const iButtonKey*, FuriString*"
Function,+,ibutton_protocols_save,_Bool,"iButtonProtocols*, const iButtonKey*, const char*"
Function,+,ibutton_protocols_write_blank,_Bool,"iButtonProtocols*, iButtonKey*"
Function,+,ibutton_protocols_write_copy,_Bool,"iButtonProtocols*, iButtonKey*"
Function,+,ibutton_worker_alloc,iButtonWorker*,iButtonProtocols*
Function,+,ibutton_worker_emulate_set_callback,void,"iButtonWorker*, iButtonWorkerEmulateCallback, void*"
Function,+,ibutton_worker_emulate_start,void,"iButtonWorker*, iButtonKey*"
Function,+,ibutton_worker_free,void,iButtonWorker*
@@ -1621,8 +1635,9 @@ Function,+,ibutton_worker_read_start,void,"iButtonWorker*, iButtonKey*"
Function,+,ibutton_worker_start_thread,void,iButtonWorker*
Function,+,ibutton_worker_stop,void,iButtonWorker*
Function,+,ibutton_worker_stop_thread,void,iButtonWorker*
Function,+,ibutton_worker_write_blank_start,void,"iButtonWorker*, iButtonKey*"
Function,+,ibutton_worker_write_copy_start,void,"iButtonWorker*, iButtonKey*"
Function,+,ibutton_worker_write_set_callback,void,"iButtonWorker*, iButtonWorkerWriteCallback, void*"
Function,+,ibutton_worker_write_start,void,"iButtonWorker*, iButtonKey*"
Function,+,icon_animation_alloc,IconAnimation*,const Icon*
Function,+,icon_animation_free,void,IconAnimation*
Function,+,icon_animation_get_height,uint8_t,const IconAnimation*
@@ -2034,12 +2049,6 @@ Function,+,notification_message,void,"NotificationApp*, const NotificationSequen
Function,+,notification_message_block,void,"NotificationApp*, const NotificationSequence*"
Function,-,nrand48,long,unsigned short[3]
Function,-,on_exit,int,"void (*)(int, void*), void*"
Function,+,onewire_device_alloc,OneWireDevice*,"uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t"
Function,+,onewire_device_attach,void,"OneWireDevice*, OneWireSlave*"
Function,+,onewire_device_detach,void,OneWireDevice*
Function,+,onewire_device_free,void,OneWireDevice*
Function,+,onewire_device_get_id_p,uint8_t*,OneWireDevice*
Function,+,onewire_device_send_id,void,OneWireDevice*
Function,+,onewire_host_alloc,OneWireHost*,const GpioPin*
Function,+,onewire_host_free,void,OneWireHost*
Function,+,onewire_host_read,uint8_t,OneWireHost*
@@ -2054,10 +2063,15 @@ Function,+,onewire_host_stop,void,OneWireHost*
Function,+,onewire_host_target_search,void,"OneWireHost*, uint8_t"
Function,+,onewire_host_write,void,"OneWireHost*, uint8_t"
Function,+,onewire_host_write_bit,void,"OneWireHost*, _Bool"
Function,+,onewire_host_write_bytes,void,"OneWireHost*, const uint8_t*, uint16_t"
Function,+,onewire_slave_alloc,OneWireSlave*,const GpioPin*
Function,+,onewire_slave_attach,void,"OneWireSlave*, OneWireDevice*"
Function,+,onewire_slave_detach,void,OneWireSlave*
Function,+,onewire_slave_free,void,OneWireSlave*
Function,+,onewire_slave_receive,_Bool,"OneWireSlave*, uint8_t*, size_t"
Function,+,onewire_slave_receive_bit,_Bool,OneWireSlave*
Function,+,onewire_slave_send,_Bool,"OneWireSlave*, const uint8_t*, size_t"
Function,+,onewire_slave_send_bit,_Bool,"OneWireSlave*, _Bool"
Function,+,onewire_slave_set_command_callback,void,"OneWireSlave*, OneWireSlaveCommandCallback, void*"
Function,+,onewire_slave_set_reset_callback,void,"OneWireSlave*, OneWireSlaveResetCallback, void*"
Function,+,onewire_slave_set_result_callback,void,"OneWireSlave*, OneWireSlaveResultCallback, void*"
Function,+,onewire_slave_start,void,OneWireSlave*
Function,+,onewire_slave_stop,void,OneWireSlave*
@@ -2105,6 +2119,7 @@ Function,+,power_off,void,Power*
Function,+,power_reboot,void,PowerBootMode
Function,+,powf,float,"float, float"
Function,-,powl,long double,"long double, long double"
Function,+,pretty_format_bytes_hex_canonical,void,"FuriString*, size_t, const char*, const uint8_t*, size_t"
Function,-,printf,int,"const char*, ..."
Function,-,prng_successor,uint32_t,"uint32_t, uint32_t"
Function,+,property_value_out,void,"PropertyValueContext*, const char*, unsigned int, ..."
1 entry status name type params
2 Version + 15.1 16.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
162 Header + lib/mlib/m-tuple.h
163 Header + lib/mlib/m-variant.h
164 Header + lib/nfc/nfc_device.h
165 Header + lib/one_wire/ibutton/ibutton_key.h
166 Header + lib/one_wire/ibutton/ibutton_protocols.h
167 Header + lib/one_wire/ibutton/ibutton_worker.h
168 Header + lib/one_wire/maxim_crc.h
Header + lib/one_wire/one_wire_device.h
169 Header + lib/one_wire/one_wire_host.h
170 Header + lib/one_wire/one_wire_host_timing.h
171 Header + lib/one_wire/one_wire_slave.h
192 Header + lib/toolbox/manchester_encoder.h
193 Header + lib/toolbox/md5.h
194 Header + lib/toolbox/path.h
195 Header + lib/toolbox/pretty_format.h
196 Header + lib/toolbox/protocols/protocol_dict.h
197 Header + lib/toolbox/random_name.h
198 Header + lib/toolbox/saved_struct.h
876 Function + flipper_application_spawn FuriThread* FlipperApplication*, void*
877 Function + flipper_format_buffered_file_alloc FlipperFormat* Storage*
878 Function + flipper_format_buffered_file_close _Bool FlipperFormat*
879 Function + flipper_format_buffered_file_open_always _Bool FlipperFormat*, const char*
880 Function + flipper_format_buffered_file_open_existing _Bool FlipperFormat*, const char*
881 Function + flipper_format_delete_key _Bool FlipperFormat*, const char*
882 Function + flipper_format_file_alloc FlipperFormat* Storage*
1600 Function - hypot double double, double
1601 Function - hypotf float float, float
1602 Function - hypotl long double long double, long double
1603 Function + ibutton_key_alloc iButtonKey* size_t
Function + ibutton_key_clear_data void iButtonKey*
Function + ibutton_key_dallas_crc_is_valid _Bool iButtonKey*
Function + ibutton_key_dallas_is_1990_key _Bool iButtonKey*
1604 Function + ibutton_key_free void iButtonKey*
1605 Function + ibutton_key_get_data_p ibutton_key_get_protocol_id const uint8_t* iButtonProtocolId iButtonKey* const iButtonKey*
1606 Function + ibutton_key_get_data_size ibutton_key_reset uint8_t void iButtonKey*
1607 Function + ibutton_key_get_max_size ibutton_key_set_protocol_id uint8_t void iButtonKey*, iButtonProtocolId
1608 Function + ibutton_key_get_size_by_type ibutton_protocols_alloc uint8_t iButtonProtocols* iButtonKeyType
1609 Function + ibutton_key_get_string_by_type ibutton_protocols_apply_edits const char* void iButtonKeyType iButtonProtocols*, const iButtonKey*
1610 Function + ibutton_key_get_type ibutton_protocols_emulate_start iButtonKeyType void iButtonKey* iButtonProtocols*, iButtonKey*
1611 Function + ibutton_key_get_type_by_string ibutton_protocols_emulate_stop _Bool void const char*, iButtonKeyType* iButtonProtocols*, iButtonKey*
1612 Function + ibutton_key_set ibutton_protocols_free void iButtonKey*, const iButtonKey* iButtonProtocols*
1613 Function + ibutton_key_set_data ibutton_protocols_get_editable_data void iButtonKey*, uint8_t*, uint8_t iButtonProtocols*, const iButtonKey*, iButtonEditableData*
1614 Function + ibutton_key_set_type ibutton_protocols_get_features void uint32_t iButtonKey*, iButtonKeyType iButtonProtocols*, iButtonProtocolId
1615 Function + ibutton_worker_alloc ibutton_protocols_get_id_by_name iButtonWorker* iButtonProtocolId iButtonProtocols*, const char*
1616 Function + ibutton_protocols_get_manufacturer const char* iButtonProtocols*, iButtonProtocolId
1617 Function + ibutton_protocols_get_max_data_size size_t iButtonProtocols*
1618 Function + ibutton_protocols_get_name const char* iButtonProtocols*, iButtonProtocolId
1619 Function + ibutton_protocols_get_protocol_count uint32_t
1620 Function + ibutton_protocols_is_valid _Bool iButtonProtocols*, const iButtonKey*
1621 Function + ibutton_protocols_load _Bool iButtonProtocols*, iButtonKey*, const char*
1622 Function + ibutton_protocols_read _Bool iButtonProtocols*, iButtonKey*
1623 Function + ibutton_protocols_render_brief_data void iButtonProtocols*, const iButtonKey*, FuriString*
1624 Function + ibutton_protocols_render_data void iButtonProtocols*, const iButtonKey*, FuriString*
1625 Function + ibutton_protocols_render_error void iButtonProtocols*, const iButtonKey*, FuriString*
1626 Function + ibutton_protocols_save _Bool iButtonProtocols*, const iButtonKey*, const char*
1627 Function + ibutton_protocols_write_blank _Bool iButtonProtocols*, iButtonKey*
1628 Function + ibutton_protocols_write_copy _Bool iButtonProtocols*, iButtonKey*
1629 Function + ibutton_worker_alloc iButtonWorker* iButtonProtocols*
1630 Function + ibutton_worker_emulate_set_callback void iButtonWorker*, iButtonWorkerEmulateCallback, void*
1631 Function + ibutton_worker_emulate_start void iButtonWorker*, iButtonKey*
1632 Function + ibutton_worker_free void iButtonWorker*
1635 Function + ibutton_worker_start_thread void iButtonWorker*
1636 Function + ibutton_worker_stop void iButtonWorker*
1637 Function + ibutton_worker_stop_thread void iButtonWorker*
1638 Function + ibutton_worker_write_blank_start void iButtonWorker*, iButtonKey*
1639 Function + ibutton_worker_write_copy_start void iButtonWorker*, iButtonKey*
1640 Function + ibutton_worker_write_set_callback void iButtonWorker*, iButtonWorkerWriteCallback, void*
Function + ibutton_worker_write_start void iButtonWorker*, iButtonKey*
1641 Function + icon_animation_alloc IconAnimation* const Icon*
1642 Function + icon_animation_free void IconAnimation*
1643 Function + icon_animation_get_height uint8_t const IconAnimation*
2049 Function + notification_message_block void NotificationApp*, const NotificationSequence*
2050 Function - nrand48 long unsigned short[3]
2051 Function - on_exit int void (*)(int, void*), void*
Function + onewire_device_alloc OneWireDevice* uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t
Function + onewire_device_attach void OneWireDevice*, OneWireSlave*
Function + onewire_device_detach void OneWireDevice*
Function + onewire_device_free void OneWireDevice*
Function + onewire_device_get_id_p uint8_t* OneWireDevice*
Function + onewire_device_send_id void OneWireDevice*
2052 Function + onewire_host_alloc OneWireHost* const GpioPin*
2053 Function + onewire_host_free void OneWireHost*
2054 Function + onewire_host_read uint8_t OneWireHost*
2063 Function + onewire_host_target_search void OneWireHost*, uint8_t
2064 Function + onewire_host_write void OneWireHost*, uint8_t
2065 Function + onewire_host_write_bit void OneWireHost*, _Bool
2066 Function + onewire_host_write_bytes void OneWireHost*, const uint8_t*, uint16_t
2067 Function + onewire_slave_alloc OneWireSlave* const GpioPin*
Function + onewire_slave_attach void OneWireSlave*, OneWireDevice*
Function + onewire_slave_detach void OneWireSlave*
2068 Function + onewire_slave_free void OneWireSlave*
2069 Function + onewire_slave_receive _Bool OneWireSlave*, uint8_t*, size_t
2070 Function + onewire_slave_receive_bit _Bool OneWireSlave*
2071 Function + onewire_slave_send _Bool OneWireSlave*, const uint8_t*, size_t
2072 Function + onewire_slave_send_bit _Bool OneWireSlave*, _Bool
2073 Function + onewire_slave_set_command_callback void OneWireSlave*, OneWireSlaveCommandCallback, void*
2074 Function + onewire_slave_set_reset_callback void OneWireSlave*, OneWireSlaveResetCallback, void*
2075 Function + onewire_slave_set_result_callback void OneWireSlave*, OneWireSlaveResultCallback, void*
2076 Function + onewire_slave_start void OneWireSlave*
2077 Function + onewire_slave_stop void OneWireSlave*
2119 Function + power_reboot void PowerBootMode
2120 Function + powf float float, float
2121 Function - powl long double long double, long double
2122 Function + pretty_format_bytes_hex_canonical void FuriString*, size_t, const char*, const uint8_t*, size_t
2123 Function - printf int const char*, ...
2124 Function - prng_successor uint32_t uint32_t, uint32_t
2125 Function + property_value_out void PropertyValueContext*, const char*, unsigned int, ...