OSDN Git Service

lejos_NXJ_win32_0_3_0alpha.zip
[nxt-jsp/lejos_nxj.git] / nxtOSEK / lejos_nxj / src / java / pccomms / lejos / pc / comm / NXTCommFantom.java
diff --git a/nxtOSEK/lejos_nxj/src/java/pccomms/lejos/pc/comm/NXTCommFantom.java b/nxtOSEK/lejos_nxj/src/java/pccomms/lejos/pc/comm/NXTCommFantom.java
new file mode 100644 (file)
index 0000000..8c8530d
--- /dev/null
@@ -0,0 +1,76 @@
+package lejos.pc.comm;
+
+import java.io.*;
+
+public class NXTCommFantom implements NXTComm {
+       private NXTInfo nxtInfo;
+       
+       public native String[] jfantom_find();
+       public native int jfantom_open(String nxt);
+       public native void jfantom_close(int nxt);
+       public native void jfantom_send_data(int nxt, byte [] message, int len, int replyLen);
+       public native byte[] jfantom_read_data(int nxt, int len);
+       
+       public NXTInfo[] search(String name, int protocol) {
+               String[] nxtNames = jfantom_find();
+               NXTInfo[] nxtInfo = new NXTInfo[nxtNames.length];
+               for(int i=0;i<nxtNames.length;i++) {
+                       nxtInfo[i] = new NXTInfo();
+                       String nxtName = nxtNames[i];
+                       nxtInfo[i].btResourceString = nxtName;
+                       nxtInfo[i].name = "Unknown";
+                       nxtInfo[i].protocol = NXTCommFactory.USB;
+                       nxtInfo[i].btDeviceAddress = "";
+                       if (nxtName != null) {
+                           if (nxtName.length() >= 3 && nxtName.substring(0,3).equals("BTH"))
+                               nxtInfo[i].protocol = NXTCommFactory.BLUETOOTH; 
+                           int startName = nxtName.indexOf("::");
+                           if (startName >= 0) startName +=2;
+                           int endName = -1;
+                           if (startName != -1) endName = nxtName.indexOf("::", startName);
+                           if (startName >= 0 && endName >= 0) {
+                               nxtInfo[i].name = nxtName.substring(startName, endName);
+                           nxtInfo[i].btDeviceAddress = nxtName.substring(endName+2);
+                           }
+                       }
+               }
+               return nxtInfo;
+       }
+
+       public boolean open(NXTInfo nxtInfo) {
+               this.nxtInfo = nxtInfo;
+               nxtInfo.nxtPtr = jfantom_open(nxtInfo.btResourceString);
+               return true;
+       }
+       
+       public void close() {
+               jfantom_close(nxtInfo.nxtPtr);
+       }
+       
+       public byte [] sendRequest(byte [] data, int replyLen) {
+               jfantom_send_data(nxtInfo.nxtPtr, data, data.length, replyLen-1);
+               return jfantom_read_data(nxtInfo.nxtPtr, replyLen);
+       }
+       
+       public byte [] read() throws IOException {
+               throw new IOException("Not implemented");
+       }
+       
+       public void write(byte [] data) throws IOException {
+               throw new IOException("Not implemented");
+       }
+       
+       public OutputStream getOutputStream() {
+               return null;            
+       }
+       
+       public InputStream getInputStream() {
+               return null;            
+       }
+       
+       static {
+               System.loadLibrary("jfantom");
+       }
+
+}
+