Changeset 2915
- Timestamp:
- 08/13/10 14:21:56 (14 years ago)
- Location:
- trunk/csctapi
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/io_serial.c
r2864 r2915 88 88 } 89 89 90 static bool IO_Serial_DTR_RTS_dbox2(int mcport, int dtr, int set)90 static bool IO_Serial_DTR_RTS_dbox2(int mcport, int * dtr, int * rts) 91 91 { 92 92 int rc; … … 103 103 if (dtr_bits[mcport]) 104 104 { 105 if ( set)105 if (*dtr) 106 106 msr&=(unsigned short)(~dtr_bits[mcport]); 107 107 else … … 112 112 rc=0; // Dummy, can't handle using multicam.o 113 113 } 114 else// RTS114 if (rts) // RTS 115 115 { 116 if ( set)116 if (*rts) 117 117 msr&=(unsigned short)(~rts_bits[mcport]); 118 118 else … … 127 127 #endif 128 128 129 bool IO_Serial_DTR_RTS(struct s_reader * reader, int dtr, int set)129 bool IO_Serial_DTR_RTS(struct s_reader * reader, int * dtr, int * rts) 130 130 { 131 131 unsigned int msr; … … 134 134 #if defined(TUXBOX) && defined(PPC) 135 135 if ((reader->typ == R_DB2COM1) || (reader->typ == R_DB2COM2)) 136 return(IO_Serial_DTR_RTS_dbox2(reader->typ == R_DB2COM2, dtr, set)); 137 #endif 138 139 mbit=(dtr) ? TIOCM_DTR : TIOCM_RTS; 136 return(IO_Serial_DTR_RTS_dbox2(reader->typ == R_DB2COM2, dtr, rts)); 137 #endif 138 139 if(dtr) 140 { 141 mbit = TIOCM_DTR; 140 142 #if defined(TIOCMBIS) && defined(TIOBMBIC) 141 if (ioctl (reader->handle, set? TIOCMBIS : TIOCMBIC, &mbit) < 0)142 143 if (ioctl (reader->handle, *dtr ? TIOCMBIS : TIOCMBIC, &mbit) < 0) 144 return ERROR; 143 145 #else 144 if (ioctl(reader->handle, TIOCMGET, &msr) < 0) 145 return ERROR; 146 if (set) 147 msr|=mbit; 148 else 149 msr&=~mbit; 150 if (ioctl(reader->handle, TIOCMSET, &msr)<0) 151 return ERROR; 152 #endif 153 cs_debug("IO: Setting %s=%i",dtr?"DTR":"RTS", set); 146 if (ioctl(reader->handle, TIOCMGET, &msr) < 0) 147 return ERROR; 148 if (*dtr) 149 msr|=mbit; 150 else 151 msr&=~mbit; 152 if (ioctl(reader->handle, TIOCMSET, &msr)<0) 153 return ERROR; 154 #endif 155 cs_debug("IO: Setting %s=%i","DTR", *dtr); 156 } 157 158 if(rts) 159 { 160 mbit = TIOCM_RTS; 161 #if defined(TIOCMBIS) && defined(TIOBMBIC) 162 if (ioctl (reader->handle, *rts ? TIOCMBIS : TIOCMBIC, &mbit) < 0) 163 return ERROR; 164 #else 165 if (ioctl(reader->handle, TIOCMGET, &msr) < 0) 166 return ERROR; 167 if (*rts) 168 msr|=mbit; 169 else 170 msr&=~mbit; 171 if (ioctl(reader->handle, TIOCMSET, &msr)<0) 172 return ERROR; 173 #endif 174 cs_debug("IO: Setting %s=%i","RTS", *rts); 175 } 176 154 177 return OK; 155 178 } … … 276 299 /* Ignore parity errors!!! Windows driver does so why shouldn't I? */ 277 300 #endif 278 /* Enable recei ber, hang on close, ignore control line */301 /* Enable receiver, hang on close, ignore control line */ 279 302 newtio.c_cflag |= CREAD | HUPCL | CLOCAL; 280 303 … … 289 312 290 313 IO_Serial_Ioctl_Lock(reader, 1); 291 IO_Serial_DTR_RTS(reader, 0, rts == IO_SERIAL_HIGH); 292 IO_Serial_DTR_RTS(reader, 1, dtr == IO_SERIAL_HIGH); 314 IO_Serial_DTR_RTS(reader, &dtr, &rts); 293 315 IO_Serial_Ioctl_Lock(reader, 0); 294 316 return OK; … … 305 327 // if (tcsetattr (reader->handle, TCSAFLUSH, &newtio) < 0) 306 328 // return ERROR; 307 308 int mctl;309 if (ioctl (reader->handle, TIOCMGET, &mctl) >= 0) {310 mctl &= ~TIOCM_RTS; //should be mctl |= TIOCM_RTS; for readers with reversed polarity reset311 ioctl (reader->handle, TIOCMSET, &mctl);312 }313 else314 cs_log("WARNING: Failed to reset reader %s", reader->label);315 329 316 330 cs_debug("IO: Setting properties\n"); … … 382 396 { 383 397 BYTE b; 384 while(!IO_Serial_Read(reader, 1000, 1, &b)); //FIXME how about tcflush?? 398 399 tcflush(reader->handle, TCIOFLUSH); 400 while(!IO_Serial_Read(reader, 1000, 1, &b)); 385 401 } 386 402 -
trunk/csctapi/io_serial.h
r2854 r2915 28 28 #include <termios.h> 29 29 30 #define IO_Serial_DTR_Set(reader) IO_Serial_DTR_RTS(reader, 1, 1)31 #define IO_Serial_DTR_Clr(reader) IO_Serial_DTR_RTS(reader, 1, 0)32 #define IO_Serial_RTS_Set(reader) IO_Serial_DTR_RTS(reader, 0, 1)33 #define IO_Serial_RTS_Clr(reader) IO_Serial_DTR_RTS(reader, 0, 0)30 #define IO_Serial_DTR_Set(reader) {int dtr = 1; IO_Serial_DTR_RTS(reader, &dtr, NULL);} 31 #define IO_Serial_DTR_Clr(reader) {int dtr = 0; IO_Serial_DTR_RTS(reader, &dtr, NULL);} 32 #define IO_Serial_RTS_Set(reader) {int rts = 1; IO_Serial_DTR_RTS(reader, NULL, &rts);} 33 #define IO_Serial_RTS_Clr(reader) {int rts = 0; IO_Serial_DTR_RTS(reader, NULL, &rts);} 34 34 35 35 //Type of parity of the serial device … … 68 68 69 69 /* Transmission properties */ 70 bool IO_Serial_DTR_RTS(struct s_reader * reader, int , int);70 bool IO_Serial_DTR_RTS(struct s_reader * reader, int * dtr, int * rts); 71 71 #if defined(TUXBOX) && defined(PPC) 72 72 void IO_Serial_Ioctl_Lock(struct s_reader * reader, int);
Note:
See TracChangeset
for help on using the changeset viewer.