Changeset 83b1d61 in mainline for fb


Ignore:
Timestamp:
2006-06-02T13:30:37Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bb51e9a8
Parents:
bd929cfb
Message:

Added mmap, munmap calls.
Added possibility to access framebuffer using shared memory.

Location:
fb
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • fb/fb.c

    rbd929cfb r83b1d61  
    4141#include <kernel/errno.h>
    4242#include <async.h>
     43
    4344#include "font-8x16.h"
    4445#include "helenos.xbm"
    4546#include "fb.h"
     47#include "main.h"
     48#include "../console/screenbuffer.h"
    4649
    4750#define DEFAULT_BGCOLOR                0x000080
     
    459462}
    460463
     464static void draw_text_data(int vp, keyfield_t *data)
     465{
     466        viewport_t *vport = &viewports[vp];
     467        int i;
     468        char c;
     469
     470        clear_port(vp);
     471        for (i=0; i < vport->cols * vport->rows; i++) {
     472                if (data[i].character == ' ') /* TODO: && data[i].style==vport->style */
     473                        continue;
     474                draw_char(vp, data[i].character, i/vport->rows, i % vport->cols);
     475        }
     476        cursor_print(vp);
     477}
     478
     479
    461480/** Function for handling connections to FB
    462481 *
     
    470489        unsigned int row,col;
    471490        char c;
     491        keyfield_t *interbuffer = NULL;
     492        size_t intersize = 0;
    472493
    473494        int vp = 0;
     
    495516                        ipc_answer_fast(callid,0,0,0);
    496517                        return; /* Exit thread */
     518                case IPC_M_AS_AREA_SEND:
     519                        /* We accept one area for data interchange */
     520                        intersize = IPC_GET_ARG2(call);
     521                        receive_comm_area(callid,&call,(void **)&interbuffer,
     522                                          sizeof(*interbuffer)*viewports[0].cols*viewports[0].rows);
     523                        continue;
     524
     525                case FB_DRAW_TEXT_DATA:
     526                        if (!interbuffer) {
     527                                retval = EINVAL;
     528                                break;
     529                        }
     530                        if (intersize < vport->cols*vport->rows*sizeof(*interbuffer)) {
     531                                retval = EINVAL;
     532                                break;
     533                        }
     534                        draw_text_data(vp, interbuffer);
     535                        retval = 0;
     536                        break;
    497537                case FB_PUTCHAR:
    498538                        c = IPC_GET_ARG1(call);
  • fb/main.c

    rbd929cfb r83b1d61  
    3131#include <sysinfo.h>
    3232#include <async.h>
     33#include <as.h>
     34#include <align.h>
     35#include <errno.h>
    3336
    3437#include "fb.h"
    3538#include "sysio.h"
    3639#include "ega.h"
     40#include "main.h"
     41
     42void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area,
     43                       size_t maxsize)
     44{
     45        void *dest;
     46
     47        if (*area) {
     48                ipc_answer_fast(callid, ELIMIT, 0, 0);
     49                return;
     50        }
     51        if (IPC_GET_ARG2(*call) > ALIGN_UP(maxsize, PAGE_SIZE)) {
     52                ipc_answer_fast(callid, EINVAL, 0, 0);
     53                return;
     54        }
     55       
     56        dest = as_get_mappable_page(maxsize);
     57        if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0)
     58                *area = dest;
     59}
    3760
    3861int main(int argc, char *argv[])
Note: See TracChangeset for help on using the changeset viewer.