From 9e7d5f088e2ae807034c9b857476f08e9b254dbe Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Sat, 22 Oct 2016 12:42:30 +0200 Subject: [PATCH] dataman: Ensure compat field is set and read correctly --- src/modules/dataman/dataman.c | 11 +++++------ src/modules/dataman/dataman.h | 6 ++++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/modules/dataman/dataman.c b/src/modules/dataman/dataman.c index cba88d478f..deef88bf68 100644 --- a/src/modules/dataman/dataman.c +++ b/src/modules/dataman/dataman.c @@ -163,7 +163,8 @@ static const unsigned g_per_item_max_index[DM_KEY_NUM_KEYS] = { DM_KEY_WAYPOINTS_OFFBOARD_0_MAX, DM_KEY_WAYPOINTS_OFFBOARD_1_MAX, DM_KEY_WAYPOINTS_ONBOARD_MAX, - DM_KEY_MISSION_STATE_MAX + DM_KEY_MISSION_STATE_MAX, + DM_KEY_COMPAT_MAX }; /* Table of offset for index 0 of each item type */ @@ -958,16 +959,14 @@ task_main(int argc, char *argv[]) #else // Read the mission state and check the hash struct dataman_compat_s compat_state; - int ret = dm_read(DM_KEY_COMPAT, 0, &compat_state, sizeof(compat_state)); + int ret = g_dm_ops->read(DM_KEY_COMPAT, 0, &compat_state, sizeof(compat_state)); bool incompat = true; if (ret == sizeof(compat_state)) { - if (compat_state.key == DM_COMPAT_KEY) { incompat = false; } - } close(g_task_fd); @@ -999,10 +998,10 @@ task_main(int argc, char *argv[]) /* Write current compat info */ struct dataman_compat_s compat_state; compat_state.key = DM_COMPAT_KEY; - int ret = dm_write(DM_KEY_COMPAT, 0, DM_PERSIST_POWER_ON_RESET, &compat_state, sizeof(compat_state)); + int ret = g_dm_ops->write(DM_KEY_COMPAT, 0, DM_PERSIST_POWER_ON_RESET, &compat_state, sizeof(compat_state)); if (ret != sizeof(compat_state)) { - PX4_ERR("Failed writing compat."); + PX4_ERR("Failed writing compat: %d", ret); } fsync(g_task_fd); diff --git a/src/modules/dataman/dataman.h b/src/modules/dataman/dataman.h index 3967c38ce1..361e561e56 100644 --- a/src/modules/dataman/dataman.h +++ b/src/modules/dataman/dataman.h @@ -74,7 +74,8 @@ enum { DM_KEY_WAYPOINTS_OFFBOARD_0_MAX = NUM_MISSIONS_SUPPORTED, DM_KEY_WAYPOINTS_OFFBOARD_1_MAX = NUM_MISSIONS_SUPPORTED, DM_KEY_WAYPOINTS_ONBOARD_MAX = (NUM_MISSIONS_SUPPORTED / 10), - DM_KEY_MISSION_STATE_MAX = 1 + DM_KEY_MISSION_STATE_MAX = 1, + DM_KEY_COMPAT_MAX = 1 }; #else /** The maximum number of instances for each item type */ @@ -88,7 +89,8 @@ enum { DM_KEY_WAYPOINTS_OFFBOARD_0_MAX = NUM_MISSIONS_SUPPORTED, DM_KEY_WAYPOINTS_OFFBOARD_1_MAX = NUM_MISSIONS_SUPPORTED, DM_KEY_WAYPOINTS_ONBOARD_MAX = NUM_MISSIONS_SUPPORTED, - DM_KEY_MISSION_STATE_MAX = 1 + DM_KEY_MISSION_STATE_MAX = 1, + DM_KEY_COMPAT_MAX = 1 }; #endif /** Data persistence levels */