diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2012-08-16 15:49:56 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2012-08-16 15:49:56 +0200 |
commit | 46c4b987ccdd3c56588bf639a5500d974d5d2be6 (patch) | |
tree | 4cacbb7884be709583ade13784a4b168ff5a36db /apps/systemlib/systemlib.c | |
parent | e95662f505eb45f80036be63940d435e4b4871e1 (diff) | |
download | px4-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.c | 23 |
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; |