61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
#pragma once
|
|
|
|
#include <osmocom/core/linuxlist.h>
|
|
|
|
struct card_reader_slot;
|
|
|
|
struct card_reader_driver_ops {
|
|
/* probe system for card readers */
|
|
void (*probe)(void *ctx);
|
|
/* open a given slot, attempt to reset/start the card */
|
|
int (*open_slot)(struct card_reader_slot *slot);
|
|
/* close a given slot, power down the card */
|
|
void (*close_slot)(struct card_reader_slot *slot);
|
|
/* transceive an APDU */
|
|
int (*transceive_apdu)(struct card_reader_slot *slot);
|
|
};
|
|
|
|
struct card_reader_driver {
|
|
/* global list of drivers */
|
|
struct llist_head list;
|
|
/* name of the driver */
|
|
char *name;
|
|
const struct card_reader_driver_ops *ops;
|
|
};
|
|
|
|
struct card_reader {
|
|
/* global list of card readers */
|
|
struct llist_head list;
|
|
/* name of this reader */
|
|
char *name;
|
|
/* driver providing access to this reader */
|
|
const struct card_reader_driver *drv;
|
|
void *drv_handle;
|
|
/* list of card slots for this reader */
|
|
struct llist_head slots;
|
|
};
|
|
|
|
enum card_slot_state {
|
|
CARD_SLOT_OFF,
|
|
CARD_SLOT_OPEN,
|
|
};
|
|
|
|
struct card_reader_slot {
|
|
/* links to card_reader.slots */
|
|
struct llist_head list;
|
|
/* back-pointer to reader serving this slot */
|
|
struct card_reader *reader;
|
|
/* slot number */
|
|
unsigned int num;
|
|
/* state in which the slot is */
|
|
enum card_slot_state state;
|
|
};
|
|
|
|
|
|
struct card_reader *card_reader_alloc(void *ctx, const char *name,
|
|
const struct card_reader_driver *drv, void *drv_handle);
|
|
struct card_reader_slot *card_reader_slot_alloc(struct card_reader *cr, unsigned int slot_num);
|
|
|
|
void card_reader_driver_register(struct card_reader_driver *drv);
|
|
void card_readers_probe(void *ctx);
|