blob: e8ecad25888995d5b6de273fad6f62396f932eb9 [file] [log] [blame]
little_endian_packets
enum PacketBoundaryFlag : 1 {
COMPLETE_OR_FINAL = 0,
INCOMPLETE = 1,
}
enum NciMsgType : 3 {
DATA = 0,
COMMAND = 1,
RESPONSE = 2,
NOTIFICATION = 3,
}
enum Opcode : 8 {
CORE_RESET = 0x0,
CORE_INIT = 0x1,
CORE_SET_CONFIG = 0x2,
CORE_GET_CONFIG = 0x3,
CORE_CONN_CREATE = 0x4,
CORE_CONN_CLOSE = 0x5,
CORE_CONN_CREDITS = 0x6,
CORE_GENERIC_ERROR = 0x7,
CORE_INTERFACE_ERROR = 0x8,
CORE_SET_POWER_SUBSTATE = 0x9,
RF_DISCOVER_MAP = 0x40,
RF_SET_LISTEN_MODE_ROUTING = 0x41,
RF_GET_LISTEN_MODE_ROUTING = 0x42,
RF_DISCOVER = 0x43,
RF_DISCOVER_SELECT = 0x44,
RF_INTF_ACTIVATED = 0x45,
RF_DIACTIVATE = 0x46,
RF_FIELD_INFO = 0x47,
RF_T3T_POLLING = 0x48,
RF_NFCEE_ACTION = 0x49,
RF_NFCEE_DISCOVERY_REQ = 0x4A,
RF_PARAMETER_UPDATE = 0x4B,
RF_INTF_EXT_START = 0x4C,
RF_INTF_EXT_STOP = 0x4D,
RF_EXT_AGG_ABORT = 0x4E,
RF_NDEF_ABORT = 0x4F,
RF_ISO_DEP_NAK_PRESENCE = 0x50,
RF_SET_FORCED_NFCEE_ROUTING_CMD = 0x51,
}
enum Status : 8 {
OK = 0x00,
REJECTED = 0x01,
FAILED = 0x03,
NOT_INITIALIZED = 0x04,
SYNTAX_ERROR = 0x05,
SEMANTIC_ERROR = 0x06,
INVALID_PARAM = 0x09,
MESSAGE_SIZE_EXCEEDED = 0x0A,
OK_1_BIT = 0x11,
OK_2_BIT = 0x12,
OK_3_BIT = 0x13,
OK_4_BIT = 0x14,
OK_5_BIT = 0x15,
OK_6_BIT = 0x16,
OK_7_BIT = 0x17,
DISCOVERY_ALREADY_STARTED = 0xA0,
DISCOVERY_TARGET_ACTIVATION_FAILED = 0xA1,
DISCOVERY_TEAR_DOWN = 0xA2,
RF_FRAME_CORRUPTED = 0x02,
RF_TRANSMISSION_EXCEPTION = 0xB0,
RF_PROTOCOL_EXCEPTION = 0xB1,
RF_TIMEOUT_EXCEPTION = 0xB2,
RF_UNEXPECTED_DATA = 0xB3,
NFCEE_INTERFACE_ACTIVATION_FAILED = 0xC0,
NFCEE_TRANSMISSION_ERROR = 0xC1,
NFCEE_PROTOCOL_ERROR = 0xC2,
NFCEE_TIMEOUT_ERROR = 0xC3,
}
packet Nci {
gid : 4,
pbf : PacketBoundaryFlag,
mt : NciMsgType,
_payload_,
}
packet Command : Nci (mt = COMMAND) {
op : Opcode,
_size_(_payload_) : 8,
_payload_,
}
packet Response : Nci (mt = RESPONSE) {
cmd_op : Opcode,
_size_(_payload_) : 8,
_payload_,
}
packet Notification : Nci (mt = NOTIFICATION) {
cmd_op : Opcode,
_size_(_payload_) : 8,
_payload_,
}
packet Data {
conn_id : 4,
pbf : PacketBoundaryFlag,
_fixed_ = 0x0 : 3,
cr : 8,
_size_(_payload_) : 8,
_payload_,
}
enum ResetType : 8 {
KEEP_CONFIG = 0,
RESET_CONFIG = 1,
}
packet ResetCommand : Command (op = CORE_RESET) {
reset_type: ResetType,
}
test ResetCommand {
"\x20\x00\x01\x01",
}
packet ResetResponse : Response (cmd_op = CORE_RESET) {
status: Status,
}
test ResetResponse {
"\x40\x00\x01\x00",
}
enum ResetTrigger : 8 {
UNRECOVERABLE_ERROR = 0,
POWER_ON = 1,
RESET_COMMAND = 2,
}
enum NciVersion : 8 {
VERSION_1_0 = 0x10,
VERSION_1_1 = 0x11,
VERSION_2_0 = 0x20,
}
enum ConfigStatus : 8 {
CONFIG_KEPT = 0x00,
CONFIG_RESET = 0x01,
}
packet ResetNotification : Notification (cmd_op = CORE_RESET) {
trigger : ResetTrigger,
config_status : ConfigStatus,
nci_version : NciVersion,
manufacturer_id: 8,
_size_(mfsi) : 8,
mfsi : 8[],
}
test ResetNotification {
"\x60\x00\x1f\x02\x01\x20\x02\x1a\x05\x03\x03\x06\x88\x97\x01\x06\x00\x00\x44\x64\xd6\x00\x00\xec\x10\x00\x00\x00\x01\x00\x00\xee\xe7\x02",
}
enum FeatureEnable : 16 {
RFU = 0,
}
enum DiscConfMode : 2 {
DH_ONLY = 0x0,
DH_AND_EE = 0x1,
}
enum FeatureState : 1 {
DISABLED = 0,
AVAILABLE = 1,
}
struct PropCaps {
b7 : 1,
b6 : 1,
b5 : 1,
b4 : 1,
b3 : 1,
b2 : 1,
b1 : 1,
b0 : 1,
}
struct NfccFeatures {
disc_freq_conf : FeatureState,
disc_conf_mode : DiscConfMode,
hci_net_support : FeatureState,
active_comm_mode : FeatureState,
_reserved_ : 3,
_reserved_: 1,
tech_routing : FeatureState,
proto_routing : FeatureState,
aid_routing : FeatureState,
syc_code_routing : FeatureState,
apdu_pttn_routing : FeatureState,
forced_nfcee_routing : FeatureState,
_reserved_ : 1,
batt_off_st : FeatureState,
soff_st : FeatureState,
swon_subst : FeatureState,
rf_conf_soff: FeatureState,
_reserved_ : 4,
prop_caps: PropCaps,
}
enum Intf : 8 {
NFCEE_DIRECT_RF = 0x00,
FRAME_RF = 0x01,
ISO_DEP_RF = 0x02,
NFC_DEP_RF = 0x03,
NDEF_RF = 0x06,
}
enum Extns : 8 {
FR_AGREG_RF_EXT = 0x00,
LLCP_SYM_RF_EXT = 0x01,
}
struct ExtList {
ext : Extns,
}
struct RfInterface {
intf : 8,
_size_(extns) : 8,
extns : 8[],
}
packet InitCommand : Command (op = CORE_INIT) {
feature_enable : FeatureEnable,
}
test InitCommand {
"\x20\x01\x02\x00\x00",
}
packet InitResponse : Response (cmd_op = CORE_INIT) {
status : Status,
nfcc_features : NfccFeatures,
max_log_conns : 4, //TODO set max to 0x0E
_reserved_ : 4,
max_rout_tbls_size : 16,
max_ctrl_payload : 8, //TODO 32 <= val <= 255
max_data_payload : 8,
num_of_credits : 8,
max_nfcv_rf_frame_sz : 16,
_count_(rf_interface) : 8,
rf_interface: RfInterface[],
}
test InitResponse {
"\x40\x01\x18\x00\x1a\x7e\x06\x00\x01\x00\x04\xff\xff\x00\x0c\x01\x05\x01\x00\x02\x00\x03\x00\x00\x00\x90\x00",
}
enum ParamIds : 8 {
TOTAL_DURATION = 0x00,
CON_DISCOVERY_PARAM = 0x02,
POWER_STATE = 0x03,
PA_BAIL_OUT = 0x08,
PA_DEVICES_LIMIT = 0x09,
PB_AFI = 0x10,
PB_BAIL_OUT = 0x11,
PB_ATTRIB_PARAM1 = 0x12,
PB_SENSB_REQ_PARAM = 0x13,
PB_DEVICES_LIMIT = 0x14,
PF_BIT_RATE = 0x18,
PF_BAIL_OUT = 0x19,
PF_DEVICES_LIMIT = 0x1A,
PI_B_H_INFO = 0x20,
PI_BIT_RATE = 0x21,
PN_NFC_DEP_PSL = 0x28,
PN_ATR_REQ_GEN_BYTES = 0x29,
PN_ATR_REQ_CONFIG = 0x2A,
PV_DEVICES_LIMIT = 0x2F,
LA_BIT_FRAME_SDD = 0x30,
LA_PLATFORM_CONFIG = 0x31,
LA_SEL_INFO = 0x32,
LA_NFCID1 = 0x33,
LB_SENSB_INFO = 0x38,
LB_NFCID0 = 0x39,
LB_APPLICATION_DATA = 0x3A,
LB_SFGI = 0x3B,
LB_FWI_ADC_FO = 0x3C,
LB_BIT_RATE = 0x3E,
LF_T3T_IDENTIFIERS_1 = 0x40,
LF_T3T_IDENTIFIERS_2 = 0x41,
LF_T3T_IDENTIFIERS_3 = 0x42,
LF_T3T_IDENTIFIERS_4 = 0x43,
LF_T3T_IDENTIFIERS_5 = 0x44,
LF_T3T_IDENTIFIERS_6 = 0x45,
LF_T3T_IDENTIFIERS_7 = 0x46,
LF_T3T_IDENTIFIERS_8 = 0x47,
LF_T3T_IDENTIFIERS_9 = 0x48,
LF_T3T_IDENTIFIERS_10 = 0x49,
LF_T3T_IDENTIFIERS_11 = 0x4A,
LF_T3T_IDENTIFIERS_12 = 0x4B,
LF_T3T_IDENTIFIERS_13 = 0x4C,
LF_T3T_IDENTIFIERS_14 = 0x4D,
LF_T3T_IDENTIFIERS_15 = 0x4E,
LF_T3T_IDENTIFIERS_16 = 0x4F,
LF_T3T_MAX = 0x52,
LF_T3T_FLAGS = 0x53,
LF_T3T_RD_ALLOWED = 0x55,
LF_PROTOCOL_TYPE = 0x50,
LI_A_RATS_TB1 = 0x58,
LI_A_HIST_BY = 0x59,
LI_B_H_INFO_RESP = 0x5A,
LI_A_BIT_RATE = 0x5B,
LI_A_RATS_TC1 = 0x5C,
LN_WT = 0x60,
LN_ATR_RES_GEN_BYTES = 0x61,
LN_ATR_RES_CONFIG = 0x62,
PACM_BIT_RATE = 0x68,
RF_FIELD_INFO = 0x80,
RF_NFCEE_ACTION = 0x81,
NFCDEP_OP = 0x82,
LLCP_VERSION = 0x83,
NFCC_CONFIG_CONTROL = 0x85,
PROP0 = 0xa0,
PROP1 = 0xa1,
PROP2 = 0xa2,
PROP3 = 0xa3,
PROP4 = 0xa4,
PROP5 = 0xa5,
}
struct ConfigParams {
paramid : ParamIds,
_size_(valm) : 8,
valm : 8[],
}
struct ParamList {
pids : ParamIds,
}
packet SetConfigCommand : Command (op = CORE_SET_CONFIG) {
_count_(params) : 8,
params : ConfigParams[],
}
test SetConfigCommand {
"\x20\x02\x10\x05\x30\x01\x04\x31\x01\x00\x32\x01\x20\x38\x01\x01\x50\x01\x00",
}
packet SetConfigResponse : Response (cmd_op = CORE_SET_CONFIG) {
status : Status,
_count_(paramids) : 8,
paramids : ParamList[],
}
test SetConfigResponse {
"\x40\x02\x02\x00\x00",
}
packet GetConfigCommand : Command (op = CORE_GET_CONFIG) {
_count_(paramids) : 8,
paramids : ParamList[],
}
test GetConfigCommand {
"\x20\x03\x02\x01\x52",
}
packet GetConfigResponse : Response (cmd_op = CORE_GET_CONFIG) {
status : Status,
_count_(params) : 8,
params : ConfigParams[],
}
test GetConfigResponse {
"\x40\x03\x05\x00\x01\x52\x01\x10",
}
enum RfProtocols : 8 {
PROTOCOL_UNDETERMINED = 0x00,
PROTOCOL_T1T = 0x01,
PROTOCOL_T2T = 0x02,
PROTOCOL_T3T = 0x03,
PROTOCOL_ISO_DEP = 0x04,
PROTOCOL_NFC_DEP = 0x05,
PROTOCOL_T5T = 0x06,
PROTOCOL_NDEF = 0x07,
}
enum NfceeProtocols : 8 {
APDU = 0x00,
RFU = 0x01,
T3CS = 0x02,
TRANSPARENT = 0x04,
}
enum DestTypes : 8 {
RFU = 0x00,
NFCC_LPBK = 0x01,
REMOTE = 0x02,
NFCEE = 0x03,
}
enum DestParamTypes : 8 {
RF_DISC = 0x00,
NFCEE = 0x01,
}
struct RfDiscType {
id : 8,
proto: RfProtocols,
}
struct NfceeType {
id : 8,
proto : NfceeProtocols,
}
struct DestParams {
ptype : DestParamTypes,
_size_(valdsp) : 8,
valdsp : 8[],
}
packet ConnCreateCommand : Command (op = CORE_CONN_CREATE) {
dt : DestTypes,
_count_(destparams) : 8,
destparams : DestParams[],
}
packet ConnCreateResponse : Response (cmd_op = CORE_CONN_CREATE) {
status : Status,
mpps : 8,
ncreds : 8,
conn_id : 8,
}
packet ConnCloseCommand : Command (op = CORE_CONN_CLOSE) {
conn_id : 8,
}
packet ConnCloseResponse : Response (cmd_op = CORE_CONN_CLOSE) {
status : Status,
}
struct CreditsPerConn {
conn_id : 8,
ncredits : 8,
}
packet ConnCreditsNotification : Notification (cmd_op = CORE_CONN_CREDITS) {
_count_(conns) : 8,
conns : CreditsPerConn[],
}
packet GenericError : Notification (cmd_op = CORE_GENERIC_ERROR) {
status : Status,
}
packet InterfaceError : Notification (cmd_op = CORE_INTERFACE_ERROR) {
status : Status,
conn_id : 8,
}