Skip to content

Commit 9b98911

Browse files
committed
upd findmyflipper
1 parent 2b9d505 commit 9b98911

12 files changed

+94
-19
lines changed

base_pack/find_my_flipper/application.fam

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ App(
1010
fap_category="Bluetooth",
1111
fap_author="@MatthewKuKanich",
1212
fap_weburl="https://github.com/MatthewKuKanich/FindMyFlipper",
13-
fap_version="2.0",
13+
fap_version="3.0",
1414
fap_description="BLE FindMy Location Beacon",
1515
)

base_pack/find_my_flipper/findmy.c

+9
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ 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_toggle_mac(app->findmy_main, app->state.show_mac);
57+
findmy_main_update_mac(app->findmy_main, app->state.mac);
5658
findmy_main_update_type(app->findmy_main, app->state.tag_type);
5759

5860
return app;
@@ -129,6 +131,13 @@ void findmy_change_transmit_power(FindMy* app, uint8_t value) {
129131
}
130132
}
131133

134+
void findmy_toggle_show_mac(FindMy* app, bool show_mac) {
135+
app->state.show_mac = show_mac;
136+
findmy_state_sync_config(&app->state);
137+
findmy_state_save(&app->state);
138+
findmy_main_toggle_mac(app->findmy_main, app->state.show_mac);
139+
}
140+
132141
void findmy_toggle_beacon(FindMy* app) {
133142
app->state.beacon_active = !app->state.beacon_active;
134143
findmy_state_save(&app->state);

base_pack/find_my_flipper/findmy_i.h

+1
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,6 @@ typedef enum {
5050

5151
void findmy_change_broadcast_interval(FindMy* app, uint8_t value);
5252
void findmy_change_transmit_power(FindMy* app, uint8_t value);
53+
void findmy_toggle_show_mac(FindMy* app, bool show_mac);
5354
void findmy_set_tag_type(FindMy* app, FindMyType type);
5455
void findmy_toggle_beacon(FindMy* app);

base_pack/find_my_flipper/findmy_state.c

+9-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ 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_bool(file, "show_mac", &state.show_mac, 1)) {
33+
// Support migrating from old config
34+
state.show_mac = false;
35+
flipper_format_rewind(file);
36+
}
37+
3238
if(!flipper_format_read_uint32(file, "tag_type", &tmp, 1)) {
3339
// Support migrating from old config
3440
tmp = FindMyTypeApple;
@@ -53,7 +59,7 @@ bool findmy_state_load(FindMyState* out_state) {
5359
state.beacon_active = false;
5460
state.broadcast_interval = 5;
5561
state.transmit_power = 6;
56-
62+
state.show_mac = false;
5763
state.tag_type = FindMyTypeApple;
5864

5965
// Set default mac
@@ -135,6 +141,8 @@ void findmy_state_save(FindMyState* state) {
135141
tmp = state->tag_type;
136142
if(!flipper_format_write_uint32(file, "tag_type", &tmp, 1)) break;
137143

144+
if(!flipper_format_write_bool(file, "show_mac", &state->show_mac, 1)) break;
145+
138146
if(!flipper_format_write_hex(file, "mac", state->mac, sizeof(state->mac))) break;
139147

140148
if(!flipper_format_write_hex(

base_pack/find_my_flipper/findmy_state.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ typedef struct {
1717
bool beacon_active;
1818
uint8_t broadcast_interval;
1919
uint8_t transmit_power;
20-
20+
bool show_mac;
2121
uint8_t mac[EXTRA_BEACON_MAC_ADDR_SIZE];
2222
uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE];
2323
FindMyType tag_type;

base_pack/find_my_flipper/scenes/findmy_scene_config.c

+13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ enum VarItemListIndex {
44
VarItemListIndexBroadcastInterval,
55
VarItemListIndexTransmitPower,
66
VarItemListIndexRegisterTag,
7+
VarItemListIndexShowMac,
78
VarItemListIndexAbout,
89
};
910

@@ -27,6 +28,14 @@ void findmy_scene_config_transmit_power_changed(VariableItem* item) {
2728
variable_item_set_current_value_index(item, app->state.transmit_power);
2829
}
2930

31+
void findmy_scene_config_show_mac(VariableItem* item) {
32+
FindMy* app = variable_item_get_context(item);
33+
uint8_t index = variable_item_get_current_value_index(item);
34+
findmy_toggle_show_mac(app, index);
35+
variable_item_set_current_value_text(item, app->state.show_mac ? "Yes" : "No");
36+
variable_item_set_current_value_index(item, app->state.show_mac);
37+
}
38+
3039
void findmy_scene_config_callback(void* context, uint32_t index) {
3140
furi_assert(context);
3241
FindMy* app = context;
@@ -59,6 +68,10 @@ void findmy_scene_config_on_enter(void* context) {
5968

6069
item = variable_item_list_add(var_item_list, "Register Tag", 0, NULL, NULL);
6170

71+
item = variable_item_list_add(var_item_list, "Show MAC", 2, findmy_scene_config_show_mac, app);
72+
variable_item_set_current_value_index(item, app->state.show_mac);
73+
variable_item_set_current_value_text(item, app->state.show_mac ? "Yes" : "No");
74+
6275
item = variable_item_list_add(
6376
var_item_list,
6477
"Matthew KuKanich, Thanks to Chapoly1305, WillyJL, OpenHaystack, Testers",

base_pack/find_my_flipper/scenes/findmy_scene_config_mac.c

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ bool findmy_scene_config_mac_on_event(void* context, SceneManagerEvent event) {
4949
if(app->state.beacon_active) {
5050
furi_check(furi_hal_bt_extra_beacon_start());
5151
}
52+
findmy_main_update_mac(app->findmy_main, app->state.mac);
5253
scene_manager_next_scene(app->scene_manager, FindMySceneConfigPacket);
5354
break;
5455
default:
2.2 KB
Loading
2.22 KB
Loading
2 KB
Loading

base_pack/find_my_flipper/views/findmy_main.c

+57-16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ struct FindMyMain {
99

1010
typedef struct {
1111
bool active;
12+
bool show_mac;
1213
uint8_t interval;
14+
uint8_t mac[6];
1315
FindMyType type;
1416
} FindMyMainModel;
1517

@@ -20,20 +22,7 @@ static void findmy_main_draw_callback(Canvas* canvas, void* _model) {
2022
canvas_set_font(canvas, FontPrimary);
2123

2224
canvas_draw_str(canvas, 4, 11, "FindMy Flipper");
23-
canvas_set_font(canvas, FontSecondary);
24-
if(model->active) {
25-
canvas_draw_str(canvas, 4, 49, "Broadcast Active");
26-
canvas_draw_icon(canvas, 78, 42, &I_Ok_btn_9x9);
27-
} else {
28-
canvas_draw_str(canvas, 4, 49, "Broadcast Inactive");
29-
}
30-
canvas_set_font(canvas, FontSecondary);
31-
canvas_draw_str(canvas, 4, 21, "Press <- to run in background");
32-
canvas_set_font(canvas, FontSecondary);
33-
char interval_str[20];
34-
snprintf(interval_str, sizeof(interval_str), "Ping Interval: %ds", model->interval);
35-
canvas_draw_str(canvas, 4, 62, interval_str);
36-
canvas_set_font(canvas, FontPrimary);
25+
3726
const char* network_text = "";
3827
switch(model->type) {
3928
case FindMyTypeApple:
@@ -48,8 +37,42 @@ static void findmy_main_draw_callback(Canvas* canvas, void* _model) {
4837
default:
4938
break;
5039
}
51-
canvas_draw_str(canvas, 4, 32, network_text);
52-
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 24, &I_Lock_7x8);
40+
41+
if(model->show_mac == false) {
42+
canvas_set_font(canvas, FontPrimary);
43+
canvas_draw_str(canvas, 4, 31, network_text);
44+
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 24, &I_Lock_7x8);
45+
} else if(model->show_mac == true) {
46+
canvas_set_font(canvas, FontSecondary);
47+
char mac_str[23];
48+
snprintf(
49+
mac_str,
50+
sizeof(mac_str),
51+
"MAC: %02X:%02X:%02X:%02X:%02X:%02X",
52+
model->mac[0],
53+
model->mac[1],
54+
model->mac[2],
55+
model->mac[3],
56+
model->mac[4],
57+
model->mac[5]);
58+
canvas_draw_str(canvas, 4, 40, mac_str);
59+
canvas_draw_str(canvas, 4, 30, network_text);
60+
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 23, &I_Lock_7x8);
61+
}
62+
canvas_set_font(canvas, FontSecondary);
63+
if(model->active) {
64+
canvas_draw_str(canvas, 4, 49, "Broadcast Active");
65+
canvas_draw_icon(canvas, 78, 41, &I_Ok_btn_9x9);
66+
} else {
67+
canvas_draw_str(canvas, 4, 49, "Broadcast Inactive");
68+
}
69+
canvas_set_font(canvas, FontSecondary);
70+
canvas_draw_str(canvas, 4, 21, "Press <- to run in background");
71+
canvas_set_font(canvas, FontSecondary);
72+
char interval_str[20];
73+
snprintf(interval_str, sizeof(interval_str), "Ping Interval: %ds", model->interval);
74+
canvas_draw_str(canvas, 4, 62, interval_str);
75+
5376
canvas_set_font(canvas, FontSecondary);
5477
canvas_draw_str(canvas, 100, 61, "Config");
5578
canvas_draw_line(canvas, 100, 51, 127, 51);
@@ -107,6 +130,8 @@ FindMyMain* findmy_main_alloc(FindMy* app) {
107130
{
108131
model->active = app->state.beacon_active;
109132
model->interval = app->state.broadcast_interval;
133+
model->show_mac = app->state.show_mac;
134+
memcpy(model->mac, app->state.mac, sizeof(model->mac));
110135
model->type = app->state.tag_type;
111136
},
112137
false);
@@ -141,6 +166,22 @@ void findmy_main_update_active(FindMyMain* findmy_main, bool active) {
141166
findmy_main->view, FindMyMainModel * model, { model->active = active; }, true);
142167
}
143168

169+
void findmy_main_toggle_mac(FindMyMain* findmy_main, bool show_mac) {
170+
furi_assert(findmy_main);
171+
with_view_model(
172+
findmy_main->view, FindMyMainModel * model, { model->show_mac = show_mac; }, true);
173+
}
174+
175+
void findmy_main_update_mac(FindMyMain* findmy_main, uint8_t* mac) {
176+
with_view_model(
177+
findmy_main->view,
178+
FindMyMainModel * model,
179+
{
180+
memcpy(model->mac, mac, sizeof(model->mac));
181+
furi_hal_bt_reverse_mac_addr(model->mac);
182+
},
183+
true);
184+
}
144185
void findmy_main_update_interval(FindMyMain* findmy_main, uint8_t interval) {
145186
furi_assert(findmy_main);
146187
with_view_model(

base_pack/find_my_flipper/views/findmy_main.h

+2
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ void findmy_main_set_callback(FindMyMain* findmy_main, FindMyMainCallback callba
2727
// To redraw when info changes
2828
void findmy_main_update_active(FindMyMain* findmy_main, bool active);
2929
void findmy_main_update_interval(FindMyMain* findmy_main, uint8_t interval);
30+
void findmy_main_toggle_mac(FindMyMain* findmy_main, bool show_mac);
31+
void findmy_main_update_mac(FindMyMain* findmy_main, uint8_t* mac);
3032
void findmy_main_update_type(FindMyMain* findmy_main, FindMyType type);

0 commit comments

Comments
 (0)