8000 Wed Dec 28 12:27:49 CST 2016 · Smeedy/esp32-snippets@9d8f388 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

8000
Appearance settings

Commit 9d8f388

Browse files
author
kolban
committed
Wed Dec 28 12:27:49 CST 2016
1 parent b232989 commit 9d8f388

File tree

3 files changed

+183
-0
lines changed

3 files changed

+183
-0
lines changed

BLE/scanner/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
WARNING .... This is a VERY EARLY piece of work ... it is far from finished.

BLE/scanner/ble1.c

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
#include <bt.h>
2+
#include <esp_bt_main.h>
3+
#include <esp_gap_ble_api.h>
4+
#include <esp_log.h>
5+
#include <freertos/FreeRTOS.h>
6+
#include <freertos/task.h>
7+
8+
#include "sdkconfig.h"
9+
10+
#define BT_BD_ADDR_STR "%02x:%02x:%02x:%02x:%02x:%02x"
11+
#define BT_BD_ADDR_HEX(addr) addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]
12+
13+
static const char *bt_event_type_to_string(uint32_t eventType);
14+
static const char *bt_gap_search_event_type_to_string(uint32_t searchEvt);
15+
static const char *bt_addr_t_to_string(esp_ble_addr_type_t type);
16+
static const char *bt_dev_type_to_string(esp_bt_dev_type_t type);
17+
18+
static const char tag[] = "ble1";
19+
20+
static void dump_adv_payload(uint8_t *payload) {
21+
uint8_t length;
22+
uint8_t ad_type;
23+
uint8_t sizeConsumed = 0;
24+
int finished = 0;
25+
int i;
26+
char text[31*2+1];
27+
//sprintf(text, "%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x")
28+
while(!finished) {
29+
length = *payload;
30+
payload++;
31+
if (length != 0) {
32+
ad_type = *payload;
33+
payload += length;
34+
ESP_LOGD(tag, "Type: 0x%.2x, length: %d", ad_type, length);
35+
36+
}
37+
38+
sizeConsumed = 1 + length;
39+
if (sizeConsumed >=31 || length == 0) {
40+
finished = 1;
41+
}
42+
} // !finished
43+
} // dump_adv_payload
44+
45+
46+
static void gap_event_handler(uint32_t event, void *param) {
47+
ESP_LOGD(tag, "Received a GAP event: %s", bt_event_type_to_string(event));
48+
esp_ble_gap_cb_param_t *p = (esp_ble_gap_cb_param_t *)param;
49+
if (event == ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT) {
50+
ESP_LOGD(tag, "status: %d", p->scan_param_cmpl.status);
51+
} else if (event == ESP_GAP_BLE_SCAN_RESULT_EVT) {
52+
ESP_LOGD(tag, "device address (bda): %02x:%02x:%02x:%02x:%02x:%02x", BT_BD_ADDR_HEX(p->scan_rst.bda));
53+
ESP_LOGD(tag, "device type: %s", bt_dev_type_to_string(p->scan_rst.dev_type));
54+
ESP_LOGD(tag, "search_evt: %s", bt_gap_search_event_type_to_string(p->scan_rst.search_evt));
55+
ESP_LOGD(tag, "addr_type: %s", bt_addr_t_to_string(p->scan_rst.ble_addr_type));
56+
ESP_LOGD(tag, "rssi: %d", p->scan_rst.rssi);
57+
ESP_LOGD(tag, "flag: %d", p->scan_rst.flag);
58+
ESP_LOGD(tag, "num_resps: %d", p->scan_rst.num_resps);
59+
60+
61+
if (p->scan_rst.search_evt == ESP_GAP_SEARCH_INQ_RES_EVT) {
62+
ESP_LOGD(tag, "payload:");
63+
uint8_t len;
64+
uint8_t *data = esp_ble_resolve_adv_data(p->scan_rst.ble_adv, ESP_BLE_AD_TYPE_NAME_CMPL, &len);
65+
ESP_LOGD(tag, "len: %d, %.*s", len, len, data);
66+
ESP_LOGD(tag, "dump -");
67 E864 +
dump_adv_payload(p->scan_rst.ble_adv);
68+
}
69+
ESP_LOGD(tag, "");
70+
}
71+
} // gap_event_handler
72+
73+
static const char *bt_dev_type_to_string(esp_bt_dev_type_t type) {
74+
switch(type) {
75+
case ESP_BT_DEVICE_TYPE_BREDR:
76+
return "ESP_BT_DEVICE_TYPE_BREDR";
77+
case ESP_BT_DEVICE_TYPE_BLE:
78+
return "ESP_BT_DEVICE_TYPE_BLE";
79+
case ESP_BT_DEVICE_TYPE_DUMO:
80+
return "ESP_BT_DEVICE_TYPE_DUMO";
81+
default:
82+
return "Unknown";
83+
}
84+
} // bt_dev_type_to_string
85+
86+
static const char *bt_addr_t_to_string(esp_ble_addr_type_t type) {
87+
switch(type) {
88+
case BLE_ADDR_TYPE_PUBLIC:
89+
return "BLE_ADDR_TYPE_PUBLIC";
90+
case BLE_ADDR_TYPE_RANDOM:
91+
return "BLE_ADDR_TYPE_RANDOM";
92+
case BLE_ADDR_TYPE_RPA_PUBLIC:
93+
return "BLE_ADDR_TYPE_RPA_PUBLIC";
94+
case BLE_ADDR_TYPE_RPA_RANDOM:
95+
return "BLE_ADDR_TYPE_RPA_RANDOM";
96+
default:
97+
return "Unknown addr_t";
98+
}
99+
} // bt_addr_t_to_string
100+
101+
static const char *bt_gap_search_event_type_to_string(uint32_t searchEvt) {
102+
switch(searchEvt) {
103+
case ESP_GAP_SEARCH_INQ_RES_EVT:
104+
return "ESP_GAP_SEARCH_INQ_RES_EVT";
105+
case ESP_GAP_SEARCH_INQ_CMPL_EVT:
106+
return "ESP_GAP_SEARCH_INQ_CMPL_EVT";
107+
case ESP_GAP_SEARCH_DISC_RES_EVT:
108+
return "ESP_GAP_SEARCH_DISC_RES_EVT";
109+
case ESP_GAP_SEARCH_DISC_BLE_RES_EVT:
110+
return "ESP_GAP_SEARCH_DISC_BLE_RES_EVT";
111+
case ESP_GAP_SEARCH_DISC_CMPL_EVT:
112+
return "ESP_GAP_SEARCH_DISC_CMPL_EVT";
113+
case ESP_GAP_SEARCH_DI_DISC_CMPL_EVT:
114+
return "ESP_GAP_SEARCH_DI_DISC_CMPL_EVT";
115+
case ESP_GAP_SEARCH_SEARCH_CANCEL_CMPL_EVT:
116+
return "ESP_GAP_SEARCH_SEARCH_CANCEL_CMPL_EVT";
117+
default:
118+
return "Unknown event type";
119+
}
120+
} // bt_gap_search_event_type_to_string
121+
122+
/*
123+
* Convert a BT GAP event type to a string representation.
124+
*/
125+
static const char *bt_event_type_to_string(uint32_t eventType) {
126+
switch(eventType) {
127+
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT:
128+
return "ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT";
129+
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT:
130+
return "ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT";
131+
case ESP_GAP_BLE_SCAN_RESULT_EVT:
132+
return "ESP_GAP_BLE_SCAN_RESULT_EVT";
133+
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT:
134+
return "ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT";
135+
default:
136+
return "Unknown event type";
137+
}
138+
} // bt_event_type_to_string
139+
140+
141+
void bt_task(void *ignore) {
142+
int errRc;
143+
bt_controller_init();
144+
esp_init_bluetooth();
145+
esp_enable_bluetooth();
146+
errRc = esp_ble_gap_register_callback(gap_event_handler);
147+
if (errRc != ESP_OK) {
148+
ESP_LOGE(tag, "esp_ble_gap_register_callback: rc=%d", errRc);
149+
goto end;
150+
}
151+
static esp_ble_scan_params_t ble_scan_params = {
152+
.scan_type = BLE_SCAN_TYPE_ACTIVE,
153+
.own_addr_type = ESP_PUBLIC_ADDR,
154+
.scan_filter_policy = BLE_SCAN_FILTER_ALLOW_ALL,
155+
.scan_interval = 0x50,
156+
.scan_window = 0x30
157+
};
158+
errRc = esp_ble_gap_set_scan_params(&ble_scan_params);
159+
if (errRc != ESP_OK) {
160+
ESP_LOGE(tag, "esp_ble_gap_set_scan_params: rc=%d", errRc);
161+
goto end;
162+
}
163+
164+
errRc = esp_ble_gap_start_scanning(20);
165+
if (errRc != ESP_OK) {
166+
ESP_LOGE(tag, "esp_ble_gap_start_scanning: rc=%d", errRc);
167+
goto end;
168+
}
169+
ESP_LOGD(tag, "We have registered what we need!");
170+
end:
171+
vTaskDelete(NULL);
172+
} // bt_task

BLE/scanner/main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include <freertos/FreeRTOS.h>
2+
#include <freertos/task.h>
3+
4+
extern void bt_task(void *ignore);
5+
6+
7+
void app_main(void)
8+
{
9+
xTaskCreatePinnedToCore(&bt_task, "btTask", 2048, NULL, 5, NULL, 0);
10+
}

0 commit comments

Comments
 (0)
0