FreeCalypso > hg > fc-magnetite
view src/aci2/aci/ati_src_lc.c @ 478:5e39123540e6
hybrid fw: Openmoko-mimicking AT@BAND command implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 14 Jun 2018 06:04:54 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : ATI_SRC_LC +----------------------------------------------------------------------------- | 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 : +----------------------------------------------------------------------------- */ #if defined FF_EOTD #ifndef ATI_SRC_LC_C #define ATI_SRC_LC_C #endif #if defined (SMI) #define ENTITY_SMI #elif defined (MFW) #define ENTITY_MFW #else #define ENTITY_ACI #endif #define ACI_MEMBER /*==== INCLUDES ===================================================*/ #if 0 #include <string.h> #include <stdlib.h> #include <stdio.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_aci.h" #include "mon_aci.h" #include "pei.h" #include "tok.h" #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "aci_lst.h" #include "dti_conn_mng.h" #include "psa_uart.h" #include "cmh_uart.h" #include "aci_io.h" #include "aci_mem.h" #include "aci.h" #include "ati_io.h" #include "ati_src_lc.h" #include "cmh_lc.h" #endif #include "aci_all.h" #include "aci_cmh.h" #include "ati_cmd.h" #include "aci_cmd.h" #include "dti.h" /* functionality of the dti library */ #include "aci_lst.h" #include "dti_conn_mng.h" #ifdef UART #include "psa_uart.h" #include "cmh_uart.h" #endif #include "aci_io.h" #include "aci_mem.h" #include "aci.h" #include "ati_io.h" #include "ati_int.h" #include "cmh_lc.h" #include "ati_src_lc.h" /*==== CONSTANTS ==================================================*/ /*==== TYPES ======================================================*/ /*==== EXPORT =====================================================*/ EXTERN CHAR *parse(CHAR *b,CHAR *f, ...); EXTERN T_ACI_LIST *ati_src_list; /*==== VARIABLES ==================================================*/ LOCAL BOOL CLPS_flag = FALSE; /*==== FUNCTIONS ==================================================*/ GLOBAL void ati_src_lc_result_cb (UBYTE src_id, T_ATI_OUTPUT_TYPE output_type, UBYTE *output, USHORT output_len) { T_ATI_SRC_PARAMS *src_params = 0; T_LOC_SERV_PARA *p_lsprm = 0; char orig_addr[MAX_SMS_ADDR_DIG]; /* SMS originating address */ char mlc_source_addr[MAX_SMS_ADDR_DIG]; /* Mobile Location Center source address */ UBYTE *pos_data = 0; T_ACI_SM_DATA sms_data; UBYTE sms_buf[30]; static U8 sms_cnt = 0; TRACE_FUNCTION ("ati_src_lc_result_cb ()"); memset (orig_addr, 0, sizeof(orig_addr)); memset (mlc_source_addr, 0, sizeof(mlc_source_addr)); p_lsprm = &locServPrm; /* search for LC source Id */ src_params = find_element (ati_src_list, src_id, search_ati_src_id); if (src_params EQ NULL) { TRACE_EVENT ("[ERR] source ID not found"); return; } else if( src_params->src_type NEQ ATI_SRC_TYPE_LC) { TRACE_EVENT ("[ERR] source ID is not from type LC"); return; } /* check length of delivered string */ if( output_len EQ 0 ) return; /* * check client id ??? * */ /* check E-OTD flag */ if(location_service_flag EQ TRUE) { if(!strncmp((char *)output,"+CMT: ",6)) { /* look for MLC source address in LC paramters */ if (qAT_PlusCLSA(p_lsprm->lc_src_id,mlc_source_addr,NULL) EQ AT_CMPL) {/* compare stored MLC source address with SMS originated address */ if(!strcmp(lc_orig_addr.address,mlc_source_addr)) { /* immediately position data request */ if(sAT_PlusCLPS(p_lsprm->lc_src_id,CLPS_LCS_ACT,lc_orig_addr.address,IMM_POS_DATA_REQ) NEQ AT_EXCT) { TRACE_EVENT ("[ERR] position data request failed"); } else { src_params->curAtCmd = AT_CMD_CLPS; } } } } else { /* CLPS indicates LC position data */ if(strstr((char *)output,"%CLPS:") NEQ NULL) { memset(&sms_data.data,0,MAX_SM_LEN); memcpy(&sms_data.data,&aci_lc_data.position_data,aci_lc_data.pos_data_length); sms_data.len = aci_lc_data.pos_data_length; strncpy((char *)sms_buf, (char *)&sms_data.data, 28); sms_buf[28] = 0; TRACE_EVENT_P1("SMS before send:%s...", sms_buf); TRACE_EVENT_P2("*** #%d SMS to %s", sms_cnt++, p_lsprm->mlcdest.address); sAT_PlusCSMP (p_lsprm->lc_src_id, TP_MTI_SMS_SUBMIT | TP_VPF_RELATIVE, 0xA7/*TP_VP_RELATIVE_DEFAULT*/, NULL, NULL, SMS_PID_DEFAULT, 0xF4); #if 0 GLOBAL T_ACI_RETURN sAT_PlusCSMP ( T_ACI_CMD_SRC srcId, SHORT fo, SHORT vprel, T_ACI_VP_ABS* vpabs, SHORT pid, SHORT dcs ) #endif if (sAT_PlusCMGF (p_lsprm->lc_src_id, CMGF_MOD_Txt) NEQ AT_CMPL) { TRACE_ERROR("ati_src_lc_result_cb():[ERR] invalid return for sAT_PlusCMGF"); } if (sAT_PlusCMGS_Gl (p_lsprm->lc_src_id, p_lsprm->mlcdest.address, &p_lsprm->mlcdest.toa, &sms_data, NULL, NULL, NULL, -1, NULL, NULL) NEQ AT_EXCT) { TRACE_ERROR ("[ERR] sms position data failed"); } else { src_params->curAtCmd = AT_CMD_CMGS; } } } } /* E-OTD */ return; } GLOBAL void ati_src_lc_line_state_cb (UBYTE src_id, T_ATI_LINE_STATE_TYPE line_state_type, ULONG line_state_param) { char trcBuf[80]; TRACE_FUNCTION ("ati_src_lc_line_state_cb ()"); switch (line_state_type) { case ATI_LINE_STATE_OUTPUT_TYPE: sprintf (trcBuf, "[DBG] ati_src_tst_line_state_cb (): "\ "ATI_LINE_STATE_OUTPUT_TYPE = %d", line_state_param); TRACE_EVENT (trcBuf); break; default: sprintf (trcBuf, "[WRN] ati_src_tst_line_state_cb (): "\ "UNKNOWN line_state_type = %d", line_state_type); TRACE_EVENT (trcBuf); break; } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : ati_src_lc | | ROUTINE : ati_src_lc_init | +-------------------------------------------------------------------+ PURPOSE : register the location service source */ GLOBAL void ati_src_lc_init ( UBYTE cmd_src ) { T_LOC_SERV_PARA *lc_para = 0; TRACE_FUNCTION ("ati_src_lc_init ()"); lc_para = &locServPrm; /* initialize LC parameters */ /* register the location service source */ lc_para->lc_src_id = ati_init (ATI_SRC_TYPE_LC, ati_src_lc_result_cb, ati_src_lc_line_state_cb); lclist_init(); TRACE_EVENT_P1 ("ati_src_lc_init: srcId=%d", lc_para->lc_src_id); } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : ati_src_lc | | ROUTINE : ati_src_lc_finit | +-------------------------------------------------------------------+ PURPOSE : deregister the location service source */ GLOBAL void ati_src_lc_finit (void) { TRACE_FUNCTION ("ati_src_lc_finit ()"); ati_finit (locServPrm.lc_src_id); } #endif /* FF_EOTD */