///** @file
//
//    Sample Setup formset.
//
//  Copyright (c) 2004 - 2008, Intel Corporation. <BR>
//  All rights reserved. This program and the accompanying materials
//  are licensed and made available under the terms and conditions of the BSD License
//  which accompanies this distribution.  The full text of the license may be found at
//  http://opensource.org/licenses/bsd-license.php
//
//  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
//  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
//**/


#include "NVDataStruc.h"

//
// Formset class used by Device Manager
//
#define EFI_NON_DEVICE_CLASS              0x00
#define EFI_DISK_DEVICE_CLASS             0x01
#define EFI_VIDEO_DEVICE_CLASS            0x02
#define EFI_NETWORK_DEVICE_CLASS          0x04
#define EFI_INPUT_DEVICE_CLASS            0x08
#define EFI_ON_BOARD_DEVICE_CLASS         0x10
#define EFI_OTHER_DEVICE_CLASS            0x20

//
// Formset subclass
//
#define EFI_SETUP_APPLICATION_SUBCLASS    0x00
#define EFI_GENERAL_APPLICATION_SUBCLASS  0x01
#define EFI_FRONT_PAGE_SUBCLASS           0x02
#define EFI_SINGLE_USE_SUBCLASS           0x03

//
// EFI Variable attributes
//
#define EFI_VARIABLE_NON_VOLATILE       0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS     0x00000004
#define EFI_VARIABLE_READ_ONLY          0x00000008

//
// Labels definition
//
#define LABEL_1_VALUE               0x01
#define LABEL_2_VALUE               0x1000
#define LABEL_UPDATE_BBS            0x2222
#define LABEL_END                   0x2223

formset
  guid     = FORMSET_GUID,
  title    = STRING_TOKEN(STR_FORM_SET_TITLE),
  help     = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
  class    = EFI_ON_BOARD_DEVICE_CLASS,
  subclass = EFI_SETUP_APPLICATION_SUBCLASS,
  
  //
  // Notes: VfrCompiler will insert a Standard Default Storage declaration 
  // after the formset declaration.    >00000040: 5C 06 00 00 00 00.
  // So we don't need to declare the Standard Default.
  // Please check the vfr.lst file for details.
  // To enable list file for VFR, add "-l" to VfrCompile <Command> in [Build.Visual-Form-Representation-File] as follows:
  //          VfrCompile -l --no-pre-processing --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
  //
  
   //
  // Define a Buffer Storage (EFI_IFR_VARSTORE)
  //
  varstore DRIVER_SAMPLE_CONFIGURATION,     // This is the data structure type
    varid = CONFIGURATION_VARSTORE_ID,      // Optional VarStore ID
    name  = MyIfrNVData,                    // Define referenced name in vfr
    guid  = FORMSET_GUID;                   // GUID of this buffer storage

  //
  // Define another Buffer Storage
  //
  varstore MY_DATA2,
    name  = MyIfrNVData2,
    guid  = FORMSET_GUID;

  //
  // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)
  //
  efivarstore MyEfiVar,                           // Define referenced name in vfr
    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS,  // EFI variable attribures
    name      = STRING_TOKEN(STR_VAR_NAME),       // EFI variable name
    varsize   = 1,                                // Size of the EFI variable
    guid      = FORMSET_GUID;                     // EFI variable GUID

  defaultstore MyStandardDefault,
    prompt      = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
    attribute   = 0x0000;                         // Default ID: 0000 standard default

  defaultstore MyManufactureDefault,
    prompt      = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
    attribute   = 0x0001;                         // Default ID: 0001 manufacture default

  //
  // Define a Form (EFI_IFR_FORM)
  //
  form formid = 1,                                // Form ID
       title  = STRING_TOKEN(STR_FORM1_TITLE);    // Form title

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT);

    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);

    //
    // Define a display only text (EFI_IFR_TEXT)
    //
    text
      help   = STRING_TOKEN(STR_TEXT_HELP),       // Help string
      text   = STRING_TOKEN(STR_CPU_STRING),      // Prompt string
        text   = STRING_TOKEN(STR_CPU_STRING2);   // TextTwo

    //
    // Define action button (EFI_IFR_ACTION)
    //
    text
      help   = STRING_TOKEN(STR_EXIT_TEXT),
      text   = STRING_TOKEN(STR_EXIT_TEXT),
        text   = STRING_TOKEN(STR_EXIT_TEXT),
      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
      key    = 0x1237;

    text
      help   = STRING_TOKEN(STR_SAVE_TEXT),
      text   = STRING_TOKEN(STR_SAVE_TEXT),
        text   = STRING_TOKEN(STR_SAVE_TEXT),
      flags  = INTERACTIVE,
      key    = 0x1238;

    //
    // Define oneof (EFI_IFR_ONE_OF)
    //
    oneof name = MyOneOf,                                // Define reference name for Question
      varid   = MyIfrNVData.SuppressGrayOutSomething,    // Use "DataStructure.Member" to reference Buffer Storage
      prompt  = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help    = STRING_TOKEN(STR_ONE_OF_HELP),
      //
      // Define an option (EFI_IFR_ONE_OF_OPTION)
      //
      option text = STRING_TOKEN(STR_ONE_OF_TEXT4), value = 0x0, flags = 0;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT5), value = 0x1, flags = 0;
      //
      // DEFAULT indicate this option will be marked with EFI_IFR_OPTION_DEFAULT
      //
      option text = STRING_TOKEN(STR_ONE_OF_TEXT6), value = 0x2, flags = DEFAULT;
    endoneof;

    oneof varid  = MyIfrNVData.BootOrderLarge,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;
      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;
    endoneof;

    grayoutif  ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
      suppressif questionref(MyOneOf) == 0x0;

        checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
                 prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
                 help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
                 //
                 // CHECKBOX_DEFAULT indicate this checkbox is marked with EFI_IFR_CHECKBOX_DEFAULT
                 // CHECKBOX_DEFAULT_MFG indicate EFI_IFR_CHECKBOX_DEFAULT_MFG.
                 //
                 flags    = CHECKBOX_DEFAULT | CHECKBOX_DEFAULT_MFG,
                 key      = 0,
                 default  = 1,
        endcheckbox;
      endif;
	endif;

    //
    // Ordered list:
    //   sizeof(MyIfrNVData) storage must be UINT8 array, and
    //   size written for the variable must be size of the entire
    //   variable.
    //
    //
    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x0;

      //
      // label is defined as an anchor where you want to insert some dynamic
      // opcodes created on-the-fly
      //
      label LABEL_UPDATE_BBS;

      orderedlist
                varid       = MyIfrNVData.BootOrder,
                prompt      = STRING_TOKEN(STR_BOOT_OPTIONS),
                help        = STRING_TOKEN(STR_NULL_STRING),
                option text = STRING_TOKEN(STR_BOOT_OPTION2), value = 2, flags = RESET_REQUIRED;
                option text = STRING_TOKEN(STR_BOOT_OPTION1), value = 1, flags = RESET_REQUIRED;
                option text = STRING_TOKEN(STR_BOOT_OPTION3), value = 3, flags = RESET_REQUIRED;
              suppressif ideqval MyIfrNVData.BootOrderLarge == 0;
                option text = STRING_TOKEN(STR_BOOT_OPTION4), value = 4, flags = RESET_REQUIRED;
              endif
      endlist;

      //
      // label should be paired with each other
      //
      label LABEL_END;

    endif;    // end suppressif

    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x2;
      orderedlist
        varid       = MyIfrNVData.OrderedList,
        prompt      = STRING_TOKEN(STR_TEST_OPCODE),
        help        = STRING_TOKEN(STR_TEXT_HELP),
        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 3, flags = RESET_REQUIRED;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = RESET_REQUIRED;
        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 1, flags = RESET_REQUIRED;
      endlist;
    endif;

    label 100;

    //
    // Define a hyperlink (EFI_IFR_REF)
    //
    goto 0x1234,                                  // Destination Form ID
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC),   // Prompt string
      help    = STRING_TOKEN(STR_GOTO_HELP),      // Help string
      flags   = INTERACTIVE,                      // INTERACTIVE indicate it's marked with EFI_IFR_FLAG_CALLBACK
      key     = 0x1234;                           // Question ID which will be passed-in in COnfigAccess.Callback()

    goto 0x1234,
      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC2),
      help    = STRING_TOKEN(STR_GOTO_HELP),
      flags   = INTERACTIVE,
      key     = 0x1235;

    oneof varid  = MyIfrNVData.TestLateCheck,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT | RESET_REQUIRED;

    endoneof;

    oneof varid  = MyIfrNVData.TestLateCheck2,
      prompt      = STRING_TOKEN(STR_TEST_OPCODE2),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = DEFAULT | RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = RESET_REQUIRED;

      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
        ideqid MyIfrNVData.TestLateCheck == MyIfrNVData.TestLateCheck2
      endif

    endoneof;

    oneof varid  = MyIfrNVData.QuestionAboutTreeHugging,
      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
      help        = STRING_TOKEN(STR_ONE_OF_HELP),
      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT | RESET_REQUIRED;
      option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 0x03, flags = RESET_REQUIRED;

    endoneof;

    //
    // Define a string (EFI_IFR_STRING)
    //
    string    varid    = MyIfrNVData.MyStringData,
              prompt   = STRING_TOKEN(STR_MY_STRING_PROMPT2),
              help     = STRING_TOKEN(STR_MY_STRING_HELP2),
              flags    = INTERACTIVE,
              key      = 0x1236,
              minsize  = 6,
              maxsize  = 40,
    endstring;

    //
    // Define a numeric (EFI_IFR_NUMERIC)
    //
    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
            prompt  = STRING_TOKEN(STR_NUMERIC_READONLY_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            flags   = READ_ONLY,  // READ_ONLY indicate it's marked with EFI_IFR_FLAG_READ_ONLY
            minimum = 0,
            maximum = 0xf0,
            step    = 0,          // Stepping of 0 equates to a manual entering
                                  // of a value, otherwise it will be adjusted by "+"/"-"
            default = 21,         // defaultstore could be used to specify the default type
                                  // If no defaultstore is specified, it implies Standard Default

    endnumeric;

    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            minimum = 0,
            maximum = 0xf0,
            step    = 0,
            default = 21,

            inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
              ideqval MyIfrNVData.HowOldAreYouInYearsManual == 99
              OR
              ideqid  MyIfrNVData.HowOldAreYouInYearsManual == MyEfiVar
              OR
              ideqvallist MyIfrNVData.HowOldAreYouInYearsManual == 1 3 5 7
            endif

    endnumeric;

    numeric varid   = MyEfiVar,                           // Reference of EFI variable storage
            prompt  = STRING_TOKEN(STR_TALL_HEX_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP1),
            flags   = DISPLAY_UINT_HEX,                   // Display in HEX format (if not specified, default is in decimal format)
            minimum = 0,
            maximum = 250,
            default = 175,

    endnumeric;

    label LABEL_1_VALUE;
    label LABEL_2_VALUE;

    grayoutif  ideqval MyIfrNVData.HowOldAreYouInYearsManual == 23 AND ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
      numeric varid   = MyIfrNVData.HowOldAreYouInYears,
              prompt  = STRING_TOKEN(STR_NUMERIC_STEP_PROMPT),
              help    = STRING_TOKEN(STR_NUMERIC_HELP2),
              minimum = 0,
              maximum = 243,
              step    = 1,
              default = 18, defaultstore = MyStandardDefault,     // This is standard default value
              default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value
        
      endnumeric;
    endif;
        
    resetbutton
      defaultstore = MyStandardDefault,
      prompt   = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
      help     = STRING_TOKEN(STR_STANDARD_DEFAULT_HELP),
    endresetbutton;
    
    resetbutton
      defaultstore = MyManufactureDefault,
      prompt   = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
      help     = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_HELP),
    endresetbutton;

    //
    // Non-interactive password, validate by Setup Browser
    //
    password  varid    = MyIfrNVData.WhatIsThePassword,
              prompt   = STRING_TOKEN(STR_PASSWORD_PROMPT),
              help     = STRING_TOKEN(STR_PASSWORD_HELP),
              minsize  = 6,
              maxsize  = 20,
    endpassword;

    string    varid    = MyIfrNVData.PasswordClearText,
              prompt   = STRING_TOKEN(STR_MY_STRING_PROMPT),
              help     = STRING_TOKEN(STR_MY_STRING_HELP),
              minsize  = 6,
              maxsize  = 0x14,
    endstring;

    //
    // Interactive password, validate via ConfigAccess.Callback()
    //
    password  varid    = MyIfrNVData.WhatIsThePassword2,
              prompt   = STRING_TOKEN(STR_PASSWORD_CALLBACK_PROMPT),
              help     = STRING_TOKEN(STR_PASSWORD_HELP),
              flags    = INTERACTIVE,
              key      = 0x2000,
              minsize  = 6,
              maxsize  = 20,
    endpassword;

    goto 2,
      prompt = STRING_TOKEN(STR_GOTO_FORM2), //SecondSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

    goto 3,
      prompt = STRING_TOKEN(STR_GOTO_FORM3), //ThirdSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

  endform;

  form formid = 2,               // SecondSetupPage,
    title = STRING_TOKEN(STR_FORM2_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code


    date    year varid  = Date.Year,    // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt      = STRING_TOKEN(STR_DATE_PROMPT),
            help        = STRING_TOKEN(STR_DATE_HELP),
            minimum     = 1998,
            maximum     = 2099,
            step        = 1,
            default     = 2004,

            month varid = Date.Month,    // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt      = STRING_TOKEN(STR_DATE_PROMPT),
            help        = STRING_TOKEN(STR_DATE_HELP),
            minimum     = 1,
            maximum     = 12,
            step        = 1,
            default     = 1,

            day varid   = Date.Day,          // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt      = STRING_TOKEN(STR_DATE_PROMPT),
            help        = STRING_TOKEN(STR_DATE_HELP),
            minimum     = 1,
            maximum     = 31,
            step        = 0x1,
            default     = 1,

      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
        ideqval Date.Day == 31
        AND
        ideqvallist Date.Month == 2 4 6 9 11
      endif

      //
      // If the day is 30 AND month is 2
      //
      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
        ideqval Date.Day == 30
        AND
        ideqval Date.Month == 2
      endif

      //
      // If the day is 29 AND month is 2 AND it year is NOT a leapyear
      //
      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
        ideqval Date.Day == 0x1D
        AND
        ideqval Date.Month == 2
        AND
        NOT
        ideqvallist Date.Year == 2004 2008 20012 20016 2020 2024 2028 2032 2036
      endif

    enddate;

    time    hour varid  = Time.Hours,         // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt      = STRING_TOKEN(STR_TIME_PROMPT),
            help        = STRING_TOKEN(STR_TIME_HELP),
            minimum     = 0,
            maximum     = 23,
            step        = 1,
            default     = 0,

            minute varid  = Time.Minutes,       // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt        = STRING_TOKEN(STR_TIME_PROMPT),
            help          = STRING_TOKEN(STR_TIME_HELP),
            minimum       = 0,
            maximum       = 59,
            step          = 1,
            default       = 0,

            second varid  = Time.Seconds,       // Note that it is a member of NULL, so the RTC will be the system resource to retrieve and save from
            prompt        = STRING_TOKEN(STR_TIME_PROMPT),
            help          = STRING_TOKEN(STR_TIME_HELP),
            minimum       = 0,
            maximum       = 59,
            step          = 1,
            default       = 0,

    endtime;

    checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
            prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
            help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
            flags    = CHECKBOX_DEFAULT,
            key      = 0,
    endcheckbox;

    text
      help = STRING_TOKEN(STR_TEXT_HELP),
      text = STRING_TOKEN(STR_TEXT_TEXT_1);

    text
      help   = STRING_TOKEN(STR_TEXT_HELP),
      text   = STRING_TOKEN(STR_TEXT_TEXT_1),
      text   = STRING_TOKEN(STR_TEXT_TEXT_2);

    goto 1,
      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
      help   = STRING_TOKEN(STR_GOTO_HELP);

  endform;

  form formid = 3, title = STRING_TOKEN(STR_FORM3_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

    suppressif  ideqval MyEfiVar == 111;
      text
        help = STRING_TOKEN(STR_TEXT_HELP),
        text = STRING_TOKEN(STR_TEXT_TEXT_1);
    endif;

    goto 1,
      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage
      help   = STRING_TOKEN(STR_GOTO_HELP);

    numeric varid   = MyIfrNVData.DynamicRefresh,
            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
            flags   = INTERACTIVE,
            key     = 0x5678,
            minimum = 0,
            maximum = 0xff,
            step    = 0,
            default = 0,
            refresh interval = 3             // Refresh interval in seconds
    endnumeric;

    label 0x2234;
    label LABEL_END;

  endform;

  form formid = 4, title = STRING_TOKEN(STR_FORM3_TITLE);

  endform;

  form formid = 0x1234,            // Dynamically created page,
       title = STRING_TOKEN(STR_DYNAMIC_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code

    label 0x1234;
    //
    // This is where we will insert dynamic created opcodes
    //
    label LABEL_END;

  endform;

endformset;
