view src/g23m-fad/l2r/tra_upp.c @ 263:b5e8dfd114a7

Switch_ON(): go into charging boot mode on either CHGSTS or CHGPRES If someone were to plug and then unplug a charger into a switched-off phone in an extremely brief "glitch" manner, we should do an automatic power-off on boot in this condition. When we were checking only CHGPRES in Switch_ON(), we would go into Misc boot state instead, which is undesirable. Now if we have a CHGSTS but not CHGPRES condition, we will go into charging boot mode, and FCBM will then do the automatic power-off upon detecting absence of the charger in its periodic polling.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 May 2021 05:50:36 +0000
parents fa8dc04885d8
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  CSD (8411)
|  Modul   :  tra_upp.c
+----------------------------------------------------------------------------- 
|  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 functions for processing
|             of incomming primitives for the component TRA
+----------------------------------------------------------------------------- 
*/ 

#ifndef TRA_UPP_C
#define TRA_UPP_C
#endif

#define ENTITY_L2R

/*==== INCLUDES ===================================================*/

#include "typedefs.h"
#include "pconst.cdg"
#include "vsi.h"
#include "macdef.h"
#include "custom.h"
#include "gsm.h"
#include "prim.h"
#include "pei.h"
#include "tok.h"
#include "dti.h"

#include "cl_ribu.h"
#include "tra_pei.h"
#include "tra.h"

/*==== CONST =======================================================*/

/*==== TYPES =======================================================*/

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

/*==== VAR LOCAL ===================================================*/

/*==== FUNCTIONS ===================================================*/

/*
+------------------------------------------------------------------------------
|  Function    : rcv_ra_ready_ind
+------------------------------------------------------------------------------
|  Description : Process primitive RA_READY_IND received from RA.
|                This function is called if the RA_READY_IND primtive
|                is received
|
|  Parameters  : ra_ready_ind -
|
|
|  Return      : -
+------------------------------------------------------------------------------
*/

GLOBAL void rcv_ra_ready_ind(T_RA_READY_IND *ra_ready_ind)
{
  T_TRA_UP *dul = &tra_data->up;

#ifdef _SIMULATION_
  TRACE_EVENT_P1 ("rcv_ra_ready_ind(), req_frames: 0x%x", ra_ready_ind->req_frames);
  PACCESS (ra_ready_ind);
#endif

  dul->req_frames = ra_ready_ind->req_frames;
  
  switch (GET_STATE (UP))
  {
  case UP_IDLE:
    SET_STATE (UP, UP_WAIT);
    break;

  case UP_SEND:
    snd_data_to_RA();
    if (dul->Prim->desc_list2.first EQ 0)
    {
      if (dul->Prim NEQ NULL)
      {
        PFREE(dul->Prim);
        dul->Prim = NULL;
      }
      up_start_dti_flow();
      SET_STATE (UP, UP_IDLE);
    }
    break;
  }
#ifdef _SIMULATION_
  PFREE (ra_ready_ind);
#endif
}

/*
+------------------------------------------------------------------------------
|  Function    : sig_dti_tra_up_data_received_ind
+------------------------------------------------------------------------------
|  Description : Process primitive DTI2_DATA_REQ received from CSDIWF.
|
|  Parameters  : dti_data_req
|                 
|
|  Return      : -
+------------------------------------------------------------------------------
*/

GLOBAL void sig_dti_tra_up_data_received_ind(T_DTI2_DATA_REQ *dti_data_req)
{
  T_TRA_UP *dul = &tra_data->up;

  TRACE_FUNCTION ("sig_dti_tra_up_data_received_ind()");
  
  PACCESS        (dti_data_req);

  dul->Prim = dti_data_req;
  
  dul->sa = dti_data_req->parameters.st_lines.st_line_sa;
  dul->sb = dti_data_req->parameters.st_lines.st_line_sb;
  dul->x  = dti_data_req->parameters.st_lines.st_flow;

  /*
  TRACE_EVENT_P1("new data: %02X", dti_data_req->desc_list2.list_len);
  */

  if (GET_STATE(DTI) NEQ DTI_CLOSED)
  {
    /* 
     * do not send flow control primitives automatically 
     */
    dti_stop(l2r_hDTI, TRA_DTI_UP_INSTANCE, TRA_DTI_UP_INTERFACE, TRA_DTI_UP_CHANNEL);        
  }

  /* Detect break request */
  if (dti_data_req->parameters.st_lines.st_break_len NEQ DTI_BREAK_OFF)
  {
    USHORT break_len = dti_data_req->parameters.st_lines.st_break_len;

    PFREE(dti_data_req); /* no more used */

    switch (GET_STATE (UP))
    {
    case UP_SEND:
      /*
       * No more data to send
       */
      SET_STATE (UP, UP_IDLE);
      /* Fall through */

    case UP_IDLE:
    case UP_WAIT:
      sig_up_tra_mgt_break_ind(break_len);
      up_start_dti_flow();
      break;
    }
    return; /* xxxxx - send data or do not send it??! */
  }

  switch (GET_STATE (UP))
  {
  case UP_SEND:
    TRACE_EVENT("still in UP_SEND!");
    break;

  case UP_IDLE:
    SET_STATE (UP, UP_SEND);
    break;

  case UP_WAIT:
    snd_data_to_RA();
    if (dti_data_req->desc_list2.list_len EQ 0) /* data is copied completely */
    {
      up_start_dti_flow();
      SET_STATE (UP, UP_IDLE);
      PFREE(dti_data_req);
      dul->Prim = NULL;
    }
    else
    {
      SET_STATE (UP, UP_SEND);
    }
    break;
  }
}