From b304bc013ef8022131ef0a146f20c6bad7ac45d5 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Wed, 16 Jun 2021 10:34:07 +0100 Subject: libcamera/base: Move File to base library The File abstraction is a base helper and not part of the libcamera API. Move it to to allow usage by users of the base library. Reviewed-by: Hirokazu Honda Reviewed-by: Paul Elder Reviewed-by: Laurent Pinchart Signed-off-by: Kieran Bingham --- include/libcamera/base/file.h | 79 ++++++++++++++++++++++++++++++++++++++ include/libcamera/base/meson.build | 1 + 2 files changed, 80 insertions(+) create mode 100644 include/libcamera/base/file.h (limited to 'include/libcamera/base') diff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h new file mode 100644 index 00000000..5cd98579 --- /dev/null +++ b/include/libcamera/base/file.h @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2020, Google Inc. + * + * file.h - File I/O operations + */ +#ifndef __LIBCAMERA_BASE_FILE_H__ +#define __LIBCAMERA_BASE_FILE_H__ + +#include + +#include +#include + +#include + +#include + +namespace libcamera { + +class File +{ +public: + enum MapFlag { + MapNoOption = 0, + MapPrivate = (1 << 0), + }; + + enum OpenMode { + NotOpen = 0, + ReadOnly = (1 << 0), + WriteOnly = (1 << 1), + ReadWrite = ReadOnly | WriteOnly, + }; + + File(const std::string &name); + File(); + ~File(); + + const std::string &fileName() const { return name_; } + void setFileName(const std::string &name); + bool exists() const; + + bool open(OpenMode mode); + bool isOpen() const { return fd_ != -1; } + OpenMode openMode() const { return mode_; } + void close(); + + int error() const { return error_; } + ssize_t size() const; + + off_t pos() const; + off_t seek(off_t pos); + + ssize_t read(const Span &data); + ssize_t write(const Span &data); + + Span map(off_t offset = 0, ssize_t size = -1, + MapFlag flags = MapNoOption); + bool unmap(uint8_t *addr); + + static bool exists(const std::string &name); + +private: + LIBCAMERA_DISABLE_COPY(File) + + void unmapAll(); + + std::string name_; + int fd_; + OpenMode mode_; + + int error_; + std::map maps_; +}; + +} /* namespace libcamera */ + +#endif /* __LIBCAMERA_BASE_FILE_H__ */ diff --git a/include/libcamera/base/meson.build b/include/libcamera/base/meson.build index 7a858dcb..6fc6c138 100644 --- a/include/libcamera/base/meson.build +++ b/include/libcamera/base/meson.build @@ -7,6 +7,7 @@ libcamera_base_headers = files([ 'class.h', 'event_dispatcher.h', 'event_dispatcher_poll.h', + 'file.h', 'log.h', 'message.h', 'object.h', -- cgit v1.2.1