Changeset ad123964 in mainline


Ignore:
Timestamp:
2006-06-01T00:21:19Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
cf28036
Parents:
c594489
Message:

Fixed some bugs.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • console/console.c

    rc594489 rad123964  
    4545}
    4646//#define CONSOLE_COUNT VFB_CONNECTIONS
    47 #define CONSOLE_COUNT 6
     47#define CONSOLE_COUNT 8
    4848
    4949#define NAME "CONSOLE"
    5050
    51 int active_client = 0;
     51int active_console = 1;
    5252
    5353
     
    9494        int retval;
    9595        int i;
     96        char c;
    9697
    9798        /* Ignore parameters, the connection is alread opened */
     
    112113                        /*FIXME: else store key to its buffer */
    113114                        retval = 0;
    114                         i = IPC_GET_ARG1(call) & 0xff;
     115                        c = IPC_GET_ARG1(call);
     116//                      ipc_call_sync_2(connections[3].vfb_phone, FB_PUTCHAR, 0, c,NULL,NULL);
    115117                        /* switch to another virtual console */
    116                         if ((i >= KBD_KEY_F1) && (i < KBD_KEY_F1 + CONSOLE_COUNT)) {
    117                                 active_client = i - KBD_KEY_F1;
     118                        if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 + CONSOLE_COUNT)) {
     119                                active_console = c - KBD_KEY_F1;
    118120                                break;
    119121                        }
    120                         keybuffer_push(&(connections[active_client].keybuffer), i);
     122                        keybuffer_push(&(connections[active_console].keybuffer), c);
     123                       
    121124                        /* Send it to first FB, DEBUG */
    122125//                      ipc_call_async_2(connections[0].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG1(call),NULL,NULL);
    123 //                      ipc_call_sync_2(connections[0].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG1(call),NULL,NULL);
     126//                      ipc_call_sync_2(connections[4].vfb_phone, FB_PUTCHAR, 0, c,NULL,NULL);
    124127
    125128                        break;
     
    157160                        return;
    158161                case CONSOLE_PUTCHAR:
     162                        if (consnum != active_console) {
     163                        }
    159164                        /* Send message to fb */
    160                         ipc_call_async_2(connections[consnum].vfb_phone, FB_PUTCHAR, IPC_GET_ARG1(call), IPC_GET_ARG2(call), NULL, NULL);
    161                         break;
     165                        ipc_call_sync_2(connections[consnum].vfb_phone, FB_PUTCHAR, IPC_GET_ARG1(call), IPC_GET_ARG2(call), NULL, NULL);
     166//                      ipc_call_sync_2(connections[6].vfb_phone, FB_PUTCHAR, 0, IPC_GET_ARG2(call),NULL,NULL);
     167                        break;
     168                case CONSOLE_CLEAR:
     169                        break;
     170                case CONSOLE_GOTO:
     171                        break;
     172
    162173                case CONSOLE_GETCHAR:
    163174                        /* FIXME: Only temporary solution until request storage will be created  */
    164                         while (!keybuffer_pop(&(connections[active_client].keybuffer), (char *)&arg1)) {
     175                        while (keybuffer_empty(&(connections[consnum].keybuffer))) {
    165176                                /* FIXME: buffer empty -> store request */
    166                                 async_usleep(100000);
     177                                async_usleep(1000);
    167178                        };
     179                        keybuffer_pop(&(connections[consnum].keybuffer), (char *)&arg1);
     180//                      ipc_call_sync_2(connections[6].vfb_phone, FB_PUTCHAR, 0, arg1,NULL,NULL);
    168181                       
    169182                        break;
  • console/console.h

    rc594489 rad123964  
    3030#define __CONSOLE_H__
    3131
    32 #define CONSOLE_GETCHAR 1025
     32#define CONSOLE_GETCHAR 1026
    3333#define CONSOLE_PUTCHAR 1027
     34#define CONSOLE_CLEAR   1028
     35#define CONSOLE_GOTO    1029
    3436
    3537#endif
  • fb/fb.c

    rc594489 rad123964  
    141141
    142142                case FB_PUTCHAR:
     143                        fb_putchar(vfb,IPC_GET_ARG2(call));
     144                        ipc_answer_fast(callid,0,0,0);
     145                        break;
     146/*             
     147 *              case FB_CLEAR:
    143148                        ipc_answer_fast(callid,0,0,0);
    144149                        fb_putchar(vfb,IPC_GET_ARG2(call));
    145150                        break;
     151 *              case FB_GOTO:
     152                        ipc_answer_fast(callid,0,0,0);
     153                        fb_putchar(vfb,IPC_GET_ARG2(call));
     154                        break;
     155*/
    146156                default:
    147157                        ipc_answer_fast(callid,ENOENT,0,0);
  • kbd/generic/key_buffer.c

    rc594489 rad123964  
    2828
    2929#include <key_buffer.h>
     30#include <futex.h>
     31
     32atomic_t keybuffer_futex = FUTEX_INITIALIZER;
    3033
    3134/** Clear key buffer.
     
    3336void keybuffer_free(keybuffer_t *keybuffer)
    3437{
    35 
     38        futex_down(&keybuffer_futex);
     39        keybuffer->head = 0;
     40        keybuffer->tail = 0;
    3641        keybuffer->items = 0;
    37         keybuffer->head = keybuffer->tail = keybuffer->items = 0;
     42        futex_up(&keybuffer_futex);
    3843}
    3944
     
    7075void keybuffer_push(keybuffer_t *keybuffer, char key)
    7176{
     77        futex_down(&keybuffer_futex);
    7278        if (keybuffer->items < KEYBUFFER_SIZE) {
    73                 keybuffer->fifo[keybuffer->tail = (keybuffer->tail + 1) < keybuffer->items ? (keybuffer->tail + 1) : 0] = (key);
     79                keybuffer->fifo[keybuffer->tail] = key;
     80                keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE;
    7481                keybuffer->items++;
    7582        }
     83        futex_up(&keybuffer_futex);
    7684}
    7785
     
    8290int keybuffer_pop(keybuffer_t *keybuffer, char *c)
    8391{
     92        futex_down(&keybuffer_futex);
    8493        if (keybuffer->items > 0) {
    8594                keybuffer->items--;
    86                 *c = keybuffer->fifo[keybuffer->head = (keybuffer->head + 1) < keybuffer->items ? (keybuffer->head + 1) : 0];
     95                *c = keybuffer->fifo[keybuffer->head];
     96                keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE;
     97                futex_up(&keybuffer_futex);
    8798                return 1;
    8899        }
     100        futex_up(&keybuffer_futex);
    89101        return 0;
    90102}
  • kbd/include/key_buffer.h

    rc594489 rad123964  
    3232#include <types.h>
    3333
    34 #define KEYBUFFER_SIZE 128 /**< Size of buffer for pressed keys */
     34/** Size of buffer for pressed keys */
     35#define KEYBUFFER_SIZE 128
    3536
    3637typedef struct {
  • libc/generic/io/stream.c

    rc594489 rad123964  
    119119        if (console_phone < 0) {
    120120                while ((console_phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0)) < 0) {
    121                         volatile int a;
    122                         for (a = 0; a < 1048576; a++);
     121                        usleep(10000);
    123122                }
    124123        }
Note: See TracChangeset for help on using the changeset viewer.