bluetooth: split into labels and sublabels

This commit is contained in:
parport0 2020-06-24 12:53:08 +03:00
parent 4f8ccb8642
commit a24d2b50a5
5 changed files with 43 additions and 2 deletions

View File

@ -50,6 +50,7 @@ typedef struct bluetooth_driver
void (*scan)(void); void (*scan)(void);
void (*get_devices)(struct string_list *list); void (*get_devices)(struct string_list *list);
bool (*device_is_connected)(unsigned i); bool (*device_is_connected)(unsigned i);
void (*device_get_sublabel)(char *s, unsigned i, size_t len);
bool (*connect_device)(unsigned i); bool (*connect_device)(unsigned i);
const char *ident; const char *ident;
@ -79,6 +80,8 @@ void driver_bluetooth_get_devices(struct string_list *list);
bool driver_bluetooth_device_is_connected(unsigned i); bool driver_bluetooth_device_is_connected(unsigned i);
void driver_bluetooth_device_get_sublabel(char *s, unsigned i, size_t len);
bool driver_bluetooth_connect_device(unsigned i); bool driver_bluetooth_connect_device(unsigned i);
bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data); bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data);

View File

@ -93,7 +93,7 @@ static void bluetoothctl_get_devices(struct string_list* devices)
* $ bluetoothctl devices * $ bluetoothctl devices
* 'Device (mac address) (device name)' * 'Device (mac address) (device name)'
*/ */
strlcpy(device, line+7, sizeof(device)); strlcpy(device, line+24, sizeof(device));
string_list_append(devices, device, attr); string_list_append(devices, device, attr);
} }
} }
@ -190,6 +190,16 @@ static bool bluetoothctl_connect_device(unsigned idx)
return true; return true;
} }
void bluetoothctl_device_get_sublabel (char *s, unsigned i, size_t len)
{
/* bluetoothctl devices outputs lines of the format:
* $ bluetoothctl devices
* 'Device (mac address) (device name)'
*/
const char *line = lines->elems[i].data;
strlcpy(s, line+7, 18);
}
bluetooth_driver_t bluetooth_bluetoothctl = { bluetooth_driver_t bluetooth_bluetoothctl = {
bluetoothctl_init, bluetoothctl_init,
bluetoothctl_free, bluetoothctl_free,
@ -198,6 +208,7 @@ bluetooth_driver_t bluetooth_bluetoothctl = {
bluetoothctl_scan, bluetoothctl_scan,
bluetoothctl_get_devices, bluetoothctl_get_devices,
bluetoothctl_device_is_connected, bluetoothctl_device_is_connected,
bluetoothctl_device_get_sublabel,
bluetoothctl_connect_device, bluetoothctl_connect_device,
"bluetoothctl", "bluetoothctl",
}; };

View File

@ -529,7 +529,7 @@ static void bluez_get_devices (struct string_list* devices_string_list)
for (i = 0; i < devices->count; i++) for (i = 0; i < devices->count; i++)
{ {
char device[64]; char device[64];
snprintf(device, 64, "%s %s", devices->data[i].address, devices->data[i].name); strlcpy(device, devices->data[i].name, 64);
string_list_append(devices_string_list, device, attr); string_list_append(devices_string_list, device, attr);
} }
} }
@ -553,6 +553,11 @@ static bool bluez_device_is_connected (unsigned i)
} }
} }
static void bluez_device_get_sublabel (char *s, unsigned i, size_t len)
{
strlcpy(s, devices->data[i].address, len);
}
static bool bluez_connect_device (unsigned i) static bool bluez_connect_device (unsigned i)
{ {
bluez_dbus_connect(); bluez_dbus_connect();
@ -582,6 +587,7 @@ bluetooth_driver_t bluetooth_bluez = {
bluez_scan, bluez_scan,
bluez_get_devices, bluez_get_devices,
bluez_device_is_connected, bluez_device_is_connected,
bluez_device_get_sublabel,
bluez_connect_device, bluez_connect_device,
"bluez", "bluez",
}; };

View File

@ -30,6 +30,7 @@
#endif #endif
#include "../../core_info.h" #include "../../core_info.h"
#include "../../verbosity.h" #include "../../verbosity.h"
#include "../../bluetooth/bluetooth_driver.h"
#ifdef HAVE_NETWORKING #ifdef HAVE_NETWORKING
#include "../../network/netplay/netplay.h" #include "../../network/netplay/netplay.h"
@ -875,6 +876,16 @@ static int action_bind_sublabel_systeminfo_controller_entry(
return 0; return 0;
} }
static int action_bind_sublabel_bluetooth_list(
file_list_t *list,
unsigned type, unsigned i,
const char *label, const char *path,
char *s, size_t len)
{
driver_bluetooth_device_get_sublabel(s, i, len);
return 0;
}
static int action_bind_sublabel_cheevos_entry( static int action_bind_sublabel_cheevos_entry(
file_list_t *list, file_list_t *list,
unsigned type, unsigned i, unsigned type, unsigned i,
@ -3042,6 +3053,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT: case MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_shared_context); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_shared_context);
break; break;
case MENU_ENUM_LABEL_CONNECT_BLUETOOTH:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_bluetooth_list);
break;
case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY: case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY:
case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE: case MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE:
case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY: case MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY:

View File

@ -866,6 +866,7 @@ static bluetooth_driver_t bluetooth_null = {
NULL, /* scan */ NULL, /* scan */
NULL, /* get_devices */ NULL, /* get_devices */
NULL, /* device_is_connected */ NULL, /* device_is_connected */
NULL, /* device_get_sublabel */
NULL, /* connect_device */ NULL, /* connect_device */
"null", "null",
}; };
@ -20140,6 +20141,12 @@ bool driver_bluetooth_device_is_connected(unsigned i)
return p_rarch->bluetooth_driver->device_is_connected(i); return p_rarch->bluetooth_driver->device_is_connected(i);
} }
void driver_bluetooth_device_get_sublabel(char *s, unsigned i, size_t len)
{
struct rarch_state *p_rarch = &rarch_st;
p_rarch->bluetooth_driver->device_get_sublabel(s, i, len);
}
bool driver_bluetooth_connect_device(unsigned i) bool driver_bluetooth_connect_device(unsigned i)
{ {
struct rarch_state *p_rarch = &rarch_st; struct rarch_state *p_rarch = &rarch_st;