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

📄 dc550_phonesm_active.c

📁 一款经典的数字电话设计资料
💻 C
📖 第 1 页 / 共 5 页
字号:
            }
            else if( phonesm_infosettings_getdefaultdevice() ==
                     PHONESM_SPEAKINGDEVICE_HEADSET ) {
              phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HEADSET);
              leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
            }
            else {
              phonesm_infoaudio_set_speakingdevice(
                PHONESM_SPEAKINGDEVICE_SPEAKERPHONE);
              leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
            }
            break;
          */
          case PHONESM_SPEAKINGDEVICE_ALERTER:
            break;
        }
        return 0;

      /***** Hold Key ********************************************************/
      case KEYPAD_FEATURE_HOLD:
        modemcontroller_send_modemmessage(MDC_CPE_FEATURE_HOLD);
        return 0;

      /***** Release Key *****************************************************/
      case KEYPAD_FEATURE_RELEASE:
        modemcontroller_send_modemmessage(MDC_CPE_FEATURE_RELEASE);
        // We may also want to turn the audio off but keep the speakingdevice
        // the same so that when we actually hang up the DMS switch gets
        // a hangup message
        if(phonesm_active_handsetactivated)
          phonesm_active_pendingoffhook = PHONESM_ACTIVE_ONHOOK_PENDING;
        return 0;

      /***** Volume Keys *****************************************************/
      // The Volume Keys activate the Volume State
      case KEYPAD_VOLUME_UP:
      case KEYPAD_VOLUME_DOWN:
        phonesm_activate_state(PHONESM_STATE_VOLUME);
        return 1;

      case KEYPAD_AUDIO_MUTE:
        if(phonesm_infoaudio_muteon) {
          phonesm_infoaudio_muteon = FALSE;
          leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
          audio_mute(FALSE);
        }
        else {
          phonesm_infoaudio_muteon = TRUE;
          leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
          audio_mute(TRUE);
        }
        break;

      /***** Headset Key *****************************************************/
      case KEYPAD_AUDIO_HEADSET:
        switch (phonesm_infoaudio_speakingdevice) {
          case PHONESM_SPEAKINGDEVICE_NONE:
            if(phonesm_active_pendingonhook) {
              if(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE)
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_HEADSET;
                // Activates the headset if the handset or speakerphone
                // have already been activated
            }
            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_HEADSET);
              leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
            }
            break;

          case PHONESM_SPEAKINGDEVICE_ALERTER:
            if(phonesm_active_pendingonhook) {
              if(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE)
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_HEADSET;
                // Activates the headset if the handset or speakerphone
                // have already been activated
            }
            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_HEADSET);
              leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
              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( controller_gethookswitchstate() == HOOKSTATE_UP ) {
              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);
              }
            }
            else {
              if(phonesm_active_pendingoffhook) {
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_HEADSET;
              }
              else {
                phonesm_active_pendingonhook = PHONESM_ACTIVE_ONHOOK_PENDING;
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
                modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_DOWN);
                phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_NONE);
                leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_OFF);
                phonesm_active_handsetactivated = FALSE;
                if(phonesm_infoaudio_muteon) {
                  audio_mute(FALSE);
                  phonesm_infoaudio_muteon = FALSE;
                  leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
                }
                audio_select(AUDIO_OFF);
              }
              break;
            }
            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_HEADSET);
            leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
            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_HEADSET);
            }
            break;
          case PHONESM_SPEAKINGDEVICE_HANDSET:
            if( phonesm_active_pendingoffhook &&
                (phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE) )
              phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
            phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HEADSET);
            leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_ON);
            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_HEADSET);
            }
            break;
        }
        break;
        
      /***** Speaker Key *****************************************************/
      case KEYPAD_AUDIO_SPEAKER:
        switch (phonesm_infoaudio_speakingdevice) {
          case PHONESM_SPEAKINGDEVICE_NONE:
            if(phonesm_active_pendingonhook) {
              if(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE)
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_SPEAKERPHONE;
                // Activates the speakerphone if the handset or headset
                // have already been activated
            }
            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_SPEAKERPHONE);
              leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
            }
            break;

          case PHONESM_SPEAKINGDEVICE_ALERTER:
            if(phonesm_active_pendingonhook) {
              if(phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE)
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_SPEAKERPHONE;
                // Activates the speakerphone if the handset or headset
                // have already been activated
            }
            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_SPEAKERPHONE);
              leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
              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_SPEAKERPHONE);
            leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
            leddriver_setstate(LED_INDICATOR_HEADSET, LED_STATE_OFF);
            if(phonesm_active_handsetactivated) {
              audio_select(AUDIO_SPEAKER);
              if(phonesm_infosettings_getautomuteenabled()) {
                leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
                phonesm_infoaudio_muteon = TRUE;
                audio_mute(TRUE);
              }
              else if(phonesm_infoaudio_muteon) {
                audio_mute(FALSE);
                phonesm_infoaudio_muteon = FALSE;
                leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
              }
            }
            break;
          case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
            if( controller_gethookswitchstate() == HOOKSTATE_UP ) {
              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);
              }
            }
            else {
              if(phonesm_active_pendingoffhook) {
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_SPEAKERPHONE;
              }
              else {
                phonesm_active_pendingonhook = PHONESM_ACTIVE_ONHOOK_PENDING;
                phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
                modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_DOWN);
                phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_NONE);
                leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_OFF);
                phonesm_active_handsetactivated = FALSE;
                if(phonesm_infoaudio_muteon) {
                  audio_mute(FALSE);
                  phonesm_infoaudio_muteon = FALSE;
                  leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
                }
                audio_select(AUDIO_OFF);
              }
              break;
            }
            break;
          case PHONESM_SPEAKINGDEVICE_HANDSET:
            if( phonesm_active_pendingoffhook &&
                (phonesm_active_pendingdevice != PHONESM_SPEAKINGDEVICE_NONE) )
              phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
            phonesm_infoaudio_set_speakingdevice(
              PHONESM_SPEAKINGDEVICE_SPEAKERPHONE);
            leddriver_setstate(LED_INDICATOR_SPEAKERPHONE, LED_STATE_ON);
            if(phonesm_active_handsetactivated) {
              audio_select(AUDIO_SPEAKER);
              if(phonesm_infosettings_getautomuteenabled()) {
                leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
                phonesm_infoaudio_muteon = TRUE;
                audio_mute(TRUE);
              }
              else if(phonesm_infoaudio_muteon) {
                audio_mute(FALSE);
                phonesm_infoaudio_muteon = FALSE;
                leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
              }
            }
            break;
        }
        break;
      
      // The rest of the keys do nothing
      case KEYPAD_LOCAL_EXIT:
      case KEYPAD_LOCAL_SELECT:
      case KEYPAD_LOCAL_SAVE:
      case KEYPAD_LOCAL_PROGRAM:
      case KEYPAD_LOCAL_MEMORY:
        // Do nothing
        // return 0;
        break;
    }
  }
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -