-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSDCard.cpp
135 lines (104 loc) · 1.98 KB
/
SDCard.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "SDCard.h"
#include "fatfs/pff.h"
#ifdef USE_SDCARD
namespace {
FATFS fatFs;
DIR dir;
SDCardResponse fresultToResponse(FRESULT res)
{
SDCardResponse ret = SD_SUCCESS;
switch(res)
{
case FR_OK:
break;
case FR_DISK_ERR:
ret = SD_ERR_GENERIC;
break;
case FR_NOT_READY:
ret = SD_ERR_NO_CARD_PRESENT;
break;
case FR_NO_FILE:
case FR_NO_PATH:
ret = SD_ERR_FILE_NOT_FOUND;
break;
case FR_NOT_OPENED:
ret = SD_ERR_NO_ROOT;
break;
case FR_NOT_ENABLED:
ret = SD_ERR_CARD_LOCKED;
break;
case FR_NO_FILESYSTEM:
ret = SD_ERR_PARTITION_READ;
break;
}
return ret;
}
};
SDCard sdCard;
SDCard::SDCard()
: mbRecord(false), mbPlayback(false)
{
}
SDCardResponse SDCard::init()
{
return fresultToResponse(pf_mount(&fatFs));
}
SDCardResponse SDCard::startRecord(const char* pFilename)
{
mRecordedBytes = 0;
mOpenFilesize = 0;
FRESULT res = pf_open(pFilename);
if (res != FR_OK)
return fresultToResponse(res);
}
void SDCard::recordPacket(const Packet& rPacket)
{
}
uint32_t SDCard::endRecord()
{
return mRecordedBytes;
}
SDCardResponse SDCard::startPlayback(const char* pFilename)
{
SDCardResponse ret = init();
if (ret != SD_SUCCESS)
return ret;
FRESULT res = pf_open(pFilename);
if (res != FR_OK)
return fresultToResponse(res);
mbPlayback = true;
return SD_SUCCESS;
}
bool SDCard::playbackDataAvailable()
{
}
uint8_t SDCard::playbackRead8()
{
uint8_t b = 0;
uint16_t readSize;
FRESULT res = pf_read(&b,1,(WORD*)&readSize);
return b;
}
void SDCard::endPlayback()
{
mbPlayback = false;
}
SDCardResponse SDCard::resetScan()
{
return fresultToResponse(pf_opendir(&dir,0));
}
SDCardResponse SDCard::getNextFile(uint8_t* pBuffer,uint8_t size)
{
FILINFO fileinfo;
FRESULT ret = pf_readdir(&dir,&fileinfo);
if (ret != FR_OK)
return fresultToResponse(ret);
uint8_t b=0;
while(fileinfo.fname[b] && b < size-1)
{
pBuffer[b] = fileinfo.fname[b];
b++;
}
return SD_SUCCESS;
}
#endif