Fix formatting

pull/9/head
Alex Voinea 2021-05-13 11:40:53 +03:00
parent 65e45b2cc2
commit 5b2a7d0cf2
1 changed files with 48 additions and 53 deletions

View File

@ -4,73 +4,68 @@
namespace hal { namespace hal {
namespace gpio { namespace gpio {
typedef struct typedef struct
{ {
volatile uint8_t PINx; volatile uint8_t PINx;
volatile uint8_t DDRx; volatile uint8_t DDRx;
volatile uint8_t PORTx; volatile uint8_t PORTx;
} GPIO_TypeDef; } GPIO_TypeDef;
enum class Mode enum class Mode {
{
input = 0, input = 0,
output, output,
}; };
enum class Pull enum class Pull {
{
none = 0, none = 0,
up, up,
down, //not available on the AVR down, //not available on the AVR
}; };
enum class Level enum class Level {
{
low = 0, low = 0,
high, high,
}; };
struct GPIO_InitTypeDef struct GPIO_InitTypeDef {
{
Mode mode; Mode mode;
Pull pull; Pull pull;
Level level; Level level;
inline GPIO_InitTypeDef() : mode(Mode::input), pull(Pull::none){}; inline GPIO_InitTypeDef()
inline GPIO_InitTypeDef(Mode mode, Pull pull) : mode(mode), pull(pull) {}; : mode(Mode::input)
inline GPIO_InitTypeDef(Mode mode, Level level) : mode(mode), level(level) {}; , pull(Pull::none) {};
}; inline GPIO_InitTypeDef(Mode mode, Pull pull)
: mode(mode)
, pull(pull) {};
inline GPIO_InitTypeDef(Mode mode, Level level)
: mode(mode)
, level(level) {};
};
inline void WritePin(GPIO_TypeDef * const port, const uint8_t pin, Level level) inline void WritePin(GPIO_TypeDef *const port, const uint8_t pin, Level level) {
{
if (level == Level::high) if (level == Level::high)
port->PORTx |= (1 << pin); port->PORTx |= (1 << pin);
else else
port->PORTx &= ~(1 << pin); port->PORTx &= ~(1 << pin);
} }
inline Level ReadPin(GPIO_TypeDef * const port, const uint8_t pin) inline Level ReadPin(GPIO_TypeDef *const port, const uint8_t pin) {
{
return (Level)(port->PINx & (1 << pin)); return (Level)(port->PINx & (1 << pin));
} }
inline void TogglePin(GPIO_TypeDef * const port, const uint8_t pin) inline void TogglePin(GPIO_TypeDef *const port, const uint8_t pin) {
{
port->PINx |= (1 << pin); port->PINx |= (1 << pin);
} }
inline void Init(GPIO_TypeDef * const port, const uint8_t pin, GPIO_InitTypeDef GPIO_Init) inline void Init(GPIO_TypeDef *const port, const uint8_t pin, GPIO_InitTypeDef GPIO_Init) {
{ if (GPIO_Init.mode == Mode::output) {
if (GPIO_Init.mode == Mode::output)
{
WritePin(port, pin, GPIO_Init.level); WritePin(port, pin, GPIO_Init.level);
port->DDRx |= (1 << pin); port->DDRx |= (1 << pin);
} } else {
else
{
port->DDRx &= ~(1 << pin); port->DDRx &= ~(1 << pin);
WritePin(port, pin, (Level)GPIO_Init.pull); WritePin(port, pin, (Level)GPIO_Init.pull);
} }
} }
} }
} }