aboutsummaryrefslogtreecommitdiff
path: root/daemon/peripheral_manager_client.cc
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/peripheral_manager_client.cc')
-rw-r--r--daemon/peripheral_manager_client.cc76
1 files changed, 76 insertions, 0 deletions
diff --git a/daemon/peripheral_manager_client.cc b/daemon/peripheral_manager_client.cc
index bd05537..8dc30ea 100644
--- a/daemon/peripheral_manager_client.cc
+++ b/daemon/peripheral_manager_client.cc
@@ -487,4 +487,80 @@ Status PeripheralManagerClient::I2cWriteRegBuffer(
return ret == 0 ? Status::ok() : Status::fromServiceSpecificError(ret);
}
+Status PeripheralManagerClient::ListUartDevices(
+ std::vector<std::string>* devices) {
+ *devices = UartManager::GetManager()->GetDevicesList();
+ return Status::ok();
+}
+
+Status PeripheralManagerClient::OpenUartDevice(const std::string& name) {
+ if (!UartManager::GetManager()->HasUartDevice(name))
+ return Status::fromServiceSpecificError(ENODEV);
+
+ auto uart_device = UartManager::GetManager()->OpenUartDevice(name);
+ if (!uart_device) {
+ LOG(ERROR) << "Failed to open UART device " << name;
+ return Status::fromServiceSpecificError(EBUSY);
+ }
+
+ uart_devices_.emplace(name, std::move(uart_device));
+ return Status::ok();
+}
+
+Status PeripheralManagerClient::ReleaseUartDevice(const std::string& name) {
+ return uart_devices_.erase(name) ? Status::ok()
+ : Status::fromServiceSpecificError(EPERM);
+}
+
+Status PeripheralManagerClient::SetUartDeviceBaudrate(const std::string& name,
+ int32_t baudrate) {
+ auto uart_device = uart_devices_.find(name);
+ if (uart_device == uart_devices_.end())
+ return Status::fromServiceSpecificError(EPERM);
+
+ if (baudrate < 0)
+ return Status::fromServiceSpecificError(EINVAL);
+
+ int ret = uart_device->second->SetBaudrate(static_cast<uint32_t>(baudrate));
+
+ if (ret)
+ return Status::fromServiceSpecificError(ret);
+
+ return Status::ok();
+}
+
+Status PeripheralManagerClient::UartDeviceWrite(
+ const std::string& name,
+ const std::vector<uint8_t>& data,
+ int32_t* bytes_written) {
+ auto uart_device = uart_devices_.find(name);
+ if (uart_device == uart_devices_.end())
+ return Status::fromServiceSpecificError(EPERM);
+
+ int ret = uart_device->second->Write(
+ data, reinterpret_cast<uint32_t*>(bytes_written));
+
+ if (ret)
+ return Status::fromServiceSpecificError(ret);
+
+ return Status::ok();
+}
+
+Status PeripheralManagerClient::UartDeviceRead(const std::string& name,
+ std::vector<uint8_t>* data,
+ int size,
+ int* bytes_read) {
+ auto uart_device = uart_devices_.find(name);
+ if (uart_device == uart_devices_.end())
+ return Status::fromServiceSpecificError(EPERM);
+
+ int ret = uart_device->second->Read(
+ data, size, reinterpret_cast<uint32_t*>(bytes_read));
+
+ if (ret)
+ return Status::fromServiceSpecificError(ret);
+
+ return Status::ok();
+}
+
} // namespace android