Remove VGA text mode support from libdispd.

This commit is contained in:
Jonas 'Sortie' Termansen 2014-06-11 19:24:35 +02:00
parent 0e577950c0
commit 49e2c933af
6 changed files with 10 additions and 103 deletions

View File

@ -38,8 +38,6 @@ struct dispd_framebuffer
int bpp;
int width;
int height;
bool is_vga;
bool is_rgba;
};
#if defined(__cplusplus)

View File

@ -67,31 +67,8 @@ bool dispd_detach_session(struct dispd_session* session)
return true;
}
bool dispd_session_setup_game_vga(struct dispd_session* session)
{
if ( session->is_vga )
return true;
if ( session->is_rgba )
return false;
if ( session->current_window )
return false;
struct dispmsg_get_crtc_mode msg;
msg.msgid = DISPMSG_GET_CRTC_MODE;
msg.device = session->device;
msg.connector = session->connector;
if ( dispmsg_issue(&msg, sizeof(msg)) != 0 )
return false;
if ( (session->is_vga = !(msg.mode.control & 1)) )
return true;
error(0, 0, "This program requires a VGA Text Mode buffer, but you are "
"currently using an incompatible (perhaps graphics) mode.");
return false;
}
bool dispd_session_setup_game_rgba(struct dispd_session* session)
{
if ( session->is_vga )
return false;
if ( session->is_rgba )
return true;
if ( session->current_window )

View File

@ -35,7 +35,6 @@ struct dispd_session
uint64_t device;
uint64_t connector;
struct dispd_window* current_window;
bool is_vga;
bool is_rgba;
};

View File

@ -39,23 +39,6 @@
#include "session.h"
#include "window.h"
extern "C"
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session)
{
if ( session->current_window )
return NULL;
if ( !session->is_vga )
return NULL;
size_t size = sizeof(struct dispd_window);
struct dispd_window* window = (struct dispd_window*) malloc(size);
if ( !window )
return NULL;
memset(window, 0, sizeof(*window));
window->session = session;
window->is_vga = true;
return session->current_window = window;
}
extern "C"
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session)
{
@ -69,7 +52,6 @@ struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session
return NULL;
memset(window, 0, sizeof(*window));
window->session = session;
window->is_rgba = true;
return session->current_window = window;
}
@ -105,28 +87,7 @@ static void return_buffer(struct dispd_window* window, uint8_t* b, size_t size)
window->cached_buffer_size = size;
}
static
struct dispd_framebuffer* disp_begin_render_vga(struct dispd_window* window)
{
size_t size = sizeof(struct dispd_framebuffer);
struct dispd_framebuffer* fb = (struct dispd_framebuffer*) malloc(size);
if ( !fb )
return NULL;
memset(fb, 0, sizeof(*fb));
fb->is_vga = true;
fb->window = window;
fb->width = 80;
fb->height = 25;
fb->bpp = 16;
fb->pitch = fb->width * fb->bpp / 8;
fb->datasize = fb->pitch * fb->height;
fb->data = (uint8_t*) request_buffer(window, fb->datasize);
if ( !fb->data ) { free(fb); return NULL; }
return fb;
}
static
struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
{
struct dispmsg_get_crtc_mode msg;
msg.msgid = DISPMSG_GET_CRTC_MODE;
@ -140,7 +101,6 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
return NULL;
memset(fb, 0, sizeof(*fb));
fb->window = window;
fb->is_rgba = true;
fb->width = msg.mode.view_xres;
fb->height = msg.mode.view_yres;
fb->bpp = 32;
@ -151,41 +111,18 @@ struct dispd_framebuffer* disp_begin_render_rgba(struct dispd_window* window)
return fb;
}
struct dispd_framebuffer* dispd_begin_render(struct dispd_window* window)
{
if ( window->is_vga )
return disp_begin_render_vga(window);
if ( window->is_rgba )
return disp_begin_render_rgba(window);
return NULL;
}
bool dispd_finish_render(struct dispd_framebuffer* fb)
{
struct dispd_window* window = fb->window;
bool ret = false;
if ( window->is_vga )
{
int fd = open("/dev/vga", O_WRONLY);
if ( 0 <= fd )
{
if ( writeall(fd, fb->data, fb->datasize) == fb->datasize )
ret = true;
close(fd);
}
}
else if ( window->is_rgba )
{
struct dispmsg_write_memory msg;
msg.msgid = DISPMSG_WRITE_MEMORY;
msg.device = window->session->device;
msg.offset = 0;
msg.size = fb->datasize;
msg.src = fb->data;
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
ret = true;
}
struct dispmsg_write_memory msg;
msg.msgid = DISPMSG_WRITE_MEMORY;
msg.device = window->session->device;
msg.offset = 0;
msg.size = fb->datasize;
msg.src = fb->data;
if ( dispmsg_issue(&msg, sizeof(msg)) == 0 )
ret = true;
return_buffer(window, fb->data, fb->datasize);
free(fb);
return ret;
@ -203,7 +140,7 @@ size_t dispd_get_framebuffer_pitch(struct dispd_framebuffer* fb)
int dispd_get_framebuffer_format(struct dispd_framebuffer* fb)
{
return fb->is_vga ? 0 : fb->bpp;
return fb->bpp;
}
int dispd_get_framebuffer_height(struct dispd_framebuffer* fb)

View File

@ -34,8 +34,6 @@ struct dispd_window
struct dispd_session* session;
uint8_t* cached_buffer;
size_t cached_buffer_size;
bool is_vga;
bool is_rgba;
};
#if defined(__cplusplus)

View File

@ -44,10 +44,8 @@ bool dispd_initialize(int* argc, char*** argv);
struct dispd_session* dispd_attach_default_session();
bool dispd_detach_session(struct dispd_session* session);
bool dispd_session_setup_game_vga(struct dispd_session* session);
bool dispd_session_setup_game_rgba(struct dispd_session* session);
struct dispd_window* dispd_create_window_game_vga(struct dispd_session* session);
struct dispd_window* dispd_create_window_game_rgba(struct dispd_session* session);
bool dispd_destroy_window(struct dispd_window* window);