Changeset 1252
- Timestamp:
- 01/16/10 17:09:51 (11 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/csctapi/icc_async.c
r1245 r1252 211 211 212 212 /* Initialize Baudrate */ 213 if ( IFD_Towitoko_SetBaudrate (ifd, ICC_ASYNC_BAUDRATE)!= IFD_TOWITOKO_OK)213 if (!Phoenix_SetBaudrate (ICC_ASYNC_BAUDRATE)) 214 214 return ICC_ASYNC_IFD_ERROR; 215 215 … … 354 354 { 355 355 icc->baudrate = baudrate; 356 if ( IFD_Towitoko_SetBaudrate (icc->ifd, baudrate) != IFD_TOWITOKO_OK)356 if (!Phoenix_SetBaudrate (baudrate)) 357 357 return ICC_ASYNC_IFD_ERROR; 358 358 -
trunk/csctapi/ifd_phoenix.c
r1224 r1252 11 11 #include "atr.h" 12 12 #include "ifd_towitoko.h" //FIXME 13 #include <termios.h> 13 14 14 15 #define OK 1 … … 143 144 } 144 145 145 int Phoenix_SetBaudrate ( int mhz)146 int Phoenix_SetBaudrate (unsigned long baudrate) 146 147 { 148 if(reader[ridx].typ == R_INTERNAL) 149 return OK; 150 151 #ifdef DEBUG_IFD 152 printf ("IFD: Setting baudrate to %lu\n", baudrate); 153 #endif 154 if (reader[ridx].baudrate == baudrate) 155 return OK; 156 157 /* Get current settings */ 158 struct termios tio; 159 if (tcgetattr (reader[ridx].handle, &tio) != 0) 160 return ERROR; 161 162 //write baudrate here! 163 if (!IO_Serial_SetBitrate (baudrate, &tio)) 164 return ERROR; 165 166 if (!IO_Serial_SetProperties(tio)) 167 return ERROR; 168 169 reader[ridx].baudrate = baudrate; 170 147 171 return OK; 148 172 } -
trunk/csctapi/ifd_towitoko.c
r1236 r1252 181 181 182 182 /* Default serial port settings */ 183 io->input_bitrate = IFD_TOWITOKO_BAUDRATE; 184 io->output_bitrate = IFD_TOWITOKO_BAUDRATE; 185 io->bits = 8; 186 io->stopbits = 2; 187 io->parity = PARITY_EVEN; 188 io->dtr = IO_SERIAL_HIGH; 189 // io->dtr = IO_SERIAL_LOW; 190 // io->rts = IO_SERIAL_HIGH; 191 io->rts = IO_SERIAL_LOW; 192 193 194 if (!IO_Serial_SetPropertiesOld (io)) 195 return IFD_TOWITOKO_IO_ERROR; 183 if (!IO_Serial_SetParams (IFD_TOWITOKO_BAUDRATE, 8, PARITY_EVEN, 2, IO_SERIAL_HIGH, IO_SERIAL_LOW)) 184 return FALSE; 196 185 197 186 /* Default ifd settings */ … … 201 190 ifd->type = IFD_TOWITOKO_MULTICAM; 202 191 203 ret = IFD_Towitoko_SetBaudrate (ifd, IFD_TOWITOKO_BAUDRATE); 204 205 if (ret != IFD_TOWITOKO_OK) 192 if (!Phoenix_SetBaudrate(IFD_TOWITOKO_BAUDRATE)) 206 193 { 207 194 IFD_Towitoko_Clear (ifd); 208 return ret;195 return IFD_TOWITOKO_IO_ERROR; 209 196 } 210 197 … … 251 238 IFD_Towitoko_Clear (ifd); 252 239 253 254 return IFD_TOWITOKO_OK;255 }256 257 int IFD_Towitoko_SetBaudrate (IFD * ifd, unsigned long baudrate)258 {259 if(reader[ridx].typ == R_INTERNAL)260 {261 return IFD_TOWITOKO_OK;262 }263 #ifdef DEBUG_IFD264 printf ("IFD: Setting baudrate to %lu\n", baudrate);265 #endif266 /* Get current settings */267 if (!IO_Serial_GetPropertiesOld (ifd->io))268 return IFD_TOWITOKO_IO_ERROR;269 270 if (ifd->io->output_bitrate == baudrate)271 return IFD_TOWITOKO_OK;272 273 274 /* Set serial device bitrate */275 ifd->io->output_bitrate = baudrate;276 ifd->io->input_bitrate = baudrate;277 278 if (!IO_Serial_SetPropertiesOld (ifd->io))279 return IFD_TOWITOKO_IO_ERROR;280 281 return IFD_TOWITOKO_OK;282 }283 284 int IFD_Towitoko_GetBaudrate (IFD * ifd, unsigned long *baudrate)285 {286 if(reader[ridx].typ == R_INTERNAL)287 {288 return IFD_TOWITOKO_OK;289 }290 291 /* Get current settings */292 if (!IO_Serial_GetPropertiesOld (ifd->io))293 return IFD_TOWITOKO_IO_ERROR;294 295 (*baudrate) = ifd->io->output_bitrate;296 240 297 241 return IFD_TOWITOKO_OK; -
trunk/csctapi/ifd_towitoko.h
r1236 r1252 116 116 /* Handling of this IFD */ 117 117 extern int IFD_Towitoko_SetBaudrate (IFD * ifd, unsigned long baudrate); 118 extern int IFD_Towitoko_GetBaudrate (IFD * ifd, unsigned long *baudrate);119 118 120 119 /* General handling of ICC inserted in this IFD */ -
trunk/csctapi/io_serial.c
r1249 r1252 180 180 } 181 181 182 bool IO_Serial_GetPropertiesOld (IO_Serial * io) 183 { 184 struct termios currtio; 185 speed_t i_speed, o_speed; 186 unsigned int mctl; 187 188 #ifdef SCI_DEV 189 if(reader[ridx].typ == R_INTERNAL) 190 return FALSE; 191 #endif 192 193 if (io->input_bitrate != 0 && io->output_bitrate != 0) //properties are already filled 194 return TRUE; 195 196 if (tcgetattr (reader[ridx].handle, &currtio) != 0) 197 return FALSE; 198 199 o_speed = cfgetospeed (&currtio); 200 201 switch (o_speed) 202 { 203 #ifdef B0 204 case B0: 205 io->output_bitrate = 0; 206 break; 207 #endif 208 #ifdef B50 209 case B50: 210 io->output_bitrate = 50; 211 break; 212 #endif 213 #ifdef B75 214 case B75: 215 io->output_bitrate = 75; 216 break; 217 #endif 218 #ifdef B110 219 case B110: 220 io->output_bitrate = 110; 221 break; 222 #endif 223 #ifdef B134 224 case B134: 225 io->output_bitrate = 134; 226 break; 227 #endif 228 #ifdef B150 229 case B150: 230 io->output_bitrate = 150; 231 break; 232 #endif 233 #ifdef B200 234 case B200: 235 io->output_bitrate = 200; 236 break; 237 #endif 238 #ifdef B300 239 case B300: 240 io->output_bitrate = 300; 241 break; 242 #endif 243 #ifdef B600 244 case B600: 245 io->output_bitrate = 600; 246 break; 247 #endif 248 #ifdef B1200 249 case B1200: 250 io->output_bitrate = 1200; 251 break; 252 #endif 253 #ifdef B1800 254 case B1800: 255 io->output_bitrate = 1800; 256 break; 257 #endif 258 #ifdef B2400 259 case B2400: 260 io->output_bitrate = 2400; 261 break; 262 #endif 263 #ifdef B4800 264 case B4800: 265 io->output_bitrate = 4800; 266 break; 267 #endif 268 #ifdef B9600 269 case B9600: 270 io->output_bitrate = 9600; 271 break; 272 #endif 273 #ifdef B19200 274 case B19200: 275 io->output_bitrate = 19200; 276 break; 277 #endif 278 #ifdef B38400 279 case B38400: 280 io->output_bitrate = 38400; 281 break; 282 #endif 283 #ifdef B57600 284 case B57600: 285 io->output_bitrate = 57600; 286 break; 287 #endif 288 #ifdef B115200 289 case B115200: 290 io->output_bitrate = 115200; 291 break; 292 #endif 293 #ifdef B230400 294 case B230400: 295 io->output_bitrate = 230400; 296 break; 297 #endif 298 default: 299 io->output_bitrate = 1200; 300 break; 301 } 302 303 i_speed = cfgetispeed (&currtio); 304 305 switch (i_speed) 306 { 307 #ifdef B0 308 case B0: 309 io->input_bitrate = 0; 310 break; 311 #endif 312 #ifdef B50 313 case B50: 314 io->input_bitrate = 50; 315 break; 316 #endif 317 #ifdef B75 318 case B75: 319 io->input_bitrate = 75; 320 break; 321 #endif 322 #ifdef B110 323 case B110: 324 io->input_bitrate = 110; 325 break; 326 #endif 327 #ifdef B134 328 case B134: 329 io->input_bitrate = 134; 330 break; 331 #endif 332 #ifdef B150 333 case B150: 334 io->input_bitrate = 150; 335 break; 336 #endif 337 #ifdef B200 338 case B200: 339 io->input_bitrate = 200; 340 break; 341 #endif 342 #ifdef B300 343 case B300: 344 io->input_bitrate = 300; 345 break; 346 #endif 347 #ifdef B600 348 case B600: 349 io->input_bitrate = 600; 350 break; 351 #endif 352 #ifdef B1200 353 case B1200: 354 io->input_bitrate = 1200; 355 break; 356 #endif 357 #ifdef B1800 358 case B1800: 359 io->input_bitrate = 1800; 360 break; 361 #endif 362 #ifdef B2400 363 case B2400: 364 io->input_bitrate = 2400; 365 break; 366 #endif 367 #ifdef B4800 368 case B4800: 369 io->input_bitrate = 4800; 370 break; 371 #endif 372 #ifdef B9600 373 case B9600: 374 io->input_bitrate = 9600; 375 break; 376 #endif 377 #ifdef B19200 378 case B19200: 379 io->input_bitrate = 19200; 380 break; 381 #endif 382 #ifdef B38400 383 case B38400: 384 io->input_bitrate = 38400; 385 break; 386 #endif 387 #ifdef B57600 388 case B57600: 389 io->input_bitrate = 57600; 390 break; 391 #endif 392 #ifdef B115200 393 case B115200: 394 io->input_bitrate = 115200; 395 break; 396 #endif 397 #ifdef B230400 398 case B230400: 399 io->input_bitrate = 230400; 400 break; 401 #endif 402 default: 403 io->input_bitrate = 1200; 404 break; 405 } 406 407 switch (currtio.c_cflag & CSIZE) 408 { 409 case CS5: 410 io->bits = 5; 411 break; 412 case CS6: 413 io->bits = 6; 414 break; 415 case CS7: 416 io->bits = 7; 417 break; 418 case CS8: 419 io->bits = 8; 420 break; 421 } 422 423 if (((currtio.c_cflag) & PARENB) == PARENB) 424 { 425 if (((currtio.c_cflag) & PARODD) == PARODD) 426 io->parity = PARITY_ODD; 427 else 428 io->parity = PARITY_EVEN; 429 } 430 else 431 { 432 io->parity = PARITY_NONE; 433 } 434 435 if (((currtio.c_cflag) & CSTOPB) == CSTOPB) 436 io->stopbits = 2; 437 else 438 io->stopbits = 1; 439 440 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 441 return FALSE; 442 443 io->dtr = ((mctl & TIOCM_DTR) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 444 io->rts = ((mctl & TIOCM_RTS) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 445 446 #ifdef DEBUG_IO 447 printf("IO: Getting properties: %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 448 #endif 449 450 return TRUE; 451 } 452 453 bool IO_Serial_SetPropertiesOld (IO_Serial * io) 454 { 455 struct termios newtio; 456 457 #ifdef SCI_DEV 458 if(reader[ridx].typ == R_INTERNAL) 459 return FALSE; 460 #endif 461 462 // printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 463 memset (&newtio, 0, sizeof (newtio)); 464 465 182 bool IO_Serial_SetBitrate (unsigned long bitrate, struct termios * tio) 183 { 466 184 /* Set the bitrate */ 467 185 #ifdef OS_LINUX 468 186 if (reader[ridx].mhz == reader[ridx].cardmhz) 469 187 #endif 470 { //no overclo cking471 cfsetospeed( &newtio, IO_Serial_Bitrate(io->output_bitrate));472 cfsetispeed( &newtio, IO_Serial_Bitrate(io->input_bitrate));473 cs_debug("standard baudrate: cardmhz=%d mhz=%d -> effective baudrate %lu", reader[ridx].cardmhz, reader[ridx].mhz, io->output_bitrate);188 { //no overcloking 189 cfsetospeed(tio, IO_Serial_Bitrate(bitrate)); 190 cfsetispeed(tio, IO_Serial_Bitrate(bitrate)); 191 cs_debug("standard baudrate: cardmhz=%d mhz=%d -> effective baudrate %lu", reader[ridx].cardmhz, reader[ridx].mhz, bitrate); 474 192 } 475 193 #ifdef OS_LINUX … … 478 196 struct serial_struct nuts; 479 197 ioctl(reader[ridx].handle, TIOCGSERIAL, &nuts); 480 int custom_baud = io->output_bitrate * reader[ridx].mhz / reader[ridx].cardmhz;198 int custom_baud = bitrate * reader[ridx].mhz / reader[ridx].cardmhz; 481 199 nuts.custom_divisor = (nuts.baud_base + (custom_baud/2))/ custom_baud; 482 200 cs_debug("custom baudrate: cardmhz=%d mhz=%d custom_baud=%d baud_base=%d divisor=%d -> effective baudrate %d", … … 485 203 nuts.flags |= ASYNC_SPD_CUST; 486 204 ioctl(reader[ridx].handle, TIOCSSERIAL, &nuts); 487 cfsetospeed( &newtio, IO_Serial_Bitrate(38400));488 cfsetispeed( &newtio, IO_Serial_Bitrate(38400));205 cfsetospeed(tio, IO_Serial_Bitrate(38400)); 206 cfsetispeed(tio, IO_Serial_Bitrate(38400)); 489 207 } 490 208 #endif 491 492 /* Set the character size */ 493 switch (io->bits) 494 { 209 return TRUE; 210 } 211 212 bool IO_Serial_SetParams (unsigned long bitrate, unsigned bits, int parity, unsigned stopbits, int dtr, int rts) 213 { 214 struct termios newtio; 215 216 if(reader[ridx].typ == R_INTERNAL) 217 return FALSE; 218 219 // printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, bitrate, bits, parity == PARITY_EVEN ? "Even" : parity == PARITY_ODD ? "Odd" : "None", stopbits, dtr, rts); 220 memset (&newtio, 0, sizeof (newtio)); 221 222 if (!IO_Serial_SetBitrate (bitrate, & newtio)) 223 return FALSE; 224 225 /* Set the character size */ 226 switch (bits) 227 { 495 228 case 5: 496 229 newtio.c_cflag |= CS5; … … 511 244 512 245 /* Set the parity */ 513 switch ( io->parity)246 switch (parity) 514 247 { 515 248 case PARITY_ODD: … … 529 262 530 263 /* Set the number of stop bits */ 531 switch ( io->stopbits)264 switch (stopbits) 532 265 { 533 266 case 1: … … 553 286 newtio.c_cc[VTIME] = 0; 554 287 555 // tcdrain(reader[ridx].handle); 556 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 557 return FALSE; 558 // tcflush(reader[ridx].handle, TCIOFLUSH); 559 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 560 // return FALSE; 561 562 IO_Serial_Ioctl_Lock(1); 563 IO_Serial_DTR_RTS(0, io->rts == IO_SERIAL_HIGH); 564 IO_Serial_DTR_RTS(1, io->dtr == IO_SERIAL_HIGH); 565 IO_Serial_Ioctl_Lock(0); 566 567 #ifdef DEBUG_IO 568 printf("IO: Setting properties: reader_type%d, %ld bps; %d bits/byte; %s parity; %d stopbits; dtr=%d; rts=%d\n", reader[ridx].typ, io->input_bitrate, io->bits, io->parity == PARITY_EVEN ? "Even" : io->parity == PARITY_ODD ? "Odd" : "None", io->stopbits, io->dtr, io->rts); 569 #endif 570 return TRUE; 571 } 572 573 bool IO_Serial_SetProperties (struct termios newtio) 574 { 575 if(reader[ridx].typ == R_INTERNAL) 576 return FALSE; 577 578 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 579 return FALSE; 580 // tcflush(reader[ridx].handle, TCIOFLUSH); 581 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 582 // return FALSE; 583 584 unsigned int mctl; 585 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 586 return FALSE; 587 588 int dtr = ((mctl & TIOCM_DTR) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 589 int rts = ((mctl & TIOCM_RTS) ? IO_SERIAL_HIGH : IO_SERIAL_LOW); 288 if (!IO_Serial_SetProperties(newtio)) 289 return FALSE; 290 291 reader[ridx].baudrate = bitrate; 590 292 591 293 IO_Serial_Ioctl_Lock(1); … … 594 296 IO_Serial_Ioctl_Lock(0); 595 297 298 return TRUE; 299 } 300 301 bool IO_Serial_SetProperties (struct termios newtio) 302 { 303 if(reader[ridx].typ == R_INTERNAL) 304 return FALSE; 305 306 if (tcsetattr (reader[ridx].handle, TCSANOW, &newtio) < 0) 307 return FALSE; 308 // tcflush(reader[ridx].handle, TCIOFLUSH); 309 // if (tcsetattr (reader[ridx].handle, TCSAFLUSH, &newtio) < 0) 310 // return FALSE; 311 312 unsigned int mctl; 313 if (ioctl (reader[ridx].handle, TIOCMGET, &mctl) < 0) 314 return FALSE; 315 596 316 #ifdef DEBUG_IO 597 317 printf("IO: Setting properties\n"); … … 1048 768 { 1049 769 int i = 0; 1050 io->input_bitrate = 1200; 1051 io->output_bitrate = 1200; 1052 io->parity = PARITY_NONE; 1053 io->bits = 7; 1054 io->stopbits = 1; 1055 io->dtr = IO_SERIAL_HIGH; 1056 io->rts = IO_SERIAL_LOW; 1057 1058 if (!IO_Serial_SetPropertiesOld (io)) 770 if (!IO_Serial_SetParams (1200, 7, PARITY_NONE, 1, IO_SERIAL_HIGH, IO_SERIAL_LOW)) 1059 771 return FALSE; 1060 772 -
trunk/csctapi/io_serial.h
r1236 r1252 86 86 87 87 /* Transmission properties */ 88 extern bool IO_Serial_SetPropertiesOld (IO_Serial * io);89 extern bool IO_Serial_GetPropertiesOld (IO_Serial * io);90 88 extern bool IO_Serial_DTR_RTS(int, int); 91 89 #if defined(TUXBOX) && defined(PPC) -
trunk/globals.h
r1237 r1252 411 411 int card_status; //highlevel status 412 412 unsigned short status; //lowlevel status: states whether card inserted and/or change of status FIXME look at integration with pcsc_has_card/detect/card_status 413 unsigned long baudrate; //we are storing baudrate to prevent unnecessary conversions from/to termios structure413 unsigned long baudrate; //we are storing the (for overclocking uncorrected) baudrate to prevent unnecessary conversions from/to termios structure 414 414 struct s_module ph; 415 415 uchar ncd_key[16];
Note:
See TracChangeset
for help on using the changeset viewer.