1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
|
//*****************************************************************************
//
// snep.h - Simple NDEF Exchange Protocol deffinitions
//
// Copyright (c) 2014 Texas Instruments Incorporated. All rights reserved.
// Software License Agreement
//
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
//
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 2.1.0.12573 of the Tiva Firmware Development Package.
//
//*****************************************************************************
#ifndef __NFC_SNEP_H__
#define __NFC_SNEP_H__
#include "types.h"
//*****************************************************************************
//
//! \addtogroup nfc_snep_api NFC SNEP API Functions
//! @{
//
//*****************************************************************************
//*****************************************************************************
//
// This size is used to limit the maximum size of the incoming NDEF message.
// The maximum is dependent on the Maximum Information Units (MIU) defined in
// the LLCP layer.
// For example for MIU = 248, SNEP_MAX_BUFFER = 248
//
//*****************************************************************************
//
//! This is the maximum size of a fragment that is sent/received.
//
#define SNEP_MAX_BUFFER 248
//
//! Maximum size of the incoming payload.
//
#define SNEP_MAX_PAYLOAD 20000
//
//! Simple NDEF protocol version specified in the specification.
//
#define SNEP_VERSION 0x10
//*****************************************************************************
//
// List of SNEP Commands
//
//*****************************************************************************
//*****************************************************************************
//
//! SNEPCommand request / responses enumeration.
//
//*****************************************************************************
typedef enum
{
//
// SNEP request field value
//
//! See SNEP V1.0 Section 4.1
SNEP_REQUEST_CONTINUE = 0x00,
//! See SNEP V1.0 Section 4.2
SNEP_REQUEST_GET = 0x01,
//! See SNEP V1.0 Section 4.3
SNEP_REQUEST_PUT = 0x02,
// 03h-7Eh Reserved for future use
//! See SNEP V1.0 Section 4.4
SNEP_REQUEST_REJECT = 0x7F,
// 80h-FFh Reserved for response field values
//
// See SNEP Response Field Values
//
// 00h-7Fh Reserved for request field values
//! See SNEP V1.0 Section 5.1
SNEP_RESPONSE_CONTINUE = 0x80,
//! See SNEP V1.0 Section 5.2
SNEP_RESPONSE_SUCCESS = 0x81,
//! See SNEP V1.0 Section 5.3
SNEP_RESPONSE_NOT_FOUND = 0xC0,
//! See SNEP V1.0 Section 5.4
SNEP_RESPONSE_EXCESS_DATA = 0xC1,
//! See SNEP V1.0 Section 5.5
SNEP_RESPONSE_BAD_REQUEST = 0xC2,
//! See SNEP V1.0 Section 5.6
SNEP_RESPONSE_NOT_IMPLEMENTED = 0xE0,
//! See SNEP V1.0 Section 5.7
SNEP_RESPONSE_UNSUPPORTED_VER = 0xE1,
//! See SNEP V1.0 Section 5.8
SNEP_RESPONSE_REJECT = 0xFF
}tSNEPCommands;
//*****************************************************************************
//
//! SNEP Connection Status Enumeration.
//
//*****************************************************************************
typedef enum
{
//! No ongoing transaction to/from the client
SNEP_CONNECTION_IDLE = 0x00,
//! Wrong version received
SNEP_WRONG_VERSION_RECEIVED,
//! Received first fragment
SNEP_CONNECTION_RECEIVED_FIRST_PACKET,
//! Received n fragment
SNEP_CONNECTION_RECEIVING_N_FRAGMENTS,
//! Waiting for continue response
SNEP_CONNECTION_WAITING_FOR_CONTINUE,
//! Waiting for success response
SNEP_CONNECTION_WAITING_FOR_SUCCESS,
//! Sending n fragment
SNEP_CONNECTION_SENDING_N_FRAGMENTS,
//! Send completed
SNEP_CONNECTION_SEND_COMPLETE,
//! Receive completed
SNEP_CONNECTION_RECEIVE_COMPLETE,
//! Received excess size request.
SNEP_CONNECTION_EXCESS_SIZE
}tSNEPConnectionStatus;
//*****************************************************************************
//
//! RX packet status enumeration.
//
//*****************************************************************************
typedef enum
{
//
//! No pending received data
//
RECEIVED_NO_FRAGMENT = 0,
//
//! First fragment received from the client
//
RECEIVED_FIRST_FRAGMENT,
//
//! N fragment received from the client
RECEIVED_N_FRAGMENT,
//! Last fragment received from the client - packet completed
RECEIVED_FRAGMENT_COMPLETED
}tPacketStatus;
//*****************************************************************************
//
// Function Prototypes
//
//*****************************************************************************
void SNEP_init(void);
void SNEP_setMaxPayload(uint8_t ui8MaxPayload);
tStatus SNEP_setupPacket(uint8_t * pui8PacketPtr, uint32_t ui32PacketLength);
uint8_t SNEP_sendRequest(uint8_t * pui8DataPtr, tSNEPCommands eRequestCmd);
uint8_t SNEP_sendResponse(uint8_t * pui8DataPtr, tSNEPCommands eResponseCmd);
void SNEP_processReceivedData(uint8_t * pui8RxBuffer, uint8_t ui8RxLength);
void SNEP_getReceiveStatus(tPacketStatus * peReceiveFlag, uint8_t * length,
uint8_t ** pui8DataPtr);
tSNEPConnectionStatus SNEP_getProtocolStatus(void);
void SNEP_setProtocolStatus(tSNEPConnectionStatus eProtocolStatus);
//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************
#endif // __NFC_SNEP_H__
|