From a2f51628f0de8e88650de20dbc24d90cfa0be60f Mon Sep 17 00:00:00 2001 From: Wintermate Date: Wed, 23 Oct 2013 02:09:40 +0200 Subject: [PATCH] Vanity-Screen. --- Makefile | 3 +- badge/main.c | 5 +++ badge/ui/vanity.c | 31 +++++++++++++++++ badge/ui/vanity.h | 6 ++++ vanity/test.png | Bin 0 -> 26342 bytes vanity/test.xpm | 73 +++++++++++++++++++++++++++++++++++++++ vanity/vanity-convert.cc | 49 ++++++++++++++++++++++++++ 7 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 badge/ui/vanity.c create mode 100644 badge/ui/vanity.h create mode 100644 vanity/test.png create mode 100644 vanity/test.xpm create mode 100644 vanity/vanity-convert.cc 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 0000000000000000000000000000000000000000..732f24854630fa4e4ef67f446a40185e8ca9342e GIT binary patch literal 26342 zcmeHQyJ}TI6g^i$qBo>Up;-9|)^^GbNf2WQHg>_nB8`F;+E@q{)`H-pun{{gEyOPn z1V6yq%0m2rcs6mtW@q-yp2xX!A9KUW%~pS-_(p&wT7T;HB_$Mp5?>xUP;<=p+9+Yh>KeUpw+_xdfltv%emv9XQQ^ESG00;CWq8IL6tHDlwb?!pL=LjuJTdB`CJ39S+9i`T@762MhJOB@1S zY9E+VaZo&BX+*vld^`rZcs$?dcAA?6K!Q+m*S;)RYVE^hsUhR#+LD8O5Jz*Zf6Y!Y zCIPI;2@HyHU=**t;7|M3806xyu*HtNW=g)47>+UcNtlz$1Ld4ILVH$VGR_h!W306# z=2=*quK*udDUu|}7Yp)`gGS7?IK*iC^JEWx5SwPRF~ZFg$v&*XTaYgpdmxUB6*`L% zyX<3;TM&qc5JW0$%T92p{~`jQ$RdzF?JGC<9sqKeY2;V((0w-nhGsaBKl>JxdbTXW z?JB^nX**f~7vZsFQVu#|<4hgRnNv^z3*qpw5^D9U#U}$M0Dz(faezqdVFU@Z?|We%{ytywfxqS#+SlSN_L&esHs~Wx`f5#* zA05727V?ollnZ{bW7gA9Ujx3q5J-)*F!`H*fAxQA;Nk^I0x}}H%Hp+*bu*sU1b(R2B7$7XghVrps$RWvvyHvic+Yx|)0Dz)3 z=J1)u2pqCj4J;Cawk{$7C6~?5a?=_aHSAfpAP%?@&e^cfXW~avJKV+dYywo)v%v}Vd z2}(a@I7uCq#G7;lB%x+Oya6)L1L+L@3Es~ykN))kT;L}Cj{v@zF`v2^^G19Ix2Dkc qq0B_na86Bt;kY$rZUUHS8qVqQ`uN%JZ~OPC!tU1I + +#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; +} -- 2.20.1