diff --git a/devel/bossa/Makefile b/devel/bossa/Makefile index a7dba8859577..60ce8b688fdc 100644 --- a/devel/bossa/Makefile +++ b/devel/bossa/Makefile @@ -2,7 +2,7 @@ PORTNAME= bossa PORTVERSION= 1.7.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MAINTAINER= bsdports@kyle-evans.net diff --git a/devel/bossa/files/patch-src_PosixSerialPort.cpp b/devel/bossa/files/patch-src_PosixSerialPort.cpp new file mode 100644 index 000000000000..4b203897fb17 --- /dev/null +++ b/devel/bossa/files/patch-src_PosixSerialPort.cpp @@ -0,0 +1,47 @@ +--- src/PosixSerialPort.cpp.orig 2017-03-31 15:31:35 UTC ++++ src/PosixSerialPort.cpp +@@ -85,6 +85,9 @@ PosixSerialPort::open(int baud, + + switch (baud) + { ++ case 1200: ++ speed = B1200; ++ break; + case 9600: + speed = B9600; + break; +@@ -297,6 +300,34 @@ PosixSerialPort::timeout(int millisecs) + { + _timeout = millisecs; + return true; ++} ++ ++void ++PosixSerialPort::setDTR(bool dtr) ++{ ++ if (_devfd == -1) ++ return; ++ ++ int iFlags = TIOCM_DTR; ++ ++ if (dtr) ++ ioctl(_devfd, TIOCMBIS, &iFlags); ++ else ++ ioctl(_devfd, TIOCMBIC, &iFlags); ++} ++ ++void ++PosixSerialPort::setRTS(bool rts) ++{ ++ if (_devfd == -1) ++ return; ++ ++ int iFlags = TIOCM_RTS; ++ ++ if (rts) ++ ioctl(_devfd, TIOCMBIS, &iFlags); ++ else ++ ioctl(_devfd, TIOCMBIC, &iFlags); + } + + void diff --git a/devel/bossa/files/patch-src_PosixSerialPort.h b/devel/bossa/files/patch-src_PosixSerialPort.h new file mode 100644 index 000000000000..62af93673715 --- /dev/null +++ b/devel/bossa/files/patch-src_PosixSerialPort.h @@ -0,0 +1,11 @@ +--- src/PosixSerialPort.h.orig 2017-03-31 15:31:35 UTC ++++ src/PosixSerialPort.h +@@ -52,6 +52,8 @@ class PosixSerialPort : public SerialPort (public) + + bool timeout(int millisecs); + void flush(); ++ void setDTR(bool dtr); ++ void setRTS(bool rts); + void setAutoFlush(bool autoflush); + + private: diff --git a/devel/bossa/files/patch-src_SerialPort.h b/devel/bossa/files/patch-src_SerialPort.h new file mode 100644 index 000000000000..48dc8eff44db --- /dev/null +++ b/devel/bossa/files/patch-src_SerialPort.h @@ -0,0 +1,11 @@ +--- src/SerialPort.h.orig 2017-03-31 15:31:35 UTC ++++ src/SerialPort.h +@@ -68,6 +68,8 @@ class SerialPort (public) + + virtual bool timeout(int millisecs) = 0; + virtual void flush() = 0; ++ virtual void setDTR(bool dtr) = 0; ++ virtual void setRTS(bool rts) = 0; + + virtual std::string name() const { return _name; } + diff --git a/devel/bossa/files/patch-src_WinSerialPort.cpp b/devel/bossa/files/patch-src_WinSerialPort.cpp new file mode 100644 index 000000000000..e20f1393376f --- /dev/null +++ b/devel/bossa/files/patch-src_WinSerialPort.cpp @@ -0,0 +1,18 @@ +--- src/WinSerialPort.cpp.orig 2017-03-31 15:31:35 UTC ++++ src/WinSerialPort.cpp +@@ -251,3 +251,15 @@ WinSerialPort::flush() + { + Sleep(1); + } ++ ++void ++WinSerialPort::setDTR(bool dtr) ++{ ++ Sleep(1); ++} ++ ++void ++WinSerialPort::setRTS(bool rts) ++{ ++ Sleep(1); ++} diff --git a/devel/bossa/files/patch-src_WinSerialPort.h b/devel/bossa/files/patch-src_WinSerialPort.h new file mode 100644 index 000000000000..5cb9d1881cc3 --- /dev/null +++ b/devel/bossa/files/patch-src_WinSerialPort.h @@ -0,0 +1,11 @@ +--- src/WinSerialPort.h.orig 2017-03-31 15:31:35 UTC ++++ src/WinSerialPort.h +@@ -55,6 +55,8 @@ class WinSerialPort : public SerialPort (public) + + bool timeout(int millisecs); + void flush(); ++ void setDTR(bool dtr); ++ void setRTS(bool rts); + + private: + HANDLE _handle; diff --git a/devel/bossa/files/patch-src_bossac.cpp b/devel/bossa/files/patch-src_bossac.cpp new file mode 100644 index 000000000000..1ef7889e28b7 --- /dev/null +++ b/devel/bossa/files/patch-src_bossac.cpp @@ -0,0 +1,69 @@ +--- src/bossac.cpp.orig 2017-03-31 15:31:35 UTC ++++ src/bossac.cpp +@@ -64,6 +64,7 @@ class BossaConfig (public) + bool help; + bool forceUsb; + string forceUsbArg; ++ bool arduinoErase; + + int readArg; + string portArg; +@@ -89,6 +90,7 @@ BossaConfig::BossaConfig() + info = false; + help = false; + forceUsb = false; ++ arduinoErase = false; + + readArg = 0; + bootArg = 1; +@@ -189,6 +191,11 @@ static Option opts[] = + 'R', "reset", &config.reset, + { ArgNone }, + "reset CPU (if supported)" ++ }, ++ { ++ 'a', "arduino_erase", &config.arduinoErase, ++ { ArgNone }, ++ "erase and reset via Arduino 1200 baud hack (cannot be used with port autodetection)" + } + }; + +@@ -257,6 +264,12 @@ main(int argc, char* argv[]) + return help(argv[0]); + } + ++ if (config.arduinoErase && !config.port) ++ { ++ fprintf(stderr, "%s: port must be specified for Arduino 1200bps erase hack\n", argv[0]); ++ return help(argv[0]); ++ } ++ + if (config.read || config.write || config.verify) + { + if (args == argc) +@@ -311,6 +324,25 @@ main(int argc, char* argv[]) + fprintf(stderr, "Invalid USB value: %s\n", config.forceUsbArg.c_str()); + return 1; + } ++ } ++ ++ if (config.arduinoErase) ++ { ++ SerialPort::Ptr port; ++ if (config.forceUsb) ++ port = portFactory.create(config.portArg, isUsb); ++ else ++ port = portFactory.create(config.portArg); ++ ++ if(!port->open(1200)) ++ { ++ fprintf(stderr, "Failed to open port at 1200bps\n"); ++ return 1; ++ } ++ ++ port->setRTS(true); ++ port->setDTR(false); ++ port->close(); + } + + if (config.port)