--- /dev/null
+package lejos.rcxcomm;\r
+\r
+/**\r
+ * Abstract packet handler. \r
+ * Implementations must include sendPacket, receivePacket and\r
+ * isPacketAvailable(). The other methods are optional.\r
+ **/\r
+public abstract class PacketHandler {\r
+ protected PacketHandler lowerHandler;\r
+\r
+ public PacketHandler() {\r
+ }\r
+\r
+ public PacketHandler(PacketHandler handler) {\r
+ lowerHandler = handler;\r
+ }\r
+ \r
+ /**\r
+ * Set the source and destination for this connection.\r
+ **/ \r
+ public void open(byte source, byte destination) {\r
+ }\r
+\r
+ /**\r
+ * Reset sequence numbers for this handler\r
+ **/\r
+ public void reset() {\r
+ }\r
+\r
+ /**\r
+ * Set or unset the listen flag to keep a PC serial tower alive\r
+ * @param listen true to set listen mode, else false\r
+ **/\r
+ public void setListen(boolean listen) {\r
+ lowerHandler.setListen(listen);\r
+ }\r
+\r
+ /** Send a packet.\r
+ * @param packet the bytes to send\r
+ * @param len the number of bytes to send\r
+ * @return true if the send was successful, else false\r
+ */\r
+ public abstract boolean sendPacket(byte [] packet, int len);\r
+\r
+ /** Receive a packet.\r
+ * @param buffer the buffer to receive the packet into\r
+ * @return the number of bytes received\r
+ */\r
+ public abstract int receivePacket(byte [] buffer);\r
+\r
+ public int receiveAck(byte [] buffer) {\r
+ return 0;\r
+ }\r
+\r
+ /**\r
+ * Check if a packet is available\r
+ * @return true if a Packet is available, else false\r
+ */\r
+ public abstract boolean isPacketAvailable();\r
+\r
+ /**\r
+ * Check if an ack is available\r
+ * @return true if a ack is available, else false\r
+ */\r
+ public boolean isAckAvailable() {\r
+ return false;\r
+ }\r
+\r
+ /**\r
+ * Close this packet handler and all lower layers.\r
+ */\r
+ public void close() {\r
+ lowerHandler.close();\r
+ }\r
+\r
+ /**\r
+ * Get the last error.\r
+ * @return the error number, or zero for success\r
+ **/\r
+ public int getError() {\r
+ return lowerHandler.getError();\r
+ }\r
+}\r
+\r
+\r