FreeCalypso > hg > fc-magnetite
diff src/g23m-gsm/sms/sms_pei.c @ 104:27a4235405c6
src/g23m-gsm: import from LoCosto source
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 04 Oct 2016 18:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/g23m-gsm/sms/sms_pei.c Tue Oct 04 18:24:05 2016 +0000 @@ -0,0 +1,663 @@ +/* ++----------------------------------------------------------------------------- +| 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 SMS of the mobile station. ++----------------------------------------------------------------------------- +*/ + +#ifndef SMS_PEI_C +#define SMS_PEI_C + +#define ENTITY_SMS + +/*==== INCLUDES ===================================================*/ + +#include <string.h> +#include <stdlib.h> +#include <stddef.h> +#include "typedefs.h" +#include "pcm.h" +#include "vsi.h" +#include "custom.h" +#include "gsm.h" +#include "message.h" +#include "ccdapi.h" +#include "prim.h" +#include "cus_sms.h" +#include "cnf_sms.h" +#include "mon_sms.h" +#include "pei.h" +#include "tok.h" +#include "sms.h" +#include "sms_em.h" + +#ifdef GPRS +#include "gprs.h" +#endif /* #ifdef GPRS */ + +/*==== EXPORT =====================================================*/ +#ifdef TI_PS_HCOMM_CHANGE +#else +GLOBAL T_HANDLE hCommSIM = VSI_ERROR; /* SIM Communication */ +GLOBAL T_HANDLE hCommMMI = VSI_ERROR; /* MMI Communication */ +GLOBAL T_HANDLE hCommMM = VSI_ERROR; /* MM Communication */ +#endif /* TI_PS_HCOMM_CHANGE */ +#ifdef GPRS + GLOBAL T_HANDLE hCommLLC = VSI_ERROR; /* LL Communication */ + GLOBAL T_HANDLE hCommGMM = VSI_ERROR; /* GMM Communication */ +#endif /* #ifdef GPRS */ +GLOBAL T_HANDLE sms_handle; + +GLOBAL T_SMS_DATA sms_data_base; + +/*==== PRIVATE ====================================================*/ + +static void pei_not_supported (void *data); + +/*==== VARIABLES ==================================================*/ +#ifdef _SIMULATION_ +static BOOL first_access = TRUE; +#endif /* _SIMULATION_ */ +static T_MONITOR sms_mon; + +/*==== FUNCTIONS ==================================================*/ + +LOCAL const T_FUNC mnsms_table[] = { + MAK_FUNC_0( tl_mnsms_delete_req, MNSMS_DELETE_REQ ), + MAK_FUNC_0( tl_mnsms_read_req, MNSMS_READ_REQ ), + MAK_FUNC_0( tl_mnsms_store_req, MNSMS_STORE_REQ ), + MAK_FUNC_0( tl_mnsms_submit_req, MNSMS_SUBMIT_REQ ), + MAK_FUNC_0( tl_mnsms_command_req, MNSMS_COMMAND_REQ ), + MAK_FUNC_0( tl_mnsms_configure_req, MNSMS_CONFIGURE_REQ ), + MAK_FUNC_0( tl_mnsms_pause_req, MNSMS_PAUSE_REQ ), + MAK_FUNC_0( tl_mnsms_resume_req, MNSMS_RESUME_REQ ), + MAK_FUNC_0( tl_mnsms_ack_res, MNSMS_ACK_RES ), +#ifdef REL99 + MAK_FUNC_0( tl_mnsms_retrans_req, MNSMS_RETRANS_REQ ), +#else + MAK_FUNC_N( pei_not_supported, 0 ), +#endif + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( tl_mnsms_query_req, MNSMS_QUERY_REQ ) + +#ifdef GPRS + , + MAK_FUNC_0( tl_mnsms_mo_serv_req, MNSMS_MO_SERV_REQ ) +#endif /* #ifdef GPRS */ +#ifdef SIM_PERS_OTA +, + MAK_FUNC_0( tl_mnsms_OTA_message_res, MNSMS_OTA_MESSAGE_RES ) +#endif +}; + +LOCAL const T_FUNC mmsms_table[] = { + MAK_FUNC_S( for_mmsms_data_ind, MMSMS_DATA_IND ), + MAK_FUNC_0( cp_mmsms_error_ind, MMSMS_ERROR_IND ), + MAK_FUNC_0( cp_mmsms_establish_cnf, MMSMS_ESTABLISH_CNF ), + MAK_FUNC_S( for_mmsms_establish_ind, MMSMS_ESTABLISH_IND ), + MAK_FUNC_0( cp_mmsms_release_ind, MMSMS_RELEASE_IND ), + MAK_FUNC_N( pei_not_supported, MMSMS_UNITDATA_IND ) +}; + +LOCAL const T_FUNC sim_table[] = { +#if defined(SIM_TOOLKIT) OR defined(FF_CPHS) + MAK_FUNC_0( tl_sim_read_cnf, SIM_READ_CNF ), +#else + MAK_FUNC_N( pei_not_supported, SIM_READ_CNF ), +#endif /* else, #if defined(SIM_TOOLKIT) OR defined(FF_CPHS) */ + MAK_FUNC_0( tl_sim_update_cnf, SIM_UPDATE_CNF ), + MAK_FUNC_0( tl_sim_read_record_cnf, SIM_READ_RECORD_CNF ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( tl_sim_update_record_cnf, SIM_UPDATE_RECORD_CNF ), + 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, SIM_INCREMENT_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_VERIFY_PIN_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_CHANGE_PIN_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_DISABLE_PIN_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_ENABLE_PIN_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_UNBLOCK_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_AUTHENTICATION_CNF), + MAK_FUNC_N( pei_not_supported, SIM_MMI_INSERT_IND ), + MAK_FUNC_N( pei_not_supported, SIM_MM_INSERT_IND ), + MAK_FUNC_0( tl_sim_remove_ind, SIM_REMOVE_IND ), + MAK_FUNC_N( pei_not_supported, SIM_SYNC_CNF ), + MAK_FUNC_N( pei_not_supported, SIM_ACTIVATE_CNF ), + MAK_FUNC_0( tl_sim_sms_insert_ind, SIM_SMS_INSERT_IND ), +#if defined(SIM_TOOLKIT) AND defined(SAT_SMS_DNL_SUPPORT) + MAK_FUNC_N( pei_not_supported, SIM_TOOLKIT_IND ), + MAK_FUNC_0( tl_sim_toolkit_cnf, SIM_TOOLKIT_CNF ), +#else + MAK_FUNC_N( pei_not_supported, SIM_TOOLKIT_IND ), + MAK_FUNC_N( pei_not_supported, SIM_TOOLKIT_CNF ), +#endif /* else, #if defined(SIM_TOOLKIT) AND defined(SAT_SMS_DNL_SUPPORT) */ + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), +#ifdef SIM_TOOLKIT + MAK_FUNC_0( tl_sim_file_update_ind, SIM_FILE_UPDATE_IND ) +#else + MAK_FUNC_N( pei_not_supported, SIM_FILE_UPDATE_IND ) +#endif /* else, #ifdef SIM_TOOLKIT */ +}; + +#ifdef GPRS +LOCAL const T_FUNC ll_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_N( pei_not_supported, 0 ), + MAK_FUNC_0( for_ll_unitready_ind, LL_UNITREADY_IND ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_N( pei_not_supported, 0 ), + MAK_FUNC_0( for_ll_unitdata_ind, LL_UNITDATA_IND ) +}; + +LOCAL const T_FUNC gmmsms_table[] = { + MAK_FUNC_0( cp_gmmsms_reg_state_cnf, GMMSMS_REG_STATE_CNF ) +}; +#endif /* #ifdef GPRS */ + +#ifdef FF_EM_MODE +LOCAL const T_FUNC em_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_N (pei_not_supported , 0 ), /* 0x09 */ + MAK_FUNC_N (pei_not_supported , 0 ), /* 0x0A */ + MAK_FUNC_N (pei_not_supported , 0 ), /* 0x0B */ + MAK_FUNC_N (pei_not_supported , 0 ), /* 0x0C */ + MAK_FUNC_N (pei_not_supported , 0 ), /* 0x0D */ + MAK_FUNC_N (pei_not_supported , 0 ), /* 0x0E */ + MAK_FUNC_0 (sms_em_sms_event_req, EM_SMS_EVENT_REQ) /* 0x0F */ +}; +#endif /* #ifdef FF_EM_MODE */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_primitive | ++--------------------------------------------------------------------+ + + PURPOSE : Process protocol specific primitive. + +*/ + +LOCAL SHORT pei_primitive (void * ptr) +{ + T_PRIM *prim = ptr; + + /* + * | | | + * MNSMS SIM EM UPLINK + * | | | + * +-----v----------v-----v----+ + * | | + * | SMS | + * | | + * +-------------^-------------+ + * | + * MMSMS/LLC DOWNLINK + * | + * + */ + + TRACE_FUNCTION ("pei_primitive()"); + + if (prim NEQ NULL) + { + ULONG opc = prim->custom.opc; + USHORT n; + const T_FUNC *table; + + VSI_PPM_REC ((T_PRIM_HEADER*)prim, __FILE__, __LINE__); + + PTRACE_IN (opc); + + switch (SAP_NR(opc)) + { + case SAP_NR(MNSMS_UL): table = mnsms_table; n = TAB_SIZE ( mnsms_table); break; + case SAP_NR(MMSMS_DL): table = mmsms_table; n = TAB_SIZE ( mmsms_table); break; + case SAP_NR(SIM_UL): table = sim_table; n = TAB_SIZE ( sim_table); break; +#ifdef GPRS + case LL_DL: table = ll_table; n = TAB_SIZE ( ll_table); break; + case GMMSMS_DL: table = gmmsms_table; n = TAB_SIZE (gmmsms_table); break; +#endif /* #ifdef GPRS */ +#ifdef FF_EM_MODE + case EM_Ul: table = em_table; n = TAB_SIZE (em_table) ; break; +#endif /* #ifdef FF_EM_MODE */ + default : table = NULL; n = 0; break; + } + + if (table != 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; + } + + /* + * 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)); + return PEI_ERROR; + } +#endif /* else, #ifdef GSM_ONLY */ + } + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_not_supported | ++--------------------------------------------------------------------+ + + PURPOSE : An unsupported primitive is received. + +*/ + +static void pei_not_supported (void *data) +{ + TRACE_FUNCTION ("pei_not_supported()"); + + PFREE (data); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_init | ++--------------------------------------------------------------------+ + + PURPOSE : Initialize Protocol Stack Entity + +*/ + +LOCAL SHORT pei_init (T_HANDLE handle) +{ + sms_handle = handle; + + TRACE_FUNCTION ("pei_init()"); + +#ifdef TI_PS_HCOMM_CHANGE + if (!cl_hcom_all_handles_open()) + { + return PEI_ERROR; + } +#else /* for hCommHandles backward compatibility */ + if (hCommMMI < VSI_OK) + { + /* + * Open MMI (Layer 4) + */ + + if ((hCommMMI = vsi_c_open (VSI_CALLER ACI_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommMM < VSI_OK) + { + if ((hCommMM = vsi_c_open (VSI_CALLER MM_NAME)) < VSI_OK) + return PEI_ERROR; + } + + if (hCommSIM < VSI_OK) + { + if ((hCommSIM = vsi_c_open (VSI_CALLER SIM_NAME)) < VSI_OK) + return PEI_ERROR; + } +#endif /* TI_PS_HCOMM_CHANGE */ + #if defined (GPRS) + /* + * Open LLC for GPRS GSMS handling + */ + if (hCommLLC < VSI_OK) + { + if ((hCommLLC = vsi_c_open (VSI_CALLER LLC_NAME)) < VSI_OK) + return PEI_ERROR; + } + /* + * Open GMM for GPRS registration inquiry + */ + if (hCommGMM < VSI_OK) + { + if ((hCommGMM = vsi_c_open (VSI_CALLER GMM_NAME)) < VSI_OK) + return PEI_ERROR; + } + #endif /* GPRS */ + + /* + * Initialize data base + */ + cp_init (); + rl_init (); + tl_init (); + for_init_sms (); + pcm_Init (); + + ccd_init (); + +#ifdef FF_EM_MODE + em_init_sms_event_trace(); +#endif /* #ifdef FF_EM_MODE */ + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_timeout | ++--------------------------------------------------------------------+ + + PURPOSE : Process timeout + +*/ + +LOCAL SHORT pei_timeout (USHORT index) +{ + tim_exec_timeout (index); + return PEI_OK; +} + +#ifdef _SIMULATION_ +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_exit | ++--------------------------------------------------------------------+ + + PURPOSE : Close Resources and terminate + +*/ + +LOCAL SHORT pei_exit (void) +{ + TRACE_FUNCTION ("pei_exit()"); + + /* + * clean up communication + */ +#ifdef TI_PS_HCOMM_CHANGE +#else /* for hCommHandles backward compatibility */ + vsi_c_close (VSI_CALLER hCommMMI); + hCommMMI = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommMM); + hCommMM = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommSIM); + hCommSIM = VSI_ERROR; +#endif /* TI_PS_HCOMM_CHANGE */ +#ifdef GPRS + vsi_c_close (VSI_CALLER hCommLLC); + hCommLLC = VSI_ERROR; + + vsi_c_close (VSI_CALLER hCommGMM); + hCommGMM = VSI_ERROR; +#endif /* #ifdef GPRS */ + + return PEI_OK; +} +#endif /* _SIMULATION_ */ + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_config | ++--------------------------------------------------------------------+ + + PURPOSE : Dynamic Configuration + +*/ + +#ifndef NCONFIG +LOCAL const KW_DATA kwtab[] = { + SMS_CONF_STRING_PAUSE, SMS_CONF_EVENT_PAUSE, + SMS_CONF_STRING_RESUME, SMS_CONF_EVENT_RESUME, + "", 0 + }; +#endif /* #ifndef NCONFIG */ + +#if !defined(NTRACE) && !defined(NCONFIG) +GLOBAL const KW_DATA partab[] = { + TC1M_NAME, TC1M, + TR1M_NAME, TR1M, + TR2M_NAME, TR2M, + TRAM_NAME, TRAM, + TLCT_NAME, TLCT, + TMMS_NAME, TMMS, + "", 0 + }; +#endif /* #if !defined(NTRACE) && !defined(NCONFIG) */ + +/* Implements Measure#36 */ +#ifndef NCONFIG +LOCAL SHORT pei_config (T_PEI_CONFIG inString) +{ +#ifndef NCONFIG + char * s = inString; + char * keyw; + char * val [10]; + + GET_INSTANCE_DATA; + + TRACE_FUNCTION ("pei_config()"); + + TRACE_FUNCTION (s); + + tok_init(s); + + /* + * Parse next keyword and number of variables + */ + while ((tok_next(&keyw,val)) NEQ TOK_EOCS) + { + switch ((tok_key((KW_DATA *)kwtab,keyw))) + { + case TOK_NOT_FOUND: + TRACE_ERROR ("[PEI_CONFIG]: Illegal Keyword"); + break; + + case SMS_CONF_EVENT_PAUSE: + TRACE_EVENT("SMS_CONF_EVENT_PAUSE"); + tl_pause(); + break; + case SMS_CONF_EVENT_RESUME: + TRACE_EVENT("SMS_CONF_EVENT_RESUME"); + /* tl_resume(sms_data); */ + + GET_MO_INSTANCE(sms_data); + /* + * TL state transition TL_ESTABLISH + * EST state transition EST_SMMA + * MMI state transition MMI_RESUME + * + */ + SET_STATE (STATE_MMI, MMI_RESUME); + SET_STATE (STATE_EST, EST_SMMA); + SMS_INST_SET_STATE (STATE_TL, TL_ESTABLISH); + /* + * 1st shot + */ + SMS_INST.retrans = FALSE; + /* + * establish connection + */ + tl_establish_connection(FALSE); + break; + default: + break; + } + } +#endif /* #ifndef NCONFIG */ + + return PEI_OK; +} +#endif /* NCONFIG */ + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : SMS_PEI | +| STATE : code ROUTINE : sms_pei_config | ++--------------------------------------------------------------------+ + + PURPOSE : Dynamic Configuration + +*/ +/* Implements Measure#36 */ +#ifndef NCONFIG +GLOBAL SHORT sms_pei_config ( char * inString, char * dummy ) +{ + pei_config ( inString ); + + return PEI_OK; +} +#endif /* NCONFIG */ + + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_monitor | ++--------------------------------------------------------------------+ + + PURPOSE : Monitoring of physical Parameters + +*/ + +LOCAL SHORT pei_monitor (void ** monitor) +{ + TRACE_FUNCTION ("pei_monitor()"); + +/* Implements Measure#32: Row 20 */ + + * monitor = &sms_mon; + + return PEI_OK; +} + +/* ++--------------------------------------------------------------------+ +| PROJECT : GSM-PS (8410) MODULE : SMS_PEI | +| STATE : code ROUTINE : pei_create | ++--------------------------------------------------------------------+ + + PURPOSE : Create the Protocol Stack Entity + +*/ + +GLOBAL SHORT sms_pei_create (T_PEI_INFO **info) +{ + static const T_PEI_INFO pei_info = + { + "SMS", + { + pei_init, +#ifdef _SIMULATION_ + pei_exit, +#else + NULL, +#endif + pei_primitive, + pei_timeout, + NULL, /* no signal function */ + NULL, /* no run function */ +/* Implements Measure#36 */ +#ifdef NCONFIG + NULL, /* no pei_config function */ +#else /* not NCONFIG */ + pei_config, +#endif /* NCONFIG */ + pei_monitor, + }, + #if defined (GPRS) + 1792, /* Stack Size */ + #else + #if defined (FAX_AND_DATA) + 1792, /* Stack Size */ + #else + 1500, /* Stacksize */ + #endif + #endif + 10, /* Queue Entries */ + 135, /* Priority */ + MAX_SMS_TIMER*MAX_SMS_CALLS, /* number of timer */ + 0x03|PRIM_NO_SUSPEND /* flags */ + }; + + TRACE_FUNCTION ("pei_create()"); + + /* + * Close Resources if open + */ + +#ifdef _SIMULATION_ + if (first_access) + first_access = FALSE; + else + pei_exit (); +#endif + + /* + * Export startup configuration data + */ + + *info = (T_PEI_INFO *)&pei_info; + + return PEI_OK; +} + +#endif /* #ifndef SMS_PEI_C */