4242 commonFlags arguments.Flags // contains fqbn and address
4343 module string
4444 retries uint8
45+ fwFile string
4546)
4647
4748// NewFlashCommand creates a new `flash` command
@@ -53,13 +54,15 @@ func NewFlashCommand() *cobra.Command {
5354 Example : "" +
5455 " " + os .
Args [
0 ]
+ " firmware flash --fqbn arduino:samd:mkr1000 --address COM10 --module [email protected] \n " + 5556 " " + os .Args [0 ] + " firmware flash -b arduino:samd:mkr1000 -a COM10 -m WINC15000\n " +
56- " " + os .Args [0 ] + " firmware flash -b arduino:samd:mkr1000 -a COM10\n " ,
57+ " " + os .Args [0 ] + " firmware flash -b arduino:samd:mkr1000 -a COM10\n " +
58+ " " + os .Args [0 ] + " firmware flash -b arduino:samd:mkr1000 -a COM10 -i firmware.bin\n " ,
5759 Args : cobra .NoArgs ,
5860 Run : runFlash ,
5961 }
6062 commonFlags .AddToCommand (command )
6163 command .Flags ().StringVarP (& module , "module" , "m" , "" , "Firmware module ID, e.g.: WINC1500, NINA" )
6264 command .Flags ().Uint8Var (& retries , "retries" , 9 , "Number of retries in case of upload failure (default 9)" )
65+ command .Flags ().StringVarP (& fwFile , "input-file" , "i" , "" , "Path of the firmware to upload" )
6366 return command
6467}
6568
@@ -87,24 +90,35 @@ func runFlash(cmd *cobra.Command, args []string) {
8790 // Normalize module name
8891 moduleName = strings .ToUpper (moduleName )
8992
90- var firmware * firmwareindex.IndexFirmware
91- if moduleVersion == "" {
92- firmware = board .LatestFirmware
93+ var firmwareFilePath * paths.Path
94+ var err error
95+ // If a local firmware file has been specified
96+ if fwFile != "" {
97+ firmwareFilePath = paths .New (fwFile )
98+ if ! firmwareFilePath .Exist () {
99+ feedback .Errorf ("firmware file not found in %s" , firmwareFilePath )
100+ os .Exit (errorcodes .ErrGeneric )
101+ }
93102 } else {
94- firmware = board .GetFirmware (moduleVersion )
95- }
96- logrus .Debugf ("module name: %s, firmware version: %s" , firmware .Module , firmware .Version .String ())
97- if firmware == nil {
98- feedback .Errorf ("Error getting firmware for board: %s" , commonFlags .Fqbn )
99- os .Exit (errorcodes .ErrGeneric )
100- }
101-
102- firmwareFile , err := download .DownloadFirmware (firmware )
103- if err != nil {
104- feedback .Errorf ("Error downloading firmware from %s: %s" , firmware .URL , err )
105- os .Exit (errorcodes .ErrGeneric )
103+ // Download the firmware
104+ var firmware * firmwareindex.IndexFirmware
105+ if moduleVersion == "" {
106+ firmware = board .LatestFirmware
107+ } else {
108+ firmware = board .GetFirmware (moduleVersion )
109+ }
110+ logrus .Debugf ("module name: %s, firmware version: %s" , firmware .Module , firmware .Version .String ())
111+ if firmware == nil {
112+ feedback .Errorf ("Error getting firmware for board: %s" , commonFlags .Fqbn )
113+ os .Exit (errorcodes .ErrGeneric )
114+ }
115+ firmwareFilePath , err = download .DownloadFirmware (firmware )
116+ if err != nil {
117+ feedback .Errorf ("Error downloading firmware from %s: %s" , firmware .URL , err )
118+ os .Exit (errorcodes .ErrGeneric )
119+ }
120+ logrus .Debugf ("firmware file downloaded in %s" , firmwareFilePath .String ())
106121 }
107- logrus .Debugf ("firmware file downloaded in %s" , firmwareFile .String ())
108122
109123 loaderSketchPath , err := download .DownloadSketch (board .LoaderSketch )
110124 if err != nil {
@@ -116,7 +130,7 @@ func runFlash(cmd *cobra.Command, args []string) {
116130 loaderSketch := strings .ReplaceAll (loaderSketchPath .String (), loaderSketchPath .Ext (), "" )
117131
118132 for retry := 1 ; retry <= int (retries ); retry ++ {
119- err = updateFirmware (board , loaderSketch , moduleName , uploadToolDir , firmwareFile )
133+ err = updateFirmware (board , loaderSketch , moduleName , uploadToolDir , firmwareFilePath )
120134 if err == nil {
121135 logrus .Info ("Operation completed: success! :-)" )
122136 break
0 commit comments