mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-13 16:48:35 -07:00
Add Ability to Display MAC
This commit is contained in:
@@ -53,6 +53,8 @@ static FindMy* findmy_app_alloc() {
|
||||
|
||||
findmy_main_update_active(app->findmy_main, furi_hal_bt_extra_beacon_is_active());
|
||||
findmy_main_update_interval(app->findmy_main, app->state.broadcast_interval);
|
||||
findmy_main_toggle_mac(app->findmy_main, app->state.show_mac);
|
||||
findmy_main_update_mac(app->findmy_main, app->state.mac);
|
||||
findmy_main_update_type(app->findmy_main, app->state.tag_type);
|
||||
|
||||
return app;
|
||||
@@ -129,6 +131,13 @@ void findmy_change_transmit_power(FindMy* app, uint8_t value) {
|
||||
}
|
||||
}
|
||||
|
||||
void findmy_toggle_show_mac(FindMy* app, bool show_mac) {
|
||||
app->state.show_mac = show_mac;
|
||||
findmy_state_sync_config(&app->state);
|
||||
findmy_state_save(&app->state);
|
||||
findmy_main_toggle_mac(app->findmy_main, app->state.show_mac);
|
||||
}
|
||||
|
||||
void findmy_toggle_beacon(FindMy* app) {
|
||||
app->state.beacon_active = !app->state.beacon_active;
|
||||
findmy_state_save(&app->state);
|
||||
|
||||
@@ -51,5 +51,6 @@ typedef enum {
|
||||
|
||||
void findmy_change_broadcast_interval(FindMy* app, uint8_t value);
|
||||
void findmy_change_transmit_power(FindMy* app, uint8_t value);
|
||||
void findmy_toggle_show_mac(FindMy* app, bool show_mac);
|
||||
void findmy_set_tag_type(FindMy* app, FindMyType type);
|
||||
void findmy_toggle_beacon(FindMy* app);
|
||||
|
||||
@@ -29,6 +29,8 @@ bool findmy_state_load(FindMyState* out_state) {
|
||||
if(!flipper_format_read_uint32(file, "transmit_power", &tmp, 1)) break;
|
||||
state.transmit_power = tmp;
|
||||
|
||||
if(!flipper_format_read_bool(file, "show_mac", &state.show_mac, 1)) break;
|
||||
|
||||
if(!flipper_format_read_uint32(file, "tag_type", &tmp, 1)) {
|
||||
// Support migrating from old config
|
||||
tmp = FindMyTypeApple;
|
||||
@@ -53,7 +55,7 @@ bool findmy_state_load(FindMyState* out_state) {
|
||||
state.beacon_active = false;
|
||||
state.broadcast_interval = 5;
|
||||
state.transmit_power = 6;
|
||||
|
||||
state.show_mac = false;
|
||||
state.tag_type = FindMyTypeApple;
|
||||
|
||||
// Set default mac
|
||||
@@ -102,6 +104,7 @@ void findmy_state_apply(FindMyState* state) {
|
||||
furi_check(
|
||||
furi_hal_bt_extra_beacon_set_data(state->data, findmy_state_data_size(state->tag_type)));
|
||||
|
||||
|
||||
if(state->beacon_active) {
|
||||
furi_check(furi_hal_bt_extra_beacon_start());
|
||||
}
|
||||
@@ -135,6 +138,8 @@ void findmy_state_save(FindMyState* state) {
|
||||
tmp = state->tag_type;
|
||||
if(!flipper_format_write_uint32(file, "tag_type", &tmp, 1)) break;
|
||||
|
||||
if(!flipper_format_write_bool(file, "show_mac", &state->show_mac, 1)) break;
|
||||
|
||||
if(!flipper_format_write_hex(file, "mac", state->mac, sizeof(state->mac))) break;
|
||||
|
||||
if(!flipper_format_write_hex(
|
||||
|
||||
@@ -17,7 +17,7 @@ typedef struct {
|
||||
bool beacon_active;
|
||||
uint8_t broadcast_interval;
|
||||
uint8_t transmit_power;
|
||||
|
||||
bool show_mac;
|
||||
uint8_t mac[EXTRA_BEACON_MAC_ADDR_SIZE];
|
||||
uint8_t data[EXTRA_BEACON_MAX_DATA_SIZE];
|
||||
FindMyType tag_type;
|
||||
|
||||
@@ -4,9 +4,11 @@ enum VarItemListIndex {
|
||||
VarItemListIndexBroadcastInterval,
|
||||
VarItemListIndexTransmitPower,
|
||||
VarItemListIndexRegisterTag,
|
||||
VarItemListIndexShowMac,
|
||||
VarItemListIndexAbout,
|
||||
};
|
||||
|
||||
|
||||
void findmy_scene_config_broadcast_interval_changed(VariableItem* item) {
|
||||
FindMy* app = variable_item_get_context(item);
|
||||
uint8_t index = variable_item_get_current_value_index(item);
|
||||
@@ -27,6 +29,18 @@ void findmy_scene_config_transmit_power_changed(VariableItem* item) {
|
||||
variable_item_set_current_value_index(item, app->state.transmit_power);
|
||||
}
|
||||
|
||||
void findmy_scene_config_show_mac(VariableItem* item) {
|
||||
FindMy* app = variable_item_get_context(item);
|
||||
uint8_t index = variable_item_get_current_value_index(item);
|
||||
findmy_toggle_show_mac(app, index);
|
||||
if (app->state.show_mac == true) {
|
||||
variable_item_set_current_value_text(item, "Yes");
|
||||
} else {
|
||||
variable_item_set_current_value_text(item, "No");
|
||||
}
|
||||
variable_item_set_current_value_index(item, app->state.show_mac);
|
||||
}
|
||||
|
||||
void findmy_scene_config_callback(void* context, uint32_t index) {
|
||||
furi_assert(context);
|
||||
FindMy* app = context;
|
||||
@@ -59,6 +73,14 @@ void findmy_scene_config_on_enter(void* context) {
|
||||
|
||||
item = variable_item_list_add(var_item_list, "Register Tag", 0, NULL, NULL);
|
||||
|
||||
item = variable_item_list_add(var_item_list, "Show MAC", 2, findmy_scene_config_show_mac, app);
|
||||
variable_item_set_current_value_index(item, app->state.show_mac);
|
||||
if(app->state.show_mac == true)
|
||||
variable_item_set_current_value_text(item, "Yes");
|
||||
else
|
||||
variable_item_set_current_value_text(item, "No");
|
||||
|
||||
|
||||
item = variable_item_list_add(
|
||||
var_item_list,
|
||||
"Matthew KuKanich, Thanks to Chapoly1305, WillyJL, OpenHaystack, Testers",
|
||||
|
||||
@@ -49,6 +49,7 @@ bool findmy_scene_config_mac_on_event(void* context, SceneManagerEvent event) {
|
||||
if(app->state.beacon_active) {
|
||||
furi_check(furi_hal_bt_extra_beacon_start());
|
||||
}
|
||||
findmy_main_update_mac(app->findmy_main, app->state.mac);
|
||||
scene_manager_next_scene(app->scene_manager, FindMySceneConfigPacket);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -9,7 +9,9 @@ struct FindMyMain {
|
||||
|
||||
typedef struct {
|
||||
bool active;
|
||||
bool show_mac;
|
||||
uint8_t interval;
|
||||
uint8_t mac[6];
|
||||
FindMyType type;
|
||||
} FindMyMainModel;
|
||||
|
||||
@@ -20,20 +22,7 @@ static void findmy_main_draw_callback(Canvas* canvas, void* _model) {
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
|
||||
canvas_draw_str(canvas, 4, 11, "FindMy Flipper");
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
if(model->active) {
|
||||
canvas_draw_str(canvas, 4, 49, "Broadcast Active");
|
||||
canvas_draw_icon(canvas, 78, 42, &I_Ok_btn_9x9);
|
||||
} else {
|
||||
canvas_draw_str(canvas, 4, 49, "Broadcast Inactive");
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str(canvas, 4, 21, "Press <- to run in background");
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
char interval_str[20];
|
||||
snprintf(interval_str, sizeof(interval_str), "Ping Interval: %ds", model->interval);
|
||||
canvas_draw_str(canvas, 4, 62, interval_str);
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
|
||||
const char* network_text = "";
|
||||
switch(model->type) {
|
||||
case FindMyTypeApple:
|
||||
@@ -48,8 +37,43 @@ static void findmy_main_draw_callback(Canvas* canvas, void* _model) {
|
||||
default:
|
||||
break;
|
||||
}
|
||||
canvas_draw_str(canvas, 4, 32, network_text);
|
||||
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 24, &I_Lock_7x8);
|
||||
|
||||
|
||||
if(model->show_mac == false) {
|
||||
canvas_set_font(canvas, FontPrimary);
|
||||
canvas_draw_str(canvas, 4, 31, network_text);
|
||||
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 24, &I_Lock_7x8);
|
||||
} else if(model->show_mac == true) {
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
char mac_str[23];
|
||||
snprintf(
|
||||
mac_str,
|
||||
sizeof(mac_str),
|
||||
"MAC: %02X:%02X:%02X:%02X:%02X:%02X",
|
||||
model->mac[0],
|
||||
model->mac[1],
|
||||
model->mac[2],
|
||||
model->mac[3],
|
||||
model->mac[4],
|
||||
model->mac[5]);
|
||||
canvas_draw_str(canvas, 4, 40, mac_str);
|
||||
canvas_draw_str(canvas, 4, 30, network_text);
|
||||
canvas_draw_icon(canvas, 6 + canvas_string_width(canvas, network_text), 23, &I_Lock_7x8);
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
if(model->active) {
|
||||
canvas_draw_str(canvas, 4, 49, "Broadcast Active");
|
||||
canvas_draw_icon(canvas, 78, 41, &I_Ok_btn_9x9);
|
||||
} else {
|
||||
canvas_draw_str(canvas, 4, 49, "Broadcast Inactive");
|
||||
}
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str(canvas, 4, 21, "Press <- to run in background");
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
char interval_str[20];
|
||||
snprintf(interval_str, sizeof(interval_str), "Ping Interval: %ds", model->interval);
|
||||
canvas_draw_str(canvas, 4, 62, interval_str);
|
||||
|
||||
canvas_set_font(canvas, FontSecondary);
|
||||
canvas_draw_str(canvas, 100, 61, "Config");
|
||||
canvas_draw_line(canvas, 100, 51, 127, 51);
|
||||
@@ -107,6 +131,11 @@ FindMyMain* findmy_main_alloc(FindMy* app) {
|
||||
{
|
||||
model->active = app->state.beacon_active;
|
||||
model->interval = app->state.broadcast_interval;
|
||||
model->show_mac = app->state.show_mac;
|
||||
memcpy(
|
||||
model->mac,
|
||||
app->state.mac,
|
||||
sizeof(model->mac));
|
||||
model->type = app->state.tag_type;
|
||||
},
|
||||
false);
|
||||
@@ -141,6 +170,22 @@ void findmy_main_update_active(FindMyMain* findmy_main, bool active) {
|
||||
findmy_main->view, FindMyMainModel * model, { model->active = active; }, true);
|
||||
}
|
||||
|
||||
void findmy_main_toggle_mac(FindMyMain* findmy_main, bool show_mac) {
|
||||
furi_assert(findmy_main);
|
||||
with_view_model(
|
||||
findmy_main->view, FindMyMainModel * model, { model->show_mac = show_mac; }, true);
|
||||
}
|
||||
|
||||
void findmy_main_update_mac(FindMyMain* findmy_main, uint8_t* mac) {
|
||||
with_view_model(
|
||||
findmy_main->view,
|
||||
FindMyMainModel * model,
|
||||
{
|
||||
memcpy(model->mac, mac, sizeof(model->mac));
|
||||
furi_hal_bt_reverse_mac_addr(model->mac);
|
||||
},
|
||||
false);
|
||||
}
|
||||
void findmy_main_update_interval(FindMyMain* findmy_main, uint8_t interval) {
|
||||
furi_assert(findmy_main);
|
||||
with_view_model(
|
||||
|
||||
@@ -27,4 +27,6 @@ void findmy_main_set_callback(FindMyMain* findmy_main, FindMyMainCallback callba
|
||||
// To redraw when info changes
|
||||
void findmy_main_update_active(FindMyMain* findmy_main, bool active);
|
||||
void findmy_main_update_interval(FindMyMain* findmy_main, uint8_t interval);
|
||||
void findmy_main_toggle_mac(FindMyMain* findmy_main, bool show_mac);
|
||||
void findmy_main_update_mac(FindMyMain* findmy_main, uint8_t* mac);
|
||||
void findmy_main_update_type(FindMyMain* findmy_main, FindMyType type);
|
||||
Reference in New Issue
Block a user