From 05720b5aef53f265c9c364618abc202c3354a03f Mon Sep 17 00:00:00 2001 From: Mark Charlebois Date: Thu, 21 May 2015 09:24:48 -0700 Subject: [PATCH 1/2] Added ability to set OS specific path for dataman file dataman can now be started using: dataman start -f filepath Signed-off-by: Mark Charlebois --- src/modules/dataman/dataman.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/modules/dataman/dataman.c b/src/modules/dataman/dataman.c index e454568825..799723eeed 100644 --- a/src/modules/dataman/dataman.c +++ b/src/modules/dataman/dataman.c @@ -131,8 +131,8 @@ static sem_t g_sys_state_mutex; /* The data manager store file handle and file name */ static int g_fd = -1, g_task_fd = -1; -// FIXME - need a configurable path that is not OS specific -static const char *k_data_manager_device_path = "/fs/microsd/dataman"; +static const char *default_device_path = "/fs/microsd/dataman"; +static char *k_data_manager_device_path = NULL; /* The data manager work queues */ @@ -831,7 +831,7 @@ stop(void) static void usage(void) { - warnx("usage: dataman {start|stop|status|poweronrestart|inflightrestart}"); + warnx("usage: dataman {start [-f datafile]|stop|status|poweronrestart|inflightrestart}"); } int @@ -848,11 +848,20 @@ dataman_main(int argc, char *argv[]) warnx("dataman already running"); return -1; } + if (argc == 4 && strcmp(argv[2],"-f") == 0) { + k_data_manager_device_path = strdup(argv[3]); + warnx("dataman file set to: %s\n", k_data_manager_device_path); + } + else { + k_data_manager_device_path = strdup(default_device_path); + } start(); if (g_fd < 0) { warnx("dataman start failed"); + free(k_data_manager_device_path); + k_data_manager_device_path = NULL; return -1; } @@ -866,8 +875,11 @@ dataman_main(int argc, char *argv[]) return -1; } - if (!strcmp(argv[1], "stop")) + if (!strcmp(argv[1], "stop")) { stop(); + free(k_data_manager_device_path); + k_data_manager_device_path = NULL; + } else if (!strcmp(argv[1], "status")) status(); else if (!strcmp(argv[1], "poweronrestart")) From cb5db8ec83cfa923331ae12ffa5cfecf76c07d8e Mon Sep 17 00:00:00 2001 From: Mark Charlebois Date: Thu, 21 May 2015 10:37:15 -0700 Subject: [PATCH 2/2] dataman: Fixed file permissions on file creation In Linux the file was being created with incorrect permissions. Signed-off-by: Mark Charlebois --- src/modules/dataman/dataman.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/dataman/dataman.c b/src/modules/dataman/dataman.c index 799723eeed..15c568735b 100644 --- a/src/modules/dataman/dataman.c +++ b/src/modules/dataman/dataman.c @@ -671,7 +671,12 @@ task_main(int argc, char *argv[]) } /* Open or create the data manager file */ - g_task_fd = open(k_data_manager_device_path, O_RDWR | O_CREAT | O_BINARY, 0x0777); + g_task_fd = open(k_data_manager_device_path, O_RDWR | O_CREAT | O_BINARY +#ifdef __PX4_LINUX + // Open with read/write permission for user + , S_IRUSR | S_IWUSR +#endif + ); if (g_task_fd < 0) { warnx("Could not open data manager file %s", k_data_manager_device_path);