From 19a54783e1b4b8ef25a5792131d0d35bc2a5b378 Mon Sep 17 00:00:00 2001 From: schlaepfer Date: Mon, 9 Jan 2006 09:19:10 +0000 Subject: [PATCH] - blackbox interface git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@72 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c --- mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 mcdp/src/ch/ntb/mcdp/uart/blackbox/Uart0.java 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; + } + } +}