]> err.no Git - mapper/blob - src/gps-bluetooth-bluez.c
Add header and cast properly.
[mapper] / src / gps-bluetooth-bluez.c
1 #include <config.h>
2
3 #include <unistd.h>
4 #include <stdlib.h>
5 #include <string.h>
6 #include <strings.h>
7 #include <stddef.h>
8 #include <libintl.h>
9 #include <locale.h>
10 #include <errno.h>
11 #include <sys/wait.h>
12 #include <glib/gstdio.h>
13 #include <gtk/gtk.h>
14 #include <fcntl.h>
15
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>
21
22 #include "bluetooth-scan.h"
23 #include "utils.h"
24 #include "mapper-types.h"
25 #include "settings.h"
26 #include "ui-common.h"
27
28 gint 
29 scan_start_search(ScanInfo * scan_info)
30 {
31 scan_info->sid=g_idle_add((GSourceFunc)scan_bluetooth_idle, scan_info);
32 return 0;
33 }
34
35 gboolean 
36 scan_bluetooth_idle(ScanInfo * scan_info)
37 {
38 gint devid, num_rsp;
39 GtkTreeIter iter;
40 inquiry_info *ii = NULL;
41
42 devid = hci_get_route(NULL);
43
44 ii = (inquiry_info *)malloc(255 * sizeof(inquiry_info));
45 num_rsp = hci_inquiry(devid, 4, 255, NULL, &ii, IREQ_CACHE_FLUSH);
46
47 if (num_rsp < 0) {
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."));
55 } else {
56         guint i;
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 };
61
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"));
66
67                 gtk_list_store_append(scan_info->store, &iter);
68                 gtk_list_store_set(scan_info->store, &iter,
69                                    0, g_strdup(addr),
70                                    1, g_strdup(name), -1);
71         }
72         close(sock);
73         gtk_widget_destroy(scan_info->banner);
74 }
75 free(ii);
76 scan_info->sid = 0;
77 return FALSE;
78 }