From 752ff17265f23d4fa9084368d2a90f66521a98e2 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 22 Jul 2017 16:14:14 +0200 Subject: separated video driver in a virtual video driver and a specific VGA video driver --- src/kernel/kernel.c | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'src/kernel/kernel.c') diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index d11d6c6..ae31e5a 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -21,7 +21,6 @@ #include "kernel.h" // TODO: move away from main! -#include "vga.h" #include "graphics_context.h" #include "widget.h" #include "composite_widget.h" @@ -46,7 +45,7 @@ typedef struct { driver_manager_t driver_manager; task_manager_t task_manager; memory_manager_t memory_manager; - vga_t *vga; + video_t *video; mode_t mode; keyboard_t *keyboard; mouse_t *mouse; @@ -148,7 +147,7 @@ void kernel_main( void ) // TODO: merge with the text mode vga_text_t object // TODO: introduce a graphics driver type, don't cast diretly here // TODO: also, what to do if there is more than one driver? - global_context.vga = (vga_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_VIDEO ); + global_context.video = (video_t *)driver_manager_find_driver( &global_context.driver_manager, DRIVER_TYPE_VIDEO ); puts( "Activating drivers" ); driver_manager_activate_all( &global_context.driver_manager ); @@ -330,9 +329,9 @@ static void refresh_screen( void ) interrupts_disable( ); // as vga_t is equals to the graphical context for now - ((widget_t *)&global_context.desktop)->vtable->draw( &global_context.desktop, global_context.vga ); + ((widget_t *)&global_context.desktop)->vtable->draw( &global_context.desktop, global_context.video ); - vga_refresh( global_context.vga ); + ((video_vtable_t *)( global_context.video->base.vtable))->refresh( global_context.video ); interrupts_enable( ); @@ -343,13 +342,13 @@ static void refresh_screen( void ) static void switch_to_graphics_mode( global_context_t *global_context ) { - vga_t *vga = global_context->vga; + video_t *video = global_context->video; vga_text_t *vga_text = &global_context->vga_text; mouse_t *mouse = global_context->mouse; desktop_t *desktop = &global_context->desktop; video_mode_t mode = video_make_mode( VIDEO_MODE_TYPE_GRAPHICS, 320, 200, 8 ); - if( ((video_vtable_t *)(vga->base.base.vtable))->set_mode( vga, mode ) ) { + if( ((video_vtable_t *)(video->base.vtable))->set_mode( video, mode ) ) { vga_text_save( vga_text ); desktop_init( desktop, 320, 200, VIDEO_RGB_COLOR_BLUE ); @@ -369,16 +368,16 @@ static void switch_to_graphics_mode( global_context_t *global_context ) } *p = '\0'; - window_init( &global_context->window3, (widget_t *)desktop, 55, 5, vga->mode->base.x - 65, 100, VIDEO_RGB_COLOR_CYAN ); + window_init( &global_context->window3, (widget_t *)desktop, 55, 5, video->mode->x - 65, 100, VIDEO_RGB_COLOR_CYAN ); ((composite_widget_vtable_t *)global_context->desktop.base.base.vtable)->add_child( desktop, (widget_t *)&global_context->window3 ); text_widget_init( &global_context->widget3, (widget_t *)&global_context->window3, 1, 1, global_context->window3.base.base.w - 2, global_context->window3.base.base.h - 2, VIDEO_RGB_COLOR_RED, s ); ((composite_widget_vtable_t *)global_context->window3.base.base.vtable)->add_child( (composite_widget_t *)&global_context->window3, (widget_t *)&global_context->widget3 ); - ((mouse_vtable_t *)(mouse->base.vtable))->set_resolution( mouse, vga->mode->base.x, vga->mode->base.y ); + ((mouse_vtable_t *)(mouse->base.vtable))->set_resolution( mouse, video->mode->x, video->mode->y ); // enable Z buffering - vga_use_z_buffer( global_context->vga, true ); + ((video_vtable_t *)(global_context->video->base.vtable))->use_z_buffer( global_context->video, true ); global_context->mode = MODE_GRAPHICS; } @@ -386,14 +385,14 @@ static void switch_to_graphics_mode( global_context_t *global_context ) static void switch_to_text_mode( global_context_t *global_context ) { - vga_t *vga = global_context->vga; + video_t *video = global_context->video; vga_text_t *vga_text = &global_context->vga_text; mouse_t *mouse = global_context->mouse; vga_text_restore( vga_text ); video_mode_t mode = video_make_mode( VIDEO_MODE_TYPE_TEXT, 640, 480, 4 ); - if( ((video_vtable_t *)(vga->base.base.vtable))->set_mode( vga, mode ) ) { + if( ((video_vtable_t *)(video->base.vtable))->set_mode( video, mode ) ) { vga_text_set_cursor( vga_text, vga_text->cursor_x, vga_text->cursor_y ); ((mouse_vtable_t *)(mouse->base.vtable))->set_resolution( mouse, vga_text->res_x, vga_text->res_y ); global_context->mode = MODE_TEXT; -- cgit v1.2.3-54-g00ecf