1,bluetoothctl中开关蓝牙设备的命令
{ "power", "
static void cmd_power(const char *arg)
{
dbus_bool_t powered;
char *str;
if (parse_argument_on_off(arg, &powered) == FALSE)
return;
if (check_default_ctrl() == FALSE)
return;
str = g_strdup_printf("power %s", powered == TRUE ? "on" : "off");
if (g_dbus_proxy_set_property_basic(default_ctrl, "Powered",
DBUS_TYPE_BOOLEAN, &powered,
generic_callback, str, g_free) == TRUE)
return;
g_free(str);
}
static void generic_callback(const DBusError *error, void *user_data)
{
char *str = user_data;
if (dbus_error_is_set(error))
rl_printf("Failed to set %s: %s\n", str, error->name);
else
rl_printf("Changing %s succeeded\n", str);
}
2,rfkill命令,可以软件关闭蓝牙设备
rfkill list
rfkill block XX
rfkill unblock XX
3,btmgmt中通过命令power关闭蓝牙设备
{ "power", cmd_power, "Toggle powered state" }
static void cmd_power(struct mgmt *mgmt, uint16_t index, int argc, char **argv)
{
cmd_setting(mgmt, index, MGMT_OP_SET_POWERED, argc, argv);
}
static void cmd_setting(struct mgmt *mgmt, uint16_t index, uint16_t op,
int argc, char **argv)
{
uint8_t val;
if (argc < 2) {
print("Specify \"on\" or \"off\"");
return noninteractive_quit(EXIT_FAILURE);
}
if (strcasecmp(argv[1], "on") == 0 || strcasecmp(argv[1], "yes") == 0)
val = 1;
else if (strcasecmp(argv[1], "off") == 0)
val = 0;
else
val = atoi(argv[1]);
if (index == MGMT_INDEX_NONE)
index = 0;
if (send_cmd(mgmt, op, index, sizeof(val), &val, setting_rsp) == 0) {
error("Unable to send %s cmd", mgmt_opstr(op));
return noninteractive_quit(EXIT_FAILURE);
}
}
static unsigned int send_cmd(struct mgmt *mgmt, uint16_t op, uint16_t id,
uint16_t len, const void *param,
void (*cb)(uint16_t id, uint16_t op,
uint8_t status, uint16_t len,
const void *param))
{
struct command_data *data;
unsigned int send_id;
data = new0(struct command_data, 1);
if (!data)
return 0;
data->id = id;
data->op = op;
data->callback = cb;
send_id = mgmt_send(mgmt, op, id, len, param, cmd_rsp, data, free);
if (send_id == 0)
free(data);
return send_id;
}