67. VFR 추가 입력 요소 Part 3: date & time

date 요소

이번 챕터는 날짜를 저장하는데 사용하는 date 입력 요소를 살펴보겠다. (https://edk2-docs.gitbook.io/edk-ii-vfr-specification/2_vfr_description_in_bnf/211_vfr_form_definition#2.11.6.9-vfr-date-statement-definition)

아래의 코드를 Form.vfr에 추가해야 한다.

date
  varid = FormData.DateValue,
  prompt = STRING_TOKEN(DATE_PROMPT),
  help = STRING_TOKEN(DATE_HELP),
enddate;

추가로 Strings.uni에도 아래의 문자열을 추가해야 한다.

#string DATE_PROMPT            #language en-US  "Date prompt"
#string DATE_HELP              #language en-US  "Date help"

날짜는 특수 EFI_HII_DATE 유형으로 인코딩 된다. (https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h)

typedef struct {
  UINT16    Year;
  UINT8     Month;
  UINT8     Day;
} EFI_HII_DATE;

따라서 이를 이전과 동일하게 Data.h의 구조에 추가해주겠다.

typedef struct {
  ...
  EFI_HII_DATE DateValue;
} UEFI_VARIABLE_STRUCTURE;

결과적으로 아래와 같은 화면이 나온다.

값은 MM/DD/YYYY 형식으로 표시된다. 따라서 날짜의 조건에 맞게 값을 넣어줘야 한다. 이외에도 윤년도 검사하기 때문에 02/29/2020는 입력할 수 있지만 02/29/2021은 입력이 안된다.

time 요소

time VFR 입력 요소는 시간을 저장하는 데 사용된다 (https://edk2-docs.gitbook.io/edk-ii-vfr-specification/2_vfr_description_in_bnf/211_vfr_form_definition#2.11.6.10-vfr-time-statement-definition).

아래의 코드를 Form.vfr에 추가 해야한다.

time
  varid = FormData.TimeValue,
  prompt = STRING_TOKEN(TIME_PROMPT),
  help = STRING_TOKEN(TIME_HELP),
endtime;

Strings.uni에 문자열 또한 추가해주자.

typedef struct {
  UINT8    Hour;
  UINT8    Minute;
  UINT8    Second;
} EFI_HII_TIME;

추가로 Data.h의 구조에 아래의 코드도 추가해주자.

typedef struct {
  ...
  EFI_HII_TIME TimeValue;
} UEFI_VARIABLE_STRUCTURE;

결과는 결론적으로 아래와 같이 나오며 date와 동일하게 HII Form Browser에 유효하지 않은 시간 값은 설정이 불가능하다.

Last updated