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

📄 dc550_phonesm_active.c

📁 一款经典的数字电话设计资料
💻 C
📖 第 1 页 / 共 5 页
字号:
    case MDC_DMS_VOICE_ON:
    case MDC_DMS_HANDSFREE_ON:
      // These will probably only come when the DMS switch thinks that the
      // CPE is on hook
      switch(phonesm_infoaudio_speakingdevice) {
        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);
          if( controller_gethookswitchstate() == HOOKSTATE_UP )
            phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
          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:
          audio_ringer(FALSE);
          phonesm_active_pendingoffhook = PHONESM_ACTIVE_OFFHOOK_PENDING;
          phonesm_active_pendingonhook = 0;
          phonesm_active_pendingdevice = PHONESM_SPEAKINGDEVICE_NONE;
          modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_UP);
          if( controller_gethookswitchstate() == HOOKSTATE_UP )
            phonesm_infoaudio_set_speakingdevice(PHONESM_SPEAKINGDEVICE_HANDSET);
          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_HEADSET:
        case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
        case PHONESM_SPEAKINGDEVICE_HANDSET:
          // These should never happen unless messages got crossed.  Nevertheless,
          // a Hookstate Up message should be sent (perhaps again)
          // modemcontroller_send_modemmessage(MDC_CPE_HOOKSTATE_UP);
          break;
      }
      return 0;
    case MDC_DMS_VOICE_OFF:
    case MDC_DMS_HANDSFREE_OFF:
      // Since nothing is done when a Handsfree On or Voice On are received,
      // nothing will be done when a Handsfree Off or Voice Off are received
      return 0;

    case MDC_DMS_BUZZER_OFF:
      phonesm_active_buzzeron = FALSE;
      audio_buzzer(FALSE);
      if( phonesm_infoaudio_muteon == PHONESM_ACTIVE_MUTE_AUTO ) {
        phonesm_infoaudio_muteon = FALSE;
        leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_OFF);
        audio_mute(FALSE);
      }
      return 0;
    case MDC_DMS_BUZZER_ON:
      phonesm_active_buzzeron = TRUE;
      switch(phonesm_infoaudio_speakingdevice) {
        case PHONESM_SPEAKINGDEVICE_NONE:
        case PHONESM_SPEAKINGDEVICE_HANDSET:
        case PHONESM_SPEAKINGDEVICE_HEADSET:
        case PHONESM_SPEAKINGDEVICE_ALERTER:
          audio_buzzer(TRUE);
          break;
        case PHONESM_SPEAKINGDEVICE_SPEAKERPHONE:
          audio_buzzer(TRUE);
          if( !phonesm_infoaudio_muteon ) {
            phonesm_infoaudio_muteon = PHONESM_ACTIVE_MUTE_AUTO;
            leddriver_setstate(LED_INDICATOR_MUTE, LED_STATE_ON);
            audio_mute(TRUE);
          }
          break;
      }
      return 0;
      

    /***** DMS Indicator Commands ********************************************/

    // None of the LED commands cause a state change
    case MDC_DMS_INDICATOR_KEY01_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE01, LED_STATE_OFF);
      // Clear Call Timer
      switch(phonesm_active_timerstate) {
        case TIMERSTATE_ON:
        case TIMERSTATE_INVISIBLE:
          // Put the Call Timer in Display 12 Holder
          phonesm_infodisplay12_cleardisplay();
          phonesm_infodisplay12_writelinetwo(13, phonesm_active_timer_display);
          phonesm_infodisplay12_setperiods(60);

          // Clear Call Timer
          phonesm_active_timerstate = TIMERSTATE_OFF;
          phonesm_active_timer_periods = 0;
          phonesm_active_timer_display[1] = '0';
          phonesm_active_timer_display[2] = '0';
          phonesm_active_timer_display[4] = '0';
          phonesm_active_timer_display[5] = '0';
          phonesm_active_timer_display[7] = '0';
          phonesm_active_timer_display[8] = '0';
          if(phonesm_active_timerwinkon || phonesm_active_timerwinkoff) {
            phonesm_active_timerwinkon = 0;
            phonesm_active_timerwinkoff =
              (PHONESM_ACTIVE_TIMER_OFFTIME + phonesm_active_timer_periods);
            display_writelinetwo(0, phonesm_active_buffer_linetwo);
          }

          // Activate Display 12 State
          phonesm_activate_state(PHONESM_STATE_DISPLAY12);
          break;
        case TIMERSTATE_AWAITINGHANDSETON:
          phonesm_active_timerstate = TIMERSTATE_OFF;
          break;
      }
      return 0;
    case MDC_DMS_INDICATOR_KEY01_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE01, LED_STATE_WINK);
      // Make Call Timer Invisible
      switch(phonesm_active_timerstate) {
        case TIMERSTATE_ON:
          phonesm_active_timerstate = TIMERSTATE_INVISIBLE;
          if(phonesm_active_displayenabled)
            display_writelinetwo(0, phonesm_active_buffer_linetwo);
          else
            display_cleardisplay();
          if(phonesm_active_timerwinkon || phonesm_active_timerwinkoff) {
            phonesm_active_timerwinkon = 0;
            phonesm_active_timerwinkoff =
              (PHONESM_ACTIVE_TIMER_OFFTIME + phonesm_active_timer_periods);
          }
          break;
        case TIMERSTATE_AWAITINGHANDSETON:
          phonesm_active_timerstate = TIMERSTATE_OFF;
          break;
        case TIMERSTATE_INVISIBLE:
        case TIMERSTATE_OFF:
          // Nothing has to be done here
          break;
      }
      return 0;
    case MDC_DMS_INDICATOR_KEY01_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE01, LED_STATE_FLASH);
      // Make Call Timer Invisible
      switch(phonesm_active_timerstate) {
        case TIMERSTATE_ON:
          phonesm_active_timerstate = TIMERSTATE_INVISIBLE;
          if(phonesm_active_displayenabled)
            display_writelinetwo(0, phonesm_active_buffer_linetwo);
          else
            display_cleardisplay();
          if(phonesm_active_timerwinkon || phonesm_active_timerwinkoff) {
            phonesm_active_timerwinkon = 0;
            phonesm_active_timerwinkoff =
              (PHONESM_ACTIVE_TIMER_OFFTIME + phonesm_active_timer_periods);
          }
          break;
        case TIMERSTATE_AWAITINGHANDSETON:
          phonesm_active_timerstate = TIMERSTATE_OFF;
          break;
        case TIMERSTATE_INVISIBLE:
        case TIMERSTATE_OFF:
          // Nothing has to be done here
          break;
      }
      return 0;
    case MDC_DMS_INDICATOR_KEY01_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE01, LED_STATE_ON);
      switch(phonesm_active_timerstate) {
        case TIMERSTATE_OFF:
          if(phonesm_infosettings_getcalltimerenabled()) {
            if(phonesm_active_handsetactivated) {
              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);
            }
            else
              phonesm_active_timerstate = TIMERSTATE_AWAITINGHANDSETON;
          }
          break;
        case TIMERSTATE_INVISIBLE:
          phonesm_active_timerstate = TIMERSTATE_ON;
          if(phonesm_active_timerwinkoff == 0)
            display_writelinetwo(13, phonesm_active_timer_display);
          break;
        case TIMERSTATE_ON:
        case TIMERSTATE_AWAITINGHANDSETON:
          // These should never happen
          break;
      }
      return 0;
    case MDC_DMS_INDICATOR_KEY02_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE02, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY02_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE02, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY02_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE02, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY02_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE02, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY03_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE03, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY03_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE03, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY03_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE03, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY03_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE03, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY04_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE04, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY04_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE04, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY04_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE04, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY04_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE04, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY05_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE05, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY05_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE05, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY05_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE05, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY05_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE05, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY06_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE06, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY06_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE06, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY06_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE06, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY06_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE06, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY07_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE07, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY07_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE07, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY07_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE07, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY07_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE07, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY08_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE08, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY08_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE08, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY08_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE08, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY08_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE08, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY09_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE09, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY09_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE09, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY09_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE09, LED_STATE_FLASH);
      return 0;
    case MDC_DMS_INDICATOR_KEY09_ON:
      leddriver_setstate(LED_INDICATOR_FEATURE09, LED_STATE_ON);
      return 0;
    case MDC_DMS_INDICATOR_KEY10_OFF:
      leddriver_setstate(LED_INDICATOR_FEATURE10, LED_STATE_OFF);
      return 0;
    case MDC_DMS_INDICATOR_KEY10_WINK:
      leddriver_setstate(LED_INDICATOR_FEATURE10, LED_STATE_WINK);
      return 0;
    case MDC_DMS_INDICATOR_KEY10_FLASH:
      leddriver_setstate(LED_INDICATOR_FEATURE10, LED_STAT

⌨️ 快捷键说明

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