summaryrefslogtreecommitdiff
path: root/src/drivers/Device_1770_ff00.java
diff options
context:
space:
mode:
authormanzerbredes <loic.guegan_secondary@yahoo.fr>2016-03-27 18:37:12 +0200
committermanzerbredes <loic.guegan_secondary@yahoo.fr>2016-03-27 18:37:12 +0200
commit6500028632b515c99a1d057478896fe66955fe29 (patch)
treebd7e4134b8ed17cabe3c073563680737fec6ca89 /src/drivers/Device_1770_ff00.java
parent91430fcc06d1f7aff7ff7ca3babd3ec2c745ab73 (diff)
Add driver modularity
Diffstat (limited to 'src/drivers/Device_1770_ff00.java')
-rw-r--r--src/drivers/Device_1770_ff00.java139
1 files changed, 139 insertions, 0 deletions
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<Region, Pair<Color,Intensity>> 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