ChimeraTK-DeviceAccess 03.28.00
Loading...
Searching...
No Matches
UioAccess.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3#pragma once
4
5#include <atomic>
6#include <filesystem>
7#include <memory>
8#include <string>
9
10namespace ChimeraTK {
12 class UioAccess {
13 private:
14 std::filesystem::path _deviceFilePath;
15 int _deviceFileDescriptor = 0;
16 void* _deviceUserBase = nullptr;
17 void* _deviceKernelBase = nullptr;
18 size_t _deviceMemSize = 0;
19 uint32_t _lastInterruptCount = 0;
20 std::atomic<bool> _opened{false};
21
23 void UioMMap();
24
26 void UioUnmap();
27
31 static std::string lookupUioDevFromDtNode(const std::string dtNodeNname);
32
37 uint32_t subtractUint32OverflowSafe(uint32_t minuend, uint32_t subtrahend);
38
42 uint32_t readUint32FromFile(std::string fileName);
43
47 uint64_t readUint64HexFromFile(std::string fileName);
48
49 public:
50 explicit UioAccess(const std::string& deviceFilePath);
51 ~UioAccess();
52
54 void open();
55
57 void close();
58
64 void read(uint64_t map, uint64_t address, int32_t* data, size_t sizeInBytes);
65
71 void write(uint64_t map, uint64_t address, int32_t const* data, size_t sizeInBytes);
72
76 uint32_t waitForInterrupt(int timeoutMs);
77
79 void clearInterrupts();
80
83 std::string getDeviceFilePath();
84 };
85} // namespace ChimeraTK
Implements a generic userspace interface for UIO devices.
Definition UioAccess.h:12
void open()
Opens UIO device for read and write operations and interrupt handling.
Definition UioAccess.cc:43
std::string getDeviceFilePath()
Return UIO device file path.
Definition UioAccess.cc:156
uint32_t waitForInterrupt(int timeoutMs)
Wait for hardware interrupt to occur within specified timeout period.
Definition UioAccess.cc:113
void clearInterrupts()
Clear all pending interrupts.
Definition UioAccess.cc:147
void close()
Closes UIO device.
Definition UioAccess.cc:67