dc550_phonesm_active.c
来自「一款经典的数字电话设计资料」· C语言 代码 · 共 1,542 行 · 第 1/5 页
C
1,542 行
if(phonesm_active_pendingonhook) {
if(phonesm_active_pendingdevice == PHONESM_SPEAKINGDEVICE_HANDSET)
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
}
break;
}
}
// This checks if the hookswitch went up
else {
switch (phonesm_infoaudio_speakingdevice) {
case PHONESM_SPEAKINGDEVICE_NONE:
if(phonesm_active_pendingonhook) {
// Switches to the handset regardless of any other pending speaking
// device
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_HANDSET;
}
else {
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_UP);
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
}
break;
case PHONESM_SPEAKINGDEVICE_ALERTER:
if(phonesm_active_pendingonhook) {
// Switches to the handset regardless of any other pending speaking
// device
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_HANDSET;
}
else {
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_UP);
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
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);
}
break;
case PHONESM_SPEAKINGDEVICE_HEADSET:
if( phonesm_active_pendingoffhook &&
(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE) )
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_OFF);
if(phonesm_active_handsetactivated) {
if(phonesm_infoaudio_muteon) {
audio_mute(FALSE);
phonesm_infoaudio_muteon = FALSE;
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
}
audio_select(AUDIO_HANDSET);
}
break;
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
if( phonesm_active_pendingoffhook &&
(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE) )
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_OFF);
if(phonesm_active_handsetactivated) {
if(phonesm_infoaudio_muteon) {
audio_mute(FALSE);
phonesm_infoaudio_muteon = FALSE;
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
}
audio_select(AUDIO_HANDSET);
}
break;
case PHONESM_SPEAKINGDEVICE_HANDSET:
// This should happen only when the DMS switch is too slow
if(phonesm_active_pendingoffhook) {
if(phonesm_active_pendingdevice == PHONESM_SPEAKINGDEVICE_HANDSET)
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
}
break;
}
}
return 0;
}
/******************************************************************************
* FUNCTION: BOOL phonesm_active_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 Active State. This function returns 1 if the keypress causes a
* Phone SM state change and 0 otherwise.
*****************************************************************************/
BOOL phonesm_active_exec_keypress(unsigned int key, BOOL updown) {
// Currently the Idle State will only respond to key down messages
if(updown == KEYSTATE_DOWN) {
switch(key) {
/***** Dialpad Digits **************************************************/
case KEYPAD_DIGIT_0:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_0);
phonesm_active_display_echochar('0');
phonesm_active_storenumber_append('0');
}
return 0;
case KEYPAD_DIGIT_1:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_1);
phonesm_active_display_echochar('1');
phonesm_active_storenumber_append('1');
}
return 0;
case KEYPAD_DIGIT_2:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_2);
phonesm_active_display_echochar('2');
phonesm_active_storenumber_append('2');
}
return 0;
case KEYPAD_DIGIT_3:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_3);
phonesm_active_display_echochar('3');
phonesm_active_storenumber_append('3');
}
return 0;
case KEYPAD_DIGIT_4:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_4);
phonesm_active_display_echochar('4');
phonesm_active_storenumber_append('4');
}
return 0;
case KEYPAD_DIGIT_5:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_5);
phonesm_active_display_echochar('5');
phonesm_active_storenumber_append('5');
}
return 0;
case KEYPAD_DIGIT_6:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_6);
phonesm_active_display_echochar('6');
phonesm_active_storenumber_append('6');
}
return 0;
case KEYPAD_DIGIT_7:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_7);
phonesm_active_display_echochar('7');
phonesm_active_storenumber_append('7');
}
return 0;
case KEYPAD_DIGIT_8:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_8);
phonesm_active_display_echochar('8');
phonesm_active_storenumber_append('8');
}
return 0;
case KEYPAD_DIGIT_9:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_9);
phonesm_active_display_echochar('9');
phonesm_active_storenumber_append('9');
}
return 0;
case KEYPAD_DIGIT_STAR:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_STAR);
phonesm_active_display_echochar('*');
phonesm_active_storenumber_append('*');
}
return 0;
case KEYPAD_DIGIT_POUND:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
modemcontroller_send_modemmessage(MDC_CPE_DIGIT_POUND);
phonesm_active_display_echochar('#');
phonesm_active_storenumber_append('#');
}
return 0;
/***** Pause Key *******************************************************/
case KEYPAD_LOCAL_PAUSE:
if(phonesm_infoaudio_speakingdevice!=PHONESM_SPEAKINGDEVICE_ALERTER) {
phonesm_active_display_echochar('P');
phonesm_active_storenumber_append('P');
}
return 0;
/***** Scroll Keys *****************************************************/
// The Scroll Keys activate the Contrast State
case KEYPAD_SCROLL_UP:
case KEYPAD_SCROLL_DOWN:
phonesm_activate_state(PHONESM_STATE_CONTRAST);
return 1;
/***** Store # Key *****************************************************/
case KEYPAD_LOCAL_STORENUM:
if(phonesm_active_storenextdigit)
phonesm_infonumbers_setstorenumber(phonesm_active_storenumber);
return 0;
/***** Feature Keys ****************************************************/
// These keys are sent to the Central Office
case KEYPAD_FEATURE_01:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_01);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_02:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_02);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_03:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_03);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_04:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_04);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_05:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_05);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_06:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_06);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_07:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_07);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_08:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_08);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_09:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_09);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_10:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_10);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
case KEYPAD_FEATURE_11:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_11);
if(phonesm_active_handsetactivated)
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
return 0;
/***** Voicemail Key ***************************************************/
case KEYPAD_FEATURE_VOICEMAIL:
switch(phonesm_infoaudio_speakingdevice) {
case PHONESM_SPEAKINGDEVICE_HEADSET:
case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
case PHONESM_SPEAKINGDEVICE_HANDSET:
modemcontroller_send_modemmessage(MDC_CPE_FEATURE_VOICEMAIL);
if(phonesm_infoonetouch_getenabled()) {
if(phonesm_infoaudio_speakingdevice ==
PHONESM_SPEAKINGDEVICE_SPEAKERPHONE) {
leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
phonesm_infoaudio_muteon = TRUE;
audio_mute(TRUE);
}
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;
break;
case PHONESM_SPEAKINGDEVICE_NONE:
/*
phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
phonesm_active_pendingonhook = 0;
phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_UP);
phonesm_active_onetouch = ONETOUCHSTATE_AWAITING_HANDSETON;
if( controller_gethookswitchstate() == HOOKSTATE_UP ) {
phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?