view src/g23m-aci/aci/conc_sms.h @ 223:740a8e8fc9d7

startup sync logic rework for the new PWON button boot scheme Previously we added logic to the MMI task to hold off PEI init until R2D is running, and then extended that condition to wait for FCHG init too. However, the dependencies of MMI upon R2D and FCHG don't start until mmiInit(), and that call is driven by Switch_ON() code, hence the wait for R2D and FCHG init can be made in that code path instead of the MMI task. Furthermore, with our new way of signaling PWON button boot to MMI, we need a new wait to ensure that the MMI task is up - previously this assurance was provided by the wait for Kp pointers to be set. Solution: revert our previous PEI init hold-off additions to MMI, add a new flag indicating MMI task init done, and put the combined wait for all needed conditions into our new PWON button boot code in power.c.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 27 Apr 2021 06:24:52 +0000
parents fa8dc04885d8
children
line wrap: on
line source

/* 
+----------------------------------------------------------------------------- 
|  Project :  $Workfile::
|  Modul   :  CONC_SMS
+----------------------------------------------------------------------------- 
|  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 :  SMS Concatenation Handler
+----------------------------------------------------------------------------- 
*/ 



#ifndef CONC_SMS_H
#define CONC_SMS_H

/* for target tests of Conc. SMS define _CONC_TESTING_ */
/*#ifndef _CONC_TESTING_
#define _CONC_TESTING_
#endif*/


/*==== CONSTANTS ==================================================*/

#define SMS_IEI_CONC_8BIT  0x00
#define SMS_IEI_CONC_16BIT 0x08


#define L_UNCOMP_8BIT_DATA 140
#define L_UNCOMP_7BIT_DATA 160
#define L_UNCOMP_8BIT_DATA_CONC 134
#define L_UNCOMP_7BIT_DATA_CONC 153

/* only for test purposes */
#define L_UNCOMP_8BIT_DATA_TST 14
#define L_UNCOMP_7BIT_DATA_TST 16
#define L_UNCOMP_8BIT_DATA_CONC_TST 13
#define L_UNCOMP_7BIT_DATA_CONC_TST 15

#define COMMAND_TYPE_DELETE 0x02

#define CONC_MAX_SEGS 10 /* maximum number of segment in one conc. SMS */

/* max number of conc. SMs in segment buffer and assembly buffer */
#define MAX_BUF_ELEMS 5

/* max number of conc. SMs in concatenation buf */
#define MAX_CONC_BUF_ELEMS 30


#define CONC_UDH_LEN 6

#define MAX_SEG_TOTAL 120

/* detection modes for SMS_getSMSType */
#define MODE1 1
#define MODE2 2
#define MODE3 3


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

#define SET_CONC \
  {concShrdPrm.isConcatenated = TRUE;}

#define UNSET_CONC \
  {concShrdPrm.isConcatenated = FALSE;}

#define ISSET_CONC \
  (concShrdPrm.isConcatenated EQ TRUE)


#ifdef _CONC_TESTING_
#define SET_OWNBUF_CONC \
  if (concShrdPrm.isConcatenated) ownBuf = CMD_SRC_LCL;
#else
#define SET_OWNBUF_CONC
#endif


typedef enum              /* for init functions */
{
  CONC_ERROR       = -1,       /* concatenation error */
  CONC_NOT_NEEDED,             /* no concatenation needed */
  CONC_NEEDED                  /* concatenation needed */
} T_CONC_INIT_RETURN;


typedef enum              /* for collect function */
{
  CONC_ERR_UNKN,               /* concatenation error unknown */
  CONC_ERR_BUF_FULL,           /* buffer full */
  CONC_CONTINUED,              /* concatenation continued */
  CONC_COMPLETED               /* concatenation completed */
} T_CONC_ASSEMBLY_RETURN;


typedef enum
{
  UNKNOWN = -1,
  NORMAL,
  CONCATE,
  VOICEMAIL,
  NORMAL_IND_CSMS
} T_SMS_TYPE;


typedef struct            /* data buffer for Assembly of Concat. SMS */
{
  UBYTE  in_use;
  USHORT ref_num;
  CHAR   address[MAX_SMS_ADDR_DIG+1];
  UBYTE  next_exp_num;
  UBYTE  segs_left;
  UBYTE  seg_count;
  T_SM_DATA_EXT data;
}
T_SM_ASSEMBLY;

typedef struct            /* segment buffer for Concat. SMS */
{
  UBYTE  in_use;
  USHORT ref_num;
  CHAR   address[MAX_SMS_ADDR_DIG+1];
  T_ACI_LIST *list;
}
T_SEG_BUF;

typedef struct            /* one segment buffer element for Concat. SMS */
{
  UBYTE seq_num;
  UBYTE rec_num;
  UBYTE status;           /* in CMH format */
  T_SM_DATA_EXT data;
}
T_SEG_BUF_ELEM;

typedef struct            /* concatenated buffer for Concat. SMS */
{
  UBYTE  in_use;
  USHORT ref_num;
  CHAR   address[MAX_SMS_ADDR_DIG+1];
  UBYTE  max_num;
  T_ACI_LIST *list;
}
T_CONC_BUF;

typedef struct            /* one concatenated buffer element for Concat. SMS */
{
  UBYTE seq_num;
  UBYTE rec_num;
  UBYTE status;           /* in CMH format */
  UBYTE mem;
}
T_CONC_BUF_ELEM;


typedef struct
{
  CHAR       da[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_da;
  T_ACI_TOA  toda;
  T_ACI_TOA  *p_toda;
  T_ACI_LIST *currConcBufListElem; /* current element in concatenated buffer */
  UBYTE      skipStoSent;
} T_CONC_CMSS;

typedef struct
{
  CHAR       da[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_da;
  T_ACI_TOA  toda;
  T_ACI_TOA  *p_toda;
  T_SM_DATA_EXT data;
  USHORT     offset;      /* byte offset in a conc. SM */
  CHAR       sca[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_sca;
  T_ACI_TOA  tosca;
  T_ACI_TOA  *p_tosca;
  SHORT      isReply;
  USHORT     sent_bytes;
} T_CONC_CMGS;

typedef struct
{
  UBYTE      command_count;
  UBYTE      fo;
  UBYTE      ct;
  UBYTE      pid;
  CHAR       da[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_da;
  T_ACI_TOA  toda;
  T_ACI_TOA  *p_toda;
  T_SM_DATA_EXT data;       /* user data */
} T_CONC_CMGC;

typedef struct
{
  UBYTE      rdMode;
  T_ACI_LIST *currConcBufListElem; /* current element in concatenated buffer */
} T_CONC_CMGR;

typedef struct
{
  CHAR       da[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_da;
  T_ACI_TOA  toda;
  T_ACI_TOA  *p_toda;
  UBYTE      stat;
  UBYTE      msg_ref;
  T_SM_DATA_EXT data;       /* user data */
  USHORT     offset;      /* byte offset in a conc. SM */
  CHAR       sca[MAX_SMS_ADDR_DIG+1];
  CHAR       *p_sca;
  T_ACI_TOA  tosca;
  T_ACI_TOA  *p_tosca;
  SHORT      isReply;
  USHORT     sent_bytes;
} T_CONC_CMGW;

typedef struct
{
  USHORT     ref_num;              /* ref. number of the current conc. buffer */
  CHAR       *address;
  UBYTE      error_count;
  T_ACI_LIST *currConcBufListElem; /* current element in concatenated buffer */
} T_CONC_CMGD;





typedef struct            /* Shared Parameter for Concat. SMS */
{
  UBYTE      max_sms_len; /* max. length of one SM segment */
  UBYTE      srcId;       /* current source ID */
  UBYTE      first_mr;    /* message ref. of the first sent segment */
  UBYTE      sentSegs;    /* number of successfully sent segments,for "+CMGC"*/
  UBYTE      isConcatenated;
  UBYTE      concTesting;
  UBYTE      l_uncomp8bit_data;
  UBYTE      l_uncomp7bit_data;
  UBYTE      l_uncomp8bit_data_conc;
  UBYTE      l_uncomp7bit_data_conc;
  UBYTE      mem_store;
  UBYTE      elem_count;  /* total number of CSMS segments */

  struct
  {
    UBYTE      ref_num;     /* conc. SM reference number */
    UBYTE      max_num;     /* max. number of SMs in one conc. message */
    UBYTE      seq_num;     /* sequence number of the current SM */
  } udh;

  struct 
  {
  USHORT RefNum;
  UBYTE MaxNum;
  UBYTE SeqNum[CONC_MAX_SEGS];
  UBYTE RecNum[CONC_MAX_SEGS];
  UBYTE MemType[CONC_MAX_SEGS]; 
  BOOL Conc_Full;
  UBYTE Numsegs; 
  } full;

  union
  {
    T_CONC_CMSS concCMSS;
    T_CONC_CMGS concCMGS;
    T_CONC_CMGC concCMGC;
    T_CONC_CMGR concCMGR;
    T_CONC_CMGW concCMGW;
    T_CONC_CMGD concCMGD;
  } specPrm;
}
T_CONC_SHRD_PRM;


#ifdef TI_PS_FF_CONC_SMS
/****************************** FUNCTIONS ********************************/


/* Init Functions */

EXTERN T_CONC_INIT_RETURN concSMS_initSendFromMem ( T_ACI_CMD_SRC srcId,
                                               UBYTE         *index,
                                               CHAR*         da,
                                               T_ACI_TOA*    toda );

EXTERN T_CONC_INIT_RETURN concSMS_initReadFromMem ( T_ACI_CMD_SRC  srcId,
                                               UBYTE          index,
                                               T_ACI_SMS_READ rdMode );

EXTERN T_CONC_INIT_RETURN concSMS_initDeleteFromMem ( T_ACI_CMD_SRC  srcId,
                                                 UBYTE          index );

EXTERN T_CONC_INIT_RETURN concSMS_initSend     ( T_ACI_SM_DATA*  tar_data,
                                            T_ACI_UDH_DATA* udh,
                                            T_ACI_CMD_SRC   srcId,
                                            CHAR*           da,
                                            T_ACI_TOA*      toda,
                                            T_SM_DATA_EXT*  src_data,
                                            CHAR*           sca,
                                            T_ACI_TOA*      tosca,
                                            SHORT           isReply,
                                            UBYTE           alphabet );

EXTERN T_CONC_INIT_RETURN concSMS_initStoreInMem (  T_ACI_SM_DATA* tar_data,
                                               T_ACI_UDH_DATA* udh,
                                               T_ACI_CMD_SRC  srcId,
                                               SHORT          index,
                                               CHAR*          address,
                                               T_ACI_TOA*     toa,
                                               T_ACI_SMS_STAT stat,
                                               UBYTE          msg_ref,
                                               T_SM_DATA_EXT* src_data,
                                               CHAR*          sca,
                                               T_ACI_TOA*     tosca,
                                               SHORT          isReply,
                                               UBYTE          alphabet );

EXTERN T_CONC_INIT_RETURN concSMS_initCommand ( T_ACI_CMD_SRC   srcId,
                                           SHORT           fo,
                                           SHORT           ct,
                                           SHORT           pid,
                                           SHORT           mn,
                                           CHAR*           da,
                                           T_ACI_TOA*      toda,
                                           T_ACI_CMD_DATA* data );



/* Callback Functions */

EXTERN void rConcSMS_PlusCMSS  (UBYTE mr, UBYTE numSeg);

EXTERN void rConcSMS_PlusCMGS  (UBYTE mr, UBYTE numSeg);

EXTERN void rConcSMS_PlusCMGR  (T_ACI_CMGL_SM*  sm,
                                T_ACI_CMGR_CBM* cbm);

EXTERN void rConcSMS_PlusCMGW  (UBYTE index, UBYTE numSeg, UBYTE mem);

EXTERN void rConcSMS_PlusCMGD  ();

EXTERN void rConcSMS_PlusCMGC  (UBYTE mr);

EXTERN void rConcSMS_PercentCMGMDU  (void);

/* Error Callback Functions */

EXTERN void rConcSMS_PlusCMS_CMSS (T_ACI_AT_CMD cmdId, T_ACI_CMS_ERR err,
                                   T_EXT_CMS_ERROR *conc_error);

EXTERN void rConcSMS_PlusCMS_CMGS (T_ACI_AT_CMD cmdId, T_ACI_CMS_ERR err,
                                   T_EXT_CMS_ERROR *conc_error);

EXTERN void rConcSMS_PlusCMS_CMGW (T_ACI_AT_CMD cmdId, T_ACI_CMS_ERR err,
                                   T_EXT_CMS_ERROR *conc_error);

EXTERN void rConcSMS_PlusCMS_CMGD (T_ACI_AT_CMD cmdId, T_ACI_CMS_ERR err,
                                   T_EXT_CMS_ERROR *conc_error);
#endif /* TI_PS_FF_CONC_SMS */


EXTERN void concSMS_Init();

EXTERN void concSMS_clearIncompleteMsg();

EXTERN void concSMS_delAllIncompleteMsg();

EXTERN void concSMS_AddtoconcBuff();

EXTERN T_SMS_TYPE SMS_getSMSType ( T_ACI_UDH_DATA* udh, char *address, UBYTE detMode);

EXTERN UBYTE concSMS_GetFirstIndex ( USHORT msg_ref, CHAR* address );

/* provide mem_type as well */
EXTERN T_CONC_BUF_ELEM *concSMS_GetFirstIndex_ext ( USHORT msg_ref, CHAR* address );

EXTERN USHORT concSMS_GetMsgRef ( T_ACI_CMGL_SM  *sm );

EXTERN T_CONC_ASSEMBLY_RETURN concSMS_Collect ( T_SM_DATA_EXT *data_conc,
                                               T_ACI_CMGL_SM  *sm,
                                               UBYTE          isStored,
                                               T_ACI_SMS_STOR mem );

#ifdef TI_PS_FF_CONC_SMS
EXTERN void rConcSMS_PercentCMGR  (T_ACI_CMGL_SM*  sm,
                                   T_ACI_CMGR_CBM* cbm);
#endif /* TI_PS_FF_CONC_SMS */



#ifdef CONC_SMS_C

GLOBAL T_CONC_SHRD_PRM      concShrdPrm;
#else

EXTERN T_CONC_SHRD_PRM      concShrdPrm;
#endif /* CONC_SMS_C */

EXTERN void concSMS_DeleteConcList();
EXTERN BOOL concSMS_concBufferAvail();

#endif