xref: /aosp_15_r20/external/pigweed/pw_digital_io_rp2040/digital_io_test.cc (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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 #include "pw_digital_io/digital_io.h"
15 
16 #include "pw_digital_io_rp2040/digital_io.h"
17 #include "pw_result/result.h"
18 #include "pw_unit_test/framework.h"
19 
20 using pw::digital_io::Rp2040DigitalIn;
21 using pw::digital_io::Rp2040DigitalInOut;
22 
23 namespace pw::digital_io {
24 namespace {
25 
26 constexpr Rp2040Config output_pin_config{
27     .pin = 15,
28     .polarity = Polarity::kActiveLow,
29 };
30 constexpr Rp2040Config input_pin_config{
31     .pin = 16,
32     .polarity = Polarity::kActiveHigh,
33 };
34 Rp2040DigitalInOut output_pin(output_pin_config);
35 Rp2040DigitalIn input_pin(input_pin_config);
36 
TEST(DigitalIoTest,PhysicalToLogical)37 TEST(DigitalIoTest, PhysicalToLogical) {
38   ASSERT_EQ(State::kActive, output_pin_config.PhysicalToLogical(false));
39   ASSERT_EQ(State::kInactive, output_pin_config.PhysicalToLogical(true));
40   ASSERT_EQ(State::kActive, input_pin_config.PhysicalToLogical(true));
41   ASSERT_EQ(State::kInactive, input_pin_config.PhysicalToLogical(false));
42 }
43 
TEST(DigitalIoTest,LogicalToPhysical)44 TEST(DigitalIoTest, LogicalToPhysical) {
45   ASSERT_EQ(false, output_pin_config.LogicalToPhysical(State::kActive));
46   ASSERT_EQ(true, output_pin_config.LogicalToPhysical(State::kInactive));
47   ASSERT_EQ(true, input_pin_config.LogicalToPhysical(State::kActive));
48   ASSERT_EQ(false, input_pin_config.LogicalToPhysical(State::kInactive));
49 }
50 
TEST(DigitalIoTest,Init)51 TEST(DigitalIoTest, Init) {
52   // Simple test only meant to ensure module is compiled.
53   ASSERT_EQ(OkStatus(), output_pin.Enable());
54   ASSERT_EQ(OkStatus(), output_pin.SetState(pw::digital_io::State::kActive));
55 
56   ASSERT_EQ(OkStatus(), input_pin.Enable());
57   Result<State> state_result = input_pin.GetState();
58   ASSERT_EQ(OkStatus(), state_result.status());
59   ASSERT_EQ(State::kInactive, state_result.value());
60 }
61 
62 }  // namespace
63 }  // namespace pw::digital_io
64