osmo-remsim/src/bankd/internal.h

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);