From 6500028632b515c99a1d057478896fe66955fe29 Mon Sep 17 00:00:00 2001 From: manzerbredes Date: Sun, 27 Mar 2016 18:37:12 +0200 Subject: Add driver modularity --- src/drivers/Device_1770_ff00.java | 139 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 src/drivers/Device_1770_ff00.java (limited to 'src/drivers/Device_1770_ff00.java') diff --git a/src/drivers/Device_1770_ff00.java b/src/drivers/Device_1770_ff00.java new file mode 100644 index 0000000..ec942d5 --- /dev/null +++ b/src/drivers/Device_1770_ff00.java @@ -0,0 +1,139 @@ +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(); + } + +} \ No newline at end of file -- cgit v1.2.3