summaryrefslogtreecommitdiff
path: root/firmware/test/fat
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/test/fat')
-rw-r--r--firmware/test/fat/main.c124
1 files changed, 95 insertions, 29 deletions
diff --git a/firmware/test/fat/main.c b/firmware/test/fat/main.c
index b7c93f8921..708ee454c8 100644
--- a/firmware/test/fat/main.c
+++ b/firmware/test/fat/main.c
@@ -12,17 +12,17 @@ extern int ata_init(char*);
12extern void ata_read_sectors(int, int, char*); 12extern void ata_read_sectors(int, int, char*);
13 13
14void dbg_dump_sector(int sec); 14void dbg_dump_sector(int sec);
15void dbg_dump_buffer(unsigned char *buf); 15void dbg_dump_buffer(unsigned char *buf, int len);
16void dbg_console(void); 16void dbg_console(void);
17 17
18void panicf( char *fmt, ...) 18void panicf( char *fmt, ...)
19{ 19{
20 va_list ap; 20 va_list ap;
21 va_start( ap, fmt ); 21 va_start( ap, fmt );
22 printf("***PANIC*** "); 22 fprintf(stderr,"***PANIC*** ");
23 vprintf( fmt, ap ); 23 vfprintf(stderr, fmt, ap );
24 va_end( ap ); 24 va_end( ap );
25 exit(0); 25 exit(1);
26} 26}
27 27
28void dbg_dump_sector(int sec) 28void dbg_dump_sector(int sec)
@@ -31,16 +31,16 @@ void dbg_dump_sector(int sec)
31 31
32 ata_read_sectors(sec,1,buf); 32 ata_read_sectors(sec,1,buf);
33 DEBUGF("---< Sector %d >-----------------------------------------\n", sec); 33 DEBUGF("---< Sector %d >-----------------------------------------\n", sec);
34 dbg_dump_buffer(buf); 34 dbg_dump_buffer(buf, 512);
35} 35}
36 36
37void dbg_dump_buffer(unsigned char *buf) 37void dbg_dump_buffer(unsigned char *buf, int len)
38{ 38{
39 int i, j; 39 int i, j;
40 unsigned char c; 40 unsigned char c;
41 unsigned char ascii[33]; 41 unsigned char ascii[33];
42 42
43 for(i = 0;i < 512/16;i++) 43 for(i = 0;i < len/16;i++)
44 { 44 {
45 DEBUGF("%03x: ", i*16); 45 DEBUGF("%03x: ", i*16);
46 for(j = 0;j < 16;j++) 46 for(j = 0;j < 16;j++)
@@ -83,41 +83,97 @@ void dbg_dir(char* currdir)
83 } 83 }
84} 84}
85 85
86void dbg_mkfile(char* name, int num) 86#define CHUNKSIZE 8
87
88int dbg_mkfile(char* name, int num)
87{ 89{
88 char text[1024]; 90 char text[8192];
89 int i; 91 int i;
90 int fd = open(name,O_WRONLY); 92 int fd;
93 int x=0;
94
95 fd = open(name,O_WRONLY);
91 if (fd<0) { 96 if (fd<0) {
92 DEBUGF("Failed creating file\n"); 97 DEBUGF("Failed creating file\n");
93 return; 98 return -1;
94 } 99 }
95 for (i=0; i<sizeof(text)/4; i++ ) 100 num *= 1024;
96 sprintf(text+i*4,"%03x,",i); 101 while ( num ) {
102 int len = num > sizeof text ? sizeof text : num;
103
104 for (i=0; i<len/CHUNKSIZE; i++ )
105 sprintf(text+i*CHUNKSIZE,"%07x,",x++);
97 106
98 for (i=0;i<num;i++) 107 if (write(fd, text, len) < 0) {
99 if (write(fd, text, sizeof(text)) < 0)
100 DEBUGF("Failed writing data\n"); 108 DEBUGF("Failed writing data\n");
109 return -1;
110 }
111 num -= len;
112 DEBUGF("wrote %d bytes\n",len);
113 }
101 114
102 close(fd); 115 close(fd);
116 return 0;
117}
118
119int dbg_chkfile(char* name)
120{
121 char text[8192];
122 int i;
123 int x=0;
124 int block=0;
125 int fd = open(name,O_RDONLY);
126 if (fd<0) {
127 DEBUGF("Failed opening file\n");
128 return -1;
129 }
130 while (1) {
131 int rc = read(fd, text, sizeof text);
132 DEBUGF("read %d bytes\n",rc);
133 if (rc < 0) {
134 DEBUGF("Failed writing data\n");
135 return -1;
136 }
137 else {
138 char tmp[CHUNKSIZE+1];
139 if (!rc)
140 break;
141 for (i=0; i<rc/CHUNKSIZE; i++ ) {
142 sprintf(tmp,"%07x,",x++);
143 if (strncmp(text+i*CHUNKSIZE,tmp,CHUNKSIZE)) {
144 DEBUGF("Mismatch in byte %d (%.4s != %.4s)\n",
145 block*sizeof(text)+i*CHUNKSIZE, tmp,
146 text+i*CHUNKSIZE);
147 dbg_dump_buffer(text+i*CHUNKSIZE - 0x20, 0x40);
148 return -1;
149 }
150 }
151 }
152 block++;
153 }
154
155 close(fd);
156
157 return 0;
103} 158}
104 159
105void dbg_type(char* name) 160void dbg_type(char* name)
106{ 161{
107 unsigned char buf[SECTOR_SIZE*5]; 162 const int size = SECTOR_SIZE*5;
108 int i,fd,rc; 163 unsigned char buf[size+1];
164 int fd,rc;
109 165
110 fd = open(name,O_RDONLY); 166 fd = open(name,O_RDONLY);
111 if (fd<0) 167 if (fd<0)
112 return; 168 return;
113 DEBUGF("Got file descriptor %d\n",fd); 169 DEBUGF("Got file descriptor %d\n",fd);
114 170
115 for (i=0;i<5;i++) { 171 while ( 1 ) {
116 rc = read(fd, buf, SECTOR_SIZE*2/3); 172 rc = read(fd, buf, size);
117 if( rc > 0 ) 173 if( rc > 0 )
118 { 174 {
119 buf[rc]=0; 175 buf[size] = 0;
120 printf("%d: %s\n", i, buf); 176 printf("%d: %.*s\n", rc, rc, buf);
121 } 177 }
122 else if ( rc == 0 ) { 178 else if ( rc == 0 ) {
123 DEBUGF("EOF\n"); 179 DEBUGF("EOF\n");
@@ -126,6 +182,7 @@ void dbg_type(char* name)
126 else 182 else
127 { 183 {
128 DEBUGF("Failed reading file: %d\n",rc); 184 DEBUGF("Failed reading file: %d\n",rc);
185 break;
129 } 186 }
130 } 187 }
131 close(fd); 188 close(fd);
@@ -199,7 +256,7 @@ void dbg_prompt(void)
199 DEBUGF("C:%s> ", current_directory); 256 DEBUGF("C:%s> ", current_directory);
200} 257}
201 258
202void dbg_cmd(int argc, char *argv[]) 259int dbg_cmd(int argc, char *argv[])
203{ 260{
204 char* cmd = NULL; 261 char* cmd = NULL;
205 char* arg1 = NULL; 262 char* arg1 = NULL;
@@ -223,8 +280,9 @@ void dbg_cmd(int argc, char *argv[])
223 " head <file>\n" 280 " head <file>\n"
224 " tail <file>\n" 281 " tail <file>\n"
225 " mkfile <file> <size (KB)>\n" 282 " mkfile <file> <size (KB)>\n"
283 " chkfile <file>\n"
226 ); 284 );
227 return; 285 return -1;
228 } 286 }
229 287
230 if (!strcasecmp(cmd, "dir")) 288 if (!strcasecmp(cmd, "dir"))
@@ -265,11 +323,19 @@ void dbg_cmd(int argc, char *argv[])
265 { 323 {
266 if (arg1) { 324 if (arg1) {
267 if (arg2) 325 if (arg2)
268 dbg_mkfile(arg1,atoi(arg2)); 326 return dbg_mkfile(arg1,atoi(arg2));
269 else 327 else
270 dbg_mkfile(arg1,1); 328 return dbg_mkfile(arg1,1);
271 } 329 }
272 } 330 }
331
332 if (!strcasecmp(cmd, "chkfile"))
333 {
334 if (arg1)
335 return dbg_chkfile(arg1);
336 }
337
338 return 0;
273} 339}
274 340
275extern void ata_exit(void); 341extern void ata_exit(void);
@@ -295,7 +361,7 @@ int main(int argc, char *argv[])
295 rc = fat_mount(pinfo[i].start); 361 rc = fat_mount(pinfo[i].start);
296 if(rc) { 362 if(rc) {
297 DEBUGF("mount: %d",rc); 363 DEBUGF("mount: %d",rc);
298 return 0; 364 return -1;
299 } 365 }
300 break; 366 break;
301 } 367 }
@@ -303,14 +369,14 @@ int main(int argc, char *argv[])
303 if ( i==4 ) { 369 if ( i==4 ) {
304 if(fat_mount(0)) { 370 if(fat_mount(0)) {
305 DEBUGF("No FAT32 partition!"); 371 DEBUGF("No FAT32 partition!");
306 return 0; 372 return -1;
307 } 373 }
308 } 374 }
309 375
310 dbg_cmd(argc, argv); 376 rc = dbg_cmd(argc, argv);
311 377
312 ata_exit(); 378 ata_exit();
313 379
314 return 0; 380 return rc;
315} 381}
316 382