package org.manzerbredes.open_klm.drivers; import java.io.IOException; import java.util.HashMap; import org.javatuples.Pair; import com.codeminders.hidapi.*; /** * * Driver to communicate with the keyboard device * using HIDAPI. * * @author Manzerbredes * */ public class Device_1770_ff00 implements BasicDriver{ /** * Device entry */ HIDDevice device; /** * Define Keyboard color state */ private HashMap> KeyboardColor=new HashMap<>(); /** * Define Keyboard mode state */ private Mode mode=Mode.NORMAL; /** * Init driver and HIDAPI library * * @throws InstantiationException */ public Device_1770_ff00() 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; } private void commit(){ try { this.device.sendFeatureReport(this.getReport(1,2,65,this.mode.intValue(),0,0,0,236)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void setRegionColor(Region region, Color color, Intensity intensity) { try { this.device.sendFeatureReport(this.getReport(1,2,66,region.intValue(),color.intValue(),intensity.intValue(),0,236)); this.commit(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void setColor(Color color, Intensity intensity) { try { this.device.sendFeatureReport(this.getReport(1,2,66,Region.LEFT.intValue(),color.intValue(),intensity.intValue(),0,236)); this.device.sendFeatureReport(this.getReport(1,2,66,Region.MIDDLE.intValue(),color.intValue(),intensity.intValue(),0,236)); this.device.sendFeatureReport(this.getReport(1,2,66,Region.RIGHT.intValue(),color.intValue(),intensity.intValue(),0,236)); this.commit(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void setMode(Mode mode) { this.mode=mode; this.commit(); } }