summaryrefslogtreecommitdiffstats
path: root/nfc
diff options
context:
space:
mode:
authorRuchi Kandoi2017-05-12 16:19:25 -0500
committerRuchi Kandoi2017-05-15 12:12:49 -0500
commit209a274c31f8654000561b080f64ee84dd221ed9 (patch)
tree7a137acc457fdbd92437475c8c188c91ab62136f /nfc
parenta24592b396f372e8a7f3ca7b34d397100629fd48 (diff)
downloadplatform-hardware-interfaces-209a274c31f8654000561b080f64ee84dd221ed9.tar.gz
platform-hardware-interfaces-209a274c31f8654000561b080f64ee84dd221ed9.tar.xz
platform-hardware-interfaces-209a274c31f8654000561b080f64ee84dd221ed9.zip
NFC: vts: Add commands to reset the NFC controller before other commands
Bandwidth and WriteInvalidAndThenValidCommand test assumes that the NFC controller will be initialized before the test. This is not necessarily true for all devices. Send CORE_RESET_CMD and CORE_INIT_CMD before creating a loop-back connection. CORE_RESET_RSP doesn't necessary return the configuration that was sent in CORE_RESET_CMD. For instance, if CORE_RESET_CMD requested keeping the configuration, and if the controller doesn't support that, the configuration will be resetted and CORE_RESET_RSP will reflect that. Bug: 38267593 Test: vts-tradefed run commandAndExit vts --skip-all-system-status-check --primary-abi-only --skip-preconditions --module VtsHalNfcV1_0Target -l INFO Change-Id: I65ae9746054ca767b928bdd461faa02f03719aea Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
Diffstat (limited to 'nfc')
-rw-r--r--nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp161
1 files changed, 99 insertions, 62 deletions
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index cf9f66ed..e77cc149 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -42,6 +42,8 @@ using ::android::sp;
42 { 0x20, 0x00, 0x01, 0x01 } 42 { 0x20, 0x00, 0x01, 0x01 }
43#define CORE_CONN_CREATE_CMD \ 43#define CORE_CONN_CREATE_CMD \
44 { 0x20, 0x04, 0x02, 0x01, 0x00 } 44 { 0x20, 0x04, 0x02, 0x01, 0x00 }
45#define CORE_INIT_CMD \
46 { 0x20, 0x01, 0x00 }
45#define INVALID_COMMAND \ 47#define INVALID_COMMAND \
46 { 0x20, 0x00, 0x00 } 48 { 0x20, 0x00, 0x00 }
47#define FAULTY_DATA_PACKET \ 49#define FAULTY_DATA_PACKET \
@@ -155,7 +157,7 @@ TEST_F(NfcHidlTest, WriteCoreReset) {
155 EXPECT_EQ(6ul, res.args->last_data_.size()); 157 EXPECT_EQ(6ul, res.args->last_data_.size());
156 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]); 158 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
157 EXPECT_GE(VERSION, res.args->last_data_[4]); 159 EXPECT_GE(VERSION, res.args->last_data_[4]);
158 EXPECT_EQ(0ul, res.args->last_data_[5]); 160 EXPECT_GE(1ul, res.args->last_data_[5]);
159} 161}
160 162
161/* 163/*
@@ -205,30 +207,47 @@ TEST_F(NfcHidlTest, WriteInvalidCommand) {
205 * Check the response 207 * Check the response
206 */ 208 */
207TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) { 209TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
208 // Send an Error Data Packet 210 std::vector<uint8_t> cmd = CORE_RESET_CMD;
209 std::vector<uint8_t> cmd = FAULTY_DATA_PACKET; 211 NfcData data = cmd;
210 NfcData data = cmd;
211 size_t size = data.size();
212
213 for (int i = 0; i < 100; i++) {
214 data.resize(++size);
215 data[size - 1] = 0xFF;
216 EXPECT_EQ(data.size(), nfc_->write(data)); 212 EXPECT_EQ(data.size(), nfc_->write(data));
217 // Wait for CORE_INTERFACE_ERROR_NTF 213 // Wait for CORE_RESET_RSP
218 auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData); 214 auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
219 EXPECT_TRUE(res.no_timeout); 215 EXPECT_TRUE(res.no_timeout);
220 EXPECT_EQ(5ul, res.args->last_data_.size()); 216 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
221 EXPECT_EQ(0x60, res.args->last_data_[0]); 217 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
222 EXPECT_EQ(0x08, res.args->last_data_[1]); 218
223 EXPECT_EQ(0x02, res.args->last_data_[2]); 219 cmd = CORE_INIT_CMD;
224 EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]); 220 data = cmd;
221 EXPECT_EQ(data.size(), nfc_->write(data));
222 // Wait for CORE_INIT_RSP
223 res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
224 EXPECT_TRUE(res.no_timeout);
225 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
226
227 // Send an Error Data Packet
228 cmd = FAULTY_DATA_PACKET;
229 data = cmd;
230 size_t size = data.size();
231
232 for (int i = 0; i < 100; i++) {
233 data.resize(++size);
234 data[size - 1] = 0xFF;
235 EXPECT_EQ(data.size(), nfc_->write(data));
236 // Wait for CORE_INTERFACE_ERROR_NTF
237 res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
238 EXPECT_TRUE(res.no_timeout);
239 EXPECT_EQ(5ul, res.args->last_data_.size());
240 EXPECT_EQ(0x60, res.args->last_data_[0]);
241 EXPECT_EQ(0x08, res.args->last_data_[1]);
242 EXPECT_EQ(0x02, res.args->last_data_[2]);
243 EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
225 } 244 }
226 245
227 cmd = CORE_CONN_CREATE_CMD; 246 cmd = CORE_CONN_CREATE_CMD;
228 data = cmd; 247 data = cmd;
229 EXPECT_EQ(data.size(), nfc_->write(data)); 248 EXPECT_EQ(data.size(), nfc_->write(data));
230 // Wait for CORE_CONN_CREATE_RSP 249 // Wait for CORE_CONN_CREATE_RSP
231 auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData); 250 res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
232 EXPECT_TRUE(res.no_timeout); 251 EXPECT_TRUE(res.no_timeout);
233 EXPECT_EQ(7ul, res.args->last_data_.size()); 252 EXPECT_EQ(7ul, res.args->last_data_.size());
234 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]); 253 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
@@ -242,52 +261,70 @@ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
242 * Repeat to send total of 1Mb data 261 * Repeat to send total of 1Mb data
243 */ 262 */
244TEST_F(NfcHidlTest, Bandwidth) { 263TEST_F(NfcHidlTest, Bandwidth) {
245 std::vector<uint8_t> cmd = CORE_CONN_CREATE_CMD; 264 std::vector<uint8_t> cmd = CORE_RESET_CMD;
246 NfcData data = cmd; 265 NfcData data = cmd;
247 EXPECT_EQ(data.size(), nfc_->write(data)); 266 EXPECT_EQ(data.size(), nfc_->write(data));
248 // Wait for CORE_CONN_CREATE_RSP 267 // Wait for CORE_RESET_RSP
249 auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData); 268 auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
250 EXPECT_TRUE(res.no_timeout); 269 EXPECT_TRUE(res.no_timeout);
251 EXPECT_EQ(7ul, res.args->last_data_.size()); 270 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
252 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]); 271 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
253 uint8_t conn_id = res.args->last_data_[6]; 272
254 uint32_t max_payload_size = res.args->last_data_[4]; 273 cmd = CORE_INIT_CMD;
255 274 data = cmd;
256 for (int loops = 0; loops < NUMBER_LOOPS; loops++) { 275 EXPECT_EQ(data.size(), nfc_->write(data));
257 res.args->last_data_.resize(0); 276 // Wait for CORE_INIT_RSP
258 data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE); 277 res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
259 data[0] = conn_id; 278 EXPECT_TRUE(res.no_timeout);
260 data[1] = 0x00; 279 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
261 data[2] = max_payload_size; 280
262 for (uint32_t i = 0; i < max_payload_size; i++) { 281 cmd = CORE_CONN_CREATE_CMD;
263 data[i + LOOP_BACK_HEADER_SIZE] = i; 282 data = cmd;
264 } 283 EXPECT_EQ(data.size(), nfc_->write(data));
265 EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data)); 284 // Wait for CORE_CONN_CREATE_RSP
266 // Wait for data and CORE_CONN_CREDITS_NTF 285 res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
267 auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData); 286 EXPECT_TRUE(res.no_timeout);
268 EXPECT_TRUE(res1.no_timeout); 287 EXPECT_TRUE(res.no_timeout);
269 auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData); 288 EXPECT_EQ(7ul, res.args->last_data_.size());
270 EXPECT_TRUE(res2.no_timeout); 289 EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
271 // Check if the same data was received back 290 uint8_t conn_id = res.args->last_data_[6];
272 EXPECT_TRUE(res1.args); 291 uint32_t max_payload_size = res.args->last_data_[4];
273 EXPECT_TRUE(res2.args); 292
274 293 for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
275 NfcData credits_ntf = res1.args->last_data_; 294 res.args->last_data_.resize(0);
276 NfcData received_data = res2.args->last_data_; 295 data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
277 /* It is possible that CORE_CONN_CREDITS_NTF is received before data, 296 data[0] = conn_id;
278 * Find the order and do further checks depending on that */ 297 data[1] = 0x00;
279 if (received_data.size() != data.size()) { 298 data[2] = max_payload_size;
280 credits_ntf = res2.args->last_data_; 299 for (uint32_t i = 0; i < max_payload_size; i++) {
281 received_data = res1.args->last_data_; 300 data[i + LOOP_BACK_HEADER_SIZE] = i;
282 } 301 }
283 EXPECT_EQ(data.size(), received_data.size()); 302 EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
284 for (size_t i = 0; i < data.size(); i++) { 303 // Wait for data and CORE_CONN_CREDITS_NTF
285 EXPECT_EQ(data[i], received_data[i]); 304 auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
286 } 305 EXPECT_TRUE(res1.no_timeout);
287 306 auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
288 EXPECT_EQ(6ul, credits_ntf.size()); 307 EXPECT_TRUE(res2.no_timeout);
289 // Check if the credit is refilled to 1 308 // Check if the same data was received back
290 EXPECT_EQ(1, credits_ntf[5]); 309 EXPECT_TRUE(res1.args);
310 EXPECT_TRUE(res2.args);
311
312 NfcData credits_ntf = res1.args->last_data_;
313 NfcData received_data = res2.args->last_data_;
314 /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
315 * Find the order and do further checks depending on that */
316 if (received_data.size() != data.size()) {
317 credits_ntf = res2.args->last_data_;
318 received_data = res1.args->last_data_;
319 }
320 EXPECT_EQ(data.size(), received_data.size());
321 for (size_t i = 0; i < data.size(); i++) {
322 EXPECT_EQ(data[i], received_data[i]);
323 }
324
325 EXPECT_EQ(6ul, credits_ntf.size());
326 // Check if the credit is refilled to 1
327 EXPECT_EQ(1, credits_ntf[5]);
291 } 328 }
292} 329}
293 330