www.pudn.com > speakfs72.zip > GSM_IMPL.C, change:2002-01-05,size:6232b


/* 
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische 
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for 
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. 
 */ 
 
/* $Header: /home/cvsroot/speakfreely/GSM/GSM_IMPL.C,v 1.1.1.1 2002/01/05 02:21:05 bcw Exp $ */ 
 
#include "private.h" 
 
#include "gsm.h" 
#include "proto.h" 
 
void gsm_implode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c) 
{ 
		/*		variable		size	index 
 
				GSM_MAGIC		4		- 
 
				LARc[0] 		6		0 
				LARc[1] 		6		1 
				LARc[2] 		5		2 
				LARc[3] 		5		3 
				LARc[4] 		4		4 
				LARc[5] 		4		5 
				LARc[6] 		3		6 
				LARc[7] 		3		7 
 
				Nc[0]			7		8 
				bc[0]			2		9 
				Mc[0]			2		10 
				xmaxc[0]		6		11 
				xmc[0]			3		12 
				xmc[1]			3		13 
				xmc[2]			3		14 
				xmc[3]			3		15 
				xmc[4]			3		16 
				xmc[5]			3		17 
				xmc[6]			3		18 
				xmc[7]			3		19 
				xmc[8]			3		20 
				xmc[9]			3		21 
				xmc[10] 		3		22 
				xmc[11] 		3		23 
				xmc[12] 		3		24 
 
				Nc[1]			7		25 
				bc[1]			2		26 
				Mc[1]			2		27 
				xmaxc[1]		6		28 
				xmc[13] 		3		29 
				xmc[14] 		3		30 
				xmc[15] 		3		31 
				xmc[16] 		3		32 
				xmc[17] 		3		33 
				xmc[18] 		3		34 
				xmc[19] 		3		35 
				xmc[20] 		3		36 
				xmc[21] 		3		37 
				xmc[22] 		3		38 
				xmc[23] 		3		39 
				xmc[24] 		3		40 
				xmc[25] 		3		41 
 
				Nc[2]			7		42 
				bc[2]			2		43 
				Mc[2]			2		44 
				xmaxc[2]		6		45 
				xmc[26] 		3		46 
				xmc[27] 		3		47 
				xmc[28] 		3		48 
				xmc[29] 		3		49 
				xmc[30] 		3		50 
				xmc[31] 		3		51 
				xmc[32] 		3		52 
				xmc[33] 		3		53 
				xmc[34] 		3		54 
				xmc[35] 		3		55 
				xmc[36] 		3		56 
				xmc[37] 		3		57 
				xmc[38] 		3		58 
 
				Nc[3]			7		59 
				bc[3]			2		60 
				Mc[3]			2		61 
				xmaxc[3]		6		62 
				xmc[39] 		3		63 
				xmc[40] 		3		64 
				xmc[41] 		3		65 
				xmc[42] 		3		66 
				xmc[43] 		3		67 
				xmc[44] 		3		68 
				xmc[45] 		3		69 
				xmc[46] 		3		70 
				xmc[47] 		3		71 
				xmc[48] 		3		72 
				xmc[49] 		3		73 
				xmc[50] 		3		74 
				xmc[51] 		3		75 
		*/ 
 
 
#define LARc	source 
 
		*c++ =	 ((GSM_MAGIC & 0xF) << 4)				/* 1 */ 
			   | ((LARc[0] >> 2) & 0xF); 
		*c++ =	 ((LARc[0] & 0x3) << 6) 
			   | (LARc[1] & 0x3F); 
		*c++ =	 ((LARc[2] & 0x1F) << 3) 
			   | ((LARc[3] >> 2) & 0x7); 
		*c++ =	 ((LARc[3] & 0x3) << 6) 
			   | ((LARc[4] & 0xF) << 2) 
			   | ((LARc[5] >> 2) & 0x3); 
		*c++ =	 ((LARc[5] & 0x3) << 6) 
			   | ((LARc[6] & 0x7) << 3) 
			   | (LARc[7] & 0x7); 
 
#define Nc		(source + 8) 
 
		*c++ =	 ((Nc[0] & 0x7F) << 1) 
 
#define bc		(source + 9) 
 
			   | ((bc[0] >> 1) & 0x1); 
		*c++ =	 ((bc[0] & 0x1) << 7) 
 
#define Mc		(source + 10) 
 
			   | ((Mc[0] & 0x3) << 5) 
 
#define xmaxc	(source + 11) 
 
			   | ((xmaxc[0] >> 1) & 0x1F); 
		*c++ =	 ((xmaxc[0] & 0x1) << 7) 
 
#define xmc 	(source + 12) 
 
			   | ((xmc[0] & 0x7) << 4) 
			   | ((xmc[1] & 0x7) << 1) 
			   | ((xmc[2] >> 2) & 0x1); 
		*c++ =	 ((xmc[2] & 0x3) << 6) 
			   | ((xmc[3] & 0x7) << 3) 
			   | (xmc[4] & 0x7); 
		*c++ =	 ((xmc[5] & 0x7) << 5)					/* 10 */ 
			   | ((xmc[6] & 0x7) << 2) 
			   | ((xmc[7] >> 1) & 0x3); 
		*c++ =	 ((xmc[7] & 0x1) << 7) 
			   | ((xmc[8] & 0x7) << 4) 
			   | ((xmc[9] & 0x7) << 1) 
			   | ((xmc[10] >> 2) & 0x1); 
		*c++ =	 ((xmc[10] & 0x3) << 6) 
			   | ((xmc[11] & 0x7) << 3) 
			   | (xmc[12] & 0x7); 
 
#undef	Nc 
#define Nc		(source + 25 - 1) 
 
		*c++ =	 ((Nc[1] & 0x7F) << 1) 
 
#undef	bc 
#define bc		(source + 26 - 1) 
 
			   | ((bc[1] >> 1) & 0x1); 
		*c++ =	 ((bc[1] & 0x1) << 7) 
 
#undef	Mc 
#define Mc		(source + 27 - 1) 
 
			   | ((Mc[1] & 0x3) << 5) 
 
#undef	xmaxc 
#define xmaxc	(source + 28 - 1) 
 
			   | ((xmaxc[1] >> 1) & 0x1F); 
		*c++ =	 ((xmaxc[1] & 0x1) << 7) 
 
#undef	xmc 
#define xmc 	(source + 29 - 13) 
 
			   | ((xmc[13] & 0x7) << 4) 
			   | ((xmc[14] & 0x7) << 1) 
			   | ((xmc[15] >> 2) & 0x1); 
		*c++ =	 ((xmc[15] & 0x3) << 6) 
			   | ((xmc[16] & 0x7) << 3) 
			   | (xmc[17] & 0x7); 
		*c++ =	 ((xmc[18] & 0x7) << 5) 
			   | ((xmc[19] & 0x7) << 2) 
			   | ((xmc[20] >> 1) & 0x3); 
		*c++ =	 ((xmc[20] & 0x1) << 7) 
			   | ((xmc[21] & 0x7) << 4) 
			   | ((xmc[22] & 0x7) << 1) 
			   | ((xmc[23] >> 2) & 0x1); 
		*c++ =	 ((xmc[23] & 0x3) << 6) 
			   | ((xmc[24] & 0x7) << 3) 
			   | (xmc[25] & 0x7); 
 
#undef	Nc 
#define Nc		(source + 42 - 2)  
 
		*c++ =	 ((Nc[2] & 0x7F) << 1)					/* 20 */ 
 
#undef	bc 
#define bc		(source + 43 - 2) 
 
			   | ((bc[2] >> 1) & 0x1); 
		*c++ =	 ((bc[2] & 0x1) << 7) 
 
#undef	Mc 
#define Mc		(source + 44 - 2) 
 
			   | ((Mc[2] & 0x3) << 5) 
 
#undef	xmaxc 
#define xmaxc	(source + 45 - 2) 
 
			   | ((xmaxc[2] >> 1) & 0x1F); 
		*c++ =	 ((xmaxc[2] & 0x1) << 7) 
 
#undef	xmc 
#define xmc 	(source + 46 - 26) 
 
			   | ((xmc[26] & 0x7) << 4) 
			   | ((xmc[27] & 0x7) << 1) 
			   | ((xmc[28] >> 2) & 0x1); 
		*c++ =	 ((xmc[28] & 0x3) << 6) 
			   | ((xmc[29] & 0x7) << 3) 
			   | (xmc[30] & 0x7); 
		*c++ =	 ((xmc[31] & 0x7) << 5) 
			   | ((xmc[32] & 0x7) << 2) 
			   | ((xmc[33] >> 1) & 0x3); 
		*c++ =	 ((xmc[33] & 0x1) << 7) 
			   | ((xmc[34] & 0x7) << 4) 
			   | ((xmc[35] & 0x7) << 1) 
			   | ((xmc[36] >> 2) & 0x1); 
		*c++ =	 ((xmc[36] & 0x3) << 6) 
			   | ((xmc[37] & 0x7) << 3) 
			   | (xmc[38] & 0x7); 
 
#undef	Nc 
#define Nc		(source + 59 - 3) 
 
		*c++ =	 ((Nc[3] & 0x7F) << 1) 
 
#undef	bc 
#define bc		(source + 60 - 3) 
 
			   | ((bc[3] >> 1) & 0x1); 
		*c++ =	 ((bc[3] & 0x1) << 7) 
 
#undef	Mc 
#define Mc		(source + 61 - 3) 
 
			   | ((Mc[3] & 0x3) << 5) 
 
#undef	xmaxc 
#define xmaxc	(source + 62 - 3) 
 
			   | ((xmaxc[3] >> 1) & 0x1F); 
		*c++ =	 ((xmaxc[3] & 0x1) << 7) 
 
#undef	xmc 
#define xmc 	(source + 63 - 39) 
 
			   | ((xmc[39] & 0x7) << 4) 
			   | ((xmc[40] & 0x7) << 1) 
			   | ((xmc[41] >> 2) & 0x1); 
		*c++ =	 ((xmc[41] & 0x3) << 6) 				/* 30 */ 
			   | ((xmc[42] & 0x7) << 3) 
			   | (xmc[43] & 0x7); 
		*c++ =	 ((xmc[44] & 0x7) << 5) 
			   | ((xmc[45] & 0x7) << 2) 
			   | ((xmc[46] >> 1) & 0x3); 
		*c++ =	 ((xmc[46] & 0x1) << 7) 
			   | ((xmc[47] & 0x7) << 4) 
			   | ((xmc[48] & 0x7) << 1) 
			   | ((xmc[49] >> 2) & 0x1); 
		*c++ =	 ((xmc[49] & 0x3) << 6) 
			   | ((xmc[50] & 0x7) << 3) 
			   | (xmc[51] & 0x7); 
}