diff options
author | Lee Campbell <leecam@google.com> | 2016-03-09 19:06:07 -0800 |
---|---|---|
committer | Lee Campbell <leecam@google.com> | 2016-03-10 09:54:47 -0800 |
commit | 0a407224a1e2b6f15fb56386f8a2633a703417e3 (patch) | |
tree | 1dbf2b1b6855b6af3239eee884d956d01bc1aa01 | |
parent | e2d5fe09e909fbff34cba9d9c5f5e1464a194030 (diff) | |
download | peripheralmanager-0a407224a1e2b6f15fb56386f8a2633a703417e3.tar.gz |
Fix SPI Transfer rx code
TEST: Read SPI data from a sensor
Change-Id: I4a853d89f177fd281c0cb29d64bc57d82d7a0478
-rw-r--r-- | client/spi_device_impl.cc | 18 | ||||
-rw-r--r-- | daemon/peripheral_manager_client.cc | 8 |
2 files changed, 15 insertions, 11 deletions
diff --git a/client/spi_device_impl.cc b/client/spi_device_impl.cc index 81d863c..e21ca5a 100644 --- a/client/spi_device_impl.cc +++ b/client/spi_device_impl.cc @@ -22,6 +22,7 @@ using android::sp; using android::os::IPeripheralManagerClient; +using android::binder::Status; SpiDeviceImpl::SpiDeviceImpl(const std::string& name, sp<IPeripheralManagerClient> client) @@ -43,15 +44,18 @@ int SpiDeviceImpl::WriteBuffer(const uint8_t* data, size_t len) { int SpiDeviceImpl::Transfer(const uint8_t* tx_data, uint8_t* rx_data, size_t len) { - std::unique_ptr<std::vector<uint8_t>> sent(nullptr); - std::unique_ptr<std::vector<uint8_t>> received( - rx_data ? new std::vector<uint8_t> : nullptr); + std::unique_ptr<std::vector<uint8_t>> sent; + std::unique_ptr<std::vector<uint8_t>> received; - if (tx_data != nullptr) - sent.reset(new std::vector<uint8_t>(tx_data, tx_data + len)); + if (tx_data == nullptr) + return EINVAL; - return client_->SpiDeviceTransfer(name_, sent, &received, len) - .serviceSpecificErrorCode(); + sent.reset(new std::vector<uint8_t>(tx_data, tx_data + len)); + + Status status = client_->SpiDeviceTransfer(name_, sent, &received, len); + if (status.isOk() && rx_data) + memcpy(rx_data, received->data(), len); + return status.serviceSpecificErrorCode(); } int SpiDeviceImpl::SetFrequency(uint32_t freq_hz) { diff --git a/daemon/peripheral_manager_client.cc b/daemon/peripheral_manager_client.cc index 5bffd6f..5eaa2e5 100644 --- a/daemon/peripheral_manager_client.cc +++ b/daemon/peripheral_manager_client.cc @@ -173,15 +173,15 @@ Status PeripheralManagerClient::SpiDeviceTransfer( if (!spi_devices_.count(name)) return Status::fromServiceSpecificError(EPERM); - uint8_t* data_sent = tx_data ? tx_data->data() : nullptr; if (!rx_data) { - if (spi_devices_.find(name)->second->Transfer(data_sent, nullptr, size)) { + if (spi_devices_.find(name)->second->Transfer(tx_data->data(), nullptr, + size)) { return Status::ok(); } } else { rx_data->reset(new std::vector<uint8_t>(size)); - if (spi_devices_.find(name)->second->Transfer(data_sent, (*rx_data)->data(), - size)) { + if (spi_devices_.find(name)->second->Transfer(tx_data->data(), + (*rx_data)->data(), size)) { return Status::ok(); } } |