Bluetooth: Peripheral HIDS mouse

The Peripheral HIDS mouse sample demonstrates how to use the GATT Human Interface Device (HID) Service to implement a mouse input device that you can connect to your computer. This sample also shows how to perform directed advertising.

Overview

The sample uses the buttons on a development kit to simulate the movement of a mouse. The four buttons simulate movement to the left, upward, to the right, and downward, respectively. Mouse clicks are not simulated.

This sample exposes the HID GATT Service. It uses a report map for a generic mouse.

You can also disable directed advertising feature by clearing the BT_DIRECTED_ADVERTISING flag in the application configuration. This feature is enabled by default and it changes the way in which advertising works in comparison to the other Bluetooth® Low Energy samples. When the device wants to advertise, it starts with high duty cycle directed advertising provided that it has bonding information. If the timeout occurs, then the device starts directed advertising to the next bonded peer. If all bonding information is used and there is still no connection, then the regular advertising starts.

Requirements

The sample supports the following development kits:

Hardware platforms

PCA

Board name

Build target

nRF5340 DK

PCA10095

nrf5340dk_nrf5340

nrf5340dk_nrf5340_cpuapp_ns nrf5340dk_nrf5340_cpuapp

nRF52 DK

PCA10040

nrf52dk_nrf52832

nrf52dk_nrf52832

nRF52840 DK

PCA10056

nrf52840dk_nrf52840

nrf52840dk_nrf52840

Note

If you use nRF5340 DK, the additional configuration of the network core will be taken from the child_image directory. For more details see: Image-specific variables.

User interface

Button 1:

Simulate moving the mouse pointer 5 pixels to the left.

When pairing, press this button to confirm the passkey value that is printed on the COM listener to pair with the other device.

Button 2:

Simulate moving the mouse pointer 5 pixels upward.

When pairing, press this button to reject the passkey value that is printed on the COM listener to prevent pairing with the other device.

Button 3:

Simulate moving the mouse pointer 5 pixels to the right.

Button 4:

Simulate moving the mouse pointer 5 pixels downward.

Configuration

See Configuring your application for information about how to permanently or temporarily change the configuration.

Setup

The HID service specification does not require encryption (CONFIG_BT_HIDS_DEFAULT_PERM_RW_ENCRYPT), but some systems disconnect from the HID devices that do not support security.

Building and running

This sample can be found under samples/bluetooth/peripheral_hids_mouse in the nRF Connect SDK folder structure.

See Building and programming an application for information about how to build and program the application and Testing and debugging an application for general information about testing and debugging in the nRF Connect SDK.

Testing

After programming the sample to your development kit, you can test it either by connecting the development kit as a mouse device to a Microsoft Windows computer or by connecting to it with nRF Connect for Desktop.

Testing with a Microsoft Windows computer

To test with a Microsoft Windows computer that has a Bluetooth radio, complete the following steps:

  1. Power on your development kit.

  2. On your Windows computer, search for Bluetooth devices and connect to the device named “NCS HIDS mouse”.

  3. Push Button 1 on the kit. Observe that the mouse pointer on the computer moves to the left.

  4. Push Button 2. Observe that the mouse pointer on the computer moves upward.

  5. Push Button 3. Observe that the mouse pointer on the computer moves to the right.

  6. Push Button 4. Observe that the mouse pointer on the computer moves downward.

  7. Disconnect the computer from the device by removing the device from the computer’s devices list.

Testing with nRF Connect for Desktop

To test with nRF Connect for Desktop, complete the following steps:

  1. Power on your development kit.

  2. Connect to the device from nRF Connect (the device is advertising as “NCS HIDS mouse”).

  3. Optionally, bond to the device. To do so, click the settings button for the device in nRF Connect, select Pair, check Perform Bonding, and click Pair. Optionally check Enable MITM protection to pair with MITM protection and use a button on the device to confirm or reject passkey value.

  4. Click Match in nRF Connect app. Wait until the bond is established before you continue.

  5. Observe that the services of the connected device are shown.

  6. Click the Play button for all HID Report characteristics.

  7. Push Button 1 on the kit. Observe that a notification is received on one of the HID Report characteristics, containing the value FB0F00.

    Mouse motion reports contain data with an X-translation and a Y-translation. These are transmitted as 12-bit signed integers. The format used for mouse reports is the following byte array, where LSB/MSB is the least/most significant bit: [8 LSB (X), 4 LSB (Y) | 4 MSB(X), 8 MSB(Y)].

    Therefore, FB0F00 denotes an X-translation of FFB = -5 (two’s complement format), which means a movement of 5 pixels to the left, and a Y-translation of 000 = 0.

  8. Push Button 2. Observe that the value 00B0FF is received on the same HID Report characteristic.

  9. Push Button 3. Observe that the value 050000 is received on the same HID Report characteristic.

  10. Push Button 4. Observe that the value 005000 is received on the same HID Report characteristic.

  11. Disconnect the device in nRF Connect. Observe that no new notifications are received and the device is advertising.

  12. As bond information is preserved by nRF Connect, you can immediately reconnect to the device by clicking the Connect button again.

Dependencies

This sample uses the following nRF Connect SDK libraries:

In addition, it uses the following Zephyr libraries:

  • include/zephyr/types.h

  • lib/libc/minimal/include/assert.h

  • lib/libc/minimal/include/errno.h

  • include/sys/printk.h

  • include/sys/byteorder.h

  • GPIO Interface

  • Settings

  • Bluetooth APIs:

    • include/bluetooth/bluetooth.h

    • include/bluetooth/hci.h

    • include/bluetooth/conn.h

    • include/bluetooth/uuid.h

    • include/bluetooth/gatt.h

    • samples/bluetooth/gatt/bas.h

References