FreeCalypso > hg > fc-magnetite
view src/aci2/aci/cmh_uartr.c @ 680:ee3ac8c617cb
armio.c: set GPIO2 output high initially
On TI-canonical platforms GPIO2 is DCD modem control output. In TI's
original code the AI_InitIOConfig() function called from Init_Target()
would configure GPIO2 as an output and set the initial output value to
low, but then the init code in uartfax.c called from Init_Serial_Flows()
would immediately change it to high, corresponding to DCD not asserted.
The result is a momentary asserted-state glitch on the DCD output.
The present change eliminates this glitch, setting DCD output to
not-asserted initially like it should be.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 25 Jun 2020 03:17:43 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : CMH_UARTR +----------------------------------------------------------------------------- | 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 : +----------------------------------------------------------------------------- */ #ifdef UART #ifndef CMH_UARTR_C #define CMH_UARTR_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 "dti_conn_mng.h" #include "dti_cntrl_mng.h" #include "aci_io.h" #include "psa_uart.h" #include "aci_lst.h" #include "cmh_uart.h" #include "psa.h" #ifdef FAX_AND_DATA #include "aci_fd.h" #endif #include "cmh.h" #include "aci_mem.h" #include "psa_l2r.h" EXTERN T_ACI_UART_MUX_PARMS holdMuxParms; /*==== CONSTANTS ==================================================*/ /*==== EXPORT =====================================================*/ /*==== VARIABLES ==================================================*/ /*==== FUNCTIONS ==================================================*/ /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : PSA_UART | | ROUTINE : cmhUART_ParmsUpdated | +-------------------------------------------------------------------+ PURPOSE : . */ GLOBAL void cmhUART_ParmsUpdated( UBYTE device ) { T_ACI_LIST *elem = NULL; T_ACI_DTI_PRC *src_infos = NULL; T_ACI_DEVICE_TYPE curr_device_type; T_ACI_UART_MUX_PARMS *MuxParms; T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI}; TRACE_FUNCTION("cmhUART_ParmsUpdated"); src_infos = cmhUART_find_dlci (uart_src_params, device, UART_DLCI_NOT_MULTIPLEXED); if (src_infos EQ NULL) { TRACE_EVENT ("Error: wrong device number"); return; } curr_device_type = cmhUART_GetDeviceType (src_infos->srcId); if (curr_device_type EQ DEVICE_TYPE_URT) { switch ( uartEntcurCmd[src_infos->srcId] ) { case AT_CMD_IPR: /* do not send OK: this has been done at the beginning */ TRACE_EVENT("IPR successfully processed"); break; case AT_CMD_ICF: case AT_CMD_IFC: #ifdef FF_FAX case AT_CMD_FLO: #endif R_AT( RAT_OK, src_infos->srcId )( uartEntcurCmd[src_infos->srcId] ); break; default: #ifdef DTI /* request of a DTI channel to communicate with UART */ dti_cntrl_est_dpath_indirect ( src_infos->srcId, entity_list, 1, SPLIT, atiUART_dti_cb, DTI_CPBLTY_CMD, DTI_CID_NOTPRESENT); #endif break; } /* reinitialize */ uartEntcurCmd[src_infos->srcId] = AT_CMD_NONE; } else if (curr_device_type EQ DEVICE_TYPE_UNKNOWN) { MuxParms = src_infos->MuxParms; if( MuxParms EQ NULL ) { TRACE_EVENT("Multiplexer could not be initialized: wrong parameters"); return; } psaUART_StartMux( device, MuxParms->mode, MuxParms->subset, MuxParms->N1, MuxParms->T1, MuxParms->N2, MuxParms->T2, MuxParms->T3); memcpy( (CHAR *)&holdMuxParms, (CHAR *)src_infos->MuxParms, sizeof(T_ACI_UART_MUX_PARMS)); ACI_MFREE( MuxParms ); src_infos->MuxParms = NULL; } else { TRACE_EVENT("Multiplexer could not be initialized: wrong state"); } } /* +-------------------------------------------------------------------+ | PROJECT : GSM-PS (6147) MODULE : PSA_UART | | ROUTINE : cmhUART_DetectedESC_DTR | +-------------------------------------------------------------------+ PURPOSE : . */ GLOBAL void cmhUART_DetectedESC_DTR( UBYTE device, UBYTE dlci, UBYTE cause ) { T_DTI_ENTITY_ID peer_id; T_ACI_DTI_PRC* src_infos = NULL; T_DTI_ENTITY_ID entity_list[] = {DTI_ENTITY_ACI}; TRACE_FUNCTION("cmhUART_DetectedESC_DTR()"); uartShrdPrm.dtr_clearcall = FALSE; uartShrdPrm.escape_seq = cause; src_infos = cmhUART_find_dlci (uart_src_params, device, dlci); if (src_infos EQ NULL) { TRACE_EVENT("[ERR] Wrong dlci"); return; } /* escape sequence detected */ if ((cause EQ UART_DETECT_ESC) OR ((cause EQ UART_DETECT_DTR) AND ((uartShrdPrm.dtr_behaviour EQ DTR_BEHAVIOUR_CommandMode) OR (uartShrdPrm.dtr_behaviour EQ DTR_BEHAVIOUR_ClearCall)) )) { #ifdef DTI peer_id = dti_cntrl_get_peer( DTI_ENTITY_UART, device, dlci ); if ( (uartShrdPrm.dtr_behaviour EQ DTR_BEHAVIOUR_ClearCall) AND (cause EQ UART_DETECT_DTR) AND ( (peer_id EQ DTI_ENTITY_TRA) OR (peer_id EQ DTI_ENTITY_L2R) /* OR (peer_id EQ DTI_ENTITY_ACI) don't disconnect if we are currently in CMD-Mode, otherwise this would kill the next call attempt */ OR (peer_id EQ DTI_ENTITY_PPPS) /* also drop PPP sessions */ OR (peer_id EQ DTI_ENTITY_PPPC) ) ) { TRACE_EVENT("uartShrdPrm.dtr_clearcall = TRUE"); uartShrdPrm.dtr_clearcall = TRUE; /* this is only for CSD (TRA, L2R) */ } #ifdef FAX_AND_DATA if (peer_id EQ DTI_ENTITY_L2R) { psaL2R_ESC ( src_infos->srcId ); } else #endif { dti_cntrl_est_dpath_indirect ( src_infos->srcId, entity_list, 1, SPLIT, atiUART_dti_cb, DTI_CPBLTY_CMD, DTI_CID_NOTPRESENT); } #endif } /* DTR line of serial link drops */ else if (cause EQ UART_DETECT_DTR) { if (uartShrdPrm.dtr_behaviour EQ DTR_BEHAVIOUR_Ignore) { TRACE_EVENT("DCE ignores DTR"); } else { TRACE_EVENT("[ERR] Wrong dtr_behaviour value"); } } else { TRACE_EVENT("[ERR] Wrong cause value in UART_DETECTED_IND"); } } #endif /* UART */