From da7c545b06195185e9df9a88ef6437c61d64a225 Mon Sep 17 00:00:00 2001 From: Virgil-Adrian Teaca Date: Mon, 30 Apr 2012 23:11:06 +0000 Subject: 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 Acked-by: Michael Karcher --- serial.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'serial.c') diff --git a/serial.c b/serial.c index b504974..0a56568 100644 --- a/serial.c +++ b/serial.c @@ -32,6 +32,9 @@ #include #else #include +#include +#include +#include #endif #include "flash.h" #include "programmer.h" @@ -172,6 +175,58 @@ fdtype sp_openserport(char *dev, unsigned int baud) #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 -- cgit v1.1