BlueZ-5.35蓝牙设备开关控制的源码

来源:互联网 发布:mac视频播放默认 编辑:程序博客网 时间:2024/05/18 03:50

1,bluetoothctl中开关蓝牙设备的命令

{ "power",        "<on/off>", cmd_power, "Set controller 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);elserl_printf("Changing %s succeeded\n", str);}
2,rfkill命令,可以软件关闭蓝牙设备

rfkill listrfkill block XXrfkill 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;elseval = 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;}