USB composite device example program, drag-and-drop flash writer.
Dependencies: SWD USBDevice mbed BaseDAP
USBMSD_Drop/USBMSD_Drop.h
- Committer:
- va009039
- Date:
- 2013-09-28
- Revision:
- 1:ea8e179320d7
File content as of revision 1:ea8e179320d7:
// USBMSD_Drop.h 2013/9/26 #pragma once #include "USBMSD.h" #include "USBMSD2.h" #include "RomDisk.h" #ifdef TARGET_LPC1768 #define USBMSD USBMSD2 #endif /** drag-and-drop using the USBMSD class * * @code * #include "mbed.h" * #include "USBMSD_Drop.h" * Serial pc(USBTX, USBRX); * USBMSD_Drop* host; * * void callback(const uint8_t* data, int len, int offset, int total) * { * for(int i = 0; i < len && (offset+i) < total; i++) { * pc.putc(data[i]); * } * } * * int main() { * host = new USBMSD_Drop(); * host->attach(callback); * while(1); // forever * } * @endcode */ class USBMSD_Drop : public USBMSD { public: /** create drag-and-drop file transfer */ USBMSD_Drop(); virtual ~USBMSD_Drop() {} /** drag-and-drop file received * * @param data received data pointer * @param len data length * @param offset offset from file top * @param total total file size */ virtual void Drop(const uint8_t* data, int len, int offset, int total){}; /** * Attach a callback for when a file is received * * @param fptr function pointer */ void attach(void (*fptr)(const uint8_t* data, int len, int offset, int total)); protected: virtual int disk_initialize(); virtual int disk_status(); virtual int disk_read(uint8_t * data, uint64_t block); virtual int disk_write(const uint8_t * data, uint64_t block); virtual uint64_t disk_sectors(); virtual uint64_t disk_size(); uint8_t _status; void _drop(const uint8_t* data, int len, int offset, int total); void (*_drop_evt)(const uint8_t* data, int len, int offset, int total); DirEntry* findNewFile(const uint8_t* data, uint32_t block); DirEntry _dir_entry; DirEntry* _result; DirEntry* _file; RomDisk _disk; int _seq; int _prev_block; int _addr; };