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:
parent
76e95e15ca
commit
fcbe224d2c
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=438912
@ -2,7 +2,7 @@
|
||||
|
||||
PORTNAME= bossa
|
||||
PORTVERSION= 1.7.0
|
||||
PORTREVISION= 1
|
||||
PORTREVISION= 2
|
||||
CATEGORIES= devel
|
||||
|
||||
MAINTAINER= bsdports@kyle-evans.net
|
||||
|
47
devel/bossa/files/patch-src_PosixSerialPort.cpp
Normal file
47
devel/bossa/files/patch-src_PosixSerialPort.cpp
Normal 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
|
11
devel/bossa/files/patch-src_PosixSerialPort.h
Normal file
11
devel/bossa/files/patch-src_PosixSerialPort.h
Normal 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:
|
11
devel/bossa/files/patch-src_SerialPort.h
Normal file
11
devel/bossa/files/patch-src_SerialPort.h
Normal 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; }
|
||||
|
18
devel/bossa/files/patch-src_WinSerialPort.cpp
Normal file
18
devel/bossa/files/patch-src_WinSerialPort.cpp
Normal 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);
|
||||
+}
|
11
devel/bossa/files/patch-src_WinSerialPort.h
Normal file
11
devel/bossa/files/patch-src_WinSerialPort.h
Normal 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;
|
69
devel/bossa/files/patch-src_bossac.cpp
Normal file
69
devel/bossa/files/patch-src_bossac.cpp
Normal 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)
|
Loading…
Reference in New Issue
Block a user