# PCSC/Ada Library

- README

- Download

## Introduction

PCSC/Ada provides an Ada binding to PC/SC-middleware. The library allows programs written in Ada to communicate with smart cards using the SCard API.

PC/SC is a specification for SmartCard integration in computing environment. PC/SC is implemented in Microsoft Windows 200x/XP and available under Microsoft Windows NT/9x. A free implementation of PC/SC, PC/SC Lite, is available under Linux and bundled with Mac OS X.

## Overview and Examples

PCSC/Ada provides a thin and a thick binding for the PC/SC API. The thin binding is not explained here though, since Ada programmers should not use this binding directly. It is much more convenient to use the thick binding provided by the `PCSC.SCard` package.

The following code is used to demonstrate how to establish a PC/SC context, connect to the first reader of a sytem and then send some arbitrary command to the smart card:

    with PCSC.SCard;

    use PCSC;

    procedure Sample is
       pragma Linker_Options ("-lpcsclite");

       Context : SCard.Context;
       --  PC/SC context
       Card    : SCard.Card;
       --  Card handle
       Readers : SCard.Reader_ID_Set;
       --  Set of readers
    begin

       --  Establish context

       SCard.Establish_Context (Context => Context,
                                Scope   => SCard.Scope_System);

       --  List readers

       Readers := SCard.List_Readers (Context => Context);

       --  Connect to first reader

       SCard.Connect (Context => Context,
                      Card    => Card,
                      Reader  => Readers.First_Item,
                      Mode    => SCard.Share_Shared);

       --  Send APDU to card

       declare
          Recv_Buffer : SCard.Byte_Set (1 .. 10);
          Send_Buffer : constant SCard.Byte_Set
            := (16#00#, 16#A4#, 16#00#, 16#00#, 16#02#, 16#3F#, 16#00#);
          Recv_Length : Natural := 0;
          Recv_PCI    : SCard.IO_Request;
       begin
          SCard.Transmit (Card        => Card,
                          Send_Buffer => Send_Buffer,
                          Recv_Pci    => Recv_PCI,
                          Recv_Buffer => Recv_Buffer,
                          Recv_Len    => Recv_Length);
       end;

       --  Disconnect

       SCard.Disconnect (Card   => Card,
                         Action => SCard.Reset_Card);

       --  Release context

       SCard.Release_Context (Context => Context);
    end Sample;

For more detailed examples on how to use PC/SC Ada in your own applications, examine the sample applications which are included in the distribution tarball `examples` directory (for information about the included examples, check the Examples section in the README).

## Browse the source

- You can browse the PCSC/Ada source code with gitweb here.

## Licence

    Copyright (C) 2008-2014 Reto Buerki

    PCSC/Ada is free software; you can redistribute it and/or modify it under the
    terms of the GNU Lesser General Public License as published by the Free Software
    Foundation; either version 2.1 of the License, or (at your option) any later
    version.