1*7eba2f3bSAndroid Build Coastguard Workerlittle_endian_packets 2*7eba2f3bSAndroid Build Coastguard Worker 3*7eba2f3bSAndroid Build Coastguard Worker/// The specification of RF packets is based on the following specifications: 4*7eba2f3bSAndroid Build Coastguard Worker/// - [DIGITAL] Digital Protocol Technical Specification Version 2.3 5*7eba2f3bSAndroid Build Coastguard Worker/// - [ACTIVITY] Activity Technical Specification Version 2.2 6*7eba2f3bSAndroid Build Coastguard Worker/// - [NCI] NFC Controller Interface Technical Specification Version 2.2 7*7eba2f3bSAndroid Build Coastguard Worker/// 8*7eba2f3bSAndroid Build Coastguard Worker/// [ACTIVITY] describes the state machines for compliant NFC devices in Poll 9*7eba2f3bSAndroid Build Coastguard Worker/// or Listen mode. [DIGITAL] provides the format for packet exchanged 10*7eba2f3bSAndroid Build Coastguard Worker/// during the device Discovery and Activation as defined in [ACTIVITY]. 11*7eba2f3bSAndroid Build Coastguard Worker 12*7eba2f3bSAndroid Build Coastguard Worker/// Technology used for this message. 13*7eba2f3bSAndroid Build Coastguard Worker/// The values are taken from [NCI] Table 130: RF Technologies. 14*7eba2f3bSAndroid Build Coastguard Workerenum Technology : 8 { 15*7eba2f3bSAndroid Build Coastguard Worker NFC_A = 0, 16*7eba2f3bSAndroid Build Coastguard Worker NFC_B = 1, 17*7eba2f3bSAndroid Build Coastguard Worker NFC_F = 2, 18*7eba2f3bSAndroid Build Coastguard Worker NFC_V = 3, 19*7eba2f3bSAndroid Build Coastguard Worker RAW = 0x7, 20*7eba2f3bSAndroid Build Coastguard Worker} 21*7eba2f3bSAndroid Build Coastguard Worker 22*7eba2f3bSAndroid Build Coastguard Worker/// Protocol used for data exchange. 23*7eba2f3bSAndroid Build Coastguard Worker/// The values are taken from [NCI] Table 133: RF Protocol. 24*7eba2f3bSAndroid Build Coastguard Worker/// The following table presents the compatible protocols 25*7eba2f3bSAndroid Build Coastguard Worker/// for the technology and platform being used. 26*7eba2f3bSAndroid Build Coastguard Worker/// 27*7eba2f3bSAndroid Build Coastguard Worker/// | Technology | Platform | Protocol | 28*7eba2f3bSAndroid Build Coastguard Worker/// +------------+----------+----------+ 29*7eba2f3bSAndroid Build Coastguard Worker/// | NFC-A | T2T | T2T | 30*7eba2f3bSAndroid Build Coastguard Worker/// | | T4AT | ISO-DEP | 31*7eba2f3bSAndroid Build Coastguard Worker/// | | - | NFC-DEP | 32*7eba2f3bSAndroid Build Coastguard Worker/// | NFC-B | T4BT | ISO-DEP | 33*7eba2f3bSAndroid Build Coastguard Worker/// | NFC-F | T3T | T3T | 34*7eba2f3bSAndroid Build Coastguard Worker/// | NFC-V | T5T | T5T | 35*7eba2f3bSAndroid Build Coastguard Workerenum Protocol : 8 { 36*7eba2f3bSAndroid Build Coastguard Worker UNDETERMINED = 0, 37*7eba2f3bSAndroid Build Coastguard Worker T1T = 1, 38*7eba2f3bSAndroid Build Coastguard Worker T2T = 2, 39*7eba2f3bSAndroid Build Coastguard Worker T3T = 3, 40*7eba2f3bSAndroid Build Coastguard Worker ISO_DEP = 4, 41*7eba2f3bSAndroid Build Coastguard Worker NFC_DEP = 5, 42*7eba2f3bSAndroid Build Coastguard Worker T5T = 6, 43*7eba2f3bSAndroid Build Coastguard Worker NDEF = 7, 44*7eba2f3bSAndroid Build Coastguard Worker} 45*7eba2f3bSAndroid Build Coastguard Worker 46*7eba2f3bSAndroid Build Coastguard Worker/// Type of packets being sent. 47*7eba2f3bSAndroid Build Coastguard Worker/// These packet types abstract the frames specified in [DIGITAL] 48*7eba2f3bSAndroid Build Coastguard Worker/// for each technology and protocol. Packets are grouped by activity 49*7eba2f3bSAndroid Build Coastguard Worker/// as specified by [ACTIVITY]: 50*7eba2f3bSAndroid Build Coastguard Worker/// - DATA is used for the Data Exchange activity 51*7eba2f3bSAndroid Build Coastguard Worker/// - POLL_COMMAND, POLL_RESPONSE are used for the Technology Detection and 52*7eba2f3bSAndroid Build Coastguard Worker/// Collision Resolution activities 53*7eba2f3bSAndroid Build Coastguard Worker/// - SELECT_COMMAND, SELECT_RESPONSE are used for the Device Activation activity 54*7eba2f3bSAndroid Build Coastguard Worker/// - DEACTIVATE_NOTIFICATION is used for the Device Deactivation activity 55*7eba2f3bSAndroid Build Coastguard Workerenum RfPacketType : 8 { 56*7eba2f3bSAndroid Build Coastguard Worker DATA = 0, 57*7eba2f3bSAndroid Build Coastguard Worker POLL_COMMAND = 1, 58*7eba2f3bSAndroid Build Coastguard Worker POLL_RESPONSE = 2, 59*7eba2f3bSAndroid Build Coastguard Worker SELECT_COMMAND = 3, 60*7eba2f3bSAndroid Build Coastguard Worker SELECT_RESPONSE = 4, 61*7eba2f3bSAndroid Build Coastguard Worker DEACTIVATE_NOTIFICATION = 5, 62*7eba2f3bSAndroid Build Coastguard Worker FIELD_INFO = 6, 63*7eba2f3bSAndroid Build Coastguard Worker} 64*7eba2f3bSAndroid Build Coastguard Worker 65*7eba2f3bSAndroid Build Coastguard Worker/// The definition of packets does not aim to reproduce the exact protocol 66*7eba2f3bSAndroid Build Coastguard Worker/// frames from [DIGITAL] or the exact state machines from [ACTIVITY], 67*7eba2f3bSAndroid Build Coastguard Worker/// but summarizes the information for singular activities that will be visible 68*7eba2f3bSAndroid Build Coastguard Worker/// to the Device Host. 69*7eba2f3bSAndroid Build Coastguard Workerpacket RfPacket { 70*7eba2f3bSAndroid Build Coastguard Worker sender: 16, 71*7eba2f3bSAndroid Build Coastguard Worker receiver: 16, 72*7eba2f3bSAndroid Build Coastguard Worker technology: Technology, 73*7eba2f3bSAndroid Build Coastguard Worker protocol : Protocol, 74*7eba2f3bSAndroid Build Coastguard Worker packet_type: RfPacketType, 75*7eba2f3bSAndroid Build Coastguard Worker // Power level from 0-12 with higher numbers representing stronger field strength. 76*7eba2f3bSAndroid Build Coastguard Worker // OxFF represents an unknown or invalid value. 77*7eba2f3bSAndroid Build Coastguard Worker power_level: 8, 78*7eba2f3bSAndroid Build Coastguard Worker _payload_, 79*7eba2f3bSAndroid Build Coastguard Worker} 80*7eba2f3bSAndroid Build Coastguard Worker 81*7eba2f3bSAndroid Build Coastguard Worker/// Command to probe for Listeners: 82*7eba2f3bSAndroid Build Coastguard Worker/// - ALL_REQ Command or SENS_REQ Command for NFC-A 83*7eba2f3bSAndroid Build Coastguard Worker/// - ALLB_REQ Command or SENSB_REQ Command for NFC-B 84*7eba2f3bSAndroid Build Coastguard Worker/// - SENSF_REQ Command for NFC-F 85*7eba2f3bSAndroid Build Coastguard Worker/// - INVENTORY_REQ Command for NFC-V 86*7eba2f3bSAndroid Build Coastguard Worker/// - ATR_REQ Command for NFC-ACM 87*7eba2f3bSAndroid Build Coastguard Workerpacket PollCommand : RfPacket (packet_type = POLL_COMMAND) { 88*7eba2f3bSAndroid Build Coastguard Worker _payload_, 89*7eba2f3bSAndroid Build Coastguard Worker} 90*7eba2f3bSAndroid Build Coastguard Worker 91*7eba2f3bSAndroid Build Coastguard Worker/// Whether the RF field of the tag is currently on or off 92*7eba2f3bSAndroid Build Coastguard Worker/// as defined by RF_FIELD_INFO_NTF 93*7eba2f3bSAndroid Build Coastguard Workerenum FieldStatus : 8 { 94*7eba2f3bSAndroid Build Coastguard Worker FieldOff = 0, 95*7eba2f3bSAndroid Build Coastguard Worker FieldOn = 1, 96*7eba2f3bSAndroid Build Coastguard Worker} 97*7eba2f3bSAndroid Build Coastguard Worker 98*7eba2f3bSAndroid Build Coastguard Workerpacket FieldInfo : RfPacket (packet_type = FIELD_INFO) { 99*7eba2f3bSAndroid Build Coastguard Worker field_status: FieldStatus, 100*7eba2f3bSAndroid Build Coastguard Worker} 101*7eba2f3bSAndroid Build Coastguard Worker 102*7eba2f3bSAndroid Build Coastguard Worker/// Poll response for an NFC-A Listener. 103*7eba2f3bSAndroid Build Coastguard Worker/// Combines information from the SENS_RES Response and the SEL_RES Response. 104*7eba2f3bSAndroid Build Coastguard Worker/// Cf [DIGITAL] 6.6.3 SENS_RES Response, [DIGITAL] 6.8.2 SEL_RES Response. 105*7eba2f3bSAndroid Build Coastguard Workerpacket NfcAPollResponse : RfPacket (technology = NFC_A, packet_type = POLL_RESPONSE) { 106*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Requirements 25: NFCID1 107*7eba2f3bSAndroid Build Coastguard Worker // - **6.7.2.2** _The NFCID1 can be dynamically generated by the NFC Forum 108*7eba2f3bSAndroid Build Coastguard Worker // Device. If it is dynamically generated by the NFC Forum 109*7eba2f3bSAndroid Build Coastguard Worker // Device, the length of the NFCID1 SHALL be limited to 4 bytes._ 110*7eba2f3bSAndroid Build Coastguard Worker // - **6.7.2.3** _A dynamically generated NFCID1 SHALL be generated whenever 111*7eba2f3bSAndroid Build Coastguard Worker // the NFC Forum Device enters the IDLE State of the Listen Mode state 112*7eba2f3bSAndroid Build Coastguard Worker // machine (specified in [ACTIVITY]) from any of the following States: 113*7eba2f3bSAndroid Build Coastguard Worker // NO_REMOTE_FIELD, ATR_READY_A, ATR_READY_F, TARGET_A, TARGET_F._ 114*7eba2f3bSAndroid Build Coastguard Worker // - **6.7.2.4** _The nfcid1[0] for a single-size NFCID1 SHALL be coded as 115*7eba2f3bSAndroid Build Coastguard Worker // specified in Table 17._ 116*7eba2f3bSAndroid Build Coastguard Worker // - **6.7.2.5** _The Listener SHALL set nfcid1[0] of a single-size NFCID1 117*7eba2f3bSAndroid Build Coastguard Worker // and nfcid1[3] of a double-size NFCID1 to a value not equal to 88h._ 118*7eba2f3bSAndroid Build Coastguard Worker _size_ (nfcid1) : 8, 119*7eba2f3bSAndroid Build Coastguard Worker nfcid1 : 8[], 120*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 20: SEL_RES Response Format 121*7eba2f3bSAndroid Build Coastguard Worker // - `00b`: Configured for Type 2 Tag Platform 122*7eba2f3bSAndroid Build Coastguard Worker // - `01b`: Configured for Type 4A Tag Platform 123*7eba2f3bSAndroid Build Coastguard Worker // - `10b`: Configured for the NFC-DEP Protocol 124*7eba2f3bSAndroid Build Coastguard Worker // - `11b`: Configured for the NFC-DEP Protocol and Type 4A Tag Platform 125*7eba2f3bSAndroid Build Coastguard Worker int_protocol : 2, 126*7eba2f3bSAndroid Build Coastguard Worker _reserved_ : 6, 127*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 10: Byte 1 of SENS_RES (Anticollision Information) 128*7eba2f3bSAndroid Build Coastguard Worker bit_frame_sdd: 8, 129*7eba2f3bSAndroid Build Coastguard Worker} 130*7eba2f3bSAndroid Build Coastguard Worker 131*7eba2f3bSAndroid Build Coastguard Worker/// Select command for an NFC-A Listener using ISO-DEP protocol (Type-4A Tag platform). 132*7eba2f3bSAndroid Build Coastguard Worker/// Contains information from the RATS Command. 133*7eba2f3bSAndroid Build Coastguard Worker/// Cf [DIGITAL] 14.6.1 RATS Command. 134*7eba2f3bSAndroid Build Coastguard Workerpacket T4ATSelectCommand : RfPacket (technology = NFC_A, protocol = ISO_DEP, packet_type = SELECT_COMMAND) { 135*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 55: RATS Parameter Byte (PARAM) Format 136*7eba2f3bSAndroid Build Coastguard Worker param : 8, 137*7eba2f3bSAndroid Build Coastguard Worker} 138*7eba2f3bSAndroid Build Coastguard Worker 139*7eba2f3bSAndroid Build Coastguard Worker/// Select response for an NFC-A Listener using ISO-DEP protocol (Type-4A Tag platform). 140*7eba2f3bSAndroid Build Coastguard Worker/// Contains information from the RATS Response. 141*7eba2f3bSAndroid Build Coastguard Worker/// Cf [DIGITAL] 14.6.2 RATS Response (Answer To Select). 142*7eba2f3bSAndroid Build Coastguard Workerpacket T4ATSelectResponse : RfPacket (technology = NFC_A, protocol = ISO_DEP, packet_type = SELECT_RESPONSE) { 143*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 58: RATS Response Format 144*7eba2f3bSAndroid Build Coastguard Worker // `rats_response` contains all the bytes from the RATS Response, starting 145*7eba2f3bSAndroid Build Coastguard Worker // from and including Byte 2. 146*7eba2f3bSAndroid Build Coastguard Worker _size_(rats_response) : 8, 147*7eba2f3bSAndroid Build Coastguard Worker rats_response : 8[], 148*7eba2f3bSAndroid Build Coastguard Worker} 149*7eba2f3bSAndroid Build Coastguard Worker 150*7eba2f3bSAndroid Build Coastguard Worker/// Select command for an NFC-A Listener using NFC-DEP protocol. 151*7eba2f3bSAndroid Build Coastguard Worker/// Contains information from the PSL_REQ Command. 152*7eba2f3bSAndroid Build Coastguard Worker/// Cf [DIGITAL] 17.7.1 PSL_REQ Command. 153*7eba2f3bSAndroid Build Coastguard Workerpacket NfcDepSelectCommand : RfPacket (protocol = NFC_DEP, packet_type = SELECT_COMMAND) { 154*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 95: FSL Format 155*7eba2f3bSAndroid Build Coastguard Worker lr : 2, 156*7eba2f3bSAndroid Build Coastguard Worker _reserved_ : 6, 157*7eba2f3bSAndroid Build Coastguard Worker} 158*7eba2f3bSAndroid Build Coastguard Worker 159*7eba2f3bSAndroid Build Coastguard Worker/// Select response for an NFC-A Listener using NFC-DEP protocol. 160*7eba2f3bSAndroid Build Coastguard Worker/// Contains information from the ATR_RES Response and PSL_RES Response. 161*7eba2f3bSAndroid Build Coastguard Worker/// Cf [DIGITAL] 17.6.3 ATR_RES Response, [DIGITAL] 17.7.2 PSL_RES Response. 162*7eba2f3bSAndroid Build Coastguard Workerpacket NfcDepSelectResponse : RfPacket (protocol = NFC_DEP, packet_type = SELECT_RESPONSE) { 163*7eba2f3bSAndroid Build Coastguard Worker // Cf [DIGITAL] Table 87: ATR_RES Response Format 164*7eba2f3bSAndroid Build Coastguard Worker _size_(atr_response) : 8, 165*7eba2f3bSAndroid Build Coastguard Worker atr_response : 8[], 166*7eba2f3bSAndroid Build Coastguard Worker} 167*7eba2f3bSAndroid Build Coastguard Worker 168*7eba2f3bSAndroid Build Coastguard Worker/// Command to select and activate a polled Listener. 169*7eba2f3bSAndroid Build Coastguard Worker/// The Listener is uniquely identified by the `sender` identifier 170*7eba2f3bSAndroid Build Coastguard Worker/// of the PollResponse packet. 171*7eba2f3bSAndroid Build Coastguard Worker/// The protocol field selects the activated protocol. Valid protocols are 172*7eba2f3bSAndroid Build Coastguard Worker/// determined by the technology and supported protocols of the Listener. 173*7eba2f3bSAndroid Build Coastguard Worker/// 174*7eba2f3bSAndroid Build Coastguard Worker/// TODO: this command combines device selection and protocol activation. 175*7eba2f3bSAndroid Build Coastguard Worker/// When using the RF Frame interface the protocol activation is handled 176*7eba2f3bSAndroid Build Coastguard Worker/// by the DH. This interface will need to be changed to support DH protocol 177*7eba2f3bSAndroid Build Coastguard Worker/// activation. 178*7eba2f3bSAndroid Build Coastguard Workerpacket SelectCommand : RfPacket (packet_type = SELECT_COMMAND) { 179*7eba2f3bSAndroid Build Coastguard Worker} 180*7eba2f3bSAndroid Build Coastguard Worker 181*7eba2f3bSAndroid Build Coastguard Worker/// Deactivation types. 182*7eba2f3bSAndroid Build Coastguard Worker/// The values are taken from [NCI] Table 80: Deactivation Types. 183*7eba2f3bSAndroid Build Coastguard Workerenum DeactivateType : 8 { 184*7eba2f3bSAndroid Build Coastguard Worker IDLE_MODE = 0x00, 185*7eba2f3bSAndroid Build Coastguard Worker SLEEP_MODE = 0x01, 186*7eba2f3bSAndroid Build Coastguard Worker SLEEP_AF_MODE = 0x02, 187*7eba2f3bSAndroid Build Coastguard Worker DISCOVERY = 0x03, 188*7eba2f3bSAndroid Build Coastguard Worker} 189*7eba2f3bSAndroid Build Coastguard Worker 190*7eba2f3bSAndroid Build Coastguard Worker/// Deactivation reason. 191*7eba2f3bSAndroid Build Coastguard Worker/// The values are taken from [NCI] Table 81: Deactivation Reasons. 192*7eba2f3bSAndroid Build Coastguard Workerenum DeactivateReason : 8 { 193*7eba2f3bSAndroid Build Coastguard Worker DH_REQUEST = 0, 194*7eba2f3bSAndroid Build Coastguard Worker ENDPOINT_REQUEST = 1, 195*7eba2f3bSAndroid Build Coastguard Worker RF_LINK_LOSS = 2, 196*7eba2f3bSAndroid Build Coastguard Worker NFC_B_BAD_AFI = 3, 197*7eba2f3bSAndroid Build Coastguard Worker DH_REQUEST_FAILED = 4, 198*7eba2f3bSAndroid Build Coastguard Worker} 199*7eba2f3bSAndroid Build Coastguard Worker 200*7eba2f3bSAndroid Build Coastguard Worker/// Command to deactivate a selected Listener: 201*7eba2f3bSAndroid Build Coastguard Worker/// - RLS_REQ Command or DSL_REQ Command for NFC-DEP 202*7eba2f3bSAndroid Build Coastguard Worker/// - DESELECT Command for ISO-DEP 203*7eba2f3bSAndroid Build Coastguard Worker/// - SLP_REQ Command for T2T 204*7eba2f3bSAndroid Build Coastguard Worker/// This command may also be sent spuriously by the emulator to notify 205*7eba2f3bSAndroid Build Coastguard Worker/// of a loss of link. 206*7eba2f3bSAndroid Build Coastguard Workerpacket DeactivateNotification : RfPacket (packet_type = DEACTIVATE_NOTIFICATION) { 207*7eba2f3bSAndroid Build Coastguard Worker type_ : DeactivateType, 208*7eba2f3bSAndroid Build Coastguard Worker reason : DeactivateReason, 209*7eba2f3bSAndroid Build Coastguard Worker} 210*7eba2f3bSAndroid Build Coastguard Worker 211*7eba2f3bSAndroid Build Coastguard Worker/// Transmit data packets of the selected protocol. 212*7eba2f3bSAndroid Build Coastguard Worker/// Valid protocols are determined by the technology and supported 213*7eba2f3bSAndroid Build Coastguard Worker/// protocols of the Listener. 214*7eba2f3bSAndroid Build Coastguard Workerpacket Data : RfPacket (packet_type = DATA) { 215*7eba2f3bSAndroid Build Coastguard Worker data : 8[], 216*7eba2f3bSAndroid Build Coastguard Worker} 217