620b8b6e4c
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30336 a95241bf-73f2-0310-859d-f6bbb57e9c96
146 lines
3.0 KiB
C++
146 lines
3.0 KiB
C++
/*
|
|
* Copyright 2008 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
|
|
* All rights reserved. Distributed under the terms of the MIT License.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#include <bluetooth/bdaddrUtils.h>
|
|
#include <bluetooth/LocalDevice.h>
|
|
|
|
#include <bluetooth/DeviceClass.h>
|
|
#include <bluetooth/DiscoveryAgent.h>
|
|
#include <bluetooth/DiscoveryListener.h>
|
|
|
|
thread_id mainThread;
|
|
|
|
class SimpleDiscoveryListener : public DiscoveryListener {
|
|
|
|
public:
|
|
|
|
SimpleDiscoveryListener()
|
|
: DiscoveryListener()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
void
|
|
DeviceDiscovered(RemoteDevice* btDevice, DeviceClass cod)
|
|
{
|
|
BString classString;
|
|
|
|
printf("\t%s: Device %s discovered.\n",__FUNCTION__,
|
|
bdaddrUtils::ToString(btDevice->GetBluetoothAddress()));
|
|
|
|
cod.GetServiceClass(classString);
|
|
classString << " |";
|
|
cod.GetMajorDeviceClass(classString);
|
|
classString << " |";
|
|
cod.GetMinorDeviceClass(classString);
|
|
|
|
printf("\t\t%s: \n", classString.String());
|
|
}
|
|
|
|
|
|
void
|
|
InquiryCompleted(int discType)
|
|
{
|
|
printf("\t%s: Inquiry process has finished ...\n",__FUNCTION__);
|
|
(void)send_data(mainThread, discType, NULL, 0);
|
|
}
|
|
|
|
|
|
void
|
|
InquiryStarted(status_t status)
|
|
{
|
|
printf("\t%s: Inquiry process has started ...\n",__FUNCTION__);
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
void
|
|
DumpInfo(LocalDevice* device)
|
|
{
|
|
DiscoveryAgent* dAgent = device->GetDiscoveryAgent();
|
|
|
|
if (dAgent == NULL) {
|
|
printf("DiscoveryAgent could not be located\n");
|
|
return;
|
|
}
|
|
|
|
printf("Discovering for [LocalDevice] %s\t%s\n\n",
|
|
(device->GetFriendlyName()).String(),
|
|
bdaddrUtils::ToString(device->GetBluetoothAddress()));
|
|
|
|
SimpleDiscoveryListener* dListener = new SimpleDiscoveryListener();
|
|
|
|
dAgent->StartInquiry(BT_GIAC, dListener);
|
|
|
|
thread_id sender;
|
|
(void)receive_data(&sender, NULL, 0);
|
|
|
|
printf("Retrieving names ...\n");
|
|
|
|
for (int32 index = 0 ; index < dAgent->RetrieveDevices(0).CountItems(); index++ ) {
|
|
|
|
RemoteDevice* rDevice = dAgent->RetrieveDevices(0).ItemAt(index);
|
|
printf("\t%s \t@ %s ...\n", rDevice->GetFriendlyName(true).String(),
|
|
bdaddrUtils::ToString(rDevice->GetBluetoothAddress()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
static status_t
|
|
LocalDeviceError(status_t status)
|
|
{
|
|
fprintf(stderr,"No Device/s found");
|
|
|
|
return status;
|
|
}
|
|
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
mainThread = find_thread(NULL);
|
|
|
|
if (argc == 2) {
|
|
// device specified
|
|
LocalDevice* device = LocalDevice::GetLocalDevice(atoi(argv[0]));
|
|
if (device == NULL)
|
|
return LocalDeviceError(ENODEV);
|
|
|
|
DumpInfo(device);
|
|
|
|
} else if (argc == 1) {
|
|
// show all devices
|
|
LocalDevice* device = NULL;
|
|
|
|
printf("Performing discovery for %ld Bluetooth Local Devices ...\n",
|
|
LocalDevice::GetLocalDeviceCount());
|
|
|
|
for (uint32 index = 0 ; index < LocalDevice::GetLocalDeviceCount() ; index++) {
|
|
|
|
device = LocalDevice::GetLocalDevice();
|
|
if (device == NULL) {
|
|
LocalDeviceError(ENODEV);
|
|
continue;
|
|
}
|
|
DumpInfo(device);
|
|
|
|
}
|
|
|
|
return B_OK;
|
|
|
|
} else {
|
|
fprintf(stderr,"Usage: bt_dev_info [device]\n");
|
|
return B_ERROR;
|
|
}
|
|
}
|