USBLocalFileSystem.lib testing program for LPC11U35

Dependencies:   BaseDAP SWD USBDAP USBLocalFileSystem mbed DA14580 SWSPI W25X40BV

USB memory + Writer for DA14580 BLE chip + CMSIS-DAP debugger + USB-UART functions in one chip

One button input loads your application into DA14580 or DA14580 included BLE modules

Quote:

Current compatible hardware description can be found at https://github.com/K4zuki/da14580/releases/tag/MurataBLEr04

Revision:
1:484bd6db1378
Parent:
0:eba731be11fb
Child:
2:228291df190e
--- a/main.cpp	Mon Aug 17 19:20:25 2015 +0000
+++ b/main.cpp	Tue Aug 18 17:41:45 2015 +0000
@@ -4,9 +4,44 @@
 #include "BaseDAP.h"
 #include "USB_HID.h"
 
+#include "at45db161d.h"
+
+#undef PAGE_SIZE
+//#define PAGE_SIZE 264 // AT45DB081D (1MB)
+#define PAGE_SIZE 256 // AT25XE011 (1Mbit)
+//#define PAGE_SIZE 528 // AT45DB321D (4MB)
+
+//#define PAGE_NUM 4095 // AT45DB081D (1MB)
+#define PAGE_NUM 512 // AT25XE011 (1Mbit)
+//#define PAGE_NUM 8192 // AT45DB321D (4MB)
+
+#define WRITE_BUFFER 1
+#define READ_BUFFER 2
+
 SWD swd(p25,p24,p23); // SWDIO,SWCLK,nRESET
-DigitalOut connected(LED1);
-DigitalOut running(LED2);
+//SWD swd(P0_5,P0_4,P0_21); // SWDIO,SWCLK,nRESET
+DigitalOut connected(P0_20);
+DigitalOut running(P0_21);
+
+//SPI spi(P0_9,P0_8,P0_10); // mosi, miso, sclk
+//ATD45DB161D memory(spi, P0_7);
+//Serial ble(P0_19,P0_18);
+
+#define     SOURCE_FILE         "/local/loader.bin"
+#define     TARGET_FILE         "/local/target.bin"
+int file_size( FILE *fp );
+void flash_write (int addr, char *buf, int len);
+void flash_read (int addr, char *buf, int len);
+
+enum XMODEM_CONST {
+    SOH = (0x01),
+    STX = (0x02),
+    EOT = (0x04),
+    ACK = (0x06),
+    DLE = (0x10),
+    NAK = (0x15),
+    CAN = (0x18),
+};
 
 class myDAP : public BaseDAP
 {
@@ -26,20 +61,35 @@
     }
 };
 
+
 int main()
 {
     USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_9, P0_8, P0_10, P0_7,"local"); // RamDisk(64KB)
+//    USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_14, P0_15, P0_16, P0_32,"local"); // SD
+    usb_local->lock(true);
     myDAP* dap = new myDAP(&swd);
 
-//    USBStorage2* _usb = usb_local->getUsb();
-//    USB_HID* _hid = _usb->getHID();
+//    uint8_t recieve;
+//    uint8_t read;
+//    int filesize=0;
+    FILE* fp;
+//    ble.baud(57600);
+//    int crc=0x00;
+
 
     while(1) {
         usb_local->lock(true);
         usb_local->remount();
         char filename[32];
+        /*
+        fp = fopen( SOURCE_FILE, "rb" )
+        if ( fp) {
+            filesize=file_size(fp);
+            pc.printf("0x%04X\n\r",filesize);
+        }
+        */
         if (usb_local->find(filename, sizeof(filename), "*.TXT")) {
-            FILE* fp = fopen(filename, "r");
+            fp = fopen(filename, "r");
             if (fp) {
                 int c;
                 while((c = fgetc(fp)) != EOF) {
@@ -52,15 +102,48 @@
             }
         }
 
+
+        usb_local->lock(false);
+        USBStorage2* _usb = usb_local->getUsb();
+        USB_HID* _hid = _usb->getHID();
         HID_REPORT recv_report;
-        if( usb_local->getUsb()->getHID()->readNB(&recv_report) ) {
+        if( _hid->readNB(&recv_report) ) {
             HID_REPORT send_report;
             dap->Command(recv_report.data, send_report.data);
             send_report.length = 64;
-            usb_local->getUsb()->getHID()->send(&send_report);
+            _hid->send(&send_report);
         }
-
-        usb_local->lock(false);
         wait_ms(100*5);
     }
-}
\ No newline at end of file
+}
+
+int file_size( FILE *fp )
+{
+    int     size;
+
+    fseek( fp, 0, SEEK_END ); // seek to end of file
+    size    = ftell( fp );    // get current file pointer
+    fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
+
+    return size;
+}
+
+
+void flash_write (int addr, char *buf, int len) {
+    int i;
+    memory.BufferWrite(WRITE_BUFFER, addr % PAGE_SIZE);
+    for (i = 0; i < len; i ++) {
+        spi.write(buf[i]);
+    }
+    memory.BufferToPage(WRITE_BUFFER, addr / PAGE_SIZE, 1);
+}
+
+void flash_read (int addr, char *buf, int len) {
+    int i;
+    memory.PageToBuffer(addr / PAGE_SIZE, READ_BUFFER);
+    memory.BufferRead(READ_BUFFER, addr % PAGE_SIZE, 1);
+    for (i = 0; i < len; i ++) {
+        buf[i] = spi.write(0xff);
+    }
+}
+