Subversion Repositories freemyipod

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 14
Line 23... Line 23...
23
 
23
 
24
#include "global.h"
24
#include "global.h"
25
#include "console.h"
25
#include "console.h"
26
#include "lcdconsole.h"
26
#include "lcdconsole.h"
27
#include "format.h"
27
#include "format.h"
-
 
28
#include "thread.h"
28
#include <stdio.h>
29
#include <stdio.h>
29
#include <stdarg.h>
30
#include <stdarg.h>
30
#include <stdbool.h>
31
#include <stdbool.h>
31
#include <limits.h>
32
#include <limits.h>
32
 
33
 
Line 36... Line 37...
36
    unsigned int consoles;
37
    unsigned int consoles;
37
    size_t bytes;
38
    size_t bytes;
38
};
39
};
39
 
40
 
40
 
41
 
-
 
42
struct mutex console_mutex;
-
 
43
 
-
 
44
 
-
 
45
void console_init()
-
 
46
{
-
 
47
    mutex_init(&console_mutex);
-
 
48
}
-
 
49
 
-
 
50
void cputc_internal(unsigned int consoles, char string) ICODE_ATTR;
-
 
51
void cputc_internal(unsigned int consoles, char string)
-
 
52
{
-
 
53
    if (consoles & 1) lcdconsole_putc(string, 0, -1);
-
 
54
}
-
 
55
 
41
static int cprfunc(void* ptr, unsigned char letter)
56
static int cprfunc(void* ptr, unsigned char letter)
42
{
57
{
43
    struct for_cprintf* pr = (struct for_cprintf*)ptr;
58
    struct for_cprintf* pr = (struct for_cprintf*)ptr;
44
    cputc(pr->consoles, letter);
59
    cputc_internal(pr->consoles, letter);
45
    pr->bytes++;
60
    pr->bytes++;
46
    return true;
61
    return true;
47
}
62
}
48
 
63
 
49
int cprintf(unsigned int consoles, const char* fmt, ...)
64
int cprintf(unsigned int consoles, const char* fmt, ...)
Line 52... Line 67...
52
    struct for_cprintf pr;
67
    struct for_cprintf pr;
53
 
68
 
54
    pr.consoles = consoles;
69
    pr.consoles = consoles;
55
    pr.bytes = 0;
70
    pr.bytes = 0;
56
 
71
 
-
 
72
    mutex_lock(&console_mutex, TIMEOUT_BLOCK);
57
    va_start(ap, fmt);
73
    va_start(ap, fmt);
58
    format(cprfunc, &pr, fmt, ap);
74
    format(cprfunc, &pr, fmt, ap);
59
    va_end(ap);
75
    va_end(ap);
-
 
76
    mutex_unlock(&console_mutex);
60
 
77
 
61
    return pr.bytes;
78
    return pr.bytes;
62
}
79
}
63
 
80
 
64
int cvprintf(unsigned int consoles, const char* fmt, va_list ap)
81
int cvprintf(unsigned int consoles, const char* fmt, va_list ap)
Line 66... Line 83...
66
    struct for_cprintf pr;
83
    struct for_cprintf pr;
67
 
84
 
68
    pr.consoles = consoles;
85
    pr.consoles = consoles;
69
    pr.bytes = 0;
86
    pr.bytes = 0;
70
 
87
 
-
 
88
    mutex_lock(&console_mutex, TIMEOUT_BLOCK);
71
    format(cprfunc, &pr, fmt, ap);
89
    format(cprfunc, &pr, fmt, ap);
-
 
90
    mutex_unlock(&console_mutex);
72
 
91
 
73
    return pr.bytes;
92
    return pr.bytes;
74
}
93
}
75
 
94
 
76
void cputc(unsigned int consoles, char string)
95
void cputc(unsigned int consoles, char string)
77
{
96
{
-
 
97
    mutex_lock(&console_mutex, TIMEOUT_BLOCK);
78
  if (consoles & 1) lcdconsole_putc(string, 0, -1);
98
    cputc_internal(consoles, string);
-
 
99
    mutex_unlock(&console_mutex);
79
}
100
}
80
 
101
 
81
void cputs(unsigned int consoles, const char* string)
102
void cputs(unsigned int consoles, const char* string)
82
{
103
{
-
 
104
    mutex_lock(&console_mutex, TIMEOUT_BLOCK);
83
  if (consoles & 1) lcdconsole_puts(string, 0, -1);
105
    if (consoles & 1) lcdconsole_puts(string, 0, -1);
-
 
106
    mutex_unlock(&console_mutex);
84
}
107
}
85
 
108
 
86
void cflush(unsigned int consoles)
109
void cflush(unsigned int consoles)
87
{
110
{
-
 
111
    mutex_lock(&console_mutex, TIMEOUT_BLOCK);
88
  if (consoles & 1) lcdconsole_update();
112
    if (consoles & 1) lcdconsole_update();
-
 
113
    mutex_unlock(&console_mutex);
89
}
114
}