@@ -116,18 +116,35 @@ static void bledfu_control_wr_authorize_cb(BLECharacteristic& chr, ble_gatts_evt
116
116
uint16_t crc16;
117
117
}peer_data_t ;
118
118
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
+ */
120
126
peer_data_t * peer_data = (peer_data_t *) (0x20007F80UL );
121
127
varclr (peer_data);
122
128
123
129
uint16_t sysattr_len = sizeof (peer_data->sys_attr );
124
130
sd_ble_gatts_sys_attr_get (Bluefruit.connHandle (), peer_data->sys_attr , &sysattr_len, BLE_GATTS_SYS_ATTR_FLAG_SYS_SRVCS);
125
131
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
127
145
Bluefruit.disconnect ();
128
146
Bluefruit.stopAdvertising ();
129
147
130
-
131
148
// Set GPReset to DFU OTA
132
149
enum { DFU_OTA_MAGIC = 0xB1 };
133
150
sd_power_gpregret_clr (0xFF );
@@ -146,22 +163,6 @@ static void bledfu_control_wr_authorize_cb(BLECharacteristic& chr, ble_gatts_evt
146
163
147
164
VERIFY_STATUS ( sd_softdevice_vector_table_base_set (NRF_UICR->NRFFW [0 ]), RETURN_VOID);
148
165
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
-
165
166
__set_CONTROL (0 ); // switch to MSP, required if using FreeRTOS
166
167
bootloader_util_app_start (NRF_UICR->NRFFW [0 ]);
167
168
}
0 commit comments