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

[FL-3954, FL-3955] New CLI architecture (#4111)

* feat: FuriThread stdin

* ci: fix f18

* feat: stdio callback context

* feat: FuriPipe

* POTENTIALLY EXPLOSIVE pipe welding

* fix: non-explosive welding

* Revert welding

* docs: furi_pipe

* feat: pipe event loop integration

* update f18 sdk

* f18

* docs: make doxygen happy

* fix: event loop not triggering when pipe attached to stdio

* fix: partial stdout in pipe

* allow simultaneous in and out subscription in event loop

* feat: vcp i/o

* feat: cli ansi stuffs and history

* feat: more line editing

* working but slow cli rewrite

* restore previous speed after 4 days of debugging 🥲

* fix: cli_app_should_stop

* fix: cli and event_loop memory leaks

* style: remove commented out code

* ci: fix pvs warnings

* fix: unit tests, event_loop crash

* ci: fix build

* ci: silence pvs warning

* feat: cli gpio

* ci: fix formatting

* Fix memory leak during event loop unsubscription

* Event better memory leak fix

* feat: cli completions

* Merge remote-tracking branch 'origin/dev' into portasynthinca3/3928-cli-threads

* merge fixups

* temporarily exclude speaker_debug app

* pvs and unit tests fixups

* feat: commands in fals

* move commands out of flash, code cleanup

* ci: fix errors

* fix: run commands in buffer when stopping session

* speedup cli file transfer

* fix f18

* separate cli_shell into modules

* fix pvs warning

* fix qflipper refusing to connect

* remove temp debug logs

* remove erroneous conclusion

* Fix memory leak during event loop unsubscription

* Event better memory leak fix

* unit test for the fix

* improve thread stdio callback signatures

* pipe stdout timeout

* update api symbols

* fix f18, formatting

* fix pvs warnings

* increase stack size, hope to fix unit tests

* cli: revert flag changes

* cli: fix formatting

* cli, fbt: loopback perf benchmark

* thread, event_loop: subscribing to thread flags

* cli: signal internal events using thread flags, improve performance

* fix f18, formatting

* event_loop: fix crash

* storage_cli: increase write_chunk buffer size again

* cli: explanation for order=0

* thread, event_loop: thread flags callback refactor

* cli: increase stack size

* cli: rename cli_app_should_stop -> cli_is_pipe_broken_or_is_etx_next_char

* cli: use plain array instead of mlib for history

* cli: prepend file name to static fns

* cli: fix formatting

* cli_shell: increase stack size

* cli: fix rpc lockup

* cli: better lockup fix

* cli: fix f18

* fix merge

---------

Co-authored-by: Georgii Surkov <georgii.surkov@outlook.com>
Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Anna Antonenko
2025-04-02 22:10:10 +04:00
committed by GitHub
parent 5786066512
commit 13333edd30
60 changed files with 2074 additions and 1339 deletions

View File

@@ -1,8 +1,9 @@
entry,status,name,type,params
Version,+,83.0,,
Version,+,84.0,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_ansi.h,,
Header,+,applications/services/cli/cli_vcp.h,,
Header,+,applications/services/dialogs/dialogs.h,,
Header,+,applications/services/dolphin/dolphin.h,,
@@ -778,18 +779,17 @@ Function,-,ceill,long double,long double
Function,-,cfree,void,void*
Function,-,clearerr,void,FILE*
Function,-,clearerr_unlocked,void,FILE*
Function,+,cli_add_command,void,"Cli*, const char*, CliCommandFlag, CliCallback, void*"
Function,+,cli_cmd_interrupt_received,_Bool,Cli*
Function,+,cli_add_command,void,"Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*"
Function,+,cli_add_command_ex,void,"Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*, size_t"
Function,+,cli_ansi_parser_alloc,CliAnsiParser*,
Function,+,cli_ansi_parser_feed,CliAnsiParserResult,"CliAnsiParser*, char"
Function,+,cli_ansi_parser_feed_timeout,CliAnsiParserResult,CliAnsiParser*
Function,+,cli_ansi_parser_free,void,CliAnsiParser*
Function,+,cli_delete_command,void,"Cli*, const char*"
Function,+,cli_getc,char,Cli*
Function,+,cli_is_connected,_Bool,Cli*
Function,+,cli_nl,void,Cli*
Function,+,cli_is_pipe_broken_or_is_etx_next_char,_Bool,PipeSide*
Function,+,cli_print_usage,void,"const char*, const char*, const char*"
Function,+,cli_read,size_t,"Cli*, uint8_t*, size_t"
Function,+,cli_read_timeout,size_t,"Cli*, uint8_t*, size_t, uint32_t"
Function,+,cli_session_close,void,Cli*
Function,+,cli_session_open,void,"Cli*, const void*"
Function,+,cli_write,void,"Cli*, const uint8_t*, size_t"
Function,+,cli_vcp_disable,void,CliVcp*
Function,+,cli_vcp_enable,void,CliVcp*
Function,+,composite_api_resolver_add,void,"CompositeApiResolver*, const ElfApiInterface*"
Function,+,composite_api_resolver_alloc,CompositeApiResolver*,
Function,+,composite_api_resolver_free,void,CompositeApiResolver*
@@ -1138,6 +1138,7 @@ Function,+,furi_event_loop_subscribe_message_queue,void,"FuriEventLoop*, FuriMes
Function,+,furi_event_loop_subscribe_mutex,void,"FuriEventLoop*, FuriMutex*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_semaphore,void,"FuriEventLoop*, FuriSemaphore*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_stream_buffer,void,"FuriEventLoop*, FuriStreamBuffer*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_thread_flags,void,"FuriEventLoop*, FuriEventLoopThreadFlagsCallback, void*"
Function,+,furi_event_loop_tick_set,void,"FuriEventLoop*, uint32_t, FuriEventLoopTickCallback, void*"
Function,+,furi_event_loop_timer_alloc,FuriEventLoopTimer*,"FuriEventLoop*, FuriEventLoopTimerCallback, FuriEventLoopTimerType, void*"
Function,+,furi_event_loop_timer_free,void,FuriEventLoopTimer*
@@ -1148,6 +1149,7 @@ Function,+,furi_event_loop_timer_restart,void,FuriEventLoopTimer*
Function,+,furi_event_loop_timer_start,void,"FuriEventLoopTimer*, uint32_t"
Function,+,furi_event_loop_timer_stop,void,FuriEventLoopTimer*
Function,+,furi_event_loop_unsubscribe,void,"FuriEventLoop*, FuriEventLoopObject*"
Function,+,furi_event_loop_unsubscribe_thread_flags,void,FuriEventLoop*
Function,+,furi_get_tick,uint32_t,
Function,+,furi_hal_adc_acquire,FuriHalAdcHandle*,
Function,+,furi_hal_adc_configure,void,FuriHalAdcHandle*
@@ -2329,14 +2331,14 @@ Function,+,pipe_bytes_available,size_t,PipeSide*
Function,+,pipe_detach_from_event_loop,void,PipeSide*
Function,+,pipe_free,void,PipeSide*
Function,+,pipe_install_as_stdio,void,PipeSide*
Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait"
Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t"
Function,+,pipe_role,PipeRole,PipeSide*
Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait"
Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t"
Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent"
Function,+,pipe_set_callback_context,void,"PipeSide*, void*"
Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent"
Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent"
Function,+,pipe_set_stdout_timeout,void,"PipeSide*, FuriWait"
Function,+,pipe_set_state_check_period,void,"PipeSide*, FuriWait"
Function,+,pipe_spaces_available,size_t,PipeSide*
Function,+,pipe_state,PipeState,PipeSide*
Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*"
@@ -2939,7 +2941,6 @@ Variable,-,_sys_errlist,const char* const[],
Variable,-,_sys_nerr,int,
Variable,-,ble_profile_hid,const FuriHalBleProfileTemplate*,
Variable,+,ble_profile_serial,const FuriHalBleProfileTemplate* const,
Variable,+,cli_vcp,const CliSession,
Variable,+,compress_config_heatshrink_default,const CompressConfigHeatshrink,
Variable,+,firmware_api_interface,const ElfApiInterface* const,
Variable,+,furi_hal_i2c_bus_external,FuriHalI2cBus,
1 entry status name type params
2 Version + 83.0 84.0
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/bt/bt_service/bt_keys_storage.h
5 Header + applications/services/cli/cli.h
6 Header + applications/services/cli/cli_ansi.h
7 Header + applications/services/cli/cli_vcp.h
8 Header + applications/services/dialogs/dialogs.h
9 Header + applications/services/dolphin/dolphin.h
779 Function - cfree void void*
780 Function - clearerr void FILE*
781 Function - clearerr_unlocked void FILE*
782 Function + cli_add_command void Cli*, const char*, CliCommandFlag, CliCallback, void* Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*
783 Function + cli_cmd_interrupt_received cli_add_command_ex _Bool void Cli* Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*, size_t
784 Function + cli_ansi_parser_alloc CliAnsiParser*
785 Function + cli_ansi_parser_feed CliAnsiParserResult CliAnsiParser*, char
786 Function + cli_ansi_parser_feed_timeout CliAnsiParserResult CliAnsiParser*
787 Function + cli_ansi_parser_free void CliAnsiParser*
788 Function + cli_delete_command void Cli*, const char*
789 Function + cli_getc cli_is_pipe_broken_or_is_etx_next_char char _Bool Cli* PipeSide*
Function + cli_is_connected _Bool Cli*
Function + cli_nl void Cli*
790 Function + cli_print_usage void const char*, const char*, const char*
791 Function + cli_read cli_vcp_disable size_t void Cli*, uint8_t*, size_t CliVcp*
792 Function + cli_read_timeout cli_vcp_enable size_t void Cli*, uint8_t*, size_t, uint32_t CliVcp*
Function + cli_session_close void Cli*
Function + cli_session_open void Cli*, const void*
Function + cli_write void Cli*, const uint8_t*, size_t
793 Function + composite_api_resolver_add void CompositeApiResolver*, const ElfApiInterface*
794 Function + composite_api_resolver_alloc CompositeApiResolver*
795 Function + composite_api_resolver_free void CompositeApiResolver*
1138 Function + furi_event_loop_subscribe_mutex void FuriEventLoop*, FuriMutex*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1139 Function + furi_event_loop_subscribe_semaphore void FuriEventLoop*, FuriSemaphore*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1140 Function + furi_event_loop_subscribe_stream_buffer void FuriEventLoop*, FuriStreamBuffer*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1141 Function + furi_event_loop_subscribe_thread_flags void FuriEventLoop*, FuriEventLoopThreadFlagsCallback, void*
1142 Function + furi_event_loop_tick_set void FuriEventLoop*, uint32_t, FuriEventLoopTickCallback, void*
1143 Function + furi_event_loop_timer_alloc FuriEventLoopTimer* FuriEventLoop*, FuriEventLoopTimerCallback, FuriEventLoopTimerType, void*
1144 Function + furi_event_loop_timer_free void FuriEventLoopTimer*
1149 Function + furi_event_loop_timer_start void FuriEventLoopTimer*, uint32_t
1150 Function + furi_event_loop_timer_stop void FuriEventLoopTimer*
1151 Function + furi_event_loop_unsubscribe void FuriEventLoop*, FuriEventLoopObject*
1152 Function + furi_event_loop_unsubscribe_thread_flags void FuriEventLoop*
1153 Function + furi_get_tick uint32_t
1154 Function + furi_hal_adc_acquire FuriHalAdcHandle*
1155 Function + furi_hal_adc_configure void FuriHalAdcHandle*
2331 Function + pipe_detach_from_event_loop void PipeSide*
2332 Function + pipe_free void PipeSide*
2333 Function + pipe_install_as_stdio void PipeSide*
2334 Function + pipe_receive size_t PipeSide*, void*, size_t, FuriWait PipeSide*, void*, size_t
2335 Function + pipe_role PipeRole PipeSide*
2336 Function + pipe_send size_t PipeSide*, const void*, size_t, FuriWait PipeSide*, const void*, size_t
2337 Function + pipe_set_broken_callback void PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent
2338 Function + pipe_set_callback_context void PipeSide*, void*
2339 Function + pipe_set_data_arrived_callback void PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent
2340 Function + pipe_set_space_freed_callback void PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent
2341 Function + pipe_set_stdout_timeout pipe_set_state_check_period void PipeSide*, FuriWait
2342 Function + pipe_spaces_available size_t PipeSide*
2343 Function + pipe_state PipeState PipeSide*
2344 Function + plugin_manager_alloc PluginManager* const char*, uint32_t, const ElfApiInterface*
2941 Variable - _sys_nerr int
2942 Variable - ble_profile_hid const FuriHalBleProfileTemplate*
2943 Variable + ble_profile_serial const FuriHalBleProfileTemplate* const
Variable + cli_vcp const CliSession
2944 Variable + compress_config_heatshrink_default const CompressConfigHeatshrink
2945 Variable + firmware_api_interface const ElfApiInterface* const
2946 Variable + furi_hal_i2c_bus_external FuriHalI2cBus

View File

@@ -1,9 +1,10 @@
entry,status,name,type,params
Version,+,83.0,,
Version,+,84.0,,
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_ansi.h,,
Header,+,applications/services/cli/cli_vcp.h,,
Header,+,applications/services/dialogs/dialogs.h,,
Header,+,applications/services/dolphin/dolphin.h,,
@@ -855,18 +856,17 @@ Function,-,ceill,long double,long double
Function,-,cfree,void,void*
Function,-,clearerr,void,FILE*
Function,-,clearerr_unlocked,void,FILE*
Function,+,cli_add_command,void,"Cli*, const char*, CliCommandFlag, CliCallback, void*"
Function,+,cli_cmd_interrupt_received,_Bool,Cli*
Function,+,cli_add_command,void,"Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*"
Function,+,cli_add_command_ex,void,"Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*, size_t"
Function,+,cli_ansi_parser_alloc,CliAnsiParser*,
Function,+,cli_ansi_parser_feed,CliAnsiParserResult,"CliAnsiParser*, char"
Function,+,cli_ansi_parser_feed_timeout,CliAnsiParserResult,CliAnsiParser*
Function,+,cli_ansi_parser_free,void,CliAnsiParser*
Function,+,cli_delete_command,void,"Cli*, const char*"
Function,+,cli_getc,char,Cli*
Function,+,cli_is_connected,_Bool,Cli*
Function,+,cli_nl,void,Cli*
Function,+,cli_is_pipe_broken_or_is_etx_next_char,_Bool,PipeSide*
Function,+,cli_print_usage,void,"const char*, const char*, const char*"
Function,+,cli_read,size_t,"Cli*, uint8_t*, size_t"
Function,+,cli_read_timeout,size_t,"Cli*, uint8_t*, size_t, uint32_t"
Function,+,cli_session_close,void,Cli*
Function,+,cli_session_open,void,"Cli*, const void*"
Function,+,cli_write,void,"Cli*, const uint8_t*, size_t"
Function,+,cli_vcp_disable,void,CliVcp*
Function,+,cli_vcp_enable,void,CliVcp*
Function,+,composite_api_resolver_add,void,"CompositeApiResolver*, const ElfApiInterface*"
Function,+,composite_api_resolver_alloc,CompositeApiResolver*,
Function,+,composite_api_resolver_free,void,CompositeApiResolver*
@@ -1250,6 +1250,7 @@ Function,+,furi_event_loop_subscribe_message_queue,void,"FuriEventLoop*, FuriMes
Function,+,furi_event_loop_subscribe_mutex,void,"FuriEventLoop*, FuriMutex*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_semaphore,void,"FuriEventLoop*, FuriSemaphore*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_stream_buffer,void,"FuriEventLoop*, FuriStreamBuffer*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*"
Function,+,furi_event_loop_subscribe_thread_flags,void,"FuriEventLoop*, FuriEventLoopThreadFlagsCallback, void*"
Function,+,furi_event_loop_tick_set,void,"FuriEventLoop*, uint32_t, FuriEventLoopTickCallback, void*"
Function,+,furi_event_loop_timer_alloc,FuriEventLoopTimer*,"FuriEventLoop*, FuriEventLoopTimerCallback, FuriEventLoopTimerType, void*"
Function,+,furi_event_loop_timer_free,void,FuriEventLoopTimer*
@@ -1260,6 +1261,7 @@ Function,+,furi_event_loop_timer_restart,void,FuriEventLoopTimer*
Function,+,furi_event_loop_timer_start,void,"FuriEventLoopTimer*, uint32_t"
Function,+,furi_event_loop_timer_stop,void,FuriEventLoopTimer*
Function,+,furi_event_loop_unsubscribe,void,"FuriEventLoop*, FuriEventLoopObject*"
Function,+,furi_event_loop_unsubscribe_thread_flags,void,FuriEventLoop*
Function,+,furi_get_tick,uint32_t,
Function,+,furi_hal_adc_acquire,FuriHalAdcHandle*,
Function,+,furi_hal_adc_configure,void,FuriHalAdcHandle*
@@ -2967,14 +2969,14 @@ Function,+,pipe_bytes_available,size_t,PipeSide*
Function,+,pipe_detach_from_event_loop,void,PipeSide*
Function,+,pipe_free,void,PipeSide*
Function,+,pipe_install_as_stdio,void,PipeSide*
Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait"
Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t"
Function,+,pipe_role,PipeRole,PipeSide*
Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait"
Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t"
Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent"
Function,+,pipe_set_callback_context,void,"PipeSide*, void*"
Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent"
Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent"
Function,+,pipe_set_stdout_timeout,void,"PipeSide*, FuriWait"
Function,+,pipe_set_state_check_period,void,"PipeSide*, FuriWait"
Function,+,pipe_spaces_available,size_t,PipeSide*
Function,+,pipe_state,PipeState,PipeSide*
Function,+,plugin_manager_alloc,PluginManager*,"const char*, uint32_t, const ElfApiInterface*"
@@ -3791,7 +3793,6 @@ Variable,-,_sys_errlist,const char* const[],
Variable,-,_sys_nerr,int,
Variable,-,ble_profile_hid,const FuriHalBleProfileTemplate*,
Variable,+,ble_profile_serial,const FuriHalBleProfileTemplate* const,
Variable,+,cli_vcp,const CliSession,
Variable,+,compress_config_heatshrink_default,const CompressConfigHeatshrink,
Variable,+,firmware_api_interface,const ElfApiInterface* const,
Variable,+,furi_hal_i2c_bus_external,FuriHalI2cBus,
1 entry status name type params
2 Version + 83.0 84.0
3 Header + applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h
4 Header + applications/services/bt/bt_service/bt.h
5 Header + applications/services/bt/bt_service/bt_keys_storage.h
6 Header + applications/services/cli/cli.h
7 Header + applications/services/cli/cli_ansi.h
8 Header + applications/services/cli/cli_vcp.h
9 Header + applications/services/dialogs/dialogs.h
10 Header + applications/services/dolphin/dolphin.h
856 Function - cfree void void*
857 Function - clearerr void FILE*
858 Function - clearerr_unlocked void FILE*
859 Function + cli_add_command void Cli*, const char*, CliCommandFlag, CliCallback, void* Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*
860 Function + cli_cmd_interrupt_received cli_add_command_ex _Bool void Cli* Cli*, const char*, CliCommandFlag, CliExecuteCallback, void*, size_t
861 Function + cli_ansi_parser_alloc CliAnsiParser*
862 Function + cli_ansi_parser_feed CliAnsiParserResult CliAnsiParser*, char
863 Function + cli_ansi_parser_feed_timeout CliAnsiParserResult CliAnsiParser*
864 Function + cli_ansi_parser_free void CliAnsiParser*
865 Function + cli_delete_command void Cli*, const char*
866 Function + cli_getc cli_is_pipe_broken_or_is_etx_next_char char _Bool Cli* PipeSide*
Function + cli_is_connected _Bool Cli*
Function + cli_nl void Cli*
867 Function + cli_print_usage void const char*, const char*, const char*
868 Function + cli_read cli_vcp_disable size_t void Cli*, uint8_t*, size_t CliVcp*
869 Function + cli_read_timeout cli_vcp_enable size_t void Cli*, uint8_t*, size_t, uint32_t CliVcp*
Function + cli_session_close void Cli*
Function + cli_session_open void Cli*, const void*
Function + cli_write void Cli*, const uint8_t*, size_t
870 Function + composite_api_resolver_add void CompositeApiResolver*, const ElfApiInterface*
871 Function + composite_api_resolver_alloc CompositeApiResolver*
872 Function + composite_api_resolver_free void CompositeApiResolver*
1250 Function + furi_event_loop_subscribe_mutex void FuriEventLoop*, FuriMutex*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1251 Function + furi_event_loop_subscribe_semaphore void FuriEventLoop*, FuriSemaphore*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1252 Function + furi_event_loop_subscribe_stream_buffer void FuriEventLoop*, FuriStreamBuffer*, FuriEventLoopEvent, FuriEventLoopEventCallback, void*
1253 Function + furi_event_loop_subscribe_thread_flags void FuriEventLoop*, FuriEventLoopThreadFlagsCallback, void*
1254 Function + furi_event_loop_tick_set void FuriEventLoop*, uint32_t, FuriEventLoopTickCallback, void*
1255 Function + furi_event_loop_timer_alloc FuriEventLoopTimer* FuriEventLoop*, FuriEventLoopTimerCallback, FuriEventLoopTimerType, void*
1256 Function + furi_event_loop_timer_free void FuriEventLoopTimer*
1261 Function + furi_event_loop_timer_start void FuriEventLoopTimer*, uint32_t
1262 Function + furi_event_loop_timer_stop void FuriEventLoopTimer*
1263 Function + furi_event_loop_unsubscribe void FuriEventLoop*, FuriEventLoopObject*
1264 Function + furi_event_loop_unsubscribe_thread_flags void FuriEventLoop*
1265 Function + furi_get_tick uint32_t
1266 Function + furi_hal_adc_acquire FuriHalAdcHandle*
1267 Function + furi_hal_adc_configure void FuriHalAdcHandle*
2969 Function + pipe_detach_from_event_loop void PipeSide*
2970 Function + pipe_free void PipeSide*
2971 Function + pipe_install_as_stdio void PipeSide*
2972 Function + pipe_receive size_t PipeSide*, void*, size_t, FuriWait PipeSide*, void*, size_t
2973 Function + pipe_role PipeRole PipeSide*
2974 Function + pipe_send size_t PipeSide*, const void*, size_t, FuriWait PipeSide*, const void*, size_t
2975 Function + pipe_set_broken_callback void PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent
2976 Function + pipe_set_callback_context void PipeSide*, void*
2977 Function + pipe_set_data_arrived_callback void PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent
2978 Function + pipe_set_space_freed_callback void PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent
2979 Function + pipe_set_stdout_timeout pipe_set_state_check_period void PipeSide*, FuriWait
2980 Function + pipe_spaces_available size_t PipeSide*
2981 Function + pipe_state PipeState PipeSide*
2982 Function + plugin_manager_alloc PluginManager* const char*, uint32_t, const ElfApiInterface*
3793 Variable - _sys_nerr int
3794 Variable - ble_profile_hid const FuriHalBleProfileTemplate*
3795 Variable + ble_profile_serial const FuriHalBleProfileTemplate* const
Variable + cli_vcp const CliSession
3796 Variable + compress_config_heatshrink_default const CompressConfigHeatshrink
3797 Variable + firmware_api_interface const ElfApiInterface* const
3798 Variable + furi_hal_i2c_bus_external FuriHalI2cBus

View File

@@ -9,11 +9,21 @@
extern "C" {
#endif
typedef enum {
CdcStateDisconnected,
CdcStateConnected,
} CdcState;
typedef enum {
CdcCtrlLineDTR = (1 << 0),
CdcCtrlLineRTS = (1 << 1),
} CdcCtrlLine;
typedef struct {
void (*tx_ep_callback)(void* context);
void (*rx_ep_callback)(void* context);
void (*state_callback)(void* context, uint8_t state);
void (*ctrl_line_callback)(void* context, uint8_t state);
void (*state_callback)(void* context, CdcState state);
void (*ctrl_line_callback)(void* context, CdcCtrlLine ctrl_lines);
void (*config_callback)(void* context, struct usb_cdc_line_coding* config);
} CdcCallbacks;