Skip to content

Commit 4225e79

Browse files
authored
Merge branch 'master' into Jira896
2 parents 5242153 + 98c1746 commit 4225e79

File tree

5 files changed

+56
-16
lines changed

5 files changed

+56
-16
lines changed

libraries/CurieBLE/src/BLECharacteristic.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ bool BLECharacteristic::writeValue(const byte value[], int length, int offset)
283283
characteristicImp->valueLength());
284284
BLEDeviceManager::instance()->startAdvertising();
285285
}
286+
} else {
287+
// not associated with a service yet
288+
_setValue(value, length);
289+
retVar = true;
286290
}
287291
return retVar;
288292
}

libraries/CurieBLE/src/internal/BLECharacteristicImp.cpp

+8-9
Original file line numberDiff line numberDiff line change
@@ -697,15 +697,7 @@ bool BLECharacteristicImp::write(const unsigned char value[],
697697
}
698698

699699
// Send write request
700-
if (_gatt_chrc.properties | BT_GATT_CHRC_WRITE_WITHOUT_RESP)
701-
{
702-
retval = bt_gatt_write_without_response(conn,
703-
_value_handle,
704-
value,
705-
length,
706-
false);
707-
}
708-
else if (_gatt_chrc.properties | BT_GATT_CHRC_WRITE)
700+
if (_gatt_chrc.properties & BT_GATT_CHRC_WRITE)
709701
{
710702
_gattc_writing = true;
711703
retval = bt_gatt_write(conn,
@@ -718,6 +710,13 @@ bool BLECharacteristicImp::write(const unsigned char value[],
718710
{
719711
delay(2);
720712
}
713+
} else if (_gatt_chrc.properties & BT_GATT_CHRC_WRITE_WITHOUT_RESP)
714+
{
715+
retval = bt_gatt_write_without_response(conn,
716+
_value_handle,
717+
value,
718+
length,
719+
false);
721720
}
722721
bt_conn_unref(conn);
723722
return (0 == retval);

libraries/CurieBLE/src/internal/BLEDescriptorImp.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ bool BLEDescriptorImp::read()
172172
{
173173
int retval = 0;
174174
bt_conn_t* conn = NULL;
175+
bool ret_bool = true;
175176

176177
if (true == BLEUtils::isLocalBLE(_bledev))
177178
{
@@ -209,6 +210,13 @@ bool BLEDescriptorImp::read()
209210
{
210211
_reading = true;
211212
}
213+
214+
// Block the read
215+
while (_reading == true && ret_bool)
216+
{
217+
delay(5);
218+
ret_bool = _bledev.connected();
219+
}
212220
return _reading;
213221
}
214222

@@ -219,6 +227,12 @@ bool BLEDescriptorImp::writeValue(const byte value[],
219227
bool ret = true;
220228
int total_length = length + offset;
221229
int write_len = length;
230+
231+
if (_reading)
232+
{
233+
_reading = false;
234+
}
235+
222236
if (total_length > BLE_MAX_ATTR_DATA_LEN)
223237
{
224238
return false;

libraries/CurieBLE/src/internal/BLEDeviceManager.cpp

+29-7
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ BLEDeviceManager::BLEDeviceManager():
101101

102102
memset(&_available_for_connect_peripheral_adv_data, 0, sizeof(_available_for_connect_peripheral_adv_data));
103103
memset(&_available_for_connect_peripheral_scan_rsp_data, 0, sizeof(_available_for_connect_peripheral_scan_rsp_data));
104-
105-
memset(&_wait_for_connect_peripheral, 0, sizeof(_wait_for_connect_peripheral));
106104

107105
memset(&_service_uuid, 0, sizeof(_service_uuid));
108106
memset(&_service_solicit_uuid, 0, sizeof(_service_solicit_uuid));
@@ -576,6 +574,25 @@ BLEDevice BLEDeviceManager::peripheral()
576574
return temp;
577575
}
578576

577+
void BLEDeviceManager::_clearAdvertiseBuffer()
578+
{
579+
580+
// Clear the previous found ADV
581+
memset(_peer_temp_adv_buffer, 0, sizeof(_peer_temp_adv_buffer));
582+
memset(_peer_temp_adv_data, 0, sizeof(_peer_temp_adv_data));
583+
memset(_peer_temp_adv_data_len, 0, sizeof(_peer_temp_adv_data_len));
584+
memset(_peer_temp_adv_connectable, 0, sizeof(_peer_adv_connectable));
585+
586+
memset(_peer_adv_buffer, 0, sizeof(_peer_adv_buffer));
587+
memset(_peer_adv_mill, 0, sizeof(_peer_adv_mill));
588+
memset(_peer_adv_data, 0, sizeof(_peer_adv_data));
589+
memset(_peer_adv_data_len, 0, sizeof(_peer_adv_data_len));
590+
memset(_peer_scan_rsp_data, 0, sizeof(_peer_scan_rsp_data));
591+
memset(_peer_scan_rsp_data_len, 0, sizeof(_peer_scan_rsp_data_len));
592+
memset(_peer_adv_rssi, 0, sizeof(_peer_adv_rssi));
593+
594+
}
595+
579596
bool BLEDeviceManager::startScanningWithDuplicates()
580597
{
581598
_adv_duplicate_filter_enabled = false;
@@ -901,11 +918,6 @@ int BLEDeviceManager::advertisedServiceUuidCount(const BLEDevice* device) const
901918
return service_cnt;
902919
}
903920

904-
if ((len + 1) > adv_data_len) { // Sid. KW, can't be (adv_data_len < 2)
905-
pr_info(LOG_MODULE_BLE, "AD malformed\n");
906-
return service_cnt;
907-
}
908-
909921
/* Sid, 2/15/2017. Sandeep reported that Apple devices may use
910922
BT_DATA_UUID16_SOME and BT_DATA_UUID128_SOME in addition to ALL.
911923
Practically, these types are same as ALL. */
@@ -1072,6 +1084,11 @@ bool BLEDeviceManager::connect(BLEDevice &device)
10721084
uint64_t timestamp = millis();
10731085
uint64_t timestampcur = timestamp;
10741086
bool ret = true;
1087+
if (_available_for_connect_peripheral_connectable == false)
1088+
{
1089+
return false;
1090+
}
1091+
10751092
bt_addr_le_copy(&_wait_for_connect_peripheral, device.bt_le_address());
10761093
// Buffer the ADV data
10771094
memcpy(_wait_for_connect_peripheral_adv_data, _available_for_connect_peripheral_adv_data, BLE_MAX_ADV_SIZE);
@@ -1252,6 +1269,8 @@ void BLEDeviceManager::handleDisconnectEvent(bt_conn_t *conn, uint8_t reason)
12521269
memset(_peer_peripheral_adv_data[i], 0, BLE_MAX_ADV_SIZE);
12531270
_peer_peripheral_adv_data_len[i] = 0;
12541271
_peer_peripheral_adv_rssi[i] = 0;
1272+
memset(_peer_peripheral_scan_rsp_data[i], 0, BLE_MAX_ADV_SIZE);
1273+
_peer_peripheral_scan_rsp_data_len[i] = 0;
12551274
break;
12561275
}
12571276
}
@@ -1411,7 +1430,10 @@ bool BLEDeviceManager::setAdvertiseBuffer(const bt_addr_le_t* bt_addr,
14111430
{
14121431
max_delta = timestamp_delta;
14131432
if (max_delta > 2000) // expired
1433+
{
14141434
index = i;
1435+
_peer_scan_rsp_data_len[index] = 0; // Invalid the scan response
1436+
}
14151437
}
14161438

14171439
if (bt_addr_le_cmp(temp, bt_addr) == 0)

libraries/CurieBLE/src/internal/BLEDeviceManager.h

+1
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ class BLEDeviceManager
358358
const uint8_t* data,
359359
uint8_t length);
360360
BLE_STATUS_T _advDataInit(void);
361+
void _clearAdvertiseBuffer();
361362
bool advertiseDataProc(uint8_t type,
362363
const uint8_t *dataPtr,
363364
uint8_t data_len);

0 commit comments

Comments
 (0)