@@ -4693,6 +4693,76 @@ SARA_R5_error_t SARA_R5::ftpGetFile(const String& filename)
4693
4693
free (command);
4694
4694
return err;
4695
4695
}
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
+ }
4696
4766
4697
4767
SARA_R5_error_t SARA_R5::getFTPprotocolError (int *error_code, int *error_code2)
4698
4768
{
@@ -5648,6 +5718,69 @@ SARA_R5_error_t SARA_R5::getFileBlock(const String& filename, char* buffer, size
5648
5718
5649
5719
return SARA_R5_ERROR_SUCCESS;
5650
5720
}
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
+ }
5651
5784
5652
5785
SARA_R5_error_t SARA_R5::getFileSize (String filename, int *size)
5653
5786
{
0 commit comments