X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/c033e985d10fb75638d8f512a0cc92d198fe93eb..d265161cb9c1651b365e447a654c6eabe6b5470d:/badge/ui/font.c diff --git a/badge/ui/font.c b/badge/ui/font.c index 1ea57ad..2b60477 100644 --- a/badge/ui/font.c +++ b/badge/ui/font.c @@ -21,10 +21,14 @@ static uint8_t badge_framebuffer_render_char_with_fd(badge_framebuffer *fb, int8 return 0; } +static FRESULT open_font_file(FIL *fd) { + return f_open(fd, "font.dat", FA_OPEN_EXISTING | FA_READ); +} + uint8_t badge_framebuffer_render_char(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, char c) { FIL fd; - if(FR_OK == f_open(&fd, "font.dat", FA_OPEN_EXISTING | FA_READ)) { + if(FR_OK == open_font_file(&fd)) { badge_framebuffer_render_char_with_fd(fb, pos_x, pos_y, c, &fd); f_close(&fd); return 0; @@ -37,7 +41,7 @@ uint8_t badge_framebuffer_render_text(badge_framebuffer *fb, int8_t pos_x, int8_ uint8_t count = 0; FIL fd; - if(FR_OK == f_open(&fd, "font.dat", FA_OPEN_EXISTING | FA_READ)) { + if(FR_OK == open_font_file(&fd)) { while(*text) { if(0 != badge_framebuffer_render_char_with_fd(fb, pos_x, pos_y, *text, &fd)) { break; @@ -53,3 +57,30 @@ uint8_t badge_framebuffer_render_text(badge_framebuffer *fb, int8_t pos_x, int8_ return count; } + +static uint8_t badge_framebuffer_render_number_with_fd(badge_framebuffer *fb, int8_t *pos_x, int8_t pos_y, uint8_t number, FIL *fd) { + if(number > 10) { + badge_framebuffer_render_number_with_fd(fb, pos_x, pos_y, number / 10, fd); + } + + uint8_t err = badge_framebuffer_render_char_with_fd(fb, *pos_x, pos_y, '0' + number % 10, fd); + + if(err != 0) return err; + + *pos_x += BADGE_FONT_WIDTH; + return 0; +} + +uint8_t badge_framebuffer_render_number(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, uint8_t number) { + FIL fd; + + if(FR_OK == open_font_file(&fd)) { + uint8_t err = badge_framebuffer_render_number_with_fd(fb, &pos_x, pos_y, number, &fd); + + if(err != 0) { + return err; + } + } + + return 0; +}