⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smi_pei.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/* 
+----------------------------------------------------------------------------- 
|  Project :  GSM-F&D (8411)
|  Modul   :  SMI_PEI
+----------------------------------------------------------------------------- 
|  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 Modul defines the process body interface
|             for the slim man machine interface
+----------------------------------------------------------------------------- 
*/ 

#ifndef SMI_PEI_C
#define SMI_PEI_C

#define ENTITY_SMI

/*==== INCLUDES ===================================================*/
#include <stdlib.h>
#include <string.h>
#include "typedefs.h"
#include "vsi.h"
#include "custom.h"
#include "gsm.h"
#include "prim.h"
#include "pei.h"
#include "tok.h"
#include "message.h"

#include "aci_cmh.h"
#include "ksd.h"
#include "aca.h"
#include "smi.h"
#include "cnf_smi.h"

#include "gdi.h"
#include "kbd.h"
#include "pwr.h"
#include "light.h"
#include "audio.h"
#include "dspl.h"

/*==== CONSTANTS ==================================================*/

/*==== EXPORT =====================================================*/

GLOBAL T_MMI_DATA mmi_data_base [SMI_INSTANCES], *mmi_data;

/*==== PRIVATE ====================================================*/
LOCAL const void pei_not_supported (void *data);
/*==== TYPES ======================================================*/

/*==== VARIABLES ==================================================*/

LOCAL T_MONITOR smi_mon;

LOCAL USHORT    t_flag = 0;

LOCAL CHAR*     atRedirect[] = { "D", NULL };

/*==== FUNCTIONS ==================================================*/
/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)             MODULE  : SMI_PEI             |
| STATE   : code                       ROUTINE : _pei_not_supported  |
+--------------------------------------------------------------------+

  PURPOSE : An unsupported primitive is received.
*/
LOCAL const void _pei_not_supported (void *data)
{
  TRACE_FUNCTION ("pei_not_supported()");

  PFREE (data);
}



/*
 * jumptable for the entity service access point. Contains
 * the processing-function addresses and opcodes of
 * confirmation and indication primitives.
 *
 */
#ifdef BT_ADAPTER
LOCAL const T_FUNC btp_g_table[] = {
  MAK_FUNC_0( bt_init_profile_cnf       ,       BTP_INIT_PROFILE_CNF      ),
  MAK_FUNC_0( bt_deinit_profile_cnf       ,       BTP_DEINIT_PROFILE_CNF      ),
  MAK_FUNC_N( pei_not_supported         ,       0               ),
  MAK_FUNC_0( bt_device_search_cnf        ,       BTP_DEVICE_SEARCH_CNF     ),
  MAK_FUNC_0( bt_device_found_ind       ,       BTP_DEVICE_FOUND_IND      ),
  MAK_FUNC_0( bt_connect_device_cnf       ,       BTP_CONNECT_DEVICE_CNF      ),
  MAK_FUNC_0( bt_connect_device_ind       ,       BTP_CONNECT_DEVICE_IND      ),
  MAK_FUNC_0( bt_disconnect_device_cnf      ,   BTP_DISCONNECT_DEVICE_CNF   ),
  MAK_FUNC_0( bt_disconnect_device_ind      ,       BTP_DISCONNECT_DEVICE_IND   ),
  MAK_FUNC_0( bt_audio_connection_ind     ,       BTP_AUDIO_CONNECTION_IND    ),
  MAK_FUNC_0( bt_transfer_audio_in_cnf      ,       BTP_TRANSFER_AUDIO_IN_CNF   ),
  MAK_FUNC_0( bt_transfer_audio_out_cnf     ,   BTP_TRANSFER_AUDIO_OUT_CNF    ),
  MAK_FUNC_0( bt_pin_ind            ,       BTP_PIN_IND           ),
  MAK_FUNC_0( bt_reconfig_profile_cnf     ,   BTP_RECONFIG_PROFILE_CNF    )
};
#endif /* BT_ADAPTER */


/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)              MODULE  : SMI_PEI            |
| STATE   : code                        ROUTINE : _pei_init          |
+--------------------------------------------------------------------+

  PURPOSE : Initialize Protocol Stack Entity
*/
GLOBAL T_PEI_RETURN _pei_init ( void )
{
  TRACE_FUNCTION ("_pei_init()")

  /*
   * initialize driver
   */
  kbd_Init(kbd_callback);
  pwr_Init(pwr_callback);
  light_Init ();
  audio_Init (NULL);
  dspl_Init ();

  mmi_data             = &mmi_data_base[0];
  ui_init  ();
  aca_init (TRUE);

  smi_init_timer ();

  return PEI_OK;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)               MODULE  : SMI_PEI           |
| STATE   : code                         ROUTINE : _pei_primitive    |
+--------------------------------------------------------------------+

  PURPOSE : Process protocol specific primitive.
*/
GLOBAL T_PEI_RETURN _pei_primitive (T_PRIM *prim)
{
  /*
   *
   *                           ACI                      UPLINK
   *                            |
   *   +------------------------v-----------------------+
   *   |                                                |
   *   |                       ACI                      |
   *   |                                                |
   *   +-----^----^-----^----^----^----^---^---^---^----+
   *         |    |     |    |    |    |   |   |   |
   *        SIM MMREG MNCC MNSS MNSMS MMI T30 L2R  RA   DOWNLINK
   *         |    |     |    |    |    |   |   |   |
   *
   */

/*  TRACE_FUNCTION ("_pei_primitive()"); */

  if (prim NEQ NULL)
  {
    USHORT           opc = (USHORT)prim->custom.opc;
    USHORT           n;
    const T_FUNC    *table;

    PTRACE_IN (opc);

    mmi_data = GET_INSTANCE (prim);

    switch (opc & OPC_MASK)
    {
#ifdef BT_ADAPTER
     case BTP_G:
       table =  btp_g_table; n = TAB_SIZE (btp_g_table); break;
#endif /* BT_ADAPTER */
   default: table = NULL; n = 0; break;
    }

    if (table != NULL )
    {
      if ((opc & PRM_MASK) < n)
      {
        table += opc & PRM_MASK;
#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;
    }
    /*
     * Primitive is no GSM Primitive
     * then forward to the environment
     */

#ifdef GSM_ONLY
    PFREE (P2D(prim))

    return PEI_ERROR;
#else
    if (opc & SYS_MASK)
      vsi_c_primitive (VSI_CALLER prim);
    else
    {
      /* PFREE (P2D(prim)); */   /* Primitive would be freed twice, once here and once again by caller
                                    if this function terminates with PEI_ERROR                         */
      return PEI_ERROR;
    }
#endif
  }

  return PEI_OK;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)              MODULE  : SMI_PEI            |
| STATE   : code                        ROUTINE : _pei_exit          |
+--------------------------------------------------------------------+

  PURPOSE : Close Resources and terminate
*/
GLOBAL T_PEI_RETURN _pei_exit (void)
{
  TRACE_FUNCTION ("_pei_exit()")

  smi_exit_timer ();

  return PEI_OK;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-F&D (8411)              MODULE  : SMI_PEI            |
| STATE   : code                        ROUTINE : _pei_config        |
+--------------------------------------------------------------------+

  PURPOSE : Dynamic Configuration
*/
#if !defined (NCONFIG)
LOCAL KW_DATA kwtab[] = {
                   SMI_KEY_SEQUENCE,     KEY_SEQUENCE,
                   SMI_START_SS,         START_SS,
#ifdef BT_ADAPTER
                   SMI_BT_PRIM,          BT_PRIM,
#endif /* BT_ADAPTER */
                   SMI_EXT_TEST_ENABLE,  EXT_TEST_ENABLE,
                   "",                   0
                  };

GLOBAL KW_DATA _partab[] = {
                   "",                 0
                  };
#endif

static const UBYTE facility[] =
{
    0xA1, 0x17, 0x02, 0x01, 0x00, 0x02, 0x01, 0x0A,
    0x30, 0x0F, 0x04, 0x01, 0x2A, 0x83, 0x01, 0x10, 0x84,
    0x04, 0x91, 0x34, 0x21, 0x43, 0x85, 0x01, 0x05
};

#if defined (WIN32) && defined (BT_ADAPTER)
LOCAL T_BTP_INIT_PROFILE_CNF*   btp_init_profile_cnf;
LOCAL T_BTP_DEINIT_PROFILE_CNF* btp_deinit_profile_cnf;
LOCAL T_BTP_DEVICE_SEARCH_CNF*  btp_device_search_cnf;
LOCAL T_BTP_DEVICE_FOUND_IND*   btp_device_found_ind;
LOCAL T_BTP_CONNECT_DEVICE_CNF* btp_connect_device_cnf;
LOCAL T_BTP_DISCONNECT_DEVICE_CNF*  btp_disconnect_device_cnf;
LOCAL T_BTP_DISCONNECT_DEVICE_IND*  btp_disconnect_device_ind;

LOCAL char   prim_name[100];
LOCAL UBYTE  prim_data[MAX_PSTRUCT_LEN_BTP];
LOCAL USHORT prim_idx;

LOCAL UBYTE bt_atoi ( char data )
{
  if ( data >= '0' AND data <= '9')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -