aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common/SWUpdate
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2018-11-22 17:27:30 +0200
committerShlomo Hecht <shlomo@twine-s.com>2018-11-22 17:27:30 +0200
commit1b234fe1217f9ac1bc2869496339a80c98fcf435 (patch)
tree806b6c7f79e70b19a7d79e486b3f1b6e58291bfc /Software/Embedded_SW/Embedded/Common/SWUpdate
parent15721dfb1e5f145064ed7b5ff7bb29953ed4c130 (diff)
downloadTango-1b234fe1217f9ac1bc2869496339a80c98fcf435.tar.gz
Tango-1b234fe1217f9ac1bc2869496339a80c98fcf435.zip
file operation stub and handling
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common/SWUpdate')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c91
1 files changed, 54 insertions, 37 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 78fba3c49..f4c44462e 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -38,6 +38,7 @@ char ErrorMsg[100];
#define MAX_CHUNK_LENGTH 2000
int FileLength = 0;
int FileReceivedLength = 0;
+static char g_cCwdBuf[50] = "/";
bool isDirectory(FileAttribute FileAtt)
{
@@ -57,27 +58,26 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
FileUploadRequest* request = file_upload_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
FileUploadResponse response = FILE_UPLOAD_RESPONSE__INIT;
-
+ 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";
@@ -105,11 +105,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 */
@@ -127,7 +129,7 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
REPORT_MSG (FileReceivedLength,"file upload ended successfully");
f_close(ReceivedFileHandle);
- FileHandle = 0;
+ free (FileHandle);
}
else
{
@@ -135,18 +137,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 +233,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 +247,6 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
}
}
}
- else
- {
- Fresult = FR_DENIED;
- }
}
if (Fresult != FR_OK)
{
@@ -253,7 +254,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)
@@ -319,8 +320,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)
@@ -394,9 +393,16 @@ 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];
fno[0] = my_malloc(sizeof(FILINFO));
@@ -415,7 +421,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 +438,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 +475,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;
}