#ifndef HANDLE_H
#define HANDLE_H
#include <boot/vfs.h>
#ifdef __cplusplus
class Handle : public Node {
public:
Handle(int handle);
Handle();
virtual ~Handle();
void SetHandle(int handle);
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
virtual off_t Size() const;
protected:
int fHandle;
};
class CharHandle : public Handle {
public:
CharHandle(int handle);
CharHandle();
virtual ~CharHandle();
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
protected:
};
class ExecDevice : public Node {
public:
ExecDevice(struct IORequest *ioRequest);
ExecDevice(size_t requestSize);
ExecDevice();
virtual ~ExecDevice();
status_t AllocRequest(size_t requestSize);
status_t Open(const char *name, unsigned long unit = 0,
unsigned long flags = 0);
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize);
virtual off_t Size() const;
struct IORequest *Request() const { return fIORequest; };
struct IOStdReq *StdRequest() const { return fIOStdReq; };
status_t Do(void);
status_t Clear(void);
protected:
struct IORequest *fIORequest;
struct IOStdReq *fIOStdReq;
};
#endif
#endif