From cd3046b3ef05cf94d9aaa46cb2a4e5bb51db022a Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Tue, 1 Sep 2015 11:39:02 +0200 Subject: [PATCH] Ion simulator support --- ion/drivers/fltklcd/fltklcd.cpp | 21 +++++++++++++++++ ion/drivers/fltklcd/fltklcd.h | 13 +++++++++++ ion/include/ion.h | 2 ++ ion/platform/simulator/Makefile | 7 ++++-- ion/platform/simulator/framebuffer.h | 11 +++++++++ ion/platform/simulator/init.c | 4 ---- ion/platform/simulator/init.cpp | 35 ++++++++++++++++++++++++++++ ion/platform/simulator/keyboard.c | 10 ++++++++ ion/platform/simulator/platform.cpp | 4 ++++ ion/platform/simulator/platform.h | 15 ++++++++++++ 10 files changed, 116 insertions(+), 6 deletions(-) create mode 100644 ion/drivers/fltklcd/fltklcd.cpp create mode 100644 ion/drivers/fltklcd/fltklcd.h create mode 100644 ion/platform/simulator/framebuffer.h delete mode 100644 ion/platform/simulator/init.c create mode 100644 ion/platform/simulator/init.cpp create mode 100644 ion/platform/simulator/keyboard.c create mode 100644 ion/platform/simulator/platform.cpp create mode 100644 ion/platform/simulator/platform.h diff --git a/ion/drivers/fltklcd/fltklcd.cpp b/ion/drivers/fltklcd/fltklcd.cpp new file mode 100644 index 000000000..321e51cdd --- /dev/null +++ b/ion/drivers/fltklcd/fltklcd.cpp @@ -0,0 +1,21 @@ +#include "fltklcd.h" +#include +#include // FIXME: remove printfs + +#include + +FltkLCD::FltkLCD(int x, int y, int w, int h) : Fl_Widget(x, y, w, h, NULL) { + m_framebuffer = malloc(w*h); +// FIXME: Delete the framebuffer! +} + +void FltkLCD::draw() { + printf("DRAW\n"); + fl_draw_image_mono((const uchar *)m_framebuffer, + 0, // x + 0, // y + w(), // width + h(), // height, + 1, // byte-delta between pixels + 0); // byte-delta between lines; +} diff --git a/ion/drivers/fltklcd/fltklcd.h b/ion/drivers/fltklcd/fltklcd.h new file mode 100644 index 000000000..a539dcb27 --- /dev/null +++ b/ion/drivers/fltklcd/fltklcd.h @@ -0,0 +1,13 @@ +#ifndef ION_FLTK_LCD +#define ION_FLTK_LCD + +#include + +class FltkLCD : public Fl_Widget { + public: + FltkLCD(int x, int y, int w, int h); + void draw(); + void * m_framebuffer; +}; + +#endif diff --git a/ion/include/ion.h b/ion/include/ion.h index f24170d21..03753242b 100644 --- a/ion/include/ion.h +++ b/ion/include/ion.h @@ -9,6 +9,8 @@ void ion_init(); void ion_display_on(); void ion_display_off(); +void ion_sleep(); + char ion_getchar(); #endif diff --git a/ion/platform/simulator/Makefile b/ion/platform/simulator/Makefile index b30e20f9f..35fb101b4 100644 --- a/ion/platform/simulator/Makefile +++ b/ion/platform/simulator/Makefile @@ -1,2 +1,5 @@ -objs += $(addprefix ion/src/platform/simulator/, init.o) -#objs += $(addprefix ion/src/drivers/, ili9341/ili9341.o fx92kbd/fx92kbd.o) +objs += $(addprefix ion/platform/simulator/, init.o keyboard.o platform.o) +objs += $(addprefix ion/drivers/, fltklcd/fltklcd.o) + +#SFLAGS += -I/usr/local/Cellar/fltk/1.3.3/include -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT +LDFLAGS += -L/usr/local/Cellar/fltk/1.3.3/lib -lfltk -lpthread -framework Cocoa diff --git a/ion/platform/simulator/framebuffer.h b/ion/platform/simulator/framebuffer.h new file mode 100644 index 000000000..ea0739dc9 --- /dev/null +++ b/ion/platform/simulator/framebuffer.h @@ -0,0 +1,11 @@ +#ifndef ION_SIMULATOR_FRAMEBUFFER_H +#define ION_SIMULATOR_FRAMEBUFFER_H + +extern void * PlatformFramebuffer; + +#define ION_FRAMEBUFFER_ADDRESS PlatformFramebuffer +#define ION_FRAMEBUFFER_WIDTH 320 +#define ION_FRAMEBUFFER_HEIGHT 240 +#define ION_FRAMEBUFFER_BITS_PER_PIXEL 8 + +#endif diff --git a/ion/platform/simulator/init.c b/ion/platform/simulator/init.c deleted file mode 100644 index 2009fff08..000000000 --- a/ion/platform/simulator/init.c +++ /dev/null @@ -1,4 +0,0 @@ -#include - -void ion_init() { -} diff --git a/ion/platform/simulator/init.cpp b/ion/platform/simulator/init.cpp new file mode 100644 index 000000000..c4a0419eb --- /dev/null +++ b/ion/platform/simulator/init.cpp @@ -0,0 +1,35 @@ +extern "C" { +#include +#include +#include +} +#include "platform.h" +#include +#include +#include +#include + +void ion_init() { + Fl_Window * window = new Fl_Window(360, 280); +#if 1 + FltkLCD * lcd = new FltkLCD(20, 20, 320, 240); + assert(ION_FRAMEBUFFER_BITS_PER_PIXEL == 8); + Platform.display = lcd; + PlatformFramebuffer = lcd->m_framebuffer; +#else + Fl_Box * box = new Fl_Box(20,20,320,240,"Hello, World!"); + box->box(FL_UP_BOX); + box->labelfont(FL_BOLD+FL_ITALIC); + box->labelsize(36); + box->labeltype(FL_SHADOW_LABEL); +#endif + window->end(); + window->show(NULL, NULL); + //Fl::run(); +} + +void ion_sleep() { + printf("ion_sleep\n"); + Platform.display->redraw(); + Fl::wait(); +} diff --git a/ion/platform/simulator/keyboard.c b/ion/platform/simulator/keyboard.c new file mode 100644 index 000000000..5b7c4f7a3 --- /dev/null +++ b/ion/platform/simulator/keyboard.c @@ -0,0 +1,10 @@ +#include +#include + +char ion_getchar() { + printf("GETCHAR\n"); + ion_sleep(); + char c = getchar(); + printf("Returning %c\n", c); + return c; +} diff --git a/ion/platform/simulator/platform.cpp b/ion/platform/simulator/platform.cpp new file mode 100644 index 000000000..95a726c46 --- /dev/null +++ b/ion/platform/simulator/platform.cpp @@ -0,0 +1,4 @@ +#include "platform.h" + +platform_t Platform; +void * PlatformFramebuffer; diff --git a/ion/platform/simulator/platform.h b/ion/platform/simulator/platform.h new file mode 100644 index 000000000..e84172139 --- /dev/null +++ b/ion/platform/simulator/platform.h @@ -0,0 +1,15 @@ +#ifndef ION_SIMULATOR_PLATFORM_H +#define ION_SIMULATOR_PLATFORM_H + +#include +extern "C" { +#include "framebuffer.h" +} + +typedef struct { + FltkLCD * display; +} platform_t; + +extern platform_t Platform; + +#endif