• Hi,

    I've been having some issues with my puck(s). Often, when I joined them to Bluetooth, they'll automatically go back to "Paired" rather than "Connected". Sometimes, when they connect, they don't appear as HID device either.

    Any ideas?

    Here's the snippet where I define the NRF services:

    var services = {
      0x180a: {
        0x2a50: {
          value:     [
            0x01,           
            0x6d, 0x04,
            0x2b, 0xc5,
            0x00, 0x00
          ],
          readable:  true,
        }
      }
    };
    
    var kb = require("ble_hid_keyboard");
    NRF.setServices(services, {
      advertise: [ 0x180a ],
      hid : kb.report
    });
    

    Thanks

  • In Windows you'd expect that the device goes back to 'Paired' from 'Connected' if Windows doesn't find a reason to maintain a connection - which would be the case if it didn't think your device was a HID device.

    Just as a quick sanity check, what happens if you just do:

    var kb = require("ble_hid_keyboard");
    NRF.setServices(undefined, { hid : kb.report });
    

    without any of the other services?

    I might be that if windows sees the 180A device information service but it isn't in the format it expects, it just drops the connection...

  • Hm. That seems to be working consistently at that moment. I believe I switched to the format for defining services and whatnot because this method became flaky. I'll see what happens.

    Thanks!

  • @Gordon Is there a way for the button to trigger a reconnect? To save battery, I want to turn bluetooth off until I click it a certain way to turn in back on. Figure this would introduce issues reconnecting.

  • You can't trigger a reconnect yourself, but you can do NRF.sleep() to stop advertising (which will make the PC think the device isn't around any more) and then NRF.wake() to wake it up again.

    I should add that with firmwares after 1v99 (that's the cutting edge ones at the moment), having a connection doesn't take that much power at all since if nothing is happening it slows right down to almost the same speed as it would if it was normally advertising.

  • Gotcha. With future releases I should expect the battery life to be longer than around a month? That's the lifespan I'm seeing right now. Not doing much except BLE HID connection and waiting for button press.

  • Yes - the issue is that Bluetooth LE devices have to communicate every so often when connected. That used to be between 7.5ms and 20ms (usually 20ms) - which draws quite a lot of power if it's happening all the time.

    The new versions of the firmware detect when they're connected but nothing is happening, and they ask the host computer to lower that polling rate to 200ms. As soon as there is sustained activity (>2 transmits or receives in a few seconds) it'll jump back to the 7.5ms rate, until it's idle again.

    Hopefully it'll mean nearer 6 months battery life, maybe a bit more.

  • Hello community!

    I actually have a very similar problem, but I'm not doing anything with BLE at all (i.e. not trying to save power or anything).
    I just pair/connect my Puck to my Win 10 laptop as HID-keyboard and use it to automate a couple of things by pressing the button (just emit key presses).

    Here's how I initialize the Puck (the code pretty much straight out of HID tutorial):

    var kb = require("ble_hid_keyboard");
    NRF.setServices(undefined, { hid : kb.report });
    
    // Define button press handler
    function btnPressed(e) {
          digitalPulse(LED1,1,50);
          // Send some key(s) here...
          kb.tap(kb.KEY.ENTER, 0, function() {});
    }
    
    function onInit() {
      // trigger btnPressed whenever the button is pressed
      setWatch(btnPressed, BTN, {edge:"rising",repeat:true,debounce:50})­;
    }
    

    The problem:
    Because I often take my laptop and walk away from my desk where the Puck is, BLE connection breaks - this is expected. But when I come back to my desk, the connection never restores by itself. It shows as "paired" but not connected.
    I have to open IDE and initiate a connection to the Puck, which works fine, but is a real pain in the bum because this happens a LOT.

    Is this normal? My Bluetooth keyboard and headphones reconnect fine, and I would expect the Puck to do the same...

    Is there anything I can do to fix this?

    Thanks.

  • Hi - Are you on the latest (1v99) firmware?

    Could you try unpairing in windows and then repairing?

    When the Puck first pairs, it won't be a HID device, so windows won't think to automatically reconnect. But if Windows has paired to it when it's a HID device then windows should automatically try to reconnect as soon as it sees the device.

  • Hi Gordon,
    Thanks for your reply.
    Yes, I'm on the latest firmware 1.99. I also tried re-flashing which didn't help.
    I'm aware of HID not being available immediately after I run the code. I am already re-paired and the Puck is definitely seen as HID keyboard, because it types and windows shows it as Bluetooth keyboard in the list of devices.
    I also thought that Windows should reconnect it, but it doesn't. Very weird.
    In case you want to know, the laptop is MS Surface Laptop with latest Win 10.

    I am thinking I could try re- flashing with cutting edge version?..
    Will let you know if it makes a difference.

  • That is odd - I'm pretty sure I've had people doing exactly that and it's been fine.

    The other thing you could try is http://www.espruino.com/Puck.js#hard-res­et (do it after installing the espruino firmware version you want to use)

    Windows always tries to create a secure connection to the Puck for Bluetooth HID, which means that encryption keys get stored on the Puck. I guess it's possible that something has gone wrong somehow and the Puck has the wrong keys stored - doing that hard reset should remove them and might help?

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

puck on windows "paired" but not "connected" (or connected but not HID)

Posted by Avatar for tako @tako

Actions