aboutsummaryrefslogtreecommitdiff
path: root/daemon/uart_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/uart_manager.h')
-rw-r--r--daemon/uart_manager.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/daemon/uart_manager.h b/daemon/uart_manager.h
new file mode 100644
index 0000000..b304ea1
--- /dev/null
+++ b/daemon/uart_manager.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_PERIPHERALMANAGER_DAEMON_UART_MANAGER_H_
+#define SYSTEM_PERIPHERALMANAGER_DAEMON_UART_MANAGER_H_
+
+#include <stdint.h>
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include <android-base/unique_fd.h>
+#include <base/macros.h>
+
+#include "pin_mux_manager.h"
+#include "uart_driver.h"
+
+namespace android {
+
+struct UartSysfs {
+ std::string name;
+ std::string path;
+ std::string mux;
+ std::unique_ptr<UartDriverInterface> driver_;
+};
+
+class UartDevice {
+ public:
+ UartDevice(UartSysfs* uart_device) : uart_device_(uart_device) {}
+ ~UartDevice() { uart_device_->driver_.reset(); }
+
+ int SetBaudrate(uint32_t baudrate) {
+ return uart_device_->driver_->SetBaudrate(baudrate);
+ }
+
+ int Write(const std::vector<uint8_t>& data, uint32_t* bytes_written) {
+ return uart_device_->driver_->Write(data, bytes_written);
+ }
+
+ int Read(std::vector<uint8_t>* data, uint32_t size, uint32_t* bytes_read) {
+ return uart_device_->driver_->Read(data, size, bytes_read);
+ }
+
+ private:
+ UartSysfs* uart_device_;
+};
+
+class UartManager {
+ public:
+ ~UartManager();
+
+ // Get the singleton.
+ static UartManager* GetManager();
+ static void ResetManager();
+
+ // Used by the BSP to tell PMan of an sysfs uart_device.
+ bool RegisterUartDevice(const std::string& name, const std::string& path);
+ bool SetPinMux(const std::string& name, const std::string& mux);
+
+ std::vector<std::string> GetDevicesList();
+ bool HasUartDevice(const std::string& name);
+
+ bool RegisterDriver(std::unique_ptr<UartDriverInfoBase> driver_info);
+
+ std::unique_ptr<UartDevice> OpenUartDevice(const std::string& name);
+
+ private:
+ UartManager();
+
+ std::map<std::string, std::unique_ptr<UartDriverInfoBase>> driver_infos_;
+ std::map<std::string, UartSysfs> uart_devices_;
+
+ DISALLOW_COPY_AND_ASSIGN(UartManager);
+};
+
+} // namespace android
+
+#endif // SYSTEM_PERIPHERALMANAGER_DAEMON_UART_MANAGER_H_