75 lines
1.4 KiB
D
75 lines
1.4 KiB
D
/**
|
|
* Serial port access.
|
|
*/
|
|
module hulk.serial;
|
|
|
|
import hulk.cpu;
|
|
import core.stdc.stdarg;
|
|
static import hulk.writef;
|
|
|
|
struct Serial
|
|
{
|
|
enum BASE_PORT = 0x3F8;
|
|
|
|
/**
|
|
* Initialize the serial module.
|
|
*/
|
|
static void initialize()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Write a character to the serial port.
|
|
*
|
|
* @param ch Character to write.
|
|
*/
|
|
static void write(ubyte ch)
|
|
{
|
|
if (ch == '\n')
|
|
{
|
|
out8(BASE_PORT, '\r');
|
|
}
|
|
out8(BASE_PORT, ch);
|
|
}
|
|
|
|
/**
|
|
* Write a formatted string to the serial port.
|
|
*
|
|
* @param s Format string.
|
|
* @param args Variable arguments structure.
|
|
*/
|
|
public static void writef(string s, va_list args)
|
|
{
|
|
hulk.writef.writefv(function void(ubyte ch) {
|
|
Serial.write(ch);
|
|
}, s, args);
|
|
}
|
|
|
|
/**
|
|
* Write a formatted string to the serial port.
|
|
*
|
|
* @param s Format string.
|
|
*/
|
|
public static extern (C) void writef(string s, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, s);
|
|
writef(s, args);
|
|
va_end(args);
|
|
}
|
|
|
|
/**
|
|
* Write a formatted string and newline to the serial port.
|
|
*
|
|
* @param s Format string.
|
|
*/
|
|
public static extern (C) void writefln(string s, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, s);
|
|
writef(s, args);
|
|
writef("\n", args);
|
|
va_end(args);
|
|
}
|
|
}
|