package lejos.nxt.rcxcomm; import lejos.nxt.*; import lejos.nxt.addon.*; /* * WARNING: THIS CLASS IS SHARED BETWEEN THE classes AND pccomms PROJECTS. * DO NOT EDIT THE VERSION IN pccomms AS IT WILL BE OVERWRITTEN WHEN THE PROJECT IS BUILT. */ /** * Emulates RCX LLC class using the RCXLink class. * **/ public class LLC { private static RCXLink link; private static byte[] data = new byte[1]; private LLC() { } /** * Initialize LLC and set port **/ public static void init(SensorPort port){ link = new RCXLink(port); link.setDefaultSpeed(); link.flush(); } /** * Initialize LLC an **/ public static void init() { link.setDefaultSpeed(); link.flush(); } /** * Set sensor port **/ public static void setPort(SensorPort port) { link = new RCXLink(port); } /** * read a single byte, if available * @return the byte read, or -1 if no byte is available **/ public static int read() { int numBytes = link.bytesAvailable(); if (numBytes == 0) return -1; data[0] = 0; link.readBytes(data); return (data[0] & 0xFF); } /** * Write raw bytes * * @param buf the bytes to write * @param len the number of bytes */ private static void write(byte [] buf, int len) { link.sendBytes(buf, len); } /** * Indicate whether the last send is still active * @return true if still sending, else false **/ public static boolean isSending() { return false; } /** * Return the error status of the last send * @return true if still sending, else false **/ public static boolean isSendError() { return false; } /** * Send a number of bytes and wait for completion of transmission * @param buf the array of bytes to send * @param len the number of bytes to send * @return true if the send is successful, else false **/ public static boolean sendBytes(byte [] buf, int len) { LLC.write(buf, len); return true; } /** * wait a little while for a byte to become available * @return the byte received, or -1 if no byte available **/ public static int receive() { int r; for(int i=0;i<10;i++) { r = LLC.read(); if (r >= 0) return r; Thread.yield(); } return -1; } /** * Sets long range transmision. */ public static void setRangeLong() { link.setRangeLong(); } /** * Sets short range transmision. */ public static void setRangeShort() { link.setRangeLong(); } /** * Return the RCXLink object associated with LLC * * @return the RCXLink used */ public static RCXLink getLink() { return link; } }