9#define M_PI 3.14159265358979323846
13#define M_2PI (2.0 * M_PI)
19constexpr double M_1G = 9.80665;
23#define XR_TO_STR(_arg) #_arg
24#define DEF2STR(_arg) XR_TO_STR(_arg)
30#define UNUSED(_x) ((void)(_x))
36#define OFFSET_OF(type, member) ((size_t)&((type*)0)->member)
42#define MEMBER_SIZE_OF(type, member) (sizeof(decltype(((type*)0)->member)))
48#define CONTAINER_OF(ptr, type, member) \
49 ((type*)((char*)(ptr) - OFFSET_OF(type, member)))
53static constexpr size_t LIBXR_CACHE_LINE_SIZE = (
sizeof(
void*) == 8) ? 64 : 32;
54static constexpr size_t LIBXR_ALIGN_SIZE = (
sizeof(
void*));
104#ifdef ASSERT_FROM_CALLBACK
105#undef ASSERT_FROM_CALLBACK
108#ifdef LIBXR_DEBUG_BUILD
119 libxr_fatal_error(__FILE__, __LINE__, false); \
130#define ASSERT_FROM_CALLBACK(arg, in_isr) \
135 libxr_fatal_error(__FILE__, __LINE__, (in_isr)); \
139#define ASSERT(arg) (void(arg), (void)0)
140#define ASSERT_FROM_CALLBACK(arg, in_isr) \
155extern "C" void libxr_fatal_error(
const char* file, uint32_t line,
bool in_isr);
168template <
typename T1,
typename T2>
169constexpr auto max(T1 a, T2 b) ->
typename std::common_type<T1, T2>::type
171 return (a > b) ? a : b;
183template <
typename T1,
typename T2>
184constexpr auto min(T1 a, T2 b) ->
typename std::common_type<T1, T2>::type
186 return (a < b) ? a : b;
@ SIZE_ERR
尺寸错误 | Size error
@ CHECK_ERR
校验错误 | Check error
@ INIT_ERR
初始化错误 | Initialization error
@ OUT_OF_RANGE
超出范围 | Out of range
@ STATE_ERR
状态错误 | State error
@ NOT_FOUND
未找到 | Not found
@ NO_MEM
内存不足 | Insufficient memory
@ NO_RESPONSE
无响应 | No response
@ PTR_NULL
空指针 | Null pointer
@ NO_BUFF
缓冲区不足 | Insufficient buffer
@ NOT_SUPPORT
不支持 | Not supported
@ FAILED
操作失败 | Operation failed
@ OK
操作成功 | Operation successful
@ ARG_ERR
参数错误 | Argument error
@ LESS
尺寸必须小于 | Size must be less
@ EQUAL
尺寸必须相等 | Size must be equal
@ MORE
尺寸必须大于 | Size must be more
constexpr auto max(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最大值
constexpr auto min(T1 a, T2 b) -> typename std::common_type< T1, T2 >::type
计算两个数的最小值