StuBS
SerialStream Class Reference

Console (VT100 compatible) via Serial interface. More...

#include <device/serialstream.h>

Inheritance diagram for SerialStream:
[legend]
Collaboration diagram for SerialStream:
[legend]

Public Types

enum  Attrib {
  RESET = 0 ,
  BRIGHT = 1 ,
  DIM = 2 ,
  UNDERSCORE = 4 ,
  BLINK = 5 ,
  REVERSE = 7 ,
  HIDDEN = 8
}
 Attributes can be used to influence the display of the output. More...
 
enum  Color {
  BLACK = 0 ,
  RED = 1 ,
  GREEN = 2 ,
  YELLOW = 3 ,
  BLUE = 4 ,
  MAGENTA = 5 ,
  CYAN = 6 ,
  WHITE = 7
}
 Color codes. More...
 
- Public Types inherited from Serial
enum  ComPort {
  COM1 = 0x3f8 ,
  COM2 = 0x2f8 ,
  COM3 = 0x3e8 ,
  COM4 = 0x2e8
}
 COM-Port. More...
 
enum  BaudRate {
  BAUD_300 = 384 ,
  BAUD_600 = 192 ,
  BAUD_1200 = 96 ,
  BAUD_2400 = 48 ,
  BAUD_4800 = 24 ,
  BAUD_9600 = 12 ,
  BAUD_19200 = 6 ,
  BAUD_38400 = 3 ,
  BAUD_57600 = 2 ,
  BAUD_115200 = 1
}
 Transmission speed. More...
 
enum  DataBits {
  DATA_5BIT = 0 ,
  DATA_6BIT = 1 ,
  DATA_7BIT = 2 ,
  DATA_8BIT = 3
}
 Number of data bits per character. More...
 
enum  StopBits {
  STOP_1BIT = 0 ,
  STOP_1_5BIT = 4 ,
  STOP_2BIT = 4
}
 Number of stop bits per character. More...
 
enum  Parity {
  PARITY_NONE = 0 ,
  PARITY_ODD = 8 ,
  PARITY_EVEN = 24 ,
  PARITY_MARK = 40 ,
  PARITY_SPACE = 56
}
 parity bit More...
 

Public Member Functions

 SerialStream (ComPort port=COM1, BaudRate baud_rate=BAUD_115200, DataBits data_bits=DATA_8BIT, StopBits stop_bits=STOP_1BIT, Parity parity=PARITY_NONE)
 Constructor for the VT100-compatible console.
 
void flush () override
 Method to output the buffer contents of the base class Stringbuffer.
 
void setForeground (Color c)
 Change foreground color (for subsequent output)
 
void setBackground (Color c)
 Change background color (for subsequent output)
 
void setAttribute (Attrib a)
 Change text attribute (for subsequent output)
 
void reset ()
 Reset terminal.
 
void setPos (int x, int y)
 Set the cursor position.
 
bool getPos (int &x, int &y)
 Read the current cursor position.
 
void print (char *str, int length)
 Display multiple characters in the window starting at the current cursor position.
 
void listen (bool active=true)
 Initialize the interrupt driven serial connection.
 
bool prologue () override
 Prologue for serial receive interrupts.
 
void epilogue () override
 Epilogue for serial receive interrupts.
 
- Public Member Functions inherited from OutputStream
 OutputStream ()
 Default constructor. Initial number system is decimal.
 
virtual ~OutputStream ()
 Destructor.
 
OutputStreamoperator<< (char c)
 Print a single character.
 
OutputStreamoperator<< (unsigned char c)
 Print a single character.
 
OutputStreamoperator<< (const char *string)
 Printing a null-terminated string.
 
OutputStreamoperator<< (bool b)
 Print a boolean value.
 
OutputStreamoperator<< (short ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (unsigned short ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (int ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (unsigned int ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (long ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (unsigned long ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (long long ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (unsigned long long ival)
 Print an integral number in radix base
 
OutputStreamoperator<< (const void *ptr)
 Print a pointer as hexadecimal number.
 
OutputStreamoperator<< (OutputStream &(*f)(OutputStream &))
 Calls one of the manipulator functions.
 
- Public Member Functions inherited from Stringbuffer
virtual ~Stringbuffer ()
 Destructor (nothing to do here)
 
- Public Member Functions inherited from Serial
 Serial (ComPort port=COM1, BaudRate baud_rate=BAUD_115200, DataBits data_bits=DATA_8BIT, StopBits stop_bits=STOP_1BIT, Parity parity=PARITY_NONE)
 Constructor.
 
int read (bool blocking=true)
 Read one byte from the serial interface.
 
int write (char out, bool blocking=true)
 Write one byte to the serial interface.
 
bool receiveInterrupt (bool enable)
 Activate or deactivate interrupts on data reception.
 
- Public Member Functions inherited from Gate
 Gate ()
 Constructor.
 
virtual ~Gate ()
 Destructor.
 
bool is_queued () const
 Status about the epilogue.
 
void set_queued (bool val)
 Set epilogue status.
 

Protected Attributes

BBuffer< char, 16 > prologue_chars
 Buffer for incoming characters in prologue.
 
- Protected Attributes inherited from Stringbuffer
char buffer [80]
 buffer containing characters that will be printed upon flush()
 
long unsigned pos
 current position in the buffer
 
- Protected Attributes inherited from Serial
const ComPort port
 Selected COM port.
 

Private Member Functions

void write_number (int num)
 Helper to send a multi-digit number as human readable ASCII characters.
 

Additional Inherited Members

- Public Attributes inherited from OutputStream
int base
 Number system used for printing integral numbers (one of 2, 8, 10, or 16)
 
- Protected Member Functions inherited from Stringbuffer
 Stringbuffer ()
 Constructor; Marks the buffer as empty.
 
void put (char c)
 Inserts a character into the buffer.
 
- Protected Member Functions inherited from Queue< T, ContainerType >::Node
 Node ()
 

Detailed Description

Console (VT100 compatible) via Serial interface.

This class allows to connect a VT100-compatible display terminal via the serial interface.

The utility 'screen' can be used to attach a terminal to an interface at a specified connection speed: screen /dev/ttyS0 115200

Color and position can be adjusted with the help of escape codes.

Member Enumeration Documentation

◆ Attrib

Attributes can be used to influence the display of the output.

Note
The attributes might not be supported or have a different effect depending on the terminal emulator!
Enumerator
RESET 

Turn off character attributes.

BRIGHT 

Bold.

DIM 

Low intensity (dimmed)

UNDERSCORE 

Underline.

BLINK 

Blink (slow)

REVERSE 

Swap fore & background.

HIDDEN 

Concealed.

◆ Color

Color codes.

Default VT100 supports eight colors for both foreground and background (later versions 256 [8 bit] and even true color [32 bit]). The actual color is affected by the attributes and can look significantly different depending on the terminal emulator.

Enumerator
BLACK 
RED 
GREEN 
YELLOW 
BLUE 
MAGENTA 
CYAN 
WHITE 

Constructor & Destructor Documentation

◆ SerialStream()

SerialStream::SerialStream ( ComPort  port = COM1,
BaudRate  baud_rate = BAUD_115200,
DataBits  data_bits = DATA_8BIT,
StopBits  stop_bits = STOP_1BIT,
Parity  parity = PARITY_NONE 
)
explicit

Constructor for the VT100-compatible console.

Sets up the serial connection as well

Member Function Documentation

◆ write_number()

void SerialStream::write_number ( int  num)
private

Helper to send a multi-digit number as human readable ASCII characters.

Parameters
numNumber to send

◆ flush()

void SerialStream::flush ( )
overridevirtual

Method to output the buffer contents of the base class Stringbuffer.

The method is automatically called when the buffer is full, but can also be called explicitly to force output of the current buffer.

Implements OutputStream.

◆ setForeground()

void SerialStream::setForeground ( Color  c)

Change foreground color (for subsequent output)

Parameters
cColor

◆ setBackground()

void SerialStream::setBackground ( Color  c)

Change background color (for subsequent output)

Parameters
cColor

◆ setAttribute()

void SerialStream::setAttribute ( Attrib  a)

Change text attribute (for subsequent output)

Parameters
aAttribute

◆ reset()

void SerialStream::reset ( )

Reset terminal.

Clear screen, place cursor at the beginning and reset colors and attributes to the default value.

◆ setPos()

void SerialStream::setPos ( int  x,
int  y 
)

Set the cursor position.

Parameters
xColumn in window
yRow in window

◆ getPos()

bool SerialStream::getPos ( int &  x,
int &  y 
)

Read the current cursor position.

It is possible to receive the current cursor position via a special escape code: Request by sending \e[6n, answer will be \e[y;xR with y (row) and x (column) as human readable ASCII character number.

However, depending on the implementation, it may be possible that the system waits endlessly due to an disconnected terminal or data transmission error.

Parameters
xColumn in window
yRow in window
Returns
true if position was successfully received

◆ print()

void SerialStream::print ( char *  str,
int  length 
)

Display multiple characters in the window starting at the current cursor position.

This method can be used to output a string, starting at the current cursor position. Since the string does not need to contain a '\0' termination (as it is usually the case in C), the parameter length is required to specify the number of characters in the string.

The text is displayed using the previously configured attributes, fore- and background color.

A line break will occur wherever the character \n is inserted in the text to be output (for compatibility reasons a \r is automatically appended).

Todo:
Implement Method
Parameters
strString to output
lengthlength of string

◆ listen()

void SerialStream::listen ( bool  active = true)

Initialize the interrupt driven serial connection.

The parameter active specifies if the interrupt should be enabled in the IOAPIC.

Only receive interrupts are supported, however, send interrupts could be implemented accordingly: interrupt if line is free/ready.

Parameters
activeenable interrupt
Optional:
Implement method for initializing the interrupt

◆ prologue()

bool SerialStream::prologue ( )
overridevirtual

Prologue for serial receive interrupts.

The received character is placed in a local buffer (e.g. BBuffer) and – on success – an epilogue is requested.

Returns
true if the epilogue has to be executed.
Optional:
Implement method

Implements Gate.

◆ epilogue()

void SerialStream::epilogue ( )
overridevirtual

Epilogue for serial receive interrupts.

The received character is printed on the screen using the TextStream.

Optional:
Implement Method

Reimplemented from Gate.

Member Data Documentation

◆ prologue_chars

BBuffer<char, 16> SerialStream::prologue_chars
protected

Buffer for incoming characters in prologue.


The documentation for this class was generated from the following files: