diff src/g23m-gsm/alr2/alr_pei.c @ 3:b4c81ea2d291

src/g23m-gsm/alr2: initial import from Magnetite
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jul 2018 04:43:28 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/g23m-gsm/alr2/alr_pei.c	Sun Jul 15 04:43:28 2018 +0000
@@ -0,0 +1,1082 @@
+/*
++-----------------------------------------------------------------------------
+|  Project :
+|  Modul   :
++-----------------------------------------------------------------------------
+|  Copyright 2002 Texas Instruments Berlin, AG
+|                 All rights reserved.
+|
+|                 This file is confidential and a trade secret of Texas
+|                 Instruments Berlin, AG
+|                 The receipt of or possession of this file does not convey
+|                 any rights to reproduce or disclose its contents or to
+|                 manufacture, use, or sell anything it may describe, in
+|                 whole, or in part, without the specific written consent of
+|                 Texas Instruments Berlin, AG.
++-----------------------------------------------------------------------------
+|  Purpose :  This module implements the process body interface
+|             for the entity ALR.
++-----------------------------------------------------------------------------
+*/
+
+#ifndef ALR_PEI_C
+#define ALR_PEI_C
+
+#define ENTITY_PL
+
+/*==== INCLUDES ===================================================*/
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include "typedefs.h"
+#include "pconst.cdg"
+#include "mconst.cdg"
+#include "message.h"
+#include "ccdapi.h"
+#include "vsi.h"
+#include "custom.h"
+#include "gsm.h"
+#include "prim.h"
+#include "cnf_alr.h"
+#include "mon_alr.h"
+#include "pei.h"
+#include "tok.h"
+#include "pcm.h"
+#ifdef GPRS
+#include "alr_gprs.h"
+#endif
+#if defined (_TMS470)
+#include "inth/iq.h"
+#endif  /* _TMS470 */
+
+#include "alr.h"
+#include "alr_em.h"
+
+/*==== IMPORT =====================================================*/
+/*==== EXPORT =====================================================*/
+GLOBAL T_HANDLE  hCommL1  = VSI_ERROR; /* PL   Communication  */
+GLOBAL T_HANDLE  hCommPL  = VSI_ERROR; /* PL   Communication  */
+GLOBAL T_HANDLE  hCommDL  = VSI_ERROR; /* DL   Communication  */
+GLOBAL T_HANDLE  hCommRR  = VSI_ERROR; /* RR   Communication  */
+GLOBAL T_HANDLE  hCommMMI = VSI_ERROR; /* MMI  Communication  */
+GLOBAL T_HANDLE  hCommCST = VSI_ERROR; /* CST  Communication  */
+
+#ifdef GPRS
+GLOBAL T_HANDLE  hCommGPL = VSI_ERROR; /* GPL  Communication  */
+#endif /* GPRS */
+
+GLOBAL T_HANDLE  pl_handle;
+
+LOCAL  T_ALR_DATA              alr_data_base;
+GLOBAL T_ALR_DATA *alr_data = &alr_data_base;
+
+#if !defined(DYNAMIC_POWER_MEAS)
+T_POWER_MEAS1  alr_power_meas_result1;
+T_POWER_MEAS2  alr_power_meas_result2;
+#endif  /* !DYNAMIC_POWER_MEAS */
+
+#ifdef _SIMULATION_
+/*lint -e785 (Info -- Too few initializers for aggregate)*/
+T_POWER_MEAS  tap_rxlev_response_european[16] = {
+   {4,{{1  , 105},{ 14, 220},{ 23, 280},{124, 125}}},  // 0
+   {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 1
+   {4,{{512, 105},{580, 220},{637, 280},{885, 125}}},  // 2
+   {8,{{23 , 280},{512,  55},{14 , 220},{580, 215},    // 3
+       {124, 125},{885, 115},{1  , 105},{637, 275}}},  
+   {3,{{23 , 280},{512,  55},{0x8000 | 512, 100}}},    // 4
+   {2,{{ 14, 220},{ 23, 280},{  0,   0},{  0,   0}}},  // 5
+   {1,{{ 23, 280},{  0,   0},{  0,   0},{  0,   0}}},  // 6
+  {10,{{  0,  5*60},{  1,   5*0},{ 10,  5*10},{  20,  5*20},{ 123,  5*30}, // 7
+       {124,  5*40},{974,  5*50},{975, 5*-10},{1022,  5*70},{1023,  5*80}}},
+   {1,{{ 32, 100},{  0,   0},{  0,   0},{  0,   0}}},  // 8
+   {50, {{  0, 5*60},{  1, 5*10},{ 10,5*30},{  20,5*20},{ 123,5*30},  // 9
+         {  3, 5*60},{  4, 5*10},{ 5, 5*30},{  31,5*20},{ 123,5*30},
+         {  6, 5*60},{  7, 5*10},{ 8, 5*30},{  9, 5*20},{ 11, 5*30},
+         {  12,5*60},{  13,5*10},{ 14,5*30},{  15,5*20},{ 16, 5*30},
+         {  17,5*60},{  18,5*10},{ 19,5*30},{  21,5*20},{ 23, 5*30},
+         {  22,5*60},{  24,5*10},{ 25,5*30},{  26,5*20},{ 28, 5*30},
+         {  27,5*60},{  29,5*10},{ 30,5*30},{  32,5*20},{ 33, 5*30},
+         {  36,5*60},{  37,5*50},{ 38,5*40},{  39,5*20},{ 34, 5*30},
+         {  40,5*60},{  41,5*50},{ 42,5*40},{  43,5*20},{ 44, 5*30},
+         {  45,5*60},{  46,5*50},{ 47,5*40},{  48,5*20},{ 49, 5*30}}},
+   {0, {0}}, // 10
+   {4,{{1  , -10},{ 14, -2},{ 23, -8},{124, -12}}},  // 12 - 11
+   {90, {{  0, 5*60},{  1, 5*50},{ 10,5*40},{  20,5*20},{ 123,5*30},  // 12
+         {  3, 5*60},{  4, 5*50},{ 5, 5*40},{  31,5*20},{ 50,5*30},
+         {  6, 5*60},{  7, 5*50},{ 8, 5*40},{  9, 5*20},{ 11, 5*30},
+         {  12,5*60},{  13,5*50},{ 14,5*40},{  15,5*20},{ 16, 5*30},
+         {  17,5*60},{  18,5*50},{ 19,5*40},{  21,5*20},{ 23, 5*30},
+         {  22,5*60},{  24,5*50},{ 25,5*40},{  26,5*20},{ 28, 5*30},
+         {  27,5*60},{  29,5*50},{ 30,5*40},{  32,5*20},{ 33, 5*30},
+         {  36,5*60},{  37,5*50},{ 38,5*40},{  39,5*20},{ 34, 5*30},
+         {  40,5*60},{  41,5*50},{ 42,5*40},{  43,5*20},{ 44, 5*30},
+         {  45,5*60},{  46,5*50},{ 47,5*40},{  48,5*20},{ 49, 5*30},
+         { 512,5*60},{ 513,5*50},{533,5*40},{ 514,5*20},{515, 5*30},
+         { 516,5*60},{ 517,5*50},{518,5*40},{ 519,5*20},{520, 5*30},
+         { 521,5*60},{ 522,5*50},{523,5*40},{ 524,5*20},{525, 5*30},
+         { 526,5*60},{ 527,5*50},{528,5*40},{ 529,5*20},{530, 5*30},
+         { 531,5*60},{ 532,5*50},{541,5*40},{ 534,5*20},{535, 5*30},
+         { 536,5*60},{ 537,5*50},{538,5*40},{ 539,5*20},{540, 5*30},
+         { 542,5*60},{ 543,5*50},{544,5*40},{ 545,5*20},{546, 5*30},
+         { 547,5*60},{ 548,5*50},{549,5*40},{ 550,5*20},{551, 5*30},
+   }},
+ // 35 Carriers in DCS_1800 & 50 Carriers in GSM_900
+   {85, {{  0, 5*60},{  1, 5*50},{ 10,5*40},{  20,5*20},{ 123,5*30},  // 13
+         {  3, 5*60},{  4, 5*50},{ 5, 5*40},{  31,5*20},{ 50,5*30},
+         {  6, 5*60},{  7, 5*50},{ 8, 5*40},{  9, 5*20},{ 11, 5*30},
+         {  12,5*60},{  13,5*50},{ 14,5*40},{  15,5*20},{ 16, 5*30},
+         {  17,5*60},{  18,5*50},{ 19,5*40},{  21,5*20},{ 23, 5*30},
+         {  22,5*60},{  24,5*50},{ 25,5*40},{  26,5*20},{ 28, 5*30},
+         {  27,5*60},{  29,5*50},{ 30,5*40},{  32,5*20},{ 33, 5*30},
+         {  36,5*60},{  37,5*50},{ 38,5*40},{  39,5*20},{ 34, 5*30},
+         {  40,5*60},{  41,5*50},{ 42,5*40},{  43,5*20},{ 44, 5*30},
+         {  125,5*60},{  126,5*50},{ 127,5*40},{  128,5*20},{ 129, 5*30},
+         { 512,5*60},{ 513,5*50},{533,5*40},{ 514,5*20},{515, 5*30},
+         { 516,5*60},{ 517,5*50},{518,5*40},{ 519,5*20},{520, 5*30},
+         { 521,5*60},{ 522,5*50},{523,5*40},{ 524,5*20},{525, 5*30},
+         { 526,5*60},{ 527,5*50},{528,5*40},{ 529,5*20},{530, 5*30},
+         { 531,5*60},{ 532,5*50},{541,5*40},{ 534,5*20},{535, 5*30},
+         { 536,5*60},{ 537,5*50},{538,5*40},{ 539,5*20},{540, 5*30},
+         { 546,5*60},{ 542,5*50},{543,5*40},{ 544,5*20},{545, 5*30},
+   }},
+      // 80 GSM 900 Carriers & 20 PCS 1800 Carriers
+   {100, {{  0, 5*60},{  1, 5*50},{ 10,5*40},{  20,5*25},{ 123,5*30},  // 14
+         {  3, 5*60},{  4, 5*50},{ 5, 5*40},{  31,5*25},{ 50,5*30},
+         {  6, 5*60},{  7, 5*50},{ 8, 5*40},{  9, 5*25},{ 11, 5*30},
+         {  12,5*60},{  13,5*50},{ 14,5*40},{  15,5*25},{ 16, 5*30},
+         {  17,5*60},{  18,5*50},{ 19,5*40},{  21,5*25},{ 23, 5*30},
+         {  22,5*60},{  24,5*50},{ 25,5*40},{  26,5*25},{ 28, 5*30},
+         {  27,5*60},{  29,5*50},{ 30,5*40},{  32,5*25},{ 33, 5*30},
+         {  36,5*60},{  37,5*50},{ 38,5*40},{  39,5*25},{ 34, 5*30},
+         {  40,5*60},{  41,5*50},{ 42,5*40},{  43,5*25},{ 44, 5*30},
+         {  45,5*60},{  46,5*50},{ 47,5*40},{  48,5*25},{ 49, 5*30},
+         {  51,5*60},{  52,5*50},{ 53,5*40},{  54,5*25},{ 55, 5*30},
+         {  56,5*60},{  57,5*50},{ 58,5*40},{  59,5*25},{ 60, 5*30},
+         {  61,5*60},{  62,5*50},{ 63,5*40},{  64,5*25},{ 65, 5*30},
+         {  66,5*60},{  67,5*50},{ 68,5*40},{  69,5*25},{ 70, 5*30},
+         {  72,5*60},{  73,5*50},{ 74,5*40},{  75,5*25},{ 76, 5*30},
+         {  77,5*20},{  78,5*50},{ 79,5*40},{  80,5*25},{ 81, 5*30},
+         { 512,5*60},{ 513,5*50},{533,5*40},{ 514,5*20},{515, 5*30},
+         { 516,5*60},{ 517,5*50},{518,5*40},{ 519,5*20},{520, 5*30},
+         { 521,5*60},{ 522,5*50},{523,5*40},{ 524,5*20},{525, 5*30},
+         { 526,5*60},{ 527,5*50},{528,5*40},{ 529,5*20},{530, 5*30},
+   }},
+      // 80 GSM 900 Carriers & 20 PCS 1800 Carriers
+   {100, {{  0, 5*60},{  1, 5*18},{ 10,5*40},{  20,5*18},{ 123,5*30},  // 15
+         {  3, 5*60},{  4, 5*18},{ 5, 5*40},{  31,5*18},{ 50,5*30},
+         {  6, 5*60},{  7, 5*18},{ 8, 5*40},{  9, 5*18},{ 11, 5*30},
+         {  12,5*60},{  13,5*18},{ 14,5*40},{  15,5*18},{ 16, 5*30},
+         {  17,5*60},{  18,5*18},{ 19,5*40},{  21,5*18},{ 23, 5*30},
+         {  22,5*60},{  24,5*18},{ 25,5*40},{  26,5*18},{ 28, 5*30},
+         {  27,5*60},{  29,5*18},{ 30,5*40},{  32,5*18},{ 33, 5*30},
+         {  36,5*60},{  37,5*18},{ 38,5*40},{  39,5*18},{ 34, 5*30},
+         {  40,5*60},{  41,5*18},{ 42,5*40},{  43,5*18},{ 44, 5*30},
+         {  45,5*60},{  46,5*18},{ 47,5*40},{  48,5*18},{ 49, 5*30},
+         {  51,5*60},{  52,5*18},{ 53,5*40},{  54,5*18},{ 55, 5*30},
+         {  56,5*60},{  57,5*18},{ 58,5*40},{  59,5*18},{ 60, 5*30},
+         {  61,5*60},{  62,5*18},{ 63,5*40},{  64,5*18},{ 65, 5*30},
+         {  66,5*60},{  67,5*18},{ 68,5*40},{  69,5*18},{ 70, 5*30},
+         {  72,5*60},{  73,5*18},{ 74,5*40},{  75,5*18},{ 76, 5*30},
+         {  77,5*20},{  78,5*18},{ 79,5*40},{  80,5*18},{ 81, 5*30},
+         { 512,5*60},{ 513,5*18},{533,5*40},{ 514,5*18},{515, 5*30},
+         { 516,5*60},{ 517,5*18},{518,5*40},{ 519,5*18},{520, 5*30},
+         { 521,5*60},{ 522,5*18},{523,5*40},{ 524,5*18},{525, 5*30},
+         { 526,5*60},{ 527,5*18},{528,5*40},{ 529,5*18},{530, 5*30},
+   }},
+};
+
+
+T_POWER_MEAS  tap_rxlev_response_american[16] = {
+    {5,{{130, 105},{140, 220},{150, 250},{250, 125}, {155, -10}}}, // 0
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 1
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 2
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 3
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 4
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 5
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 6
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 7
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 8
+    {0,{{0  ,  0}, {  0,   0},{  0,   0},{  0,   0}}},  // 9
+    {0, {0}},  // 10
+    {5,{{130, -1},{140, -2},{150, -5},{250, -12}, {155, -10}}},  // 11 
+ // 40 Carriers in PCS_1900 & 50 Carriers in GSM_850
+    {90,{{130, 105},{140, 220},{150, 250},{240, 125}, {160, 110},  // 12
+         {131, 105},{141, 220},{151, 250},{241, 125}, {161, 110},
+         {132, 105},{142, 220},{152, 250},{222, 125}, {162, 110},
+         {133, 105},{143, 220},{153, 250},{223, 125}, {163, 110},
+         {134, 105},{144, 220},{154, 250},{224, 125}, {164, 110},
+         {135, 105},{145, 220},{155, 250},{225, 125}, {165, 110},
+         {136, 105},{146, 220},{156, 250},{226, 125}, {166, 110},
+         {137, 105},{147, 220},{157, 250},{227, 125}, {167, 110},
+         {138, 105},{148, 220},{158, 250},{228, 125}, {168, 110},
+         {139, 105},{149, 220},{159, 250},{229, 125}, {169, 110},
+         { 553,105},{ 554,220},{534, 220},{514, 220}, {535, 220},
+         { 536,105},{ 537,220},{538, 220},{539, 220}, {540, 220},
+         { 541,105},{ 542,220},{543, 220},{544, 220}, {545, 220},
+         { 546,105},{ 547,220},{548, 220},{549, 220}, {550, 220},
+         { 551,105},{ 552,220},{555, 220},{556, 220}, {557, 220},
+         { 558,105},{ 559,220},{560, 220},{561, 220}, {562, 220},
+         { 563,105},{ 564,220},{565, 220},{566, 220}, {567, 220},
+         { 568,105},{ 568,220},{570, 220},{571, 220}, {572, 220},
+    }},
+    // 35 Carriers in PCS_1900 & 50 Carriers in GSM_850
+    {85,{{130, 105},{140, 220},{150, 250},{240, 125}, {160, 110},  // 13
+         {131, 105},{141, 220},{151, 250},{241, 125}, {161, 110},
+         {132, 105},{142, 220},{152, 250},{242, 125}, {162, 110},
+         {133, 105},{143, 220},{153, 250},{243, 125}, {163, 110},
+         {134, 105},{144, 220},{154, 250},{244, 125}, {164, 110},
+         {135, 105},{145, 220},{155, 250},{245, 125}, {165, 110},
+         {136, 105},{146, 220},{156, 250},{246, 125}, {166, 110},
+         {137, 105},{147, 220},{157, 250},{247, 125}, {167, 110},
+         {138, 105},{148, 220},{158, 250},{248, 125}, {168, 110},
+         {139, 105},{149, 220},{159, 250},{249, 125}, {169, 110},
+         { 125,105},{ 140,220},{150, 220},{160, 220}, {170, 220},
+         { 126,105},{ 141,220},{151, 220},{161, 220}, {171, 220},
+         { 127,105},{ 142,220},{152, 220},{162, 220}, {172, 220},
+         { 128,105},{ 143,220},{153, 220},{163, 220}, {173, 220},
+         { 129,105},{ 144,220},{154, 220},{164, 220}, {174, 220},
+         { 130,105},{ 145,220},{155, 220},{165, 220}, {175, 220},
+         { 131,105},{ 146,220},{156, 220},{166, 220}, {176, 220},
+    }},
+   // 80 GSM 850 Carriers & 20 PCS 1900 Carriers
+    {100,{{130, 105},{140, 220},{150, 250},{240, 125}, {160, 110},  // 14
+         {131, 105},{141, 220},{151, 250},{241, 125}, {161, 110},
+         {132, 105},{142, 220},{152, 250},{242, 125}, {162, 110},
+         {133, 105},{143, 220},{153, 250},{243, 125}, {163, 110},
+         {134, 105},{144, 220},{154, 250},{244, 125}, {164, 110},
+         {135, 105},{145, 220},{155, 250},{245, 125}, {165, 110},
+         {136, 105},{146, 220},{156, 250},{246, 125}, {166, 110},
+         {137, 105},{147, 220},{157, 250},{247, 125}, {167, 110},
+         {138, 105},{148, 220},{158, 250},{248, 125}, {168, 110},
+         {139, 105},{149, 220},{159, 250},{249, 125}, {169, 110},
+         {170, 105},{180, 220},{190, 250},{200, 125}, {210, 110},
+         {171, 105},{181, 220},{191, 250},{201, 125}, {211, 110},
+         {172, 105},{182, 220},{192, 250},{202, 125}, {212, 110},
+         {173, 105},{183, 220},{193, 250},{203, 125}, {213, 110},
+         {174, 105},{184, 220},{194, 250},{204, 125}, {214, 110},
+         {175, 105},{185, 220},{195, 250},{205, 125}, {215, 110},
+         { 553,105},{ 554,220},{534, 220},{514, 220}, {535, 220},
+         { 536,105},{ 537,220},{538, 220},{539, 220}, {540, 220},
+         { 541,105},{ 542,220},{543, 220},{544, 220}, {545, 220},
+         { 546,105},{ 547,220},{548, 220},{549, 220}, {550, 220},
+    }},
+   // 80 GSM 850 Carriers & 20 PCS 1900 Carriers
+    {100,{{130, 105},{140, 80},{150, 250},{240, 90}, {160, 110},  // 15
+         {131, 105},{141, 80},{151, 250},{241, 90}, {161, 110},
+         {132, 105},{142, 80},{152, 250},{242, 90}, {162, 110},
+         {133, 105},{143, 80},{153, 250},{243, 90}, {163, 110},
+         {134, 105},{144, 80},{154, 250},{244, 90}, {164, 110},
+         {135, 105},{145, 80},{155, 250},{245, 90}, {165, 110},
+         {136, 105},{146, 80},{156, 250},{246, 90}, {166, 110},
+         {137, 105},{147, 80},{157, 250},{247, 90}, {167, 110},
+         {138, 105},{148, 80},{158, 250},{248, 90}, {168, 110},
+         {139, 105},{149, 80},{159, 250},{249, 90}, {169, 110},
+         {170, 105},{180, 80},{190, 250},{200, 90}, {210, 110},
+         {171, 105},{181, 80},{191, 250},{201, 90}, {211, 110},
+         {172, 105},{182, 80},{192, 250},{202, 90}, {212, 110},
+         {173, 105},{183, 80},{193, 250},{203, 90}, {213, 110},
+         {174, 105},{184, 80},{194, 250},{204, 90}, {214, 110},
+         {175, 105},{185, 80},{195, 250},{205, 90}, {215, 110},
+         { 553,105},{ 554,80},{534, 220},{514, 90}, {535, 220},
+         { 536,105},{ 537,80},{538, 220},{539, 90}, {540, 220},
+         { 541,105},{ 542,80},{543, 220},{544, 90}, {545, 220},
+         { 546,105},{ 547,80},{548, 220},{549, 90}, {550, 220},
+    }},
+};
+
+/*lint +e785 (Info -- Too few initializers for aggregate)*/
+#endif  /* _SIMULATION_ */
+
+/*==== PRIVATE ====================================================*/
+
+LOCAL const void pei_not_supported (void *);
+
+#ifdef OPTION_RELATIVE
+LOCAL ULONG offset;
+#endif
+
+#define TRACING
+/*==== VARIABLES ==================================================*/
+
+/*LOCAL BOOL              exit_flag = FALSE;*/
+LOCAL BOOL              first_access = TRUE;
+LOCAL T_MONITOR         alr_mon;
+
+/*==== FUNCTIONS ==================================================*/
+
+LOCAL const T_FUNC mph_table[] = {
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_0 ( ma_mph_idle_req          , MPH_IDLE_REQ             ),
+  MAK_FUNC_0 ( ma_mph_neighbourcell_req , MPH_NEIGHBOURCELL_REQ    ),
+  MAK_FUNC_0 ( ma_mph_emo_req           , MPH_EMO_REQ              ),
+  MAK_FUNC_0 ( ma_mph_dedicated_req     , MPH_DEDICATED_REQ        ),
+  MAK_FUNC_0 ( ma_mph_dedicated_fail_req, MPH_DEDICATED_FAIL_REQ   ),
+  MAK_FUNC_0 ( ma_mph_ciphering_req     , MPH_CIPHERING_REQ        ),
+  MAK_FUNC_0 ( ma_mph_freq_redef_req    , MPH_FREQ_REDEF_REQ       ),
+  MAK_FUNC_0 ( ma_mph_channel_mode_req  , MPH_CHANNEL_MODE_REQ     ),
+  MAK_FUNC_0 ( ma_mph_deactivate_req    , MPH_DEACTIVATE_REQ       ),
+  MAK_FUNC_0 ( ma_mph_classmark_req     , MPH_CLASSMARK_REQ        ),
+  MAK_FUNC_N ( ma_mph_ext_meas_req      , MPH_EXT_MEAS_REQ         ),
+  MAK_FUNC_N ( ma_mph_ncell_pos_req     , MPH_NCELL_POS_REQ        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_0 ( ma_mph_tch_loop_req      , MPH_TCH_LOOP_REQ         ),
+  MAK_FUNC_0 ( ma_mph_dai_req           , MPH_DAI_REQ              ),
+  MAK_FUNC_0 ( ma_mph_cbch_req          , MPH_CBCH_REQ             ),
+  MAK_FUNC_0 ( ma_mph_identity_req      , MPH_IDENTITY_REQ         ),
+  MAK_FUNC_0 ( ma_mph_power_req         , MPH_POWER_REQ            ),
+  MAK_FUNC_0 ( ma_mph_bsic_req          , MPH_BSIC_REQ             ),
+  MAK_FUNC_0 ( ma_mph_random_access_req , MPH_RANDOM_ACCESS_REQ    ),
+
+#ifdef GPRS
+  MAK_FUNC_0 ( gprs_alr_mon_ctrl_req    , MPH_MON_CTRL_REQ         ),
+#else
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+#endif
+  MAK_FUNC_0 ( ma_mph_sync_req          , MPH_SYNC_REQ             ),
+  MAK_FUNC_0 ( ma_mph_clean_buf_req     , MPH_CLEAN_BUF_REQ        ),
+  MAK_FUNC_0 ( ma_mph_stop_dedi_req     , MPH_STOP_DEDICATED_REQ   ),
+#ifdef GPRS
+  MAK_FUNC_0 ( ma_mph_meas_rep_req      , MPH_MEAS_REP_REQ         )
+#else
+  MAK_FUNC_N ( pei_not_supported        , 0                        )
+#endif
+};
+
+/*
+ * The MPHC jump table uses the
+ * original TI opcodes !!!
+ */
+
+LOCAL const T_FUNC mphc_table[] = {
+  MAK_FUNC_N ( pei_not_supported               , 0                            ),
+  MAK_FUNC_N ( pei_not_supported               , TST_TEST_HW_REQ              ), /*  1 */
+  MAK_FUNC_0 ( csf_show_version                , TST_TEST_HW_CON              ), /*  2 */
+  MAK_FUNC_N ( pei_not_supported               , TST_TIMESTAMP_MSG            ), /*  3 */
+  MAK_FUNC_N ( pei_not_supported               , TST_SLEEP_REQ                ), /*  4 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /*  5 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /*  6 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /*  7 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /*  8 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /*  9 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 10 */
+  MAK_FUNC_N ( pei_not_supported               , MPHC_RXLEV_REQ               ), /* 11 */
+  MAK_FUNC_0 ( ma_mphc_rxlev_ind               , MPHC_RXLEV_IND               ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_RXLEV_REQ          ),
+  MAK_FUNC_0 ( ma_mphc_stop_rxlev_cnf          , MPHC_STOP_RXLEV_CON          ),
+  MAK_FUNC_0 ( pei_not_supported               , MPHC_NETWORK_SYNC_REQ        ),
+  MAK_FUNC_N ( ma_mphc_network_sync_ind        , MPHC_NETWORK_SYNC_IND        ),
+  MAK_FUNC_0 ( pei_not_supported               , MPHC_STOP_NETWORK_SYNC_REQ   ),
+#if defined(STOP_SYNC_TASK)
+  MAK_FUNC_N ( ma_mphc_stop_network_sync_cnf   , MPHC_STOP_NETWORK_SYNC_CON   ),
+#else /* STOP_SYNC_TASK */
+  MAK_FUNC_N ( ma_mphc_empty_cnf               , MPHC_STOP_NETWORK_SYNC_CON   ),
+#endif /* STOP_SYNC_TASK */
+  MAK_FUNC_0 ( pei_not_supported               , MPHC_NEW_SCELL_REQ           ),
+  MAK_FUNC_N ( ma_mphc_new_scell_cnf           , MPHC_NEW_SCELL_CON           ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_START_CCCH_REQ          ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_CCCH_REQ           ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_STOP_CCCH_CON           ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_SCELL_NBCCH_REQ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_SCELL_EBCCH_REQ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_SCELL_BCCH_REQ     ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_STOP_SCELL_BCCH_CON     ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_BCCH_REQ          ),
+  MAK_FUNC_0 ( ma_mphc_ncell_bcch_ind          , MPHC_NCELL_BCCH_IND          ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_NCELL_BCCH_REQ     ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_STOP_NCELL_BCCH_CON     ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_SYNC_REQ          ),
+  MAK_FUNC_0 ( ma_mphc_ncell_sync_ind          , MPHC_NCELL_SYNC_IND          ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_NCELL_SYNC_REQ     ),
+  MAK_FUNC_0 ( ma_mphc_stop_ncell_sync_cnf     ,  MPHC_STOP_NCELL_SYNC_CON    ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_RXLEV_PERIODIC_REQ      ),
+  MAK_FUNC_0 ( ma_mphc_rxlev_periodic_ind      , MPHC_RXLEV_PERIODIC_IND      ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_RXLEV_PERIODIC_REQ ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_STOP_RXLEV_PERIODIC_CON ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CONFIG_CBCH_REQ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CBCH_SCHEDULE_REQ       ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CBCH_UPDATE_REQ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CBCH_INFO_REQ           ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_CBCH_REQ           ),
+  MAK_FUNC_N ( ma_mphc_empty_cnf               , MPHC_STOP_CBCH_CON           ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_RA_REQ                  ),
+  MAK_FUNC_0 ( ma_mphc_ra_cnf                  , MPHC_RA_CON                  ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_RA_REQ             ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_STOP_RA_CON             ),
+  MAK_FUNC_0 ( ma_mphc_data_ind                , MPHC_DATA_IND                ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_IMMED_ASSIGN_REQ        ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CHANNEL_ASSIGN_REQ      ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_ASYNC_HO_REQ            ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_SYNC_HO_REQ             ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_PRE_SYNC_HO_REQ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_PSEUDO_SYNC_HO_REQ      ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_STOP_DEDICATED_REQ      ),
+  MAK_FUNC_0 ( ma_mphc_change_frequency_cnf    , MPHC_CHANGE_FREQUENCY_CON    ),
+  MAK_FUNC_0 ( ma_mphc_async_ho_cnf            , MPHC_ASYNC_HO_CON            ),
+  MAK_FUNC_0 ( ma_mphc_channel_assign_cnf      , MPHC_CHANNEL_ASSIGN_CON      ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_CHANNEL_MODE_MODIFY_CON ),
+  MAK_FUNC_0 ( ma_mphc_handover_fail_cnf       , MPHC_HANDOVER_FAIL_CON       ),
+  MAK_FUNC_0 ( ma_mphc_immed_assign_cnf        , MPHC_IMMED_ASSIGN_CON        ),
+  MAK_FUNC_0 ( ma_mphc_pre_sync_ho_cnf         , MPHC_PRE_SYNC_HO_CON         ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , MPHC_SET_CIPHERING_CON       ),
+  MAK_FUNC_0 ( ma_mphc_sync_ho_cnf             , MPHC_SYNC_HO_CON             ),
+  MAK_FUNC_0 ( ma_mphc_ta_fail_ind             , MPHC_TA_FAIL_IND             ),
+  MAK_FUNC_0 ( ma_mphc_handover_finished_ind   , MPHC_HANDOVER_FINISHED       ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CHANGE_FREQUENCY        ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_CHANNEL_MODE_MODIFY_REQ ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_HANDOVER_FAIL_REQ       ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_SET_CIPHERING_REQ       ),
+  MAK_FUNC_0 ( ma_mphc_meas_report_ind         , MPHC_MEAS_REPORT             ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_UPDATE_BA_LIST          ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_FB_SB_READ        ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_SB_READ           ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_BCCH_READ         ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_INIT_IDS_REQ            ), /* 78 */
+  MAK_FUNC_N ( pei_not_supported               , MPHC_INIT_IDS_CON            ), /* 79 = is not used */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 80 = used by L1 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 81 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 82 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 83 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 84 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 85 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 86 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 87 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 88 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 89 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 90 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 91 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 92 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 93 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 94 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 95 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 96 */
+  MAK_FUNC_N ( pei_not_supported               , OML1_CLOSE_TCH_LOOP_REQ      ), /* 97 */
+  MAK_FUNC_N ( pei_not_supported               , OML1_OPEN_TCH_LOOP_REQ       ),
+  MAK_FUNC_N ( pei_not_supported               , OML1_START_DAI_TEST_REQ      ),
+  MAK_FUNC_N ( pei_not_supported               , OML1_STOP_DAI_TEST__REQ      ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , OML1_CLOSE_TCH_LOOP_CON      ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , OML1_OPEN_TCH_LOOP_CON       ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , OML1_START_DAI_TEST_CON      ),
+  MAK_FUNC_0 ( ma_mphc_empty_cnf               , OML1_STOP_DAI_TEST_CON       ),
+  MAK_FUNC_0 ( ma_mphc_adc_ind                 , MPHC_ADC_IND                 ), /* will be send to CST directly */
+  MAK_FUNC_N ( pei_not_supported               , TRACE_INFO                   ),
+  MAK_FUNC_N ( pei_not_supported               , L1_STATS_REQ                 ),
+  MAK_FUNC_N ( pei_not_supported               , L1_DUMMY_FOR_SIM             ),
+  MAK_FUNC_0 ( ma_mphc_data_ind                , PH_DATA_IND                  ),
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NETWORK_LOST_IND        ), /* 110 = send to L1 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 111 = MMI_ADC_REQ */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 112 = MMI_STOP_ADC_REQ */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 113 = MMI_STOP_ADC_CON */
+  MAK_FUNC_N ( pei_not_supported               , MPHC_INIT_L1_REQ             ), /* 114 */
+  MAK_FUNC_N ( ma_mphc_init_l1_cnf             , MPHC_INIT_L1_CON             ), /* 115 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 116 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 117 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 118 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 119 = L1_TEST_HW_INFO */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 120 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 121 */
+  MAK_FUNC_N ( pei_not_supported               , MPHC_NCELL_LIST_SYNC_REQ     ), /* 122 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 123 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 124 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 125 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 126 */
+  MAK_FUNC_N ( pei_not_supported               , 0                            ), /* 127 */
+  MAK_FUNC_N ( ma_mphc_stop_dedi_con           , MPHC_STOP_DEDICATED_CON      ) /* 128 */
+};
+
+LOCAL const T_FUNC mmi_table[] = {
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_0 ( ma_mmi_cbch_req          , MMI_CBCH_REQ             ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_N ( pei_not_supported        , 0                        ),
+  MAK_FUNC_0 ( ma_mmi_sat_cbch_dwnld_req, MMI_SAT_CBCH_DWNLD_REQ   )
+};
+
+#ifdef FF_EM_MODE
+LOCAL const T_FUNC em_ul_table[] = {
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x00*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x01*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x02*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x03*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x04*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x05*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x06*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x07*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x08*/
+  MAK_FUNC_0( l1_em_l1_event_req,             EM_L1_EVENT_REQ           ), /* 0x09*/
+  MAK_FUNC_N( pei_not_supported,              0                         ), /* 0x0A*/
+  MAK_FUNC_N( pei_not_supported,              0                         )  /* 0x0B*/
+};
+#endif /* FF_EM_MODE */
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_primitive       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Process protocol specific primitive.
+
+*/
+LOCAL SHORT pei_primitive (void * ptr)
+{
+  T_PRIM * prim = ptr;
+  /*
+   *                |     |      |
+   *               MPH   PH     MMI       UPLINK
+   *                |     |      |
+   *      +---------v-----v------v---+
+   *      |                          |
+   *      |           ALR            |
+   *      |                          |
+   *      +------------^-------------+
+   *                   |
+   *                  MPHC                DOWNLINK
+   *                   |
+   *
+   */
+
+  if (prim NEQ NULL)
+  {
+    ULONG            opc = prim->custom.opc;
+    USHORT           n;
+    const T_FUNC    *table;
+
+    VSI_PPM_REC ((T_PRIM_HEADER *)prim, __FILE__, __LINE__);
+
+#if defined TRACING
+    PTRACE_IN (opc);
+#endif
+
+    switch (SAP_NR(opc))
+    {
+      case    MPH_DL:
+          table =  mph_table ;
+          n = TAB_SIZE(mph_table);
+        break;
+      case    0x0000:
+      case    0x0100:
+        /*
+         * use same table as PH_DATA_IND is the only prim with 0x0100
+         * and is at location 109
+         */
+        table =     mphc_table;    n = TAB_SIZE (mphc_table);    break;
+      case    0x0E00: table =     mmi_table ;    n = TAB_SIZE (mmi_table);     break;
+#ifdef GPRS
+      case    TB_UL : gprs_alr_get_table (&table, &n); break;
+#endif /* GPRS */
+#ifdef FF_EM_MODE
+      case    EM_Ul:  table =     em_ul_table;   n = TAB_SIZE (em_ul_table);   break;
+#endif /* FF_EM_MODE*/
+      default       : table =     NULL ;         n = 0;                        break;
+    }
+
+    if (table NEQ NULL )
+    {
+
+      if (PRIM_NR(opc) < n)
+      {
+
+        table += PRIM_NR(opc);
+#ifdef PALLOC_TRANSITION
+        P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0;
+#ifndef NO_COPY_ROUTING
+        P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER);
+#endif /* NO_COPY_ROUTING */
+#endif /* PALLOC_TRANSITION */
+        JUMP (table->func) (P2D(prim));
+      }
+      else
+      {
+        pei_not_supported (P2D(prim));
+      }
+      return PEI_OK;
+    }
+
+#ifdef GSM_ONLY
+    PFREE (P2D(prim))
+    return PEI_ERROR;
+#else
+    if (opc & SYS_MASK)
+      vsi_c_primitive (VSI_CALLER prim);
+    else
+    {
+      PFREE (P2D(prim))
+      return PEI_ERROR;
+    }
+#endif
+  }
+  return PEI_OK;
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_not_supported   |
++--------------------------------------------------------------------+
+
+  PURPOSE : An unsupported primitive is received.
+
+*/
+
+static const void pei_not_supported (void *data)
+{
+  PFREE (data);
+}
+
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_init            |
++--------------------------------------------------------------------+
+
+  PURPOSE : Initialize Protocol Stack Entity
+
+*/
+LOCAL SHORT pei_init (T_HANDLE handle)
+{
+  UBYTE version;
+  pl_handle = handle;
+
+  if (hCommPL < VSI_OK)
+  {
+    if ((hCommPL = vsi_c_open (VSI_CALLER PL_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+  if (hCommL1 < VSI_OK)
+  {
+    if ((hCommL1 = vsi_c_open (VSI_CALLER L1_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+  if (hCommDL < VSI_OK)
+  {
+    if ((hCommDL = vsi_c_open (VSI_CALLER DL_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+  if (hCommRR < VSI_OK)
+  {
+    if ((hCommRR = vsi_c_open (VSI_CALLER RR_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+  if (hCommCST < VSI_OK)
+  {
+    if ((hCommCST = vsi_c_open (VSI_CALLER CST_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+  if (hCommMMI < VSI_OK)
+  {
+    /*
+     * Open MMI (Layer 4)
+     */
+
+    if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+#ifdef GPRS
+
+  if (hCommGPL < VSI_OK)
+  {
+    if ((hCommGPL = vsi_c_open (VSI_CALLER GPL_NAME)) < VSI_OK)
+      return PEI_ERROR;
+  }
+
+#endif /* #ifdef GPRS */
+
+  /*exit_flag = FALSE;*/
+
+#if defined (_SIMULATION_)
+  ccd_init();
+#endif  /* _SIMULATION_ */
+
+  ma_init ();
+  cs_init ();
+  pch_init ();
+  dedi_init ();
+  nc_init ();
+  pch_init ();
+  rach_init ();
+  dedi_init ();
+  cb_init ();
+  tim_init();
+
+
+#ifdef FF_EM_MODE
+  /*
+     initialise event flags
+  */
+  em_init_l1_event_trace();
+  /*
+    initialise alr semaphor for EM event tracing
+  */
+  em_l1_sem_init();
+#endif /* FF_EM_MODE */
+
+
+  pcm_Init ();
+  pcm_ReadFile ((UBYTE *)EF_MSCAP_ID, SIZE_EF_MSCAP,
+                (UBYTE *)&alr_data->mscap, &version);
+
+
+  alr_trc_init ();
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_timeout         |
++--------------------------------------------------------------------+
+
+  PURPOSE : Process timeout
+
+*/
+LOCAL SHORT pei_timeout (USHORT index)
+{
+#if !defined(TIMER_TRACE)
+  TRACE_FUNCTION ("pei_timeout ()");
+#endif  /* !TIMER_TRACE */
+
+  /*
+   * Handle Timeouts
+   */
+  tim_exec_timeout (index);
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_exit            |
++--------------------------------------------------------------------+
+
+  PURPOSE : Close Resources and terminate
+
+*/
+
+LOCAL SHORT pei_exit (void)
+{
+  /*
+   * clean up communication
+   */
+
+  vsi_c_close (VSI_CALLER hCommL1);
+  hCommL1 = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommPL);
+  hCommPL = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommDL);
+  hCommDL = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommRR);
+  hCommRR = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommMMI);
+  hCommMMI = VSI_ERROR;
+
+  vsi_c_close (VSI_CALLER hCommCST);
+  hCommCST = VSI_ERROR;
+
+#ifdef GPRS
+
+  vsi_c_close (VSI_CALLER hCommGPL);
+  hCommGPL = VSI_ERROR;
+
+#endif /* #ifdef GPRS */
+  alr_trc_exit ();
+
+#ifdef FF_EM_MODE
+  em_l1_sem_exit();
+#endif /* FF_EM_MODE */
+
+#if defined (_SIMULATION_)
+  ccd_exit();
+#endif  /* _SIMULATION_ */
+
+  /*exit_flag = TRUE;*/
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_config          |
++--------------------------------------------------------------------+
+
+  PURPOSE : Dynamic Configuration
+
+*/
+#if !defined (NCONFIG)
+LOCAL const KW_DATA kwtab[] = {
+                   ALR_CONFIG,            ID_CONFIG,
+                   ALR_MON_COUNT_IDLE,    ID_MON_COUNTER_IDLE,
+                   ALR_MON_COUNT_DEDI,    ID_MON_COUNTER_DEDI,
+                   ALR_TRC_DATA_IND,      ID_TRC_DATA_IND,
+#if defined (_SIMULATION_)
+                   ALR_STD,               ID_STD,
+#endif  /* _SIMULATION_ */
+                   ALR_RACH_FAILURE,      ID_RACH_FAILURE,
+                   ALR_EOTD,              ID_EOTD,
+                   "",                    0
+                  };
+
+UBYTE v_mon_trc_data_ind = 0;
+UBYTE v_cfg_rach_failure = 0;
+#endif
+LOCAL SHORT pei_config (T_PEI_CONFIG inString)
+{
+  SHORT ret = PEI_OK;
+
+#if !defined (NCONFIG)
+  {
+    char    * s = inString;
+    SHORT     valno;
+    SHORT     keyno;
+    char    * keyw;
+    char    * val [10];
+
+    tok_init(s);
+
+    /*
+     * Parse next keyword and number of variables
+     */
+    while ((valno = tok_next(&keyw,val)) NEQ TOK_EOCS)
+    {
+      keyno = tok_key((KW_DATA *)kwtab,keyw);
+      switch (keyno)
+      {
+        case TOK_NOT_FOUND:
+          TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword");
+          ret = PEI_ERROR;
+          break;
+
+        case ID_CONFIG:
+          cst_pei_config (inString, NULL);       /* inform CST task */
+          if (valno EQ 3)
+          {
+            alr_data->mmi         = (UBYTE)atoi (val[0]);
+            alr_data->keypad      = (UBYTE)atoi (val[1]);
+            alr_data->ext_display = (UBYTE)atoi (val[2]);
+          }
+          else
+          {
+            TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
+            ret = PEI_ERROR;
+          }
+          break;
+        case ID_RACH_FAILURE:
+          v_cfg_rach_failure = !v_cfg_rach_failure;
+          TRACE_EVENT_P1("rach failure %d", v_cfg_rach_failure);
+          break;
+#if !defined (NTRACE)
+        case ID_MON_COUNTER_IDLE:
+          if (valno EQ 1)
+            v_mon_counter_idle = (UBYTE)(atoi(val[0]) & 1);
+          break;
+
+        case ID_MON_COUNTER_DEDI:
+          if (valno EQ 1)
+            v_mon_counter_dedi = (UBYTE)(atoi(val[0]) & 1);
+          break;
+#endif  /* !NTRACE */
+
+#if defined (_SIMULATION_)
+        case ID_STD:
+          if (valno EQ 1)
+          {
+            std = (UBYTE)atoi (val[0]);
+            pcm_Init ();
+            {
+              rr_csf_check_rfcap (TRUE);
+            }
+          }
+          else
+          {
+            TRACE_ERROR ("[PEI_CONFIG]: Wrong Number of Parameters");
+            ret = PEI_ERROR;
+          }
+          break;
+#endif  /* _SIMULATION_ */
+
+#if !defined (NTRACE)
+        case ID_TRC_DATA_IND:
+          if (valno EQ 1)
+            v_mon_trc_data_ind = (UBYTE)atoi(val[0]);
+          else
+            v_mon_trc_data_ind = ID_TRC_DATA_IND_INIT2;
+          SYST_TRACE_P((SYST,"[PEI_CONFIG] TRC_DATA_IND %02x", v_mon_trc_data_ind));
+          break;
+#endif  /* !NTRACE */
+        case ID_EOTD:
+          v_eotd = 1;
+          break;
+        default:
+          ret = PEI_ERROR;
+          SYST_TRACE_P((0,0xffff,"[PEI_CONFIG] \"%s\" unknown ID %u", s, keyno));
+          break;
+      }
+    }
+  }
+#endif  /* end !defined (NCONFIG) */
+ return ret;
+}
+
+#if !defined(WIN32)
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : l1_version          |
++--------------------------------------------------------------------+
+
+  PURPOSE : maps the function alr_version
+
+*/
+GLOBAL CHAR* l1_version (void)
+{
+  return alr_version();
+}
+#endif  /* !WIN32 */
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pl_pei_config       |
++--------------------------------------------------------------------+
+
+  PURPOSE : Dynamic Configuration
+
+*/
+GLOBAL SHORT pl_pei_config (char * inString, char * dummy)
+{
+  dummy = 0;
+
+  pei_config (inString);
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_monitor         |
++--------------------------------------------------------------------+
+
+  PURPOSE : Monitoring of physical Parameters
+
+*/
+
+LOCAL SHORT pei_monitor (void ** monitor)
+{
+#if defined (_TMS470)
+  static char buf[60];
+
+  USHORT build, jtag, rev, hw;
+
+  /*
+   * Retrieve hardware info and build from library
+   */
+  hw = 0;
+
+  build = IQ_GetBuild();
+  jtag  = IQ_GetJtagId();
+  rev   = IQ_GetRevision();
+
+  sprintf (buf, "HW=%04x Build=%04X, jtag=%04X, rev=%04X", hw, build,jtag, rev);
+  TRACE_EVENT (buf);
+
+  alr_mon.version = buf;
+#else
+  alr_mon.version = VERSION_ALR;
+#endif  /* _TMS470 */
+
+  *monitor = &alr_mon;
+
+  return PEI_OK;
+}
+
+/*
++--------------------------------------------------------------------+
+| PROJECT : GSM-PS (6103)              MODULE  : ALR_PEI             |
+| STATE   : code                       ROUTINE : pei_create          |
++--------------------------------------------------------------------+
+
+  PURPOSE : Create the Protocol Stack Entity
+
+*/
+GLOBAL SHORT pl_pei_create (T_PEI_INFO **info)
+{
+  static const T_PEI_INFO pei_info =
+  {
+    "PL",
+    {
+      pei_init,
+      pei_exit,
+      pei_primitive,
+      pei_timeout,     /* timer expiry function   */
+      NULL,            /* no signal function */
+      NULL,            /* no run function    */
+      pei_config,
+      pei_monitor
+    },
+#if defined (GPRS)
+    2436,              /* Stacksize          */
+#else
+#if defined (FAX_AND_DATA)
+    1436,              /* Stacksize          */
+#else
+    1066,              /* Stacksize          */
+#endif
+#endif
+    10,                /* Queue entries      */
+    225,               /* Priority           */
+    NUM_OF_ALR_TIMERS, /* number of timers   */
+                       /* flags              */
+#ifdef _TARGET_
+#ifdef GPRS
+    PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|INT_DATA_TASK|PRIM_NO_SUSPEND
+#else
+    PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND
+#endif
+#else
+    PASSIVE_BODY|COPY_BY_REF
+#endif
+
+  };
+
+  TRACE_FUNCTION ("pl_pei_create()");
+
+  /*
+   * close resources if open
+   */
+  if (first_access)
+    first_access = FALSE;
+  else
+    pei_exit ();
+
+  /*
+   * Export startup configuration data
+   */
+  *info = (T_PEI_INFO *)&pei_info;
+
+  return PEI_OK;
+}
+
+#endif