Blame src/openct/proto-t1.h

Packit 9f0df5
/*
Packit 9f0df5
    proto-t1.h: header file for proto-t1.c
Packit 9f0df5
    Copyright (C) 2004   Ludovic Rousseau
Packit 9f0df5
Packit 9f0df5
    This library is free software; you can redistribute it and/or
Packit 9f0df5
    modify it under the terms of the GNU Lesser General Public
Packit 9f0df5
    License as published by the Free Software Foundation; either
Packit 9f0df5
    version 2.1 of the License, or (at your option) any later version.
Packit 9f0df5
Packit 9f0df5
    This library is distributed in the hope that it will be useful,
Packit 9f0df5
    but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 9f0df5
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 9f0df5
    Lesser General Public License for more details.
Packit 9f0df5
Packit 9f0df5
	You should have received a copy of the GNU Lesser General Public License
Packit 9f0df5
	along with this library; if not, write to the Free Software Foundation,
Packit 9f0df5
	Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 9f0df5
*/
Packit 9f0df5
Packit 9f0df5
#ifndef __PROTO_T1_H__
Packit 9f0df5
#define __PROTO_T1_H__
Packit 9f0df5
Packit 9f0df5
#include <config.h>
Packit 9f0df5
#ifdef HAVE_STDINT_H
Packit 9f0df5
#include <stdint.h>
Packit 9f0df5
#endif
Packit 9f0df5
Packit 9f0df5
#include "buffer.h"
Packit 9f0df5
Packit 9f0df5
/* T=1 protocol constants */
Packit 9f0df5
#define T1_I_BLOCK		0x00
Packit 9f0df5
#define T1_R_BLOCK		0x80
Packit 9f0df5
#define T1_S_BLOCK		0xC0
Packit 9f0df5
#define T1_MORE_BLOCKS		0x20
Packit 9f0df5
Packit 9f0df5
enum {
Packit 9f0df5
	IFD_PROTOCOL_RECV_TIMEOUT = 0x0000,
Packit 9f0df5
	IFD_PROTOCOL_T1_BLOCKSIZE,
Packit 9f0df5
	IFD_PROTOCOL_T1_CHECKSUM_CRC,
Packit 9f0df5
	IFD_PROTOCOL_T1_CHECKSUM_LRC,
Packit 9f0df5
	IFD_PROTOCOL_T1_IFSC,
Packit 9f0df5
	IFD_PROTOCOL_T1_IFSD,
Packit 9f0df5
	IFD_PROTOCOL_T1_STATE,
Packit 9f0df5
	IFD_PROTOCOL_T1_MORE
Packit 9f0df5
};
Packit 9f0df5
Packit 9f0df5
#define T1_BUFFER_SIZE		(3 + 254 + 2)
Packit 9f0df5
Packit 9f0df5
/* see /usr/include/PCSC/ifdhandler.h for other values
Packit 9f0df5
 * this one is for internal use only */
Packit 9f0df5
#define IFD_PARITY_ERROR 699
Packit 9f0df5
Packit 9f0df5
typedef struct {
Packit 9f0df5
	int		lun;
Packit 9f0df5
	int		state;
Packit 9f0df5
Packit 9f0df5
	unsigned char	ns;	/* reader side */
Packit 9f0df5
	unsigned char	nr;	/* card side */
Packit 9f0df5
	unsigned int	ifsc;
Packit 9f0df5
	unsigned int	ifsd;
Packit 9f0df5
Packit 9f0df5
	unsigned char	wtx;
Packit 9f0df5
	unsigned int	retries;
Packit 9f0df5
	unsigned int	rc_bytes;
Packit 9f0df5
Packit 9f0df5
	unsigned int	(*checksum)(const uint8_t *, size_t, unsigned char *);
Packit 9f0df5
Packit 9f0df5
	char			more;	/* more data bit */
Packit 9f0df5
	unsigned char	previous_block[4];	/* to store the last R-block */
Packit 9f0df5
} t1_state_t;
Packit 9f0df5
Packit 9f0df5
int t1_transceive(t1_state_t *t1, unsigned int dad,
Packit 9f0df5
		const void *snd_buf, size_t snd_len,
Packit 9f0df5
		void *rcv_buf, size_t rcv_len);
Packit 9f0df5
int t1_init(t1_state_t *t1, int lun);
Packit 9f0df5
void t1_release(t1_state_t *t1);
Packit 9f0df5
int t1_set_param(t1_state_t *t1, int type, long value);
Packit 9f0df5
int t1_negotiate_ifsd(t1_state_t *t1, unsigned int dad, int ifsd);
Packit 9f0df5
unsigned int t1_build(t1_state_t *, unsigned char *,
Packit 9f0df5
	unsigned char, unsigned char, ct_buf_t *, size_t *);
Packit 9f0df5
Packit 9f0df5
#endif
Packit 9f0df5