@@ -23,26 +23,21 @@ import (
23
23
"bytes"
24
24
"fmt"
25
25
"os"
26
- "path/filepath"
27
26
"strings"
28
27
"time"
29
28
30
- "github.com/arduino/arduino-cli/arduino/serialutils"
31
29
"github.com/arduino/arduino-cli/cli/errorcodes"
32
30
"github.com/arduino/arduino-cli/cli/feedback"
31
+ "github.com/arduino/arduino-fwuploader/cli/arguments"
32
+ "github.com/arduino/arduino-fwuploader/cli/common"
33
33
"github.com/arduino/arduino-fwuploader/flasher"
34
- "github.com/arduino/arduino-fwuploader/indexes"
35
34
"github.com/arduino/arduino-fwuploader/indexes/download"
36
- programmer "github.com/arduino/arduino-fwuploader/programmers"
37
35
"github.com/arduino/go-paths-helper"
38
- "github.com/arduino/go-properties-orderedmap"
39
- "github.com/sirupsen/logrus"
40
36
"github.com/spf13/cobra"
41
37
)
42
38
43
39
var (
44
- fqbn string
45
- address string
40
+ commonFlags arguments.Flags
46
41
certificateURLs []string
47
42
certificatePaths []string
48
43
)
@@ -58,61 +53,26 @@ func NewFlashCommand() *cobra.Command {
58
53
" " + os .Args [0 ] + " certificates flash -b arduino:samd:mkr1000 -a COM10 -u arduino.cc:443 -u google.cc:443\n " +
59
54
" " + os .Args [0 ] + " certificates flash -b arduino:samd:mkr1000 -a COM10 -f /home/me/VeriSign.cer -f /home/me/Digicert.cer\n " ,
60
55
Args : cobra .NoArgs ,
61
- Run : run ,
56
+ Run : runFlash ,
62
57
}
63
-
64
- command .Flags ().StringVarP (& fqbn , "fqbn" , "b" , "" , "Fully Qualified Board Name, e.g.: arduino:samd:mkr1000, arduino:mbed_nano:nanorp2040connect" )
65
- command .Flags ().StringVarP (& address , "address" , "a" , "" , "Upload port, e.g.: COM10, /dev/ttyACM0" )
58
+ commonFlags .AddToCommand (command )
66
59
command .Flags ().StringSliceVarP (& certificateURLs , "url" , "u" , []string {}, "List of urls to download root certificates, e.g.: arduino.cc:443" )
67
60
command .Flags ().StringSliceVarP (& certificatePaths , "file" , "f" , []string {}, "List of paths to certificate file, e.g.: /home/me/Digicert.cer" )
68
61
return command
69
62
}
70
63
71
- func run (cmd * cobra.Command , args []string ) {
72
- packageIndex , err := indexes .GetPackageIndex ()
73
- if err != nil {
74
- feedback .Errorf ("Can't load package index: %s" , err )
75
- os .Exit (errorcodes .ErrGeneric )
76
- }
64
+ func runFlash (cmd * cobra.Command , args []string ) {
77
65
78
- firmwareIndex , err := indexes .GetFirmwareIndex ()
79
- if err != nil {
80
- feedback .Errorf ("Can't load firmware index: %s" , err )
81
- os .Exit (errorcodes .ErrGeneric )
82
- }
83
-
84
- if fqbn == "" {
85
- feedback .Errorf ("Error during certificates flashing: missing board fqbn" )
86
- os .Exit (errorcodes .ErrBadArgument )
87
- }
88
-
89
- if address == "" {
90
- feedback .Errorf ("Error during certificates flashing: missing board address" )
91
- os .Exit (errorcodes .ErrBadArgument )
92
- }
66
+ packageIndex , firmwareIndex := common .InitIndexes ()
67
+ common .CheckFlags (commonFlags .Fqbn , commonFlags .Address )
68
+ board := common .GetBoard (firmwareIndex , commonFlags .Fqbn )
69
+ uploadToolDir := common .GetUploadToolDir (packageIndex , board )
93
70
94
71
if len (certificateURLs ) == 0 && len (certificatePaths ) == 0 {
95
72
feedback .Errorf ("Error during certificates flashing: no certificates provided" )
96
73
os .Exit (errorcodes .ErrBadArgument )
97
74
}
98
75
99
- board := firmwareIndex .GetBoard (fqbn )
100
- if board == nil {
101
- feedback .Errorf ("Can't find board with %s fqbn" , fqbn )
102
- os .Exit (errorcodes .ErrBadArgument )
103
- }
104
-
105
- toolRelease := indexes .GetToolRelease (packageIndex , board .Uploader )
106
- if toolRelease == nil {
107
- feedback .Errorf ("Error getting upload tool %s for board %s" , board .Uploader , board .Fqbn )
108
- os .Exit (errorcodes .ErrGeneric )
109
- }
110
- uploadToolDir , err := download .DownloadTool (toolRelease )
111
- if err != nil {
112
- feedback .Errorf ("Error downloading tool %s: %s" , board .Uploader , err )
113
- os .Exit (errorcodes .ErrGeneric )
114
- }
115
-
116
76
loaderSketchPath , err := download .DownloadSketch (board .LoaderSketch )
117
77
if err != nil {
118
78
feedback .Errorf ("Error downloading loader sketch from %s: %s" , board .LoaderSketch .URL , err )
@@ -121,42 +81,9 @@ func run(cmd *cobra.Command, args []string) {
121
81
122
82
loaderSketch := strings .ReplaceAll (loaderSketchPath .String (), loaderSketchPath .Ext (), "" )
123
83
124
- // Check if board needs a 1200bps touch for upload
125
- bootloaderPort := address
126
- if board .UploadTouch {
127
- logrus .Info ("Putting board into bootloader mode" )
128
- newUploadPort , err := serialutils .Reset (address , board .UploadWait , nil )
129
- if err != nil {
130
- feedback .Errorf ("Error during certificates flashing: missing board address" )
131
- os .Exit (errorcodes .ErrGeneric )
132
- }
133
- if newUploadPort != "" {
134
- logrus .Infof ("Found port to upload Loader: %s" , newUploadPort )
135
- bootloaderPort = newUploadPort
136
- }
137
- }
138
-
139
- uploaderCommand := board .GetUploaderCommand ()
140
- uploaderCommand = strings .ReplaceAll (uploaderCommand , "{tool_dir}" , filepath .FromSlash (uploadToolDir .String ()))
141
- uploaderCommand = strings .ReplaceAll (uploaderCommand , "{serial.port.file}" , bootloaderPort )
142
- uploaderCommand = strings .ReplaceAll (uploaderCommand , "{loader.sketch}" , loaderSketch )
143
-
144
- commandLine , err := properties .SplitQuotedString (uploaderCommand , "\" " , false )
84
+ programmerOut , programmerErr , err := common .FlashSketch (board , loaderSketch , uploadToolDir , commonFlags .Address )
145
85
if err != nil {
146
- feedback .Errorf (`Error splitting command line "%s": %s` , uploaderCommand , err )
147
- os .Exit (errorcodes .ErrGeneric )
148
- }
149
-
150
- // Flash loader Sketch
151
- programmerOut := new (bytes.Buffer )
152
- programmerErr := new (bytes.Buffer )
153
- if feedback .GetFormat () == feedback .JSON {
154
- err = programmer .Flash (commandLine , programmerOut , programmerErr )
155
- } else {
156
- err = programmer .Flash (commandLine , os .Stdout , os .Stderr )
157
- }
158
- if err != nil {
159
- feedback .Errorf ("Error during certificates flashing: %s" , err )
86
+ feedback .Error (err )
160
87
os .Exit (errorcodes .ErrGeneric )
161
88
}
162
89
0 commit comments