@@ -63,15 +63,21 @@ static void get_fname (char* fname, uint8_t role, uint16_t ediv)
63
63
sprintf (fname, (role == BLE_GAP_ROLE_PERIPH) ? BOND_FNAME_PRPH : BOND_FNAME_CNTR, ediv);
64
64
}
65
65
66
- static bool skip_data_field (File* f )
66
+ static bool bdata_skip_field (File* file )
67
67
{
68
- int len = f ->read ();
68
+ int len = file ->read ();
69
69
VERIFY (len > 0 );
70
70
71
- f ->seek (len + f ->position ());
71
+ file ->seek (len + file ->position ());
72
72
return true ;
73
73
}
74
74
75
+ static void bdata_write (File* file, void const * buffer, uint16_t bufsize)
76
+ {
77
+ file->write ( (uint8_t ) bufsize );
78
+ file->write ( (uint8_t const *) buffer, bufsize);
79
+ }
80
+
75
81
void bond_init (void )
76
82
{
77
83
InternalFS.begin ();
@@ -98,8 +104,7 @@ static void bond_save_keys_dfr (uint8_t role, uint16_t conn_hdl, bond_keys_t* bk
98
104
VERIFY (file,);
99
105
100
106
// ------------- save keys -------------//
101
- file.write (sizeof (bond_keys_t ));
102
- file.write ((uint8_t *) bkeys, sizeof (bond_keys_t ));
107
+ bdata_write (&file, bkeys, sizeof (bond_keys_t ));
103
108
104
109
// ------------- save device name -------------//
105
110
char devname[CFG_MAX_DEVNAME_LEN] = { 0 };
@@ -112,9 +117,7 @@ static void bond_save_keys_dfr (uint8_t role, uint16_t conn_hdl, bond_keys_t* bk
112
117
sprintf (devname, " %02X:%02X:%02X:%02X:%02X:%02X" , mac[5 ], mac[4 ], mac[3 ], mac[2 ], mac[1 ], mac[0 ]);
113
118
}
114
119
115
- uint8_t const namelen = strlen (devname);
116
- file.write (namelen + 1 );
117
- file.write ((uint8_t *) devname, namelen + 1 );
120
+ bdata_write (&file, devname, strlen (devname)+1 ); // save also null char
118
121
119
122
BOND_LOG (" Saved keys for \" %s\" to file %s ( %d bytes )" , devname, filename, file.size ());
120
123
@@ -161,10 +164,9 @@ static void bond_save_cccd_dfr (uint8_t role, uint16_t conn_hdl, uint16_t ediv)
161
164
{
162
165
uint16_t len=0 ;
163
166
sd_ble_gatts_sys_attr_get (conn_hdl, NULL , &len, SVC_CONTEXT_FLAG);
167
+ VERIFY (len, );
164
168
165
169
uint8_t sys_attr[len];
166
- VERIFY ( sys_attr, );
167
-
168
170
VERIFY_STATUS (sd_ble_gatts_sys_attr_get (conn_hdl, sys_attr, &len, SVC_CONTEXT_FLAG),);
169
171
170
172
char filename[BOND_FNAME_LEN];
@@ -173,12 +175,11 @@ static void bond_save_cccd_dfr (uint8_t role, uint16_t conn_hdl, uint16_t ediv)
173
175
File file (filename, FILE_WRITE, InternalFS);
174
176
VERIFY (file,);
175
177
176
- file.seek (0 );
177
- file. seek ( file. read () + file. position ()); // skip key
178
- file. seek ( file. read () + file. position ()); // skip name
178
+ file.seek (0 ); // write mode start at the end, seek to beginning
179
+ bdata_skip_field (& file); // skip key
180
+ bdata_skip_field (& file); // skip name
179
181
180
- file.write ((uint8_t ) len);
181
- file.write (sys_attr, len);
182
+ bdata_write (&file, sys_attr, len);
182
183
183
184
BOND_LOG (" Saved CCCD setting to file %s ( offset = %d, len = %d bytes )" , filename, file.size () - (len + 1 ), len);
184
185
@@ -204,14 +205,12 @@ bool bond_load_cccd(uint8_t role, uint16_t cond_hdl, uint16_t ediv)
204
205
char filename[BOND_FNAME_LEN];
205
206
get_fname (filename, role, ediv);
206
207
207
- PRINT_STR (filename);
208
-
209
208
File file (filename, FILE_READ, InternalFS);
210
209
211
210
if ( file )
212
211
{
213
- file. seek ( file. read () + file. position ()); // skip key
214
- file. seek ( file. read () + file. position ()); // skip name
212
+ bdata_skip_field (& file); // skip key
213
+ bdata_skip_field (& file); // skip name
215
214
216
215
int len = file.read ();
217
216
if ( len > 0 )
@@ -249,7 +248,7 @@ void bond_print_list(uint8_t role)
249
248
250
249
while ( (file = dir.openNextFile (FILE_READ)) )
251
250
{
252
- if ( skip_data_field (&file) ) // skip key
251
+ if ( !file. isDirectory () && bdata_skip_field (&file) ) // skip key
253
252
{
254
253
int len = file.read ();
255
254
if ( len > 0 )
@@ -260,6 +259,7 @@ void bond_print_list(uint8_t role)
260
259
cprintf (" %s : %s (%d bytes)\n " , file.name (), devname, file.size ());
261
260
}
262
261
}
262
+
263
263
file.close ();
264
264
}
265
265
0 commit comments