I had two issues during testing:
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.
@LongJogger started
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
I had two issues during testing:
But, with some small adjustments below, I got your code running. The device is then successfully recognized as an iBeacon.
Perhaps you have a better idea how to pass the Uint8Array to the NRF.setAdvertising function.