FreeCalypso > hg > freecalypso-sw
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