8000 Fixes for BLE Advertising · lucadentella/esp32-snippets@e85eefa · GitHub
[go: up one dir, main page]

Skip to content

Commit e85eefa

Browse files
committed
Fixes for BLE Advertising
1 parent e99cb6f commit e85eefa

File tree

5 files changed

+233
-141
lines changed

5 files changed

+233
-141
lines changed

cpp_utils/BLEAdvertising.cpp

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ BLEAdvertising::BLEAdvertising() {
3535
m_advData.p_service_uuid = nullptr;
3636
m_advData.flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT);
3737

38+
m_advDataScanResponse.set_scan_rsp = true;
39+
m_advDataScanResponse.include_name = false;
40+
m_advDataScanResponse.include_txpower = false;
41+
m_advDataScanResponse.min_interval = 0x20;
42+
m_advDataScanResponse.max_interval = 0x40;
43+
m_advDataScanResponse.appearance = 0x00;
44+
m_advDataScanResponse.manufacturer_len = 0;
45+
m_advDataScanResponse.p_manufacturer_data = nullptr;
46+
m_advDataScanResponse.service_data_len = 0;
47+
m_advDataScanResponse.p_service_data = nullptr;
48+
m_advDataScanResponse.service_uuid_len = 0;
49+
m_advDataScanResponse.p_service_uuid = nullptr;
50+
m_advDataScanResponse.flag = (ESP_BLE_ADV_FLAG_GEN_DISC | ESP_BLE_ADV_FLAG_BREDR_NOT_SPT);
51+
3852
m_advParams.adv_int_min = 0x20;
3953
m_advParams.adv_int_max = 0x40;
4054
m_advParams.adv_type = ADV_TYPE_IND;
@@ -83,18 +97,18 @@ void BLEAdvertising::setServiceUUID(BLEUUID serviceUUID) {
8397
esp_bt_uuid_t* espUUID = m_serviceUUID.getNative();
8498
switch(espUUID->len) {
8599
case ESP_UUID_LEN_16: {
86-
m_advData.service_uuid_len = 2;
87-
m_advData.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid16);
100+
m_advDataScanResponse.service_uuid_len = 2;
101+
m_advDataScanResponse.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid16);
88102
break;
89103
}
90104
case ESP_UUID_LEN_32: {
91-
m_advData.service_uuid_len = 4;
92-
m_advData.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid32);
105+
m_advDataScanResponse.service_uuid_len = 4;
106+
m_advDataScanResponse.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid32);
93107
break;
94108
}
95109
case ESP_UUID_LEN_128: {
96-
m_advData.service_uuid_len = 16;
97-
m_advData.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid128);
110+
m_advDataScanResponse.service_uuid_len = 16;
111+
m_advDataScanResponse.p_service_uuid = reinterpret_cast<uint8_t*>(&espUUID->uuid.uuid128);
98112
break;
99113
}
100114
} // switch
@@ -110,13 +124,13 @@ void BLEAdvertising::setServiceUUID(BLEUUID serviceUUID) {
110124
void BLEAdvertising::start() {
111125
ESP_LOGD(LOG_TAG, ">> start");
112126

113-
if (m_advData.service_uuid_len > 0) {
127+
if (m_advDataScanResponse.service_uuid_len > 0) {
114128
uint8_t hexData[16*2+1];
115-
BLEUtils::buildHexData(hexData, m_advData.p_service_uuid, m_advData.service_uuid_len);
129+
BLEUtils::buildHexData(hexData, m_advDataScanResponse.p_service_uuid, m_advDataScanResponse.service_uuid_len);
116130
ESP_LOGD(LOG_TAG, " - Service: service_uuid_len=%d, p_service_uuid=0x%x (data=%s)",
117-
m_advData.service_uuid_len,
118-
(uint32_t)m_advData.p_service_uuid,
119-
(m_advData.service_uuid_len > 0?(char *)hexData:"N/A")
131+
m_advDataScanResponse.service_uuid_len,
132+
(uint32_t)m_advDataScanResponse.p_service_uuid,
133+
(m_advDataScanResponse.service_uuid_len > 0?(char *)hexData:"N/A")
120134
);
121135
} // We have a service to advertise
122136

@@ -128,6 +142,12 @@ void BLEAdvertising::start() {
128142
return;
129143
}
130144

145+
errRc = ::esp_ble_gap_config_adv_data(&m_advDataScanResponse);
146+
if (errRc != ESP_OK) {
147+
ESP_LOGE(LOG_TAG, "<< esp_ble_gap_config_adv_data (Scan response): rc=%d %s", errRc, GeneralUtils::errorToString(errRc));
148+
return;
149+
}
150+
131151
// Start advertising.
132152
errRc = ::esp_ble_gap_start_advertising(&m_advParams);
133153
if (errRc != ESP_OK) {

cpp_utils/BLEAdvertising.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class BLEAdvertising {
2727
void setServiceUUID(BLEUUID serviceUUID);
2828
private:
2929
esp_ble_adv_data_t m_advData;
30+
esp_ble_adv_data_t m_advDataScanResponse;
3031
esp_ble_adv_params_t m_advParams;
3132
BLEUUID m_serviceUUID;
3233
};

cpp_utils/BLEUtils.cpp

Lines changed: 104 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -965,34 +965,63 @@ void BLEUtils::dumpGapEvent(
965965
switch(event) {
966966
//
967967
// ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT
968+
// adv_data_cmpl
969+
// - esp_bt_status_t
968970
//
969971
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT: {
970-
ESP_LOGD(LOG_TAG, "[status: %d]", param->scan_rsp_data_cmpl.status);
972+
ESP_LOGD(LOG_TAG, "[status: %d]", param->adv_data_cmpl.status);
971973
break;
972974
} // ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT
973975

974976

977+
//
978+
// ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT
979+
//
980+
// adv_data_raw_cmpl
981+
// - esp_bt_status_t status
982+
//
983+
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT: {
984+
ESP_LOGD(LOG_TAG, "[status: %d]", param->adv_data_raw_cmpl.status);
985+
break;
986+
} // ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT
987+
988+
975989
//
976990
// ESP_GAP_BLE_ADV_START_COMPLETE_EVT
977991
//
992+
// adv_start_cmpl
993+
// - esp_bt_status_t status
994+
//
978995
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT: {
979-
ESP_LOGD(LOG_TAG, "[status: %d]", param->scan_start_cmpl.status);
996+
ESP_LOGD(LOG_TAG, "[status: %d]", param->adv_start_cmpl.status);
980997
break;
981998
} // ESP_GAP_BLE_ADV_START_COMPLETE_EVT
982999

9831000

9841001
//
9851002
// ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT
9861003
//
1004+
// adv_stop_cmpl
1005+
// - esp_bt_status_t status
1006+
//
9871007
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT: {
988-
ESP_LOGD(LOG_TAG, "[status: %d]", param->scan_stop_cmpl.status);
1008+
ESP_LOGD(LOG_TAG, "[status: %d]", param->adv_stop_cmpl.status);
9891009
break;
9901010
} // ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT
9911011

9921012

9931013
//
9941014
// ESP_GAP_BLE_AUTH_CMPL_EVT
9951015
//
1016+
// auth_cmpl
1017+
// - esp_bd_addr_t bd_addr
1018+
// - bool key_present
1019+
// - esp_link_key key
1020+
// - bool success
1021+
// - uint8_t fail_reason
1022+
// - esp_bd_addr_type_t addr_type
1023+
// - esp_bt_dev_type_t dev_type
1024+
//
9961025
case ESP_GAP_BLE_AUTH_CMPL_EVT: {
9971026
ESP_LOGD(LOG_TAG, "[bd_addr: %s, key_present: %d, key: ***, key_type: %d, success: %d, fail_reason: %d, addr_type: ***, dev_type: %s]",
9981027
BLEAddress(param->ble_security.auth_cmpl.bd_addr).toString().c_str(),
@@ -1006,6 +1035,18 @@ void BLEUtils::dumpGapEvent(
10061035
} // ESP_GAP_BLE_AUTH_CMPL_EVT
10071036

10081037

1038+
//
1039+
// ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT
1040+
//
1041+
// clear_bond_dev_cmpl
1042+
// - esp_bt_status_t status
1043+
//
1044+
case ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT: {
1045+
ESP_LOGD(LOG_TAG, "[status: %d]", param->clear_bond_dev_cmpl.status);
1046+
break;
1047+
} // ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT
1048+
1049+
10091050
//
10101051
// ESP_GAP_BLE_LOCAL_IR_EVT
10111052
//
@@ -1033,6 +1074,23 @@ void BLEUtils::dumpGapEvent(
10331074
} // ESP_GAP_BLE_NC_REQ_EVT
10341075

10351076

1077+
//
1078+
// ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT
1079+
//
1080+
// read_rssi_cmpl
1081+
// - esp_bt_status_t status
1082+
// - int8_t rssi
1083+
// - esp_bd_addr_t remote_addr
1084+
//
1085+
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT: {
1086+
ESP_LOGD(LOG_TAG, "[status: %d, rssi: %d, remote_addr: %s]",
1087+
param->read_rssi_cmpl.status,
1088+
param->read_rssi_cmpl.rssi,
1089+
BLEAddress(param->read_rssi_cmpl.remote_addr).toString().c_str()
1090+
);
1091+
break;
1092+
} // ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT
1093+
10361094
//
10371095
// ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT
10381096
//
@@ -1090,15 +1148,6 @@ void BLEUtils::dumpGapEvent(
10901148
} // ESP_GAP_BLE_SCAN_START_COMPLETE_EVT
10911149

10921150

1093-
//
1094-
// ESP_GAP_BLE_SEC_REQ_EVT
1095-
//
1096-
case ESP_GAP_BLE_SEC_REQ_EVT: {
1097-
ESP_LOGD(LOG_TAG, "[bd_addr: %s]", BLEAddress(param->ble_security.ble_req.bd_addr).toString().c_str());
1098-
break;
1099-
} // ESP_GAP_BLE_SEC_REQ_EVT
1100-
1101-
11021151
//
11031152
// ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT
11041153
//
@@ -1125,6 +1174,14 @@ void BLEUtils::dumpGapEvent(
11251174
} // ESP_GAP_BLE_SCAN_UPDATE_CONN_PARAMS_EVT
11261175

11271176

1177+
//
1178+
// ESP_GAP_BLE_SEC_REQ_EVT
1179+
//
1180+
case ESP_GAP_BLE_SEC_REQ_EVT: {
1181+
ESP_LOGD(LOG_TAG, "[bd_addr: %s]", BLEAddress(param->ble_security.ble_req.bd_addr).toString().c_str());
1182+
break;
1183+
} // ESP_GAP_BLE_SEC_REQ_EVT
1184+
11281185
default: {
11291186
ESP_LOGD(LOG_TAG, "*** dumpGapEvent: Logger not coded ***");
11301187
break;
@@ -1637,60 +1694,61 @@ const char* BLEUtils::eventTypeToString(esp_ble_evt_type_t eventType) {
16371694
*/
16381695
const char* BLEUtils::gapEventToString(uint32_t eventType) {
16391696
switch(eventType) {
1640-
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT:
1641-
return "ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT";
16421697
case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT:
16431698
return "ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT";
1699+
case ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT:
1700+
return "ESP_GAP_BLE_ADV_DATA_RAW_SET_COMPLETE_EVT";
16441701
case ESP_GAP_BLE_ADV_START_COMPLETE_EVT:
16451702
return "ESP_GAP_BLE_ADV_START_COMPLETE_EVT";
1646-
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT:
1647-
return "ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT";
1648-
case ESP_GAP_BLE_SCAN_RESULT_EVT:
1649-
return "ESP_GAP_BLE_SCAN_RESULT_EVT";
1650-
case ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT:
1651-
return "ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT";
1652-
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT:
1653-
return "ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT";
1654-
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT:
1655-
return "ESP_GAP_BLE_SCAN_START_COMPLETE_EVT";
1703+
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT: /*!< When stop adv complete, the event comes */
1704+
return "ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT";
16561705
case ESP_GAP_BLE_AUTH_CMPL_EVT: /* Authentication complete indication. */
16571706
return "ESP_GAP_BLE_AUTH_CMPL_EVT";
1707+
case ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT:
1708+
return "ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT";
1709+
case ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT:
1710+
return "ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT";
16581711
case ESP_GAP_BLE_KEY_EVT: /* BLE key event for peer device keys */
16591712
return "ESP_GAP_BLE_KEY_EVT";
1660-
case ESP_GAP_BLE_SEC_REQ_EVT: /* BLE security request */
1661-
return "ESP_GAP_BLE_SEC_REQ_EVT";
1662-
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: /* passkey notification event */
1663-
return "ESP_GAP_BLE_PASSKEY_NOTIF_EVT";
1664-
case ESP_GAP_BLE_PASSKEY_REQ_EVT: /* passkey request event */
1665-
return "ESP_GAP_BLE_PASSKEY_REQ_EVT";
1666-
case ESP_GAP_BLE_OOB_REQ_EVT: /* OOB request event */
1667-
return "ESP_GAP_BLE_OOB_REQ_EVT";
16681713
case ESP_GAP_BLE_LOCAL_IR_EVT: /* BLE local IR event */
16691714
return "ESP_GAP_BLE_LOCAL_IR_EVT";
16701715
case ESP_GAP_BLE_LOCAL_ER_EVT: /* BLE local ER event */
16711716
return "ESP_GAP_BLE_LOCAL_ER_EVT";
16721717
case ESP_GAP_BLE_NC_REQ_EVT: /* Numeric Comparison request event */
16731718
return "ESP_GAP_BLE_NC_REQ_EVT";
1674-
case ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT: /*!< When stop adv complete, the event comes */
1675-
return "ESP_GAP_BLE_ADV_STOP_COMPLETE_EVT";
1719+
case ESP_GAP_BLE_OOB_REQ_EVT: /* OOB request event */
1720+
return "ESP_GAP_BLE_OOB_REQ_EVT";
1721+
case ESP_GAP_BLE_PASSKEY_NOTIF_EVT: /* passkey notification event */
1722+
return "ESP_GAP_BLE_PASSKEY_NOTIF_EVT";
1723+
case ESP_GAP_BLE_PASSKEY_REQ_EVT: /* passkey request event */
1724+
return "ESP_GAP_BLE_PASSKEY_REQ_EVT";
1725+
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT:
1726+
return "ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT";
1727+
case ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT:
1728+
return "ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT";
1729+
case ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT:
1730+
return "ESP_GAP_BLE_SCAN_PARAM_SET_COMPLETE_EVT";
1731+
case ESP_GAP_BLE_SCAN_RESULT_EVT:
1732+
return "ESP_GAP_BLE_SCAN_RESULT_EVT";
1733+
case ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT:
1734+
return "ESP_GAP_BLE_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT";
1735+
case ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT:
1736+
return "ESP_GAP_BLE_SCAN_RSP_DATA_SET_COMPLETE_EVT";
1737+
case ESP_GAP_BLE_SCAN_START_COMPLETE_EVT:
1738+
return "ESP_GAP_BLE_SCAN_START_COMPLETE_EVT";
16761739
case ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT:
16771740
return "ESP_GAP_BLE_SCAN_STOP_COMPLETE_EVT";
1741+
case ESP_GAP_BLE_SEC_REQ_EVT: /* BLE security request */
1742+
return "ESP_GAP_BLE_SEC_REQ_EVT";
1743+
case ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT:
1744+
return "ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT";
1745+
case ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT:
1746+
return "ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT";
16781747
case ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT:
16791748
return "ESP_GAP_BLE_SET_STATIC_RAND_ADDR_EVT";
16801749
case ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT:
16811750
return "ESP_GAP_BLE_UPDATE_CONN_PARAMS_EVT";
1682-
case ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT:
1683-
return "ESP_GAP_BLE_SET_PKT_LENGTH_COMPLETE_EVT";
1684-
case ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT:
1685-
return "ESP_GAP_BLE_SET_LOCAL_PRIVACY_COMPLETE_EVT";
1686-
case ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT:
1687-
return "ESP_GAP_BLE_REMOVE_BOND_DEV_COMPLETE_EVT";
1688-
case ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT:
1689-
return "ESP_GAP_BLE_CLEAR_BOND_DEV_COMPLETE_EVT";
1690-
case ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT:
1691-
return "ESP_GAP_BLE_GET_BOND_DEV_COMPLETE_EVT";
1692-
case ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT:
1693-
return "ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT";
1751+
16941752
default:
16951753
ESP_LOGD(LOG_TAG, "gapEventToString: Unknown event type %d 0x%.2x", eventType, eventType);
16961754
return "Unknown event type";

0 commit comments

Comments
 (0)
0