The Pedigree Project 0.1
include/pedigree/kernel/machine/Serial.h
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#ifndef MACHINE_SERIAL_H
21#define MACHINE_SERIAL_H
22
23#include "pedigree/kernel/compiler.h"
24#include "pedigree/kernel/processor/types.h"
25#include "pedigree/kernel/utilities/Cord.h"
26#include "pedigree/kernel/utilities/StaticCord.h"
27#include "pedigree/kernel/utilities/StaticString.h"
28
32class EXPORTED_PUBLIC Serial {
33 public:
34 virtual ~Serial();
35
37 virtual void setBase(uintptr_t nBaseAddr) = 0;
38 virtual bool hasData() = 0;
39 virtual char read() = 0;
40 virtual char readNonBlock() = 0;
41 virtual void write(char c) = 0;
42 virtual void write_str(const char* c);
43 virtual void write_str(const char* c, size_t len);
44 virtual void write_str(const Cord& cord);
45
46 template <unsigned int N>
47 void write_str(const StaticCord<N>& cord) {
48 for (auto it = cord.segbegin(); it != cord.segend(); ++it) {
49 write_str(it.ptr(), it.length());
50 }
51 }
52
53 // Const string overload (so no strlen needed)
54 template <unsigned int N>
55 void write_str(const char (&c)[N]) {
56 write_str(c, N - 1);
57 }
58
59 template <unsigned int N>
60 void write_str(const StaticString<N>(&c)) {
61 write_str(static_cast<const char*>(c), c.length());
62 }
63};
64
65#endif
Definition Cord.h:33
virtual void setBase(uintptr_t nBaseAddr)=0