Class: Bluetooth::Devices
- Inherits:
-
Object
- Object
- Bluetooth::Devices
- Defined in:
- ext/bluetooth/win32/ruby_bluetooth.cpp
Class Method Summary collapse
-
.scan ⇒ Object
Scan local network for visible remote devices.
Class Method Details
.scan ⇒ Object
Scan local network for visible remote devices
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 |
# File 'ext/bluetooth/linux/ruby_bluetooth.c', line 376
static VALUE bt_devices_scan(VALUE self)
{
inquiry_info *ii = NULL;
int max_rsp, num_rsp;
int dev_id, sock, len, flags;
int i;
dev_id = hci_get_route(NULL);
sock = hci_open_dev( dev_id );
if (dev_id < 0 || sock < 0)
{
rb_raise (rb_eIOError, "error opening socket");
}
len = 8;
max_rsp = 255;
flags = IREQ_CACHE_FLUSH;
ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
if( num_rsp < 0 )
rb_raise(rb_eIOError, "hci_inquiry");
VALUE devices_array = rb_ary_new();
// Iterate over every device found and add it to result array
for (i = 0; i < num_rsp; i++)
{
char addr[19] = { 0 };
char name[248] = { 0 };
ba2str(&(ii+i)->bdaddr, addr);
memset(name, 0, sizeof(name));
if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),
name, 0) < 0)
strcpy(name, "(unknown)");
VALUE bt_dev = rb_funcall(bt_cBluetoothDevice, rb_intern("new"), 2,
rb_str_new(name), rb_str_new2(addr));
rb_ary_push(devices_array, bt_dev);
}
free( ii );
close( sock );
return devices_array;
}
|