forked from DC-SWAT/DreamShell
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug_console.c
More file actions
159 lines (115 loc) · 2.48 KB
/
debug_console.c
File metadata and controls
159 lines (115 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/* KallistiOS ##version##
util/dsd_console.c
Copyright (C) 2011-2014 SWAT
*/
#include "ds.h"
#include <string.h>
#include <errno.h>
#include <kos/dbgio.h>
static file_t flog = 0;
static int dsd_detected() {
return 1;
}
static int dsd_init() {
return 0;
}
static int dsd_shutdown() {
return 0;
}
static int dsd_sd_init() {
if(flog == 0) {
flog = fs_open("/sd/ds.log", O_WRONLY);
}
return 0;
}
static int dsd_sd_shutdown() {
if(log > 0) {
fs_close(flog);
}
return 0;
}
static int dsd_set_irq_usage(int mode) {
return 0;
}
static int dsd_read() {
errno = EAGAIN;
return -1;
}
static int dsd_write(int c) {
//ds_printf("%c", c);
return 1;
}
static int dsd_flush() {
return 0;
}
static int dsd_write_buffer(const uint8 *data, int len, int xlat) {
ConsoleInformation *DSConsole = GetConsole();
char *ptemp, *b;
if(DSConsole != NULL && DSConsole->ConsoleLines) {
ptemp = (char*)data;
while((b = strsep(&ptemp, "\n")) != NULL) {
while(strlen(b) > DSConsole->VChars) {
CON_NewLineConsole(DSConsole);
strncpy(DSConsole->ConsoleLines[0], ptemp, DSConsole->VChars);
DSConsole->ConsoleLines[0][DSConsole->VChars] = '\0';
b = &b[DSConsole->VChars];
}
CON_NewLineConsole(DSConsole);
strncpy(DSConsole->ConsoleLines[0], b, DSConsole->VChars);
DSConsole->ConsoleLines[0][DSConsole->VChars] = '\0';
}
CON_UpdateConsole(DSConsole);
}
return len;
}
static int dsd_sd_write_buffer(const uint8 *data, int len, int xlat) {
if(flog == 0) {
dsd_sd_init();
}
if(flog < 0) {
return dsd_write_buffer(data, len, xlat);
}
return fs_write(flog, data, len);
}
static int dsd_read_buffer(uint8 * data, int len) {
errno = EAGAIN;
return -1;
}
dbgio_handler_t dbgio_ds = {
"ds",
dsd_detected,
dsd_init,
dsd_shutdown,
dsd_set_irq_usage,
dsd_read,
dsd_write,
dsd_flush,
dsd_write_buffer,
dsd_read_buffer
};
dbgio_handler_t dbgio_sd = {
"sd",
dsd_detected,
dsd_sd_init,
dsd_sd_shutdown,
dsd_set_irq_usage,
dsd_read,
dsd_write,
dsd_flush,
dsd_sd_write_buffer,
dsd_read_buffer
};
void dbgio_set_dev_ds() {
dbgio_handlers[dbgio_handler_cnt - 1] = &dbgio_ds;
dbgio_dev_select("ds");
}
void dbgio_set_dev_sd() {
dbgio_handlers[dbgio_handler_cnt - 1] = &dbgio_sd;
dbgio_dev_select("sd");
}
void dbgio_set_dev_scif() {
dbgio_dev_select("scif");
}
void dbgio_set_dev_fb() {
dbgio_dev_select("fb");
}