- Change LocalDevice getter for HCI id
- Fix some new some std::nothrow on critical allocations among kit and server - Some styling git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30353 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -46,11 +46,11 @@ public:
|
|||||||
ServiceRecord getRecord(Connection notifier);
|
ServiceRecord getRecord(Connection notifier);
|
||||||
void updateRecord(ServiceRecord srvRecord);
|
void updateRecord(ServiceRecord srvRecord);
|
||||||
*/
|
*/
|
||||||
hci_id GetID(void) {return hid;}
|
hci_id ID() const;
|
||||||
private:
|
private:
|
||||||
LocalDevice(hci_id hid);
|
LocalDevice(hci_id hid);
|
||||||
virtual ~LocalDevice();
|
virtual ~LocalDevice();
|
||||||
|
|
||||||
status_t ReadLocalVersion();
|
status_t ReadLocalVersion();
|
||||||
status_t ReadBufferSize();
|
status_t ReadBufferSize();
|
||||||
status_t Reset();
|
status_t Reset();
|
||||||
@@ -58,8 +58,7 @@ private:
|
|||||||
static LocalDevice* RequestLocalDeviceID(BMessage* request);
|
static LocalDevice* RequestLocalDeviceID(BMessage* request);
|
||||||
|
|
||||||
BMessenger* fMessenger;
|
BMessenger* fMessenger;
|
||||||
|
hci_id fHid;
|
||||||
hci_id hid;
|
|
||||||
|
|
||||||
friend class DiscoveryAgent;
|
friend class DiscoveryAgent;
|
||||||
friend class RemoteDevice;
|
friend class RemoteDevice;
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ DeviceClass::GetServiceClass(BString& serviceClass)
|
|||||||
static const char *services[] = { "Positioning", "Networking",
|
static const char *services[] = { "Positioning", "Networking",
|
||||||
"Rendering", "Capturing", "Object Transfer",
|
"Rendering", "Capturing", "Object Transfer",
|
||||||
"Audio", "Telephony", "Information" };
|
"Audio", "Telephony", "Information" };
|
||||||
|
|
||||||
if (GetServiceClass() != 0) {
|
if (GetServiceClass() != 0) {
|
||||||
|
|
||||||
for (uint s = 0; s < (sizeof(services) / sizeof(*services)); s++) {
|
for (uint s = 0; s < (sizeof(services) / sizeof(*services)); s++) {
|
||||||
if (GetServiceClass() & (1 << s)) {
|
if (GetServiceClass() & (1 << s)) {
|
||||||
serviceClass << services[s];
|
serviceClass << services[s];
|
||||||
@@ -23,7 +23,7 @@ DeviceClass::GetServiceClass(BString& serviceClass)
|
|||||||
serviceClass << ", ";
|
serviceClass << ", ";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
} else
|
||||||
serviceClass << "Unspecified";
|
serviceClass << "Unspecified";
|
||||||
|
|
||||||
@@ -53,55 +53,55 @@ DeviceClass::GetMinorDeviceClass(BString& minorClass)
|
|||||||
switch (major) {
|
switch (major) {
|
||||||
case 0: /* misc */
|
case 0: /* misc */
|
||||||
minorClass << " -";
|
minorClass << " -";
|
||||||
break;
|
break;
|
||||||
case 1: /* computer */
|
case 1: /* computer */
|
||||||
switch(minor) {
|
switch(minor) {
|
||||||
case 0:
|
case 0:
|
||||||
minorClass << "Uncategorized";
|
minorClass << "Uncategorized";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Desktop workstation";
|
minorClass << "Desktop workstation";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Server";
|
minorClass << "Server";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "Laptop";
|
minorClass << "Laptop";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Handheld";
|
minorClass << "Handheld";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Palm";
|
minorClass << "Palm";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
minorClass << "Wearable";
|
minorClass << "Wearable";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: /* phone */
|
case 2: /* phone */
|
||||||
switch(minor) {
|
switch(minor) {
|
||||||
case 0:
|
case 0:
|
||||||
minorClass << "Uncategorized";
|
minorClass << "Uncategorized";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Cellular";
|
minorClass << "Cellular";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Cordless";
|
minorClass << "Cordless";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "Smart phone";
|
minorClass << "Smart phone";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Wired modem or voice gateway";
|
minorClass << "Wired modem or voice gateway";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Common ISDN Access";
|
minorClass << "Common ISDN Access";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
minorClass << "Sim Card Reader";
|
minorClass << "Sim Card Reader";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: /* lan access */
|
case 3: /* lan access */
|
||||||
@@ -112,131 +112,133 @@ DeviceClass::GetMinorDeviceClass(BString& minorClass)
|
|||||||
switch(minor / 8) {
|
switch(minor / 8) {
|
||||||
case 0:
|
case 0:
|
||||||
minorClass << "Fully available";
|
minorClass << "Fully available";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "1-17% utilized";
|
minorClass << "1-17% utilized";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "17-33% utilized";
|
minorClass << "17-33% utilized";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "33-50% utilized";
|
minorClass << "33-50% utilized";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "50-67% utilized";
|
minorClass << "50-67% utilized";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "67-83% utilized";
|
minorClass << "67-83% utilized";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
minorClass << "83-99% utilized";
|
minorClass << "83-99% utilized";
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
minorClass << "No service available";
|
minorClass << "No service available";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4: /* audio/video */
|
case 4: /* audio/video */
|
||||||
switch(minor) {
|
switch(minor) {
|
||||||
case 0:
|
case 0:
|
||||||
minorClass << "Uncategorized";
|
minorClass << "Uncategorized";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Device conforms to the Headset profile";
|
minorClass << "Device conforms to the Headset profile";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Hands-free";
|
minorClass << "Hands-free";
|
||||||
break;
|
break;
|
||||||
/* 3 is reserved */
|
/* 3 is reserved */
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Microphone";
|
minorClass << "Microphone";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Loudspeaker";
|
minorClass << "Loudspeaker";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
minorClass << "Headphones";
|
minorClass << "Headphones";
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
minorClass << "Portable Audio";
|
minorClass << "Portable Audio";
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
minorClass << "Car Audio";
|
minorClass << "Car Audio";
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
minorClass << "Set-top box";
|
minorClass << "Set-top box";
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
minorClass << "HiFi Audio Device";
|
minorClass << "HiFi Audio Device";
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
minorClass << "VCR";
|
minorClass << "VCR";
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
minorClass << "Video Camera";
|
minorClass << "Video Camera";
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
minorClass << "Camcorder";
|
minorClass << "Camcorder";
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
minorClass << "Video Monitor";
|
minorClass << "Video Monitor";
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
minorClass << "Video Display and Loudspeaker";
|
minorClass << "Video Display and Loudspeaker";
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
minorClass << "Video Conferencing";
|
minorClass << "Video Conferencing";
|
||||||
break;
|
break;
|
||||||
/* 17 is reserved */
|
/* 17 is reserved */
|
||||||
case 18:
|
case 18:
|
||||||
minorClass << "Gaming/Toy";
|
minorClass << "Gaming/Toy";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5: /* peripheral */ {
|
case 5: /* peripheral */
|
||||||
|
{
|
||||||
switch(minor & 48) {
|
switch(minor & 48) {
|
||||||
case 16:
|
case 16:
|
||||||
minorClass << "Keyboard";
|
minorClass << "Keyboard";
|
||||||
if (minor & 15)
|
if (minor & 15)
|
||||||
minorClass << "/";
|
minorClass << "/";
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
minorClass << "Pointing device";
|
minorClass << "Pointing device";
|
||||||
if (minor & 15)
|
if (minor & 15)
|
||||||
minorClass << "/";
|
minorClass << "/";
|
||||||
break;
|
break;
|
||||||
case 48:
|
case 48:
|
||||||
minorClass << "Combo keyboard/pointing device";
|
minorClass << "Combo keyboard/pointing device";
|
||||||
if (minor & 15)
|
if (minor & 15)
|
||||||
minorClass << "/";
|
minorClass << "/";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(minor & 15) {
|
switch(minor & 15) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Joystick";
|
minorClass << "Joystick";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Gamepad";
|
minorClass << "Gamepad";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "Remote control";
|
minorClass << "Remote control";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Sensing device";
|
minorClass << "Sensing device";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Digitizer tablet";
|
minorClass << "Digitizer tablet";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
minorClass << "Card reader";
|
minorClass << "Card reader";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
minorClass << "(reserved)";
|
minorClass << "(reserved)";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case 6: /* imaging */
|
case 6: /* imaging */
|
||||||
if (minor & 4)
|
if (minor & 4)
|
||||||
@@ -247,51 +249,51 @@ DeviceClass::GetMinorDeviceClass(BString& minorClass)
|
|||||||
minorClass << "Scanner";
|
minorClass << "Scanner";
|
||||||
if (minor & 32)
|
if (minor & 32)
|
||||||
minorClass << "Printer";
|
minorClass << "Printer";
|
||||||
break;
|
break;
|
||||||
case 7: /* wearable */
|
case 7: /* wearable */
|
||||||
switch(minor) {
|
switch(minor) {
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Wrist Watch";
|
minorClass << "Wrist Watch";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Pager";
|
minorClass << "Pager";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "Jacket";
|
minorClass << "Jacket";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Helmet";
|
minorClass << "Helmet";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Glasses";
|
minorClass << "Glasses";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 8: /* toy */
|
case 8: /* toy */
|
||||||
switch(minor) {
|
switch(minor) {
|
||||||
case 1:
|
case 1:
|
||||||
minorClass << "Robot";
|
minorClass << "Robot";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
minorClass << "Vehicle";
|
minorClass << "Vehicle";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
minorClass << "Doll / Action Figure";
|
minorClass << "Doll / Action Figure";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
minorClass << "Controller";
|
minorClass << "Controller";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
minorClass << "Game";
|
minorClass << "Game";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 63: /* uncategorised */
|
case 63: /* uncategorised */
|
||||||
minorClass << "";
|
minorClass << "";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
minorClass << "Unknown (reserved) minor device class";
|
minorClass << "Unknown (reserved) minor device class";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -307,7 +309,7 @@ DeviceClass::DumpDeviceClass(BString& string)
|
|||||||
string << " | ";
|
string << " | ";
|
||||||
string << "Minor Class: ";
|
string << "Minor Class: ";
|
||||||
GetMinorDeviceClass(string);
|
GetMinorDeviceClass(string);
|
||||||
string << ".";
|
string << ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,20 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2007-2008 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
|
* Copyright 2007-2008 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
|
||||||
*
|
|
||||||
* All rights reserved. Distributed under the terms of the MIT License.
|
* All rights reserved. Distributed under the terms of the MIT License.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <bluetooth/bluetooth_error.h>
|
||||||
#include <bluetooth/DiscoveryAgent.h>
|
#include <bluetooth/DiscoveryAgent.h>
|
||||||
#include <bluetooth/DiscoveryListener.h>
|
#include <bluetooth/DiscoveryListener.h>
|
||||||
#include <bluetooth/RemoteDevice.h>
|
|
||||||
#include <bluetooth/LocalDevice.h>
|
#include <bluetooth/LocalDevice.h>
|
||||||
#include <bluetooth/bluetooth_error.h>
|
#include <bluetooth/RemoteDevice.h>
|
||||||
|
|
||||||
#include <bluetooth/HCI/btHCI_command.h>
|
#include <bluetooth/HCI/btHCI_command.h>
|
||||||
#include <bluetooth/HCI/btHCI_event.h>
|
#include <bluetooth/HCI/btHCI_event.h>
|
||||||
|
|
||||||
#include <bluetoothserver_p.h>
|
#include <bluetoothserver_p.h>
|
||||||
#include <CommandManager.h>
|
#include <CommandManager.h>
|
||||||
|
|
||||||
|
|
||||||
#include "KitSupport.h"
|
#include "KitSupport.h"
|
||||||
|
|
||||||
namespace Bluetooth {
|
namespace Bluetooth {
|
||||||
@@ -25,7 +23,7 @@ namespace Bluetooth {
|
|||||||
RemoteDevicesList
|
RemoteDevicesList
|
||||||
DiscoveryAgent::RetrieveDevices(int option)
|
DiscoveryAgent::RetrieveDevices(int option)
|
||||||
{
|
{
|
||||||
/* No inquiry process initiated */
|
// No inquiry process initiated
|
||||||
if (fLastUsedListener == NULL)
|
if (fLastUsedListener == NULL)
|
||||||
return RemoteDevicesList();
|
return RemoteDevicesList();
|
||||||
|
|
||||||
@@ -64,7 +62,7 @@ DiscoveryAgent::StartInquiry(uint32 accessCode, DiscoveryListener* listener, big
|
|||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", fLocalDevice->GetID());
|
request.AddInt32("hci_id", fLocalDevice->ID());
|
||||||
|
|
||||||
startInquiryCommand = buildInquiry(accessCode, secs, BT_MAX_RESPONSES, &size);
|
startInquiryCommand = buildInquiry(accessCode, secs, BT_MAX_RESPONSES, &size);
|
||||||
|
|
||||||
@@ -105,7 +103,7 @@ DiscoveryAgent::CancelInquiry(DiscoveryListener* listener)
|
|||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", fLocalDevice->GetID());
|
request.AddInt32("hci_id", fLocalDevice->ID());
|
||||||
|
|
||||||
cancelInquiryCommand = buildInquiryCancel(&size);
|
cancelInquiryCommand = buildInquiryCancel(&size);
|
||||||
request.AddData("raw command", B_ANY_TYPE, cancelInquiryCommand, size);
|
request.AddData("raw command", B_ANY_TYPE, cancelInquiryCommand, size);
|
||||||
@@ -121,12 +119,14 @@ DiscoveryAgent::CancelInquiry(DiscoveryListener* listener)
|
|||||||
return B_ERROR;
|
return B_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DiscoveryAgent::SetLocalDeviceOwner(LocalDevice* ld)
|
DiscoveryAgent::SetLocalDeviceOwner(LocalDevice* ld)
|
||||||
{
|
{
|
||||||
fLocalDevice = ld;
|
fLocalDevice = ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DiscoveryAgent::DiscoveryAgent(LocalDevice* ld)
|
DiscoveryAgent::DiscoveryAgent(LocalDevice* ld)
|
||||||
{
|
{
|
||||||
fLocalDevice = ld;
|
fLocalDevice = ld;
|
||||||
@@ -136,8 +136,7 @@ DiscoveryAgent::DiscoveryAgent(LocalDevice* ld)
|
|||||||
|
|
||||||
DiscoveryAgent::~DiscoveryAgent()
|
DiscoveryAgent::~DiscoveryAgent()
|
||||||
{
|
{
|
||||||
if (fMessenger)
|
delete fMessenger;
|
||||||
delete fMessenger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -45,11 +45,12 @@ DiscoveryListener::InquiryCompleted(int discType)
|
|||||||
/* private */
|
/* private */
|
||||||
|
|
||||||
/* A LocalDevice is always referenced in any request to the
|
/* A LocalDevice is always referenced in any request to the
|
||||||
Bluetooth server therefore is going to be needed in any */
|
* Bluetooth server therefore is going to be needed in any
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
DiscoveryListener::SetLocalDeviceOwner(LocalDevice* ld)
|
DiscoveryListener::SetLocalDeviceOwner(LocalDevice* ld)
|
||||||
{
|
{
|
||||||
fLocalDevice = ld;
|
fLocalDevice = ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,26 +64,24 @@ DiscoveryListener::GetRemoteDevicesList(void)
|
|||||||
void
|
void
|
||||||
DiscoveryListener::MessageReceived(BMessage* message)
|
DiscoveryListener::MessageReceived(BMessage* message)
|
||||||
{
|
{
|
||||||
int8 status;
|
int8 status;
|
||||||
|
|
||||||
switch (message->what)
|
switch (message->what) {
|
||||||
{
|
case BT_MSG_INQUIRY_DEVICE:
|
||||||
case BT_MSG_INQUIRY_DEVICE:
|
{
|
||||||
{
|
|
||||||
const struct inquiry_info* inquiryInfo;
|
const struct inquiry_info* inquiryInfo;
|
||||||
ssize_t size;
|
ssize_t size;
|
||||||
RemoteDevice* rd = NULL;
|
RemoteDevice* rd = NULL;
|
||||||
bool duplicatedFound = false;
|
bool duplicatedFound = false;
|
||||||
|
|
||||||
// TODO: Loop for all inquiryInfo!
|
// TODO: Loop for all inquiryInfo!
|
||||||
if (message->FindData("info", B_ANY_TYPE, 0, (const void**)&inquiryInfo, &size) == B_OK )
|
if (message->FindData("info", B_ANY_TYPE, 0, (const void**)&inquiryInfo, &size) == B_OK) {
|
||||||
{
|
// Skip duplicated replies
|
||||||
// Skip duplicated replies
|
for (int32 index = 0 ; index < fRemoteDevicesList.CountItems(); index++) {
|
||||||
for (int32 index = 0 ; index < fRemoteDevicesList.CountItems(); index++) {
|
|
||||||
|
bdaddr_t b1 = fRemoteDevicesList.ItemAt(index)->GetBluetoothAddress();
|
||||||
bdaddr_t b1 = fRemoteDevicesList.ItemAt(index)->GetBluetoothAddress();
|
|
||||||
|
if (bdaddrUtils::Compare((bdaddr_t*) &inquiryInfo->bdaddr, &b1)) {
|
||||||
if (bdaddrUtils::Compare( (bdaddr_t*) &inquiryInfo->bdaddr, &b1 )) {
|
|
||||||
|
|
||||||
// update these values
|
// update these values
|
||||||
fRemoteDevicesList.ItemAt(index)->fPageRepetitionMode = inquiryInfo->pscan_rep_mode;
|
fRemoteDevicesList.ItemAt(index)->fPageRepetitionMode = inquiryInfo->pscan_rep_mode;
|
||||||
@@ -90,60 +89,50 @@ DiscoveryListener::MessageReceived(BMessage* message)
|
|||||||
fRemoteDevicesList.ItemAt(index)->fScanMode = inquiryInfo->pscan_mode;
|
fRemoteDevicesList.ItemAt(index)->fScanMode = inquiryInfo->pscan_mode;
|
||||||
fRemoteDevicesList.ItemAt(index)->fClockOffset = inquiryInfo->clock_offset;
|
fRemoteDevicesList.ItemAt(index)->fClockOffset = inquiryInfo->clock_offset;
|
||||||
|
|
||||||
duplicatedFound = true;
|
duplicatedFound = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!duplicatedFound) {
|
if (!duplicatedFound) {
|
||||||
|
rd = new RemoteDevice(inquiryInfo->bdaddr, (uint8*)inquiryInfo->dev_class);
|
||||||
rd = new RemoteDevice(inquiryInfo->bdaddr, (uint8*)inquiryInfo->dev_class);
|
|
||||||
fRemoteDevicesList.AddItem(rd);
|
fRemoteDevicesList.AddItem(rd);
|
||||||
// keep all inquiry reported data
|
// keep all inquiry reported data
|
||||||
rd->SetLocalDeviceOwner(fLocalDevice);
|
rd->SetLocalDeviceOwner(fLocalDevice);
|
||||||
rd->fPageRepetitionMode = inquiryInfo->pscan_rep_mode;
|
rd->fPageRepetitionMode = inquiryInfo->pscan_rep_mode;
|
||||||
rd->fScanPeriodMode = inquiryInfo->pscan_period_mode;
|
rd->fScanPeriodMode = inquiryInfo->pscan_period_mode;
|
||||||
rd->fScanMode = inquiryInfo->pscan_mode;
|
rd->fScanMode = inquiryInfo->pscan_mode;
|
||||||
rd->fClockOffset = inquiryInfo->clock_offset;
|
rd->fClockOffset = inquiryInfo->clock_offset;
|
||||||
|
|
||||||
DeviceDiscovered( rd, rd->GetDeviceClass());
|
DeviceDiscovered( rd, rd->GetDeviceClass());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
break;
|
}
|
||||||
|
|
||||||
case BT_MSG_INQUIRY_STARTED:
|
case BT_MSG_INQUIRY_STARTED:
|
||||||
if (message->FindInt8("status", &status) == B_OK){
|
if (message->FindInt8("status", &status) == B_OK) {
|
||||||
fRemoteDevicesList.MakeEmpty();
|
fRemoteDevicesList.MakeEmpty();
|
||||||
InquiryStarted(status);
|
InquiryStarted(status);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
break;
|
case BT_MSG_INQUIRY_COMPLETED:
|
||||||
|
InquiryCompleted(BT_INQUIRY_COMPLETED);
|
||||||
|
break;
|
||||||
|
|
||||||
case BT_MSG_INQUIRY_COMPLETED:
|
case BT_MSG_INQUIRY_TERMINATED: /* inquiry was cancelled */
|
||||||
|
InquiryCompleted(BT_INQUIRY_TERMINATED);
|
||||||
InquiryCompleted(BT_INQUIRY_COMPLETED);
|
break;
|
||||||
|
|
||||||
break;
|
case BT_MSG_INQUIRY_ERROR:
|
||||||
case BT_MSG_INQUIRY_TERMINATED: /* inquiry was cancelled */
|
InquiryCompleted(BT_INQUIRY_ERROR);
|
||||||
|
break;
|
||||||
InquiryCompleted(BT_INQUIRY_TERMINATED);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case BT_MSG_INQUIRY_ERROR:
|
|
||||||
|
|
||||||
InquiryCompleted(BT_INQUIRY_ERROR);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
|
|
||||||
BLooper::MessageReceived(message);
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
default:
|
||||||
|
BLooper::MessageReceived(message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,15 +9,17 @@
|
|||||||
#include <bluetooth/HCI/btHCI_command.h>
|
#include <bluetooth/HCI/btHCI_command.h>
|
||||||
#include <bluetooth/HCI/btHCI_event.h>
|
#include <bluetooth/HCI/btHCI_event.h>
|
||||||
|
|
||||||
#include <bluetooth/LocalDevice.h>
|
|
||||||
#include <bluetooth/RemoteDevice.h>
|
|
||||||
#include <bluetooth/DeviceClass.h>
|
#include <bluetooth/DeviceClass.h>
|
||||||
#include <bluetooth/DiscoveryAgent.h>
|
#include <bluetooth/DiscoveryAgent.h>
|
||||||
|
#include <bluetooth/LocalDevice.h>
|
||||||
|
#include <bluetooth/RemoteDevice.h>
|
||||||
|
|
||||||
#include <bluetooth/bdaddrUtils.h>
|
#include <bluetooth/bdaddrUtils.h>
|
||||||
#include <bluetoothserver_p.h>
|
#include <bluetoothserver_p.h>
|
||||||
#include <CommandManager.h>
|
#include <CommandManager.h>
|
||||||
|
|
||||||
|
#include <new>
|
||||||
|
|
||||||
#include "KitSupport.h"
|
#include "KitSupport.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -40,7 +42,7 @@ LocalDevice::RequestLocalDeviceID(BMessage* request)
|
|||||||
reply.FindInt32("hci_id", &hid) == B_OK ) {
|
reply.FindInt32("hci_id", &hid) == B_OK ) {
|
||||||
|
|
||||||
if (hid >= 0)
|
if (hid >= 0)
|
||||||
lDevice = new LocalDevice(hid);
|
lDevice = new (std::nothrow)LocalDevice(hid);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete messenger;
|
delete messenger;
|
||||||
@@ -109,7 +111,7 @@ DiscoveryAgent*
|
|||||||
LocalDevice::GetDiscoveryAgent()
|
LocalDevice::GetDiscoveryAgent()
|
||||||
{
|
{
|
||||||
/* TODO: Study a singleton here */
|
/* TODO: Study a singleton here */
|
||||||
return new DiscoveryAgent(this);
|
return new (std::nothrow)DiscoveryAgent(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -131,7 +133,7 @@ LocalDevice::GetProperty(const char* property, uint32* value)
|
|||||||
BMessage request(BT_MSG_GET_PROPERTY);
|
BMessage request(BT_MSG_GET_PROPERTY);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddString("property", property);
|
request.AddString("property", property);
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
||||||
@@ -166,7 +168,7 @@ LocalDevice::SetDiscoverable(int mode)
|
|||||||
int8 bt_status = BT_ERROR;
|
int8 bt_status = BT_ERROR;
|
||||||
|
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
|
|
||||||
|
|
||||||
void* command = buildWriteScan(mode, &size);
|
void* command = buildWriteScan(mode, &size);
|
||||||
@@ -177,7 +179,8 @@ LocalDevice::SetDiscoverable(int mode)
|
|||||||
|
|
||||||
request.AddData("raw command", B_ANY_TYPE, command, size);
|
request.AddData("raw command", B_ANY_TYPE, command, size);
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_WRITE_SCAN_ENABLE));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND,
|
||||||
|
OCF_WRITE_SCAN_ENABLE));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
||||||
if (reply.FindInt8("status", &bt_status ) == B_OK ) {
|
if (reply.FindInt8("status", &bt_status ) == B_OK ) {
|
||||||
@@ -209,10 +212,11 @@ LocalDevice::GetBluetoothAddress()
|
|||||||
ssize_t ssize;
|
ssize_t ssize;
|
||||||
|
|
||||||
/* ADD ID */
|
/* ADD ID */
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, command, size);
|
request.AddData("raw command", B_ANY_TYPE, command, size);
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_BD_ADDR));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM,
|
||||||
|
OCF_READ_BD_ADDR));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
||||||
if (reply.FindData("bdaddr", B_ANY_TYPE, 0, (const void**)&bdaddr, &ssize) == B_OK )
|
if (reply.FindData("bdaddr", B_ANY_TYPE, 0, (const void**)&bdaddr, &ssize) == B_OK )
|
||||||
@@ -223,6 +227,13 @@ LocalDevice::GetBluetoothAddress()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hci_id
|
||||||
|
LocalDevice::ID(void) const
|
||||||
|
{
|
||||||
|
return fHid;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BString
|
BString
|
||||||
LocalDevice::GetFriendlyName()
|
LocalDevice::GetFriendlyName()
|
||||||
{
|
{
|
||||||
@@ -239,10 +250,11 @@ LocalDevice::GetFriendlyName()
|
|||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, command, size);
|
request.AddData("raw command", B_ANY_TYPE, command, size);
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_LOCAL_NAME));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND,
|
||||||
|
OCF_READ_LOCAL_NAME));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK &&
|
if (fMessenger->SendMessage(&request, &reply) == B_OK &&
|
||||||
reply.FindString("friendlyname", &friendlyname) == B_OK){
|
reply.FindString("friendlyname", &friendlyname) == B_OK){
|
||||||
@@ -273,13 +285,15 @@ LocalDevice::GetDeviceClass()
|
|||||||
const uint8* record;
|
const uint8* record;
|
||||||
ssize_t ssize;
|
ssize_t ssize;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, command, size);
|
request.AddData("raw command", B_ANY_TYPE, command, size);
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_READ_CLASS_OF_DEV));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND,
|
||||||
|
OCF_READ_CLASS_OF_DEV));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK &&
|
if (fMessenger->SendMessage(&request, &reply) == B_OK
|
||||||
reply.FindData("devclass", B_ANY_TYPE, 0, (const void**)&record, &ssize) == B_OK) {
|
&& reply.FindData("devclass", B_ANY_TYPE, 0, (const void**)&record,
|
||||||
|
&ssize) == B_OK) {
|
||||||
|
|
||||||
fDeviceClass.SetRecord(*record);
|
fDeviceClass.SetRecord(*record);
|
||||||
}
|
}
|
||||||
@@ -301,10 +315,11 @@ LocalDevice::ReadLocalVersion()
|
|||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, localVersion.Data(), localVersion.Size());
|
request.AddData("raw command", B_ANY_TYPE, localVersion.Data(), localVersion.Size());
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_LOCAL_VERSION));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM,
|
||||||
|
OCF_READ_LOCAL_VERSION));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
||||||
reply.FindInt8("status", &bt_status);
|
reply.FindInt8("status", &bt_status);
|
||||||
@@ -324,10 +339,11 @@ LocalDevice::ReadBufferSize()
|
|||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, BufferSize.Data(), BufferSize.Size());
|
request.AddData("raw command", B_ANY_TYPE, BufferSize.Data(), BufferSize.Size());
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM, OCF_READ_BUFFER_SIZE));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_INFORMATIONAL_PARAM,
|
||||||
|
OCF_READ_BUFFER_SIZE));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
||||||
reply.FindInt8("status", &bt_status);
|
reply.FindInt8("status", &bt_status);
|
||||||
@@ -347,16 +363,17 @@ LocalDevice::Reset()
|
|||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, Reset.Data(), Reset.Size());
|
request.AddData("raw command", B_ANY_TYPE, Reset.Data(), Reset.Size());
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND, OCF_RESET));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_CONTROL_BASEBAND,
|
||||||
|
OCF_RESET));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
||||||
reply.FindInt8("status", &bt_status);
|
reply.FindInt8("status", &bt_status);
|
||||||
|
|
||||||
return bt_status;
|
return bt_status;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -372,7 +389,7 @@ LocalDevice::updateRecord(ServiceRecord srvRecord) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
LocalDevice::LocalDevice(hci_id hid) : hid(hid)
|
LocalDevice::LocalDevice(hci_id hid) : fHid(hid)
|
||||||
{
|
{
|
||||||
fMessenger = _RetrieveBluetoothMessenger();
|
fMessenger = _RetrieveBluetoothMessenger();
|
||||||
ReadLocalVersion();
|
ReadLocalVersion();
|
||||||
@@ -384,14 +401,15 @@ LocalDevice::LocalDevice(hci_id hid) : hid(hid)
|
|||||||
|
|
||||||
// Uncomment this out if your Broadcom dongle is not working properly
|
// Uncomment this out if your Broadcom dongle is not working properly
|
||||||
// Reset(); // Perform a reset to Broadcom buggyland
|
// Reset(); // Perform a reset to Broadcom buggyland
|
||||||
|
|
||||||
|
|
||||||
//#define BT_WRITE_BDADDR_FOR_BCM2035
|
//#define BT_WRITE_BDADDR_FOR_BCM2035
|
||||||
#ifdef BT_WRITE_BDADDR_FOR_BCM2035
|
#ifdef BT_WRITE_BDADDR_FOR_BCM2035
|
||||||
// try the bcm stuff
|
// try write bdaddr to a bcm2035 -> will be moved to an addon
|
||||||
int8 bt_status = BT_ERROR;
|
int8 bt_status = BT_ERROR;
|
||||||
|
|
||||||
BluetoothCommand<typed_command(hci_write_bcm2035_bdaddr)> writeAddress(OGF_VENDOR_CMD, OCF_WRITE_BCM2035_BDADDR);
|
BluetoothCommand<typed_command(hci_write_bcm2035_bdaddr)>
|
||||||
|
writeAddress(OGF_VENDOR_CMD, OCF_WRITE_BCM2035_BDADDR);
|
||||||
|
|
||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
@@ -402,10 +420,11 @@ LocalDevice::LocalDevice(hci_id hid) : hid(hid)
|
|||||||
writeAddress->bdaddr.b[4] = 0x03;
|
writeAddress->bdaddr.b[4] = 0x03;
|
||||||
writeAddress->bdaddr.b[5] = 0x00;
|
writeAddress->bdaddr.b[5] = 0x00;
|
||||||
|
|
||||||
request.AddInt32("hci_id", hid);
|
request.AddInt32("hci_id", fHid);
|
||||||
request.AddData("raw command", B_ANY_TYPE, writeAddress.Data(), writeAddress.Size());
|
request.AddData("raw command", B_ANY_TYPE, writeAddress.Data(), writeAddress.Size());
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_COMPLETE);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_VENDOR_CMD, OCF_WRITE_BCM2035_BDADDR));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_VENDOR_CMD,
|
||||||
|
OCF_WRITE_BCM2035_BDADDR));
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
||||||
reply.FindInt8("status", &bt_status);
|
reply.FindInt8("status", &bt_status);
|
||||||
@@ -418,8 +437,7 @@ LocalDevice::LocalDevice(hci_id hid) : hid(hid)
|
|||||||
|
|
||||||
LocalDevice::~LocalDevice()
|
LocalDevice::~LocalDevice()
|
||||||
{
|
{
|
||||||
if (fMessenger)
|
delete fMessenger;
|
||||||
delete fMessenger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,47 +35,45 @@ RemoteDevice::IsTrustedDevice(void)
|
|||||||
BString
|
BString
|
||||||
RemoteDevice::GetFriendlyName(bool alwaysAsk)
|
RemoteDevice::GetFriendlyName(bool alwaysAsk)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!alwaysAsk) {
|
if (!alwaysAsk) {
|
||||||
// Check if the name is already retrieved
|
// Check if the name is already retrieved
|
||||||
// TODO: Check if It is known from a KnownDevicesList
|
// TODO: Check if It is known from a KnownDevicesList
|
||||||
return BString("Not implemented");
|
return BString("Not implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fDiscovererLocalDevice == NULL)
|
if (fDiscovererLocalDevice == NULL)
|
||||||
return BString("#NoOwnerError#Not Valid name");
|
return BString("#NoOwnerError#Not Valid name");
|
||||||
|
|
||||||
if (fMessenger == NULL)
|
if (fMessenger == NULL)
|
||||||
return BString("#ServerNotReady#Not Valid name");
|
return BString("#ServerNotReady#Not Valid name");
|
||||||
|
|
||||||
void* remoteNameCommand = NULL;
|
void* remoteNameCommand = NULL;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
// Issue inquiry command
|
// Issue inquiry command
|
||||||
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
BMessage request(BT_MSG_HANDLE_SIMPLE_REQUEST);
|
||||||
BMessage reply;
|
BMessage reply;
|
||||||
|
|
||||||
request.AddInt32("hci_id", fDiscovererLocalDevice->GetID());
|
request.AddInt32("hci_id", fDiscovererLocalDevice->ID());
|
||||||
|
|
||||||
// Fill the request
|
// Fill the request
|
||||||
remoteNameCommand = buildRemoteNameRequest(fBdaddr, fPageRepetitionMode, fClockOffset, &size); // Fill correctily
|
remoteNameCommand = buildRemoteNameRequest(fBdaddr, fPageRepetitionMode, fClockOffset, &size);
|
||||||
|
|
||||||
request.AddData("raw command", B_ANY_TYPE, remoteNameCommand, size);
|
request.AddData("raw command", B_ANY_TYPE, remoteNameCommand, size);
|
||||||
|
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_CMD_STATUS);
|
request.AddInt16("eventExpected", HCI_EVENT_CMD_STATUS);
|
||||||
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_LINK_CONTROL, OCF_REMOTE_NAME_REQUEST));
|
request.AddInt16("opcodeExpected", PACK_OPCODE(OGF_LINK_CONTROL, OCF_REMOTE_NAME_REQUEST));
|
||||||
|
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE);
|
||||||
|
|
||||||
|
|
||||||
if (fMessenger->SendMessage(&request, &reply) == B_OK)
|
if (fMessenger->SendMessage(&request, &reply) == B_OK) {
|
||||||
{
|
|
||||||
BString name;
|
BString name;
|
||||||
int8 status;
|
int8 status;
|
||||||
|
|
||||||
if ((reply.FindInt8("status", &status) == B_OK) && (status == BT_OK)) {
|
if ((reply.FindInt8("status", &status) == B_OK) && (status == BT_OK)) {
|
||||||
|
|
||||||
if ((reply.FindString("friendlyname", &name) == B_OK ) ) {
|
if ((reply.FindString("friendlyname", &name) == B_OK )) {
|
||||||
return name;
|
return name;
|
||||||
} else {
|
} else {
|
||||||
return BString(""); // should not happen
|
return BString(""); // should not happen
|
||||||
@@ -113,8 +111,10 @@ RemoteDevice::Equals(RemoteDevice* obj)
|
|||||||
return bdaddrUtils::Compare(&fBdaddr, &ba);
|
return bdaddrUtils::Compare(&fBdaddr, &ba);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// static RemoteDevice* GetRemoteDevice(Connection conn);
|
// static RemoteDevice* GetRemoteDevice(Connection conn);
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
RemoteDevice::Authenticate()
|
RemoteDevice::Authenticate()
|
||||||
{
|
{
|
||||||
@@ -142,12 +142,14 @@ RemoteDevice::IsEncrypted()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LocalDevice*
|
LocalDevice*
|
||||||
RemoteDevice::GetLocalDeviceOwner()
|
RemoteDevice::GetLocalDeviceOwner()
|
||||||
{
|
{
|
||||||
return fDiscovererLocalDevice;
|
return fDiscovererLocalDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Private */
|
/* Private */
|
||||||
void
|
void
|
||||||
RemoteDevice::SetLocalDeviceOwner(LocalDevice* ld)
|
RemoteDevice::SetLocalDeviceOwner(LocalDevice* ld)
|
||||||
@@ -175,8 +177,7 @@ RemoteDevice::RemoteDevice(const BString& address)
|
|||||||
|
|
||||||
RemoteDevice::~RemoteDevice()
|
RemoteDevice::~RemoteDevice()
|
||||||
{
|
{
|
||||||
if (fMessenger)
|
delete fMessenger;
|
||||||
delete fMessenger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <PincodeWindow.h>
|
#include <PincodeWindow.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <new>
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@@ -33,10 +34,10 @@
|
|||||||
LocalDeviceImpl*
|
LocalDeviceImpl*
|
||||||
LocalDeviceImpl::CreateControllerAccessor(BPath* path)
|
LocalDeviceImpl::CreateControllerAccessor(BPath* path)
|
||||||
{
|
{
|
||||||
HCIDelegate* hd = new HCIControllerAccessor(path);
|
HCIDelegate* hd = new (std::nothrow)HCIControllerAccessor(path);
|
||||||
|
|
||||||
if (hd != NULL)
|
if (hd != NULL)
|
||||||
return new LocalDeviceImpl(hd);
|
return new (std::nothrow)LocalDeviceImpl(hd);
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -45,10 +46,10 @@ LocalDeviceImpl::CreateControllerAccessor(BPath* path)
|
|||||||
LocalDeviceImpl*
|
LocalDeviceImpl*
|
||||||
LocalDeviceImpl::CreateTransportAccessor(BPath* path)
|
LocalDeviceImpl::CreateTransportAccessor(BPath* path)
|
||||||
{
|
{
|
||||||
HCIDelegate* hd = new HCITransportAccessor(path);
|
HCIDelegate* hd = new (std::nothrow)HCITransportAccessor(path);
|
||||||
|
|
||||||
if (hd != NULL)
|
if (hd != NULL)
|
||||||
return new LocalDeviceImpl(hd);
|
return new (std::nothrow)LocalDeviceImpl(hd);
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user