This file is indexed.

/usr/bin/ard-reset-arduino is in arduino-mk 1.3.1-1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env perl

use strict;
use warnings;

use Device::SerialPort;
use Getopt::Long;
use Pod::Usage;

my %Opt =
  (
   period => 0.1,
  );

GetOptions(\%Opt,
       "period=f",   # width of reset pulse in seconds
       "verbose!",
       "help!",
       "info!",
       "caterina!",
      );

if ($Opt{help} || $Opt{info})
  {
    usage();
  }

die "No Arduinos found!\n"
  unless @ARGV;

foreach my $dev (@ARGV)
  {
    my $p = Device::SerialPort->new($dev)
      or die "Unable to open $dev: $!\n";

    if ($Opt{caterina})
    {
        $p->baudrate(1200);
        $p->write_settings;
        $p->close;

        print STDERR "Forcing reset using 1200bps open/close on port $dev\n"
            if $Opt{verbose};

        # wait for it to come back
        sleep 1;
        while( ! -e $dev ) {
            print STDERR "Waiting for $dev to come back\n"
                if $Opt{verbose};
            sleep 1;
        }

        print STDERR "$dev has come back after reset\n"
            if $Opt{verbose};
    }
    else
    {
    my $dt = $Opt{period};

    print STDERR "Setting DTR high for ${dt}s on $dev\n"
      if $Opt{verbose};

    die "Invalid pulse width ($dt), "
      unless $dt > 0.0;

    $p->pulse_dtr_on($dt * 1000.0);
    }
  }

## here endeth the main

sub usage
  {
    pod2usage(-verbose => 2);
  }

__END__

=head1 NAME

ard-reset-arduino - Reset an Arduino

=head1 USAGE

    $ ard-reset-arduino /dev/cu.usb*

    $ ard-reset-arduino --verbose --period=0.1 /dev/cu.usb*

    $ ard-reset-arduino --verbose --caterina /dev/ttyUSB0

=head1 DESCRIPTION

To reset (most) Arduinos, it's enough to just pulse the DTR line.

You can do that from the shell with stty, but there's an interesting
diversity of command flags. This little program gives a uniform interface
at the cost of requiring C<Device::SerialPort>.

=head1 OPTIONS

=over

=item --verbose

Watch what's going on on STDERR.

=item --period=0.25

Specify the DTR pulse width in seconds.

=item --caterina

Reset a Leonardo, Micro, Robot or LilyPadUSB.

=back

=head1 BUGS AND LIMITATIONS

There are no known bugs in this application.

Please report problems to the author.

Patches are welcome.

=head1 AUTHOR

Martin Oldfield, ex-atelier@mjo.tc

Support for Leonardo/Micro added by sej7278, https://github.com/sej7278

Thanks to Daniele Vergini who suggested this to me, and supplied
a command line version.

=head1 LICENCE AND COPYRIGHT

Copyright (c) 2012, Martin Oldfield. All rights reserved.

This file is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.