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]);
}
}