From: Wintermate Date: Wed, 23 Oct 2013 00:09:40 +0000 (+0200) Subject: Vanity-Screen. X-Git-Url: http://git.rohieb.name/hackover2013-badge-firmware.git/commitdiff_plain/a2f51628f0de8e88650de20dbc24d90cfa0be60f?hp=05db94c84b6f7e4ee91fd67d6e1a8d97a2b97f2e Vanity-Screen. --- diff --git a/Makefile b/Makefile index 6f4fafb..67c7fb5 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,8 @@ SRCS = \ badge/ui/event.c \ badge/ui/font.c \ badge/ui/menu.c \ - badge/ui/sprite.c + badge/ui/sprite.c \ + badge/ui/vanity.c SRCS += \ dataflash/iobase.c \ diff --git a/badge/main.c b/badge/main.c index 774649d..54371bc 100644 --- a/badge/main.c +++ b/badge/main.c @@ -59,6 +59,7 @@ #include "ui/font.h" #include "ui/menu.h" #include "ui/sprite.h" +#include "ui/vanity.h" #include "util/util.h" #include "jumpnrun/jumpnrun.h" @@ -228,6 +229,10 @@ int main(void) scrolltest(); } + if(badge_input_raw() & BADGE_EVENT_KEY_LEFT) { + badge_vanity_show(); + } + jumpnrun_play(); usbmode(); diff --git a/badge/ui/vanity.c b/badge/ui/vanity.c new file mode 100644 index 0000000..b2bebbd --- /dev/null +++ b/badge/ui/vanity.c @@ -0,0 +1,31 @@ +#include "vanity.h" + +#include "display.h" +#include "event.h" +#include + +#define VANITY_IMAGE_FILE "/vanity.dat" + +void badge_vanity_read_from_fd(FIL *fd, badge_framebuffer *dest) { + UINT bytes; + f_read(fd, dest, sizeof(*dest), &bytes); +} + +void badge_vanity_show(void) { + FIL fd; + badge_framebuffer fb; + + if(FR_OK == f_open(&fd, VANITY_IMAGE_FILE, FA_OPEN_EXISTING | FA_READ)) { + badge_vanity_read_from_fd(&fd, &fb); + f_close(&fd); + + badge_framebuffer_flush(&fb); + + badge_event_t ev; + do { + ev = badge_event_wait(); + } while(badge_event_type(ev) != BADGE_EVENT_USER_INPUT); + + for(;;); + } +} diff --git a/badge/ui/vanity.h b/badge/ui/vanity.h new file mode 100644 index 0000000..be1441e --- /dev/null +++ b/badge/ui/vanity.h @@ -0,0 +1,6 @@ +#ifndef INCLUDED_BADGE_UI_VANITY_H +#define INCLUDED_BADGE_UI_VANITY_H + +void badge_vanity_show(void); + +#endif diff --git a/vanity/test.png b/vanity/test.png new file mode 100644 index 0000000..732f248 Binary files /dev/null and b/vanity/test.png differ diff --git a/vanity/test.xpm b/vanity/test.xpm new file mode 100644 index 0000000..537b122 --- /dev/null +++ b/vanity/test.xpm @@ -0,0 +1,73 @@ +/* XPM */ +static char * test_xpm[] = { +"96 68 2 1", +" g #FFFFFF", +". g #000000", +" ", +" ", +" ", +" ", +" ............. ", +" ................. .. ", +" .. . .. ........ ", +" ..... .. . . ... . ", +" .. ... .. .. .. ... ", +" . . .......... ............ ..... ", +" . .... ..... .... ", +" . . . . .. ", +" . . .... ", +" .. . ", +" ... ", +" . ", +" .. ", +" .. ", +" .............. .. ", +" ..... .. .. ", +" ..... .. . . ", +" ... . . . ", +" . .. . . ", +" . . . . ", +" . .. . ", +" . ..... ", +" . . . ", +" . . . . ", +" .. .............. . ", +" . . . ......... ", +" . . . ", +" . . . ", +" . .. .. ", +" . ..... . . . ", +" . .. .. ... . . ", +" . . . . . . . ", +" . .. .. . . . . ", +" . . . . .. . . ", +" . . .. .. .. . . ", +" . . .. .. .. . .. ", +" . .... .. .. . . ", +" . .... . . . . ", +" . . ...... . .. ... ", +" .. . .... ... ", +" . . ......... ", +" .. . ...... ", +" .... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ............ ........................................... ", +" ...... .... .. .. ... .. .... ", +" .. .. .. ....... . . . ", +" . .. . . ..... .. ", +" . ... ... ", +" ..... ", +" ", +" ", +" ", +" "}; diff --git a/vanity/vanity-convert.cc b/vanity/vanity-convert.cc new file mode 100644 index 0000000..e08b77f --- /dev/null +++ b/vanity/vanity-convert.cc @@ -0,0 +1,49 @@ +#include + +#include +#include +#include +#include + +#include + +double square(double x) { return x * x; } + +int main(int argc, char *argv[]) { + if(argc != 2) { + std::cerr << "Usage: " << argv[0] << " [ FILE ]\n"; + return -1; + } + + sf::Image img; + if(!img.loadFromFile(argv[1])) { + std::cerr << "Could not open file.\n"; + return -2; + } + + if(img.getSize().x != BADGE_DISPLAY_WIDTH || + img.getSize().y != BADGE_DISPLAY_HEIGHT) { + std::cerr << "Image must be " << BADGE_DISPLAY_WIDTH << "x" << BADGE_DISPLAY_HEIGHT << " pixels.\n"; + return -3; + } + + badge_framebuffer fb = { { { 0 } } }; + + for(unsigned x = 0; x < BADGE_DISPLAY_WIDTH; ++x) { + for(unsigned y = 0; y < BADGE_DISPLAY_HEIGHT; ++y) { + sf::Color c = img.getPixel(x, y); + + if(std::sqrt(0.241 * square(c.r / 255.) + 0.691 * square(c.g / 255.) + 0.068 * square(c.b / 255.)) < 0.5) { + badge_framebuffer_pixel_on(&fb, x, y); + } + } + } + + std::ofstream out("vanity.dat", std::ios::out | std::ios::binary); + + if(out) { + out.write(static_cast(static_cast(&fb)), sizeof(fb)); + } + + return 0; +}