From d94debd256a6f4bd402b4d0510df1d0451a03d8d Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sun, 12 Jan 2014 02:23:01 -0800 Subject: [PATCH] tools: Remove GLib mainloop requirement from btmgmt utility --- Makefile.tools | 3 +- tools/btmgmt.c | 88 +++++++++++++++++++++++++------------------------- 2 files changed, 46 insertions(+), 45 deletions(-) diff --git a/Makefile.tools b/Makefile.tools index 02798ae02..338365d5c 100644 --- a/Makefile.tools +++ b/Makefile.tools @@ -223,7 +223,8 @@ tools_hwdb_LDADD = lib/libbluetooth-internal.la tools_hcieventmask_LDADD = lib/libbluetooth-internal.la tools_btmgmt_SOURCES = tools/btmgmt.c src/glib-helper.c src/eir.c \ - src/shared/io.h src/shared/io-glib.c \ + monitor/mainloop.h monitor/mainloop.c \ + src/shared/io.h src/shared/io-mainloop.c \ src/shared/queue.h src/shared/queue.c \ src/shared/util.h src/shared/util.c \ src/shared/mgmt.h src/shared/mgmt.c diff --git a/tools/btmgmt.c b/tools/btmgmt.c index 97215ba83..c0e042238 100644 --- a/tools/btmgmt.c +++ b/tools/btmgmt.c @@ -41,14 +41,14 @@ #include #include +#include "glib-helper.h" +#include "monitor/mainloop.h" +#include "src/shared/util.h" #include "src/shared/mgmt.h" -#include "glib-helper.h" #include "lib/mgmt.h" #include "eir.h" -static GMainLoop *event_loop = NULL; - static bool monitor = false; static bool discovery = false; static bool resolve_names = true; @@ -138,7 +138,7 @@ static void discovering(uint16_t index, uint16_t len, const void *param, } if (ev->discovering == 0 && discovery) { - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -376,7 +376,7 @@ static void pin_rsp(uint8_t status, uint16_t len, const void *param, fprintf(stderr, "PIN Code reply failed with status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -405,7 +405,7 @@ static void pin_neg_rsp(uint8_t status, uint16_t len, const void *param, fprintf(stderr, "PIN Neg reply failed with status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -470,7 +470,7 @@ static void confirm_rsp(uint8_t status, uint16_t len, const void *param, fprintf(stderr, "User Confirm reply failed. status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -496,7 +496,7 @@ static void confirm_neg_rsp(uint8_t status, uint16_t len, const void *param, fprintf(stderr, "Confirm Neg reply failed. status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -590,7 +590,7 @@ static void version_rsp(uint8_t status, uint16_t len, const void *param, bt_get_le16(&rp->revision)); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_version(struct mgmt *mgmt, uint16_t index, int argc, @@ -650,7 +650,7 @@ static void commands_rsp(uint8_t status, uint16_t len, const void *param, } done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_commands(struct mgmt *mgmt, uint16_t index, int argc, @@ -667,7 +667,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param, void *user_data) { const struct mgmt_rp_read_info *rp = param; - int id = GPOINTER_TO_INT(user_data); + uint16_t index = PTR_TO_UINT(user_data); char addr[18]; pending--; @@ -675,7 +675,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param, if (status != 0) { fprintf(stderr, "Reading hci%u info failed with status 0x%02x (%s)\n", - id, status, mgmt_errstr(status)); + index, status, mgmt_errstr(status)); goto done; } @@ -686,8 +686,8 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param, ba2str(&rp->bdaddr, addr); printf("hci%u:\taddr %s version %u manufacturer %u" - " class 0x%02x%02x%02x\n", - id, addr, rp->version, bt_get_le16(&rp->manufacturer), + " class 0x%02x%02x%02x\n", index, + addr, rp->version, bt_get_le16(&rp->manufacturer), rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]); printf("\tsupported settings: "); @@ -703,7 +703,7 @@ static void info_rsp(uint8_t status, uint16_t len, const void *param, return; done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void index_rsp(uint8_t status, uint16_t len, const void *param, @@ -755,7 +755,7 @@ static void index_rsp(uint8_t status, uint16_t len, const void *param, if (monitor) printf("hci%u ", index); - data = GINT_TO_POINTER((int) index); + data = UINT_TO_PTR(index); if (mgmt_send(mgmt, MGMT_OP_READ_INFO, index, 0, NULL, info_rsp, data, NULL) == 0) { @@ -772,7 +772,7 @@ static void index_rsp(uint8_t status, uint16_t len, const void *param, return; done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_info(struct mgmt *mgmt, uint16_t index, int argc, char **argv) @@ -790,7 +790,7 @@ static void cmd_info(struct mgmt *mgmt, uint16_t index, int argc, char **argv) return; } - data = GINT_TO_POINTER((int) index); + data = UINT_TO_PTR(index); if (mgmt_send(mgmt, MGMT_OP_READ_INFO, index, 0, NULL, info_rsp, data, NULL) == 0) { @@ -824,14 +824,17 @@ static unsigned int send_cmd(struct mgmt *mgmt, uint16_t op, uint16_t id, struct command_data *data; unsigned int send_id; - data = g_new0(struct command_data, 1); + 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, g_free); + send_id = mgmt_send(mgmt, op, id, len, param, cmd_rsp, data, free); if (send_id == 0) - g_free(data); + free(data); return send_id; } @@ -859,7 +862,7 @@ static void setting_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len, printf("\n"); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_setting(struct mgmt *mgmt, uint16_t index, uint16_t op, @@ -1025,7 +1028,7 @@ static void class_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len, rp->class_of_dev[2], rp->class_of_dev[1], rp->class_of_dev[0]); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_class(struct mgmt *mgmt, uint16_t index, int argc, char **argv) @@ -1078,7 +1081,7 @@ static void disconnect_rsp(uint8_t status, uint16_t len, const void *param, addr, status, mgmt_errstr(status)); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_disconnect(struct mgmt *mgmt, uint16_t index, int argc, @@ -1131,7 +1134,7 @@ static void con_rsp(uint8_t status, uint16_t len, const void *param, } done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_con(struct mgmt *mgmt, uint16_t index, int argc, char **argv) @@ -1153,7 +1156,7 @@ static void find_rsp(uint8_t status, uint16_t len, const void *param, fprintf(stderr, "Unable to start discovery. status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); return; } @@ -1229,7 +1232,7 @@ static void name_rsp(uint8_t status, uint16_t len, const void *param, "with status 0x%02x (%s)\n", status, mgmt_errstr(status)); - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_name(struct mgmt *mgmt, uint16_t index, int argc, char **argv) @@ -1287,7 +1290,7 @@ static void pair_rsp(uint8_t status, uint16_t len, const void *param, printf("Paired with %s\n", addr); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void pair_usage(void) @@ -1379,7 +1382,7 @@ static void cancel_pair_rsp(uint8_t status, uint16_t len, const void *param, printf("Pairing Cancelled with %s\n", addr); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cancel_pair_usage(void) @@ -1465,7 +1468,7 @@ static void unpair_rsp(uint8_t status, uint16_t len, const void *param, printf("%s unpaired\n", addr); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_unpair(struct mgmt *mgmt, uint16_t index, int argc, @@ -1501,7 +1504,7 @@ static void keys_rsp(uint8_t status, uint16_t len, const void *param, else printf("Keys successfully loaded\n"); - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_keys(struct mgmt *mgmt, uint16_t index, int argc, char **argv) @@ -1549,7 +1552,7 @@ static void block_rsp(uint16_t op, uint16_t id, uint8_t status, uint16_t len, printf("%s %s succeeded\n", mgmt_opstr(op), addr); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void block_usage(void) @@ -1784,7 +1787,7 @@ static void local_oob_rsp(uint8_t status, uint16_t len, const void *param, printf("\n"); done: - g_main_loop_quit(event_loop); + mainloop_quit(); } static void cmd_local_oob(struct mgmt *mgmt, uint16_t index, @@ -1810,7 +1813,7 @@ static void did_rsp(uint8_t status, uint16_t len, const void *param, else printf("Device ID successfully set\n"); - g_main_loop_quit(event_loop); + mainloop_quit(); } static void did_usage(void) @@ -1873,7 +1876,7 @@ static void static_addr_rsp(uint8_t status, uint16_t len, const void *param, else printf("Static address successfully set\n"); - g_main_loop_quit(event_loop); + mainloop_quit(); } static void static_addr_usage(void) @@ -1978,6 +1981,7 @@ int main(int argc, char *argv[]) int opt, i; uint16_t index = MGMT_INDEX_NONE; struct mgmt *mgmt; + int exit_status; while ((opt = getopt_long(argc, argv, "+hvi:", main_options, NULL)) != -1) { @@ -2008,13 +2012,12 @@ int main(int argc, char *argv[]) return 0; } - event_loop = g_main_loop_new(NULL, FALSE); + mainloop_init(); mgmt = mgmt_new_default(); if (!mgmt) { fprintf(stderr, "Unable to open mgmt_socket\n"); - g_main_loop_unref(event_loop); - return -1; + return EXIT_FAILURE; } for (i = 0; command[i].cmd; i++) { @@ -2028,8 +2031,7 @@ int main(int argc, char *argv[]) if (command[i].cmd == NULL) { fprintf(stderr, "Unknown command: %s\n", argv[0]); mgmt_unref(mgmt); - g_main_loop_unref(event_loop); - return -1; + return EXIT_FAILURE; } mgmt_register(mgmt, MGMT_EV_CONTROLLER_ERROR, index, controller_error, @@ -2061,13 +2063,11 @@ int main(int argc, char *argv[]) mgmt_register(mgmt, MGMT_EV_USER_CONFIRM_REQUEST, index, user_confirm, mgmt, NULL); - g_main_loop_run(event_loop); + exit_status = mainloop_run(); mgmt_cancel_all(mgmt); mgmt_unregister_all(mgmt); mgmt_unref(mgmt); - g_main_loop_unref(event_loop); - - return 0; + return exit_status; } -- 2.47.3