summaryrefslogtreecommitdiff
path: root/apps/examples
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-09-25 13:35:10 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-09-25 13:35:10 -0600
commitf1366e4b1285d10d0521a7d0679d19edfe5cfff6 (patch)
tree73a8a0ac7d0d74ed0f0dcef2eb2512d0fd7259dd /apps/examples
parentf999f325f9b9f9fdc09650855f55a848785be67c (diff)
downloadpx4-nuttx-f1366e4b1285d10d0521a7d0679d19edfe5cfff6.tar.gz
px4-nuttx-f1366e4b1285d10d0521a7d0679d19edfe5cfff6.tar.bz2
px4-nuttx-f1366e4b1285d10d0521a7d0679d19edfe5cfff6.zip
MTD read-ahear/write buffering layer seems functional
Diffstat (limited to 'apps/examples')
-rw-r--r--apps/examples/mtdrwb/mtdrwb_main.c74
1 files changed, 15 insertions, 59 deletions
diff --git a/apps/examples/mtdrwb/mtdrwb_main.c b/apps/examples/mtdrwb/mtdrwb_main.c
index 2a71c05db..21cb91a0c 100644
--- a/apps/examples/mtdrwb/mtdrwb_main.c
+++ b/apps/examples/mtdrwb/mtdrwb_main.c
@@ -158,8 +158,6 @@ int mtdrwb_main(int argc, char *argv[])
ssize_t nbytes;
off_t nblocks;
off_t offset;
- off_t check;
- off_t sectoff;
off_t seekpos;
unsigned int blkpererase;
int fd;
@@ -280,7 +278,7 @@ int mtdrwb_main(int argc, char *argv[])
for (k = 0; k < geo.blocksize / sizeof(uint32_t); k++)
{
buffer[k] = offset;
- offset += 4;
+ offset += sizeof(uint32_t);
}
/* And write it using the character driver */
@@ -297,9 +295,9 @@ int mtdrwb_main(int argc, char *argv[])
close(fd);
- /* Open the MTD character driver for writing */
+ /* Open the MTD character driver for reading */
- fd = open("/dev/mtd0", O_RDWR);
+ fd = open("/dev/mtd0", O_RDONLY);
if (fd < 0)
{
message("ERROR: open /dev/mtd0 failed: %d\n", errno);
@@ -309,21 +307,16 @@ int mtdrwb_main(int argc, char *argv[])
/* Now verify the offset in every block */
- check = offset;
- sectoff = 0;
-
+ offset = 0;
for (j = 0; j < nblocks; j++)
{
-#if 0 /* Too much */
- message(" block=%u offset=%lu\n", j, (unsigned long) check);
-#endif
/* Seek to the next read position */
- seekpos = lseek(fd, sectoff, SEEK_SET);
- if (seekpos != sectoff)
+ seekpos = lseek(fd, offset, SEEK_SET);
+ if (seekpos != offset)
{
message("ERROR: lseek to offset %ld failed: %d\n",
- (unsigned long)sectoff, errno);
+ (unsigned long)offset, errno);
msgflush();
exit(10);
}
@@ -356,17 +349,17 @@ int mtdrwb_main(int argc, char *argv[])
* indication.
*/
- else if (nbytes == 0)
+ else if (nbytes == 0)
{
message("ERROR: Unexpected end of file on /dev/mtd0\n");
msgflush();
- exit(14);
+ exit(14);
}
- /* This is not expected at all */
+ /* This is not expected at all */
- else if (nbytes != geo.blocksize)
- {
+ else if (nbytes != geo.blocksize)
+ {
message("ERROR: Short read from /dev/mtd0 failed: %lu\n",
(unsigned long)nbytes);
msgflush();
@@ -377,53 +370,16 @@ int mtdrwb_main(int argc, char *argv[])
for (k = 0; k < geo.blocksize / sizeof(uint32_t); k++)
{
- if (buffer[k] != check)
+ if (buffer[k] != offset)
{
message("ERROR: Bad offset %lu, expected %lu\n",
- (long)buffer[k], (long)check);
+ (long)buffer[k], (long)offset);
msgflush();
exit(16);
}
- /* Invert the value to indicate that we have verified
- * this value.
- */
-
- buffer[k] = ~check;
- check += sizeof(uint32_t);
+ offset += sizeof(uint32_t);
}
-
- /* Seek to the next write position */
-
- seekpos = lseek(fd, sectoff, SEEK_SET);
- if (seekpos != sectoff)
- {
- message("ERROR: lseek to offset %ld failed: %d\n",
- (unsigned long)sectoff, errno);
- msgflush();
- exit(17);
- }
-
- /* Now write the block back to FLASH with the modified value */
-
- nbytes = write(fd, buffer, geo.blocksize);
- if (nbytes < 0)
- {
- message("ERROR: write to /dev/mtd0 failed: %d\n", errno);
- msgflush();
- exit(18);
- }
- else if (nbytes != geo.blocksize)
- {
- message("ERROR: Unexpected write size to /dev/mtd0 : %ld\n",
- (unsigned long)nbytes);
- msgflush();
- exit(19);
- }
-
- /* Get the offset to the next block */
-
- sectoff += geo.blocksize;
}
/* Try reading one more time. We should get the end of file */