diff --git a/apps/plugins/lib/fixedpoint.h b/apps/plugins/lib/fixedpoint.h index 1631f8d6d8..811a1d9b81 100644 --- a/apps/plugins/lib/fixedpoint.h +++ b/apps/plugins/lib/fixedpoint.h @@ -20,55 +20,7 @@ * KIND, either express or implied. * ****************************************************************************/ - -/** PLUGINS - FIXED POINT MATH ROUTINES - USAGE - * - * - x and y arguments are fixed point integers - * - fracbits is the number of fractional bits in the argument(s) - * - functions return long fixed point integers with the specified number - * of fractional bits unless otherwise specified - * - * Calculate sin and cos of an angle: - * fp_sincos(phase, *cos) - * where phase is a 32 bit unsigned integer with 0 representing 0 - * and 0xFFFFFFFF representing 2*pi, and *cos is the address to - * a long signed integer. Value returned is a long signed integer - * from -0x80000000 to 0x7fffffff, representing -1 to 1 respectively. - * That is, value is a fixed point integer with 31 fractional bits. - * - * Take square root of a fixed point number: - * fp_sqrt(x, fracbits) - * - * Calculate sin or cos of an angle (very fast, from a table): - * fp14_sin(angle) - * fp14_cos(angle) - * where angle is a non-fixed point integer in degrees. Value - * returned is a fixed point integer with 14 fractional bits. - * - * Calculate the natural log of a positive fixed point integer - * fp16_log(x) - * where x and the value returned are fixed point integers - * with 16 fractional bits. - */ - #ifndef _FIXEDPOINT_H_PLUGINS #define _FIXEDPOINT_H_PLUGINS - -long fp_sincos(unsigned long phase, long *cos); -long fp_sqrt(long a, unsigned int fracbits); -long fp14_cos(int val); -long fp14_sin(int val); -long fp16_log(int x); -long fp16_exp(int x); - -unsigned long isqrt(unsigned long x); - -/* fast unsigned multiplication (16x16bit->32bit or 32x32bit->32bit, - * whichever is faster for the architecture) */ -#ifdef CPU_ARM -#define FMULU(a, b) ((uint32_t) (((uint32_t) (a)) * ((uint32_t) (b)))) -#else /* SH1, coldfire */ -#define FMULU(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) -#endif - -#endif +#include "../../../firmware/include/fixedpoint.h" +#endif /* _FIXEDPOINT_H_PLUGINS */ diff --git a/apps/fixedpoint.h b/firmware/include/fixedpoint.h similarity index 57% rename from apps/fixedpoint.h rename to firmware/include/fixedpoint.h index 6670e597fb..3e14bdd68e 100644 --- a/apps/fixedpoint.h +++ b/firmware/include/fixedpoint.h @@ -21,7 +21,7 @@ * ****************************************************************************/ -/** APPS - FIXED POINT MATH ROUTINES - USAGE +/** FIXED POINT MATH ROUTINES - USAGE * * - x and y arguments are fixed point integers * - fracbits is the number of fractional bits in the argument(s) @@ -34,6 +34,36 @@ * Divide two fixed point numbers: * fp_div(x, y, fracbits) * + * Calculate sin and cos of an angle: + * fp_sincos(phase, *cos) + * where phase is a 32 bit unsigned integer with 0 representing 0 + * and 0xFFFFFFFF representing 2*pi, and *cos is the address to + * a long signed integer. Value returned is a long signed integer + * from -0x80000000 to 0x7fffffff, representing -1 to 1 respectively. + * That is, value is a fixed point integer with 31 fractional bits. + * + * Take square root of a fixed point number: + * fp_sqrt(x, fracbits) + * + * Take the square root of an integer: + * isqrt(x) + * + * Calculate sin or cos of an angle (very fast, from a table): + * fp14_sin(angle) + * fp14_cos(angle) + * where angle is a non-fixed point integer in degrees. Value + * returned is a fixed point integer with 14 fractional bits. + * + * Calculate the exponential of a fixed point integer + * fp16_exp(x) + * where x and the value returned are fixed point integers + * with 16 fractional bits. + * + * Calculate the natural log of a positive fixed point integer + * fp16_log(x) + * where x and the value returned are fixed point integers + * with 16 fractional bits. + * * Calculate decibel equivalent of a gain factor: * fp_decibels(factor, fracbits) * where fracbits is in the range 12 to 22 (higher is better), @@ -45,16 +75,28 @@ * and decibels is a fixed point integer. */ -#ifndef _FIXEDPOINT_H_APPS -#define _FIXEDPOINT_H_APPS +#ifndef FIXEDPOINT_H +#define FIXEDPOINT_H #define fp_mul(x, y, z) (long)((((long long)(x)) * ((long long)(y))) >> (z)) #define fp_div(x, y, z) (long)((((long long)(x)) << (z)) / ((long long)(y))) - -/** TAKEN FROM ORIGINAL fixedpoint.h */ long fp_sincos(unsigned long phase, long *cos); +long fp_sqrt(long a, unsigned int fracbits); +long fp14_cos(int val); +long fp14_sin(int val); +long fp16_log(int x); +long fp16_exp(int x); +unsigned long isqrt(unsigned long x); + +/* fast unsigned multiplication (16x16bit->32bit or 32x32bit->32bit, + * whichever is faster for the architecture) */ +#ifdef CPU_ARM +#define FMULU(a, b) ((uint32_t) (((uint32_t) (a)) * ((uint32_t) (b)))) +#else /* SH1, coldfire */ +#define FMULU(a, b) ((uint32_t) (((uint16_t) (a)) * ((uint16_t) (b)))) +#endif /** MODIFIED FROM replaygain.c */ #define FP_INF (0x7fffffff) @@ -66,4 +108,4 @@ long fp_sincos(unsigned long phase, long *cos); /* long fp_decibels(unsigned long factor, unsigned int fracbits); */ long fp_factor(long decibels, unsigned int fracbits); -#endif +#endif /* FIXEDPOINT_H */ diff --git a/lib/rbcodec/codecs/lib/fixedpoint.h b/lib/rbcodec/codecs/lib/fixedpoint.h index 1cbd1573bb..3d8e77cd89 100644 --- a/lib/rbcodec/codecs/lib/fixedpoint.h +++ b/lib/rbcodec/codecs/lib/fixedpoint.h @@ -9,7 +9,7 @@ * * Copyright (C) 2006 Jens Arnold * - * Fixed point library for plugins + * Fixed point library for codecs * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,30 +20,7 @@ * KIND, either express or implied. * ****************************************************************************/ - - /** CODECS - FIXED POINT MATH ROUTINES - USAGE - * - * - x and y arguments are fixed point integers - * - fracbits is the number of fractional bits in the argument(s) - * - functions return long fixed point integers with the specified number - * of fractional bits unless otherwise specified - * - * Calculate sin and cos of an angle: - * fp_sincos(phase, *cos) - * where phase is a 32 bit unsigned integer with 0 representing 0 - * and 0xFFFFFFFF representing 2*pi, and *cos is the address to - * a long signed integer. Value returned is a long signed integer - * from -0x80000000 to 0x7fffffff, representing -1 to 1 respectively. - * That is, value is a fixed point integer with 31 fractional bits. - * - * Take square root of a fixed point number: - * fp_sqrt(x, fracbits) - * - */ #ifndef _FIXEDPOINT_H_CODECS #define _FIXEDPOINT_H_CODECS - -long fp_sincos(unsigned long phase, long *cos); -long fp_sqrt(long a, unsigned int fracbits); - -#endif +#include "../../../../firmware/include/fixedpoint.h" +#endif /* _FIXEDPOINT_H_CODECS */