📄 dc550_phonesm_memory.c
字号:
display_writelineone( 0, " ");
display_writelineone( 0,
phonesm_infolanguage_getmarker_memorydial(
phonesm_memory_currentindex) );
display_writelineone( 4, phonesm_memory_digits );
}
else {
phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
phonesm_memory_digits );
}
return 0;
case KEYPAD_DIGIT_7:
phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
phonesm_infonumbers_getmemorynumber( 7, phonesm_memory_digits );
if( phonesm_memory_digits[0] ) {
phonesm_memory_currentindex = 7;
display_writelineone( 0, " ");
display_writelineone( 0,
phonesm_infolanguage_getmarker_memorydial(
phonesm_memory_currentindex) );
display_writelineone( 4, phonesm_memory_digits );
}
else {
phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
phonesm_memory_digits );
}
return 0;
case KEYPAD_DIGIT_8:
phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
phonesm_infonumbers_getmemorynumber( 8, phonesm_memory_digits );
if( phonesm_memory_digits[0] ) {
phonesm_memory_currentindex = 8;
display_writelineone( 0, " ");
display_writelineone( 0,
phonesm_infolanguage_getmarker_memorydial(
phonesm_memory_currentindex) );
display_writelineone( 4, phonesm_memory_digits );
}
else {
phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
phonesm_memory_digits );
}
return 0;
case KEYPAD_DIGIT_9:
phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
phonesm_infonumbers_getmemorynumber( 9, phonesm_memory_digits );
if( phonesm_memory_digits[0] ) {
phonesm_memory_currentindex = 9;
display_writelineone( 0, " ");
display_writelineone( 0,
phonesm_infolanguage_getmarker_memorydial(
phonesm_memory_currentindex) );
display_writelineone( 4, phonesm_memory_digits );
}
else {
phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
phonesm_memory_digits );
}
return 0;
// The other digit keys do nothing.
case KEYPAD_DIGIT_STAR:
case KEYPAD_DIGIT_POUND:
case KEYPAD_LOCAL_PAUSE:
return 0;
// The Volume Keys activate the Volume State
case KEYPAD_VOLUME_UP:
case KEYPAD_VOLUME_DOWN:
phonesm_activate_state(PHONESM_STATE_VOLUME);
return 1;
// These keys activate the Active State
case KEYPAD_FEATURE_01:
case KEYPAD_AUDIO_HEADSET:
case KEYPAD_AUDIO_SPEAKER:
phonesm_memory_savenumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
// These keys exit the Memory State
case KEYPAD_LOCAL_STORENUM:
case KEYPAD_LOCAL_PROGRAM:
case KEYPAD_FEATURE_02:
case KEYPAD_FEATURE_03:
case KEYPAD_FEATURE_04:
case KEYPAD_FEATURE_05:
case KEYPAD_FEATURE_06:
case KEYPAD_FEATURE_07:
case KEYPAD_FEATURE_08:
case KEYPAD_FEATURE_09:
case KEYPAD_FEATURE_10:
case KEYPAD_FEATURE_11:
case KEYPAD_FEATURE_VOICEMAIL:
case KEYPAD_LOCAL_EXIT:
case KEYPAD_LOCAL_SELECT:
case KEYPAD_LOCAL_SAVE:
case KEYPAD_FEATURE_HOLD:
case KEYPAD_FEATURE_RELEASE:
case KEYPAD_AUDIO_MUTE:
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
}
return 0;
}
/******************************************************************************
* FUNCTION: BOOL phonesm_memory_exec_modemcommand(DC550MDCMessage command)
******************************************************************************
* DESCRIPTION:
* This function is called when the phone receives a modem command while
* in the Memory State. This function returns 1 if the keypress causes a
* Phone SM state change and 0 otherwise. This function evaluates the
* command against every possible modem command. If code efficiency were
* not as much of a concern, this function might have been split into
* several functions.
*****************************************************************************/
BOOL phonesm_memory_exec_modemcommand(DC550MDCMessage command) {
switch(command) {
// The Reset commands will simply propagate down to the Idle State
case MDC_DMS_SOFT_RESET:
case MDC_DMS_HARD_RESET:
case MDC_DMS_SAVE_INDICATOR_RESET:
switch(phonesm_memory_exitstate) {
case PHONESM_STATE_IDLE:
phonesm_idle_exec_modemcommand(command);
return 0;
default:
// This should never happen
// Exit this state
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
// The Open Echo, Close Echo, Voice Off, Handset Off, Handsfree Off, Alert
// Off, and Buzzer Off commands should never be received in this state. If
// they are received, nothing happens.
case MDC_DMS_OPEN_ECHO:
case MDC_DMS_CLOSE_ECHO:
case MDC_DMS_VOICE_OFF:
case MDC_DMS_HANDSET_OFF:
case MDC_DMS_HANDSFREE_OFF:
case MDC_DMS_ALERT_OFF:
case MDC_DMS_BUZZER_OFF:
// These commands should do nothing
return 0;
// The commands that turn audio on will cause the phone to exit the Memory
// State. In general, these commands are used for incoming calls, incoming
// intercoms, and the like.
case MDC_DMS_VOICE_ON:
case MDC_DMS_HANDSET_ON:
case MDC_DMS_HANDSFREE_ON:
case MDC_DMS_ALERT_ON:
case MDC_DMS_BUZZER_ON:
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
// All of the LED commands will simply be passed down to the Idle State
case MDC_DMS_INDICATOR_KEY01_OFF:
case MDC_DMS_INDICATOR_KEY01_WINK:
case MDC_DMS_INDICATOR_KEY01_FLASH:
case MDC_DMS_INDICATOR_KEY01_ON:
case MDC_DMS_INDICATOR_KEY02_OFF:
case MDC_DMS_INDICATOR_KEY02_WINK:
case MDC_DMS_INDICATOR_KEY02_FLASH:
case MDC_DMS_INDICATOR_KEY02_ON:
case MDC_DMS_INDICATOR_KEY03_OFF:
case MDC_DMS_INDICATOR_KEY03_WINK:
case MDC_DMS_INDICATOR_KEY03_FLASH:
case MDC_DMS_INDICATOR_KEY03_ON:
case MDC_DMS_INDICATOR_KEY04_OFF:
case MDC_DMS_INDICATOR_KEY04_WINK:
case MDC_DMS_INDICATOR_KEY04_FLASH:
case MDC_DMS_INDICATOR_KEY04_ON:
case MDC_DMS_INDICATOR_KEY05_OFF:
case MDC_DMS_INDICATOR_KEY05_WINK:
case MDC_DMS_INDICATOR_KEY05_FLASH:
case MDC_DMS_INDICATOR_KEY05_ON:
case MDC_DMS_INDICATOR_KEY06_OFF:
case MDC_DMS_INDICATOR_KEY06_WINK:
case MDC_DMS_INDICATOR_KEY06_FLASH:
case MDC_DMS_INDICATOR_KEY06_ON:
case MDC_DMS_INDICATOR_KEY07_OFF:
case MDC_DMS_INDICATOR_KEY07_WINK:
case MDC_DMS_INDICATOR_KEY07_FLASH:
case MDC_DMS_INDICATOR_KEY07_ON:
case MDC_DMS_INDICATOR_KEY08_OFF:
case MDC_DMS_INDICATOR_KEY08_WINK:
case MDC_DMS_INDICATOR_KEY08_FLASH:
case MDC_DMS_INDICATOR_KEY08_ON:
case MDC_DMS_INDICATOR_KEY09_OFF:
case MDC_DMS_INDICATOR_KEY09_WINK:
case MDC_DMS_INDICATOR_KEY09_FLASH:
case MDC_DMS_INDICATOR_KEY09_ON:
case MDC_DMS_INDICATOR_KEY10_OFF:
case MDC_DMS_INDICATOR_KEY10_WINK:
case MDC_DMS_INDICATOR_KEY10_FLASH:
case MDC_DMS_INDICATOR_KEY10_ON:
case MDC_DMS_INDICATOR_KEY11_OFF:
case MDC_DMS_INDICATOR_KEY11_WINK:
case MDC_DMS_INDICATOR_KEY11_FLASH:
case MDC_DMS_INDICATOR_KEY11_ON:
case MDC_DMS_INDICATOR_KEY12_OFF: // The Idle State always owns the
case MDC_DMS_INDICATOR_KEY12_WINK: // Voicemail Key except when the
case MDC_DMS_INDICATOR_KEY12_FLASH: // Active State is active
case MDC_DMS_INDICATOR_KEY12_ON:
case MDC_DMS_INDICATOR_KEY13_OFF:
case MDC_DMS_INDICATOR_KEY13_WINK:
case MDC_DMS_INDICATOR_KEY13_FLASH:
case MDC_DMS_INDICATOR_KEY13_ON:
case MDC_DMS_INDICATOR_KEY14_OFF:
case MDC_DMS_INDICATOR_KEY14_WINK:
case MDC_DMS_INDICATOR_KEY14_FLASH:
case MDC_DMS_INDICATOR_KEY14_ON:
switch(phonesm_memory_exitstate) {
case PHONESM_STATE_IDLE:
phonesm_idle_exec_modemcommand(command);
return 0;
default:
// This should never happen
// Exit this state
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
// The display commands will cause the phone to exit the Memory State
case MDC_DMS_CLEAR_WORKING_BUFFER:
case MDC_DMS_CLEAR_DISPLAY:
case MDC_DMS_CLEAR_WB_LINE0:
case MDC_DMS_CLEAR_WB_LINE1:
case MDC_DMS_ENABLE_DIGIT_ECHOING_TYPE1:
case MDC_DMS_ENABLE_DIGIT_ECHOING_TYPE2:
case MDC_DMS_CLEAR_WB_IN12SECONDS:
case MDC_DMS_DISABLE_DISPLAY_CURSOR:
case MDC_DMS_DISABLE_DISPLAY_ECHOING:
case MDC_DMS_DISABLE_DISPLAY:
case MDC_DMS_POWER_DOWN_DISPLAY:
case MDC_DMS_ENABLE_DISPLAY:
case MDC_DMS_ENABLE_DISPLAY_CURSOR:
case MDC_DMS_DISPLAY_RESET:
case MDC_DMS_RESUME_DIGIT_ECHOING:
case MDC_DMS_TRANSMIT_DISPLAY_STATUS:
case MDC_DMS_WB_CURSOR_TO_P0:
case MDC_DMS_WB_CURSOR_TO_P24:
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
default:
if(command >= MDC_DMC_CHARACTER_MASK) {
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
else
// This is an unrecognized command.
return 0;
}
}
/******************************************************************************
* FUNCTION:
* BOOL phonesm_memory_exec_periodic(BOOL firstline, BOOL secondline)
******************************************************************************
* DESCRIPTION:
* This function is called periodically when the phone is in Memory State.
* This function does two things:
* 1. If the predial state is on top, decrement the period counter and exit
* the state if the period counter reaches 0
* 2. Propagate the command to the exit state if that exit state is the Idle
* State, and exit the state otherwise (this allows the Idle State to
* update the time and date display. It's a little sloppy, but it should
* work.
*****************************************************************************/
BOOL phonesm_memory_exec_periodic(BOOL firstline, BOOL secondline) {
if(firstline && secondline) {
// 1A: Decrement the period counter
phonesm_memory_periodtimeout--;
// 1B: If the period counter has reached 0, exit this state
if(!phonesm_memory_periodtimeout) {
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
}
// 2: If the exit state is the Idle State, propagate the periodic function
switch(phonesm_memory_exitstate) {
case PHONESM_STATE_IDLE:
phonesm_idle_exec_periodic(0, secondline);
return 0;
default:
// This should never happen
// Exit this state
phonesm_memory_discardnumber();
phonesm_deactivate_state(PHONESM_STATE_MEMORY);
return 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -