mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-13 03:20:00 +03:00
* Update the google olc code to not have compiler warnings * With newer BF updates (double) is no longer needed in olc.c
74 lines
2.4 KiB
C
74 lines
2.4 KiB
C
#ifndef OLC_OPENLOCATIONCODE_H_
|
|
#define OLC_OPENLOCATIONCODE_H_
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define OLC_VERSION_MAJOR 1
|
|
#define OLC_VERSION_MINOR 0
|
|
#define OLC_VERSION_PATCH 0
|
|
|
|
// OLC version number: 2.3.4 => 2003004
|
|
// Useful for checking against a particular version or above:
|
|
//
|
|
// #if OLC_VERSION_NUM < OLC_MAKE_VERSION_NUM(1, 0, 2)
|
|
// #error UNSUPPORTED OLC VERSION
|
|
// #endif
|
|
#define OLC_MAKE_VERSION_NUM(major, minor, patch) \
|
|
((major * 1000 + minor) * 1000 + patch)
|
|
|
|
// OLC version string: 2.3.4 => "2.3.4"
|
|
#define OLC_MAKE_VERSION_STR_IMPL(major, minor, patch) \
|
|
(#major "." #minor "." #patch)
|
|
#define OLC_MAKE_VERSION_STR(major, minor, patch) \
|
|
OLC_MAKE_VERSION_STR_IMPL(major, minor, patch)
|
|
|
|
// Current version, as a number and a string
|
|
#define OLC_VERSION_NUM \
|
|
OLC_MAKE_VERSION_NUM(OLC_VERSION_MAJOR, OLC_VERSION_MINOR, OLC_VERSION_PATCH)
|
|
#define OLC_VERSION_STR \
|
|
OLC_MAKE_VERSION_STR(OLC_VERSION_MAJOR, OLC_VERSION_MINOR, OLC_VERSION_PATCH)
|
|
|
|
// A pair of doubles representing latitude / longitude
|
|
typedef struct OLC_LatLon {
|
|
double lat;
|
|
double lon;
|
|
} OLC_LatLon;
|
|
|
|
// An area defined by two corners (lo and hi) and a code length
|
|
typedef struct OLC_CodeArea {
|
|
OLC_LatLon lo;
|
|
OLC_LatLon hi;
|
|
size_t len;
|
|
} OLC_CodeArea;
|
|
|
|
// Get the center coordinates for an area
|
|
void OLC_GetCenter(const OLC_CodeArea* area, OLC_LatLon* center);
|
|
|
|
// Get the effective length for a code
|
|
size_t OLC_CodeLength(const char* code, size_t size);
|
|
|
|
// Check for the three obviously-named conditions
|
|
int OLC_IsValid(const char* code, size_t size);
|
|
int OLC_IsShort(const char* code, size_t size);
|
|
int OLC_IsFull(const char* code, size_t size);
|
|
|
|
// Encode location with given code length (indicates precision) into an OLC
|
|
// Return the string length of the code
|
|
int OLC_Encode(const OLC_LatLon* location, size_t code_length, char* code);
|
|
|
|
// Encode location with default code length into an OLC
|
|
// Return the string length of the code
|
|
int OLC_EncodeDefault(const OLC_LatLon* location, char* code);
|
|
|
|
// Decode OLC into the original location
|
|
int OLC_Decode(const char* code, size_t size, OLC_CodeArea* decoded);
|
|
|
|
// Compute a (shorter) OLC for a given code and a reference location
|
|
int OLC_Shorten(const char* code, size_t size, const OLC_LatLon* reference,
|
|
char* buf);
|
|
|
|
// Given shorter OLC and reference location, compute original (full length) OLC
|
|
int OLC_RecoverNearest(const char* short_code, size_t size,
|
|
const OLC_LatLon* reference, char* code);
|
|
|
|
#endif
|