#Region Project Attributes
#MainFormWidth: 600
#MainFormHeight: 600
#AdditionalJar: purejavahidapi
#AdditionalJar: jna-4.2.1
#End Region
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private Button1 As Button
Private Button2 As Button
Private Button3 As Button
Dim lst As List
Dim tb1 As TableView
Dim currentDeviceInfo As JavaObject
Dim currentDevice As JavaObject
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
'MainForm.RootPane.LoadLayout("main") 'Load the layout file.
MainForm.Show
tb1.Initialize("devices")
tb1.SetColumns(Array("VendorID","ProductID"))
tb1.SetColumnWidth(0,200)
tb1.SetColumnWidth(1,190)
lst.Initialize
Button1.Initialize("openDevice")
Button1.Text="open selected device"
Button2.Initialize("readDeviceFeatures")
Button2.Text = "read selected device features"
Button3.Initialize("closeDevice")
Button3.Text = "close selected device"
MainForm.RootPane.AddNode(tb1,10,10,400,400)
MainForm.RootPane.AddNode(Button1,10,500,400,20)
MainForm.RootPane.AddNode(Button2,10,530,400,20)
MainForm.RootPane.AddNode(Button3,10,560,400,20)
setAlwaysOnTop(MainForm, True)
asJO(Me).RunMethod("getDeviceList",Array(lst))
For Each item As Object In lst
Dim vendor As Short = asJO(Me).RunMethod("getVendorId",Array(item))
Dim product As Short = asJO(Me).RunMethod("getProductId",Array(item))
tb1.Items.Add(Array(vendor,product))
Next
End Sub
Sub asJO(o As JavaObject) As JavaObject
Return o
End Sub
Sub devices_SelectedRowChanged(Index As Int, Row() As Object)
Log("item selected : "&lst.Get(Index))
currentDeviceInfo = lst.Get(Index)' lst contains real item tableview just to show vendor etc
'Log(GetType(currentDeviceInfo))
End Sub
Sub openDevice_Click
currentDevice = asJO(Me).RunMethod("openDevice",Array(currentDeviceInfo))
'Log(currentDevice)
End Sub
Sub readDeviceFeatures_Click
Dim data() As Byte = asJO(Me).RunMethod("getFeatureReport",Array(currentDevice))
Dim sb As StringBuilder
sb.Initialize
For Each b As Byte In data
sb.Append(b&" ")
Next
Log(sb.ToString.Trim)
End Sub
Sub closeDevice_Click
asJO(Me).RunMethod("closeDevice",Array(currentDevice))
End Sub
'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub setAlwaysOnTop(frm As Object, Value As Boolean)
Dim frmJO As JavaObject = frm
Dim stage As JavaObject = frmJO.GetField("stage")
stage.RunMethod("setAlwaysOnTop", Array(Value))
End Sub
#if java
import java.util.List;
import purejavahidapi.*;
import java.io.*;
volatile static boolean deviceOpen = false;
public static List getDeviceList(List lst) {
lst.clear();
try {
HidDeviceInfo devInfo = null;
if (!deviceOpen) {
System.out.println("scanning");
List<HidDeviceInfo> devList = PureJavaHidApi.enumerateDevices();
for (HidDeviceInfo info : devList) {
System.out.println(info.getVendorId());
System.out.println(info.getProductId());
lst.add(info);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
return lst;
}
public static Short getVendorId(HidDeviceInfo hid){
return hid.getVendorId();
}
public static Short getProductId(HidDeviceInfo hid){
return hid.getProductId();
}
public static HidDevice openDevice(HidDeviceInfo devInfo) throws IOException{
final HidDevice dev;
if (devInfo == null) {
System.out.println("device not found");
dev = null;
} else {
System.out.println("device found");
if (true) {
deviceOpen = true;
dev = PureJavaHidApi.openDevice(devInfo);
dev.setDeviceRemovalListener(new DeviceRemovalListener() {
@Override
public void onDeviceRemoval(HidDevice source) {
System.out.println("device removed");
deviceOpen = false;
}
});
dev.setInputReportListener(new InputReportListener() {
@Override
public void onInputReport(HidDevice source, byte Id, byte[] data, int len) {
System.out.printf("onInputReport: id %d len %d data ", Id, len);
for (int i = 0; i < len; i++)
System.out.printf("%02X ", data[i]);
System.out.println();
}
});
}
}
return dev;
}
public static void closeDevice(HidDevice hid){
if (!deviceOpen) return;
hid.close();
deviceOpen = false;
}
public static byte[] getFeatureReport(HidDevice dev){
byte[] data = new byte[132];
data[0] = (byte)1;
int len = 0;
if (((len = dev.getFeatureReport(data, data.length)) >= 0) && true) {
int Id = data[0];
System.out.printf("getFeatureReport: id %d len %d data ", Id, len);
for (int i = 0; i < data.length; i++)
System.out.printf("%02X ", data[i]);
System.out.println();
}
return data;
}
#End If