tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
gpio.hpp
[詳解]
1#pragma once
2
3#include "main.h"
4
5#include <array>
6#include <cstdint>
7#include <functional>
8
9#include "tutrcos/utility.hpp"
10
11namespace tutrcos {
12namespace peripheral {
13
39class GPIO {
40public:
41 GPIO(GPIO_TypeDef *port, uint16_t pin) : port_{port}, pin_{pin} {
42 auto gpio =
43 std::find(get_instances().begin(), get_instances().end(), nullptr);
44 TUTRCOS_VERIFY(gpio != get_instances().end());
45 *gpio = this;
46 }
47
49 auto gpio = std::find(get_instances().begin(), get_instances().end(), this);
50 TUTRCOS_VERIFY(gpio != get_instances().end());
51 *gpio = nullptr;
52 }
53
54 void write(bool state) {
55 HAL_GPIO_WritePin(port_, pin_, static_cast<GPIO_PinState>(state));
56 }
57
58 bool read() { return HAL_GPIO_ReadPin(port_, pin_); }
59
60 void toggle() { HAL_GPIO_TogglePin(port_, pin_); }
61
62 void set_callback(std::function<void()> &&callback) {
63 callback_ = std::move(callback);
64 }
65
66 GPIO_TypeDef *get_hal_port() { return port_; }
67
68 uint16_t get_hal_pin() { return pin_; }
69
70private:
71 GPIO_TypeDef *port_;
72 uint16_t pin_;
73 std::function<void()> callback_;
74
75 static inline std::array<GPIO *, 20> &get_instances() {
76 static std::array<GPIO *, 20> instances{};
77 return instances;
78 }
79
80 friend void ::HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
81};
82
83} // namespace peripheral
84} // namespace tutrcos
Definition gpio.hpp:39
void write(bool state)
Definition gpio.hpp:54
GPIO_TypeDef * get_hal_port()
Definition gpio.hpp:66
~GPIO()
Definition gpio.hpp:48
GPIO(GPIO_TypeDef *port, uint16_t pin)
Definition gpio.hpp:41
uint16_t get_hal_pin()
Definition gpio.hpp:68
void set_callback(std::function< void()> &&callback)
Definition gpio.hpp:62
void toggle()
Definition gpio.hpp:60
bool read()
Definition gpio.hpp:58
Definition kernel.hpp:7
#define TUTRCOS_VERIFY(expr)
Definition utility.hpp:16