Add driver modularity

This commit is contained in:
manzerbredes 2016-03-27 18:37:12 +02:00
parent 91430fcc06
commit 6500028632
5 changed files with 256 additions and 200 deletions

View file

@ -1,184 +0,0 @@
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();
}
}
}

View file

@ -10,15 +10,7 @@ import org.manzerbredes.open_klm.device.Driver.Region;
public class KeyboardState {
/**
* Define Keyboard color state
*/
private HashMap<Region, Pair<Color,Intensity>> KeyboardColor=new HashMap<>();
/**
* Define Keyboard mode state
*/
private Mode mode;
public KeyboardState() {