⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dc550_phonesm_program.c

📁 一款经典的数字电话设计资料
💻 C
📖 第 1 页 / 共 5 页
字号:
/*****************************************************************************/
/*  CONFIDENTIAL                                                             */
/*  Sigpro Copyright 2003, All rights reserved                               */
/*****************************************************************************/
/*  CLIENT:  Telematrix                                                      */
/*  PROJECT: DC550 Digital Centrex Phone                                     */
/*  FILE:    dc550_phonesm_program.c                                         */
/*****************************************************************************/
/*  The Program State becomes activated when someone presses the Program key */
/*  while in the Idle State.                                                 */
/*****************************************************************************/

#define __DC550_PHONESM_PROGRAM_EXTERN__
#include "dc550_phonesm_program.h"
#include "dc550_phonesm.h"
#include "dc550_phonesm_idle.h"
#include "dc550_phonesm_infosettings.h"
#include "dc550_phonesm_infonumbers.h"
#include "dc550_phonesm_infolanguage.h"
#include "dc550_phonesm_infolevels.h"
#include "dc550_phonesm_infoonetouch.h"
#include "dc550_display.h"
#include "dc550_audio.h"
#include "dc550_leddriver.h"


/******************************************************************************
 *  GLOBAL VARIABLES
 *****************************************************************************/
PHONESM_STATE_E phonesm_program_exitstate;
DC550InterruptCounter phonesm_program_periodtimeout;
BOOL phonesm_program_programenabled;
PHONESM_PROGRAM_MENU_E phonesm_program_currentmenu;

DC550Language phonesm_program_enteredlanguage;
int phonesm_program_currentmemoryindex;
char phonesm_program_currentmemorynumber[PHONENUMBER_ARRAY_SIZE];
char phonesm_program_currentmemorynumbersize;
DC550Level phonesm_program_currentvolumelevel;
PHONESM_SPEAKINGDEVICE_E phonesm_program_entereddevice;
BOOL phonesm_program_enteredonetouch;
char phonesm_program_enteredpinnumber[PHONENUMBER_ARRAY_SIZE];
char phonesm_program_enteredpinnumbersize;
DC550TimeUnit phonesm_program_enteredwaittime_bcd;
PHONESM_TIMEDATEFORMAT_E phonesm_program_enteredformat;
DC550TimeUnit phonesm_program_enteredyear_bcd;
DC550TimeUnit phonesm_program_enteredmonth_bcd;
DC550TimeUnit phonesm_program_entereddate_bcd;
DC550TimeUnit phonesm_program_enteredhour_bcd;
DC550TimeUnit phonesm_program_enteredminute_bcd;
BOOL phonesm_program_enteredampm;
BOOL phonesm_program_12hourmode;
BOOL phonesm_program_enteredpredial;
BOOL phonesm_program_enteredcalltimer;
BOOL phonesm_program_enteredautomute;
DC550LCDCoordinate phonesm_program_cursorfield;
BOOL phonesm_program_cursoron;


/******************************************************************************
 *  FUNCTION: void phonesm_program_init(void) {
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called to initialize all of the Program State variables.
 *****************************************************************************/
void phonesm_program_init(void) {
  phonesm_program_exitstate = PHONESM_STATE_IDLE;
  phonesm_program_periodtimeout = 0;
  phonesm_program_programenabled = FALSE;
  phonesm_program_currentmenu = MENU_LANGUAGE_SELECT;
  phonesm_program_cursoron = FALSE;
}


/******************************************************************************
 *  FUNCTION: void phonesm_program_state_enter(void)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called whenever the telephone enters the Program State.
 *****************************************************************************/
void phonesm_program_state_enter(void) {

  phonesm_program_periodtimeout = PHONESM_PROGRAM_TIMEOUT;

  // Write the predialed digits on the first line of the display
  phonesm_program_menu_display();
  
  // Turn on LCD Backlight
  leddriver_setstate(LED_INDICATOR_BACKLIGHT, LED_STATE_ON);
}


/******************************************************************************
 *  FUNCTION: void phonesm_program_state_exit(void)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called when the telephone exits the Program State but
 *  wishes to save the number.
 *****************************************************************************/
void phonesm_program_state_exit(void) {
  if(phonesm_program_cursoron) {
    display_disablecursor();
    phonesm_program_cursoron = FALSE;
  }
  phonesm_program_programenabled = FALSE;
  phonesm_program_currentmenu = MENU_LANGUAGE_SELECT;
}


/******************************************************************************
 *  FUNCTION: void phonesm_exec_hookswitch(unsigned int updown)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called when the hookswitch goes up or down while the
 *  phone is in Program State.  It does nothing when the hookswitch goes down,
 *  but it saves the number and exits the state when the hookswitch goes up.
 *****************************************************************************/
BOOL phonesm_program_exec_hookswitch(BOOL updown) {
  // This checks if the hookswitch went down
  if(updown == HOOKSTATE_DOWN) {
    // Do nothing
    return 0;
  }
  
  // This checks if the hookswitch went up
  else {
    phonesm_program_state_exit();
    phonesm_deactivate_state(PHONESM_STATE_PROGRAM);
    return 1;
  }
}


/******************************************************************************
 *  FUNCTION: BOOL phonesm_program_exec_keypress(unsigned int key, BOOL updown)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called whenever a key goes up or down while the phone
 *  is in the Program State.  Most keys exit the Program State, but some
 *  activate the Contrast and Volume States, and the digit keys and Pause key
 *  are obviously retained as program digits.
 *****************************************************************************/
BOOL phonesm_program_exec_keypress(unsigned int key, BOOL updown) {
  // Declare function variables
  int i;

  // Currently the Program State will only respond to key down messages
  if(updown == KEYSTATE_DOWN) {
    switch(key) {

      /***** PROGRAM KEY *****************************************************/
      case KEYPAD_LOCAL_PROGRAM:
        if(phonesm_program_programenabled) {
          phonesm_program_state_exit();
          phonesm_deactivate_state(PHONESM_STATE_PROGRAM);
        }
        else
          phonesm_program_programenabled = TRUE;
        return 0;

      /***** EXIT KEY AND RELEASE KEY ****************************************/
      case KEYPAD_LOCAL_EXIT:
      case KEYPAD_FEATURE_RELEASE:
        phonesm_program_state_exit();
        phonesm_deactivate_state(PHONESM_STATE_PROGRAM);
        return 0;

      /***** SELECT KEY ******************************************************/
      case KEYPAD_LOCAL_SELECT:
        phonesm_program_periodtimeout = PHONESM_PROGRAM_TIMEOUT;
        switch(phonesm_program_currentmenu) {
          case MENU_LANGUAGE_SELECT:
            phonesm_program_currentmenu = MENU_LANGUAGE_ENTRY;
            phonesm_program_enteredlanguage =
              phonesm_infolanguage_getlanguage();
            phonesm_program_menu_display();
            break;
          case MENU_MEMORY_SELECT:
            phonesm_program_currentmenu = MENU_MEMORY_ENTRY;
            phonesm_program_currentmemoryindex = 0;
            phonesm_infonumbers_getmemorynumber( 0,
              phonesm_program_currentmemorynumber);
            phonesm_program_cursoron = FALSE;
            phonesm_program_menu_display();
            break;
          case MENU_ALERTERVOLUME_SELECT:
            phonesm_program_currentmenu = MENU_ALERTERVOLUME_ENTRY;
            phonesm_program_currentvolumelevel =
              phonesm_infolevels_getalertervolume();
            phonesm_program_menu_display();
            break;
          case MENU_HANDSETVOLUME_SELECT:
            phonesm_program_currentmenu = MENU_HANDSETVOLUME_ENTRY;
            phonesm_program_currentvolumelevel = 
              phonesm_infolevels_gethandsetvolume();
            phonesm_program_menu_display();
            break;
          case MENU_HEADSETVOLUME_SELECT:
            phonesm_program_currentmenu = MENU_HEADSETVOLUME_ENTRY;
            phonesm_program_currentvolumelevel = 
              phonesm_infolevels_getheadsetvolume();
            phonesm_program_menu_display();
            break;
          case MENU_SPEAKERVOLUME_SELECT:
            phonesm_program_currentmenu = MENU_SPEAKERVOLUME_ENTRY;
            phonesm_program_currentvolumelevel = 
              phonesm_infolevels_getspeakervolume();
            phonesm_program_menu_display();
            break;
          case MENU_DEFAULTDEVICE_SELECT:
            phonesm_program_currentmenu = MENU_DEFAULTDEVICE_ENTRY;
            phonesm_program_entereddevice =
              phonesm_infosettings_getdefaultdevice();
            phonesm_program_menu_display();
            break;
          case MENU_ONETOUCH_SELECT:
            phonesm_program_currentmenu = MENU_ONETOUCH_ENTRY;
            phonesm_program_enteredonetouch = phonesm_infoonetouch_getenabled();
            phonesm_program_menu_display();
            break;
          case MENU_PINNUMBER_SELECT:
            phonesm_program_currentmenu = MENU_PINNUMBER_ENTRY;
            phonesm_infoonetouch_getpin(phonesm_program_enteredpinnumber);
            for(i = 0; (i < PHONENUMBER_MAX_LENGTH) &&
                       (phonesm_program_enteredpinnumber[i] != 0); i++ )
              phonesm_program_enteredpinnumber[i] = '*';
            phonesm_program_cursoron = FALSE;
            phonesm_program_menu_display();
            break;
          case MENU_SECONDSWAIT_SELECT:
            phonesm_program_currentmenu = MENU_SECONDSWAIT_ENTRY;
            phonesm_program_enteredwaittime_bcd =
              phonesm_infoonetouch_getwaitseconds_bcd();
            phonesm_program_cursoron = FALSE;
            phonesm_program_menu_display();
            break;
          case MENU_TIMEDATEFORMAT_SELECT:
            phonesm_program_currentmenu = MENU_TIMEDATEFORMAT_ENTRY;
            phonesm_program_enteredformat =
              phonesm_infosettings_gettimedateformat();
            phonesm_program_menu_display();
            break;
          case MENU_TIMEDATESET_SELECT:
            phonesm_program_currentmenu = MENU_TIMEDATESET_ENTRY;
            phonesm_program_enteredmonth_bcd = 0xFF;
            phonesm_program_entereddate_bcd = 0xFF;
            phonesm_program_enteredyear_bcd = 0xFF;
            phonesm_program_enteredhour_bcd = 0xFF;
            phonesm_program_enteredminute_bcd = 0xFF;
            phonesm_program_12hourmode = 1;
            phonesm_program_enteredampm = 0;
            phonesm_program_cursorfield = 0;
            phonesm_program_menu_display();
            break;
          case MENU_PREDIAL_SELECT:
            phonesm_program_currentmenu = MENU_PREDIAL_ENTRY;
            phonesm_program_enteredpredial =
              phonesm_infosettings_getpredialenabled();
            phonesm_program_menu_display();
            break;
          case MENU_CALLTIMER_SELECT:
            phonesm_program_currentmenu = MENU_CALLTIMER_ENTRY;
            phonesm_program_enteredcalltimer = 
              phonesm_infosettings_getcalltimerenabled();
            phonesm_program_menu_display();
            break;
          case MENU_AUTOMUTE_SELECT:
            phonesm_program_currentmenu = MENU_AUTOMUTE_ENTRY;
            phonesm_program_enteredautomute = 
              phonesm_infosettings_getautomuteenabled();
            phonesm_program_menu_display();
            break;
          case MENU_MEMORY_ENTRY:
            if( !phonesm_program_cursoron ) {
              phonesm_program_cursoron = TRUE;
              phonesm_program_cursorfield = 0;
              phonesm_program_currentmemorynumber[0] = 0;
              phonesm_program_currentmemorynumbersize = 0;
              phonesm_program_menu_display();
            }
            break;
          case MENU_PINNUMBER_ENTRY:
            if( !phonesm_program_cursoron ) {
              phonesm_program_cursoron = TRUE;
              phonesm_program_cursorfield = 0;
              phonesm_program_enteredpinnumber[0] = 0;
              phonesm_program_enteredpinnumbersize = 0;
              phonesm_program_menu_display();
            }
            break;
          case MENU_LANGUAGE_ENTRY:
          case MENU_ALERTERVOLUME_ENTRY:
          case MENU_HANDSETVOLUME_ENTRY:
          case MENU_HEADSETVOLUME_ENTRY:
          case MENU_SPEAKERVOLUME_ENTRY:
          case MENU_DEFAULTDEVICE_ENTRY:
          case MENU_ONETOUCH_ENTRY:
          case MENU_SECONDSWAIT_ENTRY:
          case MENU_TIMEDATEFORMAT_ENTRY:
          case MENU_TIMEDATESET_ENTRY:
          case MENU_PREDIAL_ENTRY:
          case MENU_CALLTIMER_ENTRY:
            break;
        }        
        return 0;

      /***** SAVE KEY ********************************************************/
      case KEYPAD_LOCAL_SAVE:
        phonesm_program_periodtimeout = PHONESM_PROGRAM_TIMEOUT;
        switch(phonesm_program_currentmenu) {
          case MENU_LANGUAGE_SELECT:
          case MENU_MEMORY_SELECT:
          case MENU_ALERTERVOLUME_SELECT:
          case MENU_HANDSETVOLUME_SELECT:
          case MENU_HEADSETVOLUME_SELECT:
          case MENU_SPEAKERVOLUME_SELECT:
          case MENU_DEFAULTDEVICE_SELECT:
          case MENU_ONETOUCH_SELECT:
          case MENU_PINNUMBER_SELECT:
          case MENU_SECONDSWAIT_SELECT:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -