213 lines
4.3 KiB
C
213 lines
4.3 KiB
C
#include "SDCardMgr.h"
|
|
|
|
#ifdef USE_FATFS
|
|
#include "FatFS/diskio.h"
|
|
#include "FatFS/ff.h"
|
|
|
|
FATFS FatFs; /* File system object */
|
|
FIL File[2]; /* File objects */
|
|
BYTE Buff[4096]; /* Working buffer */
|
|
|
|
#else
|
|
#include "sd_hw_ctl.h"
|
|
#include "FileSystem/fileio_lfn.h"
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include "timer.h"
|
|
|
|
int mSDCardState;
|
|
int mCardDetected;
|
|
int mCardMounted;
|
|
|
|
#ifdef USE_FATFS
|
|
#else
|
|
uint16_t mDriveLetter;
|
|
#endif
|
|
|
|
|
|
#ifdef USE_FATFS
|
|
|
|
int InitSDCard()
|
|
{
|
|
|
|
|
|
mSDCardState = SD_CARD_INIT_STATE;
|
|
mCardDetected = 0;
|
|
mCardMounted = 0;
|
|
|
|
return MountDrive();
|
|
|
|
|
|
}
|
|
int TickSDCard()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
int MountDrive()
|
|
{
|
|
FRESULT res;
|
|
res = f_mount(&FatFs, "", 0); /* Give a work area to the default drive */
|
|
if(!res)
|
|
{
|
|
printf("Could not mount SD card\n");
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
printf("SD Card mounted successfuly");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int IsDriveDetected()
|
|
{
|
|
return mCardDetected;
|
|
}
|
|
|
|
int IsDriveMounted()
|
|
{
|
|
return mCardMounted;
|
|
}
|
|
|
|
int ListRootDir()
|
|
{
|
|
FRESULT res;
|
|
DIR dir;
|
|
UINT i;
|
|
static FILINFO fno;
|
|
char path[] = "/";
|
|
|
|
|
|
|
|
res = f_opendir(&dir, path); /* Open the directory */
|
|
if (res == FR_OK) {
|
|
for (;;) {
|
|
res = f_readdir(&dir, &fno); /* Read a directory item */
|
|
if (res != FR_OK || fno.fname[0] == 0) break; /* Break on error or end of dir */
|
|
// if (fno.fattrib & AM_DIR) { /* It is a directory */
|
|
// i = strlen(path);
|
|
// sprintf(&path[i], "/%s", fno.fname);
|
|
// res = scan_files(path); /* Enter the directory */
|
|
// if (res != FR_OK) break;
|
|
// path[i] = 0;
|
|
// } else { /* It is a file. */
|
|
printf("%s/%s\n", path, fno.fname);
|
|
//}
|
|
}
|
|
f_closedir(&dir);
|
|
}
|
|
|
|
|
|
return 1;
|
|
}
|
|
|
|
#else
|
|
void FILEIO_GetTimestamp (FILEIO_TIMESTAMP * timeStamp)
|
|
{
|
|
timeStamp->date.bitfield.day = 6;
|
|
timeStamp->date.bitfield.month = 5;
|
|
timeStamp->date.bitfield.year = (2017 - 1980);
|
|
|
|
timeStamp->time.bitfield.hours = 9;
|
|
timeStamp->time.bitfield.minutes = 5;
|
|
timeStamp->time.bitfield.secondsDiv2 = 0;
|
|
|
|
timeStamp->timeMs = 0;
|
|
|
|
}
|
|
|
|
int InitSDCard()
|
|
{
|
|
SD_SPIConfigurePins();
|
|
FILEIO_Initialize();
|
|
mSDCardState = SD_CARD_INIT_STATE;
|
|
|
|
mCardDetected = 0;
|
|
mCardMounted = 0;
|
|
|
|
mDriveLetter = 'D';
|
|
TimerStart(SD_CARD_DETECT_TIMER,5000);
|
|
|
|
return 1;
|
|
}
|
|
|
|
int TickSDCard()
|
|
{
|
|
switch(mSDCardState)
|
|
{
|
|
case SD_CARD_INIT_STATE:
|
|
{
|
|
if(IsTimerExpired(SD_CARD_DETECT_TIMER))
|
|
{
|
|
if(FILEIO_MediaDetect(0, 0) == true)
|
|
{
|
|
mCardDetected = 1;
|
|
mSDCardState = SD_CARD_MOUNT_DRIVE_STATE;
|
|
printf("SD Card detected\n");
|
|
}
|
|
else
|
|
{
|
|
TimerStart(SD_CARD_DETECT_TIMER,999);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case SD_CARD_MOUNT_DRIVE_STATE:
|
|
{
|
|
if(FILEIO_DriveMount(mDriveLetter, 0, 0) == FILEIO_ERROR_NONE)
|
|
{
|
|
mCardMounted = 1;
|
|
mSDCardState = SD_CARD_READY_STATE;
|
|
printf("SD Card mounted on drive %c\n",(unsigned char)mDriveLetter);
|
|
}
|
|
else
|
|
{
|
|
mSDCardState = SD_CARD_ERROR_MOUNTING_STATE;
|
|
printf("Error mounting SD card.\n");
|
|
}
|
|
break;
|
|
}
|
|
case SD_CARD_READY_STATE:
|
|
{
|
|
// if(FILEIO_MediaDetect(0, 0) == false)
|
|
// {
|
|
// mCardDetected = 0;
|
|
// mSDCardState = SD_CARD_INIT_STATE;
|
|
// }
|
|
break;
|
|
}
|
|
case SD_CARD_ERROR_MOUNTING_STATE:
|
|
{
|
|
//wait for removal of the sd card...
|
|
// if(FILEIO_MediaDetect(0, 0) == false)
|
|
// {
|
|
// mCardDetected = 0;
|
|
// mSDCardState = SD_CARD_INIT_STATE;
|
|
// printf("SD Card removed");
|
|
// }
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
int MountDrive()
|
|
{
|
|
|
|
}
|
|
|
|
int IsDriveDetected()
|
|
{
|
|
return mCardDetected;
|
|
}
|
|
|
|
int IsDriveMounted()
|
|
{
|
|
return mCardMounted;
|
|
}
|
|
#endif
|