Subversion Repositories freemyipod

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
881 theseven 1
#include "global.h"
2
#include "interface/console/console.h"
3
#include "lib/printf/printf.h"
4
 
5
 
6
struct console_printf_data
7
{
8
    const struct console_instance* instance;
9
    int bytes;
10
};
11
 
12
 
13
void console_init(const struct console_instance* instance)
14
{
15
    instance->driver->init(instance);
16
}
17
 
18
int console_get_width(const struct console_instance* instance)
19
{
20
    if (!instance->driver->get_width) return -1;
21
    return instance->driver->get_width(instance);
22
}
23
 
24
int console_get_height(const struct console_instance* instance)
25
{
26
    if (!instance->driver->get_height) return -1;
27
    return instance->driver->get_height(instance);
28
}
29
 
30
void console_putc(const struct console_instance* instance, char c)
31
{
32
    instance->driver->putc(instance, c);
33
}
34
 
35
void console_puts(const struct console_instance* instance, const char* str)
36
{
37
    if (instance->driver->puts) return instance->driver->puts(instance, str);
38
    while (*str) instance->driver->putc(instance, *str++);
39
}
40
 
41
void console_write(const struct console_instance* instance, const char* buf, int len)
42
{
43
    if (instance->driver->write) return instance->driver->write(instance, buf, len);
44
    while (len--) instance->driver->putc(instance, *buf++);
45
}
46
 
47
int console_getc(const struct console_instance* instance, bool block)
48
{
49
    if (!instance->driver->getc) return -2;
50
    return instance->driver->getc(instance, block);
51
}
52
 
53
void console_flush(const struct console_instance* instance)
54
{
55
    instance->driver->flush(instance);
56
}
57
 
58
static int console_prfunc(void* ptr, unsigned char c)
59
{
60
    struct console_printf_data* pr = (struct console_printf_data*)ptr;
61
    console_putc(pr->instance, c);
62
    pr->bytes++;
63
    return true;
64
}
65
 
66
int console_vprintf(const struct console_instance* instance, const char* fmt, va_list ap)
67
{
68
    struct console_printf_data pr;
69
    pr.instance = instance;
70
    pr.bytes = 0;
71
    printf_format(console_prfunc, &pr, fmt, ap);
72
    return pr.bytes;
73
}
74
 
75
int console_printf(const struct console_instance* instance, const char* fmt, ...)
76
{
77
    va_list ap;
78
    va_start(ap, fmt);
79
    int bytes = console_vprintf(instance, fmt, ap);
80
    va_end(ap);
81
    return bytes;
82
}