source: trunk/src/ifd/ifd-starkey.c @ 964

Revision 964, 2.7 KB checked in by aj, 5 years ago (diff)

indent changes only.

Line 
1/*
2 * starkey driver
3 *
4 * Copyright (C) 2005, Andreas Jellinghaus <aj@dungeon.inka.de>
5 */
6
7#include "internal.h"
8#include <stdlib.h>
9#include <string.h>
10
11#define STARKEY_TIMEOUT 100000
12
13/*
14 * Initialize the device
15 */
16static int starkey_open(ifd_reader_t * reader, const char *device_name)
17{
18        ifd_device_t *dev;
19        ifd_device_params_t params;
20
21        reader->name = "G&D Starkey 100";
22        reader->nslots = 1;
23        if (!(dev = ifd_device_open(device_name)))
24                return -1;
25        if (ifd_device_type(dev) != IFD_DEVICE_TYPE_USB) {
26                ct_error("starkey: device %s is not a USB device", device_name);
27                ifd_device_close(dev);
28                return -1;
29        }
30
31        params = dev->settings;
32        params.usb.interface = 0;
33        if (ifd_device_set_parameters(dev, &params) < 0) {
34                ct_error("starkey: setting parameters failed", device_name);
35                ifd_device_close(dev);
36                return -1;
37        }
38
39        reader->device = dev;
40
41        return 0;
42}
43
44/*
45 * Power up the reader
46 */
47static int starkey_activate(ifd_reader_t * reader)
48{
49        return 0;
50}
51
52static int starkey_deactivate(ifd_reader_t * reader)
53{
54        return -1;
55}
56
57/*
58 * Card status - always present
59 */
60static int starkey_card_status(ifd_reader_t * reader, int slot, int *status)
61{
62        *status = IFD_CARD_PRESENT;
63        return 0;
64}
65
66/*
67 * Reset - nothing to be done?
68 * We should do something to make it come back with all state zapped
69 */
70static int starkey_card_reset(ifd_reader_t * reader, int slot, void *atr,
71                              size_t size)
72{
73        ifd_device_t *dev = reader->device;
74        unsigned char buffer[32];
75        int rc, atrlen;
76        ifd_usb_capture_t *cap;
77
78        rc = ifd_usb_begin_capture(dev,
79                                   IFD_USB_URB_TYPE_INTERRUPT, 0x81,
80                                   sizeof(buffer), &cap);
81        if (rc < 0)
82                return rc;
83
84        rc = ifd_usb_capture(dev, cap, buffer, sizeof(buffer), STARKEY_TIMEOUT);
85
86        if (rc <= 0) {
87                ct_error("starkey: failed to activate token");
88                return -1;
89        }
90
91        memcpy(atr, buffer, rc);
92        atrlen = rc;
93        return atrlen;
94}
95
96/*
97 * Send/receive routines
98 */
99static int starkey_send(ifd_reader_t * reader, unsigned int dad,
100                        const unsigned char *buffer, size_t len)
101{
102        return ifd_usb_control(reader->device, 0x40, 0x06, 0, 0,
103                               (void *)buffer, len, -1);
104}
105
106static int starkey_recv(ifd_reader_t * reader, unsigned int dad,
107                        unsigned char *buffer, size_t len, long timeout)
108{
109        return ifd_usb_control(reader->device, 0xc0, 0x86, 0, 0,
110                               buffer, len, timeout);
111}
112
113/*
114 * Driver operations
115 */
116static struct ifd_driver_ops starkey_driver;
117
118/*
119 * Initialize this module
120 */
121void ifd_starkey_register(void)
122{
123        starkey_driver.open = starkey_open;
124        starkey_driver.activate = starkey_activate;
125        starkey_driver.deactivate = starkey_deactivate;
126        starkey_driver.card_status = starkey_card_status;
127        starkey_driver.card_reset = starkey_card_reset;
128        starkey_driver.send = starkey_send;
129        starkey_driver.recv = starkey_recv;
130
131        ifd_driver_register("starkey", &starkey_driver);
132}
Note: See TracBrowser for help on using the repository browser.