FreeCalypso > hg > freecalypso-sw
diff gsm-fw/g23m-aci/aci/psa_uarts.c @ 775:eedbf248bac0
gsm-fw/g23m-aci subtree: initial import from LoCosto source
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 12 Oct 2014 01:45:14 +0000 |
parents | |
children | d988f0f6aeb9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gsm-fw/g23m-aci/aci/psa_uarts.c Sun Oct 12 01:45:14 2014 +0000 @@ -0,0 +1,485 @@ +/* ++----------------------------------------------------------------------------- +| Project : GSM-PS (6147) +| Modul : PSA_UARTP ++----------------------------------------------------------------------------- +| 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 defines the processing functions for the +| primitives sent to the protocol stack adapter by the DTI +| interface. ++----------------------------------------------------------------------------- +*/ +#ifdef UART + +#ifndef PSA_UARTS_C +#define PSA_UARTS_C +#endif + +#include "aci_all.h" + +/*==== INCLUDES ===================================================*/ +#include "aci_cmh.h" +#include "ati_cmd.h" +#include "aci_cmd.h" +#include "dti.h" /* functionality of the dti library */ + +#include "aci.h" +#include "aci_lst.h" +#include "dti_conn_mng.h" +#include "dti_cntrl_mng.h" +#include "psa_uart.h" +#include "cmh_uart.h" + +#include "aci_mem.h" + +#include "aci_io.h" + +#include "sap_dti.h" + + +/*==== CONSTANTS ==================================================*/ + + +/*==== TYPES ======================================================*/ + + +/*==== EXPORT =====================================================*/ + +/*==== VARIABLES ==================================================*/ + + +/*==== FUNCTIONS ==================================================*/ + +LOCAL USHORT get_desc_size (T_desc2 *data) +{ + USHORT size = 0; + T_desc2 *next_data; + + next_data = data; + while (next_data NEQ NULL) + { + size += next_data->len; + next_data = (T_desc2*)next_data->next; + } + + return (size); +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psa_dti_data_req | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ +GLOBAL void psaDTI_data_req ( + T_desc2 *data, + T_ACI_DTI_PRC *src_infos, + T_DTI_ENTITY_ID peer_id + ) +{ + USHORT data_len = 0; + + TRACE_FUNCTION("psaDTI_data_req"); + + { + PALLOC_DESC2(dti_data_ind, DTI2_DATA_IND); + + data_len = get_desc_size (data); + + dti_data_ind->desc_list2.list_len = data_len; + dti_data_ind->desc_list2.first = (ULONG)data; + + dti_data_ind->parameters.p_id = 0; /*dummy_ubyte; */ + + if (BITFIELD_CHECK (src_infos->data_cntr, UART_DTI_FLOW_OFF)) + dti_data_ind->parameters.st_lines.st_flow = DTI_FLOW_OFF; + else + dti_data_ind->parameters.st_lines.st_flow = DTI_FLOW_ON; + + if (BITFIELD_CHECK (src_infos->data_cntr, UART_DTI_SB_BIT)) + { + TRACE_EVENT("SB is ON"); + dti_data_ind->parameters.st_lines.st_line_sb = DTI_SB_ON; + } + else + { + TRACE_EVENT("SB is OFF"); + dti_data_ind->parameters.st_lines.st_line_sb = DTI_SB_OFF; + } + + dti_data_ind->parameters.st_lines.st_line_sa = DTI_SA_ON; + dti_data_ind->parameters.st_lines.st_break_len = DTI_BREAK_OFF; + +#ifdef DTI + dti_send_data + ( + aci_hDTI, + src_infos->srcId, + (UBYTE)peer_id, + ACI_DTI_DN_CHANNEL, + dti_data_ind + ); +#endif + } +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psa_dti_getdata_req | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaDTI_getdata( UBYTE src_id, T_DTI_ENTITY_ID peer_id) +{ + T_ACI_DTI_PRC *src_infos = NULL; + + TRACE_FUNCTION("psaDTI_getdata"); + + src_infos = find_element (uart_src_params, src_id, cmhUARTtest_srcId); + if (src_infos EQ NULL) + { + TRACE_EVENT_P1("[ERR] psaDTI_getdata: link_id=%d not found", src_id) ; + return ; + } + + if( src_infos->RecState NEQ RECEIVING) + { + src_infos->RecState = READY_REC; + } + +#ifdef DTI + { + dti_start + ( + aci_hDTI, + src_id, + (UBYTE)peer_id, + ACI_DTI_DN_CHANNEL + ); + } +#endif /* DTI */ +} +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psaUART_DCDreq | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_DCDreq( UBYTE c_Id, UBYTE line_state ) +{ + T_ACI_DTI_PRC *cmd = NULL; + + TRACE_FUNCTION("psaUART_DCDreq"); + + cmd = find_element (uart_src_params, c_Id, cmhUARTtest_srcId); + if (cmd EQ NULL) + { + TRACE_EVENT_P1("[ERR] psaUART_DCDreq: c_Id=%d not found", c_Id) ; + return ; + } + + { + PALLOC( uart_dcd_req, UART_DCD_REQ); + + uart_dcd_req -> device = cmd->device; + uart_dcd_req -> dlci = cmd->dlci; + if( line_state EQ IO_DCD_ON ) + { + uart_dcd_req -> line_state = UART_LINE_ON; + } + else if ( line_state EQ IO_DCD_OFF ) + { + uart_dcd_req -> line_state = UART_LINE_OFF; + } + + PSENDX( UART, uart_dcd_req ); + } +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psaUART_ESCAPEreq | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_ESCAPEreq( UBYTE c_Id, UBYTE detection ) +{ + T_ACI_DTI_PRC *cmd = NULL; + + TRACE_FUNCTION("psaUART_ESCAPEreq"); + + cmd = find_element (uart_src_params, c_Id, cmhUARTtest_srcId); + if (cmd EQ NULL) + { + TRACE_EVENT_P1("[ERR] psaUART_ESCAPEreq: c_Id=%d not found", c_Id) ; + return ; + } + + { + PALLOC( uart_escape_req, UART_ESCAPE_REQ); + + uart_escape_req -> device = cmd->device; + uart_escape_req -> dlci = cmd->dlci; + uart_escape_req -> detection = detection; + + PSENDX( UART, uart_escape_req ); + } +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psaUART_RINGreq | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_RINGreq( UBYTE c_Id, UBYTE line_state ) +{ + T_ACI_DTI_PRC *cmd = NULL; + + TRACE_FUNCTION("psaUART_RINGreq"); + + cmd = find_element (uart_src_params, c_Id, cmhUARTtest_srcId); + if (cmd EQ NULL) + { + TRACE_EVENT_P1("[ERR] psaUART_RINGreq: c_Id=%d not found", c_Id) ; + return ; + } + + if (BITFIELD_CHECK (cmd->data_cntr, UART_RING_RUNNING)) + { + TRACE_EVENT_P2 ("[WRN] psaUART_RINGreq(): no CNF for previous REQ (device: %d; dlci=%d)", + cmd->device, cmd->dlci); + return; + } + + /* + store that UART_RING_REQ was send + this is important so that the primitive queue in the UART entity not + overloaded if no PC is connected + */ + BITFIELD_SET (cmd->data_cntr, UART_RING_RUNNING); + + { + PALLOC( uart_ring_req, UART_RING_REQ); + + uart_ring_req -> device = cmd->device; + uart_ring_req -> dlci = cmd->dlci; + if( line_state EQ IO_RING_ON) + { + uart_ring_req -> line_state = UART_LINE_ON; + } + else if( line_state EQ IO_RING_OFF ) + { + uart_ring_req -> line_state = UART_LINE_OFF; + } + + PSENDX( UART, uart_ring_req ); + } +} + +#ifdef DTI +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_IPA | +| ROUTINE : psaUART_SetDTIReq | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ +GLOBAL void psaUART_SetDTIReq( T_DTI_CONN_LINK_ID link_id, T_DTI_ENTITY_ID conn_peer_Id ) +{ + T_ACI_DTI_PRC *cmd = NULL; + CHAR *p_ent_name; + T_DTI_CNTRL info; + +/* for tracing of establishing of CMD channels for dual port version */ +#ifdef RMV_15_04_03 + extern CHAR gob_tst_buf[]; +#endif + + PALLOC( uart_dti_req, UART_DTI_REQ); + + TRACE_FUNCTION("psaUART_SetDTIReq"); + + if (dti_cntrl_get_info_from_dti_id( EXTRACT_DTI_ID(link_id), &info) EQ FALSE) + { + TRACE_EVENT_P1("cannot find info for dti_id=%d", EXTRACT_DTI_ID(link_id)); + return; + } + + cmd = find_element (uart_src_params, info.src_id, cmhUARTtest_srcId); + if (cmd EQ NULL) + { + TRACE_EVENT_P1("[ERR] psaUART_SetDTIReq: srcId=%d not found", info.src_id) ; + return; + } + + if (dti_cntrl_set_conn_parms(link_id, DTI_ENTITY_UART, cmd->device, cmd->dlci) EQ FALSE) + { + return; + } + + uart_dti_req -> dti_conn = UART_CONNECT_DTI; + uart_dti_req -> device = cmd->device; + uart_dti_req -> dlci = cmd->dlci; + uart_dti_req -> direction = DTI_CHANNEL_TO_HIGHER_LAYER; + uart_dti_req -> link_id = link_id; + + + switch( conn_peer_Id ) + { + case( DTI_ENTITY_ACI ): + p_ent_name = &ACI_NAME[0]; + break; + case( DTI_ENTITY_L2R ): + p_ent_name = &L2R_NAME[0]; + break; + case( DTI_ENTITY_TRA ): + p_ent_name = &TRA_NAME[0]; + break; + case( DTI_ENTITY_T30 ): + p_ent_name = &T30_NAME[0]; + break; +#ifdef FF_TRACE_OVER_MTST + case( DTI_ENTITY_MTST): + p_ent_name = &MTST_NAME[0]; + break; +#endif /* FF_TRACE_OVER_MTST */ +#ifdef GPRS + case( DTI_ENTITY_PPPS ): + p_ent_name = &PPP_NAME[0]; + break; +#endif /* GPRS */ + + default: + TRACE_EVENT("unknown conn_peer_Id: UART_DTI_REQ not sent"); + PFREE(uart_dti_req); + return; + } + +#ifdef GPRS +#ifdef _SIMULATION_ + p_ent_name = (CHAR *) 0xfe1234ef; +#endif /* _SIMULATION_ */ +#endif /* GPRS */ + +/* for tracing of establishing of CMD channels for dual port version */ +#ifdef RMV_15_04_03 + sprintf(gob_tst_buf+strlen(gob_tst_buf), "usr:"); + sprintf(gob_tst_buf+strlen(gob_tst_buf), "%x,%x,%s ",cmd->device, link_id, p_ent_name); +#endif + + uart_dti_req->entity_name = (ULONG)p_ent_name; + PSENDX( UART, uart_dti_req ); +} +#endif +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_UART | +| ROUTINE : psaUART_StartMux | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_StartMux( UBYTE device, + UBYTE mode, + UBYTE frame_type, + USHORT N1, + UBYTE T1, + UBYTE N2, + UBYTE T2, + UBYTE T3 ) +{ + PALLOC(uart_mux_start_req, UART_MUX_START_REQ); + + uart_mux_start_req -> device = device; + + uart_mux_start_req -> mode = mode; + uart_mux_start_req -> frame_type = frame_type; + + uart_mux_start_req -> n1 = N1; + uart_mux_start_req -> t1 = T1; + uart_mux_start_req -> n2 = N2; + uart_mux_start_req -> t2 = T2; + uart_mux_start_req -> t3 = T3; + + PSENDX( UART, uart_mux_start_req ); +} + +/* ++-------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_UART | +| ROUTINE : psaUART_MuxRes | ++-------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_MuxRes( UBYTE device, + UBYTE dlci, + USHORT N1 ) +{ + PALLOC(uart_mux_dlc_establish_res, UART_MUX_DLC_ESTABLISH_RES); + + uart_mux_dlc_establish_res -> device = device; + uart_mux_dlc_establish_res -> dlci = dlci; + uart_mux_dlc_establish_res -> n1 = N1; + + PSENDX( UART, uart_mux_dlc_establish_res ); +} + +/* ++------------------------------------------------------------------------+ +| PROJECT : GSM-PS (6147) MODULE : PSA_UART | +| ROUTINE : psaUART_SetParameters | ++------------------------------------------------------------------------+ + + PURPOSE : + +*/ + +GLOBAL void psaUART_SetParameters( UBYTE device, T_comPar *comPar ) +{ + PALLOC(uart_parameters_req, UART_PARAMETERS_REQ); + + uart_parameters_req->device = device; + + uart_parameters_req->comPar = *comPar; + + PSENDX( UART, uart_parameters_req ); +} + +#endif /* UART */