GCC Code Coverage Report


Directory: src/gate/
File: src/gate/io/cxx_gpiodevices_spi.cpp
Date: 2026-10-19 17:06:30
Exec Total Coverage
Lines: 6 37 16.2%
Functions: 2 12 16.7%
Branches: 4 32 12.5%

Line Branch Exec Source
1 /* GATE PROJECT LICENSE:
2 +----------------------------------------------------------------------------+
3 | Copyright (c) 2018-2026, Stefan Meislinger <sm@opengate.at> |
4 | All rights reserved. |
5 | |
6 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met:|
8 | |
9 | 1. Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. |
11 | 2. Redistributions in binary form must reproduce the above copyright |
12 | notice, this list of conditions and the following disclaimer in the |
13 | documentation and/or other materials provided with the distribution. |
14 | |
15 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"|
16 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
17 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
18 | ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
19 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
20 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
21 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
23 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
25 | THE POSSIBILITY OF SUCH DAMAGE. |
26 +----------------------------------------------------------------------------+
27 */
28
29 #include "gate/io/gpiodevices.hpp"
30 #include "gate/exceptions.hpp"
31 #include "gate/strings.hpp"
32
33 namespace gate
34 {
35 namespace io
36 {
37
38 1 String SPIDevice::getDefaultDevicePath()
39 {
40 gate_string_t path;
41
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 result_t const res = gate_spidevice_default_path(&path);
42
2/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
1 GATEXX_CHECK_ERROR(res);
43 ✗ return String::createFrom(path);
44 }
45
46 1 SPIDevice::SPIDevice(String const& devicePath, enumint_t flags)
47 {
48 1 result_t const res = gate_spidevice_open(devicePath.c_impl(), flags, &this->impl);
49
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 GATEXX_CHECK_ERROR(res);
50 ✗ }
51 ✗ SPIDevice::~SPIDevice() noexcept
52 {
53 ✗ gate_spidevice_close(&this->impl);
54 ✗ }
55
56 ✗ gate_spidevice_t* SPIDevice::c_impl()
57 {
58 ✗ return &this->impl;
59 }
60
61 enumint_t const SPIDevice::TransactionFlag_LSB = GATE_SPIDEVICE_FLAG_LSB;
62
63 ✗ VoidResult SPIDevice::tryBeginTransaction(uint64_t speed, ModeEnum mode, enumint_t flags)
64 {
65 ✗ result_t const res = gate_spidevice_begin_transaction(&this->impl, speed, static_cast<enumint_t>(mode), flags);
66 ✗ return makeResult(res);
67 }
68
69 ✗ VoidResult SPIDevice::tryEndTransaction()
70 {
71 ✗ result_t const res = gate_spidevice_end_transaction(&this->impl);
72 ✗ return makeResult(res);
73 }
74
75 ✗ VoidResult SPIDevice::tryTransfer(void const* sendBuffer, void* receiveBuffer, size_t bufferLength)
76 {
77 ✗ result_t const res = gate_spidevice_transfer(&this->impl, sendBuffer, receiveBuffer, bufferLength);
78 ✗ return makeResult(res);
79 }
80
81 ✗ Result<uint8_t> SPIDevice::tryTransfer(uint8_t sendByte)
82 {
83 ✗ uint8_t receiveByte = 0;
84 ✗ result_t const res = gate_spidevice_transfer(&this->impl, &sendByte, &receiveByte, 1);
85 ✗ return makeResult(res, receiveByte);
86 }
87
88 ✗ void SPIDevice::beginTransaction(uint64_t speed, ModeEnum mode, enumint_t flags)
89 {
90 ✗ this->tryBeginTransaction(speed, mode, flags).checkException("SPIDevice::beginTransaction");
91 ✗ }
92
93 ✗ void SPIDevice::endTransaction()
94 {
95 ✗ this->tryEndTransaction().checkException("SPIDevice::endTransaction");
96 ✗ }
97
98 ✗ void SPIDevice::transfer(void const* sendBuffer, void* receiveBuffer, size_t bufferLength)
99 {
100 ✗ this->tryTransfer(sendBuffer, receiveBuffer, bufferLength).checkException("SPIDevice::transfer");
101 ✗ }
102
103 ✗ uint8_t SPIDevice::transfer(uint8_t sendByte)
104 {
105 ✗ return this->tryTransfer(sendByte).valueOrExcept();
106 }
107
108 } // end of namespace io
109 } // end of namespace gate
110