blob: e18ec4a979de85897e3a7a12954cd80d29a929c1 [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_PIN_MUX_MANAGER_H_
#define SYSTEM_PERIPHERALMANAGER_DAEMON_PIN_MUX_MANAGER_H_
#include <stdint.h>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <vector>
#include <base/macros.h>
#include <hardware/peripheral_io.h>
namespace android {
struct Pin {
bool in_use;
bool gpio;
pin_mux_callbacks callbacks;
};
class PinMuxManager {
public:
friend class PinMuxManagerTest;
~PinMuxManager();
// Get the singleton.
static PinMuxManager* GetPinMuxManager();
// The following Register* functions as used to configure
// the pin mux configuation. These are called by the during
// BSP setup, using the HAL.
bool RegisterPin(std::string name, bool gpio, pin_mux_callbacks callbacks);
bool RegisterPinGroup(std::string name, std::set<std::string> pins);
bool RegisterSource(std::string name, std::set<std::string> groups);
// Helper that registers a source with a default group of the same name.
bool RegisterSimpleSource(std::string name, std::set<std::string> pins);
// Called by the device managers, e.g SpiManager.
// These are used to configure the pin muxing at runtime.
bool SetSource(std::string name, std::string group);
bool SetSimpleSource(std::string name);
void ReleaseSource(std::string name, std::string group);
// Used by the GpioManager to enable Gpio pins.
bool SetGpio(std::string name);
void ReleaseGpio(std::string name);
bool SetGpioDirection(std::string name, bool output);
private:
// Private constuctor as this class is accessed via a singleton.
PinMuxManager();
std::map<std::string, Pin> pins_;
std::map<std::string, std::set<std::string>> groups_;
std::map<std::string, std::set<std::string>> sources_;
DISALLOW_COPY_AND_ASSIGN(PinMuxManager);
};
} // namespace android
#endif // SYSTEM_PERIPHERALMANAGER_DAEMON_PIN_MUX_MANAGER_H_