mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-07 01:04:19 +08:00
Copying log analysis file directly to the SD card during logging
This commit is contained in:
+51
-3
@@ -72,6 +72,7 @@ static int deamon_task; /**< Handle of deamon task / thread */
|
||||
static const int MAX_NO_LOGFOLDER = 999; /**< Maximum number of log folders */
|
||||
|
||||
static const char *mountpoint = "/fs/microsd";
|
||||
static const char *mfile_in = "/etc/logging/logconv.m";
|
||||
|
||||
/**
|
||||
* SD log management function.
|
||||
@@ -90,10 +91,12 @@ static void usage(const char *reason);
|
||||
|
||||
static int file_exist(const char *filename);
|
||||
|
||||
static int file_copy(const char* file_old, const char* file_new);
|
||||
|
||||
/**
|
||||
* Print the current status.
|
||||
*/
|
||||
static void print_sdlog_status();
|
||||
static void print_sdlog_status(void);
|
||||
|
||||
/**
|
||||
* Create folder for current logging session.
|
||||
@@ -181,7 +184,17 @@ int create_logfolder(char* folder_path) {
|
||||
/* the result is -1 if the folder exists */
|
||||
|
||||
if (mkdir_ret == 0) {
|
||||
/* folder does not exist */
|
||||
/* folder does not exist, success */
|
||||
|
||||
/* now copy the Matlab/Octave file */
|
||||
char mfile_out[100];
|
||||
sprintf(mfile_out, "%s/session%04u/run_to_plot_data.m", mountpoint, foldernumber);
|
||||
int ret = file_copy(mfile_in, mfile_out);
|
||||
if (!ret) {
|
||||
warnx("copied m file to %s", mfile_out);
|
||||
} else {
|
||||
warnx("failed copying m file from %s to\n %s", mfile_in, mfile_out);
|
||||
}
|
||||
break;
|
||||
|
||||
} else if (mkdir_ret == -1) {
|
||||
@@ -379,7 +392,7 @@ int sdlog_thread_main(int argc, char *argv[]) {
|
||||
* set up poll to block for new data,
|
||||
* wait for a maximum of 1000 ms (1 second)
|
||||
*/
|
||||
const int timeout = 1000;
|
||||
// const int timeout = 1000;
|
||||
|
||||
thread_running = true;
|
||||
|
||||
@@ -550,3 +563,38 @@ int file_exist(const char *filename)
|
||||
return stat(filename, &buffer);
|
||||
}
|
||||
|
||||
int file_copy(const char* file_old, const char* file_new)
|
||||
{
|
||||
FILE *source, *target;
|
||||
source = fopen(file_old, "r");
|
||||
|
||||
if( source == NULL )
|
||||
{
|
||||
warnx("failed opening input file to copy");
|
||||
return 1;
|
||||
}
|
||||
|
||||
target = fopen(file_new, "w");
|
||||
|
||||
if( target == NULL )
|
||||
{
|
||||
fclose(source);
|
||||
warnx("failed to open output file to copy");
|
||||
}
|
||||
|
||||
char buf[128];
|
||||
int nread;
|
||||
while ((nread = fread(buf, sizeof(buf), 1, source)) > 0) {
|
||||
int ret = fwrite(buf, sizeof(buf), 1, target);
|
||||
if (ret <= 0) {
|
||||
warnx("error writing file");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(source);
|
||||
fclose(target);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user