aboutsummaryrefslogtreecommitdiff
path: root/arm9/source/devices/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/source/devices/stream.c')
-rw-r--r--arm9/source/devices/stream.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/arm9/source/devices/stream.c b/arm9/source/devices/stream.c
new file mode 100644
index 0000000..7329380
--- /dev/null
+++ b/arm9/source/devices/stream.c
@@ -0,0 +1,40 @@
+#include "stream.h"
+
+/*
+This is a skeleton of a device at the moment. The local.output.connected flag
+// of the keyboard program is manually set in main.c so that only the keyboard
+can send bytes to the main instance, otherwise user programs that write to the
+stream device will send keyboard bytes to themselves.
+*/
+
+
+void channel_reset(Channel *channel) {
+ channel->connected = false;
+ channel->transmitting = false;
+}
+
+void bytestream_reset(Bytestream *bstream) {
+ channel_reset(&bstream->input);
+ channel_reset(&bstream->output);
+}
+
+// Reset a stream device.
+void stream_reset(StreamDevice *stream) {
+ bytestream_reset(&stream->local);
+ bytestream_reset(&stream->remote);
+}
+
+// Write a byte to the stream of the main instance. This byte is expected to
+// be consumed by a keyboard program running on the sub instance.
+void stream_write(StreamDevice *stream, u8 byte) {
+ if (stream->local.output.connected) {
+ receive_keyboard_byte(byte);
+ }
+}
+
+// End the current transmission. Currently this will only hide the keyboard.
+void stream_end(StreamDevice *stream) {
+ if (stream->local.output.connected) {
+ close_keyboard();
+ }
+}