aboutsummaryrefslogtreecommitdiff
path: root/apps/systemlib/systemlib.c
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2012-08-16 15:49:56 +0200
committerLorenz Meier <lm@inf.ethz.ch>2012-08-16 15:49:56 +0200
commit46c4b987ccdd3c56588bf639a5500d974d5d2be6 (patch)
tree4cacbb7884be709583ade13784a4b168ff5a36db /apps/systemlib/systemlib.c
parente95662f505eb45f80036be63940d435e4b4871e1 (diff)
downloadpx4-firmware-46c4b987ccdd3c56588bf639a5500d974d5d2be6.tar.gz
px4-firmware-46c4b987ccdd3c56588bf639a5500d974d5d2be6.tar.bz2
px4-firmware-46c4b987ccdd3c56588bf639a5500d974d5d2be6.zip
Various fixes for params interface
Diffstat (limited to 'apps/systemlib/systemlib.c')
-rw-r--r--apps/systemlib/systemlib.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/apps/systemlib/systemlib.c b/apps/systemlib/systemlib.c
index 609cf5d34..b1a8de7bd 100644
--- a/apps/systemlib/systemlib.c
+++ b/apps/systemlib/systemlib.c
@@ -123,6 +123,11 @@ void kill_task(FAR _TCB *tcb, FAR void *arg)
kill(tcb->pid, SIGUSR1);
}
+union param_union {
+ float f;
+ char c[4];
+};
+
int store_params_in_eeprom(struct global_data_parameter_storage_t *params)
{
int ret = ERROR;
@@ -147,10 +152,13 @@ int store_params_in_eeprom(struct global_data_parameter_storage_t *params)
ret = ERROR;
} else {
- for (int i = 0; i < params->pm.size; i++) {
- write_res = write(fd, params->pm.param_values + i, sizeof(params->pm.param_values[i]));
+ for (int i = 0; i < PARAM_MAX_COUNT; i++) {
- if (write_res != sizeof(params->pm.param_values[i])) return ERROR;
+ union param_union p;
+ p.f = params->pm.param_values[i];
+ write_res = write(fd, p.c, sizeof(p.f));
+
+ if (write_res != sizeof(p.f)) return ERROR;
}
/*Write end magic byte */
@@ -221,10 +229,11 @@ int get_params_from_eeprom(struct global_data_parameter_storage_t *params)
/* read data */
if (lseek_res == OK) {
- for (int i = 0; i < params->pm.size; i++) {
- read_res = read(fd, params->pm.param_values + i, sizeof(params->pm.param_values[i]));
-
- if (read_res != sizeof(params->pm.param_values[i])) return ERROR;
+ for (int i = 0; i < PARAM_MAX_COUNT; i++) {
+ union param_union p;
+ read_res = read(fd, p.c, sizeof(p.f));
+ params->pm.param_values[i] = p.f;
+ if (read_res != sizeof(p.f)) return ERROR;
}
ret = OK;