1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-30 01:15:52 +00:00

devel/bossa: Adding the 1200bps hack to devel/bossa should improve

reliability of programming the Arduino Due.

PR:		218241
Submitted by:	Kyle Evans <bsdports@kyle-evans.net> (maintainer)
This commit is contained in:
Boris Samorodov 2017-04-19 20:19:32 +00:00
parent 76e95e15ca
commit fcbe224d2c
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=438912
7 changed files with 168 additions and 1 deletions

View File

@ -2,7 +2,7 @@
PORTNAME= bossa
PORTVERSION= 1.7.0
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= devel
MAINTAINER= bsdports@kyle-evans.net

View File

@ -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

View File

@ -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:

View File

@ -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; }

View File

@ -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);
+}

View File

@ -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;

View File

@ -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)