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

Skip to content

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+
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