see https://developer.mbed.org/users/okini3939/notebook/graphic-poi/

Dependencies:   IAP RAM_DISK USBDevice mbed

Revision:
2:d50445fa62da
Parent:
0:49512863ec9b
--- a/file.cpp	Thu Dec 01 02:01:22 2016 +0000
+++ b/file.cpp	Thu Dec 01 06:31:12 2016 +0000
@@ -3,8 +3,6 @@
 #include "IAP.h"
 #include "file.h"
 
-//http://www.umekkii.jp/data/computer/file_format/bitmap.cgi
-
 //USBMSD_Ram msd;
 IAP iap;
 extern DigitalOut led;
@@ -15,7 +13,7 @@
 int count = 0;
 int sector = 0;
 
-int parseBmp (const uint8_t *buf) {
+int parseBmp (const uint8_t *buf, int len) {
     int i, n = 0;
 
     if (modeBmp == 0) {
@@ -39,10 +37,10 @@
         led = 0;
         __disable_irq();
         iap.prepare(FLASH_SECTOR + sector, FLASH_SECTOR + sector);
-        iap.write((char*)buf, sector_start_adress[FLASH_SECTOR + sector] + 512 * count, 512);
+        iap.write((char*)buf, sector_start_adress[FLASH_SECTOR + sector] + 512 * count, len);
         __enable_irq();
-        count ++;
-        filesize -= 512;
+        count += len / 512;
+        filesize -= len;
 
         if (filesize <= 0 || count >= (FLASH_SECTOR_SIZE / 512)) {
             modeBmp = 0;
@@ -57,7 +55,7 @@
     return 0;
 }
 
-void parseFat(int sector, const uint8_t *buf) {
+void parseFat(int sector, const uint8_t *buf, int len) {
     int i;
 
     if (sector == 2) {
@@ -75,7 +73,7 @@
     if (sector > 2) {
         // data
         if (parseSector && sector >= parseSector) {
-            if (parseBmp(buf)) {
+            if (parseBmp(buf, len)) {
                 parseSector = 0;
             }
         } else {