Changeset e9073f2 in mainline for console/console.c


Ignore:
Timestamp:
2006-06-05T23:02:13Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
51dbadf3
Parents:
9996ed5
Message:

Added correct disconnect handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • console/console.c

    r9996ed5 re9073f2  
    334334        int consnum;
    335335        ipcarg_t arg1, arg2;
     336        connection_t *conn;
    336337
    337338        if ((consnum = find_free_connection()) == -1) {
     
    339340                return;
    340341        }
     342        conn = &connections[consnum];
    341343       
    342344        gcons_notify_connect(consnum);
    343         connections[consnum].used = 1;
    344         connections[consnum].client_phone = IPC_GET_ARG3(call);
    345         screenbuffer_clear(&(connections[consnum].screenbuffer));
     345        conn->used = 1;
     346        conn->client_phone = IPC_GET_ARG3(call);
     347        screenbuffer_clear(&conn->screenbuffer);
    346348       
    347349        /* Accept the connection */
     
    353355                switch (IPC_GET_METHOD(call)) {
    354356                case IPC_M_PHONE_HUNGUP:
    355                         /* TODO */
     357                        gcons_notify_disconnect(consnum);
     358                        /* Answer all pending requests */
     359                        while (conn->keyrequest_counter > 0) {         
     360                                conn->keyrequest_counter--;
     361                                ipc_answer_fast(fifo_pop(conn->keyrequests), ENOENT, 0, 0);
     362                                break;
     363                        }
     364                       
     365                        /* Commit hangup */
    356366                        ipc_answer_fast(callid, 0,0,0);
    357367                        return;
     
    366376                        }
    367377                       
    368                         screenbuffer_clear(&(connections[consnum].screenbuffer));
     378                        screenbuffer_clear(&conn->screenbuffer);
    369379                       
    370380                        break;
    371381                case CONSOLE_GOTO:
    372382                       
    373                         screenbuffer_goto(&(connections[consnum].screenbuffer), IPC_GET_ARG2(call), IPC_GET_ARG1(call));
     383                        screenbuffer_goto(&conn->screenbuffer, IPC_GET_ARG2(call), IPC_GET_ARG1(call));
    374384                        if (consnum == active_console)
    375385                                curs_goto(IPC_GET_ARG1(call),IPC_GET_ARG2(call));
     
    388398                        arg1 = IPC_GET_ARG1(call);
    389399                        arg2 = IPC_GET_ARG2(call);
    390                         screenbuffer_set_style(&(connections[consnum].screenbuffer),arg1, arg2);
     400                        screenbuffer_set_style(&conn->screenbuffer,arg1, arg2);
    391401                        if (consnum == active_console)
    392402                                set_style_col(arg1, arg2);
     
    395405                case CONSOLE_CURSOR_VISIBILITY:
    396406                        arg1 = IPC_GET_ARG1(call);
    397                         connections[consnum].screenbuffer.is_cursor_visible = arg1;
     407                        conn->screenbuffer.is_cursor_visible = arg1;
    398408                        if (consnum == active_console)
    399409                                curs_visibility(arg1);
    400410                        break;
    401411                case CONSOLE_GETCHAR:
    402                         if (keybuffer_empty(&(connections[consnum].keybuffer))) {
     412                        if (keybuffer_empty(&conn->keybuffer)) {
    403413                                /* buffer is empty -> store request */
    404                                 if (connections[consnum].keyrequest_counter < MAX_KEYREQUESTS_BUFFERED) {               
    405                                         fifo_push(connections[consnum].keyrequests, callid);
    406                                         connections[consnum].keyrequest_counter++;
     414                                if (conn->keyrequest_counter < MAX_KEYREQUESTS_BUFFERED) {             
     415                                        fifo_push(conn->keyrequests, callid);
     416                                        conn->keyrequest_counter++;
    407417                                } else {
    408418                                        /* no key available and too many requests => fail */
     
    411421                                continue;
    412422                        };
    413                         keybuffer_pop(&(connections[consnum].keybuffer), (int *)&arg1);
     423                        keybuffer_pop(&conn->keybuffer, (int *)&arg1);
    414424                       
    415425                        break;
Note: See TracChangeset for help on using the changeset viewer.