Collect the messenger from the correct signature. Allow 0 as HCI ID. Drop correctly the BDADDR to userland.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24128 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Oliver Ruiz Dorantes
2008-02-25 20:40:44 +00:00
parent 3b260549b4
commit 7bdc499516
+21 -9
View File
@@ -14,6 +14,9 @@
#include "bluetoothserver_p.h"
/* TODO: remove me */
#include <stdio.h>
namespace Bluetooth {
BMessenger* LocalDevice::sfMessenger = NULL;
@@ -22,7 +25,7 @@ status_t
LocalDevice::SRetrieveBluetoothMessenger(void)
{
if (sfMessenger == NULL || !sfMessenger->IsValid() )
sfMessenger = new BMessenger();
sfMessenger = new BMessenger(BLUETOOTH_SIGNATURE);
return (sfMessenger != NULL)?B_OK:B_ERROR;
}
@@ -30,7 +33,7 @@ LocalDevice::SRetrieveBluetoothMessenger(void)
status_t LocalDevice::RetrieveBluetoothMessenger(void)
{
if (fMessenger == NULL || !fMessenger->IsValid())
fMessenger = new BMessenger();
fMessenger = new BMessenger(BLUETOOTH_SIGNATURE);
return (fMessenger != NULL)?B_OK:B_ERROR;
}
@@ -44,8 +47,9 @@ LocalDevice::RequestLocalDeviceID(BMessage* request)
if (sfMessenger->SendMessage(request, &reply) == B_OK &&
reply.FindInt32("hci_id", &hid) == B_OK ){
if (hid > 0)
if (hid >= 0) {
return new LocalDevice(hid);
}
}
return NULL;
@@ -192,19 +196,27 @@ LocalDevice::GetBluetoothAddress()
if (RetrieveBluetoothMessenger() != B_OK)
return bdaddrUtils::NullAddress();
bdaddr_t bdaddr;
const bdaddr_t* bdaddr;
BMessage request(BT_MSG_GET_ADDRESS);
BMessage reply;
ssize_t size;
/* ADD ID */
request.AddInt32("hci_id", hid);
if (fMessenger->SendMessage(&request, &reply) == B_OK &&
reply.FindData("bdaddr", B_ANY_TYPE, 0, (const void**)&bdaddr, &size) == B_OK ){
return bdaddr;
}
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
if (reply.FindData("bdaddr", B_ANY_TYPE, 0, (const void**)&bdaddr, &size) == B_OK ){
printf("%s: %s size=%ld\n", __FUNCTION__, bdaddrUtils::ToString(*bdaddr), size);
return *bdaddr;
} else {
return bdaddrUtils::NullAddress();
}
}
return bdaddrUtils::NullAddress();
}