package Ġapp . se pts . id rw . usb Ċ Ċ import Ġkotlin . experimental . xor Ċ Ċ @ Experimental Unsigned Types Ċ class ĠRequest Packet ( ĊĠĠĠ Ġprivate Ġval Ġcommand : ĠCommand , ĊĠĠĠ Ġprivate Ġval Ġpayload : ĠByteArray , ĊĠĠĠ Ġprivate Ġval Ġstation Id : ĠByte Ġ= Ġ 0 x 0 0 Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmake Get SN R () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Packet ( Command . MF _ GET _ SN R , Ġbyte ArrayOf ( 0 x 0 0 , Ġ 0 x 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake Control Bu z zer ( cycle : ĠByte Ġ= Ġ 1 , Ġcount : ĠByte Ġ= Ġ 1 ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Packet ( Command . CONTROL _ BU ZZ ER , Ġbyte ArrayOf ( cycle , Ġcount )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake Lock ( type : ĠCard Type , Ġlock : ĠBoolean ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Control Bu z zer ( type . get Lock Code ( lock )) ĊĊĠĠĠĠĠĠĠ Ġfun Ġmake Write ( type : ĠCard Type , Ġcard : ĠID Card ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest Packet ( Command . MF _ WRITE , Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= Ġbyte ArrayOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġ 0 x 0 0 Ġ// ĠMF _ WRITE Ġmode Ġcontrol ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġ 0 x 0 1 Ġ// ĠLength ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġ 0 x 0 1 Ġ// ĠStart Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġtype . code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġcard . to Packet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ let Ġpacket ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Packet (): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpacket Ġ= Ġbyte ArrayOf () ĊĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġstation Id ĊĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġ( payload . size Ġ+ Ġ 1 ). to Byte () Ġ// Ġlength ĊĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġcommand . code ĊĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġpayload ĊĠĠĠĠĠĠĠ Ġpacket Ġ+= Ġpacket . reduce ( Byte :: xor ) Ġ// Ġchecksum Ġ( crc 8 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPacket . wrap ( packet , Ġcommand ) ĊĠĠĠ Ġ} Ċ } Ċ