[ion] Clean the simulator

This commit is contained in:
Romain Goyet
2015-09-19 18:59:36 +02:00
parent 0f0d3cde83
commit 96b46818ac
16 changed files with 57 additions and 103 deletions

View File

@@ -1,21 +0,0 @@
#include "fltkkbd.h"
#include "fltkkbdbutton.h"
void FltkKbdButtonCallback(Fl_Widget * w, void * context) {
FltkKbd * kbd = (FltkKbd *)context;
FltkKbdButton * button = (FltkKbdButton *)w;
kbd->m_keyStates[button->m_key] = button->value();
}
FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) {
for (int i=0; i<ION_NUMBER_OF_KEYS; i++) {
m_keyStates[i] = false;
}
for (int k=0; k<ION_NUMBER_OF_KEYS; k++) {
FltkKbdButton * b = new FltkKbdButton(x+(k*w)/ION_NUMBER_OF_KEYS, y, w/ION_NUMBER_OF_KEYS, h);
b->m_key = (ion_key_t)k;
b->when(FL_WHEN_CHANGED);
b->callback(FltkKbdButtonCallback, (void *)this);
}
end();
}

View File

@@ -1,5 +0,0 @@
#include "fltkkbdbutton.h"
FltkKbdButton::FltkKbdButton(int x, int y, int w, int h, const char * label) :
Fl_Button(x, y, w, h, label) {
}

View File

@@ -1,15 +0,0 @@
#ifndef ION_FLTK_KBD_BUTTON
#define ION_FLTK_KBD_BUTTON
#include <FL/Fl_Button.H>
extern "C" {
#include <ion/keyboard.h>
}
class FltkKbdButton : public Fl_Button {
public:
FltkKbdButton(int x, int y, int w, int h, const char * label = 0);
ion_key_t m_key;
};
#endif

View File

@@ -1,5 +1,7 @@
objs += $(addprefix ion/platform/simulator/, init.o platform.o framebuffer.o)
objs += $(addprefix ion/drivers/, fltklcd/fltklcd.o fltkkbd/fltkkbd.o fltkkbd/fltkkbdbutton.o)
objs += $(addprefix ion/src/simulator/, init.o)
objs += $(addprefix ion/src/simulator/boot/, main.o)
objs += $(addprefix ion/src/simulator/display/, fltklcd.o)
objs += $(addprefix ion/src/simulator/keyboard/, fltkkbd.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

View File

@@ -1 +0,0 @@
objs += $(addprefix boot/simulator/, main.o)

View File

@@ -1,5 +1,7 @@
#include <boot/boot.h>
#include <ion.h>
#include "../init.h"
int main(int argc, char * argv[]) {
boot();
init_platform();
ion_app();
}

View File

@@ -1,11 +0,0 @@
#include "framebuffer.h"
#include <ion.h>
#include <assert.h>
void ion_set_pixel(uint8_t x, uint8_t y, uint8_t color) {
assert(x <= FRAMEBUFFER_WIDTH);
assert(y <= FRAMEBUFFER_HEIGHT);
char * byte = FRAMEBUFFER_ADDRESS + ((y*FRAMEBUFFER_WIDTH)+x);
*byte = color;
}

View File

@@ -1,11 +0,0 @@
#ifndef ION_SIMULATOR_FRAMEBUFFER_H
#define ION_SIMULATOR_FRAMEBUFFER_H
extern void * PlatformFramebuffer;
#define FRAMEBUFFER_ADDRESS PlatformFramebuffer
#define FRAMEBUFFER_WIDTH 320
#define FRAMEBUFFER_HEIGHT 240
#define FRAMEBUFFER_BITS_PER_PIXEL 8
#endif

View File

@@ -3,37 +3,51 @@ extern "C" {
#include <assert.h>
#include <stdio.h>
#include <unistd.h>
#include "init.h"
}
#include "platform.h"
#include "framebuffer.h"
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
#include <ion/drivers/fltklcd/fltklcd.h>
#include <ion/drivers/fltkkbd/fltkkbd.h>
void ion_init() {
#include "display/fltklcd.h"
#include "keyboard/fltkkbd.h"
static FltkLCD * sDisplay;
static FltkKbd * sKeyboard;
#define FRAMEBUFFER_ADDRESS (sDisplay->m_framebuffer)
#define FRAMEBUFFER_WIDTH 320
#define FRAMEBUFFER_HEIGHT 240
#define FRAMEBUFFER_BITS_PER_PIXEL 8
void init_platform() {
Fl::visual(FL_RGB);
int margin = 10;
Fl_Window * window = new Fl_Window(FRAMEBUFFER_WIDTH+2*margin, FRAMEBUFFER_HEIGHT+2*margin+120+2*margin);
FltkLCD * lcd = new FltkLCD(margin, margin, FRAMEBUFFER_WIDTH, FRAMEBUFFER_HEIGHT);
sDisplay = new FltkLCD(margin, margin, FRAMEBUFFER_WIDTH, FRAMEBUFFER_HEIGHT);
assert(FRAMEBUFFER_BITS_PER_PIXEL == 8);
Platform.display = lcd;
PlatformFramebuffer = lcd->m_framebuffer;
FltkKbd * kbd = new FltkKbd(margin,FRAMEBUFFER_HEIGHT+3*margin,FRAMEBUFFER_WIDTH,120);
Platform.keyboard = kbd;
ion_key_states = kbd->m_keyStates;
sKeyboard = new FltkKbd(margin,FRAMEBUFFER_HEIGHT+3*margin,FRAMEBUFFER_WIDTH,120);
window->end();
window->show(NULL, NULL);
//Fl::run();
}
void ion_set_pixel(uint8_t x, uint8_t y, uint8_t color) {
assert(x <= FRAMEBUFFER_WIDTH);
assert(y <= FRAMEBUFFER_HEIGHT);
char * byte = (char *)(FRAMEBUFFER_ADDRESS) + ((y*FRAMEBUFFER_WIDTH)+x);
*byte = color;
}
bool ion_key_down(ion_key_t key) {
return sKeyboard->key_down(key);
}
void ion_sleep() {
usleep(1000);
Platform.display->redraw();
sDisplay->redraw();
Fl::wait();
}

6
ion/src/simulator/init.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef ION_SIMULATOR_PLATFORM_INIT_H
#define ION_SIMULATOR_PLATFORM_INIT_H
void init_platform();
#endif

View File

@@ -0,0 +1,12 @@
#include "fltkkbd.h"
FltkKbd::FltkKbd(int x, int y, int w, int h) : Fl_Group(x, y, w, h) {
for (int k=0; k<ION_NUMBER_OF_KEYS; k++) {
m_buttons[k] = new Fl_Button(x+(k*w)/ION_NUMBER_OF_KEYS, y, w/ION_NUMBER_OF_KEYS, h);
}
end();
}
bool FltkKbd::key_down(ion_key_t key) {
return m_buttons[key]->value();
}

View File

@@ -2,6 +2,7 @@
#define ION_FLTK_KBD
#include <FL/Fl_Group.H>
#include <FL/Fl_Button.H>
extern "C" {
#include <ion/keyboard.h>
}
@@ -9,7 +10,9 @@ extern "C" {
class FltkKbd : public Fl_Group {
public:
FltkKbd(int x, int y, int w, int h);
bool m_keyStates[ION_NUMBER_OF_KEYS];
bool key_down(ion_key_t key);
private:
Fl_Button * m_buttons[ION_NUMBER_OF_KEYS];
};
#endif

View File

@@ -1,4 +0,0 @@
#include "platform.h"
platform_t Platform;
void * PlatformFramebuffer;

View File

@@ -1,17 +0,0 @@
#ifndef ION_SIMULATOR_PLATFORM_H
#define ION_SIMULATOR_PLATFORM_H
#include <ion/drivers/fltklcd/fltklcd.h>
#include <ion/drivers/fltkkbd/fltkkbd.h>
extern "C" {
#include "framebuffer.h"
}
typedef struct {
FltkLCD * display;
FltkKbd * keyboard;
} platform_t;
extern platform_t Platform;
#endif