Subversion Repositories HelenOS

Rev

Rev 4055 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4055 Rev 4156
Line 41... Line 41...
41
#include <ipc/ipc.h>
41
#include <ipc/ipc.h>
42
#include <ipc/ns.h>
42
#include <ipc/ns.h>
43
#include <ipc/fb.h>
43
#include <ipc/fb.h>
44
#include <ipc/services.h>
44
#include <ipc/services.h>
45
#include <ipc/console.h>
45
#include <ipc/console.h>
-
 
46
#include <console.h>
46
#include <kbd/kbd.h>
47
#include <kbd/kbd.h>
47
#include <unistd.h>
48
#include <unistd.h>
48
#include <async.h>
49
#include <async.h>
49
#include <sys/types.h>
50
#include <sys/types.h>
50
 
51
 
51
static int console_phone = -1;
-
 
52
 
-
 
53
ssize_t write_stderr(const void *buf, size_t count)
52
ssize_t write_stderr(const void *buf, size_t count)
54
{
53
{
55
    return count;
54
    return count;
56
}
55
}
57
 
56
 
58
ssize_t read_stdin(void *buf, size_t count)
57
ssize_t read_stdin(void *buf, size_t count)
59
{
58
{
60
    open_console();
59
    int cons_phone = console_phone_get();
-
 
60
 
61
    if (console_phone >= 0) {
61
    if (cons_phone >= 0) {
62
        kbd_event_t ev;
62
        kbd_event_t ev;
63
        int rc;
63
        int rc;
64
        size_t i = 0;
64
        size_t i = 0;
65
   
65
   
66
        while (i < count) {
66
        while (i < count) {
Line 77... Line 77...
77
    }
77
    }
78
}
78
}
79
 
79
 
80
ssize_t write_stdout(const void *buf, size_t count)
80
ssize_t write_stdout(const void *buf, size_t count)
81
{
81
{
82
    open_console();
82
    int cons_phone = console_phone_get();
-
 
83
 
83
    if (console_phone >= 0) {
84
    if (cons_phone >= 0) {
84
        int i;
85
        int i;
85
   
86
 
86
        for (i = 0; i < count; i++)
87
        for (i = 0; i < count; i++)
87
            async_msg_1(console_phone, CONSOLE_PUTCHAR,
-
 
88
                ((const char *) buf)[i]);
88
            console_putchar(((const char *) buf)[i]);
89
       
89
 
90
        return count;
90
        return count;
91
    } else
91
    } else
92
        return __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, count);
92
        return __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, count);
93
}
93
}
94
 
94
 
95
void open_console(void)
-
 
96
{
-
 
97
    if (console_phone < 0) {
-
 
98
        int phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0, 0);
-
 
99
        if (phone >= 0)
-
 
100
            console_phone = phone;
-
 
101
    }
-
 
102
}
-
 
103
 
-
 
104
void close_console(void)
-
 
105
{
-
 
106
    if (console_phone >= 0) {
-
 
107
        if (ipc_hangup(console_phone) == 0) {
-
 
108
            console_phone = -1;
-
 
109
        }
-
 
110
    }
-
 
111
}
-
 
112
 
-
 
113
void klog_update(void)
95
void klog_update(void)
114
{
96
{
115
    (void) __SYSCALL3(SYS_KLOG, 1, NULL, 0);
97
    (void) __SYSCALL3(SYS_KLOG, 1, NULL, 0);
116
}
98
}
117
 
99
 
118
int get_console_phone(void)
-
 
119
{
-
 
120
    if (console_phone < 0)
-
 
121
        console_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_CONSOLE, 0, 0);
-
 
122
   
-
 
123
    return console_phone;
-
 
124
}
-
 
125
 
-
 
126
void console_wait(void)
-
 
127
{
-
 
128
    while (console_phone < 0)
-
 
129
        get_console_phone();
-
 
130
}
-
 
131
 
-
 
132
/** @}
100
/** @}
133
 */
101
 */