Blame src/openct/proto-t1.h

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