Changeset 1975 for branches/modular/csctapi/ifd_phoenix.c
- Timestamp:
- 04/06/10 17:45:45 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/modular/csctapi/ifd_phoenix.c
r1748 r1975 3 3 This module provides IFD handling functions for Smartmouse/Phoenix reader. 4 4 */ 5 6 5 #include <stdio.h> 7 6 //#include <time.h> … … 13 12 #include "ifd_phoenix.h" 14 13 #include "icc_async.h" 14 #include "io_serial.h" 15 15 16 16 #define MAX_TRANSMIT 255 17 #define PHOENIX_MAX_ATR_SIZE 40 17 18 18 19 #ifdef USE_GPIO //felix: definition of gpio functions … … 54 55 55 56 56 int Phoenix_Init ( )57 { 58 call (IO_Serial_InitPnP ( ));59 IO_Serial_Flush( );57 int Phoenix_Init (struct s_reader * reader) 58 { 59 call (IO_Serial_InitPnP (reader)); 60 IO_Serial_Flush(reader); 60 61 61 62 #ifdef USE_GPIO //felix: define gpio number used for card detect and reset. ref to globals.h 62 if (reader [ridx].detect>4)63 { 64 gpio_detect=reader [ridx].detect-4;63 if (reader->detect>4) 64 { 65 gpio_detect=reader->detect-4; 65 66 pin = 1<<gpio_detect; 66 67 gpio_outen=open("/dev/gpio/outen",O_RDWR); … … 71 72 #endif 72 73 73 cs_debug_mask (D_IFD, "IFD: Initializing reader %s type=%d\n", reader[ridx].label, reader[ridx].typ); 74 if (reader[ridx].atr[0]==0) { 75 /* Default serial port settings */ 76 call (IO_Serial_SetParams (DEFAULT_BAUDRATE, 8, PARITY_EVEN, 2, IO_SERIAL_HIGH, IO_SERIAL_LOW)); 77 call (Phoenix_SetBaudrate (DEFAULT_BAUDRATE)); 78 call (IO_Serial_SetParity (PARITY_EVEN)); 79 IO_Serial_Flush(); 80 } 81 return OK; 82 } 83 84 int Phoenix_GetStatus (int * status) 74 cs_debug_mask (D_IFD, "IFD: Initializing reader %s type=%d\n", reader->label, reader->typ); 75 76 /* Default serial port settings */ 77 if (reader->atr[0] == 0) { 78 call (IO_Serial_SetParams (reader, DEFAULT_BAUDRATE, 8, PARITY_EVEN, 2, IO_SERIAL_HIGH, IO_SERIAL_LOW)); 79 IO_Serial_Flush(reader); 80 } 81 return OK; 82 } 83 84 int Phoenix_GetStatus (struct s_reader * reader, int * status) 85 85 { 86 86 #ifdef USE_GPIO //felix: detect card via defined gpio … … 91 91 { 92 92 unsigned int modembits=0; 93 call (ioctl(reader [ridx].handle, TIOCMGET,&modembits)<0);94 switch(reader [ridx].detect&0x7f)93 call (ioctl(reader->handle, TIOCMGET,&modembits)<0); 94 switch(reader->detect&0x7f) 95 95 { 96 96 case 0: *status=(modembits & TIOCM_CAR); break; … … 100 100 default: *status=0; // dummy 101 101 } 102 if (!(reader [ridx].detect&0x80))102 if (!(reader->detect&0x80)) 103 103 *status=!*status; 104 104 } … … 106 106 } 107 107 108 int Phoenix_Reset ( ATR * atr)108 int Phoenix_Reset (struct s_reader * reader, ATR * atr) 109 109 { 110 110 cs_debug_mask (D_IFD, "IFD: Resetting card:\n"); 111 111 int ret; 112 112 int i; 113 unsigned char buf[PHOENIX_MAX_ATR_SIZE]; 113 114 int parity[3] = {PARITY_EVEN, PARITY_ODD, PARITY_NONE}; 114 call (Phoenix_SetBaudrate ( DEFAULT_BAUDRATE));115 call (Phoenix_SetBaudrate (reader, DEFAULT_BAUDRATE)); 115 116 for(i=0; i<3; i++) { 116 117 #ifndef OS_CYGWIN32 … … 121 122 cs_sleepms(200); 122 123 #endif 123 IO_Serial_Flush( );124 call (IO_Serial_SetParity ( parity[i]));124 IO_Serial_Flush(reader); 125 call (IO_Serial_SetParity (reader, parity[i])); 125 126 126 127 ret = ERROR; 127 128 cs_sleepms(500); //smartreader in mouse mode needs this 128 IO_Serial_Ioctl_Lock( 1);129 IO_Serial_Ioctl_Lock(reader, 1); 129 130 #ifdef USE_GPIO 130 131 if (gpio_detect) … … 132 133 else 133 134 #endif 134 IO_Serial_RTS_Set( );135 IO_Serial_RTS_Set(reader); 135 136 #ifdef OS_CYGWIN32 136 137 /* … … 149 150 else 150 151 #endif 151 IO_Serial_RTS_Clr( );152 IO_Serial_RTS_Clr(reader); 152 153 #ifndef OS_CYGWIN32 153 154 /* … … 157 158 cs_sleepms(200); 158 159 #endif 159 IO_Serial_Ioctl_Lock(0); 160 if(ATR_InitFromStream (atr, ATR_TIMEOUT) == ATR_OK) 160 IO_Serial_Ioctl_Lock(reader, 0); 161 162 int n=0; 163 while(n<PHOENIX_MAX_ATR_SIZE && !IO_Serial_Read(reader, ATR_TIMEOUT, 1, buf+n)) 164 n++; 165 if(n==0) 166 continue; 167 if (ATR_InitFromArray (atr, buf, n) == ATR_OK) 161 168 ret = OK; 162 169 // Succesfully retrieve ATR … … 164 171 break; 165 172 } 166 IO_Serial_Flush( );173 IO_Serial_Flush(reader); 167 174 168 175 /* … … 181 188 } 182 189 183 int Phoenix_Transmit ( BYTE * buffer, unsigned size, unsigned int block_delay, unsigned int char_delay)190 int Phoenix_Transmit (struct s_reader * reader, BYTE * buffer, unsigned size, unsigned int block_delay, unsigned int char_delay) 184 191 { 185 192 unsigned sent=0, to_send = 0; … … 193 200 if ((sent == 0) && (block_delay != char_delay)) 194 201 { 195 call (IO_Serial_Write ( block_delay, 1, buffer));196 call (IO_Serial_Write ( char_delay, to_send-1, buffer+1));202 call (IO_Serial_Write (reader, block_delay, 1, buffer)); 203 call (IO_Serial_Write (reader, char_delay, to_send-1, buffer+1)); 197 204 } 198 205 else 199 call (IO_Serial_Write ( char_delay, to_send, buffer+sent));200 } 201 return OK; 202 } 203 204 int Phoenix_Receive ( BYTE * buffer, unsigned size, unsigned int timeout)206 call (IO_Serial_Write (reader, char_delay, to_send, buffer+sent)); 207 } 208 return OK; 209 } 210 211 int Phoenix_Receive (struct s_reader * reader, BYTE * buffer, unsigned size, unsigned int timeout) 205 212 { 206 213 #define IFD_TOWITOKO_TIMEOUT 1000 207 214 208 215 /* Read all data bytes with the same timeout */ 209 call (IO_Serial_Read ( timeout + IFD_TOWITOKO_TIMEOUT, size, buffer));210 return OK; 211 } 212 213 int Phoenix_SetBaudrate ( unsigned long baudrate)216 call (IO_Serial_Read (reader, timeout + IFD_TOWITOKO_TIMEOUT, size, buffer)); 217 return OK; 218 } 219 220 int Phoenix_SetBaudrate (struct s_reader * reader, unsigned long baudrate) 214 221 { 215 222 cs_debug_mask (D_IFD, "IFD: Phoenix Setting baudrate to %lu\n", baudrate); 216 if ( current_baudrate != baudrate)223 if (reader->current_baudrate != baudrate) 217 224 { 218 225 /* Get current settings */ 219 226 struct termios tio; 220 call (tcgetattr (reader [ridx].handle, &tio) != 0);221 call (IO_Serial_SetBitrate ( baudrate, &tio));227 call (tcgetattr (reader->handle, &tio) != 0); 228 call (IO_Serial_SetBitrate (reader, baudrate, &tio)); 222 229 #ifndef OS_CYGWIN32 223 230 /* … … 227 234 cs_sleepms(200); 228 235 #endif 229 call (IO_Serial_SetProperties( tio));236 call (IO_Serial_SetProperties(reader, tio)); 230 237 #ifndef OS_CYGWIN32 231 238 /* … … 236 243 #endif 237 244 } 238 current_baudrate = baudrate; //so if update fails,current_baudrate is not changed either239 return OK; 240 } 241 242 int Phoenix_Close ( )245 reader->current_baudrate = baudrate; //so if update fails, reader->current_baudrate is not changed either 246 return OK; 247 } 248 249 int Phoenix_Close (struct s_reader * reader) 243 250 { 244 251 #ifdef USE_GPIO //felix: close dev if card detected … … 250 257 } 251 258 #endif 252 IO_Serial_Close( );253 cs_debug_mask (D_IFD, "IFD: Closing phoenix device %s", reader [ridx].device);254 return OK; 255 } 259 IO_Serial_Close(reader); 260 cs_debug_mask (D_IFD, "IFD: Closing phoenix device %s", reader->device); 261 return OK; 262 }
Note:
See TracChangeset
for help on using the changeset viewer.