diff --git a/ios/RetroArch/RetroArch_iOS.h b/ios/RetroArch/RetroArch_iOS.h index 6295c5fe64..1232f3701b 100644 --- a/ios/RetroArch/RetroArch_iOS.h +++ b/ios/RetroArch/RetroArch_iOS.h @@ -26,9 +26,6 @@ - (void)refreshConfig; - (void)refreshSystemConfig; -- (IBAction)startBluetooth; -- (IBAction)stopBluetooth; - @property (strong, nonatomic) NSString* documentsDirectory; // e.g. /var/mobile/Documents @property (strong, nonatomic) NSString* systemDirectory; // e.g. /var/mobile/Documents/.RetroArch @property (strong, nonatomic) NSString* systemConfigPath; // e.g. /var/mobile/Documents/.RetroArch/frontend.cfg @@ -37,3 +34,4 @@ // utility.m extern NSString* ios_get_value_from_config(config_file_t* config, NSString* name, NSString* defaultValue); +extern bool path_make_and_check_directory(const char* path, mode_t mode, int amode); diff --git a/ios/RetroArch/input/BTStack/btdynamic.c b/ios/RetroArch/input/BTStack/btdynamic.c index a3bf109956..bc48a27659 100644 --- a/ios/RetroArch/input/BTStack/btdynamic.c +++ b/ios/RetroArch/input/BTStack/btdynamic.c @@ -64,7 +64,7 @@ static bool btstack_loaded; static bool btstack_open; static bool btstack_poweron; -bool btstack_load() +bool btstack_try_load() { assert(sizeof(void**) == sizeof(void(*)())); @@ -108,47 +108,28 @@ bool btstack_load() return true; } -void btstack_start() +void btstack_set_poweron(bool on) { - if (!btstack_load()) + if (!btstack_try_load()) return; - - if (!btstack_open) + + if (!btstack_open && bt_open_ptr()) { - if (bt_open_ptr()) - { - ios_add_log_message("BTstack: bt_open failed"); - btstack_loaded = false; - return; - } + ios_add_log_message("BTstack: bt_open failed"); + btstack_loaded = false; + return; } btstack_open = true; - if (!btstack_poweron) + if (on != btstack_poweron) { - ios_add_log_message("BTstack: Turning on"); - bt_send_cmd_ptr(btstack_set_power_mode_ptr, HCI_POWER_ON); - btstack_poweron = true; - } -} - -void btstack_stop() -{ - if (btstack_load() && btstack_open && btstack_poweron) - { - ios_add_log_message("BTstack: Turning off"); - bt_send_cmd_ptr(btstack_set_power_mode_ptr, HCI_POWER_OFF); - btstack_poweron = false; - } -} - -bool btstack_is_loaded() -{ - return btstack_load(); + btstack_poweron = on; + ios_add_log_message("BTstack: Turning %s", on ? "on" : "off"); + bt_send_cmd_ptr(btstack_set_power_mode_ptr, on ? HCI_POWER_ON : HCI_POWER_OFF); + } } bool btstack_is_running() { return btstack_poweron; } - diff --git a/ios/RetroArch/input/BTStack/btdynamic.h b/ios/RetroArch/input/BTStack/btdynamic.h index 2f2e74fe51..ce8d3d11a7 100644 --- a/ios/RetroArch/input/BTStack/btdynamic.h +++ b/ios/RetroArch/input/BTStack/btdynamic.h @@ -20,10 +20,8 @@ #include "btstack/utils.h" #include "btstack/btstack.h" -bool btstack_load(); -void btstack_start(); -void btstack_stop(); -bool btstack_is_loaded(); +bool btstack_try_load(); +void btstack_set_poweron(bool on); bool btstack_is_running(); #ifndef BUILDING_BTDYNAMIC diff --git a/ios/RetroArch/main.m b/ios/RetroArch/main.m index d530479a03..702a9db720 100644 --- a/ios/RetroArch/main.m +++ b/ios/RetroArch/main.m @@ -13,7 +13,6 @@ * If not, see . */ -#include #include #include @@ -37,14 +36,6 @@ static bool enable_btstack; static bool use_icade; static uint32_t icade_buttons; -bool path_make_and_check_directory(const char* path, mode_t mode, int amode) -{ - if (!path_is_directory(path) && mkdir(path, mode) != 0) - return false; - - return access(path, amode) == 0; -} - // Input helpers void ios_copy_input(ios_input_data_t* data) { @@ -445,10 +436,7 @@ static void event_reload_config(void* userdata) config_get_bool(conf, "ios_use_icade", &use_icade); config_get_bool(conf, "ios_use_btstack", &enable_btstack); - if (enable_btstack) - [self startBluetooth]; - else - [self stopBluetooth]; + btstack_set_poweron(enable_btstack); config_file_free(conf); } @@ -542,19 +530,6 @@ static void event_reload_config(void* userdata) [self pushViewController:[RASystemSettingsList new] animated:YES]; } -#pragma mark Bluetooth Helpers -- (IBAction)startBluetooth -{ - if (btstack_is_loaded() && !btstack_is_running()) - btstack_start(); -} - -- (IBAction)stopBluetooth -{ - if (btstack_is_loaded()) - btstack_stop(); -} - @end void ios_rarch_exited(void* result) diff --git a/ios/RetroArch/settings.m b/ios/RetroArch/settings.m index e665717e85..4aa3a98b7f 100644 --- a/ios/RetroArch/settings.m +++ b/ios/RetroArch/settings.m @@ -351,7 +351,7 @@ static NSArray* build_input_port_group(config_file_t* config, uint32_t player) [NSArray arrayWithObjects:@"Bluetooth", // TODO: Note that with this turned off the native bluetooth is expected to be a real keyboard boolean_setting(config, @"ios_use_icade", @"Native BT is iCade", @"false"), - btstack_is_loaded() ? boolean_setting(config, @"ios_use_btstack", @"Enable BTstack", @"false") : nil, + btstack_try_load() ? boolean_setting(config, @"ios_use_btstack", @"Enable BTstack", @"false") : nil, nil], [NSArray arrayWithObjects:@"Orientations", boolean_setting(config, @"ios_allow_portrait", @"Portrait", @"true"), @@ -392,16 +392,9 @@ static NSArray* build_input_port_group(config_file_t* config, uint32_t player) if ([@"Diagnostic Log" isEqualToString:setting.label]) [[RetroArch_iOS get] pushViewController:[RALogView new] animated:YES]; else if ([@"Enable BTstack" isEqualToString:setting.label]) - { - if ([@"true" isEqualToString:setting.value]) - [RetroArch_iOS.get startBluetooth]; - else - [RetroArch_iOS.get stopBluetooth]; - } + btstack_set_poweron([setting.value isEqualToString:@"true"]); else if([@"Global Core Config" isEqualToString:setting.label]) - { [RetroArch_iOS.get pushViewController:[[RASettingsList alloc] initWithModule:nil] animated:YES]; - } else { RAModuleInfo* data = (RAModuleInfo*)objc_getAssociatedObject(setting, "USERDATA"); diff --git a/ios/RetroArch/utility.m b/ios/RetroArch/utility.m index 8d51a5d33b..9d0544723b 100644 --- a/ios/RetroArch/utility.m +++ b/ios/RetroArch/utility.m @@ -13,6 +13,7 @@ * If not, see . */ +#include "file.h" #import "views.h" // Fetch a value from a config file, returning defaultValue if the value is not present @@ -27,6 +28,15 @@ NSString* ios_get_value_from_config(config_file_t* config, NSString* name, NSStr return result; } +// Ensures a directory exists and has correct permissions +bool path_make_and_check_directory(const char* path, mode_t mode, int amode) +{ + if (!path_is_directory(path) && mkdir(path, mode) != 0) + return false; + + return access(path, amode) == 0; +} + // Simple class to reduce code duplication for fixed table views @implementation RATableViewController