#if 0
#elif defined(__arm64__) && __arm64__
// Generated by Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
#ifndef ABCSMARTCARDIO_SWIFT_H
#define ABCSMARTCARDIO_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#if defined(__OBJC__)
#include <Foundation/Foundation.h>
#endif
#if defined(__cplusplus)
#include <cstdint>
#include <cstddef>
#include <cstdbool>
#include <cstring>
#include <stdlib.h>
#include <new>
#include <type_traits>
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#endif
#if defined(__cplusplus)
#if defined(__arm64e__) && __has_include(<ptrauth.h>)
# include <ptrauth.h>
#else
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-macro-identifier"
# ifndef __ptrauth_swift_value_witness_function_pointer
#  define __ptrauth_swift_value_witness_function_pointer(x)
# endif
# ifndef __ptrauth_swift_class_method_pointer
#  define __ptrauth_swift_class_method_pointer(x)
# endif
#pragma clang diagnostic pop
#endif
#endif

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...) 
# endif
#endif
#if !defined(SWIFT_RUNTIME_NAME)
# if __has_attribute(objc_runtime_name)
#  define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
# else
#  define SWIFT_RUNTIME_NAME(X) 
# endif
#endif
#if !defined(SWIFT_COMPILE_NAME)
# if __has_attribute(swift_name)
#  define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
# else
#  define SWIFT_COMPILE_NAME(X) 
# endif
#endif
#if !defined(SWIFT_METHOD_FAMILY)
# if __has_attribute(objc_method_family)
#  define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
# else
#  define SWIFT_METHOD_FAMILY(X) 
# endif
#endif
#if !defined(SWIFT_NOESCAPE)
# if __has_attribute(noescape)
#  define SWIFT_NOESCAPE __attribute__((noescape))
# else
#  define SWIFT_NOESCAPE 
# endif
#endif
#if !defined(SWIFT_RELEASES_ARGUMENT)
# if __has_attribute(ns_consumed)
#  define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
# else
#  define SWIFT_RELEASES_ARGUMENT 
# endif
#endif
#if !defined(SWIFT_WARN_UNUSED_RESULT)
# if __has_attribute(warn_unused_result)
#  define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# else
#  define SWIFT_WARN_UNUSED_RESULT 
# endif
#endif
#if !defined(SWIFT_NORETURN)
# if __has_attribute(noreturn)
#  define SWIFT_NORETURN __attribute__((noreturn))
# else
#  define SWIFT_NORETURN 
# endif
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA 
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA 
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA 
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER 
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility) 
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED_OBJC)
# if __has_feature(attribute_diagnose_if_objc)
#  define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
# else
#  define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
# endif
#endif
#if defined(__OBJC__)
#if !defined(IBSegueAction)
# define IBSegueAction 
#endif
#endif
#if !defined(SWIFT_EXTERN)
# if defined(__cplusplus)
#  define SWIFT_EXTERN extern "C"
# else
#  define SWIFT_EXTERN extern
# endif
#endif
#if !defined(SWIFT_CALL)
# define SWIFT_CALL __attribute__((swiftcall))
#endif
#if !defined(SWIFT_INDIRECT_RESULT)
# define SWIFT_INDIRECT_RESULT __attribute__((swift_indirect_result))
#endif
#if !defined(SWIFT_CONTEXT)
# define SWIFT_CONTEXT __attribute__((swift_context))
#endif
#if !defined(SWIFT_ERROR_RESULT)
# define SWIFT_ERROR_RESULT __attribute__((swift_error_result))
#endif
#if defined(__cplusplus)
# define SWIFT_NOEXCEPT noexcept
#else
# define SWIFT_NOEXCEPT 
#endif
#if !defined(SWIFT_C_INLINE_THUNK)
# if __has_attribute(always_inline)
# if __has_attribute(nodebug)
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline)) __attribute__((nodebug))
# else
#  define SWIFT_C_INLINE_THUNK inline __attribute__((always_inline))
# endif
# else
#  define SWIFT_C_INLINE_THUNK inline
# endif
#endif
#if defined(_WIN32)
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL __declspec(dllimport)
#endif
#else
#if !defined(SWIFT_IMPORT_STDLIB_SYMBOL)
# define SWIFT_IMPORT_STDLIB_SYMBOL 
#endif
#endif
#if defined(__OBJC__)
#if __has_feature(objc_modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="ABCSmartCardIO",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

#if defined(__OBJC__)

/// Status class
/// Class holding all possible statuses and their descriptions the AB Circle SmartCard I/O Framework can return.
/// This class is used as base for all classes in the AB Circle SmartCard I/O Framework that have methods returning or throwing error statuses.
/// Properties and methods to hold the last status code and its description are included, as well as getting the description of an entered statuscode.
SWIFT_CLASS("_TtC14ABCSmartCardIO6Status")
@interface Status : NSObject
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

/// Status code enumerator; holds all possible statuses returned or thrown by methods in this framework
typedef SWIFT_ENUM(NSInteger, StatusCode, open) {
/// Success
  StatusCodeSuccess = 0,
/// Bluetooth is powered off
  StatusCodeBluetoothStatusPoweredOff = 1,
/// Bluetooth is resetting
  StatusCodeBluetoothStatusResetting = 2,
/// application isn’t authorized to use the Bluetooth low energy role.
  StatusCodeBluetoothStatusUnauthorized = 3,
/// Bluetooth manager’s state unknown
  StatusCodeBluetoothStatusUnknown = 4,
/// Bluetooth not supported
  StatusCodeBluetoothStatusUnsupported = 5,
/// Bluetooth peripheral not supported
  StatusCodePeripheralNotSupported = 6,
/// Bluetooth peripheral already in list
  StatusCodePeripheralAlreadyInList = 7,
/// Bluetooth peripheral not found in list
  StatusCodePeripheralNotFoundInList = 8,
/// Bluetooth peripheral MTU size not supported
  StatusCodePeripheralMTUSizeNotSupported = 9,
/// CCID bluetooth reader already in list
  StatusCodeReaderAlreadyInList = 10,
/// CCID bluetooth reader not found in list
  StatusCodeReaderNotFoundInList = 11,
/// CCID bluetooth reader not supported
  StatusCodeReaderNotSupported = 12,
/// CCID bluetooth reader has an invalid or missing USB descriptor
  StatusCodeReaderInvalidUSBDescriptor = 13,
/// CCID bluetooth reader has an invalid or missing CCID descriptor
  StatusCodeReaderInvalidCCIDDescriptor = 14,
/// CCID bluetooth reader slot not selected
  StatusCodeReaderSlotNotSelected = 15,
/// Invalid parameter passed to function
  StatusCodeInvalidParameter = 16,
/// Invalid NIL parameter passed to function
  StatusCodeInvalidNilParameter = 17,
/// A too large value was passed to function
  StatusCodeInvalidParameterValueTooLarge = 18,
/// CCID reader invalid or not initialised
  StatusCodeInvalidCCIDReader = 19,
/// CCID Bluetooth reader invalid or not initialised
  StatusCodeInvalidCCIDBluetoothReader = 20,
/// Invalid ATR received
  StatusCodeInvalidATR = 21,
/// Bad TS byte in ATR found
  StatusCodeBadTSInATR = 22,
/// Bad TCK in ATR found
  StatusCodeBadTCKInATR = 23,
/// Peripheral write timed out
  StatusCodeWriteTimeout = 24,
/// Peripheral packet write timed out
  StatusCodePacketWriteTimeout = 25,
/// Peripheral read timed out
  StatusCodeReadTimeout = 26,
/// Peripheral read cancelled
  StatusCodeReadCancelled = 27,
/// Peripheral packet read timed out
  StatusCodePacketReadTimeout = 28,
/// Peripheral authentication failed
  StatusCodeAuthenticationFailed = 29,
/// Data frame invalid
  StatusCodeDataFrameInvalid = 30,
/// Invalid length in data frame
  StatusCodeDataFrameInvalidLength = 31,
/// Invalid header in data frame
  StatusCodeDataFrameInvalidHeader = 32,
/// Invalid checksum in frame
  StatusCodeDataFrameInvalidChecksum = 33,
/// ACK data frame received from reader
  StatusCodeDataFrameACKReceived = 34,
/// NACK data frame received from reader
  StatusCodeDataFrameNACKReceived = 35,
/// CCID frame invalid
  StatusCodeCcidFrameInvalid = 36,
/// Invalid length in CCID frame
  StatusCodeCcidFrameInvalidLength = 37,
/// Invalid header in CCID frame
  StatusCodeCcidFrameInvalidHeader = 38,
/// CCID frame type is invalid
  StatusCodeCcidFrameInvalidFrameType = 39,
/// CCID frame out of sequence
  StatusCodeCcidFrameOutOfSequence = 40,
/// Slot (number) not found
  StatusCodeCcidErrorSlotNotFound = 41,
/// No card present in slot
  StatusCodeCcidErrorNoCardPresent = 42,
/// Card in slot not powered on
  StatusCodeCcidErrorCardNotPoweredOn = 43,
/// Received CCID error ‘command not supported’
  StatusCodeCcidErrorCommandNotSupported = 44,
/// Received CCID error ‘command aborted’
  StatusCodeCcidErrorCommandAborted = 45,
/// Received CCID error ‘ICC Mute’
  StatusCodeCcidErrorICCMute = 46,
/// Received CCID error ‘transfer parity error’
  StatusCodeCcidErrorXfrParityError = 47,
/// Received CCID error ‘transfer overrun’
  StatusCodeCcidErrorXfrOverrun = 48,
/// Received CCID error ‘hardware error’
  StatusCodeCcidErrorHardwareError = 49,
/// Received CCID error ‘ICC protocol not supported’
  StatusCodeCcidErrorIccProtocolNotSupported = 50,
/// Received CCID error ‘ICC class not supported’
  StatusCodeCcidErrorIccClassNotSupported = 51,
/// Received CCID error ‘procedure byte conflict’
  StatusCodeCcidErrorProcedureByteConflict = 52,
/// Received CCID error ‘deactivated protocol’
  StatusCodeCcidErrorDeactivatedProtocol = 53,
/// Received CCID error ‘busy wit auto sequence’
  StatusCodeCcidErrorBusyWithAutoSequence = 54,
/// Received CCID error ‘PIN timeout’
  StatusCodeCcidErrorPinTimeout = 55,
/// Received CCID error ‘PIN cancelled’
  StatusCodeCcidErrorPinCancelled = 56,
/// Received CCID error ‘command slot busy’
  StatusCodeCcidErrorCommandSlotBusy = 57,
/// Received other CCID error
  StatusCodeCcidErrorOther = 58,
/// Protocol not supported by card
  StatusCodeCardProtocolNotSupported = 59,
/// Card already connected using another protocol
  StatusCodeCardConnectedOtherProtocol = 60,
/// Card already disconnected or no exclusive access
  StatusCodeCardIllegalState = 61,
/// Logical Ccid Channel has been closed
  StatusCodeCardIllegalStateChannelClosed = 62,
/// Card already has exclusive access for the current thread
  StatusCodeCardExclusiveAccessAlreadySet = 63,
/// Card exclusive access already established by another thread
  StatusCodeCardExclusiveAccessDenied = 64,
/// Could not open logical channel to the card
  StatusCodeCardOpenLogicalChannelFailed = 65,
/// Unsupported logical card channel number
  StatusCodeCardUnsupportedChannelNumber = 66,
/// Extended length forms not supported for protocol T=0
  StatusCodeCardT0ExtendedLengthNotSupported = 67,
/// Could not obtain response from card
  StatusCodeCardCouldNotObtainResponse = 68,
};
static NSString * _Nonnull const StatusCodeDomain = @"ABCSmartCardIO.Status.StatusCode";

@class NSString;
@protocol ReaderDiscoveredCallback;
@class DiscoveredReader;
@class NSData;
@class CardTerminal;
@class CardTerminals;

/// SmartCardIO - AB Circle specific TerminalFactory Class
/// A factory for CardTerminal objects. It allows an application to:
/// <ul>
///   <li>
///     obtain a TerminalFactory by calling one of the static factory methods in this class (getDefault() or getInstance()).
///   </li>
///   <li>
///     use this TerminalFactory object to access the CardTerminals by calling the terminals() method.
///   </li>
/// </ul>
/// This TerminalFactory is using the following standard type name:
/// “PC/SC” -  an implementation that calls into the PC/SC Smart Card stack of the host platform.
/// Note: This TerminalFactory is the default and only TerminalFactory available for use.
SWIFT_CLASS("_TtC14ABCSmartCardIO23ABCircleTerminalFactory")
@interface ABCircleTerminalFactory : Status
/// Private initialiser
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Returns the default TerminalFactory instance (of type ABCircleTerminalFactory).
///
/// returns:
/// Instance of ABCircleTerminalFactory
+ (ABCircleTerminalFactory * _Nonnull)getDefault SWIFT_WARN_UNUSED_RESULT;
/// Returns the default TerminalFactory instance if the type matches.
/// Note: only added for completion, it is recommended to simply use getDefault() to get the default TerminalFactory instance instead,
/// \param type Type of TerminalFactory to return
///
/// \param params Parameters to pass to the TerminalFactory (ignored)
///
/// \param provider Provider of the TerminalFactory to return (ignored)
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// instance of ABCircleTerminalFactory
+ (ABCircleTerminalFactory * _Nullable)getInstanceWithType:(NSString * _Nonnull)type params:(id _Nullable)params provider:(NSString * _Nonnull)provider error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Get the default TerminalFactory type.
///
/// returns:
/// Default TerminalFactory type
- (NSString * _Nonnull)getDefaultType SWIFT_WARN_UNUSED_RESULT;
/// Get the type of this TerminalFactory.
///
/// returns:
/// TerminalFactory type
- (NSString * _Nonnull)getType SWIFT_WARN_UNUSED_RESULT;
/// Flag indicating if the ACK protocol should be enabled or not for connected readers that support it.
/// The ACK protocol uses ACK and NACK packets to try to further stabilise communication and enables
/// the possibility to recover communication errors in most cases.
/// Set to true to enable the setting or false to disable it.
/// Notes:
/// <ul>
///   <li>
///     The setting will only be applied to newly connected readers
///   </li>
///   <li>
///     The ACK protocol is only supported for readers with firmware version 109.00 or above
///   </li>
///   <li>
///     Default is disabled (false)
///   </li>
/// </ul>
@property (nonatomic) BOOL ackProtocolEnabledForReaders;
/// Discover bluetooth devices, stops after {@code scanDuration} milliseconds (10 second = 10000ms).
/// \param durationInSeconds Duration of the scan in seconds
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)startReaderDiscoveryWithDurationInSeconds:(NSInteger)durationInSeconds caller:(id <ReaderDiscoveredCallback> _Nullable)caller error:(NSError * _Nullable * _Nullable)error;
/// Discover bluetooth devices for the duration given.
/// \param durationInSeconds Duration of the scan in seconds
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)startReaderDiscoveryWithDurationInSeconds:(NSInteger)durationInSeconds error:(NSError * _Nullable * _Nullable)error;
/// Stop Reader Discovery
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)stopReaderDiscoveryAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Returns an unmodifiable list of all discovered readers
///
/// returns:
/// An unmodifiable list of all discovered readers
- (NSArray<DiscoveredReader *> * _Nullable)getReaderDiscoveryList SWIFT_WARN_UNUSED_RESULT;
/// Discover bluetooth readers in range for a default duration of 10 seconds using the entered name filter
/// \param name Filter reader by name (case insensitive)
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)discoverBluetoothDevicesWithName:(NSString * _Nonnull)name error:(NSError * _Nullable * _Nullable)error;
/// Attempts to connect to a discovered reader by its uuid string
/// Note:  success simply means the connection attempt succeeded, the connection itself can still fail..
/// \param uuidString UUID string of the discovered reader to connect to
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)connectByUUIDWithUuidString:(NSString * _Nonnull)uuidString error:(NSError * _Nullable * _Nullable)error;
/// Starts a scan for bluetooth peripherals in range for a default time of 10 seconds and no filter on name.
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)scanBluetoothAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Starts a scan for bluetooth peripherals in range for the entered duration time in seconds and no filter on name.
/// \param durationInSeconds Duration of the scan in seconds
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)scanBluetoothWithDurationInSeconds:(NSInteger)durationInSeconds error:(NSError * _Nullable * _Nullable)error;
/// Scans for bluetooth readers in range for for a default time of 10 seconds using the entered name filter
/// \param name Filter reader by name (case insensitive)
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)scanBluetoothWithName:(NSString * _Nonnull)name error:(NSError * _Nullable * _Nullable)error;
/// Scans for bluetooth readers in range for the entered duration using the entered name filter
/// \param durationInSeconds Duration in seconds for the scan
///
/// \param name Filter reader by name (case insensitive)
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)scanBluetoothWithDurationInSeconds:(NSInteger)durationInSeconds name:(NSString * _Nonnull)name error:(NSError * _Nullable * _Nullable)error;
/// Sets a reader filter on RSSI value, used when scanning for readers
/// \param rssiValue Filter reader by rssi strength in decibels e.g. -50 for (~0.5m) -60 for (~1.0m)
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)setBluetoothRssiFilterWithRssiValue:(NSInteger)rssiValue error:(NSError * _Nullable * _Nullable)error;
/// Clears a custom encryption key set earlier for reader authentication and data encryption
- (void)clearCustomEncryptionKey;
/// Sets a custom encryption key for reader authentication and data encryption
/// The custom key should be 16 bytes long in hexadecimal string form (spaces are accepted), aka. “19 AB …”
/// \param customKeyString Custom key string in hexadecimal form
///
///
/// throws:
/// An error status on failure (see enum Status.StatusCode for possible values)
- (BOOL)setCustomEncryptionKeyWithCustomKeyString:(NSString * _Nonnull)customKeyString error:(NSError * _Nullable * _Nullable)error;
/// Sets a custom encryption key for reader authentication and data encryption
/// The custom key should be 16 bytes long
/// \param customKey Custom key  in a Data buffer
///
///
/// throws:
/// Status.StatusCode; .success on success, else an error status (see enum Status.StatusCode for possible values)
- (BOOL)setCustomEncryptionKeyWithCustomKey:(NSData * _Nonnull)customKey error:(NSError * _Nullable * _Nullable)error;
/// Disconnects a reader completely (including the bluetooth peripheral)
/// \param cardTerminal CardTerminal object to disconnect
///
- (void)disconnectWithCardTerminal:(CardTerminal * _Nonnull)cardTerminal;
/// Returns a CardTerminals object encapsulating the terminals supported by this factory.
///
/// returns:
/// CardTerminals object
- (CardTerminals * _Nonnull)terminals SWIFT_WARN_UNUSED_RESULT;
/// Returns a string representation of this TerminalFactory.
///
/// returns:
/// String representation of this TerminalFactory.
- (NSString * _Nonnull)toString SWIFT_WARN_UNUSED_RESULT;
@end


/// Base class for use with other ABCircleTerminalFactory classes
/// Base class for use with other ABCircleTerminalFactory classes.
/// Defines shared functions that all other classes also should export.
SWIFT_CLASS("_TtC14ABCSmartCardIO9BaseClass")
@interface BaseClass : Status
/// Calculates and returns a hashcode representing the current class object
///
/// returns:
/// Hashcode as Integer
- (NSInteger)hashCode SWIFT_WARN_UNUSED_RESULT;
/// Compares the specified object with the current class equality.
/// \param obj Object to compare to
///
///
/// returns:
/// True if found equal, else false
- (BOOL)equalsWithObj:(id _Nullable)obj SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end


/// SmartCardIO - ATR class
/// A Smart Card’s answer-to-reset bytes. A Card’s ATR object can be obtained by calling Card.getATR().
SWIFT_CLASS("_TtC14ABCSmartCardIO3ATR")
@interface ATR : BaseClass
/// Returns a copy of the bytes contained in this ATR.
///
/// returns:
/// Data containing the ATR
- (NSData * _Nonnull)getBytes SWIFT_WARN_UNUSED_RESULT;
/// Returns a copy of the historical bytes in this ATR.
/// If this ATR does not contain historical bytes, an Data buffer of length zero is returned.
///
/// returns:
/// Data containing the ATR historical bytes
- (NSData * _Nonnull)getHistoricalBytes SWIFT_WARN_UNUSED_RESULT;
/// Returns a string representation of this ATR.
///
/// returns:
/// String representation of this ATR
- (NSString * _Nonnull)toString SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@class CardChannel;

/// SmartCardIO - Card class
/// A Smart Card with which a connection has been established. Card objects are obtained by calling CardTerminal.connect().
SWIFT_CLASS("_TtC14ABCSmartCardIO4Card")
@interface Card : BaseClass
/// Requests exclusive access to this card.
/// Once a thread has invoked beginExclusive, only this thread is allowed to communicate with this card until it calls endExclusive. Other threads attempting communication will receive a CardException.
/// Applications have to ensure that exclusive access is correctly released. This can be achieved by executing the beginExclusive() and endExclusive calls.
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (BOOL)beginExclusiveAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Releases the exclusive access previously established using beginExclusive.
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (BOOL)endExclusiveAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Returns the ATR of this card.
///
/// returns:
/// ATR in the form of a ATR object
- (ATR * _Nonnull)getATR SWIFT_WARN_UNUSED_RESULT;
/// Returns the CardChannel for the basic logical channel. The basic logical channel has a channel number of 0.
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// CardChannel in the form of a CardChannel object
- (CardChannel * _Nullable)getBasicChannelAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Returns the protocol in use for this card in String form.
///
/// returns:
/// Connection protocol as String
- (NSString * _Nonnull)getProtocol SWIFT_WARN_UNUSED_RESULT;
/// Opens a new logical channel to the card and returns it.
/// The channel is opened by issuing a MANAGE CHANNEL command that should use the format [00 70 00 00 01].
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// CardChannel in the form of a CardChannel object
- (CardChannel * _Nullable)openLogicalChannelAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Disconnects the connection with this card.
/// After this method returns, calling methods on this object or in CardChannels associated with this object that require interaction with the card will raise an error.
/// \param reset whether to reset the card after disconnecting.
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (BOOL)disconnectWithReset:(BOOL)reset error:(NSError * _Nullable * _Nullable)error;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


@class CommandAPDU;
@class ResponseAPDU;

/// SmartCardIO - CardChannel class
/// A logical channel connection to a Smart Card. It is used to exchange APDUs with a Smart Card.
/// A CardChannel object can be obtained by calling the method Card.getBasicChannel() or Card.openLogicalChannel().
SWIFT_CLASS("_TtC14ABCSmartCardIO11CardChannel")
@interface CardChannel : BaseClass
/// Closes this CardChannel
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (BOOL)closeAndReturnError:(NSError * _Nullable * _Nullable)error;
/// Returns the Card this channel is associated with.
///
/// returns:
/// Associated Card object
- (Card * _Nonnull)getCard SWIFT_WARN_UNUSED_RESULT;
/// Returns the channel number of this CardChannel (0 for default channel).
///
/// returns:
/// Channel number as Int
- (NSInteger)getChannelNumber SWIFT_WARN_UNUSED_RESULT;
/// Transmits the specified command APDU to the Smart Card and returns the response APDU.
/// \param command Command in the form of a CommandAPDU
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// A response in the form of a ResponseAPDU
- (ResponseAPDU * _Nullable)transmitWithCommand:(CommandAPDU * _Nonnull)command error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// SmartCardIO - CardTerminal class
/// A Smart Card terminal, sometimes refered to as a Smart Card Reader. A CardTerminal object can be obtained by calling CardTerminals.list() or CardTerminals.getTerminal().
/// Note that physical card readers with slots for multiple cards are represented by one CardTerminal object per such slot.
SWIFT_CLASS("_TtC14ABCSmartCardIO12CardTerminal")
@interface CardTerminal : BaseClass
/// Establishes a connection to the card using the entered protocol.
/// If a connection has previously established using the specified protocol, this method returns the same Card object as the previous call.
/// \param protocolString the protocol to use (“T=0”, “T=1”), or “*” to connect using any available protocol.
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// Card instance
- (Card * _Nullable)connectWithProtocolString:(NSString * _Nonnull)protocolString error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Returns the unique name of this terminal.
///
/// returns:
/// String holding the name
- (NSString * _Nonnull)getName SWIFT_WARN_UNUSED_RESULT;
/// Returns whether a card is present in this terminal.
///
/// returns:
/// True if a card is present, else false
- (BOOL)isCardPresent SWIFT_WARN_UNUSED_RESULT;
/// Waits until a card is present in this terminal or the timeout expires. If the method returns due to an expired timeout, it returns false. Otherwise it return true.
/// If a card is present in this terminal when this method is called, it returns immediately.
/// \param timeout if positive, block for up to timeout milliseconds; if zero, block indefinitely; must not be negative
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// False if the method returns due to an expired timeout, true otherwise.
- (BOOL)waitForCardPresentWithTimeout:(NSInteger)timeout SWIFT_WARN_UNUSED_RESULT;
/// Returns the firmware version of the cardterminal as ascii string
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// firmware version of the cardterminal as ascii string
- (NSString * _Nullable)getFirmwareVersionAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Returns the serial number of the cardterminal as ascii string
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
///
/// returns:
/// serial number of the cardterminal as ascii string
- (NSString * _Nullable)getSerialNumberAndReturnError:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
/// Enables or disables the ACK protocol used for communication.
/// The ACK protocol uses ACK and NACK packets to try to further stabilise communication and enables
/// the possibility to recover communication errors in most cases.
/// Set to true to enable the setting or false to disable it.
/// Notes:
/// <ul>
///   <li>
///     The ACK protocol is only supported for cardterminals with firmware version 109.00 or above
///   </li>
///   <li>
///     Default is disabled (false)
///   </li>
/// </ul>
/// \param protocolOnOrOff True to enable the ACK protocol, else False to disable
///
///
/// returns:
/// Status.StatusCode; .success if command executed successful, else an error status (see enum Status.StatusCode for possible values).
- (enum StatusCode)setACKProtocolWithProtocolOnOrOff:(BOOL)protocolOnOrOff SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// SmartCardIO - CardTerminals Class
/// The set of terminals supported by a TerminalFactory.
/// This class allows applications to enumerate the available CardTerminals, obtain a specific CardTerminal,
/// or wait for the insertion or removal of cards.
SWIFT_CLASS("_TtC14ABCSmartCardIO13CardTerminals")
@interface CardTerminals : BaseClass
/// Returns the terminal with the specified name or nil if no such terminal exists.
/// \param name Name of the terminal to return
///
///
/// returns:
/// Terminal with the specified name or nil if no such terminal exists.
- (CardTerminal * _Nullable)getTerminalWithName:(NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Returns an unmodifiable list of all available terminals.
///
/// returns:
/// An unmodifiable list of all available terminals.
- (NSArray<CardTerminal *> * _Nonnull)list SWIFT_WARN_UNUSED_RESULT;
/// Waits indefinitely for card insertion or removal in any of the terminals of this object.
- (void)waitForChange;
/// Waits for card insertion or removal in any of the terminals of this object or until the timeout expires.
/// \param timeout timeout in milliseconds
///
///
/// returns:
/// True if a card change was detected, else false if timed out
- (BOOL)waitForChangeWithTimeout:(NSInteger)timeout SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// SmartCardIO - CommandAPDU Class
/// A command APDU following the structure defined in ISO/IEC 7816-4. It consists of a four byte header and a conditional body of variable length.
/// This class does not attempt to verify that the APDU encodes a semantically valid command.
/// Note that when the expected length of the response APDU is specified in the constructors, the actual length (Ne) must be specified, not its encoded form (Le).
/// Similarly, getNe() returns the actual value Ne. In other words, a value of 0 means “no data in the response APDU” rather than “maximum length.”
/// This class supports both the short and extended forms of length encoding for Ne and Nc. However, note that not all terminals and Smart Cards are capable of accepting APDUs that use the extended form.
SWIFT_CLASS("_TtC14ABCSmartCardIO11CommandAPDU")
@interface CommandAPDU : BaseClass
/// Initialiser; constructs a CommandAPDU from a byte array containing the complete APDU contents (header and body).
/// \param apdu byte array containing the complete APDU contents (header and body).
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithApdu:(NSArray<NSNumber *> * _Nonnull)apdu error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from a byte array containing the complete APDU contents (header and body).
/// \param apdu Byte array containing the complete APDU contents (header and body).
/// <ul>
///   <li>
///     apduOffset: Start offset of the APDU contents within the byte array
///   </li>
///   <li>
///     apduLength: Length of the APDU contents
///   </li>
/// </ul>
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithApdu:(NSArray<NSNumber *> * _Nonnull)apdu apduOffset:(uint32_t)apduOffset apduLength:(uint32_t)apduLength error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from a Data buffer containing the complete APDU contents (header and body).
/// \param apduDataBuffer Data buffer containing the complete APDU contents (header and body).
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithApduDataBuffer:(NSData * _Nonnull)apduDataBuffer error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; contructs a CommandAPDU from a String containing the complete APDU contents (header and body) in hexadecimal format.
/// \param apduString String in the form “AF 09 …or AF09…”
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithApduString:(NSString * _Nonnull)apduString error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from the four header bytes.
/// \param cla CLA header byte
///
/// \param ins INS header byte
///
/// \param p1 P1 header byte
///
/// \param p2 P2 header byte
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from the four header bytes and command data.
/// \param cla CLA header byte
///
/// \param ins INS header byte
///
/// \param p1 P1 header byte
///
/// \param p2 P2 header byte
///
/// \param data Byte array holding the command data
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 data:(NSArray<NSNumber *> * _Nonnull)data error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from the four header bytes, command data, and expected response data length.
/// \param cla CLA header byte
///
/// \param ins INS header byte
///
/// \param p1 P1 header byte
///
/// \param p2 P2 header byte
///
/// \param data Byte array holding the command data
///
/// \param ne Expected response length (Ne)
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 data:(NSArray<NSNumber *> * _Nonnull)data ne:(uint32_t)ne error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from the four header bytes and command data.
/// \param cla CLA header byte
///
/// \param ins INS header byte
///
/// \param p1 P1 header byte
///
/// \param p2 P2 header byte
///
/// \param data Byte array holding the command data
///
/// \param dataOffset Start offset of the command data within the byte array
///
/// \param dataLength Length of the command data
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 data:(NSArray<NSNumber *> * _Nonnull)data dataOffset:(uint32_t)dataOffset dataLength:(uint32_t)dataLength error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Initialiser; constructs a CommandAPDU from the four header bytes and command data.
/// \param cla CLA header byte
///
/// \param ins INS header byte
///
/// \param p1 P1 header byte
///
/// \param p2 P2 header byte
///
/// \param data Byte array holding the command data
///
/// \param dataOffset Start offset of the command data within the byte array
///
/// \param dataLength Length of the command data
///
/// \param ne Expected response length (Ne)
///
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 data:(NSArray<NSNumber *> * _Nonnull)data dataOffset:(uint32_t)dataOffset dataLength:(uint32_t)dataLength ne:(uint32_t)ne error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Constructs a CommandAPDU from the four header bytes and the expected response data length.
/// Initialiser; constructs a CommandAPDU from the four header bytes  and the expected response data length.
/// <ul>
///   <li>
///     Parameters:
///   </li>
///   <li>
///     cla: CLA header byte
///   </li>
///   <li>
///     ins: INS header byte
///   </li>
///   <li>
///     p1: P1 header byte
///   </li>
///   <li>
///     p2: P2 header byte
///   </li>
///   <li>
///     ne: Expected response length (Ne)
///   </li>
/// </ul>
///
/// throws:
/// Status.StatusCode on failure (see enum Status.StatusCode for possible values)
- (nullable instancetype)initWithCla:(uint8_t)cla ins:(uint8_t)ins p1:(uint8_t)p1 p2:(uint8_t)p2 ne:(uint32_t)ne error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Returns a copy of the bytes in this APDU.
///
/// returns:
/// Data buffer holding the bytes of this APDU
- (NSData * _Nonnull)getBytes SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the class byte CLA.
///
/// returns:
/// Class byte CLA
- (uint8_t)getCLA SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the instruction byte INS.
///
/// returns:
/// Instruction byte INS
- (uint8_t)getINS SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the parameter byte P1.
///
/// returns:
/// parameter byte P1
- (uint8_t)getP1 SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the parameter byte P2.
///
/// returns:
/// parameter byte P2
- (uint8_t)getP2 SWIFT_WARN_UNUSED_RESULT;
/// Returns the number of data bytes in the command body (Nc) or 0 if this APDU has no body.
///
/// returns:
/// number of data bytes in the command body (Nc)
- (uint32_t)getNc SWIFT_WARN_UNUSED_RESULT;
/// Returns the maximum number of expected data bytes in a response APDU (Ne).
///
/// returns:
/// maximum number of expected data bytes in a response APDU (Ne)
- (uint32_t)getNe SWIFT_WARN_UNUSED_RESULT;
/// Returns a copy of the data bytes in the command body.
///
/// returns:
/// Copy of the data bytes in the command body
- (NSData * _Nonnull)getData SWIFT_WARN_UNUSED_RESULT;
/// Returns a string representation of this command APDU.
///
/// returns:
/// String representation of this command APDU
- (NSString * _Nonnull)toString SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// SmartCardIO - DiscoveredReader class
/// Class representing a discovered bluetooth reader
SWIFT_CLASS("_TtC14ABCSmartCardIO16DiscoveredReader")
@interface DiscoveredReader : NSObject
/// Returns the name of this reader
@property (nonatomic, readonly, copy) NSString * _Nonnull getName;
/// Returns the UUID of this reader.
@property (nonatomic, readonly, copy) NSString * _Nonnull getUUID;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end


/// FrameworkInformation Class
/// This class enables applications to retrieve global information about this framework in the form of some public properties.
SWIFT_CLASS("_TtC14ABCSmartCardIO20FrameworkInformation")
@interface FrameworkInformation : NSObject
/// Private initialiser
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
/// Returns the display name of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull displayName;)
+ (NSString * _Nonnull)displayName SWIFT_WARN_UNUSED_RESULT;
/// Returns the name of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull name;)
+ (NSString * _Nonnull)name SWIFT_WARN_UNUSED_RESULT;
/// Returns the build number of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull buildNumber;)
+ (NSString * _Nonnull)buildNumber SWIFT_WARN_UNUSED_RESULT;
/// Returns the version string of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull shortVersionString;)
+ (NSString * _Nonnull)shortVersionString SWIFT_WARN_UNUSED_RESULT;
/// Returns the identifier of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull identifier;)
+ (NSString * _Nonnull)identifier SWIFT_WARN_UNUSED_RESULT;
/// Returns the copyright string of this framework
SWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, copy) NSString * _Nonnull copyright;)
+ (NSString * _Nonnull)copyright SWIFT_WARN_UNUSED_RESULT;
@end


/// SmartCardIO - Reader Discovered Protocol for classes
/// to implement the onReaderDiscovered callback
SWIFT_PROTOCOL("_TtP14ABCSmartCardIO24ReaderDiscoveredCallback_")
@protocol ReaderDiscoveredCallback <NSObject>
/// Callback method to be invoked when a bluetooth reader is discovered.
/// \param reader DiscoveredReader class; contains the name and uuid of the discovered reader.
///
- (void)onReaderDiscoveredWithReader:(DiscoveredReader * _Nonnull)reader;
@end


/// SmartCardIO - ResponseAPDU Class
/// A response APDU as defined in ISO/IEC 7816-4. It consists of a conditional body and a two byte trailer.
/// This class does not attempt to verify that the APDU encodes a semantically valid response.
SWIFT_CLASS("_TtC14ABCSmartCardIO12ResponseAPDU")
@interface ResponseAPDU : BaseClass
/// Initialiser; constructs a ResponseAPDU from a byte array containing the complete APDU contents (header and body).
/// \param apduArray byte array containing the complete APDU contents (header and body).
///
///
/// throws:
/// StatusCode.invalidParameter if the APDU size is smaller than 2
- (nullable instancetype)initWithApduArray:(NSArray<NSNumber *> * _Nonnull)apduArray error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// constructs a ResponseAPDU from Data containing the complete APDU contents (header and body).
/// \param apdu Data containing the complete APDU contents (header and body).
///
///
/// throws:
/// StatusCode.invalidParameter if the APDU size is smaller than 2
- (nullable instancetype)initWithApdu:(NSData * _Nonnull)apdu error:(NSError * _Nullable * _Nullable)error OBJC_DESIGNATED_INITIALIZER;
/// Returns a copy of the bytes contained in this APDU.
///
/// returns:
/// Data containing the APDU
- (NSData * _Nonnull)getBytes SWIFT_WARN_UNUSED_RESULT;
/// Returns a copy of the data bytes in the response body.
///
/// returns:
/// APDU data bytes
- (NSData * _Nonnull)getData SWIFT_WARN_UNUSED_RESULT;
/// Returns the number of data bytes in the response body (Nr) or 0 if this APDU has no body.
///
/// returns:
/// Number of data bytes in the response body (Nr)
- (uint32_t)getNr SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the status bytes SW1 and SW2 as a single status word SW.
///
/// returns:
/// Status bytes SW1 and SW2 as a single status word SW.
- (uint16_t)getSW SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the status byte SW1 as a value between 0 and 255.
///
/// returns:
/// status byte SW1 as a value between 0 and 255
- (uint8_t)getSW1 SWIFT_WARN_UNUSED_RESULT;
/// Returns the value of the status byte SW2 as a value between 0 and 255.
///
/// returns:
/// status byte SW2 as a value between 0 and 255
- (uint8_t)getSW2 SWIFT_WARN_UNUSED_RESULT;
/// Returns a string representation of the response APDU
///
/// returns:
/// String representation of the response APDU
- (NSString * _Nonnull)toString SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_UNAVAILABLE_MSG("-init is unavailable");
@end



@interface Status (SWIFT_EXTENSION(ABCSmartCardIO))
/// Returns the description of the last statuscode of the current class
@property (nonatomic, readonly, copy) NSString * _Nullable errorDescription;
@end


@interface Status (SWIFT_EXTENSION(ABCSmartCardIO))
/// Returns the last statuscode of the current class (see enum StatusCode for possible values)
@property (nonatomic, readonly) enum StatusCode lastStatusCode;
/// Returns the description of the last statuscode of the current class
@property (nonatomic, readonly, copy) NSString * _Nonnull lastStatusDescription;
/// Returns the description of the entered statuscode
/// \param status Statuscode (see enum StatusCode for possible values)
///
///
/// returns:
/// String holding the description of the entered statuscode
- (NSString * _Nonnull)statusDescriptionWithStatus:(enum StatusCode)status SWIFT_WARN_UNUSED_RESULT;
@end

#endif
#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#if defined(__cplusplus)
#endif
#pragma clang diagnostic pop
#endif

#else
#error unsupported Swift architecture
#endif
