Avatar for LongJogger

LongJogger

Member since Jan 2017 • Last active Jun 2017
  • 1 conversations
  • 4 comments

Most recent activity

  • in Puck.js, Pixl.js and MDBT42
    Avatar for LongJogger

    I had two issues during testing:

    1. I think the parameters in the set methods were in a wrong order: typedarr.set(array [,offset])
    2. NRF.setAdvertising has not accepted the Uint8Array as object: Error message "Uncaught TypeError: Expecting object or undefined, got Uint8Array"

    But, with some small adjustments below, I got your code running. The device is then successfully recognized as an iBeacon.

    var advertise = function(options) {
      var d = new Uint8Array([
        0x02, // Number of bytes after first AD structure
        0x01, // BLE_GAP_AD_TYPE_FLAGS
        0x04, // BLE_GAP_ADV_FLAG_BR_EDR_NOT_SUPPORTED
        0x1A, // Length
        0xFF, // BLE_GAP_AD_TYPE_MANUFACTURER_SPECIFIC_DATA
        0x4C, 0x00, // 0x004C == Apple
        0x02, 0x15, // iBeacon type + length
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// iBeacon proximity uuid
        0, 0, // major
        0, 0, // minor
        0xc5]); // 2'c complement RSSI at 1 meter distance in dBm
      
      d.set(options.uuid,9);
      if (options.major!==undefined) d.set([options.major>>8,options.major],25);
      if (options.minor!==undefined) d.set([options.minor>>8,options.minor],27);
      if (options.rssi!==undefined) d.set([(options.rssi<0)?(options.rssi+256):options.rssi],29);
      
      var e = [].slice.call(d);
      NRF.setAdvertising(e, {interval:100});
    };
    
    advertise({
      uuid : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // ibeacon uuid
      major : 0x0001, // optional
      minor : 0x0001, // optional
      rssi : -59 // optional RSSI at 1 meter distance in dBm
    });
    

    Perhaps you have a better idea how to pass the Uint8Array to the NRF.setAdvertising function.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for LongJogger

    An own iBeacon module would be great and definitely add value also for other users.

    Changeable input parameters for an iBeacon module would be:

    1. UUID => Bytes 9 - 24
    2. Major: integer value between 0 and 65535 => Bytes 25 - 26
    3. Minor: integer value between 0 and 65535 => Bytes 27- 28
    4. Calibrated TX Power: integer value between 0 and 255 => Byte 29
  • in Puck.js, Pixl.js and MDBT42
    Avatar for LongJogger

    Thanks Gordon, for your fast reply.

    I also tried to just use the middle part of the example, but didn't realize that I have to change the flags. Your code above works perfectly!

    Thanks again, for your help.

  • in Puck.js, Pixl.js and MDBT42
    Avatar for LongJogger

    Has anyone already managed to turn Puck.js into an Apple iBeacon?

    So far, I used these information from Stackoverflow:
    http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile
    and the NRF.setAdvertising function to test with the following code:

    var g = [0xd6, 0xbe, 0x89, 0x8e, 0x40, 0x24, 0x05, 0xa2, 0x17, 0x6e, 0x3d, 0x71, 0x02, 0x01, 0x1a, 0x1a, 0xff, 0x4c, 0x00, 0x02, 0x15, 0xe2, 0xc5, 0x6d, 0xb5, 0xdf, 0xfb, 0x48, 0xd2, 0xb0, 0x60, 0xd0, 0xf5, 0xa7, 0x10, 0x96, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x52, 0xab, 0x8d, 0x38, 0xa5];
    NRF.setAdvertising(g);
    

    When sending the code to Puck.js, I get the following error message:

    Uncaught Error: Got BLE error code 9
     at line 1 col 21
    NRF.setAdvertising(g);
                        ^
    =undefined
    

    Any ideas? Thanks in advance!

Actions