Add serial port bitbanging code
This adds the pony_spi driver which supports the SI_Prog adapter, which
is commonly used for SPI chips with PonyProg 2000, and a custom adapter
called "SERBANG" which differs in the logic of two pins.
Corresponding to flashrom svn r1525.
Signed-off-by: Virgil-Adrian Teaca <darkstarlinux@gmail.com>
Acked-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de>
diff --git a/serial.c b/serial.c
index b504974..0a56568 100644
--- a/serial.c
+++ b/serial.c
@@ -32,6 +32,9 @@
#include <conio.h>
#else
#include <termios.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/ioctl.h>
#endif
#include "flash.h"
#include "programmer.h"
@@ -172,6 +175,58 @@
#endif
}
+void sp_set_pin(enum SP_PIN pin, int val) {
+#ifdef _WIN32
+ DWORD ctl;
+
+ if(pin == PIN_TXD) {
+ ctl = val ? SETBREAK: CLRBREAK;
+ }
+ else if(pin == PIN_DTR) {
+ ctl = val ? SETDTR: CLRDTR;
+ }
+ else {
+ ctl = val ? SETRTS: CLRRTS;
+ }
+ EscapeCommFunction(sp_fd, ctl);
+#else
+ int ctl, s;
+
+ if(pin == PIN_TXD) {
+ ioctl(sp_fd, val ? TIOCSBRK : TIOCCBRK, 0);
+ }
+ else {
+ s = (pin == PIN_DTR) ? TIOCM_DTR : TIOCM_RTS;
+ ioctl(sp_fd, TIOCMGET, &ctl);
+
+ if (val) {
+ ctl |= s;
+ }
+ else {
+ ctl &= ~s;
+ }
+ ioctl(sp_fd, TIOCMSET, &ctl);
+ }
+#endif
+}
+
+int sp_get_pin(enum SP_PIN pin) {
+ int s;
+#ifdef _WIN32
+ DWORD ctl;
+
+ s = (pin == PIN_CTS) ? MS_CTS_ON : MS_DSR_ON;
+ GetCommModemStatus(sp_fd, &ctl);
+#else
+ int ctl;
+ s = (pin == PIN_CTS) ? TIOCM_CTS : TIOCM_DSR;
+ ioctl(sp_fd, TIOCMGET, &ctl);
+#endif
+
+ return ((ctl & s) ? 1 : 0);
+
+}
+
void sp_flush_incoming(void)
{
#ifdef _WIN32