Changeset 985e26d2 in mainline for uspace/srv/hid/console


Ignore:
Timestamp:
2010-01-07T19:06:59Z (16 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8190e63
Parents:
743e17b (diff), eca2435 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

Location:
uspace/srv/hid/console
Files:
2 added
19 moved

Legend:

Unmodified
Added
Removed
  • uspace/srv/hid/console/Makefile.build

    r743e17b r985e26d2  
    11#
    22# Copyright (c) 2005 Martin Decky
     3# Copyright (c) 2007 Jakub Jermar
    34# All rights reserved.
    45#
     
    3031#
    3132
    32 LIBC_PREFIX = ../../lib/libc
    33 SOFTINT_PREFIX = ../../lib/softint
    34 
     33include Makefile.common
    3534include $(LIBC_PREFIX)/Makefile.toolchain
    36 
    37 CFLAGS += -I.
    38 
    39 LIBS = $(LIBC_PREFIX)/libc.a
    4035
    4136## Sources
    4237#
    4338
    44 OUTPUT = console
    45 
    46 GENERIC_SOURCES = \
     39SOURCES = \
    4740        console.c \
    4841        screenbuffer.c \
     
    6255        gfx/anim_4.ppm
    6356
    64 GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) \
    65         $(addsuffix .o,$(basename $(IMAGES)))
     57OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) $(addsuffix .o,$(basename $(IMAGES)))
    6658
    67 OBJECTS := $(GENERIC_OBJECTS)
    68 
    69 .PHONY: all clean depend disasm
     59.PHONY: all
    7060
    7161all: $(OUTPUT) $(OUTPUT).disasm
    7262
    73 -include Makefile.depend
     63-include $(DEPEND)
    7464
    75 clean:
    76         -rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS)
    77 
    78 depend:
    79         $(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend
     65$(OUTPUT).disasm: $(OUTPUT)
     66        $(OBJDUMP) -d $< > $@
    8067
    8168$(OUTPUT): $(OBJECTS) $(LIBS)
    8269        $(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map
    8370
    84 disasm: $(OUTPUT).disasm
    85 
    86 $(OUTPUT).disasm: $(OUTPUT)
    87         $(OBJDUMP) -d $< > $@
    88 
    89 %.o: %.S
    90         $(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@
    91 
    92 %.o: %.s
    93         $(AS) $(AFLAGS) $< -o $@
    94 
    95 %.o: %.c
     71%.o: %.c $(DEPEND)
    9672        $(CC) $(DEFS) $(CFLAGS) -c $< -o $@
     73ifeq ($(PRECHECK),y)
     74        $(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS)
     75endif
    9776
    9877%.o: %.ppm
    9978        $(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) $< $@
     79
     80$(DEPEND):
     81        makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(SOURCES) > $@ 2> /dev/null
     82        -[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
  • uspace/srv/hid/console/console.c

    r743e17b r985e26d2  
    3737#include <ipc/kbd.h>
    3838#include <io/keycode.h>
     39#include <ipc/mouse.h>
    3940#include <ipc/fb.h>
    4041#include <ipc/services.h>
    4142#include <errno.h>
    42 #include <keybuffer.h>
    4343#include <ipc/console.h>
    4444#include <unistd.h>
     
    5151#include <event.h>
    5252#include <devmap.h>
    53 #include <fibril_sync.h>
     53#include <fcntl.h>
     54#include <vfs/vfs.h>
     55#include <fibril_synch.h>
    5456
    5557#include "console.h"
    5658#include "gcons.h"
     59#include "keybuffer.h"
    5760#include "screenbuffer.h"
    5861
    59 #define NAME  "console"
    60 
    61 #define MAX_DEVICE_NAME  32
     62#define NAME       "console"
     63#define NAMESPACE  "term"
    6264
    6365/** Phone to the keyboard driver. */
    6466static int kbd_phone;
     67
     68/** Phone to the mouse driver. */
     69static int mouse_phone;
    6570
    6671/** Information about framebuffer */
     
    6974        ipcarg_t cols;  /**< Framebuffer columns */
    7075        ipcarg_t rows;  /**< Framebuffer rows */
    71         int color_cap;  /**< Color capabilities (FB_CCAP_xxx) */
     76        int color_cap;  /**< Color capabilities (FB_CCAP_xxx) */
    7277} fb_info;
    7378
     
    425430}
    426431
     432/** Handler for mouse events */
     433static void mouse_events(ipc_callid_t iid, ipc_call_t *icall)
     434{
     435        int button, press;
     436        int dx, dy;
     437        int newcon;
     438
     439        /* Ignore parameters, the connection is already opened */
     440        while (true) {
     441
     442                ipc_call_t call;
     443                ipc_callid_t callid = async_get_call(&call);
     444
     445                int retval;
     446
     447                switch (IPC_GET_METHOD(call)) {
     448                case IPC_M_PHONE_HUNGUP:
     449                        /* TODO: Handle hangup */
     450                        return;
     451                case MEVENT_BUTTON:
     452                        button = IPC_GET_ARG1(call);
     453                        press = IPC_GET_ARG2(call);
     454                        if (button == 1) {
     455                                newcon = gcons_mouse_btn(press);
     456                                if (newcon != -1)
     457                                        change_console(&consoles[newcon]);
     458                        }
     459                        retval = 0;
     460                        break;
     461                case MEVENT_MOVE:
     462                        dx = IPC_GET_ARG1(call);
     463                        dy = IPC_GET_ARG2(call);
     464                        gcons_mouse_move(dx, dy);
     465                        retval = 0;
     466                        break;
     467                default:
     468                        retval = ENOENT;
     469                }
     470
     471                ipc_answer_0(callid, retval);
     472        }
     473}
     474
    427475static void cons_write(console_t *cons, ipc_callid_t rid, ipc_call_t *request)
    428476{
    429477        ipc_callid_t callid;
    430478        size_t size;
    431         if (!ipc_data_write_receive(&callid, &size)) {
     479        if (!async_data_write_receive(&callid, &size)) {
    432480                ipc_answer_0(callid, EINVAL);
    433481                ipc_answer_0(rid, EINVAL);
     
    442490        }
    443491       
    444         (void) ipc_data_write_finalize(callid, buf, size);
     492        (void) async_data_write_finalize(callid, buf, size);
    445493       
    446494        async_serialize_start();
     
    464512        ipc_callid_t callid;
    465513        size_t size;
    466         if (!ipc_data_read_receive(&callid, &size)) {
     514        if (!async_data_read_receive(&callid, &size)) {
    467515                ipc_answer_0(callid, EINVAL);
    468516                ipc_answer_0(rid, EINVAL);
     
    489537       
    490538        if (pos == size) {
    491                 (void) ipc_data_read_finalize(callid, buf, size);
     539                (void) async_data_read_finalize(callid, buf, size);
    492540                ipc_answer_1(rid, EOK, size);
    493541                free(buf);
     
    601649                                    IPC_GET_ARG2(call));
    602650                        break;
     651                case CONSOLE_GET_POS:
     652                        arg1 = cons->scr.position_x;
     653                        arg2 = cons->scr.position_y;
     654                        break;
    603655                case CONSOLE_GET_SIZE:
    604656                        arg1 = fb_info.cols;
     
    662714}
    663715
    664 static bool console_init(void)
    665 {
    666         ipcarg_t color_cap;
    667 
    668         /* Connect to keyboard driver */
    669         kbd_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_KEYBOARD, 0, 0);
     716static bool console_init(char *input)
     717{
     718        /* Connect to input device */
     719        int input_fd = open(input, O_RDONLY);
     720        if (input_fd < 0) {
     721                printf(NAME ": Failed opening %s\n", input);
     722                return false;
     723        }
     724
     725        kbd_phone = fd_phone(input_fd);
    670726        if (kbd_phone < 0) {
    671                 printf(NAME ": Failed to connect to keyboard service\n");
     727                printf(NAME ": Failed to connect to input device\n");
    672728                return false;
    673729        }
    674        
     730
     731        /* NB: The callback connection is slotted for removal */
    675732        ipcarg_t phonehash;
    676733        if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
    677                 printf(NAME ": Failed to create callback from keyboard service\n");
     734                printf(NAME ": Failed to create callback from input device\n");
    678735                return false;
    679736        }
    680        
     737
    681738        async_new_connection(phonehash, 0, NULL, keyboard_events);
     739
     740        /* Connect to mouse device */
     741        mouse_phone = -1;
     742        int mouse_fd = open("/dev/hid_in/mouse", O_RDONLY);
     743
     744        if (mouse_fd < 0) {
     745                printf(NAME ": Notice - failed opening %s\n", "/dev/hid_in/mouse");
     746                goto skip_mouse;
     747        }
     748
     749        mouse_phone = fd_phone(mouse_fd);
     750        if (mouse_phone < 0) {
     751                printf(NAME ": Failed to connect to mouse device\n");
     752                goto skip_mouse;
     753        }
     754
     755        if (ipc_connect_to_me(mouse_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) {
     756                printf(NAME ": Failed to create callback from mouse device\n");
     757                mouse_phone = -1;
     758                goto skip_mouse;
     759        }
     760
     761        async_new_connection(phonehash, 0, NULL, mouse_events);
     762skip_mouse:
    682763
    683764        /* Connect to framebuffer driver */
     
    687768                return -1;
    688769        }
    689        
     770
    690771        /* Register driver */
    691772        int rc = devmap_driver_register(NAME, client_connection);
     
    699780       
    700781        /* Synchronize, the gcons could put something in queue */
     782        ipcarg_t color_cap;
    701783        async_req_0_0(fb_info.phone, FB_FLUSH);
    702784        async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.cols, &fb_info.rows);
     
    713795       
    714796        if (interbuffer) {
    715                 if (ipc_share_out_start(fb_info.phone, interbuffer,
     797                if (async_share_out_start(fb_info.phone, interbuffer,
    716798                    AS_AREA_READ) != EOK) {
    717799                        as_area_destroy(interbuffer);
     
    736818                        consoles[i].refcount = 0;
    737819                       
    738                         char vc[MAX_DEVICE_NAME];
    739                         snprintf(vc, MAX_DEVICE_NAME, "vc%u", i);
     820                        char vc[DEVMAP_NAME_MAXLEN + 1];
     821                        snprintf(vc, DEVMAP_NAME_MAXLEN, "%s/vc%u", NAMESPACE, i);
    740822                       
    741823                        if (devmap_device_register(vc, &consoles[i].dev_handle) != EOK) {
     
    768850}
    769851
     852static void usage(void)
     853{
     854        printf("Usage: console <input>\n");
     855}
     856
    770857int main(int argc, char *argv[])
    771858{
     859        if (argc < 2) {
     860                usage();
     861                return -1;
     862        }
     863       
    772864        printf(NAME ": HelenOS Console service\n");
    773865       
    774         if (!console_init())
     866        if (!console_init(argv[1]))
    775867                return -1;
    776868       
  • uspace/srv/hid/console/gcons.c

    r743e17b r985e26d2  
    241241
    242242/** Return x, where left <= x <= right && |a-x| == min(|a-x|) is smallest */
    243 static inline int limit(size_t a, size_t left, size_t right)
     243static inline ssize_t limit(ssize_t a, ssize_t left, ssize_t right)
    244244{
    245245        if (a < left)
     
    261261        mouse_x = limit(mouse_x + dx, 0, xres);
    262262        mouse_y = limit(mouse_y + dy, 0, yres);
    263        
    264         async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
     263
     264        if (active_console != KERNEL_CONSOLE)
     265                async_msg_2(fbphone, FB_POINTER_MOVE, mouse_x, mouse_y);
    265266}
    266267
     
    339340                goto exit;
    340341       
    341         rc = ipc_share_out_start(fbphone, shm, PROTO_READ);
     342        rc = async_share_out_start(fbphone, shm, PROTO_READ);
    342343        if (rc)
    343344                goto drop;
     
    409410                goto exit;
    410411       
    411         rc = ipc_share_out_start(fbphone, shm, PROTO_READ);
     412        rc = async_share_out_start(fbphone, shm, PROTO_READ);
    412413        if (rc)
    413414                goto drop;
  • uspace/srv/hid/console/keybuffer.c

    r743e17b r985e26d2  
    3535 */
    3636
    37 #include <keybuffer.h>
    3837#include <futex.h>
     38#include "keybuffer.h"
    3939
    4040atomic_t keybuffer_futex = FUTEX_INITIALIZER;
  • uspace/srv/hid/console/screenbuffer.c

    r743e17b r985e26d2  
    3333 */
    3434
    35 #include <screenbuffer.h>
    3635#include <io/style.h>
    3736#include <malloc.h>
    3837#include <unistd.h>
     38#include "screenbuffer.h"
    3939
    4040/** Store one character to screenbuffer.
Note: See TracChangeset for help on using the changeset viewer.