From c5700a04ea85c045fbd21709a5acbad4864ba369 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 20 May 2012 16:03:08 +0000 Subject: added reset program for arduino 10000 and newer git-svn-id: https://svn.spreadspace.org/avr/trunk@21 aa12f405-d877-488e-9caf-2d797e2a1cc7 --- tools/Makefile | 36 +++++++++++++++++++++++++++++ tools/reset_arduino.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 tools/Makefile create mode 100644 tools/reset_arduino.c diff --git a/tools/Makefile b/tools/Makefile new file mode 100644 index 0000000..5887bd4 --- /dev/null +++ b/tools/Makefile @@ -0,0 +1,36 @@ +## +## spreadspace avr utils +## +## +## Copyright (C) 2012 Christian Pointner +## +## This file is part of spreadspace avr utils. +## +## spreadspace avr utils is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## any later version. +## +## spreadspace avr utils 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. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with spreadspace avr utils. If not, see . +## + +TARGETS=reset_arduino + +all: $(TARGETS) + +reset_arduino: reset_arduino.c + $(CC) -o $@ $< + +.PHONY: clean + +clean: + rm -f *.o + rm -f *.d + rm -f *.d.* + rm -f $(TARGETS) diff --git a/tools/reset_arduino.c b/tools/reset_arduino.c new file mode 100644 index 0000000..99ace88 --- /dev/null +++ b/tools/reset_arduino.c @@ -0,0 +1,63 @@ +/* + * spreadspace avr utils + * + * + * Copyright (C) 2012 Christian Pointner + * + * This file is part of spreadspace avr utils. + * + * spreadspace avr utils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * spreadspace avr utils 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with spreadspace avr utils. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#define STATE_OFF 0 +#define STATE_ON 1 + +void setDTRState (int fd, int state) { + int flags; + + ioctl(fd, TIOCMGET, &flags); + flags = (state == STATE_ON ? flags | TIOCM_DTR : flags & ~TIOCM_DTR); + ioctl(fd, TIOCMSET, &flags); +} + +int +main(int argc, char* argv[]) +{ + char* device = argc < 2 ? "/dev/ttyUSB0" : argv[1]; + int fd = open(device, O_RDWR); + if (fd == 0) { + fprintf(stderr, "Could not open %s\n", device); + return EXIT_FAILURE; + } + + setDTRState(fd, STATE_ON); + struct timeval sleeptime = {0, 100000}; // 100ms + select(0, NULL, NULL, NULL, &sleeptime); + setDTRState(fd, STATE_OFF); + sleeptime.tv_sec = 0; + sleeptime.tv_usec = 100000; + select(0, NULL, NULL, NULL, &sleeptime); + setDTRState(fd, STATE_ON); + close(fd); + + return EXIT_SUCCESS; +} -- cgit v1.2.3