12#if defined(OS_USE_OS_APP_CONFIG_H)
13#include <cmsis-plus/os-app-config.h>
28#pragma clang diagnostic ignored "-Wc++98-compat"
43#if defined(OS_TRACE_POSIX_IO_DEVICE)
44 trace::printf (
"device::%s(\"%s\")=%p\n", __func__, name_,
this);
50#if defined(OS_TRACE_POSIX_IO_DEVICE)
54 registry_links_.unlink ();
66 va_start (args, oflag);
67 int ret =
vopen (path, oflag, args);
76#if defined(OS_TRACE_POSIX_IO_DEVICE)
77 trace::printf (
"device::%s(\"%s\") @%p\n", __func__, path ? path :
"",
84 if (
impl ().open_count_ == 0)
100 ++(
impl ().open_count_);
102#if defined(OS_TRACE_POSIX_IO_DEVICE)
104 path ? path :
"",
this, ret);
113#if defined(OS_TRACE_POSIX_IO_DEVICE)
120 if (
impl ().open_count_ == 1)
125 if (
impl ().open_count_ > 0)
128 --(
impl ().open_count_);
139 va_start (args, request);
140 int ret =
vioctl (request, args);
146#pragma GCC diagnostic push
147#if defined(__clang__)
148#elif defined(__GNUC__)
149#pragma GCC diagnostic ignored "-Wsuggest-final-methods"
154#if defined(OS_TRACE_POSIX_IO_DEVICE)
155 trace::printf (
"device::%s(%d) @%p\n", __func__, request,
this);
158 if (
impl ().open_count_ == 0)
168#pragma GCC diagnostic pop
173#if defined(OS_TRACE_POSIX_IO_DEVICE)
177 if (
impl ().open_count_ == 0)
191 assert (
name !=
nullptr);
192 assert (name_ !=
nullptr);
194 return (std::strcmp (
name, name_) == 0);
201#if defined(OS_TRACE_POSIX_IO_DEVICE)
208#if defined(OS_TRACE_POSIX_IO_DEVICE)
218 return (open_count_ > 0);
virtual int do_vioctl(int request, std::va_list args)=0
virtual ~device_impl() override
virtual bool do_is_opened(void) override
virtual void do_sync(void)=0
virtual int do_vopen(const char *path, int oflag, std::va_list args)=0
device(device_impl &impl, type t, const char *name)
device_impl & impl(void) const
virtual int close(void) override
virtual bool match_name(const char *name) const
int vopen(const char *path, int oflag, std::va_list args)
virtual int vioctl(int request, std::va_list args)
int ioctl(int request,...)
virtual ~device() override
int open(const char *path=nullptr, int oflag=0,...)
const char * name(void) const
file_descriptor_t file_descriptor(void) const
io * alloc_file_descriptor(void)
int printf(const char *format,...)
Write a formatted string to the trace device.