/*
 * Storage_Test.c
 *
 *  Created on: 2020�~4��21��
 *      Author: Wendell
 */

#include "Storage_Test.h"

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>                 //write, close, usleep, read
#include <fcntl.h>                  //uart
#include <string.h>

void Mount_SD_Card_to_MMT(void)
{
    system("mount /dev/mmcblk0p1 /mnt");
}

void Write_To_SD_Card(void)
{
    system("echo sd card write test > /mnt/sd_test.txt");
}

void Unmount_SD_Card_From_MMT(void)
{
    system("umount /mnt");
}

void Mount_SD_Card_to_UsbFlash(void)
{
    system("mount /dev/mmcblk0p1 /UsbFlash");
}

int Is_SD_Card_Write_OK(void)
{
    int result = 0;
    FILE *fp;
    char buf[512];

    fp = fopen("/UsbFlash/sd_test.txt", "r");
    if(fp == NULL)
    {
        return result;
    }
    else
    {
        while(fgets(buf, sizeof(buf), fp) != NULL)
        {
            if(strncmp(buf, "sd card write test", 18) == 0)
            {
                result = 1;
            }
        }
    }
    fclose(fp);

    return result;
}

void Remove_SD_Card_File_From_UsbFlash(void)
{
    system("rm /UsbFlash/sd_test.txt -f");
}

void Unmount_SD_Card_From_UsbFlash(void)
{
    system("umount /UsbFlash");
}

void Mount_USB_to_MMT(void)
{
    system("mount /dev/sda1 /mnt");
}

void Write_To_USB(void)
{
    system("echo usb write test > /mnt/usb_test.txt");
}

void Unmount_USB_From_MMT(void)
{
    system("umount /mnt");
}

void Mount_USB_to_UsbFlash(void)
{
    system("mount /dev/sda1 /UsbFlash");
}

int Is_USB_Write_OK(void)
{
    int result = 0;
    FILE *fp;
    char buf[512];

    fp = fopen("/UsbFlash/usb_test.txt", "r");
    if(fp == NULL)
    {
        return result;
    }
    else
    {
        while(fgets(buf, sizeof(buf), fp) != NULL)
        {
            if(strncmp(buf, "usb write test", 14) == 0)
            {
                result = 1;
            }
        }
    }
    fclose(fp);

    return result;
}

void Remove_USB_File_From_UsbFlash(void)
{
    system("rm /UsbFlash/usb_test.txt -f");
}

void Unmount_USB_From_UsbFlash(void)
{
    system("umount /UsbFlash");
}

void DoStorageTest(void)
{
    Mount_SD_Card_to_MMT();
    Write_To_SD_Card();
    Unmount_SD_Card_From_MMT();

    Mount_SD_Card_to_UsbFlash();
    if(Is_SD_Card_Write_OK() == 0)
    {
        printf("\r\nSD Card Write Test Fail");
        Remove_SD_Card_File_From_UsbFlash();
        Unmount_SD_Card_From_UsbFlash();
        return;
    }
    printf("\r\nSD Card Write Test OK");
    Remove_SD_Card_File_From_UsbFlash();
    Unmount_SD_Card_From_UsbFlash();

    Mount_USB_to_MMT();
    Write_To_USB();
    Unmount_USB_From_MMT();

    Mount_USB_to_UsbFlash();
    if(Is_USB_Write_OK() == 0)
    {
        printf("\r\nUSB Write Test Fail");
        Remove_USB_File_From_UsbFlash();
        Unmount_USB_From_UsbFlash();
        return;
    }
    printf("\r\nUSB Write Test OK");
    Remove_USB_File_From_UsbFlash();
    Unmount_USB_From_UsbFlash();

    printf("\r\nStorage Test Done!");
    printf("\r\nSuccess!\r\n");
}