view src/aci2/bmi/mmiTimers.c @ 600:8f50b202e81f

board preprocessor conditionals: prep for more FC hw in the future This change eliminates the CONFIG_TARGET_FCDEV3B preprocessor symbol and all preprocessor conditionals throughout the code base that tested for it, replacing them with CONFIG_TARGET_FCFAM or CONFIG_TARGET_FCMODEM. These new symbols are specified as follows: CONFIG_TARGET_FCFAM is intended to cover all hardware designs created by Mother Mychaela under the FreeCalypso trademark. This family will include modem products (repackagings of the FCDEV3B, possibly with RFFE or even RF transceiver changes), and also my desired FreeCalypso handset product. CONFIG_TARGET_FCMODEM is intended to cover all FreeCalypso modem products (which will be firmware-compatible with the FCDEV3B if they use TI Rita transceiver, or will require a different fw build if we switch to one of Silabs Aero transceivers), but not the handset product. Right now this CONFIG_TARGET_FCMODEM preprocessor symbol is used to conditionalize everything dealing with MCSI. At the present moment the future of FC hardware evolution is still unknown: it is not known whether we will ever have any beyond-FCDEV3B hardware at all (contingent on uncertain funding), and if we do produce further FC hardware designs, it is not known whether they will retain the same FIC modem core (triband), if we are going to have a quadband design that still retains the classic Rita transceiver, or if we are going to switch to Silabs Aero II or some other transceiver. If we produce a quadband modem that still uses Rita, it will run exactly the same fw as the FCDEV3B thanks to the way we define TSPACT signals for the RF_FAM=12 && CONFIG_TARGET_FCFAM combination, and the current fcdev3b build target will be renamed to fcmodem. OTOH, if that putative quadband modem will be Aero-based, then it will require a different fw build target, the fcdev3b target will stay as it is, and the two targets will both define CONFIG_TARGET_FCFAM and CONFIG_TARGET_FCMODEM, but will have different RF_FAM numbers. But no matter which way we are going to evolve, it is not right to have conditionals on CONFIG_TARGET_FCDEV3B in places like ACI, and the present change clears the way for future evolution.
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 01 Apr 2019 01:05:24 +0000
parents 3c2acfa1a72f
children
line wrap: on
line source

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

          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 (6349)
 $Module:   MMI
 $File:       MmiTimers.c
 $Revision:   1.0

 $Author:   Condat(UK)
 $Date:       22/02/01

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

 Description: This handles the storage of call times.


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

 $History: MmiTimers.c

  25/10/00      Original Condat(UK) BMI version.
  16/06/03      SPR#2142 - SH - Merged in MC's fix from 1.6 branch

 $End

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

                                Include files

*******************************************************************************/
#define ENTITY_MFW

/* includes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#if defined (NEW_FRAME)

#include "typedefs.h"
#include "vsi.h"
#include "pei.h"
#include "custom.h"
#include "gsm.h"

#else

#include "STDDEFS.H"
#include "custom.h"
#include "gsm.h"
#include "vsi.h"

#endif

#include "mfw_sys.h"
#include "prim.h"

#include "vsi.h"

#include "mfw_mfw.h"
#include "mfw_win.h"

#include "mfw_kbd.h"
/* SPR#1428 - SH - New Editor changes */
#ifndef NEW_EDITOR
#include "mfw_edt.h"
#endif
#include "mfw_lng.h"
#include "mfw_tim.h"
#include "mfw_icn.h"
#include "mfw_mnu.h"
#include "mfw_phb.h"
#include "mfw_cm.h"
#include "mfw_sim.h"
#include "mfw_nm.h"
#include "mfw_sat.h"
#include "mfw_phb.h"
#include "ksd.h"
#include "psa.h"
#include "mfw_sms.h"
#include "mfw_sat.h"

#include "dspl.h"

#include "gdi.h" //ES!!

#include "MmiMmi.h"
#include "MmiDummy.h"
#include "MmiDialogs.h"
#include "MmiLists.h"

#include "MmiSoftKeys.h"
#include "Mmiicons.h"
#include "MmiMenu.h"
#include "MmiMain.h"
#include "MmiIdle.h"
#include "MmiStart.h"
#include "MmiPins.h"
#include "MmiSounds.h"
#include "audio.h"
#include "cus_aci.h"

#include "MmiTimers.h"
#include "mfw_ffs.h"

#include "mmiColours.h"

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

                                Local Function Prototypes

*******************************************************************************/
/*SPR 2142 - removed timer_create() and timer_destroy() prototypes*/
unsigned long getLastCallDuration(void);  // RAVI
void getTimerString(unsigned long time, char* timeString);
void setIncomingCallsDuration(long call_time);
unsigned long getIncomingCallsDuration( void );
void setOutgoingCallsDuration(long call_time);
unsigned long getOutgoingCallsDuration(void);  // RAVI
static int timer_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
static int timer_reset_OK_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
void reset_timer_OK(T_MFW_HND parent, UBYTE Identifier);
void reset_timer(T_MFW_HND parent);

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

                                Local Data

*******************************************************************************/
static char timeString[30]; //static string for dialogs

 UBYTE timer_type;/*SPR 2142 created global variable*/

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

                               Public Methods

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

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

 $Function:  setLastCallDuration

 $Description:   writes the duration of the last call to PCM and adds that duration to the
        outgoing or incoming call total.

 $Returns:    none.

 $Arguments:  The call time and the call's direction (incoming or outgoing)

*******************************************************************************/
void setLastCallDuration(long call_time, T_MFW_CM_CALL_DIR call_direction)
{

  TRACE_FUNCTION("setLastCallDuration()");

  FFS_flashData.last_call_duration = call_time;



    if (call_direction == MFW_CM_MTC)
      setIncomingCallsDuration(call_time);
    if (call_direction == MFW_CM_MOC)
      setOutgoingCallsDuration(call_time);

  return;
}

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

 $Function:   timerLastCall

 $Description:  handles user selction of "Last Call" in Call Timers Menu.
 $Returns:    status int

 $Arguments:  menu and menu item (neither used)

*******************************************************************************/
int timerLastCall(MfwMnu* m, MfwMnuItem* i)
{ T_MFW_HND       parent        = mfwParent( mfw_header() );

    T_DISPLAY_DATA display_info;


  memset(timeString,'\0',sizeof(timeString));

  timer_type = LAST_CALL;

  TRACE_FUNCTION("timerLastCall()");
    getTimerString((int)getLastCallDuration(), (char*)timeString);

	dlg_initDisplayData_TextStr( &display_info, TxtSoftOK, TxtReset, timeString,  NULL, COLOUR_STATUS_OKRESET);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) timer_cb, SIX_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );

    /* Call Info Screen
    */
    
    info_dialog( parent, &display_info );


    return MFW_EVENT_CONSUMED;

}

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

 $Function:   timerIncomingCalls

 $Description:  handles user selction of "Incoming Calls" in Call Timers Menu.
 $Returns:    status int

 $Arguments:  menu and menu item (neither used)

*******************************************************************************/
int timerIncomingCalls(MfwMnu* m, MfwMnuItem* i)
{ T_MFW_HND       parent        = mfwParent( mfw_header() );
    T_DISPLAY_DATA display_info;

    //clear the editor-buffer before

    timer_type = INCOMING_CALLS;
  TRACE_FUNCTION("timerLastCall()");
    getTimerString((int)getIncomingCallsDuration(), (char*)timeString);

	dlg_initDisplayData_TextStr( &display_info, TxtSoftOK, TxtReset, timeString,  NULL, COLOUR_STATUS_OKRESET);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) timer_cb, SIX_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );

    /* Call Info Screen
    */
    info_dialog( parent, &display_info );


    return MFW_EVENT_CONSUMED;

}

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

 $Function:   timerOutgoingCalls

 $Description:  handles user selction of "Outgoing Calls" in Call Timers Menu.
 $Returns:    status int

 $Arguments:  menu and menu item (neither used)

*******************************************************************************/
int timerOutgoingCalls(MfwMnu* m, MfwMnuItem* i)
{ T_MFW_HND       parent        = mfwParent( mfw_header() );

    T_DISPLAY_DATA display_info;

    //clear the editor-buffer before
  memset(timeString,'\0',sizeof(timeString));

  timer_type = OUTGOING_CALLS;

  TRACE_EVENT("timerLastCall()");
    getTimerString((int)getOutgoingCallsDuration(), (char*)timeString);

	dlg_initDisplayData_TextStr( &display_info, TxtSoftOK, TxtReset, timeString,  NULL, COLOUR_STATUS_OKRESET);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) timer_cb, SIX_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );

    /* Call Info Screen
    */
    info_dialog( parent, &display_info );


    return MFW_EVENT_CONSUMED;

}





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

 $Function:     timer_cb

 $Description:  Callback func for the info display screen

 $Returns:    status int

 $Arguments:  Window, Identifier (which timer), Reason (which key pressed)

*******************************************************************************/
static int timer_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason)
{

  switch (Reason)
  {
    case INFO_KCD_LEFT: 

    	break;

    case INFO_KCD_RIGHT: 
    	reset_timer_OK(win, timer_type);
    	break;
  }

  return MFW_EVENT_CONSUMED;
}

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

 $Function:   setIncomingCallsDuration

 $Description:  Adds call time to Incoming Calls total
 $Returns:    none

 $Arguments:  call time

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

void setIncomingCallsDuration(long call_time)
{
  TRACE_FUNCTION("setIncomingCallsDuration()");

    //add call time to existing call time
    call_time = call_time + getIncomingCallsDuration();
    //save new value to flash
    FFS_flashData.incoming_calls_duration = call_time;
    flash_write();

  return;
}

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

 $Function:   setOutgoingCalls

 $Description:  Adds call time to Outgoing Calls total
 $Returns:    none

 $Arguments:  call time

*******************************************************************************/
void setOutgoingCallsDuration(long call_time)
{

  TRACE_FUNCTION("setOutgoingCallsDuration()");
  //add call time to current total
    call_time = call_time + getOutgoingCallsDuration();
    FFS_flashData.outgoing_calls_duration = call_time;
    //write to flash
    flash_write();


  return;

}


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

 $Function:   reset_timer_OK

 $Description:  displays "Are you sure you want to reset this timer" window
 $Returns:    none

 $Arguments:  parent window, identifier (which timer)

*******************************************************************************/
void reset_timer_OK(T_MFW_HND parent, UBYTE identifier)
{
  T_DISPLAY_DATA display_info;


	dlg_initDisplayData_TextId( &display_info, TxtSoftOK, TxtCancel, TxtPressOk, TxtReset, COLOUR_STATUS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) timer_reset_OK_cb, FOUR_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );
    display_info.Identifier = identifier;

    info_dialog( parent, &display_info );
}


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

 $Function:   reset_timer_OK_cb

 $Description:  Callback function for "OK to Delete timer" window
 $Returns:    status int

 $Arguments:  window, identifier (which timer), Reason (which key pressed)

*******************************************************************************/
static int timer_reset_OK_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason)
{

  switch (Reason)
  {
    case INFO_KCD_LEFT:
	    {
			switch (Identifier)
			{ 
		      	case LAST_CALL: 
		      		setLastCallDuration(0, MFW_CM_INV_DIR);
		      		reset_timer(win);
		      		/*SPR 2142, removed window destruction*/
		      		break;
		        case INCOMING_CALLS: 
		        	resetIncomingCallsDuration();
		        	reset_timer(win);
		        	/*SPR 2142, removed window destruction*/
		        	break;
		        case OUTGOING_CALLS: 
		        	resetOutgoingCallsDuration();
		        	reset_timer(win);
		        	/*SPR 2142, removed window destruction*/
		        	break;
			}
	    }
    	break;

    case INFO_KCD_RIGHT: 
    	{
    		/*SPR 2142, removed window destruction*/
    	}
    	break;
  }

  return MFW_EVENT_CONSUMED;
}


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

 $Function:   reset_timer

 $Description:  Dsiplays confirmation that timer has been reset.
 $Returns:    none

 $Arguments:  parent window

*******************************************************************************/
void reset_timer(T_MFW_HND parent)
{
  T_DISPLAY_DATA display_info;

	dlg_initDisplayData_TextId( &display_info, TxtNull, TxtNull, TxtTimerReset, TxtNull, COLOUR_STATUS);
	dlg_initDisplayData_events( &display_info, (T_VOID_FUNC) NULL, THREE_SECS, KEY_CLEAR|KEY_LEFT|KEY_RIGHT );

    info_dialog( parent, &display_info );
}

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

 $Function:   resetIncomingCallsDuration

 $Description:  Resets incoming call total to 0
 $Returns:    nothing

 $Arguments:  none

*******************************************************************************/
 void resetIncomingCallsDuration( void )
{
  TRACE_FUNCTION("resetIncomingCallsDuration()");
  FFS_flashData.incoming_calls_duration =0;
  flash_write();

 }


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

 $Function:   resetOutgoingCallsDuration

 $Description:  Resets outgoing call total to 0
 $Returns:    nothing

 $Arguments:  none

*******************************************************************************/
  void resetOutgoingCallsDuration( void )
{

  TRACE_FUNCTION("resetOutgoingCallsDuration()");

    FFS_flashData.outgoing_calls_duration = 0;
    flash_write();

  return;
}

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

 $Function:   getLastCallDuration

 $Description:  gets the length of the last call made/received from PCM storage
 $Returns:    length of call (long)

 $Arguments:  none

*******************************************************************************/
unsigned long getLastCallDuration()
{
 
    return FFS_flashData.last_call_duration;;
}

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

 $Function:   getIncomingCallsDuration

 $Description:  gets the total length of incoming calls received from PCM storage
 $Returns:    length of calls (long)

 $Arguments:  none

*******************************************************************************/
unsigned long getIncomingCallsDuration()
{
  
    return FFS_flashData.incoming_calls_duration;
}

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

 $Function:   getOutgoingCallsDuration

 $Description:  gets the total length of incoming calls received from PCM storage
 $Returns:    length of calls (long)

 $Arguments:  none

*******************************************************************************/
unsigned long getOutgoingCallsDuration()
{

    return FFS_flashData.outgoing_calls_duration;
}


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

 $Function:   getTimerString

 $Description:  Converts a time in seconds into a string denoting hours, minutes and seconds

 $Returns:    none,

 $Arguments:  time pointer to string to store time

*******************************************************************************/
void getTimerString(unsigned long time, char* timeString)
{
//  char* debug_buf;  // RAVI
  int hour,min,sec;
  TRACE_FUNCTION("getTimerString()");
  hour = time/3600;
  min = (time-hour*3600)/60;
  sec = (time-hour*3600-min*60);
  //this prevents the time being too wide for the LCD display
  if (hour > 999999)
    hour = 999999;
  sprintf(timeString,"%02d:%02d:%02d",hour,min,sec);

}