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

📄 dc550_phonesm_memory.c

📁 一款经典的数字电话设计资料
💻 C
📖 第 1 页 / 共 2 页
字号:
          display_writelineone( 0, "                        ");
          display_writelineone( 0,
            phonesm_infolanguage_getmarker_memorydial(
              phonesm_memory_currentindex) );
          display_writelineone( 4, phonesm_memory_digits );
        }
        else {
          phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
                                               phonesm_memory_digits );
        }
        return 0;
      case KEYPAD_DIGIT_7:
        phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
        phonesm_infonumbers_getmemorynumber( 7, phonesm_memory_digits );
        if( phonesm_memory_digits[0] ) {
          phonesm_memory_currentindex = 7;
          display_writelineone( 0, "                        ");
          display_writelineone( 0,
            phonesm_infolanguage_getmarker_memorydial(
              phonesm_memory_currentindex) );
          display_writelineone( 4, phonesm_memory_digits );
        }
        else {
          phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
                                               phonesm_memory_digits );
        }
        return 0;
      case KEYPAD_DIGIT_8:
        phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
        phonesm_infonumbers_getmemorynumber( 8, phonesm_memory_digits );
        if( phonesm_memory_digits[0] ) {
          phonesm_memory_currentindex = 8;
          display_writelineone( 0, "                        ");
          display_writelineone( 0,
            phonesm_infolanguage_getmarker_memorydial(
              phonesm_memory_currentindex) );
          display_writelineone( 4, phonesm_memory_digits );
        }
        else {
          phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
                                               phonesm_memory_digits );
        }
        return 0;
      case KEYPAD_DIGIT_9:
        phonesm_memory_periodtimeout = PHONESM_MEMORY_TIMEOUT;
        phonesm_infonumbers_getmemorynumber( 9, phonesm_memory_digits );
        if( phonesm_memory_digits[0] ) {
          phonesm_memory_currentindex = 9;
          display_writelineone( 0, "                        ");
          display_writelineone( 0,
            phonesm_infolanguage_getmarker_memorydial(
              phonesm_memory_currentindex) );
          display_writelineone( 4, phonesm_memory_digits );
        }
        else {
          phonesm_infonumbers_getmemorynumber( phonesm_memory_currentindex,
                                               phonesm_memory_digits );
        }
        return 0;

      // The other digit keys do nothing.
      case KEYPAD_DIGIT_STAR:
      case KEYPAD_DIGIT_POUND:
      case KEYPAD_LOCAL_PAUSE:
        return 0;
        
      // The Volume Keys activate the Volume State
      case KEYPAD_VOLUME_UP:
      case KEYPAD_VOLUME_DOWN:
        phonesm_activate_state(PHONESM_STATE_VOLUME);
        return 1;
      
      // These keys activate the Active State
      case KEYPAD_FEATURE_01:
      case KEYPAD_AUDIO_HEADSET:
      case KEYPAD_AUDIO_SPEAKER:
        phonesm_memory_savenumber();
        phonesm_deactivate_state(PHONESM_STATE_MEMORY);
        return 1;
      
      // These keys exit the Memory State
      case KEYPAD_LOCAL_STORENUM:
      case KEYPAD_LOCAL_PROGRAM:
      case KEYPAD_FEATURE_02:
      case KEYPAD_FEATURE_03:
      case KEYPAD_FEATURE_04:
      case KEYPAD_FEATURE_05:
      case KEYPAD_FEATURE_06:
      case KEYPAD_FEATURE_07:
      case KEYPAD_FEATURE_08:
      case KEYPAD_FEATURE_09:
      case KEYPAD_FEATURE_10:
      case KEYPAD_FEATURE_11:
      case KEYPAD_FEATURE_VOICEMAIL:
      case KEYPAD_LOCAL_EXIT:
      case KEYPAD_LOCAL_SELECT:
      case KEYPAD_LOCAL_SAVE:
      case KEYPAD_FEATURE_HOLD:
      case KEYPAD_FEATURE_RELEASE:
      case KEYPAD_AUDIO_MUTE:
        phonesm_memory_discardnumber();
        phonesm_deactivate_state(PHONESM_STATE_MEMORY);
        return 1;
    }
  }
  
  return 0;
}


/******************************************************************************
 *  FUNCTION: BOOL phonesm_memory_exec_modemcommand(DC550MDCMessage command)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called when the phone receives a modem command while
 *  in the Memory State.  This function returns 1 if the keypress causes a
 *  Phone SM state change and 0 otherwise.  This function evaluates the
 *  command against every possible modem command.  If code efficiency were
 *  not as much of a concern, this function might have been split into
 *  several functions.
 *****************************************************************************/
BOOL phonesm_memory_exec_modemcommand(DC550MDCMessage command) {
  switch(command) {
    // The Reset commands will simply propagate down to the Idle State
    case MDC_DMS_SOFT_RESET:
    case MDC_DMS_HARD_RESET:
    case MDC_DMS_SAVE_INDICATOR_RESET:
      switch(phonesm_memory_exitstate) {
        case PHONESM_STATE_IDLE:
          phonesm_idle_exec_modemcommand(command);
          return 0;
        default:
          // This should never happen
          // Exit this state
          phonesm_memory_discardnumber();
          phonesm_deactivate_state(PHONESM_STATE_MEMORY);
          return 1;
      }

    // The Open Echo, Close Echo, Voice Off, Handset Off, Handsfree Off, Alert 
    // Off, and Buzzer Off commands should never be received in this state.  If
    // they are received, nothing happens.
    case MDC_DMS_OPEN_ECHO:
    case MDC_DMS_CLOSE_ECHO:
    case MDC_DMS_VOICE_OFF:
    case MDC_DMS_HANDSET_OFF:
    case MDC_DMS_HANDSFREE_OFF:
    case MDC_DMS_ALERT_OFF:
    case MDC_DMS_BUZZER_OFF:
      // These commands should do nothing
      return 0;

    // The commands that turn audio on will cause the phone to exit the Memory
    // State.  In general, these commands are used for incoming calls, incoming
    // intercoms, and the like.
    case MDC_DMS_VOICE_ON:
    case MDC_DMS_HANDSET_ON:
    case MDC_DMS_HANDSFREE_ON:
    case MDC_DMS_ALERT_ON:
    case MDC_DMS_BUZZER_ON:
      phonesm_memory_discardnumber();
      phonesm_deactivate_state(PHONESM_STATE_MEMORY);
      return 1;
      
    // All of the LED commands will simply be passed down to the Idle State
    case MDC_DMS_INDICATOR_KEY01_OFF:
    case MDC_DMS_INDICATOR_KEY01_WINK:
    case MDC_DMS_INDICATOR_KEY01_FLASH:
    case MDC_DMS_INDICATOR_KEY01_ON:
    case MDC_DMS_INDICATOR_KEY02_OFF:
    case MDC_DMS_INDICATOR_KEY02_WINK:
    case MDC_DMS_INDICATOR_KEY02_FLASH:
    case MDC_DMS_INDICATOR_KEY02_ON:
    case MDC_DMS_INDICATOR_KEY03_OFF:
    case MDC_DMS_INDICATOR_KEY03_WINK:
    case MDC_DMS_INDICATOR_KEY03_FLASH:
    case MDC_DMS_INDICATOR_KEY03_ON:
    case MDC_DMS_INDICATOR_KEY04_OFF:
    case MDC_DMS_INDICATOR_KEY04_WINK:
    case MDC_DMS_INDICATOR_KEY04_FLASH:
    case MDC_DMS_INDICATOR_KEY04_ON:
    case MDC_DMS_INDICATOR_KEY05_OFF:
    case MDC_DMS_INDICATOR_KEY05_WINK:
    case MDC_DMS_INDICATOR_KEY05_FLASH:
    case MDC_DMS_INDICATOR_KEY05_ON:
    case MDC_DMS_INDICATOR_KEY06_OFF:
    case MDC_DMS_INDICATOR_KEY06_WINK:
    case MDC_DMS_INDICATOR_KEY06_FLASH:
    case MDC_DMS_INDICATOR_KEY06_ON:
    case MDC_DMS_INDICATOR_KEY07_OFF:
    case MDC_DMS_INDICATOR_KEY07_WINK:
    case MDC_DMS_INDICATOR_KEY07_FLASH:
    case MDC_DMS_INDICATOR_KEY07_ON:
    case MDC_DMS_INDICATOR_KEY08_OFF:
    case MDC_DMS_INDICATOR_KEY08_WINK:
    case MDC_DMS_INDICATOR_KEY08_FLASH:
    case MDC_DMS_INDICATOR_KEY08_ON:
    case MDC_DMS_INDICATOR_KEY09_OFF:
    case MDC_DMS_INDICATOR_KEY09_WINK:
    case MDC_DMS_INDICATOR_KEY09_FLASH:
    case MDC_DMS_INDICATOR_KEY09_ON:
    case MDC_DMS_INDICATOR_KEY10_OFF:
    case MDC_DMS_INDICATOR_KEY10_WINK:
    case MDC_DMS_INDICATOR_KEY10_FLASH:
    case MDC_DMS_INDICATOR_KEY10_ON:
    case MDC_DMS_INDICATOR_KEY11_OFF:
    case MDC_DMS_INDICATOR_KEY11_WINK:
    case MDC_DMS_INDICATOR_KEY11_FLASH:
    case MDC_DMS_INDICATOR_KEY11_ON:
    case MDC_DMS_INDICATOR_KEY12_OFF:    // The Idle State always owns the
    case MDC_DMS_INDICATOR_KEY12_WINK:   // Voicemail Key except when the
    case MDC_DMS_INDICATOR_KEY12_FLASH:  // Active State is active
    case MDC_DMS_INDICATOR_KEY12_ON:
    case MDC_DMS_INDICATOR_KEY13_OFF:
    case MDC_DMS_INDICATOR_KEY13_WINK:
    case MDC_DMS_INDICATOR_KEY13_FLASH:
    case MDC_DMS_INDICATOR_KEY13_ON:
    case MDC_DMS_INDICATOR_KEY14_OFF:
    case MDC_DMS_INDICATOR_KEY14_WINK:
    case MDC_DMS_INDICATOR_KEY14_FLASH:
    case MDC_DMS_INDICATOR_KEY14_ON:
      switch(phonesm_memory_exitstate) {
        case PHONESM_STATE_IDLE:
          phonesm_idle_exec_modemcommand(command);
          return 0;
        default:
          // This should never happen
          // Exit this state
          phonesm_memory_discardnumber();
          phonesm_deactivate_state(PHONESM_STATE_MEMORY);
          return 1;
      }
 
    // The display commands will cause the phone to exit the Memory State
    case MDC_DMS_CLEAR_WORKING_BUFFER:
    case MDC_DMS_CLEAR_DISPLAY:
    case MDC_DMS_CLEAR_WB_LINE0:
    case MDC_DMS_CLEAR_WB_LINE1:
    case MDC_DMS_ENABLE_DIGIT_ECHOING_TYPE1:
    case MDC_DMS_ENABLE_DIGIT_ECHOING_TYPE2:
    case MDC_DMS_CLEAR_WB_IN12SECONDS:
    case MDC_DMS_DISABLE_DISPLAY_CURSOR:
    case MDC_DMS_DISABLE_DISPLAY_ECHOING:
    case MDC_DMS_DISABLE_DISPLAY:
    case MDC_DMS_POWER_DOWN_DISPLAY:
    case MDC_DMS_ENABLE_DISPLAY:
    case MDC_DMS_ENABLE_DISPLAY_CURSOR:
    case MDC_DMS_DISPLAY_RESET:
    case MDC_DMS_RESUME_DIGIT_ECHOING:
    case MDC_DMS_TRANSMIT_DISPLAY_STATUS:
    case MDC_DMS_WB_CURSOR_TO_P0:
    case MDC_DMS_WB_CURSOR_TO_P24:
      phonesm_memory_discardnumber();
      phonesm_deactivate_state(PHONESM_STATE_MEMORY);
      return 1;
    default:
      if(command >= MDC_DMC_CHARACTER_MASK) {
        phonesm_memory_discardnumber();
        phonesm_deactivate_state(PHONESM_STATE_MEMORY);
        return 1;
      }
      else
        // This is an unrecognized command.
        return 0;
  }
}


/******************************************************************************
 *  FUNCTION:
 *  BOOL phonesm_memory_exec_periodic(BOOL firstline, BOOL secondline)
 ******************************************************************************
 *  DESCRIPTION:
 *  This function is called periodically when the phone is in Memory State.
 *  This function does two things:
 *  1. If the predial state is on top, decrement the period counter and exit
 *     the state if the period counter reaches 0
 *  2. Propagate the command to the exit state if that exit state is the Idle
 *     State, and exit the state otherwise (this allows the Idle State to
 *     update the time and date display.  It's a little sloppy, but it should
 *     work.
 *****************************************************************************/
BOOL phonesm_memory_exec_periodic(BOOL firstline, BOOL secondline) {

  if(firstline && secondline) {
    // 1A: Decrement the period counter
    phonesm_memory_periodtimeout--;
  
    // 1B: If the period counter has reached 0, exit this state
    if(!phonesm_memory_periodtimeout) {
      phonesm_memory_discardnumber();
      phonesm_deactivate_state(PHONESM_STATE_MEMORY);
      return 1;
    }
  }

  // 2: If the exit state is the Idle State, propagate the periodic function
  switch(phonesm_memory_exitstate) {
    case PHONESM_STATE_IDLE:
      phonesm_idle_exec_periodic(0, secondline);
      return 0;
    default:
      // This should never happen
      // Exit this state
      phonesm_memory_discardnumber();
      phonesm_deactivate_state(PHONESM_STATE_MEMORY);
      return 1;
  }
  
}

⌨️ 快捷键说明

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