Emulation of LocalFileSystem with virtual COM.

Dependencies:   USBDevice

Dependents:   KL46Z-lpc81isp lpcterm2

#include "USBLocalFileSystem.h"

int main() {
    USBLocalFileSystem* usb_local = new USBLocalFileSystem(); // RamDisk(64KB)

    while(1) {
        usb_local->lock(true);
        usb_local->remount();
        char filename[32];
        if (usb_local->find(filename, sizeof(filename), "*.TXT")) {
            FILE* fp = fopen(filename, "r");
            if (fp) {
                int c;
                while((c = fgetc(fp)) != EOF) {
                    usb_local->putc(c);
                }
                fclose(fp);
            }
        }    
        usb_local->lock(false);

        wait_ms(1000*5);
    }
}



Sample application:

Import programKL46Z-lpc81isp

ISP example program.

Import programlpcterm2

semihost server example program

USBLocalFileSystem.cpp

Committer:
va009039
Date:
2014-06-21
Revision:
6:528036abfb02
Parent:
4:8f6857784854

File content as of revision 6:528036abfb02:

#include "USBLocalFileSystem.h"
#include "RamDisk.h"
#include "SDStorage.h"
#include "USB_CDC.h"

USBLocalFileSystem::USBLocalFileSystem(const char* name)
{
    RamDisk* storage = new RamDisk;
    init(storage, name);
}

USBLocalFileSystem::USBLocalFileSystem(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name)
{
    SDStorage* storage = new SDStorage(mosi, miso, sclk, cs);
    storage->storage_initialize();
    init(storage, name);
}

USBLocalFileSystem::USBLocalFileSystem(StorageInterface* storage, const char* name)
{
    init(storage, name);
}

void USBLocalFileSystem::init(StorageInterface* storage, const char* name)
{
    _name = name;
    _storage = storage;
    _usb = new USBStorage2(_storage);
    _local = new LocalStorage(_storage);    
}

void USBLocalFileSystem::remount()
{
    if (_local) {
        delete _local;
    }    
    _local = new LocalStorage(_storage); 
}

int USBLocalFileSystem::lock(bool f)
{
	return _usb->block(f);
}

bool USBLocalFileSystem::find(char* name, size_t size, const char* pat)
{
    return LocalStorage::find(name, size, _name, pat);
}

int USBLocalFileSystem::readable()
{
    return _usb->readable();
}

int USBLocalFileSystem::writeable()
{
    return _usb->writeable();
}

int USBLocalFileSystem::getc()
{
    return _usb->getc();
}

int USBLocalFileSystem::putc(int c)
{
    _usb->putc(c);
    return c;
}

int USBLocalFileSystem::puts(const char* str)
{
	while(*str) {
		putc(*str++);
	}
	return 0;
}

void USBLocalFileSystem::attachSendBreak(void (*fptr)(uint16_t duration))
{
	getUsb()->getCDC()->attachSendBreak(fptr);
}

void USBLocalFileSystem::attachControlLineState(void (*fptr)(int dts, int dtr))
{
	getUsb()->getCDC()->attachControlLineStateChanged(fptr);
}

void USBLocalFileSystem::attachSettingChanged(void (*fptr)(int baud, int bits, int parity, int stop))
{
	getUsb()->getCDC()->attach(fptr);
}