xref: /aosp_15_r20/system/nfc/tools/casimir/src/rf_packets.pdl (revision 7eba2f3b06c51ae21384f6a4f14577b668a869b3)
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