Zahlenrendern für Prototyp.
[hackover2013-badge-firmware.git] / badge / ui / font.c
index 1ea57ad..2b60477 100644 (file)
@@ -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;
+}
This page took 0.022698 seconds and 4 git commands to generate.