view src/ui/bmi/mmiHomezone.h @ 261:841a848ba762

SPI SWE: clear any pending boot-time interrupts in spi_init() Charger plug/unplug hw logic in the Iota ABB has no built-in debouncing, thus electrical contact bounce on the charging power connection interface produces a lot of charger plug/unplug interrupts. When we boot in charging mode (charging power present at boot time and is presumably the cause of Switch-ON), some bounce may occur between the initial Iota Switch-ON action and Calypso firmware booting. By clearing any accumulated ITSTATREG interrupts on boot, we prevent these pre-boot interrupts from generating charger plug/unplug events to FCHG, which would upset smooth from-boot charging.
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 14 May 2021 02:49:05 +0000
parents 4d3d71a22b9d
children
line wrap: on
line source

#ifndef _DEF_MMI_HOMEZONE_H_
#define _DEF_MMI_HOMEZONE_H_

/*******************************************************************************

                    CONDAT (UK)

********************************************************************************

 This software product is the property of Condat (UK) Ltd and may not be
 disclosed to any third party without the express permission of the owner.

********************************************************************************

 $Project name: Basic MMI
 $Project code: BMI
 $Module:       SMS
 $File:         MmiHomezone.h
 $Revision:     1.0

 $Author:       Condat(UK)
 $Date:         25/10/00

********************************************************************************

 Description: Homezone functionality in MMI



********************************************************************************

 $History: MmiHomezone.h

    15/02/02            Original Condat(UK) BMI version.

    Jun 14, 2005 REF: MMI-FIX-30439 x0018858
    Description: The homezone/cityzone tags were not being displayed properly.
    Solution: Modified to save the tags properly in caches and also made the
    appropriate modifications to update the same properly during mobility.

 $End

*******************************************************************************/

/****************************************************************************
 *                                                                          *
 *   CONSTANTS                                                              *
 *                                                                          *
 ****************************************************************************/

#define HZ_ZONES_MAX                    4               // Max number of homezones the user can have
#define HZ_RECENT_MAX                   5               // Number of recent cells to be stored
#define HZ_CACHE_MAX                    21              // Size of cache for each homezone
#define HZ_DISTANCE_MAX                 100000          // Maximum distance in metres that user can be from centre of homezone

#define HZ_IDENTIFIER                   221             // Message ID that identifies a homezone CB
#define HZ_COORD_DIGITS                 6               // Number of digits in coordinates received in CB message
#define HZ_ACTIVE_FLAG                  0x01            // If homezone is active, first bit in byte is set
#define HZ_CITYZONE_FLAG                0x02            // If homezone is a cityzone, second bit in byte is set

#define HZ_SIM_PARAMETERS               0x6F60          // Field in SIM storing homezone parameters
#define HZ_SIM_PARAMETERS_SIZE          123             // Size of this field in bytes
#define HZ_SIM_FIRST_ZONE               17              // Offset from start of parameters file that first zone is found
#define HZ_SIM_ZONE_SIZE                27              // Size of each zone in bytes
#define HZ_SIM_CELL_CACHE               0x6F61          // First of series of caches storing homezone cells
#define HZ_SIM_CELL_CACHE_SIZE          4               // Size of each cache entry (there will be HZ_CACHE_MAX of these per zone)
#define HZ_NAME_LENGTH                  12              // Length of homezone name tag

#define HZ_NOT_IN_ZONE                  0xFF            // Value for current_zone when we aren't in a homezone

#define HZ_CB_NAME                      "Homezone"      // Homezone cell broadcast channel name

/****************************************************************************
 *                                                                          *
 *   Permitted Network Names                                                *
 *                                                                          *
 ****************************************************************************/

#define HZ_PERMITTED_NETWORKS           1


/****************************************************************************
 *                                                                          *
 *   Information storage for individual homezone                            *
 *   T_homezone                                                             *
 *                                                                          *
 ****************************************************************************/

typedef struct
{
    UBYTE   zoneID;         // The ID of the homezone
    BOOL    active;         // Whether the homezone is activated at the moment
    BOOL    cityzone;       // TRUE if the zone is a cityzone
    U32     X;              // The X position of its centre
    U32     Y;              // The Y position of its centre
    U32     Rsquared;       // The radius of the homezone, squared
    char    Tag[13];        // The text tag to be displayed when in the homezone
    USHORT  lac[HZ_CACHE_MAX];  // The cache of location area codes of cells known to be in this homezone
    USHORT  cid[HZ_CACHE_MAX];  // The cache of cell IDs known to be in this homezone
} T_homezone;


/****************************************************************************
 *                                                                          *
 *   General homezone information storage                                   *
 *   T_homezone_data                                                        *
 *                                                                          *
 ****************************************************************************/

typedef struct
{
    UBYTE           current_zone;                           // Current zone number (1 to HZ_ZONES_MAX). 0 if none.

    U32             current_X;                              // Coordinates (received from CB) of centre of current cell
    U32             current_Y;

    UBYTE           received;                               // Makes sure we have received all necessary data
    UBYTE           new_cell_res;                           // TRUE if a new cell reselection has just occurred
    USHORT          lac;
    USHORT          cid;

    UBYTE           recent_cell_index;                      // Location of recent cells that are within one of the user's homezones.
    USHORT          recent_cell[HZ_RECENT_MAX];             // These are used for quick lookup
    UBYTE           recent_cell_zone[HZ_RECENT_MAX];        // The homezone/cityzone of the recent cell

    T_homezone      homezone[HZ_ZONES_MAX];                 // The user's homezones, up to HZ_ZONES_MAX

    UBYTE           buffer[HZ_SIM_PARAMETERS_SIZE];         // Buffers for reading from or writing to the SIM
    UBYTE           buffer2[HZ_SIM_CELL_CACHE_SIZE];
} T_homezone_data;

typedef enum
{
    HZ_RECEIVED_CB = 1,
    HZ_RECEIVED_CELLRES = 2,
    HZ_RECEIVED_SIMDATA = 4,
    HZ_RECEIVED_ALL = 7,
    HZ_RECEIVED_HZ_OFF = 128                /* Homezone is switched off */
} HZ_RECEIVED_TYPE; /*a0393213 warnings removal-declaration requires a typedef name*/


typedef enum
{
    HZ_READ_ONCE_ONLY = 0,                  /* Only read SIM first time this function is called */
    HZ_READ_SIM_AGAIN = 1                   /* Read SIM any number of times */
} HZ_READ_TYPE;/*a0393213 warnings removal-declaration requires a typedef name*/

/****************************************************************************
 *                                                                          *
 *   FUNCTION PROTOTYPES                                                    *
 *                                                                          *
 ****************************************************************************/

void homezoneInit();

void homezoneCBData(char *message);

void homezoneReadSim(UBYTE read_again);

void homezoneReadSimCb(USHORT field, USHORT record, USHORT result);

void homezoneWriteSim(USHORT field, USHORT record);

void homezoneWriteSimCb(USHORT field, USHORT record, USHORT result);

//Jun 14, 2005 REF: MMI-FIX-30439 x0018858
// Added third argument to the function
//begin 30439
void homezoneUpdate(USHORT lac, USHORT cid, UBYTE keep);
//end 30439

void homezoneUpdateDisplay(void);

void homezoneActivateCB(void);
#endif