diff gsm-fw/g23m-aci/aci/conc_sms.h @ 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gsm-fw/g23m-aci/aci/conc_sms.h	Sun Oct 12 01:45:14 2014 +0000
@@ -0,0 +1,415 @@
+/* 
++----------------------------------------------------------------------------- 
+|  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