Skip to content

Commit 336b1c9

Browse files
committed
mise à jour l'application Findmy
+ décommenter variable_item_list_set_header et lancer au démarrage du système
1 parent 527df31 commit 336b1c9

15 files changed

+175
-55
lines changed

applications/system/application.fam

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ App(
66
"updater_app",
77
"storage_move_to_sd",
88
"js_app",
9+
"findmyflipper_autostart",
910
# "archive",
1011
],
1112
)

applications/system/find_my_flipper/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ Merci à Wr3nch pour l'aide
5656

5757
### Étape 3 : Modifier le fichier JSON
5858
Ouvrez le fichier JSON exporté dans un éditeur de texte et apportez les modifications suivantes :
59+
- **Touches OHS gauche, droite de mon script ```generate_keys.py``` :**
60+
- `symmetricKey` doit être défini sur la `Hashed adv key`.
61+
- `privateKey` doit être remplacé par votre `Private Key`.
62+
- `oldestRelevantSymmetricKey` doit également utiliser la `Hashed adv key`.
63+
- De plus, mettez à jour les attributs suivants sur « true  » :
5964
- **Touches OHS gauche, droite de mon script ```generate_keys.py``` :**
6065
- `symmetricKey` doit être défini sur la `Hashed adv key`.
6166
- `privateKey` doit être remplacé par votre `Private Key`.

applications/system/find_my_flipper/application.fam

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ App(
1010
fap_category="Bluetooth",
1111
fap_author="@MatthewKuKanich",
1212
fap_weburl="https://github.com/MatthewKuKanich/FindMyFlipper",
13-
fap_version="1.0",
13+
fap_version="2.0",
1414
fap_description="BLE FindMy Location Beacon",
1515
)
16+
17+
App(
18+
appid="findmyflipper_autostart",
19+
targets=["f7"],
20+
apptype=FlipperAppType.STARTUP,
21+
entry_point="findmy_startup",
22+
sources=["findmy_startup.c", "findmy_state.c"],
23+
order=1000,
24+
)

applications/system/find_my_flipper/findmy.c

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static FindMy* findmy_app_alloc() {
5353

5454
findmy_main_update_active(app->findmy_main, furi_hal_bt_extra_beacon_is_active());
5555
findmy_main_update_interval(app->findmy_main, app->state.broadcast_interval);
56-
findmy_main_update_type(app->findmy_main, findmy_data_get_type(app->state.data));
56+
findmy_main_update_type(app->findmy_main, app->state.tag_type);
5757

5858
return app;
5959
}
@@ -141,27 +141,19 @@ void findmy_toggle_beacon(FindMy* app) {
141141
findmy_main_update_active(app->findmy_main, furi_hal_bt_extra_beacon_is_active());
142142
}
143143

144-
FindMyType findmy_data_get_type(uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE]) {
145-
if(data[0] == 0x1E && // Length
146-
data[1] == 0xFF && // Manufacturer Specific Data
147-
data[2] == 0x4C && // Company ID (Apple, Inc.)
148-
data[3] == 0x00 && // ...
149-
data[4] == 0x12 && // Type (FindMy)
150-
data[5] == 0x19 // Length
151-
) {
152-
return FindMyTypeApple;
153-
} else {
154-
return FindMyTypeSamsung;
155-
}
144+
void findmy_set_tag_type(FindMy* app, FindMyType type) {
145+
app->state.tag_type = type;
146+
findmy_state_sync_config(&app->state);
147+
findmy_state_save(&app->state);
148+
findmy_main_update_type(app->findmy_main, type);
149+
FURI_LOG_I("TagType2", "Tag Type: %d", type);
156150
}
157151

158-
#if FW_ORIGIN_Official
159152
void furi_hal_bt_reverse_mac_addr(uint8_t mac_addr[GAP_MAC_ADDR_SIZE]) {
160153
uint8_t tmp;
161154
for(size_t i = 0; i < GAP_MAC_ADDR_SIZE / 2; i++) {
162155
tmp = mac_addr[i];
163156
mac_addr[i] = mac_addr[GAP_MAC_ADDR_SIZE - 1 - i];
164157
mac_addr[GAP_MAC_ADDR_SIZE - 1 - i] = tmp;
165158
}
166-
}
167-
#endif
159+
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
#pragma once
22

33
typedef struct FindMy FindMy;
4-
5-
typedef enum FindMyType FindMyType;

applications/system/find_my_flipper/findmy_i.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,7 @@ typedef enum {
4848
FindMyViewPopup,
4949
} FindMyView;
5050

51-
enum FindMyType {
52-
FindMyTypeApple,
53-
FindMyTypeSamsung,
54-
};
55-
5651
void findmy_change_broadcast_interval(FindMy* app, uint8_t value);
5752
void findmy_change_transmit_power(FindMy* app, uint8_t value);
53+
void findmy_set_tag_type(FindMy* app, FindMyType type);
5854
void findmy_toggle_beacon(FindMy* app);
59-
FindMyType findmy_data_get_type(uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE]);

applications/system/find_my_flipper/findmy_state.c

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

applications/system/find_my_flipper/findmy_state.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@
77
#define FINDMY_STATE_DIR EXT_PATH("apps_data/findmy")
88
#define FINDMY_STATE_PATH FINDMY_STATE_DIR "/findmy_state.txt"
99

10+
typedef enum {
11+
FindMyTypeApple,
12+
FindMyTypeSamsung,
13+
FindMyTypeTile,
14+
} FindMyType;
15+
1016
typedef struct {
1117
bool beacon_active;
1218
uint8_t broadcast_interval;
1319
uint8_t transmit_power;
1420

1521
uint8_t mac[EXTRA_BEACON_MAC_ADDR_SIZE];
1622
uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE];
23+
FindMyType tag_type;
1724

1825
// Generated from the other state values
1926
GapExtraBeaconConfig config;
@@ -26,3 +33,5 @@ void findmy_state_apply(FindMyState* state);
2633
void findmy_state_sync_config(FindMyState* state);
2734

2835
void findmy_state_save(FindMyState* state);
36+
37+
uint8_t findmy_state_data_size(FindMyType type);

applications/system/find_my_flipper/scenes/findmy_scene_config.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
enum VarItemListIndex {
44
VarItemListIndexBroadcastInterval,
55
VarItemListIndexTransmitPower,
6-
VarItemListIndexImportTagFromFile,
7-
VarItemListIndexRegisterTagManually,
6+
VarItemListIndexRegisterTag,
87
VarItemListIndexAbout,
98
};
109

@@ -58,9 +57,7 @@ void findmy_scene_config_on_enter(void* context) {
5857
snprintf(power_str, sizeof(power_str), "%ddBm", app->state.transmit_power);
5958
variable_item_set_current_value_text(item, power_str);
6059

61-
item = variable_item_list_add(var_item_list, "Importer un fichier Tag", 0, NULL, NULL);
62-
63-
item = variable_item_list_add(var_item_list, "Enregistrer Tag manuellement", 0, NULL, NULL);
60+
item = variable_item_list_add(var_item_list, "Enregistrer Tag", 0, NULL, NULL);
6461

6562
variable_item_list_set_enter_callback(var_item_list, findmy_scene_config_callback, app);
6663

@@ -78,11 +75,8 @@ bool findmy_scene_config_on_event(void* context, SceneManagerEvent event) {
7875
scene_manager_set_scene_state(app->scene_manager, FindMySceneConfig, event.event);
7976
consumed = true;
8077
switch(event.event) {
81-
case VarItemListIndexImportTagFromFile:
82-
scene_manager_next_scene(app->scene_manager, FindMySceneConfigImport);
83-
break;
84-
case VarItemListIndexRegisterTagManually:
85-
scene_manager_next_scene(app->scene_manager, FindMySceneConfigMac);
78+
case VarItemListIndexRegisterTag:
79+
scene_manager_next_scene(app->scene_manager, FindMySceneConfigTagtype);
8680
break;
8781
case VarItemListIndexAbout:
8882
break;

applications/system/find_my_flipper/scenes/findmy_scene_config_import.c

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
enum VarItemListIndex {
44
VarItemListIndexNrfConnect,
55
VarItemListIndexOpenHaystack,
6+
VarItemListIndexRegisterTagManually,
67
};
78

89
static const char* parse_nrf_connect(FindMy* app, const char* path) {
@@ -42,10 +43,15 @@ static const char* parse_nrf_connect(FindMy* app, const char* path) {
4243
furi_string_trim(line);
4344

4445
error = "Taille payload incorrecte";
45-
uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE];
46-
if(furi_string_size(line) != sizeof(data) * 2) break;
46+
size_t line_size = furi_string_size(line);
47+
uint8_t data_size = findmy_state_data_size(app->state.tag_type);
48+
FURI_LOG_I("ImportPayload", "Line Size: %d", line_size);
49+
FURI_LOG_I("ImportPayload", "Data Size: %d", data_size * 2);
50+
if(line_size != data_size * 2) break;
51+
// Initialize full data to 0's, then fill only first data_size bytes
52+
uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE] = {0};
4753
error = NULL;
48-
for(size_t i = 0; i < sizeof(data); i++) {
54+
for(size_t i = 0; i < data_size; i++) {
4955
char a = furi_string_get_char(line, i * 2);
5056
char b = furi_string_get_char(line, i * 2 + 1);
5157
if((a < 'A' && a > 'F') || (a < '0' && a > '9') || (b < 'A' && b > 'F') ||
@@ -145,9 +151,13 @@ void findmy_scene_config_import_on_enter(void* context) {
145151
VariableItemList* var_item_list = app->var_item_list;
146152
VariableItem* item;
147153

148-
item = variable_item_list_add(var_item_list, "nRF Connect .txt", 0, NULL, NULL);
154+
variable_item_list_set_header(var_item_list, "Choose file type");
149155

150-
item = variable_item_list_add(var_item_list, "OpenHaystack .keys", 0, NULL, NULL);
156+
item = variable_item_list_add(var_item_list, "nRF Connect (.txt)", 0, NULL, NULL);
157+
158+
item = variable_item_list_add(var_item_list, "OpenHaystack (.keys)", 0, NULL, NULL);
159+
160+
item = variable_item_list_add(var_item_list, "Register Tag Manually", 0, NULL, NULL);
151161

152162
// This scene acts more like a submenu than a var item list tbh
153163
UNUSED(item);
@@ -176,6 +186,9 @@ bool findmy_scene_config_import_on_event(void* context, SceneManagerEvent event)
176186
case VarItemListIndexOpenHaystack:
177187
extension = ".keys";
178188
break;
189+
case VarItemListIndexRegisterTagManually:
190+
scene_manager_next_scene(app->scene_manager, FindMySceneConfigMac);
191+
break;
179192
default:
180193
break;
181194
}

0 commit comments

Comments
 (0)