Pigweed
 
Loading...
Searching...
No Matches
digital_io.h
1// Copyright 2023 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14#pragma once
15
16#include "fsl_gpio.h"
17#include "pw_containers/intrusive_forward_list.h"
18#include "pw_digital_io/digital_io.h"
19
20namespace pw::digital_io {
21
22PW_EXTERN_C void GPIO_INTA_DriverIRQHandler();
23
30 public:
37 McuxpressoDigitalOut(GPIO_Type* base,
38 uint32_t port,
39 uint32_t pin,
40 pw::digital_io::State initial_state);
41
43 bool is_enabled() const { return enabled_; }
44
45 private:
46 pw::Status DoEnable(bool enable) override;
47 pw::Status DoSetState(pw::digital_io::State state) override;
48
49 GPIO_Type* base_;
50 const uint32_t port_;
51 const uint32_t pin_;
52 const pw::digital_io::State initial_state_;
53 bool enabled_ = false;
54};
55
64 public:
70 McuxpressoDigitalIn(GPIO_Type* base, uint32_t port, uint32_t pin);
71
73 bool is_enabled() const { return enabled_; }
74
75 private:
76 pw::Status DoEnable(bool enable) override;
77 pw::Result<pw::digital_io::State> DoGetState() override;
78
79 GPIO_Type* base_;
80 const uint32_t port_;
81 const uint32_t pin_;
82 bool enabled_ = false;
83};
84
102 public pw::IntrusiveForwardList<McuxpressoDigitalInOutInterrupt>::Item {
103 public:
116 uint32_t port,
117 uint32_t pin,
118 bool output);
119
121 bool is_enabled() const { return enabled_; }
122
123 private:
124 friend void GPIO_INTA_DriverIRQHandler();
125 pw::Status DoEnable(bool enable) override;
126 pw::Result<pw::digital_io::State> DoGetState() override;
127 pw::Status DoSetState(pw::digital_io::State state) override;
129 pw::digital_io::InterruptTrigger trigger,
130 pw::digital_io::InterruptHandler&& handler) override;
132
133 void ConfigureInterrupt() const;
134
135 GPIO_Type* base_;
136 const uint32_t port_;
137 const uint32_t pin_;
138 const bool output_;
139 pw::digital_io::InterruptTrigger trigger_;
140 pw::digital_io::InterruptHandler interrupt_handler_;
141 bool enabled_ = false;
142};
143
144} // namespace pw::digital_io
Definition: intrusive_forward_list.h:86
Definition: status.h:85
Definition: digital_io.h:513
Definition: digital_io.h:709
Definition: digital_io.h:590
Definition: digital_io.h:63
bool is_enabled() const
Returns true if the input is enabled.
Definition: digital_io.h:73
pw::Status DoEnable(bool enable) override
McuxpressoDigitalIn(GPIO_Type *base, uint32_t port, uint32_t pin)
pw::Result< pw::digital_io::State > DoGetState() override
pw::Status DoSetInterruptHandler(pw::digital_io::InterruptTrigger trigger, pw::digital_io::InterruptHandler &&handler) override
pw::Status DoEnable(bool enable) override
McuxpressoDigitalInOutInterrupt(GPIO_Type *base, uint32_t port, uint32_t pin, bool output)
bool is_enabled() const
Returns true if the line is enabled (in any state).
Definition: digital_io.h:121
pw::Status DoEnableInterruptHandler(bool enable) override
pw::Result< pw::digital_io::State > DoGetState() override
pw::Status DoSetState(pw::digital_io::State state) override
Definition: digital_io.h:29
pw::Status DoSetState(pw::digital_io::State state) override
pw::Status DoEnable(bool enable) override
McuxpressoDigitalOut(GPIO_Type *base, uint32_t port, uint32_t pin, pw::digital_io::State initial_state)
bool is_enabled() const
Returns true if the output is enabled.
Definition: digital_io.h:43