Skip to content

Commit 196ca6e

Browse files
committed
Added functions for ftp support
1 parent d8adcb3 commit 196ca6e

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

+133
Original file line numberDiff line numberDiff line change
@@ -4693,6 +4693,76 @@ SARA_R5_error_t SARA_R5::ftpGetFile(const String& filename)
46934693
free(command);
46944694
return err;
46954695
}
4696+
SARA_R5_error_t SARA_R5::ftpChangeWorkingDirectory(const String& dirName)
4697+
{
4698+
char *command;
4699+
4700+
command = sara_r5_calloc_char(strlen(SARA_R5_FTP_COMMAND) + dirName.length() + 16);
4701+
if (command==NULL)
4702+
{
4703+
return SARA_R5_ERROR_OUT_OF_MEMORY;
4704+
}
4705+
4706+
sprintf(command, "%s=%d,\"%s\"", SARA_R5_FTP_COMMAND, SARA_R5_FTP_COMMAND_CHANGE_DIR, dirName.c_str());
4707+
4708+
SARA_R5_error_t err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK_OR_ERROR, NULL,
4709+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
4710+
free(command);
4711+
return err;
4712+
}
4713+
4714+
SARA_R5_error_t SARA_R5::ftpCreateDirectory(const String &dirName) {
4715+
4716+
char * command;
4717+
4718+
command = sara_r5_calloc_char(strlen(SARA_R5_FTP_COMMAND) + dirName.length() + 16);
4719+
if (command==NULL)
4720+
{
4721+
return SARA_R5_ERROR_OUT_OF_MEMORY;
4722+
}
4723+
4724+
sprintf(command, "%s=%d,\"%s\"", SARA_R5_FTP_COMMAND, SARA_R5_FTP_COMMAND_MKDIR, dirName.c_str());
4725+
4726+
SARA_R5_error_t err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK_OR_ERROR, NULL,
4727+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
4728+
free(command);
4729+
return err;
4730+
}
4731+
4732+
SARA_R5_error_t SARA_R5::ftpList(const String &dirName, char * response) {
4733+
4734+
char * command;
4735+
4736+
command = sara_r5_calloc_char(strlen(SARA_R5_FTP_COMMAND) + dirName.length() + 16);
4737+
if (command==NULL)
4738+
{
4739+
return SARA_R5_ERROR_OUT_OF_MEMORY;
4740+
}
4741+
4742+
sprintf(command, "%s=%d,\"%s\"", SARA_R5_FTP_COMMAND, SARA_R5_FTP_COMMAND_LS, dirName.c_str());
4743+
4744+
SARA_R5_error_t err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK_OR_ERROR, response,
4745+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
4746+
free(command);
4747+
return err;
4748+
}
4749+
4750+
SARA_R5_error_t SARA_R5::ftpPutFile(const String &localFilename, const String &remoteFileName) {
4751+
char * command;
4752+
4753+
command = sara_r5_calloc_char(strlen(SARA_R5_FTP_COMMAND) + localFilename.length() + remoteFileName.length() + 16);
4754+
if (command==NULL)
4755+
{
4756+
return SARA_R5_ERROR_OUT_OF_MEMORY;
4757+
}
4758+
4759+
sprintf(command, "%s=%d,\"%s\",\"%s\"", SARA_R5_FTP_COMMAND, SARA_R5_FTP_COMMAND_PUT_FILE, localFilename.c_str(), remoteFileName.c_str());
4760+
4761+
SARA_R5_error_t err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK_OR_ERROR,NULL,
4762+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
4763+
free(command);
4764+
return err;
4765+
}
46964766

46974767
SARA_R5_error_t SARA_R5::getFTPprotocolError(int *error_code, int *error_code2)
46984768
{
@@ -5648,6 +5718,69 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
56485718

56495719
return SARA_R5_ERROR_SUCCESS;
56505720
}
5721+
SARA_R5_error_t SARA_R5::getAvailableSize(size_t * size)
5722+
{
5723+
5724+
// Get the remaining space available on the modem in bytes
5725+
char * command;
5726+
char * response;
5727+
5728+
command = sara_r5_calloc_char(strlen(SARA_R5_FILE_SYSTEM_LIST_FILES) + 3);
5729+
if (command==NULL)
5730+
{
5731+
return SARA_R5_ERROR_OUT_OF_MEMORY;
5732+
}
5733+
5734+
sprintf(command, "%s=1", SARA_R5_FILE_SYSTEM_LIST_FILES);
5735+
5736+
response = sara_r5_calloc_char(minimumResponseAllocation);
5737+
if (response == nullptr)
5738+
{
5739+
free(command);
5740+
return SARA_R5_ERROR_OUT_OF_MEMORY;
5741+
}
5742+
SARA_R5_error_t err = sendCommandWithResponse(command, SARA_R5_RESPONSE_OK_OR_ERROR,response,
5743+
SARA_R5_STANDARD_RESPONSE_TIMEOUT);
5744+
5745+
// Process result
5746+
if (err != SARA_R5_ERROR_SUCCESS)
5747+
{
5748+
if (_printDebug == true)
5749+
{
5750+
_debugPort->print(F("getAvailableSize: Fail: Error: "));
5751+
_debugPort->print(err);
5752+
_debugPort->print(F(" Response: {"));
5753+
_debugPort->print(response);
5754+
_debugPort->println(F("}"));
5755+
}
5756+
free(command);
5757+
free(response);
5758+
return err;
5759+
}
5760+
char *responseStart = strstr(response, "+ULSTFILE:");
5761+
if (responseStart == nullptr)
5762+
{
5763+
if (_printDebug == true)
5764+
{
5765+
_debugPort->print(F("getAvailableSize: Failure: {"));
5766+
_debugPort->print(response);
5767+
_debugPort->println(F("}"));
5768+
}
5769+
free(command);
5770+
free(response);
5771+
return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
5772+
}
5773+
5774+
size_t availableSpace;
5775+
responseStart += strlen("+ULSTFILE:"); // Move searchPtr to first char
5776+
while (*responseStart == ' ') responseStart++; // skip spaces
5777+
sscanf(responseStart, "%d", &availableSpace);
5778+
*size = availableSpace;
5779+
5780+
free(command);
5781+
free(response);
5782+
return err;
5783+
}
56515784

56525785
SARA_R5_error_t SARA_R5::getFileSize(String filename, int *size)
56535786
{

src/SparkFun_u-blox_SARA-R5_Arduino_Library.h

+6
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,10 @@ class SARA_R5 : public Print
943943
SARA_R5_error_t connectFTP(void);
944944
SARA_R5_error_t disconnectFTP(void);
945945
SARA_R5_error_t ftpGetFile(const String& filename);
946+
SARA_R5_error_t ftpChangeWorkingDirectory(const String& dirName);
947+
SARA_R5_error_t ftpCreateDirectory(const String& dirName);
948+
SARA_R5_error_t ftpList(const String& dirName, char * response);
949+
SARA_R5_error_t ftpPutFile(const String& localFilename, const String& remoteFileName);
946950
SARA_R5_error_t getFTPprotocolError(int *error_code, int *error_code2);
947951

948952
// Configure security profiles
@@ -1011,6 +1015,8 @@ class SARA_R5 : public Print
10111015
SARA_R5_error_t getFileContents(String filename, char *contents); // OK for binary files. Make sure contents can hold the entire file. Get the size first with getFileSize.
10121016
SARA_R5_error_t getFileBlock(const String& filename, char* buffer, size_t offset, size_t length, size_t& bytes_read); // OK for binary files. Make sure buffer can hold the requested block size.
10131017

1018+
SARA_R5_error_t getAvailableSize(size_t * size); // Get available FS space
1019+
10141020
// Append data to a file, delete file first to not appends the data.
10151021
SARA_R5_error_t appendFileContents(String filename, String str);
10161022
SARA_R5_error_t appendFileContents(String filename, const char *str, int len);

0 commit comments

Comments
 (0)