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

📄 functions.inl

📁 乐高机器人的源码,开发平台是IAR_for_AVR.
💻 INL
📖 第 1 页 / 共 5 页
字号:

    case MENU_LEFT :
    {
      if (!VarsUi.State)
      {
        cUiListLeft(VarsUi.NoOfFiles,&VarsUi.FileCenter);
        VarsUi.NextState    = TEST_BUTTONS;
      }
      Action                = MENU_DRAW;
    }
    break;

    case MENU_RIGHT :
    {
      if (!VarsUi.State)
      {
        cUiListRight(VarsUi.NoOfFiles,&VarsUi.FileCenter);
        VarsUi.NextState    = TEST_BUTTONS;
      }
      Action                = MENU_DRAW;
    }
    break;

    case MENU_SELECT :
    {
    }
    break;

    default :
    {
      if (Action < FILETYPES)
      {
        if (!VarsUi.State)
        {
          VarsUi.FileType   = Action;
          VarsUi.FileCenter = 1;
          VarsUi.NextState  = IOMapUi.State;
        }
        Action              = MENU_DRAW;
      }
      else
      {
        IOMapUi.State       = EXIT_PRESSED;
        VarsUi.State        = 0;
      }
    }
    break;

  }

  if (Action == MENU_DRAW)
  {
    switch (VarsUi.State)
    {
      case 0 :
      {
        VarsUi.FNOFState = 0;
        VarsUi.State++;
      }
      break;

      case 1 :
      {
        if (cUiFindNoOfFiles(VarsUi.FileType,&VarsUi.NoOfFiles) == 0)
        {
          if (VarsUi.NoOfFiles)
          {
            cUiListCalc(VarsUi.NoOfFiles,&VarsUi.FileCenter,&VarsUi.FileLeft,&VarsUi.FileRight);
            VarsUi.State++;
          }
          else
          {
            VarsUi.State  = 0;
            IOMapUi.State = EXIT_PRESSED;
          }
        }
      }
      break;

      case 2 :
      {
        if (cUiFindNameForFileNo(VarsUi.FileType,VarsUi.FileCenter,VarsUi.SelectedFilename) == 0)
        {
          VarsUi.State++;
        }
      }
      break;

      default :
      {
        pMapDisplay->pMenuIcons[MENUICON_LEFT]   = NULL;
        pMapDisplay->pMenuIcons[MENUICON_CENTER] = NULL;
        pMapDisplay->pMenuIcons[MENUICON_RIGHT]  = NULL;

        if (VarsUi.FileLeft)
        {
          pMapDisplay->pMenuIcons[MENUICON_LEFT]    = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
          pMapDisplay->UpdateMask                  |= MENUICON_BIT(MENUICON_LEFT);
        }
        if (VarsUi.FileCenter)
        {
          pMapDisplay->pMenuIcons[MENUICON_CENTER]  = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
          pMapDisplay->UpdateMask                  |= MENUICON_BIT(MENUICON_CENTER);
        }
        if (VarsUi.FileRight)
        {
          pMapDisplay->pMenuIcons[MENUICON_RIGHT]   = (UBYTE*)&Icons->Data[(VarsUi.FileType + ALLFILES) * Icons->ItemPixelsX * (Icons->ItemPixelsY / 8)];
          pMapDisplay->UpdateMask                  |= MENUICON_BIT(MENUICON_RIGHT);
        }

        pMapDisplay->EraseMask                   |=  TEXTLINE_BIT(TEXTLINE_5);

        // Search forward for termination
        VarsUi.Tmp   = 0;
        while ((VarsUi.SelectedFilename[VarsUi.Tmp]) && (VarsUi.Tmp < FILENAME_LENGTH))
        {
          VarsUi.Tmp++;
        }

        // Search backward for "."
        while ((VarsUi.Tmp) && (VarsUi.SelectedFilename[VarsUi.Tmp] != '.'))
        {
          VarsUi.Tmp--;
        }

        if (VarsUi.Tmp > DISPLAYLINE_LENGTH)
        {
          VarsUi.Tmp = DISPLAYLINE_LENGTH;
        }

        VarsUi.DisplayBuffer[VarsUi.Tmp] = 0;

        // Copy only name not ext
        while (VarsUi.Tmp)
        {
          VarsUi.Tmp--;
          VarsUi.DisplayBuffer[VarsUi.Tmp] = VarsUi.SelectedFilename[VarsUi.Tmp];
        }

        pMapDisplay->pMenuText                    = VarsUi.DisplayBuffer;
        pMapDisplay->EraseMask                   |= MENUICON_BITS;
        pMapDisplay->UpdateMask                  |= (SPECIAL_BIT(FRAME_SELECT) | SPECIAL_BIT(MENUTEXT));

        IOMapUi.State = VarsUi.NextState;
        VarsUi.State  = 0;
      }
      break;

    }
  }

  return (VarsUi.State);
}



//******* cUiVolume **********************************************************

UBYTE     cUiVolume(UBYTE Action) // MENU_INIT,MENU_LEFT,MENU_RIGHT,MENU_EXIT
{
  switch (Action)
  {
    case MENU_INIT : // Init time counter and cursor bitmap
    {
      VarsUi.Counter    = cUiNVReadVolumeCount() + 1;

      VarsUi.pTmp       = (UBYTE*)Cursor;
      for (VarsUi.Tmp = 0;(VarsUi.Tmp < SIZE_OF_CURSOR) && (VarsUi.Tmp < (UBYTE)sizeof(Cursor));VarsUi.Tmp++)
      {
        VarsUi.CursorTmp[VarsUi.Tmp] = *VarsUi.pTmp;
        VarsUi.pTmp++;
      }
      Action            = MENU_DRAW;
    }
    break;

    case MENU_LEFT : // Dec
    {
      cUiListLeft(MAX_VOLUME + 1,&VarsUi.Counter);
      IOMapUi.Volume    = VarsUi.Counter - 1;
      Action            = MENU_DRAW;
    }
    break;

    case MENU_RIGHT : // Inc
    {
      cUiListRight(MAX_VOLUME + 1,&VarsUi.Counter);
      IOMapUi.Volume    = VarsUi.Counter - 1;
      Action            = MENU_DRAW;
    }
    break;

    case MENU_ENTER : // Enter
    {
      cUiNVWriteVolumeCount(VarsUi.Counter - 1);
      IOMapUi.Volume    = cUiNVReadVolumeCount();
      pMapSound->Volume = IOMapUi.Volume;
      Action            = MENU_EXIT;
    }
    break;

    case MENU_EXIT : // Leave
    {
      IOMapUi.Volume    = cUiNVReadVolumeCount();
    }
    break;

  }
  if (Action == MENU_DRAW)
  {
    sprintf((char*)VarsUi.DisplayBuffer,"%u",(UWORD)VarsUi.Counter - 1);
    pMapDisplay->pTextLines[TEXTLINE_3] = VarsUi.DisplayBuffer;

    pMapDisplay->pBitmaps[BITMAP_1]     = (BMPMAP*)VarsUi.CursorTmp;
    VarsUi.CursorTmp[4] = 46;
    VarsUi.CursorTmp[5] = 24;
    pMapDisplay->EraseMask             |= (TEXTLINE_BIT(TEXTLINE_3) | TEXTLINE_BIT(TEXTLINE_4));
    pMapDisplay->TextLinesCenterFlags  |= TEXTLINE_BIT(TEXTLINE_3);
    pMapDisplay->UpdateMask            |= (TEXTLINE_BIT(TEXTLINE_3) | BITMAP_BIT(BITMAP_1));
  }
  if (Action == MENU_EXIT)
  {
    IOMapUi.State       = EXIT_PRESSED;
  }

  return (0);
}



//******* cUiGetUserString ***************************************************

#define   STRINGTYPES       2

#define   TOPTEXT_LINE      TEXTLINE_3
#define   STRING_LINE       TEXTLINE_5

typedef   struct
{
  const   UBYTE Text;
  const   UBYTE *Figures;
  const   UBYTE NoOfFigures;
  const   UBYTE MaxStringLength;
  const   UBYTE WindowSize;
  const   SBYTE DefaultPointer;
}
STRSETS;

const     UBYTE PincodeFigures[]  = { "0987654321" "\x7F" "abcdefghijklmnopqrstuvwxyz         " };
const     UBYTE FilenameFigures[] = { "0987654321" "\x7F" "abcdefghijklmnopqrstuvwxyz         " };

const     STRSETS StrSets[STRINGTYPES] =
{
  { TXT_GETUSERSTRING_PIN,      PincodeFigures,  37, SIZE_OF_BT_PINCODE - 1, 15, 10 },
  { TXT_GETUSERSTRING_FILENAME, FilenameFigures, 37, FILENAME_LENGTH - 4   , 15, 10 }
};


UBYTE     cUiGetUserString(UBYTE Type)  // 0=Pincode, 1=filename
{
  UBYTE   Tmp1;
  SBYTE   Tmp2;

  if (Type < STRINGTYPES)
  {
    switch (VarsUi.GUSState)
    {
      case 0 :  // Init screen
      {
        // Disable update and prepare screen
        pMapDisplay->EraseMask              |=  SCREEN_BIT(SCREEN_LARGE);
        pMapDisplay->pBitmaps[BITMAP_1]      = (BMPMAP*)Ok;

        // Set figure pointer to default
        VarsUi.FigurePointer = (SBYTE)StrSets[Type].DefaultPointer;

        // Calculate cursor from default string
        VarsUi.GUSCursor  = 0;
        while ((VarsUi.GUSCursor < DISPLAYLINE_LENGTH) && VarsUi.UserString[VarsUi.GUSCursor])
        {
          VarsUi.GUSCursor++;
        }
        VarsUi.GUSNoname = TRUE;

        VarsUi.GUSState++;
      }
      break;

      case 1 :  // Update user string
      {
        if (!(pMapDisplay->EraseMask & SCREEN_BIT(SCREEN_LARGE)))
        {
          // Display top text
          pMapDisplay->pTextLines[TOPTEXT_LINE]  = cUiGetString(StrSets[Type].Text);
          pMapDisplay->UpdateMask               |= TEXTLINE_BIT(TOPTEXT_LINE);

          Tmp1 = 0;
          while (VarsUi.UserString[Tmp1] && (Tmp1 < StrSets[Type].MaxStringLength))
          {
            VarsUi.DisplayText[Tmp1] = VarsUi.UserString[Tmp1];
            Tmp1++;
          }
          if (Tmp1 < StrSets[Type].MaxStringLength)
          {
            VarsUi.DisplayText[Tmp1] = '_';
            Tmp1++;
          }
          while (Tmp1 < StrSets[Type].MaxStringLength)
          {
            VarsUi.DisplayText[Tmp1] = ' ';
            Tmp1++;
          }
          VarsUi.DisplayText[Tmp1] = 0;

          pMapDisplay->pTextLines[STRING_LINE] = VarsUi.DisplayText;
          pMapDisplay->UpdateMask             |= (TEXTLINE_BIT(STRING_LINE) | SPECIAL_BIT(TOPLINE));
          pMapDisplay->EraseMask              |= BITMAP_BIT(BITMAP_1);
          VarsUi.GUSState++;
        }
      }
      break;

      case 2 :  // Update figure string
      {
        if (!(pMapDisplay->EraseMask & BITMAP_BIT(BITMAP_1)))
        {
          Tmp2 = VarsUi.FigurePointer;

          for (Tmp1 = 0;Tmp1 < 3;Tmp1++)
          {
            if (Tmp2)
            {
              Tmp2--;
            }
            else
            {
              Tmp2 = StrSets[Type].NoOfFigures - 1;
            }
          }
          for (Tmp1 = 0;Tmp1 < 7;Tmp1++)
          {
            if ((Tmp1 == 3) && (StrSets[Type].Figures[Tmp2] == 0x7F))
            {
              pMapDisplay->UpdateMask |= BITMAP_BIT(BITMAP_1);
            }
            else
            {
              pMapDisplay->pFunc(DISPLAY_CHAR,TRUE,5 + Tmp1 * 14,52,StrSets[Type].Figures[Tmp2],0);
            }
            if (Tmp2 < (StrSets[Type].NoOfFigures - 1))
            {
              Tmp2++;
            }
            else
            {
              Tmp2 = 0;
            }
          }
          pMapDisplay->pFunc(DISPLAY_HORISONTAL_LINE,TRUE,42,47,57,0);
          pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,42,47,0,63);
          pMapDisplay->pFunc(DISPLAY_VERTICAL_LINE,TRUE,57,47,0,63);

          VarsUi.GUSState++;
        }
      }
      break;

      case 3 :  // Get user input
      {
        if ((pMapButton->State[BTN4] & LONG_PRESSED_EV))
        {
          if (VarsUi.GUSCursor)
          {
            if ((VarsUi.UserString[VarsUi.GUSCursor - 1] >= 'a') && (VarsUi.UserString[VarsUi.GUSCursor - 1] <= 'z'))
            {
              VarsUi.UserString[VarsUi.GUSCursor - 1] -= ' ';
              VarsUi.GUSState -= 2;
            }
          }
        }

        switch (cUiReadButtons())
        {
          case BUTTON_LEFT :
          {
            if (VarsUi.FigurePointer)
            {
              VarsUi.FigurePointer--;
            }
            else
            {
              VarsUi.FigurePointer = StrSets[Type].NoOfFigures - 1;
            }
            pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
            VarsUi.GUSState -= 2;
          }
          break;

          case BUTTON_ENTER :
          {
            switch (StrSets[Type].Figures[VarsUi.FigurePointer])
            {
              case 0x7F :
              {
                VarsUi.GUSState = 100;
              }
              break;

              default :
              {
                VarsUi.GUSNoname = FALSE;
                if (VarsUi.GUSCursor < StrSets[Type].MaxStringLength)
                {
                  VarsUi.UserString[VarsUi.GUSCursor] = StrSets[Type].Figures[VarsUi.FigurePointer];
                  VarsUi.GUSCursor++;
                  VarsUi.UserString[VarsUi.GUSCursor] = 0;
                  VarsUi.GUSState -= 2;
                }
              }
              break;

            }
          }
          break;

          case BUTTON_RIGHT :
          {
            if (VarsUi.FigurePointer < (StrSets[Type].NoOfFigures - 1))
            {
              VarsUi.FigurePointer++;
            }
            else
            {
              VarsUi.FigurePointer = 0;
            }
            pMapDisplay->EraseMask |= BITMAP_BIT(BITMAP_1);
            VarsUi.GUSState -= 2;
          }
          break;

          case BUTTON_EXIT :
          {
            if (VarsUi.GUSCursor)
            {
              if (VarsUi.GUSNoname == TRUE)
              {
                VarsUi.GUSNoname = FALSE;

⌨️ 快捷键说明

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