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

📄 dc550_phonesm_predial.c

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

#define __DC550_PHONESM_PREDIAL_EXTERN__
#include "dc550_phonesm_predial.h"
#include "dc550_phonesm.h"
#include "dc550_phonesm_idle.h"
#include "dc550_phonesm_infosettings.h"
#include "dc550_phonesm_infonumbers.h"
#include "dc550_display.h"
#include "dc550_leddriver.h"


/******************************************************************************
 *  GLOBAL VARIABLES
 *****************************************************************************/
PHONESM_STATE_E phonesm_predial_exitstate;
DC550InterruptCounter phonesm_predial_periodtimeout;
char phonesm_predial_digits[PHONENUMBER_ARRAY_SIZE];
char phonesm_predial_numberofdigits;
BOOL phonesm_predial_retrievedstorenumber;


/******************************************************************************
 *  FUNCTION: void phonesm_predial_init(void) {
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called to initialize all of the Predial State variables.
 *****************************************************************************/
void phonesm_predial_init(void) {
  phonesm_predial_exitstate = PHONESM_STATE_IDLE;
  phonesm_predial_periodtimeout = 0;
  phonesm_predial_digits[0] = 0;
  phonesm_predial_numberofdigits = 0;
  phonesm_predial_retrievedstorenumber = FALSE;
}


/******************************************************************************
 *  FUNCTION: void phonesm_predial_state_enter(void)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called whenever the telephone enters the Predial State.
 *****************************************************************************/
void phonesm_predial_state_enter(void) {
  // Declare function variables
  char timebuffer[TIMEDATE_ARRAY_SIZE];

  // Refresh the timeout
  phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;

  // Clear the display
  display_cleardisplay();
  
  // Write the predialed digits on the first line of the display
  display_writelineone( 0, phonesm_predial_digits );
  
  // Get the time and display it
  phonesm_infosettings_getformattedtime(timebuffer);
  display_writelinetwo( (24 - TIMEDATE_STRING_LENGTH), timebuffer);
  
  // Turn on LCD Backlight
  leddriver_setstate(LED_INDICATOR_BACKLIGHT, LED_STATE_ON);
}


/******************************************************************************
 *  FUNCTION: void phonesm_predial_savenumber(void)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called when the telephone exits the Predial State but
 *  wishes to save the number.
 *****************************************************************************/
void phonesm_predial_savenumber(void) {
  phonesm_infonumbers_setpredialnumber(phonesm_predial_digits);
  phonesm_predial_digits[0] = 0;
  phonesm_predial_numberofdigits = 0;
  phonesm_predial_retrievedstorenumber = FALSE;
}


/******************************************************************************
 *  FUNCTION: void phonesm_predial_discardnumber(void)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called when the telephone exits the Predial State and
 *  does not wish to save the number.
 *****************************************************************************/
void phonesm_predial_discardnumber(void) {
  phonesm_predial_digits[0] = 0;
  phonesm_predial_numberofdigits = 0;
  phonesm_predial_retrievedstorenumber = FALSE;
}


/******************************************************************************
 *  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 Predial 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_predial_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 {
    // Save the number, exit the Predial State
    phonesm_predial_savenumber();
    phonesm_deactivate_state(PHONESM_STATE_PREDIAL);
    return 1;
  }
}


/******************************************************************************
 *  FUNCTION: BOOL phonesm_predial_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 Predial State.  Most keys exit the Predial State, but some
 *  activate the Contrast and Volume States, and the digit keys and Pause key
 *  are obviously retained as predial digits.
 *****************************************************************************/
BOOL phonesm_predial_exec_keypress(unsigned int key, BOOL updown) {
  int i;
  char storenumberbuffer[PHONENUMBER_ARRAY_SIZE];

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

      // The digit keys reset the timeout and are saved as predial digits if
      // there is enought room
      case KEYPAD_DIGIT_0:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '0';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_1:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '1';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_2:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '2';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_3:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '3';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_4:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '4';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_5:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '5';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_6:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '6';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_7:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '7';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_8:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '8';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_9:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '9';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_STAR:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '*';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_DIGIT_POUND:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = '#';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
      case KEYPAD_LOCAL_PAUSE:
        phonesm_predial_periodtimeout = PHONESM_PREDIAL_TIMEOUT;
        if(phonesm_predial_numberofdigits < PHONENUMBER_MAX_LENGTH) {
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 'P';
          phonesm_predial_numberofdigits++;
          phonesm_predial_digits[phonesm_predial_numberofdigits] = 0;
          display_writelineone( 0, phonesm_predial_digits );
        }
        return 0;
        
      case KEYPAD_LOCAL_STORENUM:

⌨️ 快捷键说明

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