Blame examples/PCSCv2part10.h

Packit 9f0df5
/*
Packit 9f0df5
    PCSCv2part10.h: helper functions for PC/SC v2 part 10 services
Packit 9f0df5
    Copyright (C) 2012   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
Packit 9f0df5
    License along with this library; if not, write to the Free Software
Packit 9f0df5
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit 9f0df5
*/
Packit 9f0df5
Packit 9f0df5
#ifndef __reader_h__
Packit 9f0df5
Packit 9f0df5
#ifdef HAVE_CONFIG_H
Packit 9f0df5
#include "config.h"
Packit 9f0df5
#endif
Packit 9f0df5
Packit 9f0df5
#ifdef HAVE_READER_H
Packit 9f0df5
#include <reader.h>
Packit 9f0df5
#else
Packit 9f0df5
Packit 9f0df5
/**
Packit 9f0df5
 * Provide source compatibility on different platforms
Packit 9f0df5
 */
Packit 9f0df5
#define SCARD_CTL_CODE(code) (0x42000000 + (code))
Packit 9f0df5
Packit 9f0df5
/**
Packit 9f0df5
 * PC/SC part 10 v2.02.07 March 2010 reader tags
Packit 9f0df5
 */
Packit 9f0df5
#define CM_IOCTL_GET_FEATURE_REQUEST SCARD_CTL_CODE(3400)
Packit 9f0df5
Packit 9f0df5
#define FEATURE_GET_TLV_PROPERTIES       0x12	/**< Get TLV properties */
Packit 9f0df5
Packit 9f0df5
#include <inttypes.h>
Packit 9f0df5
Packit 9f0df5
/* Set structure elements aligment on bytes
Packit 9f0df5
 * http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html */
Packit 9f0df5
#if defined(__APPLE__) | defined(sun)
Packit 9f0df5
#pragma pack(1)
Packit 9f0df5
#else
Packit 9f0df5
#pragma pack(push, 1)
Packit 9f0df5
#endif
Packit 9f0df5
Packit 9f0df5
/** the structure must be 6-bytes long */
Packit 9f0df5
typedef struct
Packit 9f0df5
{
Packit 9f0df5
	uint8_t tag; /**< Tag */
Packit 9f0df5
	uint8_t length; /**< Length */
Packit 9f0df5
	uint32_t value;	/**< This value is always in BIG ENDIAN format as documented in PCSC v2 part 10 ch 2.2 page 2. You can use ntohl() for example */
Packit 9f0df5
} PCSC_TLV_STRUCTURE;
Packit 9f0df5
Packit 9f0df5
/* restore default structure elements alignment */
Packit 9f0df5
#if defined(__APPLE__) | defined(sun)
Packit 9f0df5
#pragma pack()
Packit 9f0df5
#else
Packit 9f0df5
#pragma pack(pop)
Packit 9f0df5
#endif
Packit 9f0df5
Packit 9f0df5
/* properties returned by FEATURE_GET_TLV_PROPERTIES */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_wLcdLayout 1		/**< wLcdLayout */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_bEntryValidationCondition 2	/**< bEntryValidationCondition */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_bTimeOut2 3	/**< bTimeOut2 */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_wLcdMaxCharacters 4 /**< wLcdMaxCharacters */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_wLcdMaxLines 5 /**< wLcdMaxLines */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_bMinPINSize 6 /**< bMinPINSize */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_bMaxPINSize 7 /**< bMaxPINSize */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_sFirmwareID 8 /**< sFirmwareID */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_bPPDUSupport 9 /**< bPPDUSupport */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize 10 /**< dwMaxAPDUDataSize */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_wIdVendor 11 /**< wIdVendor */
Packit 9f0df5
#define PCSCv2_PART10_PROPERTY_wIdProduct 12 /**< wIdProduct */
Packit 9f0df5
Packit 9f0df5
#endif
Packit 9f0df5
#endif
Packit 9f0df5
Packit 9f0df5
/**
Packit 9f0df5
 * @file
Packit 9f0df5
 * @defgroup API API
Packit 9f0df5
 *
Packit 9f0df5
 * The available PC/SC v2 part 10 tags are (from pcsc-lite 1.8.5):
Packit 9f0df5
 *
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_wLcdLayout
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_bEntryValidationCondition
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_bTimeOut2
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_wLcdMaxCharacters
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_wLcdMaxLines
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_bMinPINSize
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_bMaxPINSize
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_sFirmwareID
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_bPPDUSupport
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_dwMaxAPDUDataSize
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_wIdVendor
Packit 9f0df5
 * - \ref PCSCv2_PART10_PROPERTY_wIdProduct
Packit 9f0df5
 *
Packit 9f0df5
 * Example of code:
Packit 9f0df5
 * @include sample.c
Packit 9f0df5
 */
Packit 9f0df5
Packit 9f0df5
/**
Packit 9f0df5
 * @brief Find an integer value by tag from TLV buffer
Packit 9f0df5
 * @ingroup API
Packit 9f0df5
 *
Packit 9f0df5
 * @param buffer buffer received from FEATURE_GET_TLV_PROPERTIES
Packit 9f0df5
 * @param length buffer length
Packit 9f0df5
 * @param property tag searched
Packit 9f0df5
 * @param[out] value value found
Packit 9f0df5
 * @return Error code
Packit 9f0df5
 *
Packit 9f0df5
 * @retval 0 success
Packit 9f0df5
 * @retval -1 not found
Packit 9f0df5
 * @retval -2 invalid length in the TLV
Packit 9f0df5
 *
Packit 9f0df5
 */
Packit 9f0df5
int PCSCv2Part10_find_TLV_property_by_tag_from_buffer(
Packit 9f0df5
	unsigned char *buffer, int length, int property, int * value);
Packit 9f0df5
Packit 9f0df5
/**
Packit 9f0df5
 * @brief Find a integer value by tag from a PC/SC card handle
Packit 9f0df5
 * @ingroup API
Packit 9f0df5
 *
Packit 9f0df5
 * @param hCard card handle as returned by SCardConnect()
Packit 9f0df5
 * @param property tag searched
Packit 9f0df5
 * @param[out] value value found
Packit 9f0df5
 * @return Error code (see PCSCv2Part10_find_TLV_property_by_tag_from_buffer())
Packit 9f0df5
 */
Packit 9f0df5
int PCSCv2Part10_find_TLV_property_by_tag_from_hcard(SCARDHANDLE hCard,
Packit 9f0df5
	int property, int * value);
Packit 9f0df5