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

📄 smi_ui.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                    &keyboardType);

  ui_data->state          = UI_IDLE;
  ui_data->powerOn        = FALSE;
  ui_data->inputMode      = INP_MOD_NONE;
  ui_data->inputSeq       = INP_SEQ_NONE;
  ui_data->timerMod       = TIMER_MOD_NONE;
  ui_data->ringerOn       = FALSE;
  ui_data->waitingOn      = FALSE;
  ui_data->nibtOn         = FALSE;
  ui_data->sliderActive   = FALSE;
  ui_data->inSubmenu      = FALSE;
  ui_data->menuMode       = MEN_MOD_NONE;
  ui_data->sendDTMF       = FALSE;
  ui_data->keyBeep        = FALSE;
  ui_data->backlightOn    = FALSE;
  ui_data->shiftOn        = FALSE;
  ui_data->lastShiftedKey = NULL_TERM;
  ui_data->lastKeyIdx     = 0xff;
  ui_data->lastKeyRep     = 0;
  ui_data->keypadMode     = 0;
  oldState                = UI_IDLE;

  ui_data->lastDialedNumber[0] = NULL_TERM;

  /*
   *-----------------------------------------------------------------
   * cleanup the states in the keytable
   *-----------------------------------------------------------------
   */
  i=0;
  while (keyTable[i].keypadCode NEQ NULL_TERM)
    keyTable[i++].pressed = FALSE;

  /*
   *-----------------------------------------------------------------
   * initialize window manager, slider, menu and input modules
   *-----------------------------------------------------------------
   */
  wm_init ();
  men_init ();
  inp_init ();
  sld_init ();

  /*
   *-----------------------------------------------------------------
   * create output areas, screen size will be taken into account
   *-----------------------------------------------------------------
   */
  if (screensize_y EQ 4)
  {
    areaCaller    = wm_createArea ( 0,  3,           14,  1);
    areaProvider  = wm_createArea ( 0,  0,           14,  1);
    areaUser      = wm_createArea ( 0,  2,           14,  1);
    areaState     = wm_createArea ( 0,  1,            8,  1);
    areaService   = wm_createArea ( 8,  1, SRVC_WIDTH_L,  1);
    areaFS        = wm_createArea (14,  2,            2,  1);
    areaBAT       = wm_createArea (14,  0,            2,  1);
    areaMenu      = wm_createArea ( 0,  0, MENU_WIDTH_L,  4);
    areaSubMenu   = wm_createArea ( 0,  0,           12,  4);
    areaSlider    = wm_createArea ( 0,  1,           10,  1);
    areaHook      = wm_createArea (15,  3,            1,  1);
    areaShift     = wm_createArea (14,  3,            1,  1);
    areaUniversal = wm_createArea ( 0,  0,           16,  4);
  }
  else if (screensize_y EQ 2)
  {
    areaCaller    = -1;
    areaProvider  = wm_createArea ( 0,  0,            8,  1);
    areaUser      = wm_createArea ( 0,  1,           10,  1);
    areaState     = wm_createArea ( 8,  0,            8,  1);
    areaService   = wm_createArea (10,  1, SRVC_WIDTH_S,  1);
    areaFS        = wm_createArea (12,  1,            1,  1);
    areaBAT       = wm_createArea (14,  1,            1,  1);
    areaMenu      = wm_createArea ( 0,  0, MENU_WIDTH_S,  2);
    areaSubMenu   = wm_createArea ( 0,  0,           12,  2);
    areaSlider    = wm_createArea ( 0,  0,           10,  1);
    areaHook      = wm_createArea (13,  1,            1,  1);
    areaShift     = wm_createArea (15,  1,            1,  1);
    areaUniversal = wm_createArea ( 0,  0,           16,  2);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_topArea               |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to top an area.
*/
LOCAL void ui_topArea (USHORT aHandle)
{
  if (ui_data->timerMod EQ TIMER_MOD_NONE)
    wm_topArea (aHandle);
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_areaServiceWrite      |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to write text to the service area
            with right alignment.
*/
LOCAL void ui_areaServiceWrite (CHAR* text)
{
  UBYTE areaWidth = (screensize_y < 4 ? SRVC_WIDTH_S : SRVC_WIDTH_L);
  UBYTE textLen   = strlen (text);
  UBYTE column;

  if (textLen > 0)
  {
    column = (textLen >= areaWidth ? 0 : areaWidth - textLen);

    wm_clearArea (areaService);
    wm_areaWrite (areaService, 0, column, text);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_startNewInput         |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to stop the actual input and start
            a new one.
*/
LOCAL void ui_startNewInput (USHORT    aHandle,
                             UBYTE     row,
                             UBYTE     col,
                             CHAR*     prompt,
                             UBYTE     length,
                             UBYTE     type,
                             T_INP_MOD inputMode,
                             CHAR*     value,
                             BOOL      show)
{
  /*
   *-----------------------------------------------------------------
   * stop the actual input
   *-----------------------------------------------------------------
   */
  inp_stopInput (aHandle);
  wm_clearArea (aHandle);

  /*
   *-----------------------------------------------------------------
   * set a default input string and start a new input
   *-----------------------------------------------------------------
   */
  inp_startInput (aHandle, row, col, prompt, length, type);

  if (value NEQ NULL)
    inp_setInput (aHandle, value);

  ui_data->state     = UI_INPUT;
  ui_data->inputMode = inputMode;

  /*
   *-----------------------------------------------------------------
   * bring the input area on top
   *-----------------------------------------------------------------
   */
  if (show)
  {
    ui_topArea (aHandle);
    wm_showArea (aHandle);
  }
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_stopMenu              |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to interrupt a given menu.
*/
LOCAL void ui_stopMenu (void)
{
  /*
   *-----------------------------------------------------------------
   * close the submenu
   *-----------------------------------------------------------------
   */
  if (ui_data->inSubmenu)
  {
    men_stopMenu (areaSubMenu);
    wm_hideArea (areaSubMenu);

    ui_data->inSubmenu = FALSE;
  }

  /*
   *-----------------------------------------------------------------
   * close the menu
   *-----------------------------------------------------------------
   */
  men_stopMenu (areaMenu);
  wm_hideArea (areaMenu);

  ui_data->menuMode = MEN_MOD_NONE;
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_changeVolume          |
+--------------------------------------------------------------------+

  PURPOSE : This function is used to increment or decrement the
            volume.
*/
LOCAL void ui_changeVolume (BOOL inc)
{
  if (!ui_data->sliderActive)
  {
    sld_startSlider (areaSlider, 0, 255, csf_getVolume (VT_AUDIO_OUT));

    ui_data->sliderActive = TRUE;

    ui_topArea  (areaSlider);
    wm_showArea (areaSlider);
  }

#if defined (NEW_FRAME)
  if (t_slider_running NEQ FALSE)
  {
    TIMERSTOP (SMI_TSLIDER)
    t_slider_running = FALSE;
  }
#else
  if (t_slider_handle NEQ VSI_ERROR)
  {
    TIMERSTOP (t_slider_handle)
  }
#endif

#if defined (NEW_FRAME)
  TIMERSTART (TSLIDER_VALUE, SMI_TSLIDER);
  t_slider_running = TRUE;
#else
  TIMERSTART (TSLIDER_VALUE, t_slider_handle);
#endif

  if (inc)
    sld_upSlider (areaSlider);
  else
    sld_downSlider (areaSlider);

  csf_setVolume (VT_AUDIO_OUT,
                 (UBYTE)sld_getSliderValue (areaSlider));
  csf_setVolume (VT_AUDIO_IN,
                 (UBYTE)sld_getSliderValue (areaSlider));

  aca_signal (ACA_SIG_VOLUME, sld_getSliderValue (areaSlider));
}

/*
+--------------------------------------------------------------------+
| PROJECT : GSM-PS (6147)         MODULE  : SMI_UI                   |
| STATE   : code                  ROUTINE : ui_signal                |
+--------------------------------------------------------------------+

  PURPOSE : Process the UI_SIG_xxx signals that are send by PSA or IO
*/
GLOBAL void ui_signal (UBYTE sigCode, ...)
{
  va_list varpars;
  CHAR    buf[25];

  sprintf (buf, "UI-Signal: %d", sigCode);
  TRACE_EVENT (buf);

  switch (sigCode)
  {
    /*
     *---------------------------------------------------------------
     * process signal UI_SIG_ENTER_PIN
     *---------------------------------------------------------------
     */
    case UI_SIG_ENTER_PIN:
      ui_startNewInput (areaUser,
                        0,
                        0,
                        "PIN: ",
                        MAX_PIN_LEN,
                        IT_NUMERIC | IT_ECHO | IT_HIDDEN,
                        INP_MOD_PIN,
                        NULL,
                        TRUE);

      ui_data->inputSeq = INP_SEQ_NONE;
      break;

    /*
     *---------------------------------------------------------------
     * process signal UI_SIG_ENTER_PUK
     *---------------------------------------------------------------
     */
    case UI_SIG_ENTER_PUK:
      /*
       *-------------------------------------------------------------
       * forget anything about entered PINs and PUKs
       *-------------------------------------------------------------
       */
      memset (puk, NULL_TERM, MAX_PUK_LEN + 1);
      memset (pin, NULL_TERM, MAX_PIN_LEN + 1);

      ui_startNewInput (areaUser,
                        0,
                        0,
                        "PUK: ",
                        MAX_PUK_LEN,
                        IT_NUMERIC | IT_ECHO | IT_HIDDEN,
                        INP_MOD_PUK,
                        NULL,
                        TRUE);

      ui_data->inputSeq = INP_SEQ_NONE;
      break;

    /*
     *---------------------------------------------------------------
     * process signal UI_SIG_SIM_NOT_INSERT
     *---------------------------------------------------------------
     */
    case UI_SIG_SIM_NOT_INSERT:
      ui_data->normalService = FALSE;

      wm_areaWrite (areaState, 0, 0, lng_getText (TXT_SIM_NOT_INSERT));
      ui_topArea  (areaState);
      wm_showArea (areaState);

      wm_clearArea (areaProvider);

      ui_startNewInput (areaUser,
                        0,
                        0,
                        ">",
                        MAX_INPUT_SIZE - 10,
                        IT_NUMERIC | IT_ECHO,
                        INP_MOD_DIAL,
                        NULL,
                        TRUE);

      ui_data->inputSeq = INP_SEQ_NONE;
      break;

    /*
     *---------------------------------------------------------------
     * process signal UI_SIG_SIM_WRONG
     *---------------------------------------------------------------
     */
    case UI_SIG_SIM_WRONG:
      ui_data->normalService = FALSE;

      wm_areaWrite (areaState, 0, 0, lng_getText (TXT_SIM_WRONG));
      ui_topArea  (areaState);
      wm_showArea (areaState);

      wm_clearArea (areaProvider);

      ui_startNewInput (areaUser,
                        0,
                        0,
                        ">",
                        MAX_INPUT_SIZE - 10,
                        IT_NUMERIC | IT_ECHO,
                        INP_MOD_DIAL,
                        NULL,
                        TRUE);

      ui_data->inputSeq = INP_SEQ_NONE;
      break;

    /*
     *---------------------------------------------------------------
     * process signal UI_SIG_POWER_UP
     *---------------------------------------------------------------
     */
    case UI_SIG_POWER_UP:
      {
        UBYTE row    = 0;
        UBYTE column = 1;

        ui_init ();

        /*
         *-----------------------------------------------------------
         * build up the screen the first time
         *-----------------------------------------------------------
         */
        ui_backlight (TRUE);
        ui_startFSDisplay  ();
        ui_startBATDisplay ();
        wm_areaWrite (areaHook, 0, 0, "_");
        wm_showArea (areaProvider);
        wm_showArea (areaService);
        wm_showArea (areaUser);
        wm_showArea (areaBAT);
        wm_showArea (areaFS);
        wm_showArea (areaState);
        wm_showArea (areaShift);

        if (screensize_y EQ 4)
          wm_showArea (areaCaller);

        wm_showArea (areaHook);
        ui_data->powerOn = TRUE;

        /*
         *-----------------------------------------------------------
         * enable input before camp on a network
         *-----------------------------------------------------------
         */
        ui_startNewInput (areaUser,
                          0,

⌨️ 快捷键说明

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