Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e3c66e2 authored by Ruchi Kandoi's avatar Ruchi Kandoi Committed by Andre Eisenbach
Browse files

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: default avatarRuchi Kandoi <kandoiruchi@google.com>
(cherry picked from commit 209a274c)
parent 14b91049
Loading
Loading
Loading
Loading
+99 −62
Original line number Diff line number Diff line
@@ -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,9 +207,26 @@ TEST_F(NfcHidlTest, WriteInvalidCommand) {
 * Check the response
 */
TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
  // Send an Error Data Packet
  std::vector<uint8_t> cmd = FAULTY_DATA_PACKET;
    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]);

    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++) {
@@ -215,7 +234,7 @@ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
        data[size - 1] = 0xFF;
        EXPECT_EQ(data.size(), nfc_->write(data));
        // Wait for CORE_INTERFACE_ERROR_NTF
    auto res = nfc_cb_->WaitForCallback(kCallbackNameSendData);
        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]);
@@ -228,7 +247,7 @@ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
  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,12 +261,30 @@ TEST_F(NfcHidlTest, WriteInvalidAndThenValidCommand) {
 * Repeat to send total of 1Mb data
 */
TEST_F(NfcHidlTest, Bandwidth) {
  std::vector<uint8_t> cmd = CORE_CONN_CREATE_CMD;
    std::vector<uint8_t> cmd = CORE_RESET_CMD;
    NfcData data = cmd;
    EXPECT_EQ(data.size(), nfc_->write(data));
  // Wait for CORE_CONN_CREATE_RSP
    // 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]);

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

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