1 /* 2 * Copyright (c) 2023 Trackunit Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DATA_NAVIGATION_H_ 8 #define ZEPHYR_INCLUDE_DATA_NAVIGATION_H_ 9 10 #include <zephyr/types.h> 11 12 /** 13 * @brief Navigation utilities 14 * @defgroup navigation Navigation 15 * @ingroup utilities 16 * @{ 17 */ 18 19 /** 20 * @brief Navigation data structure 21 * 22 * @details The structure describes the momentary navigation details of a 23 * point relative to a sphere (commonly Earth) 24 */ 25 struct navigation_data { 26 /** Latitudal position in nanodegrees (0 to +-180E9) */ 27 int64_t latitude; 28 /** Longitudal position in nanodegrees (0 to +-180E9) */ 29 int64_t longitude; 30 /** Bearing angle in millidegrees (0 to 360E3) */ 31 uint32_t bearing; 32 /** Speed in millimeters per second */ 33 uint32_t speed; 34 /** Altitude in millimeters */ 35 int32_t altitude; 36 }; 37 38 /** 39 * @brief Calculate the distance between two navigation points along the 40 * surface of the sphere they are relative to. 41 * 42 * @param distance Destination for calculated distance in millimeters 43 * @param p1 First navigation point 44 * @param p2 Second navigation point 45 * 46 * @return 0 if successful 47 * @return -EINVAL if either navigation point is invalid 48 */ 49 int navigation_distance(uint64_t *distance, const struct navigation_data *p1, 50 const struct navigation_data *p2); 51 52 /** 53 * @brief Calculate the bearing from one navigation point to another 54 * 55 * @param bearing Destination for calculated bearing angle in millidegrees 56 * @param from First navigation point 57 * @param to Second navigation point 58 * 59 * @return 0 if successful 60 * @return -EINVAL if either navigation point is invalid 61 */ 62 int navigation_bearing(uint32_t *bearing, const struct navigation_data *from, 63 const struct navigation_data *to); 64 65 /** 66 * @} 67 */ 68 69 #endif /* ZEPHYR_INCLUDE_DATA_NAVIGATION_H_ */ 70