Recording WAV files

Dependencies:   mbed SDFileSystem

Files at this revision

API Documentation at this revision

Comitter:
jack_the_nerd
Date:
Tue Nov 09 15:21:06 2021 +0000
Parent:
7:4467fbfa888b
Commit message:
Initial commit;

Changed in this revision

FatFs_Mon/mon.cpp Show diff for this revision Revisions of this file
FatFs_Mon/mon.h Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/FatFs_Mon/mon.cpp	Sat May 02 03:45:17 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1234 +0,0 @@
-/*
- * mbed Application program for the mbed
- *  FatFs Check program / monitor part
- *
- * Copyright (c) 2015,'18,'19,'20 Kenji Arai / JH1PJL
- *  http://www7b.biglobe.ne.jp/~kenjia/
- *  https://os.mbed.com/users/kenjiArai/
- *      Created:    May        5th, 2015
- *      Revised:    June      14th, 2015
- *      Revised:    April      7th, 2018
- *      Revised:    May        2nd, 2020
- */
-
-/*
- *---------------- REFERENCE ---------------------------------------------------
- * Original Source Information
- * FatFs sample program
- *      ChaN FatFs  http://elm-chan.org/
- *      http://elm-chan.org/fsw/ff/00index_e.html
- */
-/*----------------------------------------------------------------------*/
-/* FAT file system sample project for FatFs            (C)ChaN, 2016    */
-/*----------------------------------------------------------------------*/
-
-//  Include --------------------------------------------------------------------
-#include "mbed.h"
-#if (MBED_MAJOR_VERSION == 2)
-#include "SDFileSystem.h"
-#elif (MBED_MAJOR_VERSION == 5)
-#include "FATFileSystem.h"
-#endif
-#include "ff.h"
-#include "ffconf.h"
-#include "diskio.h"
-#include "mon.h"
-
-//  Definition -----------------------------------------------------------------
-#define DO_DEBUG    0
-
-#if DO_DEBUG
-#define DEBUG_LINE  pc.printf("line:%d\r\n", __LINE__);
-#else
-#define DEBUG_LINE  {;}
-#endif
-
-// Com
-#if  1
-#define BAUD(x)     pc.baud(x)
-#define GETC(x)     pc.getc(x)
-#define PUTC(x)     pc.putc(x)
-#define PUTS(x)     pc.puts(x)
-#define PRINTF(...) pc.printf(__VA_ARGS__)
-#define READABLE(x) pc.readable(x)
-#else
-#define BAUD(x)     {;}
-#define GETC(x)     {;}
-#define PUTC(x)     {;}
-#define PRINTF(...) {;}
-#define READABLE(x) {;}
-#endif
-
-#define UTC_JST_OFFSET  (32400) // +9 hours
-
-// from ffconf.h
-#define _VOLUMES    1
-
-#if !defined(FF_FS_RPATH)
-#define FF_FS_RPATH 0
-#endif
-
-#define DW_CHAR         sizeof(char)
-#define DW_SHORT        sizeof(short)
-#define DW_LONG         sizeof(long)
-
-/* These types must be 16-bit, 32-bit or larger integer */
-typedef int             INT;
-typedef unsigned int    UINT;
-
-/* These types must be 8-bit integer */
-typedef char            CHAR;
-typedef unsigned char   UCHAR;
-typedef unsigned char   BYTE;
-
-/* These types must be 16-bit integer */
-typedef short           SHORT;
-typedef unsigned short  USHORT;
-typedef unsigned short  WORD;
-typedef unsigned short  WCHAR;
-
-/* These types must be 32-bit integer */
-typedef long            LONG;
-typedef unsigned long   ULONG;
-typedef unsigned long   DWORD;
-/*  by Kenji Arai / JH1PJL  September 10th, 2012  */
-typedef unsigned long long  DDWORD;
-
-//  RAM ------------------------------------------------------------------------
-BYTE Buff[4096];
-char Linebuf[128];          // Console input buffer
-FATFS Fatfs[_VOLUMES];      // File system object for each logical drive
-FIL File1, File2;           // File objects
-FATFS_DIR* Dirx;
-FILINFO Finfo;
-DWORD AccSize;              // Work register for fs command
-WORD AccFiles, AccDirs;
-
-//  ROM / Constant data --------------------------------------------------------
-const char *const monmsg0 = "Start monitor program for FatFs File System\r\n";
-const char *const monmsg1 = " <Please press any key to start the monitor>";
-
-static const char HelpMsg0[] =
-    "dir   <full_pass>\r\n"
-    "type  <file_name>\r\n"
-    "vol\r\n"
-    "ren   <org_file_name> <new_file_name>\r\n"
-    "copy  <file_name> <file_name>\r\n"
-    "mkdir <dir_name>\r\n"
-    "cd    <dir_name>\r\n"
-    "x     extend commands mode\r\n"
-    "q     Return to main\r\n"
-    "t     Show current time or Adjust time\r\n"
-    "      e.g. t 20 5 2 10 11 12 -> May 02,'20, 10:11:12\r\n"
-    "?     Help/You know the command\r\n"
-    "\r\n";
-
-static const char HelpMsg1[] =
-    "[File system controls]\r\n"
-    " fi <ld#> [<mount>]- Force initialized the volume\r\n"
-    " fs [<path>] - Show volume status\r\n"
-    " fl [<path>] - Show a directory\r\n"
-    " fo <mode> <file> - Open a file\r\n"
-    "    <mode>  Read=1, Write=2\r\n"
-    " fc - Close the file\r\n"
-    " fe <ofs> - Move fp in normal seek\r\n"
-    " fd <len> - Read and dump the file\r\n"
-    " fr <len> - Read the file\r\n"
-    " fw <len> <val> - Write to the file\r\n"
-    " fn <org.name> <new.name> - Rename an object\r\n"
-    " fu <name> - Unlink an object\r\n"
-    " fv - Truncate the file at current fp\r\n"
-    " fk <name> - Create a directory\r\n"
-    " fa <atrr> <mask> <object name> - Change attribute of an object\r\n"
-    " ft <year> <month> <day> <hour> <min> <sec> <name>"
-    " - Change timestamp of an object\r\n"
-    " fx <src.file> <dst.file> - Copy a file\r\n"
-    " fg <path> - Change current directory\r\n"
-    " fq - Show current directory\r\n"
-    " fb <name> - Set volume label\r\n"
-    " fm <ld#> <type> <csize> - Create file system\r\n"
-    " fz [<len>] - Change/Show R/W length for fr/fw/fx command\r\n"
-    "[Disk contorls]\r\n"
-    " di <pd#> - Initialize disk\r\n"
-    " dd [<pd#> <lba>] - Dump a secrtor\r\n"
-    " ds <pd#> - Show disk status\r\n"
-    "[Buffer controls]\r\n"
-    " bd <ofs> - Dump working buffer\r\n"
-    " be <ofs> [<data>] ... - Edit working buffer\r\n"
-    " br <pd#> <lba> [<count>] - Read disk into working buffer\r\n"
-    " bw <pd#> <lba> [<count>] - Write working buffer into disk\r\n"
-    " bf <val> - Fill working buffer\r\n"
-    "[Misc commands]\r\n"
-    " q Return\r\n"
-    " ? Help\r\n"
-    "\r\n";
-
-//  Function prototypes --------------------------------------------------------
-#if (MBED_MAJOR_VERSION == 2)
-extern SDFileSystem fs;
-#elif (MBED_MAJOR_VERSION == 5)
-extern HeapBlockDevice bd;
-extern FATFileSystem fs;
-#endif
-
-static void extended_mon( char *ptr );
-static void v_next( char *ptr );
-static void d_next( char *ptr );
-static void c_next( char *ptr );
-static void m_next( char *ptr );
-static void r_next( char *ptr );
-static void t_next( char *ptr );
-static void memory_inf(char *ptr);
-static void disk_inf(char *ptr);
-
-static void crlf( void );
-static FRESULT scan_files( char* path );
-static void put_rc( FRESULT rc );
-static void file_inf( char *ptr );
-static void put_dump( void* buff, unsigned long addr, int len, int width );
-static void chk_and_set_time(char *ptr);
-static int xatoi ( char **str, long *res );
-
-void get_line (char *buff, int len);
-
-//  Object ---------------------------------------------------------------------
-extern  Serial pc;
-Timer   t;
-
-//------------------------------------------------------------------------------
-//  Control Program
-//------------------------------------------------------------------------------
-// Monitor program for File control
-void mon ()
-{
-    char *ptr;
-
-    Dirx = new FATFS_DIR;
-    /* Open Uart to communicate with Host PC */
-    PUTS(monmsg0);
-    PUTS(monmsg1);
-    crlf();
-    for (;;) {
-        DEBUG_LINE
-        PUTC('>');
-        ptr = Linebuf;
-        get_line( ptr, sizeof(Linebuf) );
-        switch ( *ptr++ ) {
-                // vol
-            case 'v' :
-                v_next(ptr);
-                break;
-                // dir
-            case 'd' :
-                d_next(ptr);
-                break;
-                // cd, copy
-            case 'c' :
-                c_next(ptr);
-                break;
-                // mkdir
-            case 'm' :
-                m_next(ptr);
-                break;
-                // ren
-            case 'r' :
-                r_next(ptr);
-                break;
-            case 't' :
-                t_next(ptr);
-                break;
-            case 'x' :
-                extended_mon(ptr);
-                break;
-                // Help
-            case '?' :
-                PUTS(HelpMsg0);
-                break;
-                // Exit monitor (return to main())
-            case 'q' :
-                PUTS("Return to main\r\n");
-                return;
-                // Not a command
-            default:
-                PUTS("? [HELP]=?");
-                crlf();
-                break;
-        }
-    }
-}
-
-uint32_t get_disk_freespace(void)
-{
-    long  p1;
-    UINT   s1, s2;
-    FATFS  *fs;
-    BYTE res;
-
-    if (Dirx == NULL){
-        Dirx = new FATFS_DIR;
-    }
-    char p = NULL;
-    res = f_opendir(Dirx, &p);
-    if (res) {
-        return 0;
-    }
-    p1 = s1 = s2 = 0;
-    for(;;) {
-        res = f_readdir(Dirx, &Finfo);
-        if ((res != FR_OK) || !Finfo.fname[0]) break;
-        if (Finfo.fattrib & AM_DIR) {
-            s2++;
-        } else {
-            s1++;
-            p1 += Finfo.fsize;
-        }
-    }
-    res = f_getfree(&p, (DWORD*)&p1, &fs);
-    uint32_t size = p1 * fs->csize * 512;
-    if (res == FR_OK) {
-        return size;
-    } else {
-        return 0;
-    }
-}
-
-uint32_t get_data_file_size(const char *const file_name)
-{
-    BYTE res;
-    //const char *file_name ="acc_data.txt";
- 
-    if (Dirx == NULL){
-        Dirx = new FATFS_DIR;
-    }
-    char p = NULL;
-    res = f_opendir(Dirx, &p);
-    if (res) {
-        put_rc((FRESULT)res);
-        return 0;
-    }
-    for(;;) {
-        res = f_readdir(Dirx, &Finfo);
-        if ((res != FR_OK) || !Finfo.fname[0]) break;
-        if (strcmp(Finfo.fname, file_name) == 0){
-            return Finfo.fsize;
-        }
-    }
-    return 0;
-}
-
-static void extended_mon( char *ptr )
-{
-    PUTS(HelpMsg1);
-    while(true) {
-        PUTS("e>");
-        ptr = Linebuf;
-        get_line( ptr, sizeof(Linebuf) );
-        switch ( *ptr++ ) {
-            case 'f' :
-                DEBUG_LINE;
-                file_inf(ptr);
-                break;
-            case 'd' :
-                DEBUG_LINE;
-                disk_inf(ptr);
-                break;
-            case 'm' :
-                DEBUG_LINE;
-                memory_inf(ptr);
-                break;
-            case '?' :
-                DEBUG_LINE;
-                PUTS(HelpMsg1);
-                break;
-            case 'q' :
-                DEBUG_LINE;
-                return;
-            default:
-                PUTS( "?\r\n" );
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-// General monitor functions
-static void v_next( char *ptr )
-{
-    switch ( *ptr++ ) {
-        case 'o' :
-            if (*ptr == 'l') {
-                *ptr = 's';
-                file_inf(ptr);  // fs [<path>] - Show volume status
-            }
-            break;
-        default:
-            PUTS( "?\r\n" );
-    }
-}
-
-static void d_next(char *ptr)
-{
-    switch ( *ptr++ ) {
-        case 'i' :
-            if (*ptr == 'r') {
-                *ptr = 'l';
-                file_inf(ptr);  // fl [<path>] - Directory listing
-            }
-            break;
-        default:
-            PUTS( "?\r\n" );
-    }
-}
-
-static void c_next(char *ptr)
-{
-    switch ( *ptr++ ) {
-        case 'o' :
-            if ((*ptr == 'p') && (*(ptr + 1) == 'y')) {
-                ptr++;
-                *ptr = 'x';
-                file_inf(ptr);  // fx <src_name> <dst_name> - Copy file
-            }
-            break;
-        case 'd' :
-            *ptr = 'g';
-            file_inf(ptr);  // fx <src_name> <dst_name> - Copy file
-            break;
-        default:
-            PUTS( "?\r\n" );
-    }
-}
-
-static void m_next(char *ptr)
-{
-    switch ( *ptr++ ) {
-        case 'k' :
-            if ((*ptr == 'd') && (*(ptr + 1) == 'i') && (*(ptr + 2) == 'r')) {
-                ptr += 2;
-                *ptr = 'k';
-                file_inf(ptr);  // fk <name> - Create a directory
-            }
-            break;
-        default:
-            PUTS("?\r\n");
-    }
-}
-
-static void r_next(char *ptr)
-{
-    switch (*ptr++) {
-        case 'e' :
-            if (*ptr == 'n') {
-                // fn <old_name> <new_name> - Change file/dir name
-                file_inf(ptr);
-            }
-            break;
-        default:
-            PUTS("?\r\n");
-    }
-}
-
-static void t_next(char *ptr)
-{
-    switch (*ptr++) {
-        case ' ' :
-        case 0x0d:
-            chk_and_set_time(ptr);
-        case 'y' :
-            if ((*ptr == 'p') && (*(ptr + 1) == 'e')) {
-                ptr++;
-                *ptr = '&';
-                file_inf(ptr);
-            }
-            break;
-        default:
-            PUTS("?\r\n");
-    }
-}
-
-static FRESULT scan_files (
-    char* path      /* Pointer to the path name working buffer */
-)
-{
-    FATFS_DIR  dirs;
-    FRESULT res;
-    BYTE i;
-    char *fn;
-
-    if ((res = f_opendir(&dirs, path)) == FR_OK) {
-        i = strlen(path);
-        PRINTF("path: %s, n=%u\r\n", path, i);
-        while (((res = f_readdir(&dirs, &Finfo)) == FR_OK) && Finfo.fname[0]) {
-            if (FF_FS_RPATH && Finfo.fname[0] == '.') {
-                continue;
-            }
-            fn = Finfo.fname;
-            if (Finfo.fattrib & AM_DIR) {
-                AccDirs++;
-                *(path+i) = '/';
-                strcpy(path+i+1, fn);
-                res = scan_files(path);
-                *(path+i) = '\0';
-                if (res != FR_OK) break;
-            } else {
-                PRINTF("%s/%s\r\n", path, fn);
-                AccFiles++;
-                AccSize += Finfo.fsize;
-            }
-        }
-    }
-    return res;
-}
-
-static void put_rc (FRESULT rc)
-{
-    const char *str =
-        "OK\0" "DISK_ERR\0" "INT_ERR\0" "NOT_READY\0" "NO_FILE\0" "NO_PATH\0"
-        "INVALID_NAME\0" "DENIED\0" "EXIST\0" "INVALID_OBJECT\0"
-        "WRITE_PROTECTED\0" "INVALID_DRIVE\0" "NOT_ENABLED\0"
-        "NO_FILE_SYSTEM\0" "MKFS_ABORTED\0" "TIMEOUT\0"
-        "LOCKED\0" "NOT_ENOUGH_CORE\0" "TOO_MANY_OPEN_FILES\0";
-    int i;
-
-    for ( i = 0; i != rc && *str; i++ ) {
-        while ( *str++ ) {
-            ;
-        }
-    }
-    PRINTF( "rc=%u FR_%s\r\n", (UINT)rc, str );
-}
-
-static void file_inf(char *ptr)
-{
-    long  p1, p2, p3;
-    CHAR   *ptr2;
-    BYTE   f_res;
-    UINT   s1, s2, cnt, blen = sizeof Buff;
-    FATFS  *fs;
-    static const BYTE ft[] = {0, 12, 16, 32};
-    BYTE res;
-    DWORD ofs = 0;
-    uint32_t tim;
-
-    switch (*ptr++) {
-        case '&' :
-            DEBUG_LINE;
-            while (*ptr == ' ') ptr++;
-            /* Open a file */
-            f_res = f_open(&File1, ptr, FA_READ);
-            if ( f_res ) {
-                put_rc((FRESULT)f_res);
-                break;
-            }
-            DEBUG_LINE;
-            /* Read all lines and display it */
-            while(true) {
-                f_res = f_read(&File1, (TCHAR*)Buff, blen, &cnt);
-                if ( f_res ) {
-                    put_rc((FRESULT)f_res);
-                    break;
-                }
-                for (s1 = 0; s1 < cnt; s1++) {
-                    PUTC(Buff[s1]);
-                }
-                if (cnt != blen) {
-                    break;
-                }
-            }
-            DEBUG_LINE;
-            /* Close the file */
-            f_close(&File1);
-            break;
-
-        case 'i' :  /* fi [<opt>]- Initialize logical drive */
-            if ( !xatoi(&ptr, &p1) ) {
-                break;
-            }
-            if (!xatoi(&ptr, &p2)) p2 = 0;
-            put_rc(f_mount(&Fatfs[p1], (const TCHAR*)p1, 0));
-            break;
-
-        case 's' :  /* fs [<path>] - Show volume status */
-            f_res = f_getfree( ptr, (DWORD*)&p2, &fs );
-            if ( f_res ) {
-                put_rc((FRESULT)f_res);
-                break;
-            }
-            PRINTF
-            (
-                "\rFAT type = FAT%u\r\nBytes/Cluster"
-                " = %lu\r\nNumber of FATs = %u\r\n"
-                "Root DIR entries = %u\r\n"
-                "Sectors/FAT = %lu\r\n"
-                "Number of clusters = %lu\r\n"
-                "FAT start (lba) = %lu\r\n"
-                "DIR start (lba,clustor) = %lu\r\n"
-                "Data start (lba) = %lu\r\n",
-                ft[fs->fs_type & 3], (DWORD)fs->csize * 512, fs->n_fats,
-                fs->n_rootdir, fs->fsize, (DWORD)fs->n_fatent - 2,
-                fs->fatbase, fs->dirbase, fs->database
-            );
-            AccSize = AccFiles = AccDirs = 0;
-            break;
-        case 'l' :  /* fl [<path>] - Directory listing */
-            while (*ptr == ' ') ptr++;
-            res = f_opendir(Dirx, ptr);
-            if (res) {
-                put_rc((FRESULT)res);
-                break;
-            }
-            p1 = s1 = s2 = 0;
-            for(;;) {
-                res = f_readdir(Dirx, &Finfo);
-                if ((res != FR_OK) || !Finfo.fname[0]) break;
-                if (Finfo.fattrib & AM_DIR) {
-                    s2++;
-                } else {
-                    s1++;
-                    p1 += Finfo.fsize;
-                }
-                PRINTF("%c%c%c%c%c %u/%02u/%02u %02u:%02u %9lu  %s\r\n",
-                       (Finfo.fattrib & AM_DIR) ? 'D' : '-',
-                       (Finfo.fattrib & AM_RDO) ? 'R' : '-',
-                       (Finfo.fattrib & AM_HID) ? 'H' : '-',
-                       (Finfo.fattrib & AM_SYS) ? 'S' : '-',
-                       (Finfo.fattrib & AM_ARC) ? 'A' : '-',
-                       (Finfo.fdate >> 9) + 1980, (Finfo.fdate >> 5) & 15,
-                       Finfo.fdate & 31,
-                       (Finfo.ftime >> 11), (Finfo.ftime >> 5) & 63,
-                       Finfo.fsize, Finfo.fname);
-            }
-#if 0   // f_getfree cannnot count under Dir, subdirectory area
-            PRINTF("%4u File(s),%10lu bytes total\r\n%4u Dir(s)", s1, p1, s2);
-            res = f_getfree(ptr, (DWORD*)&p1, &fs);
-            if (res == FR_OK)
-                PRINTF(", %10lu bytes free\r\n", p1 * fs->csize * 512);
-            else
-                put_rc((FRESULT)res);
-#else
-            PRINTF("%4u File(s) = %10lu bytes total, %4u Dir(s)\r\n",
-                   s1, p1, s2);
-#endif
-            break;
-
-        case 'o' :  /* fo <mode> <file> - Open a file */
-            if (!xatoi(&ptr, &p1)) break;
-            while (*ptr == ' ') ptr++;
-            put_rc(f_open(&File1, ptr, (BYTE)p1));
-#if 0
-            put_rc(f_open(&File1, "savedata.txt", 1));
-            PRINTF("Open savedata.txt as read mode\r\n");
-#endif
-            break;
-
-        case 'c' :  /* fc - Close a file */
-            put_rc(f_close(&File1));
-            break;
-
-        case 'e' :  /* fe - Seek file pointer */
-            if (!xatoi(&ptr, &p1)) break;
-            res = f_lseek(&File1, p1);
-            put_rc((FRESULT)res);
-            if (res == FR_OK)
-                PRINTF("fptr=%lu(0x%lX)\r\n", File1.fptr, File1.fptr);
-            break;
-
-        case 'd' :  /* fd <len> - read and dump file from current fp */
-            if (!xatoi(&ptr, &p1)) break;
-            ofs = File1.fptr;
-            while (p1) {
-                if ((UINT)p1 >= 16) {
-                    cnt = 16;
-                    p1 -= 16;
-                } else                {
-                    cnt = p1;
-                    p1 = 0;
-                }
-                res = f_read(&File1, Buff, cnt, &cnt);
-                if (res != FR_OK) {
-                    put_rc((FRESULT)res);
-                    break;
-                }
-                if (!cnt) break;
-                put_dump(Buff, ofs, cnt, DW_CHAR);
-                ofs += 16;
-            }
-            break;
-
-        case 'r' :  /* fr <len> - read file */
-            if (!xatoi(&ptr, &p1)) break;
-            p2 = 0;
-            t.reset();
-            t.start();
-            while (p1) {
-                if ((UINT)p1 >= blen) {
-                    cnt = blen;
-                    p1 -= blen;
-                } else {
-                    cnt = p1;
-                    p1 = 0;
-                }
-                res = f_read(&File1, Buff, cnt, &s2);
-                if (res != FR_OK) {
-                    put_rc((FRESULT)res);
-                    break;
-                }
-                p2 += s2;
-                if (cnt != s2) break;
-            }
-            tim = t.read_ms();
-            PRINTF("%lu bytes read with %lu kB/sec.\r\n",
-                   p2, tim ? (p2 / tim) : 0);
-            break;
-
-        case 'w' :  /* fw <len> <val> - write file */
-            if (!xatoi(&ptr, &p1) || !xatoi(&ptr, &p2)) break;
-            memset(Buff, (BYTE)p2, blen);
-            p2 = 0;
-            t.reset();
-            t.start();
-            while (p1) {
-                if ((UINT)p1 >= blen) {
-                    cnt = blen;
-                    p1 -= blen;
-                } else {
-                    cnt = p1;
-                    p1 = 0;
-                }
-                res = f_write(&File1, Buff, cnt, &s2);
-                if (res != FR_OK) {
-                    put_rc((FRESULT)res);
-                    break;
-                }
-                p2 += s2;
-                if (cnt != s2) break;
-            }
-            tim = t.read_ms();
-            PRINTF("%lu bytes written with %lu kB/sec.\r\n",
-                   p2, tim ? (p2 / tim) : 0);
-            break;
-
-        case 'n' :  /* fn <org.name> <new.name> - Change name of an object */
-            while (*ptr == ' ') ptr++;
-            ptr2 = strchr(ptr, ' ');
-            if (!ptr2) break;
-            *ptr2++ = 0;
-            while (*ptr2 == ' ') ptr2++;
-            put_rc(f_rename(ptr, ptr2));
-            break;
-
-        case 'u' :  /* fu <name> - Unlink an object */
-            while (*ptr == ' ') ptr++;
-            put_rc(f_unlink(ptr));
-            break;
-
-        case 'v' :  /* fv - Truncate file */
-            put_rc(f_truncate(&File1));
-            break;
-
-        case 'k' :  /* fk <name> - Create a directory */
-            while (*ptr == ' ') ptr++;
-            put_rc(f_mkdir(ptr));
-            break;
-#if 0
-        case 'a' :  /* fa <atrr> <mask> <name> - Change attribute of an object */
-            if (!xatoi(&ptr, &p1) || !xatoi(&ptr, &p2)) break;
-            while (*ptr == ' ') ptr++;
-            put_rc(f_chmod(ptr, p1, p2));
-            break;
-#endif
-#if 0
-            /* ft <year> <month> <day> <hour> <min> <sec> <name>
-                                                 - Change timestamp of an object */
-        case 't' :
-            if (!xatoi(&ptr, &p1) || !xatoi(&ptr, &p2) || !xatoi(&ptr, &p3)) {
-                break;
-            }
-            Finfo.fdate = ((p1 - 1980) << 9) | ((p2 & 15) << 5) | (p3 & 31);
-            if (!xatoi(&ptr, &p1) || !xatoi(&ptr, &p2) || !xatoi(&ptr, &p3)) {
-                break;
-            }
-            Finfo.ftime =
-                ((p1 & 31) << 11) | ((p2 & 63) << 5) | ((p3 >> 1) & 31);
-            put_rc(f_utime(ptr, &Finfo));
-            break;
-#endif
-#if FILCPY_NOTUSE == 0
-        case 'x' : /* fx <src_name> <dst_name> - Copy file */
-            while ( *ptr == ' ' ) {
-                ptr++;
-            }
-            ptr2 = strchr( ptr, ' ' );
-            if ( !ptr2 ) {
-                break;
-            }
-            *ptr2++ = 0;
-            while ( *ptr2 == ' ' ) {
-                ptr2++;
-            }
-            f_res = f_open( &File1, ptr, FA_OPEN_EXISTING | FA_READ );
-            PRINTF("Opening %s \r\n", ptr);
-            if ( f_res ) {
-                put_rc( (FRESULT)f_res );
-                break;
-            }
-            f_res = f_open( &File2, ptr2, FA_CREATE_ALWAYS | FA_WRITE );
-            PRINTF(" Creating %s \r\n", ptr2);
-            if ( f_res ) {
-                put_rc( (FRESULT)f_res );
-                f_close( &File1 );
-                break;
-            }
-            PRINTF("Copying file...");
-            p1 = 0;
-            for ( ;; ) {
-                f_res = f_read( &File1, Buff, blen, &s1 );
-                if ( f_res || s1 == 0 ) {
-                    break;   /* error or eof */
-                }
-                f_res = f_write( &File2, Buff, s1, &s2 );
-                p1 += s2;
-                if ( f_res || s2 < s1 ) {
-                    break;   /* error or disk full */
-                }
-            }
-            f_close( &File1 );
-            f_close( &File2 );
-            crlf();
-            break;
-#endif
-#if 0
-        case 'x' : /* fx <src.name> <dst.name> - Copy a file */
-            while (*ptr == ' ') ptr++;
-            ptr2 = strchr(ptr, ' ');
-            if (!ptr2) break;
-            *ptr2++ = 0;
-            while (*ptr2 == ' ') ptr2++;
-            PRINTF("Opening \"%s\"", ptr);
-            res = f_open(&File1, ptr, FA_OPEN_EXISTING | FA_READ);
-            PUTS("\r\n");
-            if (res) {
-                put_rc((FRESULT)res);
-                break;
-            }
-            PRINTF("Creating \"%s\"", ptr2);
-            res = f_open(&File1, ptr2, FA_CREATE_ALWAYS | FA_WRITE);
-            PUTS("\r\n");
-            if (res) {
-                put_rc((FRESULT)res);
-                f_close(&File1);
-                break;
-            }
-            PRINTF("Copying file...");
-            t.reset();
-            t.start();
-            p1 = 0;
-            for (;;) {
-                res = f_read(&File1, Buff, blen, &s1);
-                if (res || s1 == 0) break;   /* error or eof */
-                res = f_write(&File2, Buff, s1, &s2);
-                p1 += s2;
-                if (res || s2 < s1) break;   /* error or disk full */
-            }
-            tim = t.read_ms();
-            PRINTF("\r\n%lu bytes copied with %lu kB/sec.\r\n",
-                   p1, tim ? (p1 / tim) : 0);
-            f_close(&File1);
-            f_close(&File2);
-            break;
-#endif
-#if FF_FS_RPATH
-        case 'g' :  /* fg <path> - Change current directory */
-            while (*ptr == ' ') ptr++;
-            put_rc(f_chdir(ptr));
-            break;
-#if FF_FS_RPATH >= 2
-        case 'q' :  /* fq - Show current dir path */
-            res = f_getcwd(Linebuf, sizeof Linebuf);
-            if (res)
-                put_rc(res);
-            else
-                PRINTF("%s\r\n", Linebuf);
-            break;
-#endif
-#endif
-#if FF_USE_LABEL
-        case 'b' :  /* fb <name> - Set volume label */
-            while (*ptr == ' ') ptr++;
-            put_rc(f_setlabel(ptr));
-            break;
-#endif  /* FF_USE_LABEL */
-#if FF_USE_MKFS
-        case 'm' :  /* fm <type> <csize> - Create file system */
-            if (!xatoi(&ptr, &p2) || !xatoi(&ptr, &p3)) break;
-            PRINTF("The volume will be formatted. Are you sure? (Y/n)=");
-            get_line(Linebuf, sizeof Linebuf);
-            if (Linebuf[0] == 'Y')
-                put_rc(f_mkfs("", (BYTE)p2, (DWORD)p3, Buff, sizeof Buff));
-            break;
-#endif  /* FF_USE_MKFS */
-            /* fz [<size>] - Change/Show R/W length for fr/fw/fx command */
-        case 'z' :
-            if (xatoi(&ptr, &p1) && p1 >= 1 && p1 <= (long)sizeof Buff)
-                blen = p1;
-            PRINTF("blen=%u\r\n", blen);
-            break;
-    }
-}
-
-static void memory_inf(char *ptr)
-{
-    long  p1, p2, p3;
-
-    switch (*ptr++) {
-        case 'd' :  /* md[b|h|w] <address> [<count>] - Dump memory */
-            switch (*ptr++) {
-                case 'w':
-                    p3 = DW_LONG;
-                    break;
-                case 'h':
-                    p3 = DW_SHORT;
-                    break;
-                default:
-                    p3 = DW_CHAR;
-            }
-            if (!xatoi(&ptr, &p1)) break;
-            if (!xatoi(&ptr, &p2)) p2 = 128 / p3;
-            for (ptr = (char*)p1; p2 >= 16 / p3; ptr += 16, p2 -= 16 / p3)
-                put_dump(ptr, (DWORD)ptr, 16 / p3, p3);
-            if (p2) put_dump((BYTE*)ptr, (UINT)ptr, p2, p3);
-            break;
-        case 'f' :  /* mf <address> <value> <count> - Fill memory */
-            if (!xatoi(&ptr, &p1) || !xatoi(&ptr, &p2) || !xatoi(&ptr, &p3)) {
-                break;
-            }
-            while (p3--) {
-                *(BYTE*)p1 = (BYTE)p2;
-                p1++;
-            }
-            break;
-        case 'e' :  /* me[b|h|w] <address> [<value> ...] - Edit memory */
-            switch (*ptr++) {   /* Get data width */
-                case 'w':
-                    p3 = DW_LONG;
-                    break;
-                case 'h':
-                    p3 = DW_SHORT;
-                    break;
-                default:
-                    p3 = DW_CHAR;
-            }
-            if (!xatoi(&ptr, &p1)) break;   /* Get start address */
-            if (xatoi(&ptr, &p2)) { /* 2nd parameter is given (direct mode) */
-                do {
-                    switch (p3) {
-                        case DW_LONG:
-                            *(DWORD*)p1 = (DWORD)p2;
-                            break;
-                        case DW_SHORT:
-                            *(WORD*)p1 = (WORD)p2;
-                            break;
-                        default:
-                            *(BYTE*)p1 = (BYTE)p2;
-                    }
-                    p1 += p3;
-                } while (xatoi(&ptr, &p2)); /* Get next value */
-                break;
-            }
-            for (;;) {  /* 2nd parameter is not given (interactive mode) */
-                switch (p3) {
-                    case DW_LONG:
-                        PRINTF("%08X 0x%08X-", (unsigned int)p1, *(unsigned int*)p1);
-                        break;
-                    case DW_SHORT:
-                        PRINTF("%08X 0x%04X-", (unsigned int)p1, *(WORD*)p1);
-                        break;
-                    default:
-                        PRINTF("%08X 0x%02X-", (unsigned int)p1, *(BYTE*)p1);
-                }
-                ptr = Linebuf;
-                get_line(ptr, sizeof Linebuf);
-                if (*ptr == '.') break;
-                if ((BYTE)*ptr >= ' ') {
-                    if (!xatoi(&ptr, &p2)) continue;
-                    switch (p3) {
-                        case DW_LONG:
-                            *(DWORD*)p1 = (DWORD)p2;
-                            break;
-                        case DW_SHORT:
-                            *(WORD*)p1 = (WORD)p2;
-                            break;
-                        default:
-                            *(BYTE*)p1 = (BYTE)p2;
-                    }
-                }
-                p1 += p3;
-            }
-    }
-}
-
-static void disk_inf(char *ptr)
-{
-    long  p1, p2;
-    UINT   s1;
-    BYTE res, b, drv = 0;
-    DWORD ofs = 0, sect = 0, blk[2];
-
-    switch (*ptr++) {
-        case 'd' :  /* dd [<pd#> <sect>] - Dump secrtor */
-            if (!xatoi(&ptr, &p1)) {
-                p1 = drv;
-                p2 = sect;
-            } else {
-                if (!xatoi(&ptr, &p2)) break;
-            }
-            drv = (BYTE)p1;
-            sect = p2;
-            res = disk_read(drv, Buff, sect, 1);
-            if (res) {
-                PRINTF("rc=%d\r\n", (WORD)res);
-                break;
-            }
-            PRINTF("PD#:%u LBA:%lu\r\n", drv, sect++);
-            for (ptr=(char*)Buff, ofs = 0; ofs < 0x200; ptr += 16, ofs += 16)
-                put_dump((BYTE*)ptr, ofs, 16, DW_CHAR);
-            break;
-
-        case 'i' :  /* di <pd#> - Initialize disk */
-            if (!xatoi(&ptr, &p1)) break;
-            PRINTF("rc=%d\r\n", (WORD)disk_initialize((BYTE)p1));
-            break;
-
-        case 's' :  /* ds <pd#> - Show disk status */
-            if (!xatoi(&ptr, &p1)) break;
-            if (disk_ioctl((BYTE)p1, GET_SECTOR_COUNT, &p2) == RES_OK) {
-                PRINTF("Drive size: %lu sectors\r\n", p2);
-            }
-            if (disk_ioctl((BYTE)p1, GET_BLOCK_SIZE, &p2) == RES_OK) {
-                PRINTF("Block size: %lu sectors\r\n", p2);
-            }
-            if (disk_ioctl((BYTE)p1, MMC_GET_TYPE, &b) == RES_OK) {
-                PRINTF("Media type: %u\r\n", b);
-            }
-            if (disk_ioctl((BYTE)p1, MMC_GET_CSD, Buff) == RES_OK) {
-                PUTS("CSD:\r\n");
-                put_dump(Buff, 0, 16, DW_CHAR);
-            }
-            if (disk_ioctl((BYTE)p1, MMC_GET_CID, Buff) == RES_OK) {
-                PUTS("CID:\r\n");
-                put_dump(Buff, 0, 16, DW_CHAR);
-            }
-            if (disk_ioctl((BYTE)p1, MMC_GET_OCR, Buff) == RES_OK) {
-                PUTS("OCR:\r\n");
-                put_dump(Buff, 0, 4, DW_CHAR);
-            }
-            if (disk_ioctl((BYTE)p1, MMC_GET_SDSTAT, Buff) == RES_OK) {
-                PUTS("SD Status:\r\n");
-                for (s1 = 0; s1 < 64; s1 += 16) {
-                    put_dump(Buff+s1, s1, 16, DW_CHAR);
-                }
-            }
-            break;
-
-        case 'c' :  /* Disk ioctl */
-            switch (*ptr++) {
-                case 's' :  /* dcs <pd#> - CTRL_SYNC */
-                    if (!xatoi(&ptr, &p1)) break;
-                    PRINTF("rc=%d\r\n", disk_ioctl((BYTE)p1, CTRL_SYNC, 0));
-                    break;
-                case 'e' :  /* dce <pd#> <s.lba> <e.lba> - CTRL_TRIM */
-                    if (!xatoi(&ptr, &p1) ||
-                            !xatoi(&ptr, (long*)&blk[0]) ||
-                            !xatoi(&ptr, (long*)&blk[1])) {
-                        break;
-                    }
-                    PRINTF("rc=%d\r\n", disk_ioctl((BYTE)p1, CTRL_TRIM, blk));
-                    break;
-            }
-    }
-}
-
-void put_dump (
-    void* buff,             /* Pointer to the array to be dumped */
-    unsigned long addr,     /* Heading address value */
-    int len,                /* Number of items to be dumped */
-    int width               /* Size of the items (DW_CHAR, DW_SHORT, DW_LONG) */
-)
-{
-    int i;
-    unsigned char *bp;
-    unsigned short *sp;
-    unsigned long *lp;
-
-    PRINTF( "%08lx ", addr );      /* address */
-    switch ( width )  {
-        case DW_CHAR:
-            bp = (unsigned char *)buff;
-            for ( i = 0; i < len; i++ ) {       /* Hexdecimal dump */
-                PRINTF( " %02x", bp[i] );
-            }
-            PUTC(' ');
-            for ( i = 0; i < len; i++ ) {       /* ASCII dump */
-                PUTC( (bp[i] >= ' ' && bp[i] <= '~') ? bp[i] : '.' );
-            }
-            break;
-        case DW_SHORT:
-            sp = (unsigned short *)buff;
-            do {                            /* Hexdecimal dump */
-                PRINTF( " %04x", *sp++ );
-            } while ( --len );
-            break;
-        case DW_LONG:
-            lp = (unsigned long *)buff;
-            do {                            /* Hexdecimal dump */
-                PRINTF( " %08lx", *lp++ );
-            } while ( --len );
-            break;
-    }
-    PUTS( "\r\n" );
-}
-
-// RTC related subroutines
-void chk_and_set_time(char *ptr)
-{
-    char buf[64];
-
-    long p1;
-    struct tm t;
-    time_t seconds;
-
-    if (xatoi(&ptr, &p1)) {
-        t.tm_year       = (uint8_t)p1 + 100;
-        pc.printf("Year:%ld ",p1);
-        xatoi( &ptr, &p1 );
-        t.tm_mon        = (uint8_t)p1 - 1;
-        pc.printf("Month:%ld ",p1);
-        xatoi( &ptr, &p1 );
-        t.tm_mday       = (uint8_t)p1;
-        pc.printf("Day:%ld ",p1);
-        xatoi( &ptr, &p1 );
-        t.tm_hour       = (uint8_t)p1;
-        pc.printf("Hour:%ld ",p1);
-        xatoi( &ptr, &p1 );
-        t.tm_min        = (uint8_t)p1;
-        pc.printf("Min:%ld ",p1);
-        xatoi( &ptr, &p1 );
-        t.tm_sec        = (uint8_t)p1;
-        pc.printf("Sec: %ld \r\n",p1);
-        seconds = mktime(&t);
-        set_time(seconds);
-    } else {
-        seconds = time(NULL);
-    }
-    strftime(buf, 50, " %B %d,'%y, %H:%M:%S\r\n", localtime(&seconds));
-    pc.printf("[Time] %s", buf);
-}
-
-//  Get key input data
-void get_line (char *buff, int len)
-{
-    char c;
-    int idx = 0;
-
-    for (;;) {
-        c = GETC();
-        //    Added by Kenji Arai / JH1PJL   May 9th, 2010
-        if (c == '\r') {
-            buff[idx++] = c;
-            break;
-        }
-        if ((c == '\b') && idx) {
-            idx--;
-            PUTC(c);
-            PUTC(' ');
-            PUTC(c);
-        }
-        if (((uint8_t)c >= ' ') && (idx < len - 1)) {
-            buff[idx++] = c;
-            PUTC(c);
-        }
-    }
-    buff[idx] = 0;
-    PUTS("\r\n");
-}
-
-/*  Outpur LF & CR */
-void crlf( void )
-{
-    PRINTF( "\r\n" );
-}
-
-/*  Check key input */
-unsigned int check_hit_key (void)
-{
-    return ( READABLE() );
-}
-
-/*----------------------------------------------*/
-/* Get a value of the string                    */
-/*----------------------------------------------*/
-/*  "123 -5   0x3ff 0b1111 0377  w "
-        ^                           1st call returns 123 and next ptr
-           ^                        2nd call returns -5 and next ptr
-                   ^                3rd call returns 1023 and next ptr
-                          ^         4th call returns 15 and next ptr
-                               ^    5th call returns 255 and next ptr
-                                  ^ 6th call fails and returns 0
-*/
-int xatoi (         /* 0:Failed, 1:Successful */
-    char **str,     /* Pointer to pointer to the string */
-    long *res       /* Pointer to the valiable to store the value */
-)
-{
-    unsigned long val;
-    unsigned char c, r, s = 0;
-
-    *res = 0;
-    while ( (c = **str) == ' ' ) {
-        (*str)++;   /* Skip leading spaces */
-    }
-    if ( c == '-' ) {       /* negative? */
-        s = 1;
-        c = *(++(*str));
-    }
-    if ( c == '0' ) {
-        c = *(++(*str));
-        switch (c) {
-            case 'x':       /* hexdecimal */
-                r = 16;
-                c = *(++(*str));
-                break;
-            case 'b':       /* binary */
-                r = 2;
-                c = *(++(*str));
-                break;
-            default:
-                if ( c <= ' ' ) return 1;   /* single zero */
-                if ( c < '0' || c > '9' ) return 0; /* invalid char */
-                r = 8;      /* octal */
-        }
-    } else {
-        if ( c < '0' || c > '9' ) return 0; /* EOL or invalid char */
-        r = 10;         /* decimal */
-    }
-    val = 0;
-    while ( c > ' ' ) {
-        if ( c >= 'a' ) {
-            c -= 0x20;
-        }
-        c -= '0';
-        if ( c >= 17 ) {
-            c -= 7;
-            if ( c <= 9 ) {
-                return 0;   /* invalid char */
-            }
-        }
-        if ( c >= r ) {
-            return 0;   /* invalid char for current radix */
-        }
-        val = val * r + c;
-        c = *(++(*str));
-    }
-    if (s) val = 0 - val;           /* apply sign if needed */
-    *res = val;
-    return 1;
-}
--- a/FatFs_Mon/mon.h	Sat May 02 03:45:17 2020 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-/*
- * mbed Application program for the mbed
- *  FatFs Check program /monitor part
- *
- * Copyright (c) 2015,'18,'19,'20 Kenji Arai / JH1PJL
- *  http://www7b.biglobe.ne.jp/~kenjia/
- *  https://os.mbed.com/users/kenjiArai/
- *      Created:    May        5th, 2015
- *      Revised:    June      14th, 2015
- *      Revised:    May        2nd, 2020
- */
-
-//  Function prototypes --------------------------------------------------------
-void mon(void);
-uint32_t get_disk_freespace(void);
-uint32_t get_data_file_size(const char *const file_name);
--- a/main.cpp	Sat May 02 03:45:17 2020 +0000
+++ b/main.cpp	Tue Nov 09 15:21:06 2021 +0000
@@ -1,165 +1,41 @@
-/*
- * Mbed Application program
- *  SD Card file control function with FatFs on Mbed-os5 or os2
- *
- * Copyright (c) 2018,'19,'20 Kenji Arai / JH1PJL
- *  http://www7b.biglobe.ne.jp/~kenjia/
- *  https://os.mbed.com/users/kenjiArai/
- *      Created:    April      4th, 2018
- *      Revised:    May        2nd, 2020
- */
-
-/*
-    Tested board on OS2:
-        Nucleo-F401RE, -F411RE, -F446RE, -L073RZ, -L152RE, -L476RG
-    Tested board on OS5.15.0
-        Nucleo-F401RE, -F411RE, -F446RE, -L152RE, -L073RZ, -L476RG          
-        nRF52840-DK, nRF52-DK
-        FRDM-K64F
- */
-
 //  Include --------------------------------------------------------------------
 #include    "mbed.h"
-#if (MBED_MAJOR_VERSION == 2)
 #include    "SDFileSystem.h"
-#elif (MBED_MAJOR_VERSION == 5)
-#include    "SDBlockDevice.h"
-#include    "FATFileSystem.h"
-#endif
-#include    "mon.h"
-#include    <stdlib.h>
-
-//  Definition -----------------------------------------------------------------
-#define     USER_SW_ON      0
-#if (MBED_MAJOR_VERSION == 2)
-#define     LOOP_TIME       100     // 100mS
-#elif (MBED_MAJOR_VERSION == 5)
-#define     LOOP_TIME       50      // 50mS
-#endif
-
-#define DEBUG  0
-
-#if DEBUG
-#define DBG(...)    pc.printf(__VA_ARGS__)
-#else
-#define DBG(...)    {;}
-#endif
-
-//  Constructor ----------------------------------------------------------------
-Serial          pc(USBTX, USBRX, 115200);
-#if defined(TARGET_NRF52840_DK) || defined(TARGET_NRF52_DK) ||\
-    defined(TARGET_K64F)
-DigitalIn       user_sw(BUTTON1, PullUp);
-#else
-DigitalIn       user_sw(USER_BUTTON);
-#endif
-#if (MBED_MAJOR_VERSION == 5)
-#if defined(TARGET_NRF52840_DK) || defined(TARGET_NRF52_DK)
-SDBlockDevice   sd(D11, D12, D13, D10, 8000000);
-#else
-SDBlockDevice   sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, 12000000);
-#endif
-FATFileSystem   fs("fs");
-#endif
-Timer tmr;
 
 //  RAM ------------------------------------------------------------------------
 
 //  ROM / Constant data --------------------------------------------------------
-const char *const opening_msg0 = "microSD Card test program";
-#if (MBED_MAJOR_VERSION == 2)
-char *const opening_msg1 = " -> run on Mbed Classic\r\n";
-#elif (MBED_MAJOR_VERSION == 5)
-const char *const opening_msg1 = " -> run on Mbed OS-5\r\n";
-#endif
-const char *const opening_msg2 = "microSD Card is ready for use\r\n";
-const char *const opening_msg3 = "Please hit any key to start!\r\n";
+const char *const opening_msg0 = "something to write : ";
 
-//  Function prototypes --------------------------------------------------------
-extern void print_revision(void);
-extern uint32_t get_disk_freespace(void);
-extern uint32_t get_data_file_size(const char *const file_name);
+AnalogIn mic(PA_2);
+DigitalOut led(PC_13);
 
-//------------------------------------------------------------------------------
 //  Control Program
 //------------------------------------------------------------------------------
 int main()
 {
-    time_t      seconds;
-    uint32_t data0 = 10000U;
-    uint32_t data1 = 20000U;
-    uint32_t data2 = 30000U;
-    uint32_t data3 = 40000U;
-    uint32_t data4 = 50000U;
-    uint32_t data5 = 60000U;
+    SDFileSystem    sd(PB_15, PB_14, PB_13, PB_12, "fs");  // MOSI,MISO,SCK,CS
+    
 
-    pc.printf("\r\n\r\n");
-    print_revision();
-    DBG("line:%d\r\n", __LINE__);
-#if (MBED_MAJOR_VERSION == 5)
-    /* Init SD CARD reader */
-    sd.init();
-    fs.mount(&sd);
-#else
-    SDFileSystem    sd(D11, D12, D13, D10, "fs");  // do,di,clk,cs
-    wait_ms(100);
-#endif
+
     FILE* fp = fopen("/fs/mydata.txt", "a");
     if (fp != 0) {
-        DBG("line:%d\r\n", __LINE__);
-        pc.printf("%s%s",  opening_msg0, opening_msg1);
-        fprintf(fp,"%s%s", opening_msg0, opening_msg1);
-        pc.printf("%s",  opening_msg2);
+        fprintf(fp,"%s", opening_msg0);
+        led = 1;
         fclose(fp);
     } else {
-        pc.printf("ERROR\r\n");
+        /*Error Message*/
+        led = 0;
     }
-    pc.printf("%s",  opening_msg3);
-    while (pc.readable() == 0) { ;}
-    char c = pc.getc(); // dummy read
-    while (true) {
-        DBG("line:%d\r\n", __LINE__);
-        tmr.reset();
-        tmr.start();
-        uint32_t size_disk = get_disk_freespace();
-        uint32_t size_file = get_data_file_size("mydata.txt");
-        pc.printf("free disk:%10u, file:%8u  ", size_disk, size_file);
-        fp = fopen("/fs/mydata.txt", "a");
-        if(fp != 0) {
-            char tmp[64];
-            DBG("line:%d\r\n", __LINE__);
-            seconds = time(NULL);
-            strftime(tmp, 64, "DATE %H:%M:%S,%Y/%m/%d,", localtime(&seconds));
-            pc.printf("%s", tmp);
-            fprintf(fp, "%s", tmp);
-            pc.printf("%08d;%08d;%08d;%08d;%08d;%08d\r\n",
-                      ++data0, ++data1, ++data2, ++data3, ++data4, ++data5);
-            fprintf(fp, "%08d;%08d;%08d;%08d;%08d;%08d\r\n",
-                        data0,   data1,   data2,   data3,   data4,   data5);
-            fclose(fp);
-        } else {
-            pc.printf("ERROR\r\n");
-        }
-        uint32_t time_sd = tmr.read_ms();
-        pc.printf("time:%3d ", time_sd);
-#if (MBED_MAJOR_VERSION == 2)
-        if (time_sd < LOOP_TIME -2){
-            wait_ms(LOOP_TIME - time_sd);
-        }
-#elif (MBED_MAJOR_VERSION == 5)
-        if (time_sd < LOOP_TIME -2){
-            ThisThread::sleep_for(LOOP_TIME - time_sd);
-        }
-#endif
-        if (user_sw == USER_SW_ON) {
-            break;
-        }
-        if (pc.readable()) {
-            mon();
-        }
+        
+    fp = fopen("/fs/mydata.txt", "a");
+    
+    if(fp != 0) {
+        fprintf(fp,"free disk:  \n");
+        fclose(fp);
+    } else {
+        /*Error message*/
     }
-    while(true) {
-        mon();
-        system_reset();
-    }
+       while(1){
+           }
 }