/* Ċ Ġ* ĠReader State . kt Ċ Ġ* ĠNative Ġimplementation Ġof ĠPC / SC ĠSC ARD _ READ ER STATE Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 - 2 0 2 1 ĠMichael ĠFar re ll Ġ< m ico lo us + git @ gmail . com > Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġau . id . m ico lo us . kotlin . pc sc Ċ Ċ import Ġau . id . m ico lo us . kotlin . pc sc . internal .* Ċ import Ġkotlinx . c interop .* Ċ Ċ private Ġfun ĠState . to D word () Ġ= Ġ( ĊĠĠĠ Ġif Ġ( ignore ) ĠSC ARD _ STATE _ IGNORE . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( changed ) ĠSC ARD _ STATE _ CHANGED . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( unknown ) ĠSC ARD _ STATE _ UNKNOWN . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( un available ) ĠSC ARD _ STATE _ UN AVAILABLE . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( empty ) ĠSC ARD _ STATE _ EMPTY . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( present ) ĠSC ARD _ STATE _ PRESENT . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( at r Match ) ĠSC ARD _ STATE _ AT RM ATCH . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( exclusive ) ĠSC ARD _ STATE _ EXCL USIVE . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( in Use ) ĠSC ARD _ STATE _ IN USE . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( mute ) ĠSC ARD _ STATE _ M UTE . convert () Ġelse ĠDWORD _ ZERO Ġor ĊĠĠĠ Ġif Ġ( un powered ) ĠSC ARD _ STATE _ UN POWER ED . convert () Ġelse ĠDWORD _ ZERO Ċ ) Ċ Ċ private Ġfun ĠDWORD . to State (): ĠState Ġ{ ĊĠĠĠ Ġreturn ĠState ( ĊĠĠĠĠĠĠĠ Ġignore Ġ= Ġhas Bits ( SC ARD _ STATE _ IGNORE . convert ()), ĊĠĠĠĠĠĠĠ Ġchanged Ġ= Ġhas Bits ( SC ARD _ STATE _ CHANGED . convert ()), ĊĠĠĠĠĠĠĠ Ġunknown Ġ= Ġhas Bits ( SC ARD _ STATE _ UNKNOWN . convert ()), ĊĠĠĠĠĠĠĠ Ġunavailable Ġ= Ġhas Bits ( SC ARD _ STATE _ UN AVAILABLE . convert ()), ĊĠĠĠĠĠĠĠ Ġempty Ġ= Ġhas Bits ( SC ARD _ STATE _ EMPTY . convert ()), ĊĠĠĠĠĠĠĠ Ġpresent Ġ= Ġhas Bits ( SC ARD _ STATE _ PRESENT . convert ()), ĊĠĠĠĠĠĠĠ Ġat r Match Ġ= Ġhas Bits ( SC ARD _ STATE _ AT RM ATCH . convert ()), ĊĠĠĠĠĠĠĠ Ġexclusive Ġ= Ġhas Bits ( SC ARD _ STATE _ EXCL USIVE . convert ()), ĊĠĠĠĠĠĠĠ Ġin Use Ġ= Ġhas Bits ( SC ARD _ STATE _ IN USE . convert ()), ĊĠĠĠĠĠĠĠ Ġmute Ġ= Ġhas Bits ( SC ARD _ STATE _ M UTE . convert ()), ĊĠĠĠĠĠĠĠ Ġun powered Ġ= Ġhas Bits ( SC ARD _ STATE _ UN POWER ED . convert ()) ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCop ies Ġa Ġ[ Reader State ] Ġinto Ġa Ġnative Ġ[ SC ARD _ READ ER STATE _ A ] Ġstructure . Ċ Ġ*/ Ċ internal Ġfun ĠSC ARD _ READ ER STATE _ A . copyFrom ( mem Scope : ĠMem Scope , Ġstate : ĠReader State ) Ġ{ ĊĠĠĠ Ġsz Reader Ġ= Ġstate . reader . cstr . get Pointer ( mem Scope ) ĊĠĠĠ Ġdw Current State Ġ= Ġstate . currentState . to D word () ĊĠĠĠ Ġdw Event State Ġ= Ġstate . event State . to D word () ĊĊĠĠĠ Ġstate . at r . to U ByteArray (). forEach Indexed Ġ{ Ġi , Ġb Ġ-> Ġrgb A tr . set ( i , Ġb ) Ġ} ĊĠĠĠ Ġcb A tr Ġ= Ġstate . at r . size . convert () Ċ } Ċ Ċ /** Ċ Ġ* ĠUn wrap s Ġa Ġnative Ġ[ SC ARD _ READ ER STATE _ A ] Ġstructure Ġinto Ġa Ġ[ Reader State ]. Ċ Ġ*/ Ċ internal Ġfun ĠSC ARD _ READ ER STATE _ A . unwrap () Ġ= ĠReader State ( ĊĠĠĠ Ġreader Ġ= Ġsz Reader ?. to K String () Ġ?: Ġ"", ĊĠĠĠ Ġcurrent State Ġ= Ġdw Current State . to State (), ĊĠĠĠ Ġevent State Ġ= Ġdw Event State . to State (), ĊĠĠĠ Ġat r Ġ= Ġrgb A tr . read Bytes ( cb A tr . toInt ()) Ċ )