Initial Contribution
diff --git a/Embedded/common/src/b_BasicEm/Phase.c b/Embedded/common/src/b_BasicEm/Phase.c
new file mode 100644
index 0000000..6fdbd35
--- /dev/null
+++ b/Embedded/common/src/b_BasicEm/Phase.c
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* ---- includes ----------------------------------------------------------- */
+
+#include "b_BasicEm/Phase.h"
+#include "b_BasicEm/Math.h"
+
+/* ------------------------------------------------------------------------- */
+
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ auxiliary functions } ---------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ constructor / destructor } ----------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ operators } -------------------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ query functions } -------------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ modify functions } ------------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+	
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ I/O } -------------------------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+	
+/* ========================================================================= */
+/*                                                                           */
+/* ---- \ghd{ exec functions } --------------------------------------------- */
+/*                                                                           */
+/* ========================================================================= */
+
+/* ------------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- */
+
+#ifndef bbs_SIN_INTERPOLATION_METHOD_2
+const int32 bbs_sin32_table1G[] = 
+{
+	0,			1608,	411648,		1607,	823040,		1606,	1234176,	1602, 
+	1644288,	1599,	2053632,	1594,	2461696,	1588,	2868224,	1581, 
+	3272960,	1574,	3675904,	1564,	4076288,	1556,	4474624,	1545, 
+	4870144,	1533,	5262592,	1521,	5651968,	1508,	6038016,	1493, 
+	6420224,	1478,	6798592,	1463,	7173120,	1445,	7543040,	1428, 
+	7908608,	1409,	8269312,	1390,	8625152,	1369,	8975616,	1348, 
+	9320704,	1327,	9660416,	1303,	9993984,	1280,	10321664,	1256, 
+	10643200,	1231,	10958336,	1205,	11266816,	1178,	11568384,	1151, 
+	11863040,	1124,	12150784,	1094,	12430848,	1066,	12703744,	1036, 
+	12968960,	1005,	13226240,	974,	13475584,	942,	13716736,	910, 
+	13949696,	877,	14174208,	844,	14390272,	810,	14597632,	775, 
+	14796032,	741,	14985728,	705,	15166208,	670,	15337728,	634, 
+	15500032,	597,	15652864,	561,	15796480,	523,	15930368,	486, 
+	16054784,	448,	16169472,	409,	16274176,	372,	16369408,	333, 
+	16454656,	295,	16530176,	255,	16595456,	217,	16651008,	177, 
+	16696320,	138,	16731648,	99,		16756992,	59,		16772096,	20, 
+	16777216,	-20,	16772096,	-59,	16756992,	-99,	16731648,	-138, 
+	16696320,	-177,	16651008,	-217,	16595456,	-255,	16530176,	-295, 
+	16454656,	-333,	16369408,	-372,	16274176,	-409,	16169472,	-448, 
+	16054784,	-486,	15930368,	-523,	15796480,	-561,	15652864,	-597, 
+	15500032,	-634,	15337728,	-670,	15166208,	-705,	14985728,	-741, 
+	14796032,	-775,	14597632,	-810,	14390272,	-844,	14174208,	-877, 
+	13949696,	-910,	13716736,	-942,	13475584,	-974,	13226240,	-1005, 
+	12968960,	-1036,	12703744,	-1066,	12430848,	-1094,	12150784,	-1124, 
+	11863040,	-1151,	11568384,	-1178,	11266816,	-1205,	10958336,	-1231,
+	10643200,	-1256,	10321664,	-1280,	9993984,	-1303,	9660416,	-1327, 
+	9320704,	-1348,	8975616,	-1369,	8625152,	-1390,	8269312,	-1409, 
+	7908608,	-1428,	7543040,	-1445,	7173120,	-1463,	6798592,	-1478, 
+	6420224,	-1493,	6038016,	-1508,	5651968,	-1521,	5262592,	-1533, 
+	4870144,	-1545,	4474624,	-1556,	4076288,	-1564,	3675904,	-1574, 
+	3272960,	-1581,	2868224,	-1588,	2461696,	-1594,	2053632,	-1599, 
+	1644288,	-1602,	1234176,	-1606,	823040,		-1607,	411648,		-1608
+};
+#else
+const int32 bbs_sin32_table2G[] = 
+{
+	0,			12907,	-122, 
+	209469440,	12662,	-368, 
+	410894336,	11926,	-596, 
+	596525056,	10733,	-802, 
+	759234560,	9129,	-978, 
+	892780544,	7168,	-1112, 
+	992002048,	4939,	-1210, 
+	1053097984, 2516,	-1256, 
+	1073741824, -4,		-1256, 
+	1053097984, -2519,	-1210, 
+	992002048,	-4944,	-1112, 
+	892780544,	-7173,	-978, 
+	759234560,	-9129,	-802, 
+	596525056,	-10734, -596, 
+	410894336,	-11926, -368, 
+	209469440,	-12663,	-122
+};
+#endif
+
+int32 bbs_sin32( phase16 phaseA )
+{
+#ifndef bbs_SIN_INTERPOLATION_METHOD_2
+
+	int32 oL = ( phaseA & 0x00FF );
+	uint16  indexL = ( ( phaseA & 0x7F00 ) >> 8 ) << 1;
+	int32 sinL = bbs_sin32_table1G[ indexL ] + oL * bbs_sin32_table1G[ indexL + 1 ];
+
+	if( ( phaseA & 0x8000 ) != 0 )
+	{
+		return -sinL;
+	}
+	else
+	{
+		return sinL;
+	}
+
+#else /*bbs_SIN_INTERPOLATION_METHOD_2*/
+
+	int32 o1L = ( phaseA & 0x07FF );
+	int32 o2L = ( o1L * o1L ) >> 8;
+	uint16 indexL = ( ( phaseA & 0x7800 ) >> 11 ) * 3;
+	int32 sinL = bbs_sin32_table2G[ indexL ] + ( ( o1L * bbs_sin32_table2G[ indexL + 1 ] )  << 3 ) + o2L * bbs_sin32_table2G[ indexL + 2 ];
+
+	if( ( phaseA & 0x8000 ) != 0 )
+	{
+		return -sinL >> 6;
+	}
+	else
+	{
+		return sinL >> 6;
+	}
+
+#endif /*bbs_SIN_INTERPOLATION_METHOD_2*/
+}
+
+/** computation of sine tables (do not uncomment or remove)
+void sin1Table()
+{
+	long iL;
+	for( iL = 0; iL < 128; iL++ )
+	{
+		int32 phase1L = iL * 256;
+		int32 phase2L = phase1L + 256;
+		double angle1L = ( M_PI * phase1L ) / 32768;
+		double angle2L = ( M_PI * phase2L ) / 32768;
+		int32 sin1L = ( sin( angle1L ) * 65536 );
+		int32 sin2L = ( sin( angle2L ) * 65536 );
+		int32 diffL = sin2L - sin1L;
+		eout << iL << ": " << ( sin1L << 8 ) << " + oL * " << diffL << endl;
+	}
+}
+
+void sin2Table()
+{
+	long iL;
+	for( iL = 0; iL < 16; iL++ )
+	{
+		int32 p0L = iL  * ( 1 << 11 );
+		int32 p1L = p0L + ( 1 << 10 );
+		int32 p2L = p0L + ( 1 << 11 );
+
+		double a0L = ( M_PI * p0L ) / ( 1 << 15 );
+		double a1L = ( M_PI * p1L ) / ( 1 << 15 );
+		double a2L = ( M_PI * p2L ) / ( 1 << 15 );
+
+		int32 s0L = ( sin( a0L ) * ( 1 << 16 ) );
+		int32 s1L = ( sin( a1L ) * ( 1 << 16 ) );
+		int32 s2L = ( sin( a2L ) * ( 1 << 16 ) );
+
+		int32 aL = 4 * s1L - 3 * s0L - s2L;
+		int32 bL = 2 * s2L + 2 * s0L - 4 * s1L;
+
+		eout << iL << ": " << ( s0L << 14 ) << " + ( ( o1L * " << aL << " ) << 3 )"
+			 << " + o2L * " << bL << endl;
+	}
+}
+*/
+
+/* ------------------------------------------------------------------------- */
+
+int32 bbs_cos32( phase16 phaseA )
+{
+	return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) );
+}
+
+/* ------------------------------------------------------------------------- */
+
+int16 bbs_sin16( phase16 phaseA )
+{
+	return bbs_sin32( phaseA ) >> 10;
+}
+
+/* ------------------------------------------------------------------------- */
+
+int16 bbs_cos16( phase16 phaseA )
+{
+	return bbs_sin32( ( phase16 )( phaseA + bbs_M_PI_2_16 ) ) >> 10;
+}
+
+/* ------------------------------------------------------------------------- */
+
+const int32 bbs_atan16_tableG[] =
+{
+	0,			325,	332800,		326,	666624,		326,	1000448,	325, 
+	1333248,	324,	1665024,	323,	1995776,	323,	2326528,	322, 
+	2656256,	320,	2983936,	319,	3310592,	317,	3635200,	316, 
+	3958784,	314,	4280320,	312,	4599808,	310,	4917248,	308, 
+	5232640,	306,	5545984,	303,	5856256,	301,	6164480,	298, 
+	6469632,	296,	6772736,	292,	7071744,	291,	7369728,	287, 
+	7663616,	284,	7954432,	281,	8242176,	279,	8527872,	275, 
+	8809472,	272,	9088000,	269,	9363456,	265,	9634816,	263, 
+	9904128,	259,	10169344,	256,	10431488,	252,	10689536,	249, 
+	10944512,	246,	11196416,	243,	11445248,	239,	11689984,	236, 
+	11931648,	233,	12170240,	230,	12405760,	226,	12637184,	223, 
+	12865536,	219,	13089792,	217,	13312000,	213,	13530112,	210, 
+	13745152,	207,	13957120,	204,	14166016,	201,	14371840,	198, 
+	14574592,	195,	14774272,	192,	14970880,	189,	15164416,	186, 
+	15354880,	183,	15542272,	180,	15726592,	178,	15908864,	175, 
+	16088064,	172,	16264192,	169,	16437248,	167,	16608256,	165
+};
+
+phase16 bbs_atan16( uint32 valA )
+{
+	uint32 oL = valA & 0x03FF;
+	uint16 indexL = ( valA >> 10 ) << 1;
+	uint32 phaseL = bbs_atan16_tableG[ indexL ] + oL * bbs_atan16_tableG[ indexL + 1 ];
+	return ( phase16 )( phaseL >> 11 );
+}
+
+/* ------------------------------------------------------------------------- */
+
+phase16 bbs_phase16( int32 xA, int32 yA )
+{
+	uint32 xL = ( xA > 0 ) ? xA : -xA;
+	uint32 yL = ( yA > 0 ) ? yA : -yA;
+	phase16 phaseL;
+
+	if( xL == 0 && yL == 0 ) return 0;
+
+	if( xL == yL )
+	{
+		phaseL = bbs_M_PI_4_16; /*PI/4*/
+	}
+	else if( xL > yL )
+	{
+		if( yL >= 65536 ) /* avoid overflow (1 << 16) */
+		{
+			uint32 shiftL = bbs_intLog2( yL ) - 15;
+			xL >>= shiftL;
+			yL >>= shiftL;
+		}
+		phaseL = bbs_atan16( ( yL << 16 ) / xL );
+	}
+	else
+	{
+		if( xL >= 65536 ) /* avoid overflow (1 << 16) */
+		{
+			uint32 shiftL = bbs_intLog2( xL ) - 15;
+			xL >>= shiftL;
+			yL >>= shiftL;
+		}
+		phaseL = bbs_M_PI_2_16 - bbs_atan16( ( xL << 16 ) / yL );
+	}
+
+	if( xA >= 0 )
+	{
+		if( yA >= 0 )
+		{
+			return phaseL;
+		}
+		else
+		{
+			return -phaseL;
+		}
+	}
+	else
+	{
+		if( yA >= 0 )
+		{
+			return bbs_M_PI_16 - phaseL;
+		}
+		else
+		{
+			return phaseL - bbs_M_PI_16;
+		}
+	}
+}
+
+/* ------------------------------------------------------------------------- */
+
+/* ========================================================================= */
+
+