diff --git a/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java b/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java
new file mode 100644
index 0000000..caebb7c
--- /dev/null
+++ b/mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java
@@ -0,0 +1,74 @@
+package ch.ntb.mcdp.uart.blackbox;
+
+import ch.ntb.mcdp.uart.UartDispatch;
+import ch.ntb.mcdp.usb.DataPacket;
+import ch.ntb.mcdp.usb.Dispatch;
+import ch.ntb.mcdp.usb.USBDevice;
+import ch.ntb.usb.USBException;
+
+public class Uart0 {
+
+ // UART 0 Subtypes
+ /**
+ * Data to UART 0
+ */
+ private static final byte STYPE_UART_0_IN = 0x11;
+
+ public static final int MAX_UART_PAYLOAD = UartDispatch.MAX_UART_PAYLOAD;
+
+ private static void write(byte packetSubType, byte[] data, int len)
+ throws USBException {
+ byte[] usbData = new byte[len + DataPacket.PACKET_MIN_LENGTH];
+ usbData[0] = DataPacket.PACKET_HEADER;
+ usbData[1] = Dispatch.MTYPE_UART;
+ usbData[2] = packetSubType;
+ usbData[3] = (byte) (len / 0x100);
+ usbData[4] = (byte) (len & 0xFF);
+ for (int i = 0; i < len; i++) {
+ usbData[DataPacket.PACKET_DATA_OFFSET + i] = data[i];
+ }
+ usbData[DataPacket.PACKET_DATA_OFFSET + len] = DataPacket.PACKET_END;
+ USBDevice.write_BDI(usbData, usbData.length);
+ }
+
+ /**
+ * Write a Uart data-packet to the target. The maximal number of bytes is
+ * specified by MAX_UART_PAYLOAD. If more data is sent in
+ * one packet, only MAX_UART_PAYLOAD bytes are forwarded to
+ * the uart.
+ *
+ * @param data
+ * The data to be sent.
+ * @param len
+ * Length of the data to be sent.
+ * @return true if the data has been sent successfully
+ */
+ public static boolean write(byte[] data, int len) {
+ try {
+ write(STYPE_UART_0_IN, data, len);
+ } catch (USBException e) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Try to read uart data from the device.
+ *
+ * @return uart data or null if no data is available or an exception occured
+ */
+ public static byte[] read() {
+ DataPacket packet;
+ try {
+ System.out.print("Data: ");
+ packet = Dispatch.readUART();
+ for (int i = 0; i < packet.data.length; i++) {
+ System.out.print((char) packet.data[i] + ", ");
+ }
+ System.out.println();
+ return packet.data;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}