WISE Discover Device
Article Metadata
Maemo Platform
int search_servers(wise_connection_manager* manager)
{
inquiry_info *inquiry=NULL;
int max_rsp,num_rsp,device_id,socket,len,flags,index;
/* Get local device ID */
device_id = hci_get_route(NULL);
if ( device_id < 0 ) return WISE_CONNECTION_ERROR;
/* Open socket */
socket = hci_open_dev( device_id );
if ( socket < 0 ) return WISE_CONNECTION_ERROR;
len = 8;
max_rsp = 255;
/* Flush existing Bluetooth devices */
flags = IREQ_CACHE_FLUSH;
/* Search Bluetooth devices */
inquiry = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
if ( inquiry==NULL ) return WISE_CONNECTION_ERROR;
num_rsp = hci_inquiry(device_id,len,max_rsp,NULL,&inquiry,flags);
for ( index=0; index < num_rsp; index++ )
{
wise_device* device = malloc(sizeof(wise_device));
if ( device!=NULL )
{
ba2str(&(inquiry+index)->bdaddr,device->BT_address);
if ( search_service(manager,device,logger)!=WISE_OK ) free(device);
else add_server(manager,device);
}
}
free(inquiry);
close(socket);
return WISE_OK;
}
S60 Platform
struct TDeviceData
{
THostName iDeviceName;
TBTDevAddr iDeviceAddr;
TUint iDeviceServicePort;
};
typedef RPointerArray<TDeviceData> TDeviceDataList;
TDeviceDataList iFoundDevices;
void CWISEConnectionManager::SearchServersL()
{
RHostResolver resolver;
TInquirySockAddr addr;
TNameEntry entry;
// reset search arrays
iFoundDevices.ResetAndDestroy();
// load protocol for discovery
TProtocolDesc pdesc;
User::LeaveIfError(iSocketServ.FindProtocol(KBTLinkManagerTxt(), pdesc));
// initialize host resolver
User::LeaveIfError(resolver.Open(iSocketServ, pdesc.iAddrFamily, pdesc.iProtocol));
// start device discovery by invoking remote address lookup
addr.SetIAC(KGIAC);
addr.SetAction(KHostResInquiry|KHostResName|KHostResIgnoreCache);
TInt error = resolver.GetByAddress(addr, entry);
while ( error==KErrNone )
{
TDeviceData *devData = new (ELeave) TDeviceData();
devData->iDeviceName = entry().iName;
devData->iDeviceAddr =
static_cast<TBTSockAddr>(entry().iAddr).BTAddr();
devData->iDeviceServicePort = 0;
iFoundDevices.Append(devData);
error = resolver.Next(entry);
}
resolver.Close();
}


Ebra, i have observed that you had good quality articles so far. But as far as this article is concerned, it is blank. Please let me know if you are going to update it in near future, otherwise it may be deleted.
--kiran10182 18:01, 7 May 2008 (EEST)