view src/aci2/mfw/CPHS_mod.h @ 662:8cd8fd15a095

SIM speed enhancement re-enabled and made configurable TI's original code supported SIM speed enhancement, but Openmoko had it disabled, and OM's disabling of speed enhancement somehow caused certain SIM cards to start working which didn't work before (OM's bug #666). Because our FC community is much smaller in year 2020 than OM's community was in their day, we are not able to find one of those #666-affected SIMs, thus the real issue they had encountered remains elusive. Thus our solution is to re-enable SIM speed enhancement and simply wait for if and when someone runs into a #666-affected SIM once again. We provide a SIM_allow_speed_enhancement global variable that allows SIM speed enhancement to be enabled or disabled per session, and an /etc/SIM_spenh file in FFS that allows it to enabled or disabled on a non-volatile basis. SIM speed enhancement is now enabled by default.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 24 May 2020 05:02:28 +0000
parents 93999a60b835
children
line wrap: on
line source

#ifndef _CPHS_H_
#define _CPHS_H_
/*-----------------------------------------------------------------------*
 *                                                                       *
 *     CPHS / SIM lock  Standalone module                                                  *
 *                                                                       *
 *-----------------------------------------------------------------------*/

/*-----------------------------------------------------------------------*
 *     CPHS Part                                                         *
 *-----------------------------------------------------------------------*/


/*---- Constants --------------------------------------------------------*/
#define CPHS_CSP_SIZE 20

/*---- Types ------------------------------------------------------------*/

#define SHORT short
#define UBYTE unsigned char
#define BYTE unsigned char
#define BOOL UBYTE


typedef enum              /* SIM operation status */
{
 	SIMOP_UNKNOWN = 20,
 	SIMOP_WRITE_ERR,
  	SIMOP_WRITE_OK,
 	SIMOP_READ_ERR,
  	SIMOP_READ_OK
} T_CPHS_SIMOP_STATUS;

typedef enum
{
  CPHS_FAIL = -1,
  CPHS_NOT_PRESENT,
  CPHS_IS_OK,
  CPHS_EXEC,
  CPHS_NOT_INIT,
  CPHS_SIM_READ_ERROR,
  CPHS_SIM_WRITE_ERROR
} T_CPHS_RET; 			//function return status

typedef enum			//line identifier values
{
  CPHS_LINE_INDEX_LINE1 = 1,
  CPHS_LINE_INDEX_LINE2 = 2,
  CPHS_LINE_INDEX_FAX   = 4,
  CPHS_LINE_INDEX_DATA  = 8
} T_CPHS_LINE_INDEX;

typedef enum			//Roaming indicator values
{
  CPHS_ROAMING_OFF,
  CPHS_ROAMING_ON
} T_CPHS_ROAMING_IND;


typedef enum					//Voicemail/divert status flags
{
  CPHS_FLAG_NOT_PRESENT = -1,
  CPHS_LINEFLAG_NOT_SET,
  CPHS_LINEFLAG_SET
} T_CPHS_FLAG_STATUS;


typedef enum					//possible emergency numbers
{
  CPHS_EMERGENCY_NUM_112 = 112,
  CPHS_EMERGENCY_NUM_999 = 999
} T_CPHS_EMERGENCY_NUM;

typedef struct					//format of text strings
{
  UBYTE len;
  //UBYTE* data;
  UBYTE data[22];
} T_CPHS_DATA;



typedef struct		//status of lines for voicemail/divert 
{
	UBYTE result;      //result of read/write op
  T_CPHS_FLAG_STATUS line1;
  T_CPHS_FLAG_STATUS line2;
  T_CPHS_FLAG_STATUS fax;
  T_CPHS_FLAG_STATUS data;
} T_CPHS_LINE_IND;

typedef struct				//ALS selected line 
{
  UBYTE result;
  T_CPHS_LINE_INDEX  line;
  T_CPHS_FLAG_STATUS locked;
} T_CPHS_ALS_INFO;

typedef struct				//ALS line description
{
  UBYTE result;
  T_CPHS_LINE_INDEX  line;
  T_CPHS_DATA        description;
} T_CPHS_ALS_LINE;

typedef struct			//operator name in long and short forms
{
  UBYTE result;
  T_CPHS_DATA long_name;
  T_CPHS_DATA short_name;
} T_CPHS_OPN;



typedef struct			//CPHS config info
{
  UBYTE phase;
  BOOL  opn_short;
  BOOL  mailbox_num;
  BOOL  sst;
  BOOL  csp;
  BOOL  info_num;
} T_CPHS_INFO;

typedef struct				//single Customer service profile entry
{
  UBYTE group_code;
  UBYTE services;
} T_CPHS_CSP_ENTRY;

typedef struct				//customer service Profile
{
	UBYTE result; //Result of last read/write
  T_CPHS_CSP_ENTRY csp[CPHS_CSP_SIZE];
  //UBYTE csp[CPHS_CSP_SIZE];
} T_CPHS_CSP;

typedef struct				//single mailbox entry
{
  UBYTE       index;
  T_CPHS_DATA alpha;
  UBYTE number[22];
  UBYTE       ton;
  UBYTE       npi;
  UBYTE       service;
} T_CPHS_MAILBOX_NUM_ENTRY;

typedef struct				//mailbox entries 
{
  UBYTE 					result; //read/write result
  UBYTE                     count;
 // T_CPHS_MAILBOX_NUM_ENTRY *entries;
 T_CPHS_MAILBOX_NUM_ENTRY entries[4];
} T_CPHS_MAILBOX_NUM_LIST;



typedef struct					//single information number list entry
{
  UBYTE       index;
  T_CPHS_DATA alpha;
  UBYTE       entryStat;
} T_CPHS_INFO_NUM;

typedef struct				//information number
{ 
  UBYTE		entryStat;
  UBYTE 		result; //result of last read/write op
  UBYTE       index;
  T_CPHS_DATA alpha;
  UBYTE number[22];
  UBYTE       ton;
  UBYTE       npi;
} T_CPHS_INFO_NUM_ENTRY;

typedef struct			//information number list
{
  UBYTE 				count; //no of entries
  UBYTE                  level;
  UBYTE                  index;
  //T_CPHS_INFO_NUM       *entry;
  T_CPHS_INFO_NUM       entry[10];
} T_CPHS_INFO_NUM_LIST;


//Callback function type
typedef int (*T_CPHS_CB_FUNC) (T_CPHS_INFO_NUM_LIST *,T_CPHS_INFO_NUM_ENTRY *);


/*---- Functions --------------------------------------------------------*/

  /* all CPHS functions return the following values:                     */
  /*                                                                     */
  /*   CPHS_OK                : on successfull execution                 */
  /*   CPHS_EXEC              : if CPHS operation is still executing     */
  /*   CPHS_NOT_INIT          : if a CPHS function is called before the  */
  /*                            CPHS initialize function has been called */
  /*   CPHS_NOT_PRESENT       : if current function is not present for   */
  /*                            current SIM                              */
  /*   CPHS_SIM_READ_ERROR    : on SIM read operation failure            */
  /*   CPHS_SIM_WRITE_ERROR   : on SIM read operation failure            */
  /*   CPHS_FAIL              : on other failures                        */



  /* set the roaming indicator                                           */




T_CPHS_RET cphs_Init(T_CPHS_CB_FUNC callback);
  /* initializes CPHS module, reads CPHS data fields from SIM and caches */
  /* the read data.   */


T_CPHS_RET cphs_refresh(T_CPHS_CB_FUNC callback);
  /* reads CPHS data fields from SIM and updates the cached CPHS data    */

T_CPHS_RET cphs_Exit();
  /* de-initializes CPHS module                                          */



T_CPHS_RET cphs_getOPN            ( T_CPHS_OPN* opn );
  /* reads from SIM the operator long name and if available the short    */
  /* name, too                                                          */


T_CPHS_RET cphs_setDivertCallInd  ( UBYTE              line_mask,
                                    T_CPHS_FLAG_STATUS flag );
  /* sets on SIM the divert call flag for the given lines in the         */
  /* parameter line_mask. The bitmask will be created by oring the lines.*/
  /* The bits for the lines are defined in T_CPHS_LINE_INDEX.            */



T_CPHS_RET cphs_getAlsInfo        ( T_CPHS_ALS_INFO *info );
  /* reads from SIM the information of alternate line service            */
  /* ( selected line, alternate line service locked/unlocked)            */

T_CPHS_RET cphs_setAlsInfo        ( T_CPHS_ALS_INFO *info );
  /* sets on SIM the informtion of alternate line service / selects the  */
  /* active line                                                         */
  
T_CPHS_RET cphs_setRoamingInd  ( T_CPHS_ROAMING_IND* indicator );

  
T_CPHS_RET cphs_getAlsLineDescr   ( T_CPHS_ALS_LINE* line );
  /* reads the (alpha)numeric description for the given line             */

T_CPHS_RET cphs_setAlsLineDescr   ( T_CPHS_ALS_LINE line );
  /* sets a (alpha)numeric description for the given line                */
  
T_CPHS_RET cphs_getRoamingInd     ( T_CPHS_ROAMING_IND* indicator );
  /* checks if roaming is active 
  */

/* reads from SIMif calls shall be diverted for the available lines    */
  /* (line1, line2, fax, data)                                           */
T_CPHS_RET cphs_getDivertCallInd  ( T_CPHS_LINE_IND* indicator );



T_CPHS_RET cphs_getVoiceMessageInd( T_CPHS_LINE_IND* indicator);
  /* reads from SIM if voice mails are waiting for the available lines   */
  /* (line1, line2, fax, data)                                           */

T_CPHS_RET cphs_setVoiceMessageInd( UBYTE              line_mask,
                                    T_CPHS_FLAG_STATUS flag );
  /* sets on SIM the voice mail waiting flag for the given lines in the  */
  /* parameter line_mask. The bitmask will be created by oring the lines.*/
  /* The bits for the lines are defined in T_CPHS_LINE_INDEX.            */




T_CPHS_RET cphs_checkEmergencyCall( char* num );
/* check if the current call number(ASCII encoded) is an emergency number supported     */
/* by CPHS.                                                              */



T_CPHS_RET cphs_getCPHSInfo       ( T_CPHS_INFO *info );
  /* reads from SIM the phase of the SIM and which optional datafields   */
  /* are present in the SIM                                              */
  /* (operator name shortform, mailbox numbers, service string table,    */
  /*  information numbers)                                               */



T_CPHS_RET cphs_getCSP            ( T_CPHS_CSP *csp );
  /* reads all entries of the customer service profile and fills         */



T_CPHS_RET cphs_getMailboxNumbers ( T_CPHS_MAILBOX_NUM_LIST *nums );
  /* reads all mailbox numbers from the SIM fills all mailbox number     */
  /* entries in the mailbox number list                                  */



T_CPHS_RET cphs_getInfoNumbers    ( T_CPHS_INFO_NUM_LIST *nums, UBYTE level, UBYTE startIndex, T_CPHS_CB_FUNC callback);
  // reads all information numbers from the SIM fills all information    
  // numbers into the array of pointers at the directory level specified from the specified
  //index until an entry of a different level is encountered
  //The callback function is called when the list has been retrieved from the SIM and is passed
  //the list as a parameter
  //e.g. cphs_getInfoNumbers(NumberList, 1, 1, callback_func) would get the first level
  //in the information numbers list
  //to get the directory below an item in this list, you'd have to read the entry index and
  //call cphs_getInfoNumbers(NewNumberList, entry_level+1, entry_index+1, callback_func), as
  //directory contents are stored right after the directory heading.
  //The MSB of the entryStat field in a info number list entry is set to 1 if it is a number
  //and 0 if it is a directory heading.
  

T_CPHS_RET cphs_selectInfoNumber  ( USHORT                 index,
                                    T_CPHS_INFO_NUM_ENTRY *num, T_CPHS_CB_FUNC callback);
  // reads the information number entry given by index from    */
  // the SIM   */                                                          */
  //The index of a desired entry can be found in the "index" field of that entry in a previously
  //retrieved information number list


 


/*-----------------------------------------------------------------------*
 *       SIMLOCK Part                                                    *
 *-----------------------------------------------------------------------*/


/*---- Predefined Values ------------------------------------------------*/

#define SIMLOCK_PWD_MAX_LEN       16
#define SIMLOCK_PWD_MIN_LEN_SIM    6
#define SIMLOCK_PWD_MIN_LEN_OTHER  8


/*---- Types ------------------------------------------------------------*/

typedef enum
{
  SIMLOCK_FAIL = -1,
  SIMLOCK_ENABLE,
  SIMLOCK_DISABLE,
  SIMLOCK_LOCKED,
  SIMLOCK_BLOCKED
} T_SIMLOCK_RET;

typedef enum
{
  SIMLOCK_NETWORK = 0,
  SIMLOCK_NETWORK_SUBSET,
  SIMLOCK_SERVICE_PROVIDER,
  SIMLOCK_CORPORATE,
  SIMLOCK_SIM,
  SIMLOCK_FIRST_SIM
} T_SIMLOCK_TYPE;


/*---- Functions --------------------------------------------------------*/

//T_SIMLOCK_RET simlock_checkLock   ( T_SIMLOCK_TYPE type );
/* checks the lock status of the given lock type. On successfull check   */
/* the status will be returned. If an error occured SIMLOCK_FAIL will    */

//#define _TESTING__
#ifdef _TESTING__
void Cphs_reading_test();
void Cphs_writing_test();
#endif

#endif //_CPHS_H_