Changeset 1525 for trunk/serial.c


Ignore:
Timestamp:
May 1, 2012, 1:11:06 AM (3 years ago)
Author:
mkarcher
Message:

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.

Signed-off-by: Virgil-Adrian Teaca <darkstarlinux@…>
Acked-by: Michael Karcher <flashrom@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/serial.c

    r1370 r1525  
    3333#else
    3434#include <termios.h>
     35#include <unistd.h>
     36#include <sys/types.h>
     37#include <sys/ioctl.h>
    3538#endif
    3639#include "flash.h"
     
    173176}
    174177
     178void sp_set_pin(enum SP_PIN pin, int val) {
     179#ifdef _WIN32
     180        DWORD ctl;
     181
     182        if(pin == PIN_TXD) {
     183                ctl = val ? SETBREAK: CLRBREAK;
     184        }
     185        else if(pin == PIN_DTR) {
     186                ctl = val ? SETDTR: CLRDTR;
     187        }
     188        else {
     189                ctl = val ? SETRTS: CLRRTS;
     190        }
     191        EscapeCommFunction(sp_fd, ctl);
     192#else
     193        int ctl, s;
     194
     195        if(pin == PIN_TXD) {
     196                ioctl(sp_fd, val ? TIOCSBRK : TIOCCBRK, 0);
     197        }
     198        else {
     199                s = (pin == PIN_DTR) ? TIOCM_DTR : TIOCM_RTS;
     200                ioctl(sp_fd, TIOCMGET, &ctl);
     201
     202                if (val) {
     203                        ctl |= s;
     204                }
     205                else {
     206                        ctl &= ~s;
     207                }
     208                ioctl(sp_fd, TIOCMSET, &ctl);
     209        }
     210#endif
     211}
     212
     213int sp_get_pin(enum SP_PIN pin) {
     214        int s;
     215#ifdef _WIN32
     216        DWORD ctl;
     217
     218        s = (pin == PIN_CTS) ? MS_CTS_ON : MS_DSR_ON;
     219        GetCommModemStatus(sp_fd, &ctl);
     220#else
     221        int ctl;
     222        s = (pin == PIN_CTS) ? TIOCM_CTS : TIOCM_DSR;
     223        ioctl(sp_fd, TIOCMGET, &ctl);
     224#endif
     225
     226        return ((ctl & s) ? 1 : 0);
     227
     228}
     229
    175230void sp_flush_incoming(void)
    176231{
Note: See TracChangeset for help on using the changeset viewer.