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.