📄 dc550_phonesm_predial.c
字号:
/*****************************************************************************/
/* 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 + -