package Ġcom . radix d lt . android . apps . pos . n fc read . view model Ċ Ċ import Ġandroid . n fc . N fc Adapter Ċ import Ġandroid . n fc . Tag Lost Exception Ċ import Ġandroid . n fc . tech . Iso Dep Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġorg . bouncycastle . util . en coders . Hex Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . io . IOException Ċ Ċ abstract Ġclass ĠN fc Read ViewModel Ġ: ĠViewModel (), ĠN fc Adapter . Reader Callback Ġ{ ĊĊĠĠĠ Ġ@ Throws ( IOException :: class , ĠTag Lost Exception :: class ) ĊĠĠĠ Ġfun Ġinitial Connection Command ( iso Dep : ĠI so Dep ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠConnect Ġto Ġthe Ġremote ĠN FC Ġdevice ĊĠĠĠĠĠĠĠ Ġiso Dep . connect () ĊĠĠĠĠĠĠĠ Ġ// ĠBuild ĠSELECT ĠA ID Ġcommand Ġfor Ġour Ġlo y alty Ġcard Ġservice . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġcommand Ġtells Ġthe Ġremote Ġdevice Ġwhich Ġservice Ġwe Ġwish Ġto Ġcommunicate Ġwith . ĊĠĠĠĠĠĠĠ ĠTim ber . i (" Request ing Ġremote ĠA ID : Ġ% s ", ĠRAD IX _ CARD _ A ID ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Extended Ġlength Ġsupported : Ġ% s ", Ġiso Dep . is Extended Length Ap du Supported ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Extended Ġmax Ġlength : Ġ% s ", Ġiso Dep . max Trans ceive Length ) ĊĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= Ġbuild Select Ap du ( RAD IX _ CARD _ A ID ) ĊĠĠĠĠĠĠĠ Ġ// ĠSend Ġcommand Ġto Ġremote Ġdevice ĊĠĠĠĠĠĠĠ ĠTim ber . i (" Sending : Ġ% s ", ĠHex . to HexString ( command )) ĊĠĠĠĠĠĠĠ Ġiso Dep . trans ceive ( command ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuild ĠAP DU Ġfor ĠSELECT ĠA ID Ġcommand . ĠThis Ġcommand Ġindicates Ġwhich Ġservice Ġa Ġreader Ġis ĊĠĠĠĠ Ġ* Ġinterested Ġin Ġcommunic ating Ġwith . ĠSee ĠISO Ġ 7 8 1 6 - 4 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġaid ĠApplication ĠID Ġ( A ID ) Ġto Ġselect ĊĠĠĠĠ Ġ* Ġ@ return ĠAP DU Ġfor ĠSELECT ĠA ID Ġcommand ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Select Ap du ( aid : ĠString ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠFormat : Ġ[ CLASS Ġ| ĠIN STR UCTION Ġ| ĠPARAMETER Ġ 1 Ġ| ĠPARAMETER Ġ 2 Ġ| ĠLEN GTH Ġ| ĠDATA ] ĊĠĠĠĠĠĠĠ Ġreturn ĠHex . decode ( SELECT _ AP DU _ HEADER Ġ+ ĠString . format ("% 0 2 X ", Ġaid . length Ġ/ Ġ 2 ) Ġ+ Ġaid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠA ID Ġfor Ġour Ġlo y alty Ġcard Ġservice . ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRAD IX _ CARD _ A ID Ġ= Ġ" DEAD B EE F 7 9 0 1 " ĊĠĠĠĠĠĠĠ Ġ// ĠISO - DEP Ġcommand ĠHEADER Ġfor Ġselecting Ġan ĠA ID . ĊĠĠĠĠĠĠĠ Ġ// ĠFormat : Ġ[ Class Ġ| ĠInstruction Ġ| ĠParameter Ġ 1 Ġ| ĠParameter Ġ 2 ] ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSELECT _ AP DU _ HEADER Ġ= Ġ" 0 0 A 4 0 4 0 0 " ĊĠĠĠĠĠĠĠ Ġ// Ġ" OK " Ġstatus Ġword Ġsent Ġin Ġresponse Ġto ĠSELECT ĠA ID Ġcommand Ġ( 0 x 9 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠSELECT _ OK _ SW Ġ= Ġbyte ArrayOf ( 0 x 9 0 . to Byte (), Ġ 0 x 0 0 . to Byte ()) ĊĠĠĠ Ġ} Ċ } Ċ