Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of parsing parameter.

2019-01-25 Thread Yao, Jiewen
Exactly. Currently APP is using that to parse parameter.
Would you please clarify why we cannot use the same way?

Thank you
Yao Jiewen


From: Gao, Liming
Sent: Friday, January 25, 2019 5:25 PM
To: Zhang, Chao B ; Yao, Jiewen ; 
edk2-devel@lists.01.org
Cc: Wu, Hao A ; Chen, Chen A ; Gao, 
Liming 
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Chao:
  CapsuleApp can base on gEfiShellProtocolGuid and 
gEfiShellParametersProtocolGuid to do it. Current CapsuleApp bases on these two 
protocols to parse the parameters.

Thanks
Liming
From: Zhang, Chao B
Sent: Friday, January 25, 2019 3:24 PM
To: Yao, Jiewen mailto:jiewen@intel.com>>; 
edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>; Gao, Liming 
mailto:liming@intel.com>>
Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Chen, Chen A 
mailto:chen.a.c...@intel.com>>
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Jiewen & Liming:
   It is a problem. Unlike UiApp. CapsuleApp is supposed to run in Shell.  
ShellLib provides standard parameter parsing support.
Any suggestion on this?

From: Yao, Jiewen
Sent: Friday, January 25, 2019 2:25 PM
To: Chen, Chen A mailto:chen.a.c...@intel.com>>; 
edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang, Chao B 
mailto:chao.b.zh...@intel.com>>
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Hey
I don't think MdeModulePkg can depend on ShellPkg.

That is why we do not use ShellLib in the first version.

Do we change the package dependency rule?

Thank you
Yao Jiewen

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Chen A Chen
> Sent: Friday, January 25, 2019 2:14 PM
> To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang, Chao B
> mailto:chao.b.zh...@intel.com>>
> Subject: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic
> of parsing parameter.
>
> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1482
>
> No change functionality, use ShellLib to parsing command line.
>
> Cc: Jian J Wang mailto:jian.j.w...@intel.com>>
> Cc: Hao Wu mailto:hao.a...@intel.com>>
> Cc: Zhang Chao B mailto:chao.b.zh...@intel.com>>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Chen A Chen 
> mailto:chen.a.c...@intel.com>>
> ---
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.c   | 433
> +++--
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf |   2 +
>  2 files changed, 236 insertions(+), 199 deletions(-)
>
> diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> index 4d907242f3..acae0fe261 100644
> --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> @@ -27,6 +27,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  #define CAPSULE_HEADER_SIZE  0x20
>
> @@ -39,15 +40,27 @@
>
>  #define MAX_CAPSULE_NUM 10
>
> -extern UINTN  Argc;
> -extern CHAR16 **Argv;
> -
>  //
>  // Define how many block descriptors we want to test with.
>  //
>  UINTN  NumberOfDescriptors = 1;
> -UINTN  CapsuleFirstIndex;
> -UINTN  CapsuleLastIndex;
> +
> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> +  {L"-C", TypeFlag},
> +  {L"-E", TypeFlag},
> +  {L"-S", TypeFlag},
> +
> +  {L"-NR", TypeFlag},
> +
> +  {L"-G", TypeValue},
> +  {L"-O", TypeValue},
> +  {L"-N", TypeValue},
> +  {L"-D", TypeValue},
> +  {L"-P", TypeValue},
> +  {L"-I", TypeValue},
> +
> +  {NULL, TypeMax}
> +  };
>
>  /**
>Dump capsule information
> @@ -161,13 +174,12 @@ GetArg (
>  **/
>  EFI_STATUS
>  CreateBmpFmp (
> -  VOID
> +  IN CHAR16 *BmpName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *BmpBuffer;
>UINTN FileSize;
> -  CHAR16*BmpName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_DISPLAY_CAPSULE   *DisplayCapsule;
> @@ -191,22 +203,10 @@ CreateBmpFmp (
>// HorizontalResolution >= BMP_IMAGE_HEADER.PixelWidth
>// VerticalResolution   >= BMP_IMAGE_HEADER.PixelHeight
>
> -  if (Argc != 5) {
> -Print(L"CapsuleApp: Incor

Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of parsing parameter.

2019-01-25 Thread Carsey, Jaben
I think that if the application wants to depend on the libs, then we should 
discuss moving the application to the ShellPkg.

-Jaben

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Gao, Liming
> Sent: Friday, January 25, 2019 1:25 AM
> To: Zhang, Chao B ; Yao, Jiewen
> ; edk2-devel@lists.01.org
> Cc: Wu, Hao A ; Gao, Liming 
> Subject: Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code
> logic of parsing parameter.
> Importance: High
> 
> Chao:
>   CapsuleApp can base on gEfiShellProtocolGuid and
> gEfiShellParametersProtocolGuid to do it. Current CapsuleApp bases on
> these two protocols to parse the parameters.
> 
> Thanks
> Liming
> From: Zhang, Chao B
> Sent: Friday, January 25, 2019 3:24 PM
> To: Yao, Jiewen ; edk2-devel@lists.01.org; Gao,
> Liming 
> Cc: Wu, Hao A ; Chen, Chen A
> 
> Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code
> logic of parsing parameter.
> 
> Jiewen & Liming:
>It is a problem. Unlike UiApp. CapsuleApp is supposed to run in Shell.
> ShellLib provides standard parameter parsing support.
> Any suggestion on this?
> 
> From: Yao, Jiewen
> Sent: Friday, January 25, 2019 2:25 PM
> To: Chen, Chen A
> mailto:chen.a.c...@intel.com>>; edk2-
> de...@lists.01.org<mailto:edk2-devel@lists.01.org>
> Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang,
> Chao B mailto:chao.b.zh...@intel.com>>
> Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code
> logic of parsing parameter.
> 
> Hey
> I don't think MdeModulePkg can depend on ShellPkg.
> 
> That is why we do not use ShellLib in the first version.
> 
> Do we change the package dependency rule?
> 
> Thank you
> Yao Jiewen
> 
> > -Original Message-
> > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> > Chen A Chen
> > Sent: Friday, January 25, 2019 2:14 PM
> > To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> > Cc: Wu, Hao A mailto:hao.a...@intel.com>>;
> Zhang, Chao B
> > mailto:chao.b.zh...@intel.com>>
> > Subject: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code
> logic
> > of parsing parameter.
> >
> > BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1482
> >
> > No change functionality, use ShellLib to parsing command line.
> >
> > Cc: Jian J Wang mailto:jian.j.w...@intel.com>>
> > Cc: Hao Wu mailto:hao.a...@intel.com>>
> > Cc: Zhang Chao B
> mailto:chao.b.zh...@intel.com>>
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Chen A Chen
> mailto:chen.a.c...@intel.com>>
> > ---
> >  MdeModulePkg/Application/CapsuleApp/CapsuleApp.c   | 433
> > +++--
> >  MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf |   2 +
> >  2 files changed, 236 insertions(+), 199 deletions(-)
> >
> > diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> > b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> > index 4d907242f3..acae0fe261 100644
> > --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> > +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> > @@ -27,6 +27,7 @@
> >  #include 
> >  #include 
> >  #include 
> > +#include 
> >
> >  #define CAPSULE_HEADER_SIZE  0x20
> >
> > @@ -39,15 +40,27 @@
> >
> >  #define MAX_CAPSULE_NUM 10
> >
> > -extern UINTN  Argc;
> > -extern CHAR16 **Argv;
> > -
> >  //
> >  // Define how many block descriptors we want to test with.
> >  //
> >  UINTN  NumberOfDescriptors = 1;
> > -UINTN  CapsuleFirstIndex;
> > -UINTN  CapsuleLastIndex;
> > +
> > +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> > +  {L"-C", TypeFlag},
> > +  {L"-E", TypeFlag},
> > +  {L"-S", TypeFlag},
> > +
> > +  {L"-NR", TypeFlag},
> > +
> > +  {L"-G", TypeValue},
> > +  {L"-O", TypeValue},
> > +  {L"-N", TypeValue},
> > +  {L"-D", TypeValue},
> > +  {L"-P", TypeValue},
> > +  {L"-I", TypeValue},
> > +
> > +  {NULL, TypeMax}
> > +  };
> >
> >  /**
> >Dump capsule information
> > @@ -161,13 +174,12 @@ GetArg (
> >  **/
> >  EFI_STATUS
> >  CreateBmpFmp (
> > -  VOID
> > +  IN CHAR16 *BmpName,
> > +  IN CHAR16
> > *OutputCapsuleName
> >)
> >  {
> > -  CHAR16
> > 

Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of parsing parameter.

2019-01-25 Thread Gao, Liming
Chao:
  CapsuleApp can base on gEfiShellProtocolGuid and 
gEfiShellParametersProtocolGuid to do it. Current CapsuleApp bases on these two 
protocols to parse the parameters.

Thanks
Liming
From: Zhang, Chao B
Sent: Friday, January 25, 2019 3:24 PM
To: Yao, Jiewen ; edk2-devel@lists.01.org; Gao, Liming 

Cc: Wu, Hao A ; Chen, Chen A 
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Jiewen & Liming:
   It is a problem. Unlike UiApp. CapsuleApp is supposed to run in Shell.  
ShellLib provides standard parameter parsing support.
Any suggestion on this?

From: Yao, Jiewen
Sent: Friday, January 25, 2019 2:25 PM
To: Chen, Chen A mailto:chen.a.c...@intel.com>>; 
edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang, Chao B 
mailto:chao.b.zh...@intel.com>>
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Hey
I don't think MdeModulePkg can depend on ShellPkg.

That is why we do not use ShellLib in the first version.

Do we change the package dependency rule?

Thank you
Yao Jiewen

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Chen A Chen
> Sent: Friday, January 25, 2019 2:14 PM
> To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang, Chao B
> mailto:chao.b.zh...@intel.com>>
> Subject: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic
> of parsing parameter.
>
> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1482
>
> No change functionality, use ShellLib to parsing command line.
>
> Cc: Jian J Wang mailto:jian.j.w...@intel.com>>
> Cc: Hao Wu mailto:hao.a...@intel.com>>
> Cc: Zhang Chao B mailto:chao.b.zh...@intel.com>>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Chen A Chen 
> mailto:chen.a.c...@intel.com>>
> ---
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.c   | 433
> +++--
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf |   2 +
>  2 files changed, 236 insertions(+), 199 deletions(-)
>
> diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> index 4d907242f3..acae0fe261 100644
> --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> @@ -27,6 +27,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  #define CAPSULE_HEADER_SIZE  0x20
>
> @@ -39,15 +40,27 @@
>
>  #define MAX_CAPSULE_NUM 10
>
> -extern UINTN  Argc;
> -extern CHAR16 **Argv;
> -
>  //
>  // Define how many block descriptors we want to test with.
>  //
>  UINTN  NumberOfDescriptors = 1;
> -UINTN  CapsuleFirstIndex;
> -UINTN  CapsuleLastIndex;
> +
> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> +  {L"-C", TypeFlag},
> +  {L"-E", TypeFlag},
> +  {L"-S", TypeFlag},
> +
> +  {L"-NR", TypeFlag},
> +
> +  {L"-G", TypeValue},
> +  {L"-O", TypeValue},
> +  {L"-N", TypeValue},
> +  {L"-D", TypeValue},
> +  {L"-P", TypeValue},
> +  {L"-I", TypeValue},
> +
> +  {NULL, TypeMax}
> +  };
>
>  /**
>Dump capsule information
> @@ -161,13 +174,12 @@ GetArg (
>  **/
>  EFI_STATUS
>  CreateBmpFmp (
> -  VOID
> +  IN CHAR16 *BmpName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *BmpBuffer;
>UINTN FileSize;
> -  CHAR16*BmpName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_DISPLAY_CAPSULE   *DisplayCapsule;
> @@ -191,22 +203,10 @@ CreateBmpFmp (
>// HorizontalResolution >= BMP_IMAGE_HEADER.PixelWidth
>// VerticalResolution   >= BMP_IMAGE_HEADER.PixelHeight
>
> -  if (Argc != 5) {
> -Print(L"CapsuleApp: Incorrect parameter count.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -
> -  if (StrCmp(Argv[3], L"-O") != 0) {
> -Print(L"CapsuleApp: NO output capsule name.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -  OutputCapsuleName = Argv[4];
> -
>BmpBuffer = NULL;
>FileSize = 0;
>FullCapsuleBuffer = NULL;
>
> -  BmpName = Argv[2];
>Status = ReadFileToBuffer(BmpName, , );
>if (EFI_ERROR(Status)) {
>  Print(L"CapsuleApp: BMP image (%s) is not found.\n", BmpName);
>

Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of parsing parameter.

2019-01-24 Thread Zhang, Chao B
Jiewen & Liming:
   It is a problem. Unlike UiApp. CapsuleApp is supposed to run in Shell.  
ShellLib provides standard parameter parsing support.
Any suggestion on this?

From: Yao, Jiewen
Sent: Friday, January 25, 2019 2:25 PM
To: Chen, Chen A ; edk2-devel@lists.01.org
Cc: Wu, Hao A ; Zhang, Chao B 
Subject: RE: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of 
parsing parameter.

Hey
I don't think MdeModulePkg can depend on ShellPkg.

That is why we do not use ShellLib in the first version.

Do we change the package dependency rule?

Thank you
Yao Jiewen

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Chen A Chen
> Sent: Friday, January 25, 2019 2:14 PM
> To: edk2-devel@lists.01.org<mailto:edk2-devel@lists.01.org>
> Cc: Wu, Hao A mailto:hao.a...@intel.com>>; Zhang, Chao B
> mailto:chao.b.zh...@intel.com>>
> Subject: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic
> of parsing parameter.
>
> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1482
>
> No change functionality, use ShellLib to parsing command line.
>
> Cc: Jian J Wang mailto:jian.j.w...@intel.com>>
> Cc: Hao Wu mailto:hao.a...@intel.com>>
> Cc: Zhang Chao B mailto:chao.b.zh...@intel.com>>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Chen A Chen 
> mailto:chen.a.c...@intel.com>>
> ---
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.c   | 433
> +++--
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf |   2 +
>  2 files changed, 236 insertions(+), 199 deletions(-)
>
> diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> index 4d907242f3..acae0fe261 100644
> --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> @@ -27,6 +27,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  #define CAPSULE_HEADER_SIZE  0x20
>
> @@ -39,15 +40,27 @@
>
>  #define MAX_CAPSULE_NUM 10
>
> -extern UINTN  Argc;
> -extern CHAR16 **Argv;
> -
>  //
>  // Define how many block descriptors we want to test with.
>  //
>  UINTN  NumberOfDescriptors = 1;
> -UINTN  CapsuleFirstIndex;
> -UINTN  CapsuleLastIndex;
> +
> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> +  {L"-C", TypeFlag},
> +  {L"-E", TypeFlag},
> +  {L"-S", TypeFlag},
> +
> +  {L"-NR", TypeFlag},
> +
> +  {L"-G", TypeValue},
> +  {L"-O", TypeValue},
> +  {L"-N", TypeValue},
> +  {L"-D", TypeValue},
> +  {L"-P", TypeValue},
> +  {L"-I", TypeValue},
> +
> +  {NULL, TypeMax}
> +  };
>
>  /**
>Dump capsule information
> @@ -161,13 +174,12 @@ GetArg (
>  **/
>  EFI_STATUS
>  CreateBmpFmp (
> -  VOID
> +  IN CHAR16 *BmpName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *BmpBuffer;
>UINTN FileSize;
> -  CHAR16*BmpName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_DISPLAY_CAPSULE   *DisplayCapsule;
> @@ -191,22 +203,10 @@ CreateBmpFmp (
>// HorizontalResolution >= BMP_IMAGE_HEADER.PixelWidth
>// VerticalResolution   >= BMP_IMAGE_HEADER.PixelHeight
>
> -  if (Argc != 5) {
> -Print(L"CapsuleApp: Incorrect parameter count.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -
> -  if (StrCmp(Argv[3], L"-O") != 0) {
> -Print(L"CapsuleApp: NO output capsule name.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -  OutputCapsuleName = Argv[4];
> -
>BmpBuffer = NULL;
>FileSize = 0;
>FullCapsuleBuffer = NULL;
>
> -  BmpName = Argv[2];
>Status = ReadFileToBuffer(BmpName, , );
>if (EFI_ERROR(Status)) {
>  Print(L"CapsuleApp: BMP image (%s) is not found.\n", BmpName);
> @@ -425,13 +425,12 @@ IsFmpCapsuleGuid (
>  **/
>  EFI_STATUS
>  CreateNestedFmp (
> -  VOID
> +  IN CHAR16 *CapsuleName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *CapsuleBuffer;
>UINTN FileSize;
> -  CHAR16*CapsuleName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_CAP

Re: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic of parsing parameter.

2019-01-24 Thread Yao, Jiewen
Hey
I don't think MdeModulePkg can depend on ShellPkg.

That is why we do not use ShellLib in the first version.

Do we change the package dependency rule?

Thank you
Yao Jiewen

> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of
> Chen A Chen
> Sent: Friday, January 25, 2019 2:14 PM
> To: edk2-devel@lists.01.org
> Cc: Wu, Hao A ; Zhang, Chao B
> 
> Subject: [edk2] [PATCH 1/3] MdeModulePkg/CapsuleApp: Refine code logic
> of parsing parameter.
> 
> BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1482
> 
> No change functionality, use ShellLib to parsing command line.
> 
> Cc: Jian J Wang 
> Cc: Hao Wu 
> Cc: Zhang Chao B 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Chen A Chen 
> ---
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.c   | 433
> +++--
>  MdeModulePkg/Application/CapsuleApp/CapsuleApp.inf |   2 +
>  2 files changed, 236 insertions(+), 199 deletions(-)
> 
> diff --git a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> index 4d907242f3..acae0fe261 100644
> --- a/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> +++ b/MdeModulePkg/Application/CapsuleApp/CapsuleApp.c
> @@ -27,6 +27,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
> 
>  #define CAPSULE_HEADER_SIZE  0x20
> 
> @@ -39,15 +40,27 @@
> 
>  #define MAX_CAPSULE_NUM 10
> 
> -extern UINTN  Argc;
> -extern CHAR16 **Argv;
> -
>  //
>  // Define how many block descriptors we want to test with.
>  //
>  UINTN  NumberOfDescriptors = 1;
> -UINTN  CapsuleFirstIndex;
> -UINTN  CapsuleLastIndex;
> +
> +STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
> +  {L"-C", TypeFlag},
> +  {L"-E", TypeFlag},
> +  {L"-S", TypeFlag},
> +
> +  {L"-NR", TypeFlag},
> +
> +  {L"-G", TypeValue},
> +  {L"-O", TypeValue},
> +  {L"-N", TypeValue},
> +  {L"-D", TypeValue},
> +  {L"-P", TypeValue},
> +  {L"-I", TypeValue},
> +
> +  {NULL, TypeMax}
> +  };
> 
>  /**
>Dump capsule information
> @@ -161,13 +174,12 @@ GetArg (
>  **/
>  EFI_STATUS
>  CreateBmpFmp (
> -  VOID
> +  IN CHAR16 *BmpName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *BmpBuffer;
>UINTN FileSize;
> -  CHAR16*BmpName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_DISPLAY_CAPSULE   *DisplayCapsule;
> @@ -191,22 +203,10 @@ CreateBmpFmp (
>// HorizontalResolution >= BMP_IMAGE_HEADER.PixelWidth
>// VerticalResolution   >= BMP_IMAGE_HEADER.PixelHeight
> 
> -  if (Argc != 5) {
> -Print(L"CapsuleApp: Incorrect parameter count.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -
> -  if (StrCmp(Argv[3], L"-O") != 0) {
> -Print(L"CapsuleApp: NO output capsule name.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -  OutputCapsuleName = Argv[4];
> -
>BmpBuffer = NULL;
>FileSize = 0;
>FullCapsuleBuffer = NULL;
> 
> -  BmpName = Argv[2];
>Status = ReadFileToBuffer(BmpName, , );
>if (EFI_ERROR(Status)) {
>  Print(L"CapsuleApp: BMP image (%s) is not found.\n", BmpName);
> @@ -425,13 +425,12 @@ IsFmpCapsuleGuid (
>  **/
>  EFI_STATUS
>  CreateNestedFmp (
> -  VOID
> +  IN CHAR16 *CapsuleName,
> +  IN CHAR16
> *OutputCapsuleName
>)
>  {
> -  CHAR16
> *OutputCapsuleName;
>VOID  *CapsuleBuffer;
>UINTN FileSize;
> -  CHAR16*CapsuleName;
>UINT8
> *FullCapsuleBuffer;
>UINTN
> FullCapsuleBufferSize;
>EFI_CAPSULE_HEADER
> *NestedCapsuleHeader;
> @@ -439,22 +438,10 @@ CreateNestedFmp (
>UINT32FwType;
>EFI_STATUSStatus;
> 
> -  if (Argc != 5) {
> -Print(L"CapsuleApp: Incorrect parameter count.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -
> -  if (StrCmp(Argv[3], L"-O") != 0) {
> -Print(L"CapsuleApp: NO output capsule name.\n");
> -return EFI_UNSUPPORTED;
> -  }
> -  OutputCapsuleName = Argv[4];
> -
>CapsuleBuffer = NULL;
>FileSize = 0;
>FullCapsuleBuffer = NULL;
> 
> -  CapsuleName = Argv[2];
>Status = ReadFileToBuffer(CapsuleName, , );
>if (EFI_ERROR(Status)) {
>  Print(L"CapsuleApp: Capsule image (%s) is not found.\n",
> CapsuleName);
> @@ -807,7 +794,7 @@ PrintUsage (
>Print(L"  CapsuleApp -G  -O \n");
>Print(L"  CapsuleApp -N  -O \n");
>Print(L"  CapsuleApp -D \n");
> -  Print(L"  CapsuleApp -P GET   -O \n");
> +  Print(L"  CapsuleApp -P  -I  -O \n");
>Print(L"Parameter:\n");
>Print(L"  -NR: No reset will be triggered for the capsule with\n");
>Print(L"   CAPSULE_FLAGS_PERSIST_ACROSS_RESET and
> without\n");
> @@ -817,8 +804,7 @@ PrintUsage (
>