diff options
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | libmpio/ecc.c | 4 | ||||
-rw-r--r-- | libmpio/io.c | 35 | ||||
-rw-r--r-- | libmpio/mpio.c | 11 |
4 files changed, 44 insertions, 19 deletions
@@ -1,5 +1,16 @@ 2002-09-09 Markus Germeier <mager@tzi.de> + * libmpio/io.c (cluster2block): + fixed cluster to block mapping for 32MB SmartMedia cards + * libmpio/io.c (mpio_io_block_read, mpio_io_sector_read): + added debug output in case of ECC error + * libmpio/mpio.c (mpio_memory_free): + fixed segmentation violation if no SM card is inserted + * libmpio/mpio.c (mpio_get_info): + *really* fixed the problem if no SM card is inserted + +2002-09-09 Markus Germeier <mager@tzi.de> + * mpio_tool/mpiosh.c: (mpiosh_cmd_mput): (mpiosh_cmd_mget): @@ -21,7 +32,7 @@ * regex for mput/mget does now work but uses "hard" regular expressions instead of shell-like regex, e.g.: "^0.*\.mp3$" ("hard" regular expression) - "0*.mp3" (shell-like)x + "0*.mp3" (shell-like) 2002-09-04 Andreas Buesching <crunchy@tzi.de> diff --git a/libmpio/ecc.c b/libmpio/ecc.c index e7429a5..5175a32 100644 --- a/libmpio/ecc.c +++ b/libmpio/ecc.c @@ -1,6 +1,6 @@ /* * - * $Id: ecc.c,v 1.1 2002/08/28 16:10:51 salmoon Exp $ + * $Id: ecc.c,v 1.2 2002/09/09 13:29:52 germeier Exp $ * * Library for USB MPIO-* * @@ -193,6 +193,8 @@ mpio_ecc_256_check(BYTE *data, BYTE *ecc) debugn(2, "ECC Correction code not in place yet, Sorry\n"); debugn(3, "got ECC: %2x %2x %2x\n", ecc[0], ecc[1], ecc[2]); debugn(3, "calc. ECC: %2x %2x %2x\n", own_ecc[0], own_ecc[1], own_ecc[2]); + + return 1; } return 0; diff --git a/libmpio/io.c b/libmpio/io.c index 10346d6..6a4c0f1 100644 --- a/libmpio/io.c +++ b/libmpio/io.c @@ -2,7 +2,7 @@ /* * - * $Id: io.c,v 1.3 2002/09/03 21:20:53 germeier Exp $ + * $Id: io.c,v 1.4 2002/09/09 13:29:52 germeier Exp $ * * Library for USB MPIO-* * @@ -63,8 +63,11 @@ cluster2block(int mem, int sector) if (mem == 32) { - if (sector >= 998) - a += 22; + /* I'm so large in *not* knowing! */ + if (sector >= 830) + a++; + if (a >= 1001) + a += 21; } if (mem == 64) @@ -354,10 +357,11 @@ mpio_io_sector_read(mpio_t *m, BYTE mem, DWORD index, BYTE *output) /* check ECC Area information */ if (mem==MPIO_EXTERNAL_MEM) { - mpio_ecc_256_check (recvbuff, - (recvbuff + SECTOR_SIZE + 13)); - mpio_ecc_256_check ((recvbuff + (SECTOR_SIZE / 2)), - (recvbuff + SECTOR_SIZE + 8)); + if (mpio_ecc_256_check (recvbuff, + (recvbuff + SECTOR_SIZE + 13)) || + mpio_ecc_256_check ((recvbuff + (SECTOR_SIZE / 2)), + (recvbuff + SECTOR_SIZE + 8)) ) + debug ("ECC error @ (%02x : %06x)\n", mem, index); } if (mem==MPIO_INTERNAL_MEM) @@ -489,8 +493,8 @@ mpio_io_block_read(mpio_t *m, BYTE mem, mpio_fatentry_t *f, BYTE *output) if (mem == MPIO_INTERNAL_MEM) { sm = &m->internal; - hexdump(&f->entry, 4); - hexdump(&f->hw_address, 4); + hexdump((char *)&f->entry, 4); + hexdump((char *)&f->hw_address, 4); chip = f->hw_address / 0x1000000; address = f->hw_address & 0x0ffffff; } @@ -537,11 +541,14 @@ mpio_io_block_read(mpio_t *m, BYTE mem, mpio_fatentry_t *f, BYTE *output) { /* check ECC Area information */ if (mem==MPIO_EXTERNAL_MEM) { - mpio_ecc_256_check ((recvbuff + (i * SECTOR_TRANS)), - ((recvbuff +(i * SECTOR_TRANS) + SECTOR_SIZE +13))); - - mpio_ecc_256_check ((recvbuff + (i * SECTOR_TRANS) + (SECTOR_SIZE / 2)), - ((recvbuff +(i * SECTOR_TRANS) + SECTOR_SIZE + 8))); + if (mpio_ecc_256_check ((recvbuff + (i * SECTOR_TRANS)), + ((recvbuff +(i * SECTOR_TRANS) + + SECTOR_SIZE +13))) || + mpio_ecc_256_check ((recvbuff + (i * SECTOR_TRANS) + + (SECTOR_SIZE / 2)), + ((recvbuff +(i * SECTOR_TRANS) + + SECTOR_SIZE + 8)))) + debug ("ECC error @ (%02x : %06x)\n", chip, address); } diff --git a/libmpio/mpio.c b/libmpio/mpio.c index 8c8152d..f6cfd84 100644 --- a/libmpio/mpio.c +++ b/libmpio/mpio.c @@ -1,6 +1,6 @@ /* * - * $Id: mpio.c,v 1.4 2002/09/08 23:22:48 germeier Exp $ + * $Id: mpio.c,v 1.5 2002/09/09 13:29:52 germeier Exp $ * * Library for USB MPIO-* * @@ -181,13 +181,18 @@ mpio_init(void) int mpio_memory_free(mpio_t *m, mpio_mem_t mem, int *free) { - *free=mpio_fat_free_clusters(m, mem); if (mem==MPIO_INTERNAL_MEM) { + *free=mpio_fat_free_clusters(m, mem); return (m->internal.geo.SumSector * SECTOR_SIZE / 1000 * m->internal.chips); } if (mem==MPIO_EXTERNAL_MEM) { + if (!m->external.size) { + *free=0; + return 0; + } + *free=mpio_fat_free_clusters(m, mem); return (m->external.geo.SumSector * SECTOR_SIZE / 1000); } @@ -230,7 +235,7 @@ mpio_get_info(mpio_t *m, mpio_info_t *info) m->internal.chips); } - if (m->internal.id) + if (m->external.id) { snprintf(info->firmware_mem_external, max, "%3dMB (%s)", mpio_id2mem(m->external.id), |