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

📄 dc550_phonesm_active.c

📁 一款经典的数字电话设计资料
💻 C
📖 第 1 页 / 共 5 页
字号:
  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 + -