aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2018-11-26 08:37:59 +0200
committerAvi Levkovich <avi@twine-s.com>2018-11-26 08:37:59 +0200
commitc04beae40ad2699cc1b27686cc3cb09bd04f13b3 (patch)
tree24052137ca379f9dcaf665801da718a64c6be344 /Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
parent56277e1cdd3d33e5834fc886e1e236afc9afd7a3 (diff)
parenta78d877a558cc9519ece2b48f6f3281d78874c59 (diff)
downloadTango-c04beae40ad2699cc1b27686cc3cb09bd04f13b3.tar.gz
Tango-c04beae40ad2699cc1b27686cc3cb09bd04f13b3.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c120
1 files changed, 82 insertions, 38 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 78fba3c49..3d23f9e48 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -38,7 +38,24 @@ char ErrorMsg[100];
#define MAX_CHUNK_LENGTH 2000
int FileLength = 0;
int FileReceivedLength = 0;
+static char g_cCwdBuf[50] = "/";
+uint32_t WrittenBytes = 0;
+/*ErrorCode FileError_to_ErrorCode[FILE_ERRORS_MAX+1] = {ERROR_CODE__NONE,ERROR_CODE__JOB_UNSPECIFIED_ERROR,ERROR_CODE__JOB_THREAD_BREAK,ERROR_CODE__JOB_WINDER_DANCER_FAIL,
+ ERROR_CODE__JOB_POOLER_DANCER_FAIL,ERROR_CODE__JOB_FEEDER_DANCER_FAIL,ERROR_CODE__JOB_OUT_OF_DYE,ERROR_CODE__JOB_OTHER_ALARM,
+ ERROR_CODE__JOB_TEMPERATURE_ALARM,ERROR_CODE__JOB_LS_ALARM,ERROR_CODE__JOB_PRESSURE_ALARM,ERROR_CODE__JOB_CURRENT_ALARM,ERROR_CODE__JOB_MOTOR_ALARM};
+*/
+
+ErrorCode getErrorCode(FRESULT Fresult)
+{
+ switch (Fresult)
+ {
+ case FR_OK:
+ retrun ERROR_CODE_NONE;
+ default:
+ return ERROR_CODE__FILE_LENGTH_OUT_OF_RANGE;
+ }
+}
bool isDirectory(FileAttribute FileAtt)
{
if (FileAtt&&FILE_ATTRIBUTE__Directory)
@@ -58,26 +75,27 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT;
+ WrittenBytes=0;
+ FileHandle = malloc(sizeof(FIL));
if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
{
- Fresult = f_open(FileHandle,request->filename,FA_READ | FA_WRITE | FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW);
+ Fresult = f_open(FileHandle,request->filename,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
if (Fresult == FR_OK)
{
FileLength = request->length;
response.has_maxchunklength = true;
response.maxchunklength = MAX_CHUNK_LENGTH;
- memcpy (FileHandleChar,FileHandle,sizeof(FileHandle));
+ strcpy(FileHandleChar, "1234");
response.uploadid = FileHandleChar; //supporting only single file at each time.
}
- }
- else
- {
- Fresult = FR_DENIED;
+
}
responseContainer = createContainer(MESSAGE_TYPE__FileUploadResponse, requestContainer->token, false, &response, &file_upload_response__pack, &file_upload_response__get_packed_size);
- if (status!= OK)
+ if (Fresult!= FR_OK)
{
responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID;
responseContainer.errormessage = "JOb Active or incorrect parameters";
@@ -96,7 +114,6 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
uint32_t status = OK;
FRESULT Fresult = FR_OK;
- uint32_t WrittenBytes = 0;
MessageContainer responseContainer;
@@ -105,11 +122,13 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
FileChunkUploadResponse response = FILE_CHUNK_UPLOAD_RESPONSE__INIT;
- FIL *ReceivedFileHandle = 0; //the system supports a single active file
+ FIL *ReceivedFileHandle; //the system supports a single active file
- memcpy (ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle));
- if (ReceivedFileHandle == FileHandle)
- {
+ // if (request->uploadid == 1)
+ ReceivedFileHandle = FileHandle;
+// memcpy (&ReceivedFileHandle,request->uploadid,sizeof(ReceivedFileHandle));
+ //if (ReceivedFileHandle == FileHandle)
+ //{
Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes );
// FIL *fp, /* Pointer to the file object */
// const void *buff, /* Pointer to the data to be written */
@@ -121,13 +140,12 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
}
else
{
- int FileLength = 0;
FileReceivedLength += WrittenBytes;
if (FileReceivedLength == FileLength)
{
REPORT_MSG (FileReceivedLength,"file upload ended successfully");
f_close(ReceivedFileHandle);
- FileHandle = 0;
+ free (FileHandle);
}
else
{
@@ -135,18 +153,18 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
REPORT_MSG (FileReceivedLength,"file upload too much data!");
f_close(ReceivedFileHandle);
- FileHandle = 0;
+ free (FileHandle);
}
}
}
- }
+ /*}
else
{
LOG_ERROR (ReceivedFileHandle,"file id error");
f_close(FileHandle);
- FileHandle = 0;
+ free (FileHandle);
status = ERROR_CODE__FILE_NOT_FOUND;
- }
+ }*/
responseContainer = createContainer(MESSAGE_TYPE__FileChunkUploadResponse, requestContainer->token, false, &response, &file_chunk_upload_response__pack, &file_chunk_upload_response__get_packed_size);
if (status!= OK)
@@ -231,7 +249,10 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
}
else
{
+ FileHandle = malloc(sizeof(FIL));
if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ else
{
Fresult = f_open(FileHandle,request->path,FA_CREATE_NEW);
if (Fresult == FR_OK)
@@ -242,10 +263,6 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
}
}
}
- else
- {
- Fresult = FR_DENIED;
- }
}
if (Fresult != FR_OK)
{
@@ -253,7 +270,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
usnprintf(ErrorMsg, 100, "File Operation failed error code %d",Fresult);
}
- FileHandle = 0;
+ free (FileHandle);
responseContainer = createContainer(MESSAGE_TYPE__CreateResponse, requestContainer->token, false, &response, &create_response__pack, &create_response__get_packed_size);
if (status!= OK)
@@ -285,6 +302,14 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
int NumOfFiles = 0;
FRESULT Fresult = FR_OK;
+ Fresult |= f_opendir(&dir, g_cCwdBuf);
+ if(Fresult != FR_OK)
+ {
+ return(Fresult);
+ }
+
+ fno = my_malloc(sizeof(FILINFO));
+ memset (fno,0,sizeof(FILINFO));
Fresult = f_stat(request->path,fno);
if (Fresult == FR_OK)
{
@@ -319,8 +344,6 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
status = ERROR_CODE__FILE_NOT_FOUND;
usnprintf(ErrorMsg, 100, "File Operation failed error code %d",Fresult);
}
- FileHandle = 0;
-
responseContainer = createContainer(MESSAGE_TYPE__DeleteResponse, requestContainer->token, false, &response, &delete_response__pack, &delete_response__get_packed_size);
if (status!= OK)
@@ -332,6 +355,7 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
size_t container_size = message_container__pack(&responseContainer, container_buffer);
my_free(responseContainer.data.data);
+ my_free(fno);
delete_request__free_unpacked(request,NULL);
SendChars(container_buffer, container_size);
@@ -394,13 +418,22 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
#define MAX_NUM_OF_FILES 10
DIR dir;
FILINFO* fno[MAX_NUM_OF_FILES];
- int NumOfFiles = 0;
+ int i,NumOfFiles = 0;
FRESULT Fresult = FR_OK;
+ Fresult |= f_opendir(&dir, g_cCwdBuf);
+ if(Fresult != FR_OK)
+ {
+ return(Fresult);
+ }
+
+ memset (fno,0,sizeof(fno));
FileInfo **FilesInfo = (FileInfo**)my_malloc(sizeof(FileInfo *)*(MAX_NUM_OF_FILES));
FileInfo Data[MAX_NUM_OF_FILES];
+ memset(fno,0,sizeof(fno));
fno[0] = my_malloc(sizeof(FILINFO));
memset (fno[0],0,sizeof(FILINFO));
+
Fresult = f_stat(request->path,fno[0]);
if (Fresult == FR_OK)
{
@@ -415,7 +448,7 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
{
fno[NumOfFiles] = my_malloc(sizeof(FILINFO));
memset (fno[NumOfFiles],0,sizeof(FILINFO));
- Fresult = f_readdir(&dir, &fno[NumOfFiles]); /* Read a directory item */
+ Fresult = f_readdir(&dir, fno[NumOfFiles]); /* Read a directory item */
if (Fresult == FR_OK)
{
if(fno[NumOfFiles]->fname[0] ==0)
@@ -432,17 +465,28 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
}
}
- if (Fresult == FR_OK)
+ if ((Fresult == FR_OK)&&(NumOfFiles))
{
- for (NumOfFiles = 0;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++)
+ for (i = 0;i < NumOfFiles;i++)
{
- Data[NumOfFiles].attribute = fno[NumOfFiles]->fattrib;
- Data[NumOfFiles].name = fno[NumOfFiles]->fname;
- Data[NumOfFiles].length = fno[NumOfFiles]->fsize;
- Data[NumOfFiles].lastmodifieddate = fno[NumOfFiles]->fdate;
- Data[NumOfFiles].lastmodifiedtime = fno[NumOfFiles]->ftime;
- response.items[NumOfFiles] = &Data[NumOfFiles];
+ file_info__init(&Data[i]);
+ FilesInfo[i] = &Data[i];
+ Data[i].has_attribute = true;
+ Data[i].attribute = fno[i]->fattrib;
+ Data[i].has_length = true;
+ Data[i].name = fno[i]->fname;
+ Data[i].has_length = true;
+ Data[i].length = fno[i]->fsize;
+ Data[i].lastmodifieddate = fno[i]->fdate;
+ Data[i].lastmodifiedtime = fno[i]->ftime;
}
+ response.n_items = NumOfFiles;
+ response.items = FilesInfo;
+ }
+ else
+ {
+ response.n_items = 0;
+ response.items = NULL;
}
responseContainer = createContainer(MESSAGE_TYPE__GetFilesResponse, requestContainer->token, false, &response, &get_files_response__pack, &get_files_response__get_packed_size);
@@ -458,10 +502,10 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
my_free(FilesInfo);
get_files_request__free_unpacked(request,NULL);
SendChars(container_buffer, container_size);
- for (NumOfFiles = 0;NumOfFiles < MAX_NUM_OF_FILES;NumOfFiles++)
+ for (i = 0;i < NumOfFiles;i++)
{
- if (fno[NumOfFiles])
- my_free (fno[NumOfFiles]);
+ if (fno[i])
+ my_free (fno[i]);
}
return OK;
}