package org.manzerbredes.open_klm.device; import java.io.IOException; import com.codeminders.hidapi.HIDDevice; import com.codeminders.hidapi.HIDManager; /** * * Driver to communicate with the keyboard device * using HIDAPI. * * @author Manzerbredes * */ public class Driver{ /** * Defined Region Helper * * @author Manzerbredes * */ public enum Region{ LEFT(1), MIDDLE(2), RIGHT(3); private int current; Region(int current){ this.current=current; } public int intValue(){ return this.current; } } /** * Defined Color Helper * * @author Manzerbredes * */ public enum Color{ OFF(0),RED(1),ORANGE(2),YELLOW(3),GREEN(4),SKY(5), BLUE(6),PURPLE(7),WHITE(8); private int current; Color(int current){ this.current=current; } public int intValue(){ return this.current; } } /** * Defined Level Helper * * @author Manzerbredes * */ public enum Intensity{ HIGH(0), MEDIUM(1), LOW(2), LIGHT(3); private int current; Intensity(int current){ this.current=current; } public int intValue(){ return this.current; } } /** * Defined Mode Helper * * @author Manzerbredes * */ public enum Mode{ NORMAL(1), GAMING(2), BREATHE(3), DEMO(4), WAVE(5); private int current; Mode(int current){ this.current=current; } public int intValue(){ return this.current; } } /** * Device entry */ HIDDevice device; /** * Init driver and HIDAPI library * * @throws InstantiationException */ public Driver() throws InstantiationException{ // Init HIDAPI Library com.codeminders.hidapi.ClassPathLibraryLoader.loadNativeHIDLibrary(); // Try not bind the device try { HIDManager man=HIDManager.getInstance(); this.device=man.openById(0x1770, 0xff00, null); if(this.device==null) throw new Exception(); } catch(Exception e){ throw new InstantiationException("Failed to instanciate driver. Device not found or permission denied (try as root)"); } } /** * Build a byte[] report * * @param a * @param b * @param c * @param d * @param e * @param f * @param g * @param h * @return */ private byte[] getReport(int a, int b, int c, int d, int e, int f, int g, int h){ byte[] message = new byte[8]; message[0] = (byte) a; message[1] = (byte) b; message[2] = (byte) c; message[3] = (byte) d; message[4] = (byte) e; message[5] = (byte) f; message[6] = (byte) g; message[7] = (byte) h; return message; } /** * Set Color of region * * @param region Region to apply * @param color Color to apply * @param intensity Intensity wanted */ public void setColor(Region region, Color color, Intensity intensity){ try { this.device.sendFeatureReport(this.getReport(1,2,66,region.intValue(),color.intValue(),intensity.intValue(),0,236)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * Commit change * * @param mode Mode wanted */ public void commit(Mode mode){ try { this.device.sendFeatureReport(this.getReport(1,2,65,mode.intValue(),0,0,0,236)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }