diff --git a/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp b/nfc/1.0/vts/functional/VtsHalNfcV1_0TargetTest.cpp index cf9f66ed15..e77cc14925 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; { 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 @@ TEST_F(NfcHidlTest, WriteCoreReset) { 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 @@ TEST_F(NfcHidlTest, WriteInvalidCommand) { * Check the response */ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) { - // Send an Error Data Packet - std::vector 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 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 @@ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) { * Repeat to send total of 1Mb data */ TEST_F(NfcHidlTest, Bandwidth) { - std::vector 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 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]); } }