diff --git a/SConstruct b/SConstruct index 52d286953..83ee626f1 100644 --- a/SConstruct +++ b/SConstruct @@ -7,7 +7,7 @@ # construction of certain targets behind command-line options. import os -from fbt.util import path_as_posix +from fbt.util import open_browser_action DefaultEnvironment(tools=[]) diff --git a/scripts/fbt/util.py b/scripts/fbt/util.py index f08c8f4fa..27b488f73 100644 --- a/scripts/fbt/util.py +++ b/scripts/fbt/util.py @@ -105,7 +105,8 @@ class PosixPathWrapper: return self.fix_path(env.subst(self.pathobj)) -def path_as_posix(path): - if SCons.Platform.platform_default() == "win32": - return path.replace(os.path.sep, os.path.altsep) - return path +def open_browser_action(target, source, env): + if sys.platform == "darwin": + subprocess.run(["open", source[0].abspath]) + else: + webbrowser.open(source[0].abspath) diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index 8f6b8530e..e11c85759 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -639,8 +639,8 @@ Function,+,ble_glue_is_alive,_Bool, Function,+,ble_glue_is_radio_stack_ready,_Bool, Function,+,ble_glue_reinit_c2,_Bool, Function,+,ble_glue_set_key_storage_changed_callback,void,"BleGlueKeyStorageChangedCallback, void*" -Function,+,ble_glue_start,_Bool, -Function,+,ble_glue_stop,void, +Function,-,ble_glue_start,_Bool, +Function,-,ble_glue_stop,void, Function,+,ble_glue_wait_for_c2_start,_Bool,int32_t Function,-,ble_profile_hid_consumer_key_press,_Bool,"FuriHalBleProfileBase*, uint16_t" Function,-,ble_profile_hid_consumer_key_release,_Bool,"FuriHalBleProfileBase*, uint16_t" diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 8ca458eed..3d9160c9c 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -689,7 +689,7 @@ Function,-,ble_app_get_key_storage_buff,void,"uint8_t**, uint16_t*" Function,-,ble_app_init,_Bool, Function,-,ble_event_app_notification,BleEventFlowStatus,void* Function,-,ble_event_dispatcher_init,void, -Function,+,ble_event_dispatcher_process_event,BleEventFlowStatus,void* +Function,-,ble_event_dispatcher_process_event,BleEventFlowStatus,void* Function,+,ble_event_dispatcher_register_svc_handler,GapSvcEventHandler*,"BleSvcEventHandlerCb, void*" Function,-,ble_event_dispatcher_reset,void, Function,+,ble_event_dispatcher_unregister_svc_handler,void,GapSvcEventHandler* diff --git a/targets/f7/ble_glue/ble_event_thread.c b/targets/f7/ble_glue/ble_event_thread.c index 6f9a1cdcd..deafbb9a4 100644 --- a/targets/f7/ble_glue/ble_event_thread.c +++ b/targets/f7/ble_glue/ble_event_thread.c @@ -80,7 +80,7 @@ void ble_event_thread_stop(void) { } FuriThreadId thread_id = furi_thread_get_id(event_thread); - furi_assert(thread_id); + furi_check(thread_id); furi_thread_flags_set(thread_id, BLE_EVENT_THREAD_FLAG_KILL_THREAD); furi_thread_join(event_thread); furi_thread_free(event_thread); diff --git a/targets/f7/ble_glue/ble_glue.c b/targets/f7/ble_glue/ble_glue.c index 91cb020d7..9d5a1e3f9 100644 --- a/targets/f7/ble_glue/ble_glue.c +++ b/targets/f7/ble_glue/ble_glue.c @@ -224,7 +224,7 @@ bool ble_glue_wait_for_c2_start(int32_t timeout_ms) { } bool ble_glue_start(void) { - furi_assert(ble_glue); + furi_check(ble_glue); if(ble_glue->status != BleGlueStatusC2Started) { return false; @@ -243,7 +243,7 @@ bool ble_glue_start(void) { } void ble_glue_stop(void) { - furi_assert(ble_glue); + furi_check(ble_glue); ble_event_thread_stop(); // Free resources diff --git a/targets/f7/ble_glue/furi_ble/event_dispatcher.c b/targets/f7/ble_glue/furi_ble/event_dispatcher.c index ce3661d6d..19f60afb5 100644 --- a/targets/f7/ble_glue/furi_ble/event_dispatcher.c +++ b/targets/f7/ble_glue/furi_ble/event_dispatcher.c @@ -50,14 +50,14 @@ BleEventFlowStatus ble_event_dispatcher_process_event(void* payload) { } void ble_event_dispatcher_init(void) { - furi_assert(!initialized); - - GapSvcEventHandlerList_init(handlers); - initialized = true; + if(!initialized) { + GapSvcEventHandlerList_init(handlers); + initialized = true; + } } void ble_event_dispatcher_reset(void) { - furi_assert(initialized); + furi_check(initialized); furi_check(GapSvcEventHandlerList_size(handlers) == 0); GapSvcEventHandlerList_clear(handlers); diff --git a/targets/f7/ble_glue/furi_ble/gatt.c b/targets/f7/ble_glue/furi_ble/gatt.c index dcea5f987..bbcf86b0e 100644 --- a/targets/f7/ble_glue/furi_ble/gatt.c +++ b/targets/f7/ble_glue/furi_ble/gatt.c @@ -90,7 +90,7 @@ bool ble_gatt_characteristic_update( uint16_t svc_handle, BleGattCharacteristicInstance* char_instance, const void* source) { - furi_assert(char_instance); + furi_check(char_instance); const BleGattCharacteristicParams* char_descriptor = char_instance->characteristic; FURI_LOG_D(TAG, "Updating %s char", char_descriptor->name); diff --git a/targets/f7/ble_glue/gap.c b/targets/f7/ble_glue/gap.c index faac3be45..361da6749 100644 --- a/targets/f7/ble_glue/gap.c +++ b/targets/f7/ble_glue/gap.c @@ -75,7 +75,7 @@ static inline void fetch_rssi() { } static void gap_verify_connection_parameters(Gap* gap) { - furi_assert(gap); + furi_check(gap); FURI_LOG_I( TAG, @@ -515,6 +515,8 @@ bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context) { return false; } + furi_check(gap == NULL); + gap = malloc(sizeof(Gap)); gap->config = config; // Create advertising timer @@ -532,13 +534,13 @@ bool gap_init(GapConfig* config, GapEventCallback on_event_cb, void* context) { gap->conn_rssi = 127; gap->time_rssi_sample = 0; + // Command queue allocation + gap->command_queue = furi_message_queue_alloc(8, sizeof(GapCommand)); + // Thread configuration gap->thread = furi_thread_alloc_ex("BleGapDriver", 1024, gap_app, gap); furi_thread_start(gap->thread); - // Command queue allocation - gap->command_queue = furi_message_queue_alloc(8, sizeof(GapCommand)); - uint8_t adv_service_uid[2]; gap->service.adv_svc_uuid_len = 1; adv_service_uid[0] = gap->config->adv_service_uuid & 0xff;