| 99 |
struct usb_dev_handle *dev_handle; |
struct usb_dev_handle *dev_handle; |
| 100 |
char keyValue[TOKEN_MAX_VALUE_SIZE]; |
char keyValue[TOKEN_MAX_VALUE_SIZE]; |
| 101 |
int vendorID, productID; |
int vendorID, productID; |
| 102 |
|
char infofile[FILENAME_MAX]; |
| 103 |
|
|
| 104 |
DEBUG_COMM3("OpenUSB: Lun: %X, Channel: %X", lun, Channel); |
DEBUG_COMM3("OpenUSB: Lun: %X, Channel: %X", lun, Channel); |
| 105 |
|
|
| 126 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 127 |
} |
} |
| 128 |
|
|
| 129 |
|
/* Info.plist full patch filename */ |
| 130 |
|
snprintf(infofile, sizeof(infofile), "%s/Contents/Info.plist", PCSCLITE_HP_DROPDIR); |
| 131 |
|
|
| 132 |
/* general driver info */ |
/* general driver info */ |
| 133 |
if (!LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", "ifdManufacturerString", keyValue, 0)) |
if (!LTPBundleFindValueWithKey(infofile, "ifdManufacturerString", keyValue, 0)) |
| 134 |
DEBUG_CRITICAL2("Manufacturer: %s", keyValue); |
DEBUG_CRITICAL2("Manufacturer: %s", keyValue); |
| 135 |
else |
else |
| 136 |
{ |
{ |
| 137 |
DEBUG_CRITICAL2("LTPBundleFindValueWithKey error. Can't find %s?", |
DEBUG_CRITICAL2("LTPBundleFindValueWithKey error. Can't find %s?", |
| 138 |
PCSCLITE_HP_DROPDIR "/Contents/Info.plist"); |
infofile); |
| 139 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 140 |
} |
} |
| 141 |
if (!LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", "ifdProductString", keyValue, 0)) |
if (!LTPBundleFindValueWithKey(infofile, "ifdProductString", keyValue, 0)) |
| 142 |
DEBUG_CRITICAL2("ProductString: %s", keyValue); |
DEBUG_CRITICAL2("ProductString: %s", keyValue); |
| 143 |
else |
else |
| 144 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 145 |
if (!LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", "Copyright", keyValue, 0)) |
if (!LTPBundleFindValueWithKey(infofile, "Copyright", keyValue, 0)) |
| 146 |
DEBUG_CRITICAL2("Copyright: %s", keyValue); |
DEBUG_CRITICAL2("Copyright: %s", keyValue); |
| 147 |
else |
else |
| 148 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 152 |
alias ^= keyValue[vendorID]; |
alias ^= keyValue[vendorID]; |
| 153 |
|
|
| 154 |
/* for any supported reader */ |
/* for any supported reader */ |
| 155 |
while (LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", PCSCLITE_MANUKEY_NAME, keyValue, alias) == 0) |
while (LTPBundleFindValueWithKey(infofile, PCSCLITE_MANUKEY_NAME, keyValue, alias) == 0) |
| 156 |
{ |
{ |
| 157 |
vendorID = strtol(keyValue, 0, 16); |
vendorID = strtoul(keyValue, 0, 16); |
| 158 |
|
|
| 159 |
if (LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", PCSCLITE_PRODKEY_NAME, keyValue, alias)) |
if (LTPBundleFindValueWithKey(infofile, PCSCLITE_PRODKEY_NAME, keyValue, alias)) |
| 160 |
goto end; |
goto end; |
| 161 |
productID = strtol(keyValue, 0, 16); |
productID = strtoul(keyValue, 0, 16); |
| 162 |
|
|
| 163 |
if (LTPBundleFindValueWithKey(PCSCLITE_HP_DROPDIR "/Contents/Info.plist", PCSCLITE_NAMEKEY_NAME, keyValue, alias)) |
if (LTPBundleFindValueWithKey(infofile, PCSCLITE_NAMEKEY_NAME, keyValue, alias)) |
| 164 |
goto end; |
goto end; |
| 165 |
|
|
| 166 |
/* on any USB buses */ |
/* on any USB buses */ |
| 199 |
|
|
| 200 |
if (!already_used) |
if (!already_used) |
| 201 |
{ |
{ |
| 202 |
|
DEBUG_COMM2("Trying to open USB bus/device: %s", |
| 203 |
|
device_name); |
| 204 |
|
|
| 205 |
dev_handle = usb_open(dev); |
dev_handle = usb_open(dev); |
| 206 |
if (dev_handle) |
if (dev_handle) |
| 207 |
{ |
{ |
| 208 |
int interface; |
int interface; |
| 209 |
|
|
|
DEBUG_COMM2("Trying to open USB bus/device: %s", device_name); |
|
|
|
|
| 210 |
if (dev->config == NULL) |
if (dev->config == NULL) |
| 211 |
{ |
{ |
| 212 |
DEBUG_CRITICAL2("No dev->config found for %s", device_name); |
DEBUG_CRITICAL2("No dev->config found for %s", |
| 213 |
|
device_name); |
| 214 |
return STATUS_UNSUCCESSFUL; |
return STATUS_UNSUCCESSFUL; |
| 215 |
} |
} |
| 216 |
|
|
| 226 |
DEBUG_INFO4("Found Vendor/Product: %04X/%04X (%s)", |
DEBUG_INFO4("Found Vendor/Product: %04X/%04X (%s)", |
| 227 |
dev->descriptor.idVendor, |
dev->descriptor.idVendor, |
| 228 |
dev->descriptor.idProduct, keyValue); |
dev->descriptor.idProduct, keyValue); |
| 229 |
DEBUG_INFO2("Using USB bus/device: %s", device_name); |
DEBUG_INFO2("Using USB bus/device: %s", |
| 230 |
|
device_name); |
| 231 |
|
|
| 232 |
/* Get Endpoints values*/ |
/* Get Endpoints values*/ |
| 233 |
get_end_points(dev, &usbDevice[reader]); |
get_end_points(dev, &usbDevice[reader]); |
| 242 |
goto end; |
goto end; |
| 243 |
} |
} |
| 244 |
else |
else |
| 245 |
DEBUG_CRITICAL3("Can't usb_open(%s): %s", device_name, |
DEBUG_CRITICAL3("Can't usb_open(%s): %s", |
| 246 |
|
device_name, |
| 247 |
strerror(errno)); |
strerror(errno)); |
| 248 |
} |
} |
| 249 |
else |
else |
| 360 |
} /* CloseUSB */ |
} /* CloseUSB */ |
| 361 |
|
|
| 362 |
|
|
| 363 |
|
/***************************************************************************** |
| 364 |
|
* |
| 365 |
|
* ccid_get_seq |
| 366 |
|
* |
| 367 |
|
****************************************************************************/ |
| 368 |
int ccid_get_seq(int lun) |
int ccid_get_seq(int lun) |
| 369 |
{ |
{ |
| 370 |
return usbDevice[LunToReaderIndex(lun)].bSeq++; |
return usbDevice[LunToReaderIndex(lun)].bSeq++; |
| 371 |
} /* ccid_get_seq */ |
} /* ccid_get_seq */ |
| 372 |
|
|
| 373 |
|
|
| 374 |
|
/***************************************************************************** |
| 375 |
|
* |
| 376 |
|
* ccid_error |
| 377 |
|
* |
| 378 |
|
****************************************************************************/ |
| 379 |
void ccid_error(int error, char *file, int line) |
void ccid_error(int error, char *file, int line) |
| 380 |
{ |
{ |
| 381 |
char *text; |
char *text; |
| 463 |
|
|
| 464 |
} /* ccid_error */ |
} /* ccid_error */ |
| 465 |
|
|
| 466 |
|
/***************************************************************************** |
| 467 |
|
* |
| 468 |
|
* get_desc |
| 469 |
|
* |
| 470 |
|
****************************************************************************/ |
| 471 |
int get_desc(int channel, char *device_name[], usb_dev_handle **handle, struct |
int get_desc(int channel, char *device_name[], usb_dev_handle **handle, struct |
| 472 |
usb_device **dev) |
usb_device **dev) |
| 473 |
{ |
{ |
| 481 |
return 0; |
return 0; |
| 482 |
} /* get_desc */ |
} /* get_desc */ |
| 483 |
|
|
| 484 |
|
/***************************************************************************** |
| 485 |
|
* |
| 486 |
|
* get_end_points |
| 487 |
|
* |
| 488 |
|
****************************************************************************/ |
| 489 |
int get_end_points(struct usb_device *dev, _usbDevice *usb_device) |
int get_end_points(struct usb_device *dev, _usbDevice *usb_device) |
| 490 |
{ |
{ |
| 491 |
int i; |
int i; |