diff --git a/firmwares/NINA/1.4.3/NINA_W102-Nano_RP2040_Connect.bin b/firmwares/NINA/1.4.3/NINA_W102-Nano_RP2040_Connect.bin new file mode 100644 index 00000000..aee49551 Binary files /dev/null and b/firmwares/NINA/1.4.3/NINA_W102-Nano_RP2040_Connect.bin differ diff --git a/go.mod b/go.mod index e4a191d3..a65ad82a 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,10 @@ go 1.14 replace go.bug.st/serial => github.com/cmaglie/go-serial v0.0.0-20200923162623-b214c147e37e require ( - github.com/arduino/arduino-cli v0.0.0-20200924151007-69ac12c98b2b - github.com/arduino/go-paths-helper v1.3.2 + github.com/arduino/arduino-cli v0.0.0-20210422154105-5aa424818026 + github.com/arduino/go-paths-helper v1.4.0 + github.com/imjasonmiller/godice v0.1.2 // indirect github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.6.1 - go.bug.st/serial v1.1.1 + go.bug.st/serial v1.1.2 ) diff --git a/go.sum b/go.sum index 0d29c754..74b4b27c 100644 --- a/go.sum +++ b/go.sum @@ -3,16 +3,24 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/arduino/arduino-cli v0.0.0-20200924151007-69ac12c98b2b h1:CfjoOrbIDUGET/k7D3+/gQuuw2SIrdHMBcgQ7on0aE4= github.com/arduino/arduino-cli v0.0.0-20200924151007-69ac12c98b2b/go.mod h1:FoP2RfB4sX+XvDiLKysORud9lv8HtgYq14sNawOnx7o= +github.com/arduino/arduino-cli v0.0.0-20210419093035-6ca680d235a3 h1:QTdhyXMl5coZIKxCh0yX0H5vj5XJ9zI2hLiFDHyTWbU= +github.com/arduino/arduino-cli v0.0.0-20210419093035-6ca680d235a3/go.mod h1:5dWroFPvaWuBNVuYMV0X8osqIhyUG5otRgJlRHN831E= +github.com/arduino/arduino-cli v0.0.0-20210422154105-5aa424818026 h1:YzxiXS2tBkotw65inAy9hYkXEHcCmszj9mRNQXNEEnU= +github.com/arduino/arduino-cli v0.0.0-20210422154105-5aa424818026/go.mod h1:5dWroFPvaWuBNVuYMV0X8osqIhyUG5otRgJlRHN831E= github.com/arduino/board-discovery v0.0.0-20180823133458-1ba29327fb0c h1:agh2JT96G8egU7FEb13L4dq3fnCN7lxXhJ86t69+W7s= github.com/arduino/board-discovery v0.0.0-20180823133458-1ba29327fb0c/go.mod h1:HK7SpkEax/3P+0w78iRQx1sz1vCDYYw9RXwHjQTB5i8= github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= github.com/arduino/go-paths-helper v1.2.0/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= github.com/arduino/go-paths-helper v1.3.2 h1:5U9TSKQODiwSVgTxskC0PNl0l0Vf40GUlp99Zy2SK8w= github.com/arduino/go-paths-helper v1.3.2/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck= +github.com/arduino/go-paths-helper v1.4.0 h1:ilnseAdxmN1bFnLxxXHRtcdmt9jBf3O4jtYfWfqule4= +github.com/arduino/go-paths-helper v1.4.0/go.mod h1:V82BWgAAp4IbmlybxQdk9Bpkz8M4Qyx+RAFKaG9NuvU= github.com/arduino/go-properties-orderedmap v1.1.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= github.com/arduino/go-properties-orderedmap v1.3.0 h1:4No/vQopB36e7WUIk6H6TxiSEJPiMrVOCZylYmua39o= github.com/arduino/go-properties-orderedmap v1.3.0/go.mod h1:DKjD2VXY/NZmlingh4lSFMEYCVubfeArCsGPGDwb2yk= @@ -21,6 +29,7 @@ github.com/arduino/go-timeutils v0.0.0-20171220113728-d1dd9e313b1b/go.mod h1:uwG github.com/arduino/go-win32-utils v0.0.0-20180330194947-ed041402e83b h1:3PjgYG5gVPA7cipp7vIR2lF96KkEJIFBJ+ANnuv6J20= github.com/arduino/go-win32-utils v0.0.0-20180330194947-ed041402e83b/go.mod h1:iIPnclBMYm1g32Q5kXoqng4jLhMStReIP7ZxaoUC2y8= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -36,6 +45,8 @@ github.com/codeclysm/cc v1.2.2 h1:1ChS4EvWTjw6bH2sd6QiMcmih0itVVrWdh9MmOliX/I= github.com/codeclysm/cc v1.2.2/go.mod h1:XtW4ArCNgQwFphcRGG9+sPX5WM1J6/u0gMy5ZdV3obA= github.com/codeclysm/extract/v3 v3.0.1 h1:uVutzakOCBzoguzMNs41FPLR7+x/2sIoiRA6hLbaLqA= github.com/codeclysm/extract/v3 v3.0.1/go.mod h1:NKsw+hqua9H+Rlwy/w/3Qgt9jDonYEgB6wJu+25eOKw= +github.com/codeclysm/extract/v3 v3.0.2 h1:sB4LcE3Php7LkhZwN0n2p8GCwZe92PEQutdbGURf5xc= +github.com/codeclysm/extract/v3 v3.0.2/go.mod h1:NKsw+hqua9H+Rlwy/w/3Qgt9jDonYEgB6wJu+25eOKw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -45,6 +56,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/goselect v0.1.1 h1:tiSSgKE1eJtxs1h/VgGQWuXUP0YS4CDIFMp6vaI1ls0= github.com/creack/goselect v0.1.1/go.mod h1:a/NhLweNvqIYMuxcMOuWY516Cimucms3DglDzQP3hKY= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/daaku/go.zipexe v1.0.0 h1:VSOgZtH418pH9L16hC/JrgSNJbbAL26pj7lmD1+CGdY= github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= @@ -53,6 +66,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= @@ -61,9 +76,11 @@ github.com/fluxio/iohelpers v0.0.0-20160419043813-3a4dd67a94d2 h1:C6sOwknxwWfLBE github.com/fluxio/iohelpers v0.0.0-20160419043813-3a4dd67a94d2/go.mod h1:c7sGIpDbBo0JZZ1tKyC1p5smWf8QcUjK4bFtZjHAecg= github.com/fluxio/multierror v0.0.0-20160419044231-9c68d39025e5 h1:R8jFW6G/bjoXjWPFrEfw9G5YQDlYhwV4AC+Eonu6wmk= github.com/fluxio/multierror v0.0.0-20160419044231-9c68d39025e5/go.mod h1:BEUDl7FG1cc76sM0J0x8dqr6RhiL4uqvk6oFkwuNyuM= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -106,6 +123,8 @@ github.com/imjasonmiller/godice v0.1.2 h1:T1/sW/HoDzFeuwzOOuQjmeMELz9CzZ53I2CnD+ github.com/imjasonmiller/godice v0.1.2/go.mod h1:8cTkdnVI+NglU2d6sv+ilYcNaJ5VSTBwvMbFULJd/QQ= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -120,6 +139,8 @@ github.com/juju/testing v0.0.0-20200510222523-6c8c298c77a0/go.mod h1:hpGvhGHPVbN github.com/juju/utils v0.0.0-20180808125547-9dfc6dbfb02b/go.mod h1:6/KLg8Wz/y2KVGWEpkK9vMNGkOnu4k/cqs8Z1fKjTOk= github.com/juju/version v0.0.0-20161031051906-1f41e27e54f2/go.mod h1:kE8gK5X0CImdr7qpSKl3xB2PmpySSmfj7zVbkZFs81U= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= @@ -127,8 +148,10 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leonelquinteros/gotext v1.4.0 h1:2NHPCto5IoMXbrT0bldPrxj0qM5asOCwtb1aUQZ1tys= github.com/leonelquinteros/gotext v1.4.0/go.mod h1:yZGXREmoGTtBvZHNcc+Yfug49G/2spuF/i/Qlsvz1Us= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -136,6 +159,8 @@ github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzR github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/marcinbor85/gohex v0.0.0-20200531163658-baab2527a9a2 h1:n7R8fUwWZUB2XtyzBNsYNNm9/XgOBj6pvLi7GLMCHtM= github.com/marcinbor85/gohex v0.0.0-20200531163658-baab2527a9a2/go.mod h1:Pb6XcsXyropB9LNHhnqaknG/vEwYztLkQzVCHv8sQ3M= +github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84 h1:hyAgCuG5nqTMDeUD8KZs7HSPs6KprPgPP8QmGV8nyvk= +github.com/marcinbor85/gohex v0.0.0-20210308104911-55fb1c624d84/go.mod h1:Pb6XcsXyropB9LNHhnqaknG/vEwYztLkQzVCHv8sQ3M= github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= @@ -148,6 +173,7 @@ github.com/mdlayher/netlink v0.0.0-20190313131330-258ea9dff42c/go.mod h1:eQB3mZE github.com/mdlayher/taskstats v0.0.0-20190313225729-7cbba52ee072/go.mod h1:sGdS7A6CAETR53zkdjGkgoFlh1vSm7MtX+i8XfEsTMA= github.com/miekg/dns v1.0.5 h1:MQBGf2JEJDu0rg9WOpQZzeO+zW8UKwgkvP3R1dUU1Yw= github.com/miekg/dns v1.0.5/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -158,9 +184,11 @@ github.com/nkovacs/streamquote v1.0.0/go.mod h1:BN+NaZ2CmdKqUuTUXUEm9j95B2TRbpOW github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oleksandr/bonjour v0.0.0-20160508152359-5dcf00d8b228 h1:Cvfd2dOlXIPTeEkOT/h8PyK4phBngOM4at9/jlgy7d4= github.com/oleksandr/bonjour v0.0.0-20160508152359-5dcf00d8b228/go.mod h1:MGuVJ1+5TX1SCoO2Sx0eAnjpdRytYla2uC1YIZfkC9c= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -189,6 +217,9 @@ github.com/segmentio/fasthash v0.0.0-20180216231524-a72b379d632e/go.mod h1:tm/wZ github.com/segmentio/objconv v1.0.1/go.mod h1:auayaH5k3137Cl4SoXTgrzQcuQDmvuVtZgS0fb1Ahys= github.com/segmentio/stats/v4 v4.5.3 h1:Y/DSUWZ4c8ICgqJ9rQohzKvGqGWbLPWad5zmxVoKN+Y= github.com/segmentio/stats/v4 v4.5.3/go.mod h1:LsaahUJR7iiSs8mnkvQvdQ/RLHAS5adGLxuntg0ydGo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -211,8 +242,11 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E= github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= @@ -225,12 +259,16 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.bug.st/cleanup v1.0.0 h1:XVj1HZxkBXeq3gMT7ijWUpHyIC1j8XAoNSyQ06CskgA= go.bug.st/cleanup v1.0.0/go.mod h1:EqVmTg2IBk4znLbPD28xne3abjsJftMdqqJEjhn70bk= go.bug.st/downloader/v2 v2.0.1 h1:F/ZgVDrUHo2tHIeOVbcl4rgGaMmQgAEjn5c8yi5t+Iw= go.bug.st/downloader/v2 v2.0.1/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= +go.bug.st/downloader/v2 v2.1.1 h1:nyqbUizo3E2IxCCm4YFac4FtSqqFpqWP+Aae5GCMuw4= +go.bug.st/downloader/v2 v2.1.1/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII= go.bug.st/relaxed-semver v0.0.0-20190922224835-391e10178d18 h1:F1qxtaFuewctYc/SsHRn+Q7Dtwi+yJGPgVq8YLtQz98= go.bug.st/relaxed-semver v0.0.0-20190922224835-391e10178d18/go.mod h1:Cx1VqMtEhE9pIkEyUj3LVVVPkv89dgW8aCKrRPDR/uE= go.bug.st/serial.v1 v0.0.0-20180827123349-5f7892a7bb45 h1:mACY1anK6HNCZtm/DK2Rf2ZPHggVqeB0+7rY9Gl6wyI= @@ -241,8 +279,12 @@ go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180214000028-650f4a345ab4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200406173513-056763e48d71 h1:DOmugCavvUtnUD114C1Wh+UgTgQZ4pMLzXxi1pSt+/Y= +golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -256,9 +298,14 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -269,10 +316,14 @@ golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM= golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -286,6 +337,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -313,6 +365,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= @@ -320,6 +373,13 @@ gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20160818015218-f2b6f6c918c4/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170712054546-1be3d31502d6/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/main.go b/main.go index 006cb3f3..498c65b5 100644 --- a/main.go +++ b/main.go @@ -15,7 +15,7 @@ import ( "github.com/arduino/FirmwareUploader/utils/context" ) -var ctx context.Context +var ctx = &context.Context{} func init() { flag.StringVar(&ctx.PortName, "port", "", "serial port to use for flashing") diff --git a/modules/nina/main.go b/modules/nina/main.go index 50f1b155..b2121b0f 100644 --- a/modules/nina/main.go +++ b/modules/nina/main.go @@ -28,24 +28,25 @@ import ( "strconv" "strings" + "github.com/arduino/FirmwareUploader/programmers/rp2040load" "github.com/arduino/FirmwareUploader/programmers/avrdude" "github.com/arduino/FirmwareUploader/programmers/bossac" "github.com/arduino/FirmwareUploader/utils/context" ) -var f *Flasher +var flasher *Flasher var payloadSize uint16 var programmer context.Programmer -func Run(ctx context.Context) { - - var err error +func Run(ctx *context.Context) { if ctx.ProgrammerPath != "" { if strings.Contains(filepath.Base(ctx.ProgrammerPath), "bossac") { - programmer = &bossac.Bossac{} + programmer = bossac.NewBossac(ctx) } else if strings.Contains(filepath.Base(ctx.ProgrammerPath), "avrdude") { - programmer = &avrdude.Avrdude{} + programmer = avrdude.NewAvrdude(ctx) + } else if strings.Contains(filepath.Base(ctx.ProgrammerPath), "rp2040load") { + programmer = rp2040load.NewRP2040Load(ctx) } else { log.Fatal("Programmer path not specified correctly, programmer path set to: " + ctx.ProgrammerPath) } @@ -56,34 +57,27 @@ func Run(ctx context.Context) { if programmer == nil { log.Fatal("ERROR: You must specify a programmer!") } - if ctx.BinaryToRestore == "" { - ctx.BinaryToRestore, err = programmer.DumpAndFlash(&ctx, ctx.FWUploaderBinary) - } else { - err = programmer.Flash(&ctx, ctx.FWUploaderBinary) - } - if err != nil { + if err := programmer.Flash(ctx.FWUploaderBinary, nil); err != nil { log.Fatal(err) } } log.Println("Connecting to programmer") - if _f, err := OpenFlasher(ctx.PortName); err != nil { + if f, err := OpenFlasher(ctx.PortName); err != nil { log.Fatal(err) } else { - f = _f + flasher = f } - defer f.Close() // Synchronize with programmer log.Println("Sync with programmer") - if err := f.Hello(); err != nil { + if err := flasher.Hello(); err != nil { log.Fatal(err) } // Check maximum supported payload size log.Println("Reading max payload size") - _payloadSize, err := f.GetMaximumPayloadSize() - if err != nil { + if _payloadSize, err := flasher.GetMaximumPayloadSize(); err != nil { log.Fatal(err) } else { payloadSize = _payloadSize @@ -111,25 +105,22 @@ func Run(ctx context.Context) { } } - if ctx.BinaryToRestore != "" { - f.Close() + flasher.Close() - log.Println("Restoring previous sketch") + if ctx.BinaryToRestore != "" { + log.Println("Restoring binary") if programmer == nil { log.Fatal("ERROR: You must specify a programmer!") } - if err := programmer.Flash(&ctx, ctx.BinaryToRestore); err != nil { + if err := programmer.Flash(ctx.BinaryToRestore, nil); err != nil { log.Fatal(err) } - - // just to allow cleanup via defer() - // f.port, _ = OpenSerial(ctx.PortName) } } func readAllFlash() error { for i := 0; i < 256; i++ { - if data, err := f.Read(uint32(i*1024), 1024); err != nil { + if data, err := flasher.Read(uint32(i*1024), 1024); err != nil { log.Fatal(err) } else { os.Stdout.Write(data) @@ -138,7 +129,7 @@ func readAllFlash() error { return nil } -func flashCerts(ctx context.Context) error { +func flashCerts(ctx *context.Context) error { CertificatesOffset := 0x10000 if ctx.RootCertDir != "" { @@ -164,7 +155,7 @@ func flashCerts(ctx context.Context) error { return flashChunk(CertificatesOffset, certificatesData, false) } -func flashFirmware(ctx context.Context) error { +func flashFirmware(ctx *context.Context) error { FirmwareOffset := 0x0000 log.Printf("Flashing firmware from '%v'", ctx.FirmwareFile) @@ -181,7 +172,7 @@ func flashChunk(offset int, buffer []byte, doChecksum bool) error { chunkSize := int(payloadSize) bufferLength := len(buffer) - if err := f.Erase(uint32(offset), uint32(bufferLength)); err != nil { + if err := flasher.Erase(uint32(offset), uint32(bufferLength)); err != nil { return err } @@ -192,7 +183,7 @@ func flashChunk(offset int, buffer []byte, doChecksum bool) error { if end > bufferLength { end = bufferLength } - if err := f.Write(uint32(offset+i), buffer[start:end]); err != nil { + if err := flasher.Write(uint32(offset+i), buffer[start:end]); err != nil { return err } } @@ -200,7 +191,7 @@ func flashChunk(offset int, buffer []byte, doChecksum bool) error { fmt.Println("") if doChecksum { - return f.Md5sum(buffer) + return flasher.Md5sum(buffer) } else { return nil } diff --git a/modules/sara/main.go b/modules/sara/main.go index 1932b0f3..54713c52 100644 --- a/modules/sara/main.go +++ b/modules/sara/main.go @@ -33,19 +33,12 @@ var f *Flasher var payloadSize uint16 var programmer context.Programmer -func Run(ctx context.Context) { - - var err error - programmer = &bossac.Bossac{} +func Run(ctx *context.Context) { + programmer := bossac.NewBossac(ctx) if ctx.FWUploaderBinary != "" { log.Println("Flashing firmware uploader sara") - if ctx.BinaryToRestore == "" { - ctx.BinaryToRestore, err = programmer.DumpAndFlash(&ctx, ctx.FWUploaderBinary) - } else { - err = programmer.Flash(&ctx, ctx.FWUploaderBinary) - } - if err != nil { + if err := programmer.Flash(ctx.FWUploaderBinary, nil); err != nil { log.Fatal(err) } } @@ -56,7 +49,6 @@ func Run(ctx context.Context) { } else { f = _f } - defer f.Close() time.Sleep(2 * time.Second) @@ -68,14 +60,14 @@ func Run(ctx context.Context) { // Check maximum supported payload size log.Println("Reading actual firmware version") - fwVersion, err := f.GetFwVersion() - if err != nil { + + if fwVersion, err := f.GetFwVersion(); err != nil { log.Fatal(err) } else { - payloadSize = 128 + log.Println("Initial firmware version: " + fwVersion) } - log.Println("Initial firmware version: " + fwVersion) + payloadSize = 128 if ctx.FirmwareFile != "" { if err := flashFirmware(ctx); err != nil { @@ -83,27 +75,24 @@ func Run(ctx context.Context) { } } - fwVersion, err = f.GetFwVersion() - if err != nil { + if fwVersion, err := f.GetFwVersion(); err != nil { log.Fatal(err) + } else { + log.Println("After applying update firmware version: " + fwVersion) } - log.Println("After applying update firmware version: " + fwVersion) + f.Close() if ctx.BinaryToRestore != "" { log.Println("Restoring previous sketch") - f.Close() - if err := programmer.Flash(&ctx, ctx.BinaryToRestore); err != nil { + if err := programmer.Flash(ctx.BinaryToRestore, nil); err != nil { log.Fatal(err) } - - // just to allow cleanup via defer() - // f.port, _ = OpenSerial(ctx.PortName) } } -func flashFirmware(ctx context.Context) error { +func flashFirmware(ctx *context.Context) error { FirmwareOffset := 0x0000 log.Printf("Flashing firmware from '%v'", ctx.FirmwareFile) diff --git a/modules/winc/main.go b/modules/winc/main.go index 8511ccd2..61b4360b 100644 --- a/modules/winc/main.go +++ b/modules/winc/main.go @@ -35,19 +35,13 @@ import ( var f *Flasher var payloadSize uint16 -func Run(ctx context.Context) { +func Run(ctx *context.Context) { - var err error - programmer := &bossac.Bossac{} + programmer := bossac.NewBossac(ctx) if ctx.FWUploaderBinary != "" { log.Println("Flashing firmware uploader winc") - if ctx.BinaryToRestore == "" { - ctx.BinaryToRestore, err = programmer.DumpAndFlash(&ctx, ctx.FWUploaderBinary) - } else { - err = programmer.Flash(&ctx, ctx.FWUploaderBinary) - } - if err != nil { + if err := programmer.Flash(ctx.FWUploaderBinary, nil); err != nil { log.Fatal(err) } } @@ -58,7 +52,6 @@ func Run(ctx context.Context) { } else { f = _f } - defer f.Close() // Synchronize with programmer log.Println("Sync with programmer") @@ -97,16 +90,14 @@ func Run(ctx context.Context) { } } + f.Close() + if ctx.BinaryToRestore != "" { log.Println("Restoring previous sketch") - f.Close() - if err := programmer.Flash(&ctx, ctx.BinaryToRestore); err != nil { + if err := programmer.Flash(ctx.BinaryToRestore, nil); err != nil { log.Fatal(err) } - - // just to allow cleanup via defer() - // f.port, _ = OpenSerial(ctx.PortName) } } @@ -121,7 +112,7 @@ func readAllFlash() error { return nil } -func flashCerts(ctx context.Context) error { +func flashCerts(ctx *context.Context) error { CertificatesOffset := 0x4000 if ctx.RootCertDir != "" { @@ -136,7 +127,7 @@ func flashCerts(ctx context.Context) error { return flashChunk(CertificatesOffset, certificatesData) } -func flashFirmware(ctx context.Context) error { +func flashFirmware(ctx *context.Context) error { FirmwareOffset := 0x0000 log.Printf("Flashing firmware from '%v'", ctx.FirmwareFile) diff --git a/programmers/avrdude/avrdude.go b/programmers/avrdude/avrdude.go index 96b047de..92d7131f 100644 --- a/programmers/avrdude/avrdude.go +++ b/programmers/avrdude/avrdude.go @@ -1,52 +1,51 @@ package avrdude import ( - "io/ioutil" + "fmt" "log" "os" - "path/filepath" "time" + "github.com/arduino/arduino-cli/arduino/serialutils" "github.com/arduino/FirmwareUploader/utils/context" "github.com/arduino/arduino-cli/executils" - "github.com/pkg/errors" + "github.com/arduino/go-paths-helper" ) type Avrdude struct { + avrdudePath *paths.Path + configPath *paths.Path } -func (b *Avrdude) Flash(ctx *context.Context, filename string) error { - log.Println("Flashing " + filename) - err := invokeAvrdude([]string{ctx.ProgrammerPath, "-C" + filepath.Join(filepath.Dir(ctx.ProgrammerPath), "..", "etc/avrdude.conf"), "-v", "-patmega4809", "-cxplainedmini_updi", "-Pusb", "-b115200", "-e", "-D", "-Uflash:w:" + filename + ":i", "-Ufuse8:w:0x00:m"}) - - time.Sleep(3 * time.Second) - - return err -} - -func (b *Avrdude) DumpAndFlash(ctx *context.Context, filename string) (string, error) { - dir, err := ioutil.TempDir("", "wifiFlasher_dump") - if err != nil { - return "", errors.WithMessage(err, "creating temp dir to store current sketch") +func NewAvrdude(ctx *context.Context) *Avrdude { + avrdudePath := paths.New(ctx.ProgrammerPath) + return &Avrdude{ + avrdudePath: avrdudePath, + configPath: avrdudePath.Parent().Join("..", "etc", "avrdude.conf"), } +} - log.Println("Reading existing sketch from the baord, to restore it later") - err = invokeAvrdude([]string{ctx.ProgrammerPath, "-C" + filepath.Join(filepath.Dir(ctx.ProgrammerPath), "..", "etc/avrdude.conf"), "-v", "-patmega4809", "-cxplainedmini_updi", "-Pusb", "-b115200", "-D", "-Uflash:r:" + filepath.Join(dir, "dump.bin") + ":i"}) - if err != nil { - return "", err - } - log.Println("Original sketch saved at " + filepath.Join(dir, "dump.bin")) - +func (b *Avrdude) Flash(filename string, cb *serialutils.ResetProgressCallbacks) error { log.Println("Flashing " + filename) - err = invokeAvrdude([]string{ctx.ProgrammerPath, "-C" + filepath.Join(filepath.Dir(ctx.ProgrammerPath), "..", "etc/avrdude.conf"), "-v", "-patmega4809", "-cxplainedmini_updi", "-Pusb", "-b115200", "-e", "-D", "-Uflash:w:" + filename + ":i", "-Ufuse8:w:0x00:m"}) - - time.Sleep(3 * time.Second) + err := b.invoke( + fmt.Sprintf("-C%s", b.configPath), + "-v", + "-patmega4809", + "-cxplainedmini_updi", + "-Pusb", + "-b115200", + "-e", + "-D", + fmt.Sprintf("-Uflash:w:%s:i", filename), + "-Ufuse8:w:0x00:m") + + time.Sleep(5 * time.Second) - return filepath.Join(dir, "dump.bin"), err + return err } -func invokeAvrdude(args []string) error { - cmd, err := executils.NewProcess(args...) +func (b *Avrdude) invoke(args ...string) error { + cmd, err := executils.NewProcessFromPath(b.avrdudePath, args...) if err != nil { return err } diff --git a/programmers/bossac/bossac.go b/programmers/bossac/bossac.go index b530f928..d8d83dd1 100644 --- a/programmers/bossac/bossac.go +++ b/programmers/bossac/bossac.go @@ -1,70 +1,48 @@ package bossac import ( - "io/ioutil" "log" "os" - "path/filepath" "time" "github.com/arduino/FirmwareUploader/utils/context" "github.com/arduino/arduino-cli/arduino/serialutils" "github.com/arduino/arduino-cli/executils" - "github.com/pkg/errors" + "github.com/arduino/go-paths-helper" ) type Bossac struct { + bossacPath *paths.Path + portName string } -func (b *Bossac) Flash(ctx *context.Context, filename string) error { - log.Println("Entering board into bootloader mode") - port, err := serialutils.Reset(ctx.PortName, true) - if err != nil { - return err +func NewBossac(ctx *context.Context) *Bossac { + return &Bossac{ + bossacPath: paths.New(ctx.ProgrammerPath), + portName: ctx.PortName, } - - log.Println("Flashing " + filename) - err = invokeBossac([]string{ctx.ProgrammerPath, "-e", "-R", "-p", port, "-w", filename}) - - ctx.PortName, err = serialutils.WaitForNewSerialPortOrDefaultTo(port) - log.Println("Board is back online " + ctx.PortName) - time.Sleep(1 * time.Second) - - return err } -func (b *Bossac) DumpAndFlash(ctx *context.Context, filename string) (string, error) { - dir, err := ioutil.TempDir("", "wifiFlasher_dump") - if err != nil { - return "", errors.WithMessage(err, "creating temp dir to store current sketch") - } - +func (b *Bossac) Flash(filename string, cb *serialutils.ResetProgressCallbacks) error { log.Println("Entering board into bootloader mode") - port, err := serialutils.Reset(ctx.PortName, true) + port, err := serialutils.Reset(b.portName, true, cb) if err != nil { - return "", err - } - - log.Println("Reading existing sketch from the baord, to restore it later") - err = invokeBossac([]string{ctx.ProgrammerPath, "-u", "-r", "-p", port, filepath.Join(dir, "dump.bin")}) - - log.Println("Original sketch saved at " + filepath.Join(dir, "dump.bin")) - if err != nil { - return "", err + return err } log.Println("Flashing " + filename) - err = invokeBossac([]string{ctx.ProgrammerPath, "-e", "-R", "-p", port, "-w", filename}) + if port == "" { + port = b.portName + } + err = b.invoke("-e", "-R", "-p", port, "-w", filename) - ctx.PortName, err = serialutils.WaitForNewSerialPortOrDefaultTo(port) - log.Println("Board is back online " + ctx.PortName) - time.Sleep(1 * time.Second) + time.Sleep(5 * time.Second) - return filepath.Join(dir, "dump.bin"), err + return err } -func invokeBossac(args []string) error { - cmd, err := executils.NewProcess(args...) +func (b *Bossac) invoke(args ...string) error { + cmd, err := executils.NewProcessFromPath(b.bossacPath, args...) if err != nil { return err } diff --git a/programmers/rp2040load/rp2040load.go b/programmers/rp2040load/rp2040load.go new file mode 100644 index 00000000..d87b05c1 --- /dev/null +++ b/programmers/rp2040load/rp2040load.go @@ -0,0 +1,51 @@ +package rp2040load + +import ( + "log" + "os" + "time" + + "github.com/arduino/FirmwareUploader/utils/context" + "github.com/arduino/arduino-cli/arduino/serialutils" + "github.com/arduino/arduino-cli/executils" + "github.com/arduino/go-paths-helper" +) + +type RP2040Load struct { + rp2040LoadPath *paths.Path + portName string +} + +func NewRP2040Load(ctx *context.Context) *RP2040Load { + return &RP2040Load{ + rp2040LoadPath: paths.New(ctx.ProgrammerPath), + portName: ctx.PortName, + } +} + +func (b *RP2040Load) Flash(filename string, cb *serialutils.ResetProgressCallbacks) error { + log.Println("Entering board into bootloader mode") + _, err := serialutils.Reset(b.portName, true, cb) + if err != nil { + return err + } + + log.Println("Flashing " + filename) + if err := b.invoke("-v", "-D", filename); err != nil { + log.Fatalf("Error flashing %s: %s", filename, err) + } + + time.Sleep(5 * time.Second) + + return err +} + +func (b *RP2040Load) invoke(args ...string) error { + cmd, err := executils.NewProcessFromPath(b.rp2040LoadPath, args...) + if err != nil { + return err + } + cmd.RedirectStdoutTo(os.Stdout) + cmd.RedirectStderrTo(os.Stderr) + return cmd.Run() +} diff --git a/utils/context/context.go b/utils/context/context.go index 50156e68..5490f4f5 100644 --- a/utils/context/context.go +++ b/utils/context/context.go @@ -2,6 +2,8 @@ package context import ( "fmt" + + "github.com/arduino/arduino-cli/arduino/serialutils" ) type addressFlags []string @@ -29,6 +31,5 @@ type Context struct { } type Programmer interface { - DumpAndFlash(ctx *Context, filename string) (string, error) - Flash(ctx *Context, filename string) error + Flash(filename string, cb *serialutils.ResetProgressCallbacks) error } diff --git a/utils/utils.go b/utils/utils.go index cd51caf6..d8662cb5 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -45,6 +45,7 @@ func GetCompatibleWith(name string, rootPath string) map[string][]firmware { knownBoards["mkrvidor4000"] = combo{match: "(NINA)", loader: "NINA/Firmware.*mkrvidor.*", avoid: "uno"} knownBoards["uno2018"] = combo{match: "(NINA)", loader: "NINA/Firmware.*unowifi.*", prefer: "uno", avoid: "mkr"} knownBoards["mkrnb1500"] = combo{match: "SARA", loader: "SARA/SerialSARAPassthrough*"} + knownBoards["nanorp2040connect"] = combo{match: "(NINA).*(Nano_RP2040_Connect)", loader: "NINA/Firmware.*nanorp2040connect.*"} listAll := false