#include "internal.h" #include "anysee_sc.h" #include #include static int anysee_open(ifd_reader_t* reader, const char* name) { ifd_device_t* dev = 0; int fd = -1; const char* device_name = 0; ifd_debug(1, "anysee_open: name='%s'\n", name); device_name = strchr(name, ':'); if (device_name==0) return -1; ++device_name; fd = open(device_name, O_RDWR); ifd_debug(2, "anysee_open: fd=%d\n", fd); if (fd<0) return -1; reader->name = "Anysee DVB USB card reader"; reader->nslots = 1; dev = ifd_device_new(name, 0, sizeof(*dev)); reader->device = dev; dev->timeout = 1000; dev->fd = fd; dev->type = IFD_DEVICE_TYPE_OTHER; return 0; } static int anysee_close(ifd_reader_t * reader) { return close(reader->device->fd); } static int anysee_activate(ifd_reader_t *reader) { return 0; } static int anysee_deactivate(ifd_reader_t *reader) { return 0; } static int anysee_card_status(ifd_reader_t *reader, int slot, int *status) { int rv = ioctl(reader->device->fd, ANYSEE_SC_PRESENT); ifd_debug(2, "anysee_card_status: rv=%d\n", rv); if (rv<0) { return -1; } else { *status = (rv==0) ? 0 : IFD_CARD_PRESENT; return 0; } } static int anysee_card_reset(ifd_reader_t *reader, int slot, void *atr, size_t atr_len) { struct anysee_sc_activate activate; if (ioctl(reader->device->fd, ANYSEE_SC_ACTIVATE, &activate)<0) { ifd_debug(2, "anysee_card_reset: failed\n"); return -1; } else { size_t length = (atr_lendevice->fd, buffer, len); } static int anysee_recv(ifd_reader_t *reader, unsigned int dad, unsigned char *buffer, size_t len, long timeout) { return read(reader->device->fd, buffer, len); } static struct ifd_driver_ops anysee_ops; void ifd_anysee_register() { anysee_ops.open = &anysee_open; anysee_ops.close = &anysee_close; anysee_ops.activate = &anysee_activate; anysee_ops.deactivate = &anysee_deactivate; anysee_ops.card_status = &anysee_card_status; anysee_ops.card_reset = &anysee_card_reset; anysee_ops.send = &anysee_send; anysee_ops.recv = &anysee_recv; ifd_driver_register("anysee", &anysee_ops); }