blob: bdba9ef8454bc38297e287f83ad074f7e1c5b138 [file] [log] [blame]
/*
* 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_PERIPHERAL_MANAGER_CLIENT_H_
#define SYSTEM_PERIPHERALMANAGER_DAEMON_PERIPHERAL_MANAGER_CLIENT_H_
#include <map>
#include <memory>
#include <string>
#include <base/macros.h>
#include <android/os/BnPeripheralManagerClient.h>
#include "gpio_manager.h"
#include "i2c_manager.h"
#include "led_manager.h"
#include "spi_manager.h"
#include "uart_manager.h"
using android::binder::Status;
using android::os::BnPeripheralManagerClient;
namespace android {
class PeripheralManagerClient : public BnPeripheralManagerClient {
public:
PeripheralManagerClient();
~PeripheralManagerClient();
// Gpio functions.
virtual Status ListGpio(std::vector<std::string>* gpios) override;
virtual Status OpenGpio(const std::string& name) override;
virtual Status ReleaseGpio(const std::string& name) override;
virtual Status SetGpioEdge(const std::string& name, int type) override;
virtual Status SetGpioActiveType(const std::string& name, int type) override;
virtual Status SetGpioDirection(const std::string& name,
int direction) override;
virtual Status SetGpioValue(const std::string& name, bool value) override;
virtual Status GetGpioValue(const std::string& name, bool* value) override;
virtual Status GetGpioPollingFd(const std::string& name,
::android::base::unique_fd* fd) override;
// Spi functions.
virtual Status ListSpiBuses(std::vector<std::string>* buses) override;
virtual Status OpenSpiDevice(const std::string& name) override;
virtual Status ReleaseSpiDevice(const std::string& name) override;
virtual Status SpiDeviceWriteByte(const std::string& name,
int8_t byte) override;
virtual Status SpiDeviceWriteBuffer(
const std::string& name,
const std::vector<uint8_t>& buffer) override;
virtual Status SpiDeviceTransfer(
const std::string& name,
const std::unique_ptr<std::vector<uint8_t>>& tx_data,
std::unique_ptr<std::vector<uint8_t>>* rx_data,
int len) override;
virtual Status SpiDeviceSetMode(const std::string& name, int mode) override;
virtual Status SpiDeviceSetFrequency(const std::string& name,
int frequency_hz) override;
virtual Status SpiDeviceSetBitJustification(const std::string& name,
bool lsb_first) override;
virtual Status SpiDeviceSetBitsPerWord(const std::string& name,
int nbits) override;
virtual Status SpiDeviceSetDelay(const std::string& name,
int delay_usecs) override;
// Led functions.
virtual Status ListLeds(std::vector<std::string>* leds) override;
virtual Status OpenLed(const std::string& name) override;
virtual Status ReleaseLed(const std::string& name) override;
virtual Status LedGetBrightness(const std::string& name,
int* brightness) override;
virtual Status LedGetMaxBrightness(const std::string& name,
int* max_brightness) override;
virtual Status LedSetBrightness(const std::string& name,
int brightness) override;
// I2c functions.
virtual Status ListI2cBuses(std::vector<std::string>* buses) override;
virtual Status OpenI2cDevice(const std::string& name,
int32_t address) override;
virtual Status ReleaseI2cDevice(const std::string& name,
int32_t address) override;
virtual Status I2cRead(const std::string& name,
int32_t address,
std::vector<uint8_t>* data,
int32_t size,
int32_t* bytes_read) override;
virtual Status I2cReadRegByte(const std::string& name,
int32_t address,
int32_t reg,
int32_t* val) override;
virtual Status I2cReadRegWord(const std::string& name,
int32_t address,
int32_t reg,
int32_t* val) override;
virtual Status I2cReadRegBuffer(const std::string& name,
int32_t address,
int32_t reg,
std::vector<uint8_t>* data,
int32_t size,
int32_t* bytes_read) override;
virtual Status I2cWrite(const std::string& name,
int32_t address,
const std::vector<uint8_t>& data,
int32_t* bytes_written) override;
virtual Status I2cWriteRegByte(const std::string& name,
int32_t address,
int32_t reg,
int8_t val) override;
virtual Status I2cWriteRegWord(const std::string& name,
int32_t address,
int32_t reg,
int32_t val) override;
virtual Status I2cWriteRegBuffer(const std::string& name,
int32_t address,
int32_t reg,
const std::vector<uint8_t>& data,
int32_t* bytes_written) override;
// Uart functions.
virtual Status ListUartDevices(std::vector<std::string>* devices) override;
virtual Status OpenUartDevice(const std::string& name) override;
virtual Status ReleaseUartDevice(const std::string& name) override;
virtual Status SetUartDeviceBaudrate(const std::string& name,
int32_t baudrate) override;
virtual Status UartDeviceWrite(const std::string& name,
const std::vector<uint8_t>& data,
int* bytes_written) override;
virtual Status UartDeviceRead(const std::string& name,
std::vector<uint8_t>* data,
int size,
int* bytes_read) override;
private:
std::map<std::string, std::unique_ptr<GpioPin>> gpios_;
std::map<std::pair<std::string, uint32_t>, std::unique_ptr<I2cDevice>>
i2c_devices_;
std::map<std::string, std::unique_ptr<SpiDevice>> spi_devices_;
std::map<std::string, std::unique_ptr<Led>> leds_;
std::map<std::string, std::unique_ptr<UartDevice>> uart_devices_;
DISALLOW_COPY_AND_ASSIGN(PeripheralManagerClient);
};
} // namespace android
#endif // SYSTEM_PERIPHERALMANAGER_DAEMON_PERIPHERAL_MANAGER_CLIENT_H_