@@ -28,17 +28,18 @@ import (
2828 "strconv"
2929 "strings"
3030
31- "github.com/arduino/FirmwareUploader/programmers/rp2040load"
3231 "github.com/arduino/FirmwareUploader/programmers/avrdude"
3332 "github.com/arduino/FirmwareUploader/programmers/bossac"
33+ "github.com/arduino/FirmwareUploader/programmers/rp2040load"
3434 "github.com/arduino/FirmwareUploader/utils/context"
35+ "github.com/pkg/errors"
3536)
3637
3738var flasher * Flasher
3839var payloadSize uint16
3940var programmer context.Programmer
4041
41- func Run (ctx * context.Context ) {
42+ func Run (ctx * context.Context ) error {
4243
4344 if ctx .ProgrammerPath != "" {
4445 if strings .Contains (filepath .Base (ctx .ProgrammerPath ), "bossac" ) {
@@ -48,60 +49,61 @@ func Run(ctx *context.Context) {
4849 } else if strings .Contains (filepath .Base (ctx .ProgrammerPath ), "rp2040load" ) {
4950 programmer = rp2040load .NewRP2040Load (ctx )
5051 } else {
51- log . Fatal ("Programmer path not specified correctly, programmer path set to: " + ctx .ProgrammerPath )
52+ return errors . New ("Programmer path not specified correctly, programmer path set to: " + ctx .ProgrammerPath )
5253 }
5354 }
5455
5556 if ctx .FWUploaderBinary != "" {
5657 log .Println ("Flashing firmware uploader nina" )
5758 if programmer == nil {
58- log . Fatal ("ERROR: You must specify a programmer!" )
59+ return errors . New ("ERROR: You must specify a programmer!" )
5960 }
6061 if err := programmer .Flash (ctx .FWUploaderBinary , nil ); err != nil {
61- log . Fatal ( err )
62+ return err
6263 }
6364 }
6465
6566 log .Println ("Connecting to programmer" )
6667 if f , err := OpenFlasher (ctx .PortName ); err != nil {
67- log . Fatal ( err )
68+ return err
6869 } else {
6970 flasher = f
7071 }
72+ defer flasher .Close ()
7173
7274 // Synchronize with programmer
7375 log .Println ("Sync with programmer" )
7476 if err := flasher .Hello (); err != nil {
75- log . Fatal ( err )
77+ return err
7678 }
7779
7880 // Check maximum supported payload size
7981 log .Println ("Reading max payload size" )
8082 if _payloadSize , err := flasher .GetMaximumPayloadSize (); err != nil {
81- log . Fatal ( err )
83+ return err
8284 } else {
8385 payloadSize = _payloadSize
8486 }
8587 if payloadSize < 1024 {
86- log . Fatalf ("Programmer reports %d as maximum payload size (1024 is needed)" , payloadSize )
88+ return errors . Errorf ("Programmer reports %d as maximum payload size (1024 is needed)" , payloadSize )
8789 }
8890
8991 if ctx .FirmwareFile != "" {
9092 if err := flashFirmware (ctx ); err != nil {
91- log . Fatal ( err )
93+ return err
9294 }
9395 }
9496
9597 if ctx .RootCertDir != "" || len (ctx .Addresses ) != 0 {
9698 if err := flashCerts (ctx ); err != nil {
97- log . Fatal ( err )
99+ return err
98100 }
99101 }
100102
101103 if ctx .ReadAll {
102104 log .Println ("Reading all flash" )
103105 if err := readAllFlash (); err != nil {
104- log . Fatal ( err )
106+ return err
105107 }
106108 }
107109
@@ -110,18 +112,19 @@ func Run(ctx *context.Context) {
110112 if ctx .BinaryToRestore != "" {
111113 log .Println ("Restoring binary" )
112114 if programmer == nil {
113- log . Fatal ("ERROR: You must specify a programmer!" )
115+ errors . New ("ERROR: You must specify a programmer!" )
114116 }
115117 if err := programmer .Flash (ctx .BinaryToRestore , nil ); err != nil {
116- log . Fatal ( err )
118+ return err
117119 }
118120 }
121+ return nil
119122}
120123
121124func readAllFlash () error {
122125 for i := 0 ; i < 256 ; i ++ {
123126 if data , err := flasher .Read (uint32 (i * 1024 ), 1024 ); err != nil {
124- log . Fatal ( err )
127+ return err
125128 } else {
126129 os .Stdout .Write (data )
127130 }
@@ -142,7 +145,7 @@ func flashCerts(ctx *context.Context) error {
142145 }
143146
144147 if len (certificatesData ) > 0x20000 {
145- log . Fatal ("Too many certificates! Aborting" )
148+ errors . New ("Too many certificates! Aborting" )
146149 }
147150
148151 // pad certificatesData to flash page
0 commit comments