1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-23 16:25:16 +03:00

[Horus] A few SD card / Models storage fixes

This commit is contained in:
Bertrand Songis 2015-11-27 21:33:02 +01:00
parent 787d2ffa92
commit bca9866675
5 changed files with 54 additions and 36 deletions

View file

@ -126,3 +126,21 @@ void storageReadAll()
eeLoadModel(g_eeGeneral.currModel); eeLoadModel(g_eeGeneral.currModel);
} }
void storageEraseAll(bool warn)
{
TRACE("storageEraseAll()");
generalDefault();
modelDefault(0);
if (warn) {
ALERT(STR_STORAGE_WARNING, STR_BAD_RADIO_DATA, AU_BAD_RADIODATA);
}
MESSAGE(STR_STORAGE_WARNING, STR_STORAGE_FORMAT, NULL, AU_STORAGE_FORMAT);
storageFormat();
storageDirty(EE_GENERAL|EE_MODEL);
storageCheck(true);
}

View file

@ -36,6 +36,13 @@
#include "../opentx.h" #include "../opentx.h"
void getModelPath(char * path, const char * filename)
{
strcpy(path, STR_MODELS_PATH);
path[sizeof(MODELS_PATH)-1] = '/';
strcpy(&path[sizeof(MODELS_PATH)], filename);
}
const char * writeFile(const char * filename, const uint8_t * data, uint16_t size) const char * writeFile(const char * filename, const uint8_t * data, uint16_t size)
{ {
FIL file; FIL file;
@ -71,9 +78,7 @@ const char * writeFile(const char * filename, const uint8_t * data, uint16_t siz
const char * writeModel() const char * writeModel()
{ {
char path[256]; char path[256];
strcpy(path, STR_MODELS_PATH); getModelPath(path, g_eeGeneral.currModelFilename);
path[sizeof(MODELS_PATH)-1] = '/';
strAppend(&path[sizeof(MODELS_PATH)], g_eeGeneral.currModelFilename, sizeof(g_eeGeneral.currModelFilename));
return writeFile(path, (uint8_t *)&g_model, sizeof(g_model)); return writeFile(path, (uint8_t *)&g_model, sizeof(g_model));
} }
@ -116,13 +121,6 @@ const char * loadFile(const char * filename, uint8_t * data, uint16_t maxsize)
return NULL; return NULL;
} }
void getModelPath(char * path, const char * filename)
{
strcpy(path, STR_MODELS_PATH);
path[sizeof(MODELS_PATH)-1] = '/';
strcpy(&path[sizeof(MODELS_PATH)], filename);
}
const char * readModel(const char * filename, uint8_t * buffer, uint32_t size) const char * readModel(const char * filename, uint8_t * buffer, uint32_t size)
{ {
char path[256]; char path[256];
@ -457,12 +455,11 @@ const char * createModel(int category)
char filename[LEN_MODEL_FILENAME+1]; char filename[LEN_MODEL_FILENAME+1];
memset(filename, 0, sizeof(filename)); memset(filename, 0, sizeof(filename));
strcpy(filename, "Model.bin"); strcpy(filename, "model.bin");
int index = findNextFileIndex(filename, MODELS_PATH); int index = findNextFileIndex(filename, MODELS_PATH);
if (index > 0) { if (index > 0) {
modelDefault(index); modelDefault(index);
TRACE("filename=%s", filename);
memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename)); memcpy(g_eeGeneral.currModelFilename, filename, sizeof(g_eeGeneral.currModelFilename));
storageDirty(EE_GENERAL); storageDirty(EE_GENERAL);
storageDirty(EE_MODEL); storageDirty(EE_MODEL);
@ -473,3 +470,21 @@ const char * createModel(int category)
return NULL; return NULL;
} }
void storageEraseAll(bool warn)
{
TRACE("storageEraseAll()");
generalDefault();
modelDefault(1);
if (warn) {
ALERT(STR_STORAGE_WARNING, STR_BAD_RADIO_DATA, AU_BAD_RADIODATA);
}
MESSAGE(STR_STORAGE_WARNING, STR_STORAGE_FORMAT, NULL, AU_STORAGE_FORMAT);
storageFormat();
storageDirty(EE_GENERAL|EE_MODEL);
storageCheck(true);
}

View file

@ -109,20 +109,3 @@ void postModelLoad(bool newModel)
PLAY_MODEL_NAME(); PLAY_MODEL_NAME();
} }
void storageEraseAll(bool warn)
{
TRACE("storageEraseAll()");
generalDefault();
modelDefault(0);
if (warn) {
ALERT(STR_STORAGE_WARNING, STR_BAD_RADIO_DATA, AU_BAD_RADIODATA);
}
MESSAGE(STR_STORAGE_WARNING, STR_STORAGE_FORMAT, NULL, AU_STORAGE_FORMAT);
storageFormat();
storageDirty(EE_GENERAL|EE_MODEL);
storageCheck(true);
}

View file

@ -213,7 +213,7 @@ DRESULT disk_write (
} }
if (count == 1) { if (count == 1) {
Status = SD_WriteBlock((uint8_t *)buff, sector*BLOCK_SIZE, BLOCK_SIZE); // 4GB Compliant Status = SD_WriteBlock((uint8_t *)buff, sector, BLOCK_SIZE); // 4GB Compliant
} }
else { else {
Status = SD_WriteMultiBlocks((uint8_t *)buff, sector, BLOCK_SIZE, count); // 4GB Compliant Status = SD_WriteMultiBlocks((uint8_t *)buff, sector, BLOCK_SIZE, count); // 4GB Compliant

View file

@ -1624,10 +1624,11 @@ OPTIMIZE("O0") SD_Error SD_WriteBlock(uint8_t *writebuff, uint32_t WriteAddr, ui
SDIO_DMACmd(ENABLE); SDIO_DMACmd(ENABLE);
#endif #endif
if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) {
{
BlockSize = 512; BlockSize = 512;
WriteAddr /= 512; }
else {
WriteAddr *= 512;
} }
/* Set Block Size for Card */ /* Set Block Size for Card */
@ -1751,10 +1752,11 @@ OPTIMIZE("O0") SD_Error SD_WriteMultiBlocks(uint8_t *writebuff, uint32_t WriteAd
SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, (NumberOfBlocks * BlockSize)); SD_LowLevel_DMA_TxConfig((uint32_t *)writebuff, (NumberOfBlocks * BlockSize));
SDIO_DMACmd(ENABLE); SDIO_DMACmd(ENABLE);
if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) if (CardType == SDIO_HIGH_CAPACITY_SD_CARD) {
{
BlockSize = 512; BlockSize = 512;
WriteAddr /= 512; }
else {
WriteAddr *= 512;
} }
/* Set Block Size for Card */ /* Set Block Size for Card */