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