8000
We read every piece of feedback, and take your input very seriously.
1 parent c104c67 commit bde21e5Copy full SHA for bde21e5
README.md
@@ -87,7 +87,7 @@ Read the [Contributing Guide](https://github.com/earlephilhower/arduino-pico/blo
87
# Features
88
* Adafruit TinyUSB Arduino (USB mouse, keyboard, flash drive, generic HID, CDC Serial, MIDI, WebUSB, others)
89
* Bluetooth on the PicoW (Classic and BLE) with Keyboard, Mouse, Joystick, and Virtual Serial
90
-* Bluetooth Classic HID master mode (connect to BT keyboard or mouse)
+* Bluetooth Classic and BLE HID master mode (connect to BT keyboard or mouse)
91
* Generic Arduino USB Serial, Keyboard, Joystick, and Mouse emulation
92
* WiFi (Pico W, ESP32-based ESPHost, Atmel WINC1500)
93
* Ethernet (Wired W5500, W5100, ENC28J60)
libraries/BluetoothHCI/examples/BluetoothBLEScanner/BluetoothBLEScanner.ino
@@ -0,0 +1,34 @@
1
+#include <BluetoothHCI.h>
2
+
3
+BluetoothHCI hci;
4
5
+void BTBasicSetup() {
6
+ l2cap_init();
7
+ gatt_client_init();
8
+ sm_init();
9
+ sm_set_io_capabilities(IO_CAPABILITY_NO_INPUT_NO_OUTPUT);
10
+ gap_set_default_link_policy_settings(LM_LINK_POLICY_ENABLE_SNIFF_MODE | LM_LINK_POLICY_ENABLE_ROLE_SWITCH);
11
+ hci_set_master_slave_policy(HCI_ROLE_MASTER);
12
+ hci_set_inquiry_mode(INQUIRY_MODE_RSSI_AND_EIR);
13
14
+ hci.setBLEName("Pico BLE Scanner");
15
+ hci.install();
16
+ hci.begin();
17
+}
18
19
+void setup() {
20
+ delay(5000);
21
+ BTBasicSetup();
22
23
24
+void loop() {
25
+ Serial.printf("BEGIN BLE SCAN @%lu ...", millis());
26
+ auto l = hci.scanBLE(BluetoothHCI::any_cod);
27
+ Serial.printf("END BLE SCAN @%lu\n\n", millis());
28
+ Serial.printf("%-8s | %-17s | %-4s | %s\n", "Class", "Address", "RSSI", "Name");
29
+ Serial.printf("%-8s | %-17s | %-4s | %s\n", "--------", "-----------------", "----", "----------------");
30
+ for (auto e : l) {
31
+ Serial.printf("%08lx | %17s | %4d | %s\n", e.deviceClass(), e.addressString(), e.rssi(), e.name());
32
+ }
33
+ Serial.printf("\n\n\n");
34
libraries/BluetoothHCI/keywords.txt
@@ -20,9 +20,13 @@ scan KEYWORD2
scanAsyncDone KEYWORD2
scanAsyncResult KEYWORD2
+setName KEYWORD2
+scanBLE KEYWORD2
# BTDeviceInfo
deviceClass KEYWORD2
address KEYWORD2
+addressType KEYWORD2
addressString KEYWORD2
rssi KEYWORD2
name KEYWORD2
libraries/BluetoothHCI/src/BluetoothDevice.h
@@ -27,14 +27,26 @@ class BTDeviceInfo {
BTDeviceInfo(uint32_t dc, const uint8_t addr[6], int rssi, const char *name) {
_deviceClass = dc;
memcpy(_address, addr, sizeof(_address));
+ _addressType = -1;
sprintf(_addressString, "%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
_rssi = rssi;
_name = strdup(name);
}
35
+ BTDeviceInfo(uint32_t dc, const uint8_t addr[6], int addressType, int rssi, const char *name, size_t nameLen) {
36
+ _deviceClass = dc;
37
+ memcpy(_address, addr, sizeof(_address));
38
+ sprintf(_addressString, "%02x:%02x:%02x:%02x:%02x:%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
39
+ _addressType = addressType;
40
+ _rssi = rssi;
41
+ _name = (char *)malloc(nameLen + 1);
42
+ memcpy(_name, name, nameLen);
43
+ _name[nameLen] = 0;
44
45
// Copy constructor to ensure we deep-copy the string
46
BTDeviceInfo(const BTDeviceInfo &b) {
47
_deviceClass = b._deviceClass;
48
memcpy(_address, b._address, sizeof(_address));
49
+ _addressType = b._addressType;
50
memcpy(_addressString, b._addressString, sizeof(_addressString));
51
_rssi = b._rssi;
52
_name = strdup(b._name);
@@ -57,9 +69,13 @@ class BTDeviceInfo {
57
69
const char *name() {
58
70
return _name;
59
71
72
+ int addressType() {
73
+ return _addressType;
74
60
75
private:
61
76
uint32_t _deviceClass;
62
77
uint8_t _address[6];
78
+ int _addressType;
63
79
char _addressString[18];
64
80
int8_t _rssi;
65
81
char *_name;