diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-10-30 16:15:03 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-10-30 16:15:03 +0000 |
commit | b4cf6a1a0be3b76184e2c6a4551c052d8abdaa32 (patch) | |
tree | efe53508afee86708a5d3a1e72b09f1af2906bd9 /firmware/test/fat/main.c | |
parent | 56b745029b267394bd44f3f9969f0af296ec97c8 (diff) | |
download | rockbox-b4cf6a1a0be3b76184e2c6a4551c052d8abdaa32.tar.gz rockbox-b4cf6a1a0be3b76184e2c6a4551c052d8abdaa32.zip |
Remodeled as a test application
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2782 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/test/fat/main.c')
-rw-r--r-- | firmware/test/fat/main.c | 124 |
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*); | |||
12 | extern void ata_read_sectors(int, int, char*); | 12 | extern void ata_read_sectors(int, int, char*); |
13 | 13 | ||
14 | void dbg_dump_sector(int sec); | 14 | void dbg_dump_sector(int sec); |
15 | void dbg_dump_buffer(unsigned char *buf); | 15 | void dbg_dump_buffer(unsigned char *buf, int len); |
16 | void dbg_console(void); | 16 | void dbg_console(void); |
17 | 17 | ||
18 | void panicf( char *fmt, ...) | 18 | void 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 | ||
28 | void dbg_dump_sector(int sec) | 28 | void 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 | ||
37 | void dbg_dump_buffer(unsigned char *buf) | 37 | void 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 | ||
86 | void dbg_mkfile(char* name, int num) | 86 | #define CHUNKSIZE 8 |
87 | |||
88 | int 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 | |||
119 | int 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 | ||
105 | void dbg_type(char* name) | 160 | void 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 | ||
202 | void dbg_cmd(int argc, char *argv[]) | 259 | int 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 | ||
275 | extern void ata_exit(void); | 341 | extern 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 | ||