Skip to content

Commit b194a62

Browse files
committed
add support for bonded sharing to DFU, could force bonded only for security reason for DFU upgrade
1 parent c75998b commit b194a62

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

libraries/Bluefruit52Lib/src/bluefruit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ class AdafruitBluefruit
176176
ble_gap_id_key_t peer_id;
177177

178178
// System Attr (aka CCCDs)
179-
uint8_t* sys_attr;
180179
uint16_t sys_attr_len;
180+
uint8_t* sys_attr;
181181
}_bond_data;
182182
private:
183183

libraries/Bluefruit52Lib/src/services/BLEDfu.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -116,18 +116,35 @@ static void bledfu_control_wr_authorize_cb(BLECharacteristic& chr, ble_gatts_evt
116116
uint16_t crc16;
117117
}peer_data_t;
118118

119-
// Peer data address is defined in bootloader linker @0x20007F80
119+
/* Save Peer data
120+
* Peer data address is defined in bootloader linker @0x20007F80
121+
* - If bonded : save Security information
122+
* - Otherwise : save Address for direct advertising
123+
*
124+
* TODO may force bonded only for security reason
125+
*/
120126
peer_data_t* peer_data = (peer_data_t*) (0x20007F80UL);
121127
varclr(peer_data);
122128

123129
uint16_t sysattr_len = sizeof(peer_data->sys_attr);
124130
sd_ble_gatts_sys_attr_get(Bluefruit.connHandle(), peer_data->sys_attr, &sysattr_len, BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS);
125131

126-
// Received Start DFU command, init the reboot sequence into DFU OTA mode
132+
if ( !Bluefruit.connBonded() )
133+
{
134+
peer_data->addr = Bluefruit.peerAddr();
135+
}else
136+
{
137+
peer_data->addr = Bluefruit._bond_data.peer_id.id_addr_info;
138+
peer_data->irk = Bluefruit._bond_data.peer_id.id_info;
139+
140+
peer_data->enc_key = Bluefruit._bond_data.own_enc;
141+
}
142+
peer_data->crc16 = crc16((uint8_t*) peer_data, offsetof(peer_data_t, crc16));
143+
144+
// Initiate DFU Sequence and reboot into DFU OTA mode
127145
Bluefruit.disconnect();
128146
Bluefruit.stopAdvertising();
129147

130-
131148
// Set GPReset to DFU OTA
132149
enum { DFU_OTA_MAGIC = 0xB1 };
133150
sd_power_gpregret_clr(0xFF);
@@ -146,22 +163,6 @@ static void bledfu_control_wr_authorize_cb(BLECharacteristic& chr, ble_gatts_evt
146163

147164
VERIFY_STATUS( sd_softdevice_vector_table_base_set(NRF_UICR->NRFFW[0]), RETURN_VOID);
148165

149-
// Save Peer data
150-
// - If bonded : save Security information
151-
// - Otherwise : save Address for direct advertising
152-
// if ( !Bluefruit.connBonded() )
153-
{
154-
peer_data->addr = Bluefruit.peerAddr();
155-
peer_data->crc16 = crc16((uint8_t*) peer_data, offsetof(peer_data_t, crc16));
156-
// }else
157-
// {
158-
// peer_data->addr = Bluefruit._bond_data.peer_id.id_addr_info;
159-
// peer_data->irk = Bluefruit._bond_data.peer_id.id_info;
160-
//
161-
// peer_data->enc_key = Bluefruit._bond_data.own_enc;
162-
// peer_data->
163-
}
164-
165166
__set_CONTROL(0); // switch to MSP, required if using FreeRTOS
166167
bootloader_util_app_start(NRF_UICR->NRFFW[0]);
167168
}

0 commit comments

Comments
 (0)