test seeking in a file on mDot

Dependencies:   libmDot mbed-rtos mbed

main.cpp

Committer:
mfiore
Date:
2016-08-24
Revision:
1:4d3a502a7e58
Parent:
0:c5ab0dc979fc

File content as of revision 1:4d3a502a7e58:

#include "mbed.h"
#include "mDot.h"
#include "MTSLog.h"
#include <vector>

Serial pc(USBTX, USBRX);

int main()
{
    mDot* dot;
    std::vector<mDot::mdot_file> files;
    mDot::mdot_file file;
    const char filename[] = "test_file.txt";
    uint8_t buf[1024];
    
    pc.baud(115200);

    // get a mDot handle
    dot = mDot::getInstance();
    dot->resetConfig();
    dot->saveConfig();
    
    mts::MTSLog::setLogLevel(mts::MTSLog::INFO_LEVEL);

    // print library version information
    logInfo("version: %s", dot->getId().c_str());

    logInfo("deleting user files");
    files = dot->listUserFiles();
    for (std::vector<mDot::mdot_file>::iterator it = files.begin(); it != files.end(); it++) {
        printf("\tdeleting %s [%d]\r\n", it->name, it->size);
        dot->deleteUserFile(it->name);
    }

    memset(buf, 0x3B, sizeof(buf));

    logInfo("creating 1kB file of 0x3B");
    file = dot->openUserFile(filename, mDot::FM_RDWR | mDot::FM_CREAT | mDot::FM_APPEND);
    if (file.fd < 0) {
        logError("failed to open file");
    } else {
        if (dot->writeUserFile(file, (void*)buf, sizeof(buf)) != sizeof(buf)) {
            logError("didn't write entire buffer");
        }

        dot->closeUserFile(file);
    }

    for (int i = 0; i < 10; i++) {
        uint8_t buf[8];
        uint32_t loc;
        
        memset(buf, 0xA2, sizeof(buf));
        
        file = dot->openUserFile(filename, mDot::FM_RDWR);
        if (file.fd < 0) {
            logError("failed to open file");
            break;
        } else {
            loc = (uint32_t)(rand() % (file.size - sizeof(buf)));
            logInfo("seeking to 0x%04X", loc);
            if (! dot->seekUserFile(file, loc, SEEK_SET)) {
                logError("seek failed");
                break;
            }
            logInfo("writing %d '0xA2' bytes to 0x%04X", sizeof(buf), loc); 
            if (dot->writeUserFile(file, (void*)buf, sizeof(buf)) != sizeof(buf)) {
                logError("didn't write entire buffer");
                break;
            }

            dot->closeUserFile(file);
        }
    }
    
    file = dot->openUserFile(filename, mDot::FM_RDONLY);
    if (file.fd < 0) {
        logError("failed to open file");
    } else {
        uint8_t buf[16];
        uint32_t read = 0;
        uint32_t ret = 0;

        logInfo("file data:");
        while (read < file.size) {
            ret = dot->readUserFile(file, (void*)buf, sizeof(buf));
            if (ret > 0) {
                printf("0x%04X\t", read);
                for (int i = 0; i < ret; i++) {
                    printf("%02X ", buf[i]);
                }
                printf("\r\n");
                read += ret;
            } else {
                logError("error reading file");
                break;
            }
        }

        dot->closeUserFile(file);
    }

    return 0;
}