openbsd-ports/devel/arduino/files/arduinoboot
jasper 3cec2e35f4 import arduino 22
Arduino is an open-source electronics prototyping platform based on
flexible, easy-to-use hardware and software. It's intended for artists,
designers, hobbyists, and anyone interested in creating interactive
objects or environments. 
[..]
This package contains the libraries, header files and tools to develop
Arduino sketches. It does not include the Arduino IDE frontend.

based on work from and ok ckuethe@
2011-09-17 16:41:30 +00:00

72 lines
2.4 KiB
Perl

#!/usr/bin/perl
# $OpenBSD: arduinoboot,v 1.1.1.1 2011/09/17 16:41:30 jasper Exp $
# Copyright (c) 2011 Chris Kuethe <ckuethe@openbsd.org>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
use strict;
use warnings;
use autodie;
my (%B, $cmd, $file, $type, $port, $prog, $speed);
%B = readfile("${TRUEPREFIX}/share/arduino/boards.txt");
if ((1 == @ARGV) && ($ARGV[0] eq "-l")) {
print "Boards:\n";
foreach $_ (sort keys(%B)) {
printf(" %-12s = %s\n", $_, $B{$_}->{"name"});
}
system("avrdude -c ?");
exit;
}
if ((@ARGV < 2) || (@ARGV > 4)) {
print "Usage:\t$0 <boardtype> <port> [<programmer> [speed]]\n";
print "\t$0 -l\n";
exit;
}
chomp ($type = $ARGV[0]);
chomp ($port = $ARGV[1]);
$prog = (3 == @ARGV) ? $ARGV[2] : $B{$type}->{"upload.protocol"};
$speed = (4 == @ARGV) ? $ARGV[3] : $B{$type}->{"upload.speed"};
$file = "${TRUEPREFIX}/share/arduino/bootloaders/" .
$B{$type}->{"bootloader.path"} . "/" . $B{$type}->{"bootloader.file"};
$cmd = sprintf("avrdude -q -e -u -p %s -c %s -P %s -b %d",
$B{$type}->{"build.mcu"}, $prog, $port, $speed);
$cmd .= sprintf(" -U lock:w:%s:m", $B{$type}->{"bootloader.unlock_bits"});
$cmd .= sprintf(" -U lfuse:w:%s:m", $B{$type}->{"bootloader.low_fuses"});
$cmd .= sprintf(" -U hfuse:w:%s:m", $B{$type}->{"bootloader.high_fuses"});
$cmd .= sprintf(" -U efuse:w:%s:m", $B{$type}->{"bootloader.extended_fuses"});
$cmd .= sprintf(" -U flash:w:%s", $file);
$cmd .= sprintf(" -U lock:w:%s:m", $B{$type}->{"bootloader.lock_bits"});
print $cmd . "\n";
system $cmd;
###########################################################################
sub readfile {
my %H;
open (my $F, $_[0]);
while (<$F>) {
next unless (/^([A-Za-z0-9_]+)\.([A-Za-z0-9_\.]+)=(.+)$/);
$H{$1}->{$2} = $3;
}
close ($F);
return %H;
}