|
| #define | __BV(b) (1 << (b)) |
| |
| #define | __DO_N(W, C, N, V...) _DO_##N(W, C, V) |
| |
| #define | __DO_N(W, C, N, V...) _DO_##N(W, C, V) |
| |
| #define | _ARRAY_N(N, ...) ARRAY_##N(__VA_ARGS__) |
| |
| #define | _BOOL(x) NOT(NOT(x)) |
| |
| #define | _BV32(b) (1UL << (b)) |
| |
| #define | _CAT(a, V...) a##V |
| |
| #define | _DIS_1(O) NOT(_ENA_1(O)) |
| |
| #define | _DO_1(W, C, A) (_##W##_1(A)) |
| |
| #define | _DO_1(W, C, A) (_##W##_1(A)) |
| |
| #define | _DO_10(W, C, A, V...) (_##W##_1(A) C _DO_9(W, C, V)) |
| |
| #define | _DO_10(W, C, A, V...) (_##W##_1(A) C _DO_9(W, C, V)) |
| |
| #define | _DO_11(W, C, A, V...) (_##W##_1(A) C _DO_10(W, C, V)) |
| |
| #define | _DO_11(W, C, A, V...) (_##W##_1(A) C _DO_10(W, C, V)) |
| |
| #define | _DO_12(W, C, A, V...) (_##W##_1(A) C _DO_11(W, C, V)) |
| |
| #define | _DO_12(W, C, A, V...) (_##W##_1(A) C _DO_11(W, C, V)) |
| |
| #define | _DO_13(W, C, A, V...) (_##W##_1(A) C _DO_12(W, C, V)) |
| |
| #define | _DO_13(W, C, A, V...) (_##W##_1(A) C _DO_12(W, C, V)) |
| |
| #define | _DO_14(W, C, A, V...) (_##W##_1(A) C _DO_13(W, C, V)) |
| |
| #define | _DO_14(W, C, A, V...) (_##W##_1(A) C _DO_13(W, C, V)) |
| |
| #define | _DO_15(W, C, A, V...) (_##W##_1(A) C _DO_14(W, C, V)) |
| |
| #define | _DO_15(W, C, A, V...) (_##W##_1(A) C _DO_14(W, C, V)) |
| |
| #define | _DO_16(W, C, A, V...) (_##W##_1(A) C _DO_15(W, C, V)) |
| |
| #define | _DO_16(W, C, A, V...) (_##W##_1(A) C _DO_15(W, C, V)) |
| |
| #define | _DO_17(W, C, A, V...) (_##W##_1(A) C _DO_16(W, C, V)) |
| |
| #define | _DO_17(W, C, A, V...) (_##W##_1(A) C _DO_16(W, C, V)) |
| |
| #define | _DO_18(W, C, A, V...) (_##W##_1(A) C _DO_17(W, C, V)) |
| |
| #define | _DO_18(W, C, A, V...) (_##W##_1(A) C _DO_17(W, C, V)) |
| |
| #define | _DO_19(W, C, A, V...) (_##W##_1(A) C _DO_18(W, C, V)) |
| |
| #define | _DO_19(W, C, A, V...) (_##W##_1(A) C _DO_18(W, C, V)) |
| |
| #define | _DO_2(W, C, A, B) (_##W##_1(A) C _##W##_1(B)) |
| |
| #define | _DO_2(W, C, A, B) (_##W##_1(A) C _##W##_1(B)) |
| |
| #define | _DO_20(W, C, A, V...) (_##W##_1(A) C _DO_19(W, C, V)) |
| |
| #define | _DO_20(W, C, A, V...) (_##W##_1(A) C _DO_19(W, C, V)) |
| |
| #define | _DO_21(W, C, A, V...) (_##W##_1(A) C _DO_20(W, C, V)) |
| |
| #define | _DO_21(W, C, A, V...) (_##W##_1(A) C _DO_20(W, C, V)) |
| |
| #define | _DO_22(W, C, A, V...) (_##W##_1(A) C _DO_21(W, C, V)) |
| |
| #define | _DO_22(W, C, A, V...) (_##W##_1(A) C _DO_21(W, C, V)) |
| |
| #define | _DO_23(W, C, A, V...) (_##W##_1(A) C _DO_22(W, C, V)) |
| |
| #define | _DO_23(W, C, A, V...) (_##W##_1(A) C _DO_22(W, C, V)) |
| |
| #define | _DO_24(W, C, A, V...) (_##W##_1(A) C _DO_23(W, C, V)) |
| |
| #define | _DO_24(W, C, A, V...) (_##W##_1(A) C _DO_23(W, C, V)) |
| |
| #define | _DO_25(W, C, A, V...) (_##W##_1(A) C _DO_24(W, C, V)) |
| |
| #define | _DO_25(W, C, A, V...) (_##W##_1(A) C _DO_24(W, C, V)) |
| |
| #define | _DO_26(W, C, A, V...) (_##W##_1(A) C _DO_25(W, C, V)) |
| |
| #define | _DO_26(W, C, A, V...) (_##W##_1(A) C _DO_25(W, C, V)) |
| |
| #define | _DO_27(W, C, A, V...) (_##W##_1(A) C _DO_26(W, C, V)) |
| |
| #define | _DO_27(W, C, A, V...) (_##W##_1(A) C _DO_26(W, C, V)) |
| |
| #define | _DO_28(W, C, A, V...) (_##W##_1(A) C _DO_27(W, C, V)) |
| |
| #define | _DO_28(W, C, A, V...) (_##W##_1(A) C _DO_27(W, C, V)) |
| |
| #define | _DO_29(W, C, A, V...) (_##W##_1(A) C _DO_28(W, C, V)) |
| |
| #define | _DO_29(W, C, A, V...) (_##W##_1(A) C _DO_28(W, C, V)) |
| |
| #define | _DO_3(W, C, A, V...) (_##W##_1(A) C _DO_2(W, C, V)) |
| |
| #define | _DO_3(W, C, A, V...) (_##W##_1(A) C _DO_2(W, C, V)) |
| |
| #define | _DO_30(W, C, A, V...) (_##W##_1(A) C _DO_29(W, C, V)) |
| |
| #define | _DO_30(W, C, A, V...) (_##W##_1(A) C _DO_29(W, C, V)) |
| |
| #define | _DO_31(W, C, A, V...) (_##W##_1(A) C _DO_30(W, C, V)) |
| |
| #define | _DO_31(W, C, A, V...) (_##W##_1(A) C _DO_30(W, C, V)) |
| |
| #define | _DO_32(W, C, A, V...) (_##W##_1(A) C _DO_31(W, C, V)) |
| |
| #define | _DO_32(W, C, A, V...) (_##W##_1(A) C _DO_31(W, C, V)) |
| |
| #define | _DO_33(W, C, A, V...) (_##W##_1(A) C _DO_32(W, C, V)) |
| |
| #define | _DO_33(W, C, A, V...) (_##W##_1(A) C _DO_32(W, C, V)) |
| |
| #define | _DO_34(W, C, A, V...) (_##W##_1(A) C _DO_33(W, C, V)) |
| |
| #define | _DO_34(W, C, A, V...) (_##W##_1(A) C _DO_33(W, C, V)) |
| |
| #define | _DO_35(W, C, A, V...) (_##W##_1(A) C _DO_34(W, C, V)) |
| |
| #define | _DO_35(W, C, A, V...) (_##W##_1(A) C _DO_34(W, C, V)) |
| |
| #define | _DO_36(W, C, A, V...) (_##W##_1(A) C _DO_35(W, C, V)) |
| |
| #define | _DO_36(W, C, A, V...) (_##W##_1(A) C _DO_35(W, C, V)) |
| |
| #define | _DO_37(W, C, A, V...) (_##W##_1(A) C _DO_36(W, C, V)) |
| |
| #define | _DO_37(W, C, A, V...) (_##W##_1(A) C _DO_36(W, C, V)) |
| |
| #define | _DO_38(W, C, A, V...) (_##W##_1(A) C _DO_37(W, C, V)) |
| |
| #define | _DO_38(W, C, A, V...) (_##W##_1(A) C _DO_37(W, C, V)) |
| |
| #define | _DO_39(W, C, A, V...) (_##W##_1(A) C _DO_38(W, C, V)) |
| |
| #define | _DO_39(W, C, A, V...) (_##W##_1(A) C _DO_38(W, C, V)) |
| |
| #define | _DO_4(W, C, A, V...) (_##W##_1(A) C _DO_3(W, C, V)) |
| |
| #define | _DO_4(W, C, A, V...) (_##W##_1(A) C _DO_3(W, C, V)) |
| |
| #define | _DO_40(W, C, A, V...) (_##W##_1(A) C _DO_39(W, C, V)) |
| |
| #define | _DO_40(W, C, A, V...) (_##W##_1(A) C _DO_39(W, C, V)) |
| |
| #define | _DO_5(W, C, A, V...) (_##W##_1(A) C _DO_4(W, C, V)) |
| |
| #define | _DO_5(W, C, A, V...) (_##W##_1(A) C _DO_4(W, C, V)) |
| |
| #define | _DO_6(W, C, A, V...) (_##W##_1(A) C _DO_5(W, C, V)) |
| |
| #define | _DO_6(W, C, A, V...) (_##W##_1(A) C _DO_5(W, C, V)) |
| |
| #define | _DO_7(W, C, A, V...) (_##W##_1(A) C _DO_6(W, C, V)) |
| |
| #define | _DO_7(W, C, A, V...) (_##W##_1(A) C _DO_6(W, C, V)) |
| |
| #define | _DO_8(W, C, A, V...) (_##W##_1(A) C _DO_7(W, C, V)) |
| |
| #define | _DO_8(W, C, A, V...) (_##W##_1(A) C _DO_7(W, C, V)) |
| |
| #define | _DO_9(W, C, A, V...) (_##W##_1(A) C _DO_8(W, C, V)) |
| |
| #define | _DO_9(W, C, A, V...) (_##W##_1(A) C _DO_8(W, C, V)) |
| |
| #define | _DO_N(W, C, N, V...) __DO_N(W, C, N, V) |
| |
| #define | _DO_N(W, C, N, V...) __DO_N(W, C, N, V) |
| |
| #define | _ENA_1(O) _ISENA(CAT(_IS, CAT(ENA_, O))) |
| |
| #define | _IF_0(...) _IF_0_ELSE |
| |
| #define | _IF_0_ELSE(V...) V |
| |
| #define | _IF_1(V...) V _IF_1_ELSE |
| |
| #define | _IF_1_ELSE(...) |
| |
| #define | _IF_ELSE(TF) _CAT(_IF_, TF) |
| |
| #define | _ISENA(V...) IS_PROBE(V) |
| |
| #define | _ISENA_ ~, 1 |
| |
| #define | _ISENA_0x1 ~, 1 |
| |
| #define | _ISENA_1 ~, 1 |
| |
| #define | _ISENA_true ~, 1 |
| |
| #define | _NOT_0 PROBE() |
| |
| #define | _NUM_ARGS(_, n, m, l, k, j, i, h, g, f, e, d, c, b, a, Z, Y, X, W, V, U, T, S, R, Q, P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A, OUT, ...) OUT |
| |
| #define | _NUM_ARGS(_, n, m, l, k, j, i, h, g, f, e, d, c, b, a, Z, Y, X, W, V, U, T, S, R, Q, P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A, OUT, ...) OUT |
| |
| #define | _TWO_ARGS(_, n, m, l, k, j, i, h, g, f, e, d, c, b, a, Z, Y, X, W, V, U, T, S, R, Q, P, O, N, M, L, K, J, I, H, G, F, E, D, C, B, A, OUT, ...) OUT |
| |
| #define | _UNUSED __attribute__((unused)) |
| |
| #define | ALL ENABLED |
| |
| #define | ANY(V...) !DISABLED(V) |
| |
| #define | ARRAY_1(v1, ...) |
| |
| #define | ARRAY_2(v1, v2, ...) |
| |
| #define | ARRAY_3(v1, v2, v3, ...) |
| |
| #define | ARRAY_4(v1, v2, v3, v4, ...) |
| |
| #define | ARRAY_5(v1, v2, v3, v4, v5, ...) |
| |
| #define | ARRAY_6(v1, v2, v3, v4, v5, v6, ...) |
| |
| #define | ARRAY_N(N, ...) _ARRAY_N(N, __VA_ARGS__) |
| |
| #define | C_STR(s) (char *)s |
| |
| #define | CAT(a, V...) _CAT(a, V) |
| |
| #define | CBI(n, b) (n &= ~__BV(b)) |
| |
| #define | CBI32(n, b) (n &= ~_BV32(b)) |
| |
| #define | CC_STR(s) (const char *)s |
| |
| #define | CEILING(x, y) (((x) + (y) - 1) / (y)) |
| |
| #define | COPY(a, b) memcpy(a, b, MIN(sizeof(a), sizeof(b))) |
| |
| #define | COUNT(a) (sizeof(a) / sizeof(*a)) |
| |
| #define | COUNT(a) (sizeof(a) / sizeof(*a)) |
| |
| #define | COUNT_ENABLED(V...) DO(ENA, +, V) |
| |
| #define | CYCLES_PER_MICROSECOND (F_CPU / 1000000UL) |
| |
| #define | DEC_1 0 |
| |
| #define | DEC_2 1 |
| |
| #define | DEC_3 2 |
| |
| #define | DEC_4 3 |
| |
| #define | DEC_5 4 |
| |
| #define | DEC_6 5 |
| |
| #define | DEC_7 6 |
| |
| #define | DEC_8 7 |
| |
| #define | DEC_9 8 |
| |
| #define | DECIMAL(a) (NUMERIC(a) || a == '.') |
| |
| #define | DECIMAL(a) (NUMERIC(a) || a == '.') |
| |
| #define | DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+') |
| |
| #define | DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+') |
| |
| #define | DECREMENT(n) DECREMENT_(n) |
| |
| #define | DECREMENT_(n) DEC_##n |
| |
| #define | DEGREES(r) ((r) * 180.0f / M_PI) |
| |
| #define | DISABLED(V...) DO(DIS, &&, V) |
| |
| #define | DISABLED(V...) DO(DIS, &&, V) |
| |
| #define | DO(W, C, V...) (_DO_N(W, C, NUM_ARGS(V), V)) |
| |
| #define | DO(W, C, V...) (_DO_N(W, C, NUM_ARGS(V), V)) |
| |
| #define | ELAPSED(NOW, SOON) (!PENDING(NOW, SOON)) |
| |
| #define | ENABLED(V...) DO(ENA, &&, V) |
| |
| #define | ENABLED(V...) DO(ENA, &&, V) |
| |
| #define | FIRST(a, ...) a |
| |
| #define | FIXFLOAT(f) ({__typeof__(f) _f = (f); _f + (_f < 0 ? -0.0000005f : 0.0000005f); }) |
| |
| #define | FORCE_INLINE __attribute__((always_inline)) inline |
| |
| #define | HEXCHR(a) |
| |
| #define | HOUR_MS ((millis_t)1000 * (millis_t)(60 * 60)) |
| |
| #define | IF_ELSE(TF) _IF_ELSE(_BOOL(TF)) |
| |
| #define | INC_0 1 |
| |
| #define | INC_1 2 |
| |
| #define | INC_2 3 |
| |
| #define | INC_3 4 |
| |
| #define | INC_4 5 |
| |
| #define | INC_5 6 |
| |
| #define | INC_6 7 |
| |
| #define | INC_7 8 |
| |
| #define | INC_8 9 |
| |
| #define | INCREMENT(n) INCREMENT_(n) |
| |
| #define | INCREMENT_(n) INC_##n |
| |
| #define | IS_PROBE(V...) SECOND(V, 0) |
| |
| #define | ISEOL(C) ((C) == '\n' || (C) == '\r') |
| |
| #define | MANY(V...) (COUNT_ENABLED(V) > 1) |
| |
| #define | MIN_MS ((millis_t)1000 * (millis_t)(60)) |
| |
| #define | MMM_TO_MMS(MM_M) ((MM_M) / 60.0f) |
| |
| #define | MMS_TO_MMM(MM_S) ((MM_S) * 60.0f) |
| |
| #define | NANOSECONDS_PER_CYCLE (1000000000.0 / F_CPU) |
| |
| #define | NEAR(x, y) NEAR_ZERO((x) - (y)) |
| |
| #define | NEAR_ZERO(x) WITHIN(x, -0.000001f, 0.000001f) |
| |
| #define | NONE DISABLED |
| |
| #define | NOOP (void(0)) |
| |
| #define | NOT(x) IS_PROBE(_CAT(_NOT_, x)) |
| |
| #define | NUM_ARGS(V...) _NUM_ARGS(0, V, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) |
| |
| #define | NUM_ARGS(V...) _NUM_ARGS(0, V, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) |
| |
| #define | NUMERIC(a) WITHIN(a, '0', '9') |
| |
| #define | NUMERIC(a) WITHIN(a, '0', '9') |
| |
| #define | NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+') |
| |
| #define | NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+') |
| |
| #define | PENDING(NOW, SOON) ((long)(NOW - (SOON)) < 0) |
| |
| #define | PROBE() ~, 1 |
| |
| #define | RADIANS(d) ((d) * M_PI / 180.0f) |
| |
| #define | RECIPROCAL(x) (NEAR_ZERO(x) ? 0 : (1 / float(x))) |
| |
| #define | SBI(n, b) (n |= __BV(b)) |
| |
| #define | SBI32(n, b) (n |= _BV32(b)) |
| |
| #define | SECOND(a, b, ...) b |
| |
| #define | SECS ((millis_t)1000) |
| |
| #define | SET_BIT_TO(N, B, TF) |
| |
| #define | SIGN(a) ((a > 0) - (a < 0)) |
| |
| #define | SPACE(A) " " << A << " " |
| |
| #define | STRINGIFY(M) STRINGIFY_(M) |
| |
| #define | STRINGIFY_(M) #M |
| |
| #define | TEST(n, b) !!((n) & __BV(b)) |
| |
| #define | TEST32(n, b) !!((n) & _BV32(b)) |
| |
| #define | THIRD(a, b, c, ...) c |
| |
| #define | TWO_ARGS(V...) _TWO_ARGS(0, V, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0) |
| |
| #define | UNEAR_ZERO(x) ((x) < 0.000001f) |
| |
| #define | WITHIN(N, L, H) ((N) >= (L) && (N) <= (H)) |
| |
| #define | WITHIN(V, L, H) ((V) >= (L) && (V) <= (H)) |
| |
| #define | ZERO(a) memset(a, 0, sizeof(a)) |
| |
| #define | ZERO(a) memset((void *)a, 0, sizeof(a)) |
| |