12 #include <glib/gstdio.h>
16 #include <sys/socket.h>
17 #include <bluetooth/bluetooth.h>
18 #include <bluetooth/hci.h>
19 #include <bluetooth/hci_lib.h>
20 #include <bluetooth/rfcomm.h>
22 #include "bluetooth-scan.h"
24 #include "mapper-types.h"
26 #include "ui-common.h"
29 scan_start_search(ScanInfo * scan_info)
31 scan_info->sid=g_idle_add((GSourceFunc)scan_bluetooth_idle, scan_info);
36 scan_bluetooth_idle(ScanInfo * scan_info)
40 inquiry_info *ii = NULL;
42 devid = hci_get_route(NULL);
44 ii = (inquiry_info *)malloc(255 * sizeof(inquiry_info));
45 num_rsp = hci_inquiry(devid, 4, 255, NULL, &ii, IREQ_CACHE_FLUSH);
48 gtk_widget_destroy(scan_info->banner);
49 gtk_widget_hide(scan_info->scan_dialog);
50 popup_error(scan_info->settings_dialog, _("An error occurred while scanning."));
51 } else if (num_rsp == 0) {
52 gtk_widget_destroy(scan_info->banner);
53 gtk_widget_hide(scan_info->scan_dialog);
54 popup_error(scan_info->settings_dialog, _("No bluetooth devices found."));
57 gint sock = hci_open_dev(devid);
58 for (i = 0; i < num_rsp; i++) {
59 gchar addr[19] = { 0 };
60 gchar name[256] = { 0 };
62 ba2str(&ii[i].bdaddr, addr);
63 memset(name, 0, sizeof(name));
64 if (hci_read_remote_name(sock, &ii[i].bdaddr, sizeof(name), name, 0))
65 strcpy(name, _("Unknown"));
67 gtk_list_store_append(scan_info->store, &iter);
68 gtk_list_store_set(scan_info->store, &iter,
70 1, g_strdup(name), -1);
73 gtk_widget_destroy(scan_info->banner);