| User | Revision | Line number | New contents of line |
| emh203 |
0:76427232f435
|
1
|
#include "Terminal.h"
|
| emh203 |
0:76427232f435
|
2
|
#include "DataTypes.h"
|
| emh203 |
0:76427232f435
|
3
|
#include "mbed.h"
|
| emh203 |
0:76427232f435
|
4
|
#include "MODSERIAL.h"
|
| emh203 |
0:76427232f435
|
5
|
#include "diskio.h"
|
| emh203 |
0:76427232f435
|
6
|
#include "USBHost.h"
|
| emh203 |
0:76427232f435
|
7
|
|
| emh203 |
0:76427232f435
|
8
|
//*****************************************************************
|
| emh203 |
0:76427232f435
|
9
|
//Terminal Configuration
|
| emh203 |
0:76427232f435
|
10
|
//*****************************************************************
|
| emh203 |
0:76427232f435
|
11
|
|
| emh203 |
0:76427232f435
|
12
|
#define MAX_TERMINAL_LINE_CHARS 64
|
| emh203 |
0:76427232f435
|
13
|
#define MAX_TERMINAL_CMD_CHARS 32
|
| emh203 |
0:76427232f435
|
14
|
#define TERMINAL_QUEUE_SIZE 512
|
| emh203 |
0:76427232f435
|
15
|
#define NUM_TERMINAL_CMDS 3
|
| emh203 |
0:76427232f435
|
16
|
|
| emh203 |
0:76427232f435
|
17
|
|
| emh203 |
0:76427232f435
|
18
|
MODSERIAL pc(USBTX, USBRX,TERMINAL_QUEUE_SIZE,TERMINAL_QUEUE_SIZE); // tx, rx
|
| emh203 |
0:76427232f435
|
19
|
|
| emh203 |
0:76427232f435
|
20
|
Timer DataSpeedTimer;
|
| emh203 |
0:76427232f435
|
21
|
|
| emh203 |
0:76427232f435
|
22
|
typedef void (*TerminalCallback)(char *);
|
| emh203 |
0:76427232f435
|
23
|
|
| emh203 |
0:76427232f435
|
24
|
//These are the terminal command names that map to the callbacks
|
| emh203 |
0:76427232f435
|
25
|
char *TerminalCommands[NUM_TERMINAL_CMDS] = {"help","reboot","dprobe"};
|
| emh203 |
0:76427232f435
|
26
|
|
| emh203 |
0:76427232f435
|
27
|
void TerminalCmd_Help(char *arg);
|
| emh203 |
0:76427232f435
|
28
|
void TerminalCmd_Reboot(char *arg);
|
| emh203 |
0:76427232f435
|
29
|
void TerminalCmd_dprobe(char *arg);
|
| emh203 |
0:76427232f435
|
30
|
|
| emh203 |
0:76427232f435
|
31
|
|
| emh203 |
0:76427232f435
|
32
|
//Probes a disk
|
| emh203 |
0:76427232f435
|
33
|
BOOL dprobe(BYTE Disk);
|
| emh203 |
0:76427232f435
|
34
|
void SpeedTest(BYTE Disk,DWORD SECTORS_TO_READ_WRITE);
|
| emh203 |
0:76427232f435
|
35
|
|
| emh203 |
0:76427232f435
|
36
|
|
| emh203 |
0:76427232f435
|
37
|
|
| emh203 |
0:76427232f435
|
38
|
//Populate this array with the callback functions
|
| emh203 |
0:76427232f435
|
39
|
TerminalCallback TerminalCallbacks[NUM_TERMINAL_CMDS] ={
|
| emh203 |
0:76427232f435
|
40
|
TerminalCmd_Help,
|
| emh203 |
0:76427232f435
|
41
|
TerminalCmd_Reboot,
|
| emh203 |
0:76427232f435
|
42
|
TerminalCmd_dprobe
|
| emh203 |
0:76427232f435
|
43
|
};
|
| emh203 |
0:76427232f435
|
44
|
|
| emh203 |
0:76427232f435
|
45
|
//*****************************************************************
|
| emh203 |
0:76427232f435
|
46
|
//Plumbing.....
|
| emh203 |
0:76427232f435
|
47
|
//*****************************************************************
|
| emh203 |
0:76427232f435
|
48
|
|
| emh203 |
0:76427232f435
|
49
|
|
| emh203 |
0:76427232f435
|
50
|
BYTE TerminalInQueueStore[TERMINAL_QUEUE_SIZE];
|
| emh203 |
0:76427232f435
|
51
|
BYTE TerminalOutQueueStore[TERMINAL_QUEUE_SIZE];
|
| emh203 |
0:76427232f435
|
52
|
CHAR TerminalLineBuf[MAX_TERMINAL_LINE_CHARS];
|
| emh203 |
0:76427232f435
|
53
|
BYTE TerminalPos;
|
| emh203 |
0:76427232f435
|
54
|
CHAR TerminalCmdBuf[MAX_TERMINAL_CMD_CHARS+1];
|
| emh203 |
0:76427232f435
|
55
|
CHAR TerminalArgs[MAX_TERMINAL_LINE_CHARS-MAX_TERMINAL_CMD_CHARS];
|
| emh203 |
0:76427232f435
|
56
|
BYTE NextCharIn;
|
| emh203 |
0:76427232f435
|
57
|
BOOL CmdFound;
|
| emh203 |
0:76427232f435
|
58
|
|
| emh203 |
0:76427232f435
|
59
|
void TerminalBootMsg()
|
| emh203 |
0:76427232f435
|
60
|
{
|
| emh203 |
0:76427232f435
|
61
|
|
| emh203 |
0:76427232f435
|
62
|
TERMINAL_PRINTF("\r\n\r\n");
|
| emh203 |
0:76427232f435
|
63
|
TERMINAL_PRINTF("***********************************\r\n");
|
| emh203 |
0:76427232f435
|
64
|
TERMINAL_PRINTF(" /|\r\n");
|
| emh203 |
0:76427232f435
|
65
|
TERMINAL_PRINTF(" ____ __ -- |\r\n");
|
| emh203 |
0:76427232f435
|
66
|
TERMINAL_PRINTF(" (___ \\ \\ \\ _|_\r\n");
|
| emh203 |
0:76427232f435
|
67
|
TERMINAL_PRINTF(" __) )______\\ \\ \r\n");
|
| emh203 |
0:76427232f435
|
68
|
TERMINAL_PRINTF(" / __/( __ )> \\ \r\n");
|
| emh203 |
0:76427232f435
|
69
|
TERMINAL_PRINTF(" | |___ | || |/ ^ \\ \r\n");
|
| emh203 |
0:76427232f435
|
70
|
TERMINAL_PRINTF(" |_____)|_||_/_/ \\_\\ \r\n");
|
| emh203 |
0:76427232f435
|
71
|
TERMINAL_PRINTF(" \r\n");
|
| emh203 |
0:76427232f435
|
72
|
TERMINAL_PRINTF("Active Pickguard \r\n");
|
| emh203 |
0:76427232f435
|
73
|
TERMINAL_PRINTF("Copyright (C) <2011> Eli Hughes\r\n");
|
| emh203 |
0:76427232f435
|
74
|
TERMINAL_PRINTF("Wavenumber LLC\r\n");
|
| emh203 |
0:76427232f435
|
75
|
TERMINAL_PRINTF("***********************************\r\n\r\n>");
|
| emh203 |
0:76427232f435
|
76
|
|
| emh203 |
0:76427232f435
|
77
|
}
|
| emh203 |
0:76427232f435
|
78
|
|
| emh203 |
0:76427232f435
|
79
|
void InitTerminal()
|
| emh203 |
0:76427232f435
|
80
|
{
|
| emh203 |
0:76427232f435
|
81
|
TerminalBootMsg();
|
| emh203 |
0:76427232f435
|
82
|
}
|
| emh203 |
0:76427232f435
|
83
|
|
| emh203 |
0:76427232f435
|
84
|
void TerminalCmd_Help(char *arg)
|
| emh203 |
0:76427232f435
|
85
|
{
|
| emh203 |
0:76427232f435
|
86
|
BYTE i;
|
| emh203 |
0:76427232f435
|
87
|
|
| emh203 |
0:76427232f435
|
88
|
TERMINAL_PRINTF("\r\n\r\bCommandList:\r\n");
|
| emh203 |
0:76427232f435
|
89
|
TERMINAL_PRINTF("----------------------\r\n");
|
| emh203 |
0:76427232f435
|
90
|
|
| emh203 |
0:76427232f435
|
91
|
for(i=0;i<NUM_TERMINAL_CMDS;i++)
|
| emh203 |
0:76427232f435
|
92
|
{
|
| emh203 |
0:76427232f435
|
93
|
TERMINAL_PRINTF("%s\r\n",TerminalCommands[i]);
|
| emh203 |
0:76427232f435
|
94
|
}
|
| emh203 |
0:76427232f435
|
95
|
|
| emh203 |
0:76427232f435
|
96
|
}
|
| emh203 |
0:76427232f435
|
97
|
|
| emh203 |
0:76427232f435
|
98
|
void TerminalCmd_Reboot(char *arg)
|
| emh203 |
0:76427232f435
|
99
|
{
|
| emh203 |
0:76427232f435
|
100
|
TerminalBootMsg();
|
| emh203 |
0:76427232f435
|
101
|
}
|
| emh203 |
0:76427232f435
|
102
|
|
| emh203 |
0:76427232f435
|
103
|
void TerminalCmd_dprobe(char *arg)
|
| emh203 |
0:76427232f435
|
104
|
{
|
| emh203 |
0:76427232f435
|
105
|
if(strcmp(arg,"CF") == 0)
|
| emh203 |
0:76427232f435
|
106
|
{
|
| emh203 |
0:76427232f435
|
107
|
if(dprobe(COMPACT_FLASH)==TRUE)
|
| emh203 |
0:76427232f435
|
108
|
SpeedTest(COMPACT_FLASH,4096);
|
| emh203 |
0:76427232f435
|
109
|
}
|
| emh203 |
0:76427232f435
|
110
|
else if (strcmp(arg,"USB") == 0)
|
| emh203 |
0:76427232f435
|
111
|
{
|
| emh203 |
0:76427232f435
|
112
|
if(dprobe(USB)==TRUE)
|
| emh203 |
0:76427232f435
|
113
|
SpeedTest(USB,256);
|
| emh203 |
0:76427232f435
|
114
|
}
|
| emh203 |
0:76427232f435
|
115
|
else if (strcmp(arg,"RAM") == 0)
|
| emh203 |
0:76427232f435
|
116
|
{
|
| emh203 |
0:76427232f435
|
117
|
|
| emh203 |
0:76427232f435
|
118
|
if(dprobe(RAM)==TRUE)
|
| emh203 |
0:76427232f435
|
119
|
SpeedTest(RAM,8192);
|
| emh203 |
0:76427232f435
|
120
|
}
|
| emh203 |
0:76427232f435
|
121
|
else
|
| emh203 |
0:76427232f435
|
122
|
{
|
| emh203 |
0:76427232f435
|
123
|
TERMINAL_PRINTF("\r\nUsage: dprobe DISK\r\n\r\nDISK can be CF, USB or RAM\r\n");
|
| emh203 |
0:76427232f435
|
124
|
}
|
| emh203 |
0:76427232f435
|
125
|
}
|
| emh203 |
0:76427232f435
|
126
|
|
| emh203 |
0:76427232f435
|
127
|
|
| emh203 |
0:76427232f435
|
128
|
void ProcessTerminal()
|
| emh203 |
0:76427232f435
|
129
|
{
|
| emh203 |
0:76427232f435
|
130
|
BYTE i,j;
|
| emh203 |
0:76427232f435
|
131
|
BOOL ArgsFound;
|
| emh203 |
0:76427232f435
|
132
|
|
| emh203 |
0:76427232f435
|
133
|
if(TERMINAL_READABLE)
|
| emh203 |
0:76427232f435
|
134
|
{
|
| emh203 |
0:76427232f435
|
135
|
NextCharIn = TERMINAL_GETC;
|
| emh203 |
0:76427232f435
|
136
|
|
| emh203 |
0:76427232f435
|
137
|
switch(NextCharIn)
|
| emh203 |
0:76427232f435
|
138
|
{
|
| emh203 |
0:76427232f435
|
139
|
case '\r':
|
| emh203 |
0:76427232f435
|
140
|
|
| emh203 |
0:76427232f435
|
141
|
TerminalLineBuf[TerminalPos++] = 0x0;
|
| emh203 |
0:76427232f435
|
142
|
TERMINAL_PUTC(NextCharIn);
|
| emh203 |
0:76427232f435
|
143
|
|
| emh203 |
0:76427232f435
|
144
|
if(TerminalPos > 1)
|
| emh203 |
0:76427232f435
|
145
|
{
|
| emh203 |
0:76427232f435
|
146
|
//find the command
|
| emh203 |
0:76427232f435
|
147
|
i=0;
|
| emh203 |
0:76427232f435
|
148
|
while(TerminalLineBuf[i]>0x20 && TerminalLineBuf[i]<0x7f)
|
| emh203 |
0:76427232f435
|
149
|
{
|
| emh203 |
0:76427232f435
|
150
|
TerminalCmdBuf[i] = TerminalLineBuf[i];
|
| emh203 |
0:76427232f435
|
151
|
i++;
|
| emh203 |
0:76427232f435
|
152
|
|
| emh203 |
0:76427232f435
|
153
|
if(i==MAX_TERMINAL_CMD_CHARS)
|
| emh203 |
0:76427232f435
|
154
|
{
|
| emh203 |
0:76427232f435
|
155
|
break;
|
| emh203 |
0:76427232f435
|
156
|
}
|
| emh203 |
0:76427232f435
|
157
|
}
|
| emh203 |
0:76427232f435
|
158
|
|
| emh203 |
0:76427232f435
|
159
|
TerminalCmdBuf[i] = 0;
|
| emh203 |
0:76427232f435
|
160
|
TerminalCmdBuf[i+1] = 0;
|
| emh203 |
0:76427232f435
|
161
|
|
| emh203 |
0:76427232f435
|
162
|
|
| emh203 |
0:76427232f435
|
163
|
ArgsFound = TRUE;
|
| emh203 |
0:76427232f435
|
164
|
memset(TerminalArgs,0x00,sizeof(TerminalArgs));
|
| emh203 |
0:76427232f435
|
165
|
//scan for num terminator or next non whitespace
|
| emh203 |
0:76427232f435
|
166
|
while(TerminalLineBuf[i]<=0x20 && (i<MAX_TERMINAL_LINE_CHARS))
|
| emh203 |
0:76427232f435
|
167
|
{
|
| emh203 |
0:76427232f435
|
168
|
if(TerminalLineBuf[i] == 0x00)
|
| emh203 |
0:76427232f435
|
169
|
{
|
| emh203 |
0:76427232f435
|
170
|
|
| emh203 |
0:76427232f435
|
171
|
//if we find a NULL terminator before a non whitespace character they flag for no arguments
|
| emh203 |
0:76427232f435
|
172
|
ArgsFound = FALSE;
|
| emh203 |
0:76427232f435
|
173
|
break;
|
| emh203 |
0:76427232f435
|
174
|
}
|
| emh203 |
0:76427232f435
|
175
|
i++;
|
| emh203 |
0:76427232f435
|
176
|
}
|
| emh203 |
0:76427232f435
|
177
|
|
| emh203 |
0:76427232f435
|
178
|
if(ArgsFound == TRUE)
|
| emh203 |
0:76427232f435
|
179
|
{
|
| emh203 |
0:76427232f435
|
180
|
strcpy(TerminalArgs,&TerminalLineBuf[i]);
|
| emh203 |
0:76427232f435
|
181
|
|
| emh203 |
0:76427232f435
|
182
|
//trim trailing whitespace
|
| emh203 |
0:76427232f435
|
183
|
i = sizeof(TerminalArgs)-1;
|
| emh203 |
0:76427232f435
|
184
|
|
| emh203 |
0:76427232f435
|
185
|
while((TerminalArgs[i]<0x21) && (i>0))
|
| emh203 |
0:76427232f435
|
186
|
{
|
| emh203 |
0:76427232f435
|
187
|
TerminalArgs[i]= 0x00;
|
| emh203 |
0:76427232f435
|
188
|
i--;
|
| emh203 |
0:76427232f435
|
189
|
}
|
| emh203 |
0:76427232f435
|
190
|
}
|
| emh203 |
0:76427232f435
|
191
|
|
| emh203 |
0:76427232f435
|
192
|
CmdFound = FALSE;
|
| emh203 |
0:76427232f435
|
193
|
for(j=0;j<NUM_TERMINAL_CMDS;j++)
|
| emh203 |
0:76427232f435
|
194
|
{
|
| emh203 |
0:76427232f435
|
195
|
if(strcmp(TerminalCmdBuf,TerminalCommands[j]) == 0)
|
| emh203 |
0:76427232f435
|
196
|
{
|
| emh203 |
0:76427232f435
|
197
|
TERMINAL_PRINTF("\r\n");
|
| emh203 |
0:76427232f435
|
198
|
if(TerminalCallbacks[j] != NULL)
|
| emh203 |
0:76427232f435
|
199
|
TerminalCallbacks[j](TerminalArgs);
|
| emh203 |
0:76427232f435
|
200
|
|
| emh203 |
0:76427232f435
|
201
|
CmdFound = TRUE;
|
| emh203 |
0:76427232f435
|
202
|
break;
|
| emh203 |
0:76427232f435
|
203
|
}
|
| emh203 |
0:76427232f435
|
204
|
}
|
| emh203 |
0:76427232f435
|
205
|
if(CmdFound == FALSE)
|
| emh203 |
0:76427232f435
|
206
|
{
|
| emh203 |
0:76427232f435
|
207
|
TERMINAL_PRINTF("\r\n%s command not recognized.\r\n",TerminalCmdBuf);
|
| emh203 |
0:76427232f435
|
208
|
}
|
| emh203 |
0:76427232f435
|
209
|
}
|
| emh203 |
0:76427232f435
|
210
|
TERMINAL_PRINTF("\r\n>");
|
| emh203 |
0:76427232f435
|
211
|
TerminalPos = 0;
|
| emh203 |
0:76427232f435
|
212
|
|
| emh203 |
0:76427232f435
|
213
|
break;
|
| emh203 |
0:76427232f435
|
214
|
|
| emh203 |
0:76427232f435
|
215
|
case '\b':
|
| emh203 |
0:76427232f435
|
216
|
if(TerminalPos > 0)
|
| emh203 |
0:76427232f435
|
217
|
{
|
| emh203 |
0:76427232f435
|
218
|
TerminalPos--;
|
| emh203 |
0:76427232f435
|
219
|
TERMINAL_PUTC(NextCharIn);
|
| emh203 |
0:76427232f435
|
220
|
}
|
| emh203 |
0:76427232f435
|
221
|
break;
|
| emh203 |
0:76427232f435
|
222
|
|
| emh203 |
0:76427232f435
|
223
|
default:
|
| emh203 |
0:76427232f435
|
224
|
|
| emh203 |
0:76427232f435
|
225
|
if(TerminalPos == 0 && NextCharIn == 0x020)
|
| emh203 |
0:76427232f435
|
226
|
{
|
| emh203 |
0:76427232f435
|
227
|
//Do nothing if space bar is pressed at beginning of line
|
| emh203 |
0:76427232f435
|
228
|
}
|
| emh203 |
0:76427232f435
|
229
|
else if(NextCharIn >= 0x20 && NextCharIn<0x7F)
|
| emh203 |
0:76427232f435
|
230
|
{
|
| emh203 |
0:76427232f435
|
231
|
|
| emh203 |
0:76427232f435
|
232
|
if(TerminalPos < MAX_TERMINAL_LINE_CHARS-1)
|
| emh203 |
0:76427232f435
|
233
|
{
|
| emh203 |
0:76427232f435
|
234
|
TerminalLineBuf[TerminalPos++] = NextCharIn;
|
| emh203 |
0:76427232f435
|
235
|
TERMINAL_PUTC(NextCharIn);
|
| emh203 |
0:76427232f435
|
236
|
}
|
| emh203 |
0:76427232f435
|
237
|
}
|
| emh203 |
0:76427232f435
|
238
|
|
| emh203 |
0:76427232f435
|
239
|
break;
|
| emh203 |
0:76427232f435
|
240
|
|
| emh203 |
0:76427232f435
|
241
|
}
|
| emh203 |
0:76427232f435
|
242
|
}
|
| emh203 |
0:76427232f435
|
243
|
|
| emh203 |
0:76427232f435
|
244
|
}
|
| emh203 |
0:76427232f435
|
245
|
|
| emh203 |
0:76427232f435
|
246
|
|
| emh203 |
0:76427232f435
|
247
|
|
| emh203 |
0:76427232f435
|
248
|
BYTE DataBuf[512];
|
| emh203 |
0:76427232f435
|
249
|
BYTE DataBufCheck[512];
|
| emh203 |
0:76427232f435
|
250
|
|
| emh203 |
0:76427232f435
|
251
|
void SpeedTest(BYTE Disk, DWORD SECTORS_TO_READ_WRITE)
|
| emh203 |
0:76427232f435
|
252
|
{
|
| emh203 |
0:76427232f435
|
253
|
|
| emh203 |
0:76427232f435
|
254
|
float DataWriteSpeed = 0;
|
| emh203 |
0:76427232f435
|
255
|
float DataReadSpeed = 0;
|
| emh203 |
0:76427232f435
|
256
|
float DataReadWriteSpeed = 0;
|
| emh203 |
0:76427232f435
|
257
|
int i,j,k;
|
| emh203 |
0:76427232f435
|
258
|
|
| emh203 |
0:76427232f435
|
259
|
|
| emh203 |
0:76427232f435
|
260
|
TERMINAL_PRINTF("\r\nData write test started...\r\n",DataReadSpeed);
|
| emh203 |
0:76427232f435
|
261
|
DataSpeedTimer.reset();
|
| emh203 |
0:76427232f435
|
262
|
DataSpeedTimer.start();
|
| emh203 |
0:76427232f435
|
263
|
|
| emh203 |
0:76427232f435
|
264
|
for(i=0;i<SECTORS_TO_READ_WRITE;i++)
|
| emh203 |
0:76427232f435
|
265
|
{
|
| emh203 |
0:76427232f435
|
266
|
USBLoop();
|
| emh203 |
0:76427232f435
|
267
|
if(disk_write (Disk,&DataBuf[0],i,1) == RES_ERROR)
|
| emh203 |
0:76427232f435
|
268
|
{
|
| emh203 |
0:76427232f435
|
269
|
TERMINAL_PRINTF("Error writing test block %d, stopping.\r\n", i);
|
| emh203 |
0:76427232f435
|
270
|
return;
|
| emh203 |
0:76427232f435
|
271
|
}
|
| emh203 |
0:76427232f435
|
272
|
}
|
| emh203 |
0:76427232f435
|
273
|
DataSpeedTimer.stop();
|
| emh203 |
0:76427232f435
|
274
|
|
| emh203 |
0:76427232f435
|
275
|
DataWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
|
| emh203 |
0:76427232f435
|
276
|
|
| emh203 |
0:76427232f435
|
277
|
TERMINAL_PRINTF("Data write speed %.1f kb/s\r\n\r\n",DataWriteSpeed);
|
| emh203 |
0:76427232f435
|
278
|
TERMINAL_PRINTF("Data read test started...\r\n",DataReadSpeed);
|
| emh203 |
0:76427232f435
|
279
|
|
| emh203 |
0:76427232f435
|
280
|
DataSpeedTimer.reset();
|
| emh203 |
0:76427232f435
|
281
|
DataSpeedTimer.start();
|
| emh203 |
0:76427232f435
|
282
|
for(i=0;i<SECTORS_TO_READ_WRITE;i++)
|
| emh203 |
0:76427232f435
|
283
|
{
|
| emh203 |
0:76427232f435
|
284
|
USBLoop();
|
| emh203 |
0:76427232f435
|
285
|
if(disk_read ( Disk,&DataBuf[0],i,1) == RES_ERROR)
|
| emh203 |
0:76427232f435
|
286
|
{
|
| emh203 |
0:76427232f435
|
287
|
|
| emh203 |
0:76427232f435
|
288
|
TERMINAL_PRINTF("Error reading test block %d, stopping.\r\n", i);
|
| emh203 |
0:76427232f435
|
289
|
return;
|
| emh203 |
0:76427232f435
|
290
|
}
|
| emh203 |
0:76427232f435
|
291
|
}
|
| emh203 |
0:76427232f435
|
292
|
DataSpeedTimer.stop();
|
| emh203 |
0:76427232f435
|
293
|
|
| emh203 |
0:76427232f435
|
294
|
DataReadSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
|
| emh203 |
0:76427232f435
|
295
|
TERMINAL_PRINTF("Data read speed %.1f kb/s\r\r\n\n",DataReadSpeed);
|
| emh203 |
0:76427232f435
|
296
|
TERMINAL_PRINTF("Data read/write test started...\r\n",DataReadSpeed);
|
| emh203 |
0:76427232f435
|
297
|
|
| emh203 |
0:76427232f435
|
298
|
DataSpeedTimer.reset();
|
| emh203 |
0:76427232f435
|
299
|
DataSpeedTimer.start();
|
| emh203 |
0:76427232f435
|
300
|
|
| emh203 |
0:76427232f435
|
301
|
for(j=0;j<SECTORS_TO_READ_WRITE;j++)
|
| emh203 |
0:76427232f435
|
302
|
{
|
| emh203 |
0:76427232f435
|
303
|
|
| emh203 |
0:76427232f435
|
304
|
USBLoop();
|
| emh203 |
0:76427232f435
|
305
|
for(i=0;i<512;i++)
|
| emh203 |
0:76427232f435
|
306
|
{
|
| emh203 |
0:76427232f435
|
307
|
DataBuf[i] = rand();
|
| emh203 |
0:76427232f435
|
308
|
DataBufCheck[i] = 0;
|
| emh203 |
0:76427232f435
|
309
|
}
|
| emh203 |
0:76427232f435
|
310
|
|
| emh203 |
0:76427232f435
|
311
|
if(disk_write (Disk,&DataBuf[0],j,1) == RES_ERROR)
|
| emh203 |
0:76427232f435
|
312
|
{
|
| emh203 |
0:76427232f435
|
313
|
TERMINAL_PRINTF("Error writing test block %d, stopping.\r\n", i);
|
| emh203 |
0:76427232f435
|
314
|
return;
|
| emh203 |
0:76427232f435
|
315
|
}
|
| emh203 |
0:76427232f435
|
316
|
|
| emh203 |
0:76427232f435
|
317
|
if(disk_read (Disk,&DataBufCheck[0],j,1) == RES_ERROR)
|
| emh203 |
0:76427232f435
|
318
|
{
|
| emh203 |
0:76427232f435
|
319
|
TERMINAL_PRINTF("Error reading test block %d, stopping.\r\n", i);
|
| emh203 |
0:76427232f435
|
320
|
return;
|
| emh203 |
0:76427232f435
|
321
|
}
|
| emh203 |
0:76427232f435
|
322
|
|
| emh203 |
0:76427232f435
|
323
|
|
| emh203 |
0:76427232f435
|
324
|
for(i=0;i<512;i++)
|
| emh203 |
0:76427232f435
|
325
|
{
|
| emh203 |
0:76427232f435
|
326
|
if(DataBuf[i]!=DataBufCheck[i])
|
| emh203 |
0:76427232f435
|
327
|
{
|
| emh203 |
0:76427232f435
|
328
|
TERMINAL_PRINTF("Readback failure on test block %d byte %d\r\n",j,i);
|
| emh203 |
0:76427232f435
|
329
|
|
| emh203 |
0:76427232f435
|
330
|
for(k=0;k<512;k++)
|
| emh203 |
0:76427232f435
|
331
|
{
|
| emh203 |
0:76427232f435
|
332
|
TERMINAL_PRINTF("k:%d Wrote: %d Read: %d\r\n",k,DataBuf[k],DataBufCheck[k]);
|
| emh203 |
0:76427232f435
|
333
|
break;
|
| emh203 |
0:76427232f435
|
334
|
}
|
| emh203 |
0:76427232f435
|
335
|
return;
|
| emh203 |
0:76427232f435
|
336
|
}
|
| emh203 |
0:76427232f435
|
337
|
}
|
| emh203 |
0:76427232f435
|
338
|
}
|
| emh203 |
0:76427232f435
|
339
|
DataSpeedTimer.stop();
|
| emh203 |
0:76427232f435
|
340
|
|
| emh203 |
0:76427232f435
|
341
|
DataReadWriteSpeed = (((SECTORS_TO_READ_WRITE * 512.0)/1024.0))/(DataSpeedTimer.read());
|
| emh203 |
0:76427232f435
|
342
|
TERMINAL_PRINTF("Data read/write speed %.1f kb/s\r\n",DataReadWriteSpeed);
|
| emh203 |
0:76427232f435
|
343
|
}
|
| emh203 |
0:76427232f435
|
344
|
|
| emh203 |
0:76427232f435
|
345
|
BOOL dprobe(BYTE Disk)
|
| emh203 |
0:76427232f435
|
346
|
{
|
| emh203 |
0:76427232f435
|
347
|
DWORD NumSectors;
|
| emh203 |
0:76427232f435
|
348
|
CHAR ModelName[41] = {0};
|
| emh203 |
0:76427232f435
|
349
|
CHAR SerialNumber[21] = {0};
|
| emh203 |
0:76427232f435
|
350
|
CHAR FirmwareVerion[9] = {0};
|
| emh203 |
0:76427232f435
|
351
|
BOOL RetVal;
|
| emh203 |
0:76427232f435
|
352
|
|
| emh203 |
0:76427232f435
|
353
|
if(disk_status(Disk)&STA_NODISK)
|
| emh203 |
0:76427232f435
|
354
|
{
|
| emh203 |
0:76427232f435
|
355
|
TERMINAL_PRINTF("\r\nDisk not attached");
|
| emh203 |
0:76427232f435
|
356
|
RetVal = FALSE;
|
| emh203 |
0:76427232f435
|
357
|
}
|
| emh203 |
0:76427232f435
|
358
|
else
|
| emh203 |
0:76427232f435
|
359
|
{
|
| emh203 |
0:76427232f435
|
360
|
TERMINAL_PRINTF("\r\n\r\nDisk Detected\r\n\r\n\n");
|
| emh203 |
0:76427232f435
|
361
|
if(disk_initialize(Disk)&STA_NOINIT)
|
| emh203 |
0:76427232f435
|
362
|
{
|
| emh203 |
0:76427232f435
|
363
|
TERMINAL_PRINTF("Disk Failed Initialization\r\n");
|
| emh203 |
0:76427232f435
|
364
|
RetVal = FALSE;
|
| emh203 |
0:76427232f435
|
365
|
}
|
| emh203 |
0:76427232f435
|
366
|
else
|
| emh203 |
0:76427232f435
|
367
|
{
|
| emh203 |
0:76427232f435
|
368
|
TERMINAL_PRINTF("Disk Initialization Success!\r\n");
|
| emh203 |
0:76427232f435
|
369
|
|
| emh203 |
0:76427232f435
|
370
|
|
| emh203 |
0:76427232f435
|
371
|
TERMINAL_PRINTF("Probing attached Disk\r\n");
|
| emh203 |
0:76427232f435
|
372
|
TERMINAL_PRINTF("-----------------------\r\n");
|
| emh203 |
0:76427232f435
|
373
|
|
| emh203 |
0:76427232f435
|
374
|
disk_ioctl (Disk,
|
| emh203 |
0:76427232f435
|
375
|
GET_SECTOR_COUNT,
|
| emh203 |
0:76427232f435
|
376
|
&NumSectors
|
| emh203 |
0:76427232f435
|
377
|
);
|
| emh203 |
0:76427232f435
|
378
|
disk_ioctl (Disk,
|
| emh203 |
0:76427232f435
|
379
|
ATA_GET_MODEL,
|
| emh203 |
0:76427232f435
|
380
|
ModelName
|
| emh203 |
0:76427232f435
|
381
|
);
|
| emh203 |
0:76427232f435
|
382
|
disk_ioctl (Disk,
|
| emh203 |
0:76427232f435
|
383
|
ATA_GET_REV,
|
| emh203 |
0:76427232f435
|
384
|
FirmwareVerion
|
| emh203 |
0:76427232f435
|
385
|
);
|
| emh203 |
0:76427232f435
|
386
|
disk_ioctl (Disk,
|
| emh203 |
0:76427232f435
|
387
|
ATA_GET_SN,
|
| emh203 |
0:76427232f435
|
388
|
SerialNumber
|
| emh203 |
0:76427232f435
|
389
|
);
|
| emh203 |
0:76427232f435
|
390
|
|
| emh203 |
0:76427232f435
|
391
|
|
| emh203 |
0:76427232f435
|
392
|
TERMINAL_PRINTF("Model Name: %s\r\n", ModelName);
|
| emh203 |
0:76427232f435
|
393
|
TERMINAL_PRINTF("Firmware Version: %s\r\n",FirmwareVerion);
|
| emh203 |
0:76427232f435
|
394
|
TERMINAL_PRINTF("Serial Number: %s\r\n",SerialNumber);
|
| emh203 |
0:76427232f435
|
395
|
TERMINAL_PRINTF("Number of Sectors: %d\r\n",NumSectors);
|
| emh203 |
0:76427232f435
|
396
|
RetVal = TRUE;
|
| emh203 |
0:76427232f435
|
397
|
}
|
| emh203 |
0:76427232f435
|
398
|
}
|
| emh203 |
0:76427232f435
|
399
|
|
| emh203 |
0:76427232f435
|
400
|
return RetVal;
|
| emh203 |
0:76427232f435
|
401
|
} |