Natively Pluggable Module

    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

    Install

    npm i ble-utils

    DownloadsWeekly Downloads

    3

    Version

    0.2.4

    License

    MIT

    Unpacked Size

    76.8 kB

    Total Files

    11

    Last publish

    Collaborators

    • leevi