package uk.co.mmscomputing.device.capi;
import uk.co.mmscomputing.util.JarLib;
import uk.co.mmscomputing.device.capi.exception.CapiRegisterException;
import uk.co.mmscomputing.device.capi.exception.CapiMsgFctException;
public class jcapi{
static public final int ptrSize;
static private native int getPtrSize();
// Capi
static public native void checkInstalled()throws CapiMsgFctException;
// DataB3Req
static public native int acquireNative32bitDataPtr(byte[] data);
static public native void releaseNative32bitDataPtr(byte[] data,int cPtr);
static public native long acquireNative64bitDataPtr(byte[] data);
static public native void releaseNative64bitDataPtr(byte[] data,long cPtr);
// DataB3Ind
static public native byte[] copyFromNative32bitDataPtr(byte[] data,int cPtr,int len);
static public native byte[] copyFromNative64bitDataPtr(byte[] data,long cPtr,int len);
// Application
static public native int register(int maxLogicalConnection,int maxBDataBlocks,int maxBDataLen)throws CapiRegisterException;
static public native void release(int appid)throws CapiMsgFctException;
static public native void putMessage(int appid,byte[] msg)throws CapiMsgFctException;
static public native byte[] getMessage(int appid,byte[] msg)throws CapiMsgFctException;
static public native void waitForMessage(int appid)throws CapiMsgFctException;
// Controller
static public native String getManufacturer(int ctrl)throws CapiMsgFctException;
static public native int[] getVersion(int ctrl)throws CapiMsgFctException;
static public native String getSerialNumber(int ctrl)throws CapiMsgFctException;
static public native byte[] getProfile(int ctrl)throws CapiMsgFctException;
static public String getKernelDriverManufacturer()throws CapiMsgFctException{
return getManufacturer(0);
}
static public int[] getKernelDriverVersion()throws CapiMsgFctException{
return getVersion(0);
}
static public String getKernelDriverSerialNumber()throws CapiMsgFctException{
return getSerialNumber(0);
}
static public int getNoOfControllers()throws CapiMsgFctException{
byte[] buf=getProfile(0); // if ctrl == 0 then get no of controllers
return ((buf[1]&0x00FF)<<8)|(buf[0]&0x00FF); // little endian
}
static{
// linux : load library 'libjcapi.so'
// win : load library 'jcapi.dll'
boolean loaded=JarLib.load(jcapi.class,"jcapi");
ptrSize=(loaded)?getPtrSize():0;
System.out.println(jcapi.class.getName()+": jcapi "+(ptrSize>>2)+" system loaded = "+loaded);
}
}