aboutsummaryrefslogtreecommitdiff
path: root/src/modules/systemlib
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2013-10-30 09:15:55 +0100
committerLorenz Meier <lm@inf.ethz.ch>2013-10-30 09:15:55 +0100
commitdc80d6745e94df71d351f4338c610f910c2a4e94 (patch)
treebd4fbaa1d68fa6f38919167cea8285ba94b7e594 /src/modules/systemlib
parent34d2f318ac8a72cce63e3e14e004daee45001011 (diff)
parent0fa03e65ab3ab0e173e487b3e5f5321780f3afff (diff)
downloadpx4-firmware-dc80d6745e94df71d351f4338c610f910c2a4e94.tar.gz
px4-firmware-dc80d6745e94df71d351f4338c610f910c2a4e94.tar.bz2
px4-firmware-dc80d6745e94df71d351f4338c610f910c2a4e94.zip
Merge branch 'master' of github.com:PX4/Firmware into pwm_ioctls
Diffstat (limited to 'src/modules/systemlib')
-rw-r--r--src/modules/systemlib/param/param.c85
-rw-r--r--src/modules/systemlib/rc_check.c4
-rw-r--r--src/modules/systemlib/rc_check.h2
3 files changed, 44 insertions, 47 deletions
diff --git a/src/modules/systemlib/param/param.c b/src/modules/systemlib/param/param.c
index ccdb2ea38..398657dd7 100644
--- a/src/modules/systemlib/param/param.c
+++ b/src/modules/systemlib/param/param.c
@@ -508,64 +508,63 @@ param_get_default_file(void)
int
param_save_default(void)
{
- int result;
- unsigned retries = 0;
-
- /* delete the file in case it exists */
- struct stat buffer;
- if (stat(param_get_default_file(), &buffer) == 0) {
-
- do {
- result = unlink(param_get_default_file());
- if (result != 0) {
- retries++;
- usleep(1000 * retries);
- }
- } while (result != OK && retries < 10);
+ int res;
+ int fd;
- if (result != OK)
- warnx("unlinking file %s failed.", param_get_default_file());
- }
+ const char *filename = param_get_default_file();
+ const char *filename_tmp = malloc(strlen(filename) + 5);
+ sprintf(filename_tmp, "%s.tmp", filename);
- /* create the file */
- int fd;
+ /* delete temp file if exist */
+ res = unlink(filename_tmp);
+
+ if (res != OK && errno == ENOENT)
+ res = OK;
+
+ if (res != OK)
+ warn("failed to delete temp file: %s", filename_tmp);
+
+ if (res == OK) {
+ /* write parameters to temp file */
+ fd = open(filename_tmp, O_WRONLY | O_CREAT | O_EXCL);
- do {
- /* do another attempt in case the unlink call is not synced yet */
- fd = open(param_get_default_file(), O_WRONLY | O_CREAT | O_EXCL);
if (fd < 0) {
- retries++;
- usleep(1000 * retries);
+ warn("failed to open temp file: %s", filename_tmp);
+ res = ERROR;
}
- } while (fd < 0 && retries < 10);
+ if (res == OK) {
+ res = param_export(fd, false);
- if (fd < 0) {
-
- warn("opening '%s' for writing failed", param_get_default_file());
- return fd;
- }
+ if (res != OK)
+ warnx("failed to write parameters to file: %s", filename_tmp);
+ }
- do {
- result = param_export(fd, false);
+ close(fd);
+ }
- if (result != OK) {
- retries++;
- usleep(1000 * retries);
- }
+ if (res == OK) {
+ /* delete parameters file */
+ res = unlink(filename);
- } while (result != 0 && retries < 10);
+ if (res != OK && errno == ENOENT)
+ res = OK;
+ if (res != OK)
+ warn("failed to delete parameters file: %s", filename);
+ }
- close(fd);
+ if (res == OK) {
+ /* rename temp file to parameters */
+ res = rename(filename_tmp, filename);
- if (result != OK) {
- warn("error exporting parameters to '%s'", param_get_default_file());
- (void)unlink(param_get_default_file());
- return result;
+ if (res != OK)
+ warn("failed to rename %s to %s", filename_tmp, filename);
}
- return 0;
+ free(filename_tmp);
+
+ return res;
}
/**
diff --git a/src/modules/systemlib/rc_check.c b/src/modules/systemlib/rc_check.c
index 60d6473b8..b4350cc24 100644
--- a/src/modules/systemlib/rc_check.c
+++ b/src/modules/systemlib/rc_check.c
@@ -47,14 +47,12 @@
#include <mavlink/mavlink_log.h>
#include <uORB/topics/rc_channels.h>
-int rc_calibration_check(void) {
+int rc_calibration_check(int mavlink_fd) {
char nbuf[20];
param_t _parameter_handles_min, _parameter_handles_trim, _parameter_handles_max,
_parameter_handles_rev, _parameter_handles_dz;
- int mavlink_fd = open(MAVLINK_LOG_DEVICE, 0);
-
float param_min, param_max, param_trim, param_rev, param_dz;
/* first check channel mappings */
diff --git a/src/modules/systemlib/rc_check.h b/src/modules/systemlib/rc_check.h
index e2238d151..e70b83cce 100644
--- a/src/modules/systemlib/rc_check.h
+++ b/src/modules/systemlib/rc_check.h
@@ -47,6 +47,6 @@
* @return 0 / OK if RC calibration is ok, index + 1 of the first
* channel that failed else (so 1 == first channel failed)
*/
-__EXPORT int rc_calibration_check(void);
+__EXPORT int rc_calibration_check(int mavlink_fd);
__END_DECLS