/*
+--------------------------------------------------------------------+
| PROJECT:  GSM-MFW (8417)              $Workfile:: mfw_phb.h       $|
| $Author:: Vo                          $Revision::  1              $|
| CREATED:  7.1.99                      $Modtime:: 24.03.00 11:47   $|
| STATE  :  code                                                     |
+--------------------------------------------------------------------+

	PURPOSE :  Types defination for phonebook management
    . 
*/ 

#ifndef DEF_MFW_PHB
#define DEF_MFW_PHB

#include "message.h"
#include "prim.h"
#include "aci_cmh.h"
#ifdef FF_2TO1_PS
#include "p_8010_127_sim_sap.h"	//GW 22/11/01 - Added 
#else
#include "prim.h"
#endif
#include "phb.h"	//GW 22/11/01 - Added

/*
 * events are organised as bitmaps
 */
#define E_PHB_STATUS              0x0001
#define E_PHB_ERROR               0x0002
#define E_PHB_UPN_LIST            0x0004
#define E_PHB_READY               0x0008
#define E_PHB_BUSY                0x0010

#define PHB_MAX_DIGITS     2
#define PHB_MAX_ENTRY_NUM  5

/* SPR#1112 - Internal phonebook */
#ifdef INT_PHONEBOOK
#define DEFAULT_PB		0
#endif

#ifdef TI_PS_FFS_PHB
//#define PHB_MAX_LEN        MAX_PHB_NUM_LEN /* Phonebook number length + '\0' */
#define PHB_MAX_LEN        (44+1) /* Phonebook number length + '\0' */
#else
//GW-SPR#762 For 44 digit phonebook, see aci_cmh.h
#ifdef PHONEBOOK_EXTENSION
#define PHB_MAX_LEN        (44+1) /* Phonebook number length + '\0' */
#else
#define PHB_MAX_LEN        (20+1) /* Phonebook number length + '\0' */
#endif /* else, #ifdef PHONEBOOK_EXTENSION */
#endif /* else, #ifdef TI_PS_FFS_PHB */

#define MAX_UPN_NUM        6

#define PHB_UNRESTRICTED   0
#define PHB_RESTRICTED     1
#define PHB_LOADING        2
#define PHB_NOT_ALLOCATED  3

#define PHB_AUTO_OFF       0
#define PHB_AUTO_ON        1


/* global constants */

typedef enum     /* phonebook type */
{
    PHB_ECC = 0,         /* Emergency call numbers        */
    PHB_ADN,             /* Abbreviated dialing number    */
    PHB_FDN,             /* Fixed dialing number          */
    PHB_BDN,             /* Barred dialing number         */
    PHB_LDN,             /* Last dialing number           */
    PHB_LRN,             /* Last received number          */
    PHB_SDN,             /* Service dialing number        */
    PHB_LMN,
    PHB_ADN_FDN,
    PHB_UPN,
#ifdef INT_PHONEBOOK	/* SPR#1112 - Internal phonebook */
    PHB_IPB,
#endif
    PHB_NONE,
    MAX_PHB_TYPE
} T_MFW_PHB_TYPE;

typedef enum            /* type of number */
{
  MFW_TON_UNKNOWN,
  MFW_TON_INTERNATIONAL,
  MFW_TON_NATIONAL,
  MFW_TON_NET_SPECIFIC,
  MFW_TON_DED_ACCESS,
  MFW_TON_ALPHA_NUMERIC,
  MFW_TON_ABBREVIATED,
  MFW_TON_EXTENDED
} T_MFW_PHB_TON;

typedef enum              /* numbering plan identifier */
{
  MFW_NPI_UNKNOWN,
  MFW_NPI_ISDN      = 1,
  MFW_NPI_DATA      = 3,
  MFW_NPI_TELEX     = 4,
  MFW_NPI_NATIONAL  = 8,
  MFW_NPI_PRIVATE   = 9,
  MFW_NPI_M_ERMES   = 10,  
  MFW_NPI_M_CTS     = 11   
} T_MFW_PHB_NPI;

typedef enum            /* service related to the phone number */
{
  SERVICE_UNKNOWN,
  SERVICE_ASYNCH,           /* asynchronous modem          */
  SERVICE_SYNCH,            /* synchronous modem           */
  SERVICE_PAD_ASYNCH,       /* PAD access (asynchronous)   */
  SERVICE_PACKET_SYNCH,     /* packet access (synchronous) */
  SERVICE_VOICE,            /* voice                       */
  SERVICE_FAX               /* fax                         */
} T_MFW_PHB_SERVICE;

typedef enum    /* Result of operation */
{
    MFW_NO_ENTRY,
    MFW_ENTRY_EXIST
} T_MFW_PHB_RESULT;


typedef enum    /* Return values */
{
    MFW_PHB_OK,     /* success           */
    MFW_PHB_FULL,   /* phonebook is full */
    MFW_PHB_PIN2_REQ,
    MFW_PHB_PUK2_REQ,
    MFW_PHB_FAIL 
} T_MFW_PHB_RETURN;

typedef enum    /* mode of sorted phonebook */
{
    MFW_PHB_ALPHA,
    MFW_PHB_NUMBER,
    MFW_PHB_PHYSICAL,
    MFW_PHB_INDEX
} T_MFW_PHB_MODE;

/* Structures */
typedef struct  /* Character */
{
  UBYTE dcs;
  UBYTE len;                    /* length of string data        */
  UBYTE data[PHB_MAX_LEN];      /* string data                  */
  UBYTE dummy;
} T_MFW_PHB_TEXT;

typedef struct
{
  UBYTE year     [PHB_MAX_DIGITS];
  UBYTE month    [PHB_MAX_DIGITS];
  UBYTE day      [PHB_MAX_DIGITS];
  UBYTE dummy1;
  UBYTE dummy2;
} T_MFW_PHB_DATE;

typedef struct
{
  UBYTE hour     [PHB_MAX_DIGITS];
  UBYTE minute   [PHB_MAX_DIGITS];
  UBYTE second   [PHB_MAX_DIGITS];
  UBYTE dummy1;
  UBYTE dummy2;
} T_MFW_PHB_TIME;


typedef struct  /* Phonebook entry */
{
    UBYTE            book;                  /* phonebook                   */
    UBYTE			 dummy1;
    UBYTE			 dummy2;
    UBYTE			 dummy3;
#ifdef NO_ASCIIZ
    T_MFW_PHB_TEXT   name;                  /* length of name              */
#else
   UBYTE            name[/*PHB_MAX_LEN*/MAX_ALPHA_LEN];     /* alpha identifier            */
#endif
    UBYTE            number[PHB_MAX_LEN+1];  /* telephone number, +1 for '+' in intl. numbers */
    SHORT            index;             /* index in phonebook table    */
    UBYTE            ton;               /* type of number              */
    UBYTE            npi;               /* numbering plan identifier   */
    T_MFW_PHB_DATE   date;              /* date of entry               */
    T_MFW_PHB_TIME   time;              /* time of entry               */
    UBYTE 				line;
} T_MFW_PHB_ENTRY;


typedef struct  /* phonebook read operation */
{
    UBYTE             result;                   /* result of operation         */
    UBYTE             book;                     /* phonebook                   */
    SHORT             num_entries;              /* number of phonebook entries */
    T_MFW_PHB_ENTRY   *entry;                   /* phonebook entries           */
} T_MFW_PHB_LIST;


typedef struct  /* phonebook status indication */
{
    UBYTE book;         /* phonebook                     */
    SHORT max_entries;  /* max entries in the phonebook  */
    UBYTE tag_len;      /*length of alpha identifier     */
    SHORT used_entries; /* used entries in the phonebook */
    SHORT avail_entries;
} T_MFW_PHB_STATUS;

typedef struct  /* MSISDN number */
{
#ifdef NO_ASCIIZ
    T_MFW_PHB_TEXT   name;                  /* length of name              */
#else
    UBYTE            name[/*PHB_MAX_LEN*/MAX_ALPHA_LEN/*MC, SPR1257*/];     /* alpha identifier            */
#endif
    UBYTE             number[PHB_MAX_LEN+1]; /* telephone number, +1 for '+' in intl. numbers */
    T_MFW_PHB_SERVICE service;               /* service related to phone number */
    T_MFW_PHB_TON     ton;                   /* type of number                  */
    T_MFW_PHB_NPI     npi;                   /* numbering plan identifier       */
} T_MFW_UPN;

typedef struct
{
    UBYTE count;                 
    T_MFW_UPN upn[MAX_UPN_NUM];  
} T_MFW_UPN_LIST;


/* PHB Parameter */

typedef union
{
  T_MFW_PHB_STATUS  phb_status;
  T_MFW_UPN_LIST    upn_list;
} T_MFW_PHB_PARA;

EXTERN void  phb_init          (void);
EXTERN void  phb_exit          (void);
EXTERN T_MFW_HND phb_create    (T_MFW_HND   hWin, 
                                T_MFW_EVENT event, 
                                T_MFW_CB cbfunc);
EXTERN T_MFW_RES phb_delete    (T_MFW_HND h);
EXTERN T_MFW phb_read_entries  (UBYTE book, 
                                UBYTE index, 
                                UBYTE mode, 
                                UBYTE num_entries, 
                                T_MFW_PHB_LIST *entries);
#ifdef NO_ASCIIZ
EXTERN T_MFW phb_find_entries  (UBYTE book, 
                                SHORT *index, 
                                UBYTE mode, 
                                SHORT num_entries, 
                                T_MFW_PHB_TEXT *search_pattern, 
                                T_MFW_PHB_LIST *entries);
#else
EXTERN T_MFW phb_find_entries  (UBYTE book, 
                                SHORT *index, 
                                UBYTE mode, 
                                SHORT num_entries, 
                                CHAR *search_pattern, 
                                T_MFW_PHB_LIST *entries);
#endif
EXTERN T_MFW phb_store_entry   (UBYTE book, 
                                T_MFW_PHB_ENTRY *entry, 
                                T_MFW_PHB_STATUS *status); 
EXTERN T_MFW phb_delete_entry  (UBYTE book, UBYTE index, 
                                T_MFW_PHB_STATUS *status);
EXTERN T_MFW phb_delete_book   (UBYTE book);
EXTERN T_MFW phb_set_mode      (UBYTE book, UBYTE *passed);
EXTERN T_MFW phb_check_number  (UBYTE *number);
EXTERN T_MFW phb_get_status    (T_MFW_PHB_STATUS *status);
EXTERN T_MFW phb_set_auto_off  (UBYTE mode);
EXTERN T_MFW phb_get_auto_off  (UBYTE *mode);
EXTERN T_MFW_PHB_RETURN phb_switch_entry (T_MFW_PHB_ENTRY *entry, UBYTE *passwd);
EXTERN void  phb_get_upn       (void);
EXTERN T_MFW phb_save_upn      (T_MFW_UPN *upn);
EXTERN void phb_Alpha2Gsm(T_ACI_PB_TEXT *text, UBYTE *alpha);
EXTERN void phb_Gsm2Alpha(UBYTE *alpha, T_ACI_PB_TEXT *text);
EXTERN int phb_get_mode        (void);
EXTERN int numbersMatch(char * num1, char* num2);

#endif

