@@ -615,7 +615,7 @@ A tool may have some actions not defined (it's not mandatory to define all four
615
615
tools.avrdude.cmd.path={path}/bin/avrdude
616
616
tools.avrdude.config.path={path}/etc/avrdude.conf
617
617
618
- tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" -p{build.mcu} -c{upload.protocol} -P{serial .port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
618
+ tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" -p{build.mcu} -c{upload.port. protocol} -P{upload .port.address } -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
619
619
620
620
A ** {runtime.tools.TOOL_NAME.path}** and ** {runtime.tools.TOOL_NAME-TOOL_VERSION.path}** property is generated for the
621
621
tools of Arduino AVR Boards and any other platform installed via Boards Manager. ** {runtime.tools.TOOL_NAME.path}**
@@ -625,6 +625,64 @@ The tool configuration properties are available globally without the prefix. For
625
625
property can be used as ** {cmd.path}** inside the recipe, and the same happens for all the other avrdude configuration
626
626
variables.
627
627
628
+ #### Pluggable Discovery
629
+
630
+ Discovery tools are a special kind of tools that are used to find supported boards, a platform must declare one or more
631
+ Pluggable Discoveries in its ` platform.txt ` . It's ok to use another platform discovery or the builtin ones if necessary.
632
+
633
+ There are two different syntaxes to declare discoveries, if the platform uses just one discovery:
634
+
635
+ ```
636
+ discovery.required=PLATFORM:DISCOVERY_NAME
637
+ ```
638
+
639
+ instead if it needs multiple discoveries:
640
+
641
+ ```
642
+ discovery.required.0=PLATFORM:DISCOVERY_ID_1
643
+ discovery.required.1=PLATFORM:DISCOVERY_ID_2
644
+ ```
645
+
646
+ A platform that supports only boards connected to the serial can easily use the builtin ` serial-discovery ` without
647
+ creating a custom Pluggable Discovery:
648
+
649
+ ```
650
+ discovery.required=builtin:serial-discovery
651
+ ```
652
+
653
+ if it supports also boards connected to the network it can use the builtin ` mdns-discovery ` :
654
+
655
+ ```
656
+ discovery.required.0=builtin:serial-discovery
657
+ discovery.required.1=builtin:mdns-discovery
658
+ ```
659
+
660
+ Since the above syntax requires adding a discovery in the ` discoveryDependencies ` field in the platform
661
+ ` package_index.json ` it might be cumbersome to do it before releasing it so we also provide another syntax to ease
662
+ development:
663
+
664
+ ```
665
+ discovery.DISCOVERY_ID.pattern=DISCOVERY_RECIPE
666
+ ```
667
+
668
+ ` DISCOVERY_ID ` must be replaced by a unique identifier for the particular discovery and ` DISCOVERY_RECIPE ` must be
669
+ replaced by the command line to launch the discovery. An example could be:
670
+
671
+ ```
672
+ ## Teensy Ports Discovery
673
+ discovery.teensy.pattern="{runtime.tools.teensy_ports.path}/hardware/tools/teensy_ports" -J2
674
+ ```
675
+
676
+ We strongly recommend not using this syntax on released platforms but only for development purposes.
677
+
678
+ For backward compatibility, if a platform does not declare any discovery (using the ` discovery.* ` properties in
679
+ ` platform.txt ` ) it will automatically inherits ` builtin:serial-discovery ` and ` builtin:mdns-discovery ` (but not other
680
+ builtin discoveries that may be possibly added in the future). This will allow all legacy non-pluggable platforms to
681
+ migrate to pluggable discovery without disruption.
682
+
683
+ For detailed information see the [ Pluggable Discovery specification] ( pluggable-discovery-specification.md )
684
+ documentation.
685
+
628
686
#### Verbose parameter
629
687
630
688
It is possible for the user to enable verbosity from the Preferences panel of the IDEs or Arduino CLI's ` --verbose `
@@ -651,26 +709,48 @@ The Upload action is triggered when the user clicks on the "Upload" button on th
651
709
[ ` arduino-cli upload ` ] ( commands/arduino-cli_upload.md ) . Arduino uses the term "upload" for the process of transferring a
652
710
program to the Arduino board.
653
711
654
- The ** upload.tool** property determines the tool to be used for upload. A specific ** upload.tool ** property should be
655
- defined for every board in boards.txt:
712
+ The ** upload.tool.<protocol_name \> ** property determines the tool to be used for upload. A specific
713
+ ** upload.tool.<protocol_name \> ** property should be defined for every board in boards.txt:
656
714
657
715
[......]
658
- uno.upload.tool=avrdude
716
+ uno.upload.tool.serial =avrdude
659
717
[......]
660
- leonardo.upload.tool=avrdude
718
+ leonardo.upload.tool.serial=avrdude
719
+ leonardo.upload.tool.network=arduino_ota
661
720
[......]
662
721
722
+ When the user tries to upload using a certain protocol but the board doesn't support it it will fallback to ` default ` if
723
+ specified. A board can always specify a ` default ` protocol even if others are defined:
724
+
725
+ [......]
726
+ uno.upload.tool.default=avrdude
727
+ [......]
728
+ leonardo.upload.tool.default=avrdude
729
+ leonardo.upload.tool.network=arduino_ota
730
+ [......]
731
+
732
+ ` default ` is also used when no upload address is provided by the user, this can be done only for boards that use upload
733
+ tools with builtin port detection like ` openocd ` .
734
+
735
+ For backward compatibility with IDE 1.8.15 and older the previous syntax is still supported:
736
+
737
+ uno.upload.tool=avrdude
738
+
739
+ The previous syntax is equivalent to:
740
+
741
+ uno.upload.tool.default=avrdude
742
+
663
743
Other upload parameters can also be defined for the board. For example, in the Arduino AVR Boards boards.txt we have:
664
744
665
745
[.....]
666
746
uno.name=Arduino Uno
667
- uno.upload.tool=avrdude
747
+ uno.upload.tool.serial =avrdude
668
748
uno.upload.protocol=arduino
669
749
uno.upload.maximum_size=32256
670
750
uno.upload.speed=115200
671
751
[.....]
672
752
leonardo.name=Arduino Leonardo
673
- leonardo.upload.tool=avrdude
753
+ leonardo.upload.tool.serial =avrdude
674
754
leonardo.upload.protocol=avr109
675
755
leonardo.upload.maximum_size=28672
676
756
leonardo.upload.speed=57600
@@ -681,9 +761,112 @@ Other upload parameters can also be defined for the board. For example, in the A
681
761
Most ** {upload.XXXX}** variables are used later in the avrdude upload recipe in platform.txt:
682
762
683
763
[.....]
684
- tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial .port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
764
+ tools.avrdude.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.port. protocol} -P{upload .port.address } -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
685
765
[.....]
686
766
767
+ If necessary the same property can be defined multiple times for different protocols:
768
+
769
+ leonardo.upload.serial.maximum_size=28672
770
+ leonardo.upload.network.maximum_size=256
771
+
772
+ The two above properties will be available as ** {upload.serial.maximum_size}** and ** {upload.network.maximum_size}** .
773
+
774
+ #### Properties from Pluggable Discovery
775
+
776
+ If a platform supports Pluggable Discovery it can also use the port's properties returned by a discovery. For example,
777
+ the following port metadata coming from a pluggable discovery:
778
+
779
+ {
780
+ "eventType": "add",
781
+ "port": {
782
+ "address": "/dev/ttyACM0",
783
+ "label": "ttyACM0",
784
+ "protocol": "serial",
785
+ "protocolLabel": "Serial Port (USB)",
786
+ "properties": {
787
+ "pid": "0x804e",
788
+ "vid": "0x2341",
789
+ "serialNumber": "EBEABFD6514D32364E202020FF10181E",
790
+ "name": "ttyACM0"
791
+ }
792
+ }
793
+ }
794
+
795
+ will be available on the recipe as the variables:
796
+
797
+ {upload.port.address} = /dev/ttyACM0
798
+ {upload.port.label} = ttyACM0
799
+ {upload.port.protocol} = serial
800
+ {upload.port.protocolLabel} = Serial Port (USB)
801
+ {upload.port.properties.pid} = 0x8043
802
+ {upload.port.properties.vid} = 0x2341
803
+ {upload.port.properties.serialNumber} = EBEABFD6514D32364E202020FF10181E
804
+ {upload.port.properties.name} = ttyACM0
805
+ {serial.port} = /dev/ttyACM0 # for backward compatibility
806
+ {serial.port.file} = ttyACM0 # only because protocol=serial
807
+
808
+ Here another example:
809
+
810
+ {
811
+ "eventType": "add",
812
+ "port": {
813
+ "address": "192.168.1.232",
814
+ "label": "SSH on my-board (192.168.1.232)",
815
+ "protocol": "ssh",
816
+ "protocolLabel": "SSH Network port",
817
+ "properties": {
818
+ "macprefix": "AA:BB:CC",
819
+ "macaddress": "AA:BB:CC:DD:EE:FF"
820
+ }
821
+ }
822
+ }
823
+
824
+ that is translated to:
825
+
826
+ {upload.port.address} = 192.168.1.232
827
+ {upload.port.label} = SSH on my-board (192.168.1.232)
828
+ {upload.port.protocol} = ssh
829
+ {upload.port.protocolLabel} = SSH Network port
830
+ {upload.port.properties.macprefix} = AA:BB:CC
831
+ {upload.port.properties.macaddress} = AA:BB:CC:DD:EE:FF
832
+ {serial.port} = 192.168.1.232 # for backward compatibility
833
+
834
+ This configuration, together with protocol selection, allows to remove the hardcoded ` network_pattern ` , now we can
835
+ replace the legacy recipe (split into multiple lines for clarity):
836
+
837
+ tools.bossac.upload.network_pattern="{runtime.tools.arduinoOTA.path}/bin/arduinoOTA"
838
+ -address {serial.port} -port 65280
839
+ -sketch "{build.path}/{build.project_name}.bin"
840
+
841
+ with:
842
+
843
+ tools.arduino_ota.upload.pattern="{runtime.tools.arduinoOTA.path}/bin/arduinoOTA"
844
+ -address {upload.port.address} -port 65280
845
+ -sketch "{build.path}/{build.project_name}.bin"
846
+
847
+ #### User provided fields
848
+
849
+ Some upload recipes might require custom fields that must be provided by the user, like username and password to upload
850
+ over the network. In this case the recipe must use the special placeholder {upload.field.FIELD_NAME} where FIELD_NAME
851
+ must be declared separately in the recipe using the following format:
852
+
853
+ tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME=FIELD_LABEL
854
+ tools.UPLOAD_RECIPE_ID.upload.field.FIELD_NAME.secret=true
855
+
856
+ FIELD_LABEL is the label shown in the graphical prompt to ask the user to enter the value of the field. The secret
857
+ property is optional and it should be set to true if the field is a secret (like passwords or token).
858
+
859
+ Let’s see how a complete example will look like:
860
+
861
+ tools.arduino_ota.upload.field.username=Username
862
+ tools.arduino_ota.upload.field.password=Password
863
+ tools.arduino_ota.upload.field.password.secret=true
864
+ tools.arduino_ota.upload.pattern="{runtime.tools.arduinoOTA.path}/bin/arduinoOTA"
865
+ -address {upload.port.address} -port 65280
866
+ -username "{upload.field.username}
867
+ -password "{upload.field.password}"
868
+ -sketch "{build.path}/{build.project_name}.bin"
869
+
687
870
#### Upload verification
688
871
689
872
Upload verification can be enabled via the Arduino IDE's ** File > Preferences > Verify code after upload** or
@@ -744,10 +927,14 @@ support uploading via programmer.
744
927
745
928
The full path (e.g., ` /dev/ttyACM0 ` ) of the port selected via the IDE or
746
929
[ ` arduino-cli upload ` ] ( commands/arduino-cli_upload.md ) 's ` --port ` option is available as a configuration property
747
- ** {serial .port}** .
930
+ ** {upload .port.address }** .
748
931
749
932
The file component of the port's path (e.g., ` ttyACM0 ` ) is available as the configuration property
750
- ** {serial.port.file}** .
933
+ ** {upload.port.label}** .
934
+
935
+ For backward compatibility with IDE 1.8.15 and older the old property ** serial.port** is still available and is
936
+ identical to ** {upload.port.address}** . Instead ** serial.port.file** is identical to ** {upload.port.label}** and
937
+ available only if protocol in use is ** serial** .
751
938
752
939
### Upload using an external programmer
753
940
@@ -756,7 +943,17 @@ The `program` action is triggered via the **Sketch > Upload Using Programmer** f
756
943
compiled sketch to a board using an external programmer.
757
944
758
945
The ** program.tool** property determines the tool to be used for this action. This property is typically defined for
759
- each programmer in [ programmers.txt] ( #programmerstxt ) :
946
+ each programmer in [ programmers.txt] ( #programmerstxt ) and uses the same syntax as ` upload ` action:
947
+
948
+ [......]
949
+ usbasp.program.tool.serial=avrdude
950
+ [......]
951
+ arduinoasisp.program.tool.serial=avrdude
952
+ [......]
953
+ arduinoisp.program.tool.default=avrdude
954
+ [......]
955
+
956
+ For backward compatibility with IDE 1.8.15 and older the previous syntax is still supported:
760
957
761
958
[......]
762
959
usbasp.program.tool=avrdude
@@ -786,7 +983,18 @@ the board.
786
983
1 . ` bootloader ` is used to flash the bootloader to the board
787
984
788
985
The ** bootloader.tool** property determines the tool to be used for the ` erase ` and ` bootloader ` actions both. This
789
- property is typically defined for each board in boards.txt:
986
+ property is typically defined for each board in boards.txt and uses the same syntax as ` upload ` action:
987
+
988
+ [......]
989
+ uno.bootloader.tool.serial=avrdude
990
+ [......]
991
+ leonardo.upload.tool.serial=avrdude
992
+ leonardo.upload.tool.network=arduino_ota
993
+ [......]
994
+ duemilanove.upload.tool.default=avrdude
995
+ [......]
996
+
997
+ For backward compatibility with IDE 1.8.15 and older the previous syntax is still supported:
790
998
791
999
[......]
792
1000
uno.bootloader.tool=avrdude
@@ -1009,3 +1217,7 @@ software is in use:
1009
1217
This behavior
1010
1218
[ can be configured] ( https://arduino.github.io/arduino-cli/latest/commands/arduino-cli_core_install/#options )
1011
1219
- ** Arduino Pro IDE** : (since 0.1.0) runs the script for any installed platform.
1220
+
1221
+ ```
1222
+
1223
+ ```
0 commit comments