Changeset 763
- Timestamp:
- 12/10/09 19:30:47 (14 years ago)
- Location:
- branches/pcsc
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/pcsc/Makefile
r579 r763 7 7 8 8 linux: i386-pc-linux 9 linux-pcsc: i386-pc-linux-pcsc 9 10 freebsd: i386-pc-freebsd 10 11 tuxbox: cross-powerpc-tuxbox-linux … … 60 61 @-$(MAKE) --no-print-directory \ 61 62 -f Maketype TYP=$(subst i386,$(shell uname --machine),$(subst cross-,,$@)) \ 62 OS_LIBS="-lcrypto " \63 OS_LIBS="-lcrypto -lm" \ 63 64 OS_CULI="-lncurses" \ 64 65 OS_PTLI="-lpthread" \ … … 75 76 ###################################################################### 76 77 # 78 # LINUX native with PCSC 79 # 80 ###################################################################### 81 i386-pc-linux-pcsc: 82 @-$(MAKE) --no-print-directory \ 83 -f Maketype TYP=$(subst i386,$(shell uname --machine),$(subst cross-,,$@)) \ 84 OS_LIBS="-lcrypto" \ 85 OS_CULI="-lncurses" \ 86 OS_PTLI="-lpthread -lpcsclite" \ 87 DS_OPTS="-O2 -DOS_LINUX -DCS_CONFDIR=${CS_CONFDIR} -DHAVE_PCSC=1 -I/usr/include/PCSC -Winline -Wall -Wno-implicit-function-declaration -Wno-parentheses -finline-functions -fomit-frame-pointer -D'CS_SVN_VERSION="'"$(shell svnversion -n . | sed 's/[MS]$$//' )"'"'" \ 88 DS_CFLAGS="-c" \ 89 DS_LDFLAGS="" \ 90 DS_ARFLAGS="-rvsl" \ 91 DS_CC=gcc \ 92 DS_AR=ar \ 93 DS_LD=ld \ 94 DS_RL=ranlib \ 95 DS_ST=strip 96 97 ###################################################################### 98 # 77 99 # MacOSX native 78 100 # … … 84 106 OS_CULI="-lncurses" \ 85 107 OS_PTLI="-lpthread" \ 86 DS_OPTS="-O2 -DOS_MACOSX -DNEED_DAEMON -DCS_NOSHM -DHAVE_PTHREAD_H -DUSE_PTHREAD -DCS_CONFDIR=${CS_CONFDIR} - Winline -Wall -Wno-implicit-function-declaration -Wno-parentheses -finline-functions -fomit-frame-pointer -D'CS_SVN_VERSION="'"$(shell svnversion -n . | sed 's/[MS]$$//' )"'"'" \87 DS_CFLAGS="-c " \88 DS_LDFLAGS=" " \108 DS_OPTS="-O2 -DOS_MACOSX -DNEED_DAEMON -DCS_NOSHM -DHAVE_PTHREAD_H -DUSE_PTHREAD -DCS_CONFDIR=${CS_CONFDIR} -DHAVE_PCSC=1 -Winline -Wall -Wno-implicit-function-declaration -Wno-parentheses -finline-functions -fomit-frame-pointer -D'CS_SVN_VERSION="'"$(shell svnversion -n . | sed 's/[MS]$$//' )"'"'" \ 109 DS_CFLAGS="-c -framework PCSC" \ 110 DS_LDFLAGS="-framework PCSC" \ 89 111 DS_ARFLAGS="-rvsl" \ 90 112 DS_CC=gcc \ -
branches/pcsc/Maketype
r654 r763 19 19 VERX = -gbx-$(subst ",,$(filter-out \#define GBXVERSION,$(shell grep GBXVERSION csgbox/gbox.h))) 20 20 endif 21 EXEFILE1 = Distribution/oscam-$(VER)$(VERX)-$(subst cygwin,cygwin.exe,$(TYP))22 21 22 #EXEFILE1 = Distribution/oscam-$(VER)$(VERX)-$(subst cygwin,cygwin.exe,$(TYP)) 23 EXEFILE1 = Distribution/oscam--$(subst cygwin,cygwin.exe,$(TYP)) 23 24 24 25 LIBDIR = lib … … 74 75 75 76 $(EXEFILE1): oscam.c $(LIBFILE1) $(LIBFILE2) $(LIBFILE3) $(GENERAL) 76 $(CC) $(LDFLAGS) oscam.c $(LIBFILE1) $(LIBFILE2) $(LIBFILE3) -o "$@" $( LIBS)77 $(CC) $(LDFLAGS) oscam.c $(LIBFILE1) $(LIBFILE2) $(LIBFILE3) -o "$@" $(OS_INCLUDES) $(LIBS) 77 78 $(STRIP) $@ 78 79 … … 83 84 84 85 .c.a: 85 $(CC) $(CFLAGS) -Icsctapi $ <86 $(CC) $(CFLAGS) -Icsctapi $(OS_INCLUDES) $< 86 87 $(AR) $(ARFLAGS) $@ $*.o 87 88 -@rm -f $*.o -
branches/pcsc/globals.h
r761 r763 48 48 #include "cscrypt/cscrypt.h" 49 49 50 #ifdef HAVE_PCSC 51 #ifdef OS_MACOSX 52 #include <PCSC/pcsclite.h> 53 #include <PCSC/wintypes.h> 54 // #include <PCSC/reader.h> 55 #else 56 #include <pcsclite.h> 57 #include <reader.h> 58 #endif 59 #endif 60 50 61 #ifndef CS_CONFDIR 51 62 #define CS_CONFDIR "/usr/local/etc" … … 130 141 #define R_IS_NETWORK 0x70 131 142 #define R_IS_CASCADING 0xF0 143 144 #ifdef HAVE_PCSC 145 #define R_PCSC 0x6 // PCSC 146 #endif 132 147 133 148 #define CS_MAX_MOD 8 … … 419 434 #endif 420 435 int msg_idx; 436 #ifdef HAVE_PCSC 437 SCARDCONTEXT hContext; 438 SCARDHANDLE hCard; 439 DWORD dwActiveProtocol; 440 #endif 441 421 442 }; 422 443 -
branches/pcsc/oscam-config.c
r738 r763 1099 1099 if (!strcmp(value, "smartreader")) { rdr->typ=R_SMART; return; } 1100 1100 if (!strcmp(value, "internal")) { rdr->typ=R_INTERN; return; } 1101 #ifdef HAVE_PCSC 1102 if (!strcmp(value, "pcsc")) { rdr->typ=R_PCSC; return; } 1103 #endif 1101 1104 if (!strcmp(value, "serial")) { rdr->typ=R_SERIAL; return; } 1102 1105 if (!strcmp(value, "camd35")) { rdr->typ=R_CAMD35; return; } -
branches/pcsc/reader-common.c
r717 r763 69 69 int reader_doapi(uchar dad, uchar *buf, int l, int dbg) 70 70 { 71 #ifdef HAVE_PCSC 72 if (reader[ridx].typ == R_PCSC) { 73 long rv; 74 SCARD_IO_REQUEST pioRecvPci; 75 DWORD dwSendLength, dwRecvLength; 76 77 dwSendLength = l; 78 dwRecvLength = sizeof(cta_res); 79 80 //cs_ddump(buf, dwSendLength, "sending %d bytes to PCSC", dwSendLength); 81 82 if(reader[ridx].dwActiveProtocol == SCARD_PROTOCOL_T0) 83 rv = SCardTransmit(reader[ridx].hCard, SCARD_PCI_T0, buf, dwSendLength, &pioRecvPci, &cta_res, &dwRecvLength); 84 else if(reader[ridx].dwActiveProtocol == SCARD_PROTOCOL_T1) 85 rv = SCardTransmit(reader[ridx].hCard, SCARD_PCI_T1, buf, dwSendLength, &pioRecvPci, &cta_res, &dwRecvLength); 86 else { 87 cs_debug("PCSC invalid protocol (T=%d)", reader[ridx].dwActiveProtocol); 88 return ERR_INVALID; 89 } 90 91 cta_lr=dwRecvLength; 92 // cs_ddump(cta_res, cta_lr, "received %d bytes from PCSC with rv=%lx", cta_lr, rv); 93 94 cs_debug("PCSC doapi (%lx ) (T=%d)", rv, reader[ridx].dwActiveProtocol ); 95 if ( rv == SCARD_S_SUCCESS ){ 96 return OK; 97 } else { 98 return ERR_INVALID; 99 } 100 } 101 102 #endif 71 103 int rc; 72 104 uchar sad; … … 121 153 int i; 122 154 char ret; 155 156 #ifdef HAVE_PCSC 157 if (reader[ridx].typ == R_PCSC) { 158 cs_debug("PCSC initializing card in (%s)", &reader[ridx].device); 159 long rv; 160 DWORD dwState, dwAtrLen, dwReaderLen; 161 BYTE pbAtr[64]; 162 dwAtrLen = sizeof(pbAtr); 163 164 cs_debug("PCSC resetting card in (%s)", &reader[ridx].device); 165 rv = SCardReconnect(reader[ridx].hCard, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, SCARD_RESET_CARD, &reader[ridx].dwActiveProtocol); 166 cs_debug("PCSC resetting done on card in (%s)", &reader[ridx].device); 167 cs_debug("PCSC Protocol (T=%d)",reader[ridx].dwActiveProtocol); 168 169 if ( rv != SCARD_S_SUCCESS ) { 170 cs_debug("Error PCSC failed to reset card (%lx)", rv); 171 return(0); 172 } 173 174 cs_debug("PCSC getting ATR for card in (%s)", &reader[ridx].device); 175 rv = SCardStatus(reader[ridx].hCard, NULL, &dwReaderLen, &dwState, &reader[ridx].dwActiveProtocol, &pbAtr, &dwAtrLen); 176 if ( rv == SCARD_S_SUCCESS ) { 177 cs_debug("PCSC Protocol (T=%d)",reader[ridx].dwActiveProtocol); 178 179 /* 180 DWORD currentClk, currentClkLen; 181 currentClkLen = sizeof(currentClk); 182 rv = SCardGetAttrib(reader[ridx].hCard, SCARD_ATTR_CURRENT_CLK , ¤tClk, ¤tClkLen); 183 / cs_debug("PCSC rv=(%lx) Current clk = %lx Khz",rv, currentClk); 184 */ 185 186 // TODO: merge better 187 memcpy(atr, pbAtr, dwAtrLen); 188 atr_size=dwAtrLen; 189 #ifdef CS_RDR_INIT_HIST 190 reader[ridx].init_history_pos=0; 191 memset(reader[ridx].init_history, 0, sizeof(reader[ridx].init_history)); 192 #endif 193 cs_ri_log("ATR: %s", cs_hexdump(1, (uchar *)pbAtr, dwAtrLen)); 194 sleep(1); 195 return(1); 196 197 } else { 198 cs_debug("Error PCSC failed to get ATR for card (%lx)", rv); 199 return(0); 200 } 201 } 202 #endif 123 203 124 204 cta_cmd[0] = CTBCS_INS_RESET; … … 278 358 static int reader_card_inserted(void) 279 359 { 360 #ifdef HAVE_PCSC 361 if (reader[ridx].typ == R_PCSC) { 362 DWORD dwState, dwAtrLen, dwReaderLen; 363 BYTE pbAtr[64]; 364 long rv; 365 366 dwAtrLen = sizeof(pbAtr); 367 //cs_debug("PCSC check card inserted in %s", reader[ridx].device); 368 rv = SCardStatus(reader[ridx].hCard, NULL, &dwReaderLen, &dwState, &reader[ridx].dwActiveProtocol, &pbAtr, &dwAtrLen); 369 if (rv == SCARD_S_SUCCESS && (dwState & (SCARD_PRESENT | SCARD_NEGOTIABLE | SCARD_POWERED) )) { 370 //cs_debug("PCSC card IS inserted in %s card state (%lx)", reader[ridx].device, dwState); 371 //cs_debug("ATR: %s", cs_hexdump(1, (uchar *)pbAtr, dwAtrLen)); 372 return 3; 373 } else { 374 if (rv == SCARD_W_REMOVED_CARD && (dwState == 0) ) { 375 // TODO: Removed and reinserted.. reconnect or connet card.. 376 rv = SCardReleaseContext(reader[ridx].hContext); 377 378 reader_device_init(reader[ridx].device, reader[ridx].typ); 379 sleep(2); 380 381 } else if ( rv == SCARD_W_REMOVED_CARD || (dwState | SCARD_ABSENT) ) { 382 cs_debug("PCSC card in %s removed / absent [dwstate=%lx rv=(%lx)]", reader[ridx].device, dwState, rv ); 383 } else { 384 cs_debug("PCSC card inserted FAILURE in %s (%lx) card state (%x) (T=%d)", reader[ridx].device, rv, dwState, reader[ridx].dwActiveProtocol); 385 } 386 return 0; 387 } 388 } 389 #endif 390 280 391 cta_cmd[0]=CTBCS_CLA; 281 392 cta_cmd[1]=CTBCS_INS_STATUS; … … 289 400 int reader_device_init(char *device, int typ) 290 401 { 402 #ifdef HAVE_PCSC 403 if (reader[ridx].typ == R_PCSC) { 404 long rv; 405 cs_debug("PCSC establish context : %s", device); 406 rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &reader[ridx].hContext); 407 if ( rv == SCARD_S_SUCCESS ) { 408 409 cs_debug("PCSC initializing reader (%s)", &reader[ridx].device); 410 rv = SCardConnect(reader[ridx].hContext, &reader[ridx].device, SCARD_SHARE_DIRECT, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &reader[ridx].hCard, &reader[ridx].dwActiveProtocol); 411 cs_debug("PCSC initializing result (%lx) protocol (T=%lx)", rv, reader[ridx].dwActiveProtocol ); 412 413 return ((rv != SCARD_S_SUCCESS) ? 2 : 0); 414 } else { 415 cs_debug("PCSC failed establish context (%lx)", rv); 416 return 0; 417 } 418 } 419 #endif 420 291 421 int rc; 292 422 oscam_card_detect=reader[ridx].detect;
Note:
See TracChangeset
for help on using the changeset viewer.