// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/Button.java
// public enum Button {
// 	SELECT(0), RIGHT(1), DOWN(2), UP(3), LEFT(4);
// 
// 	// Port expander input pin definition
// 	private final int pin;
// 
// 	Button(int pin) {
// 		this.pin = pin;
// 	}
// 
// 	/**
// 	 * The pin corresponding to the button.
// 	 * 
// 	 * @return the pin of the button.
// 	 */
// 	public int getPin() {
// 		return pin;
// 	}
// 
// 	/**
// 	 * Checks if a button is pressed, given an input mask.
// 	 * 
// 	 * @param mask
// 	 *            the input mask.
// 	 * @return true if the button is pressed, false otherwise.
// 	 * 
// 	 * @see RealLCD#buttonsPressedBitmask()
// 	 */
// 	public boolean isButtonPressed(int mask) {
// 		return ((mask >> getPin()) & 1) > 0;
// 	}
// 
// 	/**
// 	 * Returns a set of the buttons that are pressed, according to the input
// 	 * mask.
// 	 * 
// 	 * @param mask
// 	 *            the input mask.
// 	 * @return a set of the buttons pressed.
// 	 * 
// 	 * @see RealLCD#buttonsPressedBitmask()
// 	 */
// 	public static Set<Button> getButtonsPressed(int mask) {
// 		Set<Button> buttons = new HashSet<Button>();
// 		for (Button button : values()) {
// 			if (button.isButtonPressed(mask)) {
// 				buttons.add(button);
// 			}
// 		}
// 		return buttons;
// 	}
// }
// 
// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/Color.java
// public enum Color {
// 	OFF(0x00), RED(0x01), GREEN(0x02), BLUE(0x04), YELLOW(RED.getValue()
// 			+ GREEN.getValue()), TEAL(GREEN.getValue() + BLUE.getValue()), VIOLET(
// 			RED.getValue() + BLUE.getValue()), WHITE(RED.getValue()
// 			+ GREEN.getValue() + BLUE.getValue()), ON(WHITE.getValue());
// 
// 	private final int value;
// 
// 	Color(int value) {
// 		this.value = value;
// 	}
// 
// 	public int getValue() {
// 		return value;
// 	}
// 
// 	/**
// 	 * Returns the matching color value, or WHITE if no matching color could be found.
// 	 * 
// 	 * @param colorValue
// 	 * @return
// 	 */
// 	public static Color getByValue(int colorValue) {
// 		for (Color c : values()) {
// 			if (c.getValue() == colorValue) {
// 				return c;
// 			}
// 		}
// 		return WHITE;
// 	}
// }
// 
// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/ILCD.java
// public interface ILCD {
// 
// 	void setText(String s) throws IOException;
// 
// 	void setText(int row, String string) throws IOException;
// 
// 	void setCursorPosition(int row, int column) throws IOException;
// 
// 	void stop() throws IOException;
// 
// 	void clear() throws IOException;
// 
// 	void home() throws IOException;
// 
// 	void setCursorEnabled(boolean enable) throws IOException;
// 
// 	boolean isCursorEnabled();
// 
// 	void setDisplayEnabled(boolean enable) throws IOException;
// 
// 	boolean isDisplayEnabled();
// 
// 	void setBlinkEnabled(boolean enable) throws IOException;
// 
// 	boolean isBlinkEnabled();
// 
// 	void setBacklight(Color color) throws IOException;
// 
// 	Color getBacklight() throws IOException;
// 
// 	void scrollDisplay(Direction direction) throws IOException;
// 
// 	void setTextFlowDirection(Direction direction) throws IOException;
// 
// 	void setAutoScrollEnabled(boolean enable) throws IOException;
// 
// 	boolean isAutoScrollEnabled();
// 
// 	boolean isButtonPressed(Button button) throws IOException;
// 
// 	int buttonsPressedBitmask() throws IOException;
// 
// }


import java.io.IOException;
import se.hirt.pi.adafruitlcd.Button;
import se.hirt.pi.adafruitlcd.Color;
import se.hirt.pi.adafruitlcd.ILCD;
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;
	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#setAutoScrollEnabled(boolean)
	 */
	@Override
	public void setAutoScrollEnabled(boolean enable) throws IOException {
		if (enable) {
			// This will 'right justify' text from the cursor
			displayMode |= LCD_ENTRYSHIFTINCREMENT;
			write(LCD_ENTRYMODESET | displayMode);
		} else {
			// This will 'left justify' text from the cursor
			displayMode &= ~LCD_ENTRYSHIFTINCREMENT;
			write(LCD_ENTRYMODESET | displayMode);
		}
	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#isAutoScrollEnabled()
	 */
	@Override
	public boolean isAutoScrollEnabled() {
		return (displayControl & LCD_ENTRYSHIFTINCREMENT) > 0;
	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#isButtonPressed(se.hirt.pi.adafruitlcd.Button)
	 */
	@Override
// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/Button.java
// public enum Button {
// 	SELECT(0), RIGHT(1), DOWN(2), UP(3), LEFT(4);
// 
// 	// Port expander input pin definition
// 	private final int pin;
// 
// 	Button(int pin) {
// 		this.pin = pin;
// 	}
// 
// 	/**
// 	 * The pin corresponding to the button.
// 	 * 
// 	 * @return the pin of the button.
// 	 */
// 	public int getPin() {
// 		return pin;
// 	}
// 
// 	/**
// 	 * Checks if a button is pressed, given an input mask.
// 	 * 
// 	 * @param mask
// 	 *            the input mask.
// 	 * @return true if the button is pressed, false otherwise.
// 	 * 
// 	 * @see RealLCD#buttonsPressedBitmask()
// 	 */
// 	public boolean isButtonPressed(int mask) {
// 		return ((mask >> getPin()) & 1) > 0;
// 	}
// 
// 	/**
// 	 * Returns a set of the buttons that are pressed, according to the input
// 	 * mask.
// 	 * 
// 	 * @param mask
// 	 *            the input mask.
// 	 * @return a set of the buttons pressed.
// 	 * 
// 	 * @see RealLCD#buttonsPressedBitmask()
// 	 */
// 	public static Set<Button> getButtonsPressed(int mask) {
// 		Set<Button> buttons = new HashSet<Button>();
// 		for (Button button : values()) {
// 			if (button.isButtonPressed(mask)) {
// 				buttons.add(button);
// 			}
// 		}
// 		return buttons;
// 	}
// }
// 
// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/Color.java
// public enum Color {
// 	OFF(0x00), RED(0x01), GREEN(0x02), BLUE(0x04), YELLOW(RED.getValue()
// 			+ GREEN.getValue()), TEAL(GREEN.getValue() + BLUE.getValue()), VIOLET(
// 			RED.getValue() + BLUE.getValue()), WHITE(RED.getValue()
// 			+ GREEN.getValue() + BLUE.getValue()), ON(WHITE.getValue());
// 
// 	private final int value;
// 
// 	Color(int value) {
// 		this.value = value;
// 	}
// 
// 	public int getValue() {
// 		return value;
// 	}
// 
// 	/**
// 	 * Returns the matching color value, or WHITE if no matching color could be found.
// 	 * 
// 	 * @param colorValue
// 	 * @return
// 	 */
// 	public static Color getByValue(int colorValue) {
// 		for (Color c : values()) {
// 			if (c.getValue() == colorValue) {
// 				return c;
// 			}
// 		}
// 		return WHITE;
// 	}
// }
// 
// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/ILCD.java
// public interface ILCD {
// 
// 	void setText(String s) throws IOException;
// 
// 	void setText(int row, String string) throws IOException;
// 
// 	void setCursorPosition(int row, int column) throws IOException;
// 
// 	void stop() throws IOException;
// 
// 	void clear() throws IOException;
// 
// 	void home() throws IOException;
// 
// 	void setCursorEnabled(boolean enable) throws IOException;
// 
// 	boolean isCursorEnabled();
// 
// 	void setDisplayEnabled(boolean enable) throws IOException;
// 
// 	boolean isDisplayEnabled();
// 
// 	void setBlinkEnabled(boolean enable) throws IOException;
// 
// 	boolean isBlinkEnabled();
// 
// 	void setBacklight(Color color) throws IOException;
// 
// 	Color getBacklight() throws IOException;
// 
// 	void scrollDisplay(Direction direction) throws IOException;
// 
// 	void setTextFlowDirection(Direction direction) throws IOException;
// 
// 	void setAutoScrollEnabled(boolean enable) throws IOException;
// 
// 	boolean isAutoScrollEnabled();
// 
// 	boolean isButtonPressed(Button button) throws IOException;
// 
// 	int buttonsPressedBitmask() throws IOException;
// 
// }


// Path: photorama-raspberry-pi-lcd-keypad/src/main/java/se/hirt/pi/adafruitlcd/impl/RealLCD.java
import java.io.IOException;
import se.hirt.pi.adafruitlcd.Button;
import se.hirt.pi.adafruitlcd.Color;
import se.hirt.pi.adafruitlcd.ILCD;
import com.pi4j.io.i2c.I2CBus;
import com.pi4j.io.i2c.I2CDevice;
import com.pi4j.io.i2c.I2CFactory;

	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#setAutoScrollEnabled(boolean)
	 */
	@Override
	public void setAutoScrollEnabled(boolean enable) throws IOException {
		if (enable) {
			// This will 'right justify' text from the cursor
			displayMode |= LCD_ENTRYSHIFTINCREMENT;
			write(LCD_ENTRYMODESET | displayMode);
		} else {
			// This will 'left justify' text from the cursor
			displayMode &= ~LCD_ENTRYSHIFTINCREMENT;
			write(LCD_ENTRYMODESET | displayMode);
		}
	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#isAutoScrollEnabled()
	 */
	@Override
	public boolean isAutoScrollEnabled() {
		return (displayControl & LCD_ENTRYSHIFTINCREMENT) > 0;
	}

	/* (non-Javadoc)
	 * @see se.hirt.pi.adafruitlcd.ILCD#isButtonPressed(se.hirt.pi.adafruitlcd.Button)
	 */
	@Override
	public boolean isButtonPressed(Button button) throws IOException {