Sync betaflight to Gitea
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user