ble-utils

0.2.4 • Public • Published

Bluetooth LE Utils

Description

This package can parse BLE slave advertisement packets into human readable/manipulatable objects and build advertisement packets from JSON objects. Based off of the BLE specification data types.

Install

npm install ble-utils

Usage

Packet Parsing

var advertising = require('ble-utils').advertising;
 
// Payload from your BLE device (make it into a buffer, if not already)
var payload = new Buffer([
  2, 1, 6,
  17, 6, 186, 86, 137, 166, 250, 191, 162, 189, 1, 70, 125, 110, 56, 88, 171, 173,
  5, 22, 10, 24, 7, 4
]);
 
// Parse (big-endian by default)
var packets = advertising.parse(payload);
 
console.log(packets.length); // 3
console.log(packets[0].type); // Flags
console.log(packets[0].data); // [ 'LE Limited Discoverable Mode' ]
 
console.log(packets[1].type); // 'Incomplete List of 128-bit Service Class UUIDs'
console.log(packets[1].data); // [ '0xba5689a6fabfa2bd01467d6e3858abad' ]

Packet Structure

The returned packets in the packet array have the following structure:

packet.type -> A string describing type of data (eg. "Flags", "Complete List of 16-bit UUIDs", etc.)

packet.data -> The data parsed into appropriate data type (eg. String, Array of Octet Strings, unsigned int, etc.)

packet._type -> the type value parsed from packet

packet._data -> The raw buffer that was parsed

packet._byteOrder -> The byte order in parsing

Endianness

You can specify the endianess that you want the buffers parsed with by using these functions:

advertising.parse.LE(buffer);
advertising.parse.BE(buffer);

Building Packets

var advertising = require('ble-utils').advertising;
 
// Create your advertisement packet
var packet = {
    flags : [0x02, 0x04],
    incompleteUUID16 : ['2A00','2A01'],
    completeName : 'My Device'
};
 
// Serialize it into a Buffer
var payload = advertising.serialize(packet);
 
console.log(payload);
// <Buffer 02 01 06 05 02 00 2a 01 2a 0a 09 4d 79 20 44 65 76 69 63 65>

You can create an advertisement packet buffer from an object with the following keys and their corresponding data types:

flags - An array of integers

incompleteUUID16 - An array of 16 bit UUID hex strings

completeUUID16 - An array of 16 bit UUID hex strings

incompleteUUID32 - An array of 32 bit UUID hex strings

completeUUID32 - An array of 32 bit UUID hex strings

incompleteUUID128 - An array of 128 bit UUID hex strings

completeUUID128 - An array of 128 bit UUID hex strings

shortName - A string

completeName - A string

txPower - An integer value

deviceClass - A hex string

pairingHashC - A hex string

pairingRandomizerR - A hex string

deviceId - A hex string

smOOBFlags - A hex string

intervalRange - An array of hex strings

solicitationUUID16 - An array of 16 bit UUID hex strings

solicitationUUID32 - An array of 16 bit UUID hex strings

solicitationUUID128 - An array of 16 bit UUID hex strings

serviceData - An array of hex strings

publicAddress - An array of hex strings

randomAddress - An array of hex strings

appearance - An array of bytes

interval - An array of hex strings

deviceAddress - An array of hex strings

role - An array of bytes or Buffer

pairingHashC256 - An array of hex strings

pairingRandomizerR256 - An array of hex strings

serviceUUID32 - An array of 32 bit UUID hex strings

serviceUUID128 - An array of 128 bit UUID hex strings

_3dInfo - An array of bytes or Buffer

mfrData - An array of bytes of Buffer

License

MIT

Package Sidebar

Install

npm i ble-utils

Weekly Downloads

5

Version

0.2.4

License

MIT

Unpacked Size

76.8 kB

Total Files

11

Last publish

Collaborators

  • leevi