Last active
October 11, 2015 03:56
-
-
Save dbaba/9d3202256e3db598238e to your computer and use it in GitHub Desktop.
An independent sample code from https://github.com/sandeepmistry/noble
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// perform `npm install noble async` prior to running this. | |
var async = require('async'); | |
var noble = require('noble'); | |
var peripheralId = process.argv[2]; | |
noble.on('stateChange', function(state) { | |
if (state === 'poweredOn') { | |
noble.startScanning([], true); | |
} else { | |
noble.stopScanning(); | |
} | |
}); | |
noble.on('discover', function(peripheral) { | |
if (peripheral.id === peripheralId) { | |
noble.stopScanning(); | |
console.log('peripheral with ID ' + peripheralId + ' found'); | |
var advertisement = peripheral.advertisement; | |
var localName = advertisement.localName; | |
var txPowerLevel = advertisement.txPowerLevel; | |
var manufacturerData = advertisement.manufacturerData; | |
var serviceData = advertisement.serviceData; | |
var serviceUuids = advertisement.serviceUuids; | |
if (localName) { | |
console.log(' Local Name = ' + localName); | |
} | |
if (txPowerLevel) { | |
console.log(' TX Power Level = ' + txPowerLevel); | |
} | |
if (manufacturerData) { | |
console.log(' Manufacturer Data = ' + manufacturerData.toString('hex')); | |
} | |
if (serviceData) { | |
console.log(' Service Data = ' + serviceData); | |
} | |
if (localName) { | |
console.log(' Service UUIDs = ' + serviceUuids); | |
} | |
console.log(); | |
explore(peripheral); | |
} | |
}); | |
function explore(peripheral) { | |
console.log('services and characteristics:'); | |
peripheral.on('disconnect', function() { | |
process.exit(0); | |
}); | |
peripheral.connect(function(error) { | |
peripheral.discoverServices([], function(error, services) { | |
var serviceIndex = 0; | |
async.whilst( | |
function () { | |
return (serviceIndex < services.length); | |
}, | |
function(callback) { | |
var service = services[serviceIndex]; | |
var serviceInfo = service.uuid; | |
if (service.name) { | |
serviceInfo += ' (' + service.name + ')'; | |
} | |
console.log(serviceInfo); | |
service.discoverCharacteristics([], function(error, characteristics) { | |
var characteristicIndex = 0; | |
async.whilst( | |
function () { | |
return (characteristicIndex < characteristics.length); | |
}, | |
function(callback) { | |
var characteristic = characteristics[characteristicIndex]; | |
var characteristicInfo = ' ' + characteristic.uuid; | |
if (characteristic.name) { | |
characteristicInfo += ' (' + characteristic.name + ')'; | |
} | |
async.series([ | |
function(callback) { | |
characteristic.discoverDescriptors(function(error, descriptors) { | |
async.detect( | |
descriptors, | |
function(descriptor, callback) { | |
return callback(descriptor.uuid === '2901'); | |
}, | |
function(userDescriptionDescriptor){ | |
if (userDescriptionDescriptor) { | |
userDescriptionDescriptor.readValue(function(error, data) { | |
if (data) { | |
characteristicInfo += ' (' + data.toString() + ')'; | |
} | |
callback(); | |
}); | |
} else { | |
callback(); | |
} | |
} | |
); | |
}); | |
}, | |
function(callback) { | |
characteristicInfo += '\n properties ' + characteristic.properties.join(', '); | |
if (characteristic.properties.indexOf('read') !== -1) { | |
characteristic.read(function(error, data) { | |
if (data) { | |
var string = data.toString('ascii'); | |
characteristicInfo += '\n value ' + data.toString('hex') + ' | \'' + string + '\''; | |
} | |
callback(); | |
}); | |
} else { | |
callback(); | |
} | |
}, | |
function() { | |
console.log(characteristicInfo); | |
characteristicIndex++; | |
callback(); | |
} | |
]); | |
}, | |
function(error) { | |
serviceIndex++; | |
callback(); | |
} | |
); | |
}); | |
}, | |
function (err) { | |
peripheral.disconnect(); | |
} | |
); | |
}); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment