NFC: vts: Add commands to reset the NFC controller before other commands am: 209a274c31 am: cd825026ca
am: b5beef1765

Change-Id: I70dc4ec91c3ea52dec1bfddf6fc55634250b28fe
diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
index cf9f66e..e77cc14 100644
--- a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
+++ b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp
@@ -42,6 +42,8 @@
   { 0x20, 0x00, 0x01, 0x01 }
 #define CORE_CONN_CREATE_CMD \
   { 0x20, 0x04, 0x02, 0x01, 0x00 }
+#define CORE_INIT_CMD \
+    { 0x20, 0x01, 0x00 }
 #define INVALID_COMMAND \
   { 0x20, 0x00, 0x00 }
 #define FAULTY_DATA_PACKET \
@@ -155,7 +157,7 @@
   EXPECT_EQ(6ul, res.args->last_data_.size());
   EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
   EXPECT_GE(VERSION, res.args->last_data_[4]);
-  EXPECT_EQ(0ul, res.args->last_data_[5]);
+  EXPECT_GE(1ul, res.args->last_data_[5]);
 }
 
 /*
@@ -205,30 +207,47 @@
  * Check the response
  */
 TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
-  // Send an Error Data Packet
-  std::vector<uint8_t> cmd = FAULTY_DATA_PACKET;
-  NfcData data = cmd;
-  size_t size = data.size();
-
-  for (int i = 0; i < 100; i++) {
-    data.resize(++size);
-    data[size - 1] = 0xFF;
+    std::vector<uint8_t> cmd = CORE_RESET_CMD;
+    NfcData data = cmd;
     EXPECT_EQ(data.size(), nfc_->write(data));
-    // Wait for CORE_INTERFACE_ERROR_NTF
+    // Wait for CORE_RESET_RSP
     auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
     EXPECT_TRUE(res.no_timeout);
-    EXPECT_EQ(5ul, res.args->last_data_.size());
-    EXPECT_EQ(0x60, res.args->last_data_[0]);
-    EXPECT_EQ(0x08, res.args->last_data_[1]);
-    EXPECT_EQ(0x02, res.args->last_data_[2]);
-    EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+
+    cmd = CORE_INIT_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_INIT_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+
+    // Send an Error Data Packet
+    cmd = FAULTY_DATA_PACKET;
+    data = cmd;
+    size_t size = data.size();
+
+    for (int i = 0; i < 100; i++) {
+        data.resize(++size);
+        data[size - 1] = 0xFF;
+        EXPECT_EQ(data.size(), nfc_->write(data));
+        // Wait for CORE_INTERFACE_ERROR_NTF
+        res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res.no_timeout);
+        EXPECT_EQ(5ul, res.args->last_data_.size());
+        EXPECT_EQ(0x60, res.args->last_data_[0]);
+        EXPECT_EQ(0x08, res.args->last_data_[1]);
+        EXPECT_EQ(0x02, res.args->last_data_[2]);
+        EXPECT_EQ(SYNTAX_ERROR, res.args->last_data_[3]);
   }
 
   cmd = CORE_CONN_CREATE_CMD;
   data = cmd;
   EXPECT_EQ(data.size(), nfc_->write(data));
   // Wait for CORE_CONN_CREATE_RSP
-  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+  res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
   EXPECT_TRUE(res.no_timeout);
   EXPECT_EQ(7ul, res.args->last_data_.size());
   EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
@@ -242,52 +261,70 @@
  * Repeat to send total of 1Mb data
  */
 TEST_F(NfcHidlTest, Bandwidth) {
-  std::vector<uint8_t> cmd = CORE_CONN_CREATE_CMD;
-  NfcData data = cmd;
-  EXPECT_EQ(data.size(), nfc_->write(data));
-  // Wait for CORE_CONN_CREATE_RSP
-  auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-  EXPECT_TRUE(res.no_timeout);
-  EXPECT_EQ(7ul, res.args->last_data_.size());
-  EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
-  uint8_t conn_id = res.args->last_data_[6];
-  uint32_t max_payload_size = res.args->last_data_[4];
+    std::vector<uint8_t> cmd = CORE_RESET_CMD;
+    NfcData data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_RESET_RSP
+    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
-  for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
-      res.args->last_data_.resize(0);
-      data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
-      data[0] = conn_id;
-      data[1] = 0x00;
-      data[2] = max_payload_size;
-      for (uint32_t i = 0; i < max_payload_size; i++) {
-          data[i + LOOP_BACK_HEADER_SIZE] = i;
-    }
-    EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
-    // Wait for data and CORE_CONN_CREDITS_NTF
-    auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res1.no_timeout);
-    auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
-    EXPECT_TRUE(res2.no_timeout);
-    // Check if the same data was received back
-    EXPECT_TRUE(res1.args);
-    EXPECT_TRUE(res2.args);
+    cmd = CORE_INIT_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_INIT_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
 
-    NfcData credits_ntf = res1.args->last_data_;
-    NfcData received_data = res2.args->last_data_;
-    /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
-     * Find the order and do further checks depending on that */
-    if (received_data.size() != data.size()) {
-        credits_ntf = res2.args->last_data_;
-        received_data = res1.args->last_data_;
-    }
-    EXPECT_EQ(data.size(), received_data.size());
-    for (size_t i = 0; i < data.size(); i++) {
-        EXPECT_EQ(data[i], received_data[i]);
-    }
+    cmd = CORE_CONN_CREATE_CMD;
+    data = cmd;
+    EXPECT_EQ(data.size(), nfc_->write(data));
+    // Wait for CORE_CONN_CREATE_RSP
+    res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_TRUE(res.no_timeout);
+    EXPECT_EQ(7ul, res.args->last_data_.size());
+    EXPECT_EQ((int)NfcStatus::OK, res.args->last_data_[3]);
+    uint8_t conn_id = res.args->last_data_[6];
+    uint32_t max_payload_size = res.args->last_data_[4];
 
-    EXPECT_EQ(6ul, credits_ntf.size());
-    // Check if the credit is refilled to 1
-    EXPECT_EQ(1, credits_ntf[5]);
+    for (int loops = 0; loops < NUMBER_LOOPS; loops++) {
+        res.args->last_data_.resize(0);
+        data.resize(max_payload_size + LOOP_BACK_HEADER_SIZE);
+        data[0] = conn_id;
+        data[1] = 0x00;
+        data[2] = max_payload_size;
+        for (uint32_t i = 0; i < max_payload_size; i++) {
+            data[i + LOOP_BACK_HEADER_SIZE] = i;
+        }
+        EXPECT_EQ(max_payload_size + LOOP_BACK_HEADER_SIZE, nfc_->write(data));
+        // Wait for data and CORE_CONN_CREDITS_NTF
+        auto res1 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res1.no_timeout);
+        auto res2 = nfc_cb_->WaitForCallback(kCallbackNameSendData);
+        EXPECT_TRUE(res2.no_timeout);
+        // Check if the same data was received back
+        EXPECT_TRUE(res1.args);
+        EXPECT_TRUE(res2.args);
+
+        NfcData credits_ntf = res1.args->last_data_;
+        NfcData received_data = res2.args->last_data_;
+        /* It is possible that CORE_CONN_CREDITS_NTF is received before data,
+         * Find the order and do further checks depending on that */
+        if (received_data.size() != data.size()) {
+            credits_ntf = res2.args->last_data_;
+            received_data = res1.args->last_data_;
+        }
+        EXPECT_EQ(data.size(), received_data.size());
+        for (size_t i = 0; i < data.size(); i++) {
+            EXPECT_EQ(data[i], received_data[i]);
+        }
+
+        EXPECT_EQ(6ul, credits_ntf.size());
+        // Check if the credit is refilled to 1
+        EXPECT_EQ(1, credits_ntf[5]);
   }
 }