You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
1.3 KiB

#ifndef _GPIO_H_
#define _GPIO_H_
#include <unistd.h>
#include <stdint.h>
#include <memory>
#include <ostream>
#include <iostream>
#include "../../config.h"
class Gpio
{
public:
enum pinMode
{
input,
output
};
enum pinState
{
pushPull,
openDrain,
floating,
analog
};
enum pinPullUpDown
{
none,
pullUp,
pullDown
};
enum pinSpeed
{
slow,
normal,
fast,
veryFast
};
enum errors
{
pinNotDeclared,
pinNotReachable,
pinNoPullUpDown,
pinNotAnalog,
pinNotDigital,
pinTooFast,
pinBocked,
pinAlreadyUsed
};
Gpio();
~Gpio();
void setMode(uint8_t gpioNo, pinMode mode);
void setOutputState(uint8_t gpioNo, pinState state);
void setPullUpDonw(uint8_t gpioNo, pinPullUpDown resistance);
void setSpeed(uint8_t gpioNo, pinSpeed speed);
void config(uint8_t gpioNo, pinMode mode, pinState state, pinPullUpDown resistance, pinSpeed speed);
uint8_t readPin(uint8_t gpioNo);
void writePin(uint8_t gpioNo, uint8_t value);
uint16_t readRange(uint8_t start, uint8_t stop);
void writeRange(uint8_t start, uint8_t stop, uint16_t value);
void pinBlock(uint8_t gpioNo);
void pinUnblock(uint8_t gpioNo);
private:
void throwError(errors errNo);
class gpioImpl;
std::unique_ptr<gpioImpl> gpioPimpl;
};
#endif // _GPIO_H_