mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-26 19:52:11 +00:00
nyx: Add Joy-Con Bluetooth pair info dump
This commit is contained in:
parent
39a32fc83d
commit
fdfd383c34
1 changed files with 109 additions and 0 deletions
|
@ -561,6 +561,96 @@ static lv_res_t _create_mbox_clock_edit(lv_obj_t *btn)
|
||||||
return LV_RES_OK;
|
return LV_RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static lv_res_t _joycon_info_dump_action(lv_obj_t * btn)
|
||||||
|
{
|
||||||
|
FIL fp;
|
||||||
|
jc_gamepad_rpt_t *jc_pad = jc_get_bt_pairing_info();
|
||||||
|
|
||||||
|
int error = !sd_mount();
|
||||||
|
|
||||||
|
char *data = (char *)malloc(0x4000);
|
||||||
|
char *txt_buf = (char *)malloc(0x1000);
|
||||||
|
|
||||||
|
if (!error)
|
||||||
|
{
|
||||||
|
// Save binary dump.
|
||||||
|
memcpy(data, &jc_pad->bt_conn_l, sizeof(jc_bt_conn_t));
|
||||||
|
memcpy(data + sizeof(jc_bt_conn_t), &jc_pad->bt_conn_r, sizeof(jc_bt_conn_t));
|
||||||
|
|
||||||
|
f_mkdir("switchroot");
|
||||||
|
error = sd_save_to_file((u8 *)data, sizeof(jc_bt_conn_t) * 2, "switchroot/joycon_mac.bin");
|
||||||
|
|
||||||
|
// Save readable dump.
|
||||||
|
jc_bt_conn_t *bt = &jc_pad->bt_conn_l;
|
||||||
|
s_printf(data,
|
||||||
|
"[joycon_00]\ntype=%d\nmac=%02X:%02X:%02X:%02X:%02X:%02X\n"
|
||||||
|
"host=%02X:%02X:%02X:%02X:%02X:%02X\n"
|
||||||
|
"ltk=%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n\n",
|
||||||
|
bt->type, bt->mac[0], bt->mac[1], bt->mac[2], bt->mac[3], bt->mac[4], bt->mac[5],
|
||||||
|
bt->host_mac[0], bt->host_mac[1], bt->host_mac[2], bt->host_mac[3], bt->host_mac[4], bt->host_mac[5],
|
||||||
|
bt->ltk[0], bt->ltk[1], bt->ltk[2], bt->ltk[3], bt->ltk[4], bt->ltk[5], bt->ltk[6], bt->ltk[7],
|
||||||
|
bt->ltk[8], bt->ltk[9], bt->ltk[10], bt->ltk[11], bt->ltk[12], bt->ltk[13], bt->ltk[14], bt->ltk[15]);
|
||||||
|
bt = &jc_pad->bt_conn_r;
|
||||||
|
s_printf(data + strlen(data),
|
||||||
|
"[joycon_01]\ntype=%d\nmac=%02X:%02X:%02X:%02X:%02X:%02X\n"
|
||||||
|
"host=%02X:%02X:%02X:%02X:%02X:%02X\n"
|
||||||
|
"ltk=%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X\n",
|
||||||
|
bt->type, bt->mac[0], bt->mac[1], bt->mac[2], bt->mac[3], bt->mac[4], bt->mac[5],
|
||||||
|
bt->host_mac[0], bt->host_mac[1], bt->host_mac[2], bt->host_mac[3], bt->host_mac[4], bt->host_mac[5],
|
||||||
|
bt->ltk[0], bt->ltk[1], bt->ltk[2], bt->ltk[3], bt->ltk[4], bt->ltk[5], bt->ltk[6], bt->ltk[7],
|
||||||
|
bt->ltk[8], bt->ltk[9], bt->ltk[10], bt->ltk[11], bt->ltk[12], bt->ltk[13], bt->ltk[14], bt->ltk[15]);
|
||||||
|
|
||||||
|
if (!error)
|
||||||
|
error = f_open(&fp, "switchroot/joycon_mac.ini", FA_WRITE | FA_CREATE_ALWAYS);
|
||||||
|
if (!error)
|
||||||
|
{
|
||||||
|
f_puts(data, &fp);
|
||||||
|
f_close(&fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
sd_unmount(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
lv_style_t *darken;
|
||||||
|
darken = (lv_style_t *)malloc(sizeof(lv_style_t));
|
||||||
|
lv_style_copy(darken, &lv_style_plain);
|
||||||
|
darken->body.main_color = LV_COLOR_BLACK;
|
||||||
|
darken->body.grad_color = darken->body.main_color;
|
||||||
|
darken->body.opa = LV_OPA_30;
|
||||||
|
|
||||||
|
lv_obj_t *dark_bg = lv_obj_create(lv_scr_act(), NULL);
|
||||||
|
lv_obj_set_style(dark_bg, darken);
|
||||||
|
lv_obj_set_size(dark_bg, LV_HOR_RES, LV_VER_RES);
|
||||||
|
|
||||||
|
static const char * mbox_btn_map[] = { "\211", "\222OK", "\211", "" };
|
||||||
|
lv_obj_t * mbox = lv_mbox_create(dark_bg, NULL);
|
||||||
|
lv_mbox_set_recolor_text(mbox, true);
|
||||||
|
lv_obj_set_width(mbox, LV_HOR_RES / 9 * 5);
|
||||||
|
|
||||||
|
u32 joycon_found = jc_pad->bt_conn_l.type ? 1 : 0;
|
||||||
|
if (jc_pad->bt_conn_r.type)
|
||||||
|
joycon_found++;
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
s_printf(txt_buf, "#FFDD00 Failed to dump to# Joy-Con pairing info#FFDD00 !#\nError: %d", error);
|
||||||
|
else
|
||||||
|
s_printf(txt_buf,
|
||||||
|
"Dumping to SD card finished!\n"
|
||||||
|
"Found %d Joycon!\n\n"
|
||||||
|
"Saved to: #C7EA46 switchroot/joycon_mac.bin/ini#", joycon_found);
|
||||||
|
lv_mbox_set_text(mbox, txt_buf);
|
||||||
|
|
||||||
|
lv_mbox_add_btns(mbox, mbox_btn_map, mbox_action); // Important. After set_text.
|
||||||
|
|
||||||
|
lv_obj_align(mbox, NULL, LV_ALIGN_CENTER, 0, 0);
|
||||||
|
lv_obj_set_top(mbox, true);
|
||||||
|
|
||||||
|
free(txt_buf);
|
||||||
|
free(data);
|
||||||
|
|
||||||
|
return LV_RES_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static lv_res_t _home_screen_action(lv_obj_t *ddlist)
|
static lv_res_t _home_screen_action(lv_obj_t *ddlist)
|
||||||
{
|
{
|
||||||
n_cfg.home_screen = lv_ddlist_get_selected(ddlist);
|
n_cfg.home_screen = lv_ddlist_get_selected(ddlist);
|
||||||
|
@ -699,6 +789,25 @@ lv_res_t create_win_nyx_options(lv_obj_t *parrent_btn)
|
||||||
label_sep = lv_label_create(sw_h3, NULL);
|
label_sep = lv_label_create(sw_h3, NULL);
|
||||||
lv_label_set_static_text(label_sep, "");
|
lv_label_set_static_text(label_sep, "");
|
||||||
|
|
||||||
|
// Create Dump Joy-Con BT button.
|
||||||
|
lv_obj_t *btn3 = lv_btn_create(sw_h3, NULL);
|
||||||
|
lv_obj_t *label_btn3 = lv_label_create(btn3, NULL);
|
||||||
|
lv_btn_set_fit(btn3, true, true);
|
||||||
|
lv_label_set_static_text(label_btn3, SYMBOL_DOWNLOAD" Dump Joy-Con BT");
|
||||||
|
lv_obj_align(btn3, label_sep, LV_ALIGN_OUT_BOTTOM_LEFT, LV_DPI / 4, -LV_DPI / 3);
|
||||||
|
lv_btn_set_action(btn3, LV_BTN_ACTION_CLICK, _joycon_info_dump_action);
|
||||||
|
|
||||||
|
label_txt2 = lv_label_create(sw_h3, NULL);
|
||||||
|
lv_label_set_recolor(label_txt2, true);
|
||||||
|
lv_label_set_static_text(label_txt2,
|
||||||
|
"Allows you to save the Switch and Joy-Con MAC addresses\n"
|
||||||
|
"and the LTKs associated with them. For #C7EA46 Android# and #C7EA46 Linux#.");
|
||||||
|
lv_obj_set_style(label_txt2, &hint_small_style);
|
||||||
|
lv_obj_align(label_txt2, btn3, LV_ALIGN_OUT_BOTTOM_LEFT, 0, LV_DPI / 4);
|
||||||
|
|
||||||
|
line_sep = lv_line_create(sw_h3, line_sep);
|
||||||
|
lv_obj_align(line_sep, label_txt2, LV_ALIGN_OUT_BOTTOM_LEFT, -(LV_DPI / 4), LV_DPI / 4);
|
||||||
|
|
||||||
// Create Backup/Restore Verification list.
|
// Create Backup/Restore Verification list.
|
||||||
label_txt = lv_label_create(sw_h3, NULL);
|
label_txt = lv_label_create(sw_h3, NULL);
|
||||||
lv_label_set_static_text(label_txt, SYMBOL_MODULES_ALT" Data Verification");
|
lv_label_set_static_text(label_txt, SYMBOL_MODULES_ALT" Data Verification");
|
||||||
|
|
Loading…
Reference in a new issue