@@ -29,9 +29,18 @@ bool findmy_state_load(FindMyState* out_state) {
2929 if (!flipper_format_read_uint32 (file , "transmit_power" , & tmp , 1 )) break ;
3030 state .transmit_power = tmp ;
3131
32+ if (!flipper_format_read_uint32 (file , "tag_type" , & tmp , 1 )) {
33+ // Support migrating from old config
34+ tmp = FindMyTypeApple ;
35+ flipper_format_rewind (file );
36+ }
37+ state .tag_type = tmp ;
38+
3239 if (!flipper_format_read_hex (file , "mac" , state .mac , sizeof (state .mac ))) break ;
3340
34- if (!flipper_format_read_hex (file , "data" , state .data , sizeof (state .data ))) break ;
41+ if (!flipper_format_read_hex (
42+ file , "data" , state .data , findmy_state_data_size (state .tag_type )))
43+ break ;
3544
3645 loaded_from_file = true;
3746 } while (0 );
@@ -45,6 +54,8 @@ bool findmy_state_load(FindMyState* out_state) {
4554 state .broadcast_interval = 5 ;
4655 state .transmit_power = 6 ;
4756
57+ state .tag_type = FindMyTypeApple ;
58+
4859 // Set default mac
4960 uint8_t default_mac [EXTRA_BEACON_MAC_ADDR_SIZE ] = {0x66 , 0x55 , 0x44 , 0x33 , 0x22 , 0x11 };
5061 memcpy (state .mac , default_mac , sizeof (state .mac ));
@@ -88,7 +99,8 @@ void findmy_state_apply(FindMyState* state) {
8899
89100 furi_check (furi_hal_bt_extra_beacon_set_config (& state -> config ));
90101
91- furi_check (furi_hal_bt_extra_beacon_set_data (state -> data , sizeof (state -> data )));
102+ furi_check (
103+ furi_hal_bt_extra_beacon_set_data (state -> data , findmy_state_data_size (state -> tag_type )));
92104
93105 if (state -> beacon_active ) {
94106 furi_check (furi_hal_bt_extra_beacon_start ());
@@ -120,11 +132,28 @@ void findmy_state_save(FindMyState* state) {
120132 tmp = state -> transmit_power ;
121133 if (!flipper_format_write_uint32 (file , "transmit_power" , & tmp , 1 )) break ;
122134
135+ tmp = state -> tag_type ;
136+ if (!flipper_format_write_uint32 (file , "tag_type" , & tmp , 1 )) break ;
137+
123138 if (!flipper_format_write_hex (file , "mac" , state -> mac , sizeof (state -> mac ))) break ;
124139
125- if (!flipper_format_write_hex (file , "data" , state -> data , sizeof (state -> data ))) break ;
140+ if (!flipper_format_write_hex (
141+ file , "data" , state -> data , findmy_state_data_size (state -> tag_type )))
142+ break ;
126143 } while (0 );
127144
128145 flipper_format_free (file );
129146 furi_record_close (RECORD_STORAGE );
130147}
148+
149+ uint8_t findmy_state_data_size (FindMyType type ) {
150+ switch (type ) {
151+ case FindMyTypeApple :
152+ case FindMyTypeSamsung :
153+ return 31 ;
154+ case FindMyTypeTile :
155+ return 21 ;
156+ default :
157+ return 0 ;
158+ }
159+ }
0 commit comments