Skip to content

Commit 6d98c3b

Browse files
authored
Merge pull request solosky#208 from MirakelDev/feature/filename_to_slots_nickname
[Card emulator] feature: filename to slots nickname
2 parents 6af76e5 + 2207be5 commit 6d98c3b

File tree

6 files changed

+51
-6
lines changed

6 files changed

+51
-6
lines changed

fw/application/src/app/chameleon/scene/chameleon_scene_menu_card_data_file_load.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ void chameleon_scene_menu_card_data_file_load_from_file(app_chameleon_t *app, co
5454
return;
5555
}
5656

57+
// set nickname by filename
58+
err = tag_helper_set_nickname(file_name);
59+
if (err != 0) {
60+
mui_toast_view_show(app->p_toast_view, _T(APP_CHAMELEON_CARD_SET_NICK_FAILED));
61+
return;
62+
}
63+
5764
NRF_LOG_INFO("load card data:%d", err);
5865
mui_toast_view_show(app->p_toast_view, _T(APP_CHAMELEON_CARD_DATA_LOAD_SUCCESS));
5966
mui_scene_dispatcher_back_scene(app->p_scene_dispatcher, 2);

fw/application/src/app/chameleon/scene/chameleon_scene_menu_card_data_file_save.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void chameleon_scene_menu_card_data_file_save_on_enter(void *user_data) {
4949
app_chameleon_t *app = user_data;
5050
char file_name[32];
5151

52-
sprintf(file_name, "%02d.bin", tag_emulation_get_slot());
52+
tag_helper_get_nickname(file_name, sizeof(file_name));
5353

5454
mui_text_input_set_header(app->p_text_input, _T(APP_CHAMELEON_CARD_DATA_SAVE_INPUT_FILE_NAME));
5555
mui_text_input_set_input_text(app->p_text_input, file_name);

fw/application/src/app/chameleon/view/chameleon_view.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ static void chameleon_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
1717

1818
mui_canvas_set_font(p_canvas, MUI_FONT_NORMAL);
1919

20-
uint8_t x = 0, y = 0;
20+
uint8_t x = 0, y = 0, w = 0;
2121
mui_canvas_draw_box(p_canvas, 0, y, mui_canvas_get_width(p_canvas), 12);
2222
mui_canvas_set_draw_color(p_canvas, 0);
2323

@@ -43,13 +43,19 @@ static void chameleon_view_on_draw(mui_view_t *p_view, mui_canvas_t *p_canvas) {
4343

4444
mui_canvas_set_draw_color(p_canvas, 1);
4545

46+
x = 8;
47+
y = 13 + (mui_canvas_get_height(p_canvas) - 16) / 2;
48+
w = mui_canvas_get_width(p_canvas) - x * 2;
49+
4650
tag_helper_get_nickname(buff, sizeof(buff));
4751

48-
y = 13 + (mui_canvas_get_height(p_canvas) - 16) / 2;
49-
x = (mui_canvas_get_width(p_canvas) - mui_canvas_get_utf8_width(p_canvas, buff)) / 2;
50-
mui_canvas_draw_utf8(p_canvas, x, y, buff);
52+
if (w > mui_canvas_get_utf8_width(p_canvas, buff)) {
53+
x += (w - mui_canvas_get_utf8_width(p_canvas, buff)) / 2;
54+
}
55+
56+
mui_canvas_draw_utf8_truncate(p_canvas, x, y, w, buff);
5157
mui_canvas_draw_utf8(p_canvas, 0, y, "<");
52-
mui_canvas_draw_utf8(p_canvas, mui_canvas_get_width(p_canvas) - 8, y, ">");
58+
mui_canvas_draw_utf8(p_canvas, mui_canvas_get_width(p_canvas) - 5, y, ">");
5359

5460
mui_canvas_set_font(p_canvas, MUI_FONT_SMALL);
5561
sprintf(buff, "%s <%02x/%02x %02x>", tag_name->short_name, coll_res->sak[0], coll_res->atqa[0], coll_res->atqa[1]);

fw/application/src/mui/mui_canvas.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,36 @@ uint8_t mui_canvas_draw_glyph(mui_canvas_t *p_canvas, uint8_t x, uint8_t y, uint
5959
u8g2_DrawGlyph(p_canvas->fb, x, y, encoding);
6060
}
6161

62+
uint16_t mui_canvas_draw_utf8_truncate(mui_canvas_t* p_canvas, uint8_t x, uint8_t y, uint8_t max_width, const char *str) {
63+
char *p = str;
64+
char utf8[5];
65+
66+
if (max_width < mui_canvas_get_utf8_width(p_canvas, str)) {
67+
while (*p != 0) {
68+
uint8_t utf8_size = mui_canvas_get_utf8_bytes(p);
69+
memcpy(utf8, p, utf8_size);
70+
utf8[utf8_size] = '\0';
71+
if (x >= 0 && x <= max_width - 8) {
72+
uint8_t utf8_w = mui_canvas_draw_utf8(p_canvas, x, y, utf8);
73+
x += utf8_w;
74+
} else {
75+
uint8_t *font = u8g2_GetFont(p_canvas->fb);
76+
u8g2_SetFont(p_canvas->fb, u8g2_font_siji_t_6x10);
77+
uint8_t utf8_w = mui_canvas_draw_glyph(p_canvas, x, y - 1, 0xe21f);
78+
u8g2_SetFont(p_canvas->fb, font);
79+
x += utf8_w + 1;
80+
81+
break;
82+
}
83+
p += utf8_size;
84+
}
85+
} else {
86+
x = mui_canvas_draw_utf8(p_canvas, x, y, str) + 1;
87+
}
88+
89+
return x;
90+
}
91+
6292
uint16_t mui_canvas_get_utf8_width(mui_canvas_t *p_canvas, const char *s) { return u8g2_GetUTF8Width(p_canvas->fb, s); }
6393

6494
void mui_canvas_set_frame(mui_canvas_t *p_canvas, uint8_t offset_x, uint8_t offset_y, uint8_t width, uint8_t height) {

fw/application/src/mui/mui_canvas.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ void mui_canvas_set_font(mui_canvas_t *p_canvas, const uint8_t *font);
2727
uint8_t mui_canvas_draw_utf8(mui_canvas_t *p_canvas, uint8_t x, uint8_t y, const char *str);
2828
int32_t mui_canvas_draw_utf8_clip(mui_canvas_t *p_canvas, int32_t x, int32_t y, const char *text);
2929
uint8_t mui_canvas_draw_glyph(mui_canvas_t *p_canvas, uint8_t x, uint8_t y, uint16_t encoding);
30+
uint16_t mui_canvas_draw_utf8_truncate(mui_canvas_t* p_canvas, uint8_t x, uint8_t y, uint8_t max_width, const char *str);
3031
uint16_t mui_canvas_get_utf8_width(mui_canvas_t *p_canvas, const char *s);
3132

3233
void mui_canvas_set_frame(mui_canvas_t *p_canvas, uint8_t offset_x, uint8_t offset_y, uint8_t width, uint8_t height);

fw/components/u8g2/csrc/u8g2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1670,6 +1670,7 @@ u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t
16701670
#define u8g2_GetDescent(u8g2) ((u8g2)->font_ref_descent)
16711671
#define u8g2_GetFontAscent(u8g2) ((u8g2)->font_ref_ascent)
16721672
#define u8g2_GetFontDescent(u8g2) ((u8g2)->font_ref_descent)
1673+
#define u8g2_GetFont(u8g2) ((u8g2)->font)
16731674

16741675
uint8_t u8g2_IsAllValidUTF8(u8g2_t *u8g2, const char *str); // checks whether all codes are valid
16751676

0 commit comments

Comments
 (0)