📄 dc550_phonesm_active.c
字号:
return 0;
}
/******************************************************************************
* FUNCTION: BOOL phonesm_active_exec_modemcommand(DC550MDCMessage command)
******************************************************************************
* DESCRIPTION:
* This function is called when the phone receives a modem command while
* in the Active State. This function returns 1 if the keypress causes a
* Phone SM state change and 0 otherwise.
*****************************************************************************/
BOOL phonesm_active_exec_modemcommand(DC550MDCMessage command) {
// Declare local variables
int i;
switch(command) {
/***** DMS Primary Set Commands ******************************************/
case MDC_DMS_SOFT_RESET:
leddriver_setstate(LED_INDICATOR_FEATURE01, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE02, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE03, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE04, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE05, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE06, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE07, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE08, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE09, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE10, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_FEATURE11, LED_STATE_OFF);
phonesm_infoonetouch_setledstate(LED_STATE_OFF);
return 0;
case MDC_DMS_SAVE_INDICATOR_RESET:
case MDC_DMS_HARD_RESET:
phonesm_active_state_exit();
if(phonesm_active_pendingonhook) {
phonesm_active_pendingonhook = 0;
switch(phonesm_active_pendingdevice) {
case PHONESM_SPEAKINGDEVICE_NONE:
phonesm_deactivate_state(PHONESM_STATE_ACTIVE);
return 1;
case PHONESM_SPEAKINGDEVICE_ALERTER:
phonesm_active_pendingdevice =
PHONESM_SPEAKINGDEVICE_NONE;
phonesm_deactivate_state(PHONESM_STATE_ACTIVE);
return 1;
case PHONESM_SPEAKINGDEVICE_HANDSET:
phonesm_active_pendingdevice =
PHONESM_SPEAKINGDEVICE_NONE;
phonesm_active_exec_hookswitch(HOOKSTATE_UP);
return 0;
case PHONESM_SPEAKINGDEVICE_HEADSET:
phonesm_active_pendingdevice =
PHONESM_SPEAKINGDEVICE_NONE;
phonesm_active_exec_keypress(KEYPAD_AUDIO_HEADSET, KEYSTATE_DOWN);
// phonesm_active_exec_keypress(KEYPAD_AUDIO_HEADSET, KEYSTATE_UP);
return 0;
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
phonesm_active_pendingdevice =
PHONESM_SPEAKINGDEVICE_NONE;
phonesm_active_exec_keypress(KEYPAD_AUDIO_SPEAKER, KEYSTATE_DOWN);
// phonesm_active_exec_keypress(KEYPAD_AUDIO_SPEAKER, KEYSTATE_UP);
return 0;
}
return 0;
}
else if(phonesm_active_pendingoffhook) {
phonesm_active_pendingoffhook = 0;
phonesm_deactivate_state(PHONESM_STATE_ACTIVE);
return 1;
}
else {
phonesm_deactivate_state(PHONESM_STATE_ACTIVE);
return 1;
}
case MDC_DMS_OPEN_ECHO:
// Switch to Diagnostic State
// return 1;
break;
case MDC_DMS_CLOSE_ECHO:
break;
// Alert Off
case MDC_DMS_ALERT_OFF:
if(phonesm_infoaudio_speakingdevice == PHONESM_SPEAKINGDEVICE_ALERTER) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_NONE);
switch(phonesm_infoonetouch_getledstate()) {
case LED_STATE_OFF:
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_OFF);
break;
case LED_STATE_WINK:
case LED_STATE_FLASH:
case LED_STATE_ON:
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_WINK);
break;
}
audio_ringer(FALSE);
audio_select(AUDIO_OFF);
}
return 0;
// Alert On
case MDC_DMS_ALERT_ON:
switch(phonesm_infoaudio_speakingdevice) {
case PHONESM_SPEAKINGDEVICE_NONE:
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_ALERTER);
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_FLASH);
audio_ringer(TRUE);
break;
case PHONESM_SPEAKINGDEVICE_HEADSET:
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_ALERTER);
if(phonesm_active_handsetactivated) {
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_FLASH);
audio_ringer(TRUE);
break;
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_ALERTER);
if(phonesm_active_handsetactivated) {
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_OFF);
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_FLASH);
audio_ringer(TRUE);
break;
case PHONESM_SPEAKINGDEVICE_HANDSET:
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_ALERTER);
if(phonesm_active_handsetactivated) {
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
leddriver_setstate(LED_INDICATOR_VOICEMAIL, LED_STATE_FLASH);
audio_ringer(TRUE);
break;
case PHONESM_SPEAKINGDEVICE_ALERTER:
// This should never happen; do nothing
break;
}
return 0;
// Handset Off
case MDC_DMS_HANDSET_OFF:
// Clear outstanding predial digits
phonesm_active_predial_clear();
/*
// This may eventually be necessary
phonesm_active_onetouch = ONETOUCHSTATE_OFF;
phonesm_active_onetouch_timeout = 0;
*/
// Turn off speaking device
switch(phonesm_infoaudio_speakingdevice) {
case PHONESM_SPEAKINGDEVICE_NONE:
break;
case PHONESM_SPEAKINGDEVICE_HEADSET:
if(phonesm_active_handsetactivated) {
if(phonesm_infoaudio_muteon) {
audio_mute(FALSE);
phonesm_infoaudio_muteon = FALSE;
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
}
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
break;
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
if(phonesm_active_handsetactivated) {
if(phonesm_infoaudio_muteon) {
audio_mute(FALSE);
phonesm_infoaudio_muteon = FALSE;
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
}
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
break;
case PHONESM_SPEAKINGDEVICE_HANDSET:
if(phonesm_active_handsetactivated) {
if(phonesm_infoaudio_muteon) {
audio_mute(FALSE);
phonesm_infoaudio_muteon = FALSE;
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
}
phonesm_active_handsetactivated = FALSE;
audio_select(AUDIO_OFF);
}
break;
case PHONESM_SPEAKINGDEVICE_ALERTER:
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_NONE);
audio_ringer(FALSE);
audio_select(AUDIO_OFF);
break;
}
return 0;
// Handset On
case MDC_DMS_HANDSET_ON:
phonesm_active_handsetactivated = TRUE;
// Check for predial number
if( phonesm_infonumbers_getpredialnumberofdigits() ) {
phonesm_infonumbers_getpredialnumber( phonesm_active_predialnumber );
phonesm_infonumbers_clearpredialnumber();
phonesm_active_predialnextdigit = 0;
phonesm_active_predialon = 0;
phonesm_active_predialoff = PHONESM_ACTIVE_PREDIAL_OFFTIME;
}
/*
// Check for Voicemail Key press
if(phonesm_active_onetouch == ONETOUCHSTATE_AWAITING_HANDSETON) {
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_VOICEMAIL);
if(phonesm_infoonetouch_getenabled()) {
phonesm_active_onetouch_timeout =
phonesm_infoonetouch_getwaitseconds_int() * 10;
if( phonesm_active_onetouch_timeout == 0) {
phonesm_active_predial_clear();
phonesm_infoonetouch_getpin( phonesm_active_predialnumber );
phonesm_active_predialoff = PHONESM_ACTIVE_PREDIAL_OFFTIME;
phonesm_active_onetouch = ONETOUCHSTATE_DIALING_PIN;
}
else {
phonesm_active_predial_clear();
phonesm_active_onetouch = ONETOUCHSTATE_SECONDSOFWAIT;
}
}
else
phonesm_active_onetouch = ONETOUCHSTATE_OFF;
}
*/
// Turn on the Call Timer
if(phonesm_active_timerstate == TIMERSTATE_AWAITINGHANDSETON) {
phonesm_active_timerstate = TIMERSTATE_ON;
phonesm_active_timer_periods = PHONESM_ACTIVE_TIMER_SECOND;
if(phonesm_active_timerwinkoff == 0)
display_writelinetwo(13, phonesm_active_timer_display);
}
// Turn on speaking device
switch(phonesm_infoaudio_speakingdevice) {
case PHONESM_SPEAKINGDEVICE_HEADSET:
audio_select(AUDIO_HEADSET);
break;
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
audio_select(AUDIO_SPEAKER);
if( phonesm_infosettings_getautomuteenabled() ||
(phonesm_active_onetouch != ONETOUCHSTATE_OFF) ) {
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
phonesm_infoaudio_muteon = TRUE;
audio_mute(TRUE);
}
break;
case PHONESM_SPEAKINGDEVICE_HANDSET:
audio_select(AUDIO_HANDSET);
break;
case PHONESM_SPEAKINGDEVICE_NONE:
if( controller_gethookswitchstate() == HOOKSTATE_UP ) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
audio_select(AUDIO_HANDSET);
}
else if( phonesm_infosettings_getdefaultdevice() ==
PHONESM_SPEAKINGDEVICE_HEADSET ) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HEADSET);
leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
audio_select(AUDIO_HEADSET);
}
else {
phonesm_infoaudio_set_speakingdevice(
PHONESM_SPEAKINGDEVICE_SPEAKERPHONE);
leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
audio_select(AUDIO_SPEAKER);
if(phonesm_infosettings_getautomuteenabled()) {
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
phonesm_infoaudio_muteon = TRUE;
audio_mute(TRUE);
}
}
break;
case PHONESM_SPEAKINGDEVICE_ALERTER:
audio_ringer(FALSE);
if( controller_gethookswitchstate() == HOOKSTATE_UP ) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
audio_select(AUDIO_HANDSET);
}
else if( phonesm_infosettings_getdefaultdevice() ==
PHONESM_SPEAKINGDEVICE_HEADSET ) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HEADSET);
leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
audio_select(AUDIO_HEADSET);
}
else {
phonesm_infoaudio_set_speakingdevice(
PHONESM_SPEAKINGDEVICE_SPEAKERPHONE);
leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
audio_select(AUDIO_SPEAKER);
if(phonesm_infosettings_getautomuteenabled()) {
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
phonesm_infoaudio_muteon = TRUE;
audio_mute(TRUE);
}
}
break;
}
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -