From fc722868a9f3422692db9d271fa658641b8666c9 Mon Sep 17 00:00:00 2001 From: Ray Date: Mon, 16 Dec 2013 14:14:35 -0500 Subject: [PATCH] update host software to fix issues where it prints garbage after running for a while --- README.txt | 55 ++++++++++++++++-- bootloader/readme.txt | 2 + host software/HIDSerialMonitor.pde | 15 ++++- .../application.linux32/HIDSerialMonitor | 2 +- .../lib/HIDSerialMonitor.jar | Bin 3742 -> 3949 bytes .../source/HIDSerialMonitor.java | 16 ++++- .../source/HIDSerialMonitor.pde | 15 ++++- .../application.linux64/HIDSerialMonitor | 2 +- .../lib/HIDSerialMonitor.jar | Bin 3742 -> 3949 bytes .../source/HIDSerialMonitor.java | 16 ++++- .../source/HIDSerialMonitor.pde | 15 ++++- .../HIDSerialMonitor.app/Contents/Info.plist | 2 +- .../Resources/Java/HIDSerialMonitor.jar | Bin 3742 -> 3949 bytes .../source/HIDSerialMonitor.java | 16 ++++- .../source/HIDSerialMonitor.pde | 15 ++++- .../lib/HIDSerialMonitor.jar | Bin 3742 -> 3949 bytes .../application.windows32/lib/args.txt | 2 +- .../source/HIDSerialMonitor.java | 16 ++++- .../source/HIDSerialMonitor.pde | 15 ++++- .../lib/HIDSerialMonitor.jar | Bin 3742 -> 3949 bytes .../application.windows64/lib/args.txt | 2 +- .../source/HIDSerialMonitor.java | 16 ++++- .../source/HIDSerialMonitor.pde | 15 ++++- 23 files changed, 216 insertions(+), 21 deletions(-) diff --git a/README.txt b/README.txt index 9801c18..ac55408 100644 --- a/README.txt +++ b/README.txt @@ -16,13 +16,20 @@ ShareAlike (CC-SA) 3.0 license. The folders are organized as follows: - 'schematic' contains the circuit schematic and part list. + Note that the circuit uses a 12MHz crystal (or resonator). + This is the lowest frequency clock supported by V-USB. + You need to set the mcu fuse bits accordingly to use external + crystal oscillator. See the 'bootloader' folder below. - 'bootloader' contains the modified USnoobie bootloader The bootloader is optional, but once flashed, it allows the mcu to bootload (by pressing the button during power-on or reset) as a usbasp programmer, so you will not need any external programer to flash a program. - + + Check the 'burn.bat' file in the 'bootloader' folder for the + recommended fuse bits. + - 'arduino code' contains the Arduino library for HIDSerial. To use it: * copy boards.txt (from hardware/arduino folder) @@ -32,12 +39,50 @@ The folders are organized as follows: * Run Arduino (the recommended version is 1.0.5 or 1.0.4). * Make sure you select 'USnoobie' from Tools -> Boards * If you use the USnoobie bootloader, select 'USBasp' from - Tools -> Programmer. + Tools -> Programmer. If not, select the name of the external + ISP programmer you are using to flash the program. * Select any provided example from File -> Examples -> HIDSerial - * Upload - + * Upload the example code to ATmega328. + - 'host software' contains the standalone applications and Processing source code for HIDSerialMonitor. Please check the README.txt therein. - + +- Using the Arduino HIDSerial library: + * The library provides several examples for you to learn how to + get started using the API functions. + * The HIDSerial class is similar to Arduino's Serial class. To + use it, you need to first define a class variable, e.g. + + HIDSerial serial; + + Then, in your setup() function, call: + + serial.begin(); + + Next, in your loop() function, you can use: + + serial.print(...); + serial.println(...); + serial.write(...); + + to print values to the host. You can also use: + + serial.available(); + + to check if there is any incoming data, and + + serial.read(...); + + to read the incoming data to a char buffer. Again,these are similar + to the Arduino's Serial class. The ***main difference***, though, + is that in the loop() you need to call + + serial.poll(); + + as often as you can -- since the USB tasks are simulated in software, + calling serial.poll() frequently ensures the mcu has ample time to + perform USB tasks. This requirement can be relieved in future updates, + but for you please cope with the requirement. + ======================================================== diff --git a/bootloader/readme.txt b/bootloader/readme.txt index 2201e6b..39366f3 100644 --- a/bootloader/readme.txt +++ b/bootloader/readme.txt @@ -3,6 +3,8 @@ NOTE: the original code by Frank Zhao has been slightly modified to use button on pin PD4 for bootloading condition. +Please check the burn.bat for recommende fuse bits. + ========================================================================== bootloader files for USnooBie, base off USBaspLoader diff --git a/host software/HIDSerialMonitor.pde b/host software/HIDSerialMonitor.pde index f12006d..f0509eb 100644 --- a/host software/HIDSerialMonitor.pde +++ b/host software/HIDSerialMonitor.pde @@ -17,8 +17,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -72,6 +74,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -129,7 +136,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -174,7 +181,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.linux32/HIDSerialMonitor b/host software/application.linux32/HIDSerialMonitor index b0da7b9..f213884 100755 --- a/host software/application.linux32/HIDSerialMonitor +++ b/host software/application.linux32/HIDSerialMonitor @@ -1,4 +1,4 @@ #!/bin/sh APPDIR=$(dirname "$0") -java -Djava.library.path="$APPDIR:$APPDIR/lib" -cp "$APPDIR/lib/HIDSerialMonitor.jar:$APPDIR/lib/core.jar:$APPDIR/lib/jogl-all.jar:$APPDIR/lib/gluegen-rt.jar:$APPDIR/lib/jogl-all-natives-linux-i586.jar:$APPDIR/lib/gluegen-rt-natives-linux-i586.jar:$APPDIR/lib/core.jar:$APPDIR/lib/G4P.jar:$APPDIR/lib/hidapi.jar" HIDSerialMonitor "$@" +java -Djava.library.path="$APPDIR:$APPDIR/lib" -cp "$APPDIR/lib/HIDSerialMonitor.jar:$APPDIR/lib/core.jar:$APPDIR/lib/jogl-all.jar:$APPDIR/lib/gluegen-rt.jar:$APPDIR/lib/jogl-all-natives-linux-i586.jar:$APPDIR/lib/gluegen-rt-natives-linux-i586.jar:$APPDIR/lib/core.jar:$APPDIR/lib/G4P.jar:$APPDIR/lib/BlinkStick.jar:$APPDIR/lib/hidapi-1.1.jar" HIDSerialMonitor "$@" diff --git a/host software/application.linux32/lib/HIDSerialMonitor.jar b/host software/application.linux32/lib/HIDSerialMonitor.jar index 99a104c16a57a8e0d13248117c3cb848ea0b4b19..1a82d62529812d27d9601942ea8c3e1e31386f97 100644 GIT binary patch delta 3693 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ຬ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 K1_BNM0002!akrQN diff --git a/host software/application.linux32/source/HIDSerialMonitor.java b/host software/application.linux32/source/HIDSerialMonitor.java index 838ced1..838e217 100644 --- a/host software/application.linux32/source/HIDSerialMonitor.java +++ b/host software/application.linux32/source/HIDSerialMonitor.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; import java.util.HashMap; @@ -32,6 +33,8 @@ public class HIDSerialMonitor extends PApplet { + + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -85,6 +88,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -142,7 +150,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -187,7 +195,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.linux32/source/HIDSerialMonitor.pde b/host software/application.linux32/source/HIDSerialMonitor.pde index dbae403..b3aae78 100644 --- a/host software/application.linux32/source/HIDSerialMonitor.pde +++ b/host software/application.linux32/source/HIDSerialMonitor.pde @@ -5,8 +5,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -60,6 +62,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -117,7 +124,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -162,7 +169,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.linux64/HIDSerialMonitor b/host software/application.linux64/HIDSerialMonitor index 27fc7ea..9a7bfe9 100755 --- a/host software/application.linux64/HIDSerialMonitor +++ b/host software/application.linux64/HIDSerialMonitor @@ -1,4 +1,4 @@ #!/bin/sh APPDIR=$(dirname "$0") -java -Djava.library.path="$APPDIR:$APPDIR/lib" -cp "$APPDIR/lib/HIDSerialMonitor.jar:$APPDIR/lib/core.jar:$APPDIR/lib/jogl-all.jar:$APPDIR/lib/gluegen-rt.jar:$APPDIR/lib/jogl-all-natives-linux-amd64.jar:$APPDIR/lib/gluegen-rt-natives-linux-amd64.jar:$APPDIR/lib/core.jar:$APPDIR/lib/G4P.jar:$APPDIR/lib/hidapi.jar" HIDSerialMonitor "$@" +java -Djava.library.path="$APPDIR:$APPDIR/lib" -cp "$APPDIR/lib/HIDSerialMonitor.jar:$APPDIR/lib/core.jar:$APPDIR/lib/jogl-all.jar:$APPDIR/lib/gluegen-rt.jar:$APPDIR/lib/jogl-all-natives-linux-amd64.jar:$APPDIR/lib/gluegen-rt-natives-linux-amd64.jar:$APPDIR/lib/core.jar:$APPDIR/lib/G4P.jar:$APPDIR/lib/BlinkStick.jar:$APPDIR/lib/hidapi-1.1.jar" HIDSerialMonitor "$@" diff --git a/host software/application.linux64/lib/HIDSerialMonitor.jar b/host software/application.linux64/lib/HIDSerialMonitor.jar index 99a104c16a57a8e0d13248117c3cb848ea0b4b19..1a82d62529812d27d9601942ea8c3e1e31386f97 100644 GIT binary patch delta 3693 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ຬ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 K1_BNM0002!akrQN diff --git a/host software/application.linux64/source/HIDSerialMonitor.java b/host software/application.linux64/source/HIDSerialMonitor.java index 838ced1..838e217 100644 --- a/host software/application.linux64/source/HIDSerialMonitor.java +++ b/host software/application.linux64/source/HIDSerialMonitor.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; import java.util.HashMap; @@ -32,6 +33,8 @@ public class HIDSerialMonitor extends PApplet { + + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -85,6 +88,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -142,7 +150,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -187,7 +195,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.linux64/source/HIDSerialMonitor.pde b/host software/application.linux64/source/HIDSerialMonitor.pde index dbae403..b3aae78 100644 --- a/host software/application.linux64/source/HIDSerialMonitor.pde +++ b/host software/application.linux64/source/HIDSerialMonitor.pde @@ -5,8 +5,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -60,6 +62,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -117,7 +124,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -162,7 +169,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.macosx/HIDSerialMonitor.app/Contents/Info.plist b/host software/application.macosx/HIDSerialMonitor.app/Contents/Info.plist index 7df866e..4552a85 100644 --- a/host software/application.macosx/HIDSerialMonitor.app/Contents/Info.plist +++ b/host software/application.macosx/HIDSerialMonitor.app/Contents/Info.plist @@ -47,7 +47,7 @@ 1.6* ClassPath - $JAVAROOT/HIDSerialMonitor.jar:$JAVAROOT/core.jar:$JAVAROOT/jogl-all.jar:$JAVAROOT/gluegen-rt.jar:$JAVAROOT/jogl-all-natives-macosx-universal.jar:$JAVAROOT/gluegen-rt-natives-macosx-universal.jar:$JAVAROOT/core.jar:$JAVAROOT/G4P.jar:$JAVAROOT/hidapi.jar + $JAVAROOT/HIDSerialMonitor.jar:$JAVAROOT/core.jar:$JAVAROOT/jogl-all.jar:$JAVAROOT/gluegen-rt.jar:$JAVAROOT/jogl-all-natives-macosx-universal.jar:$JAVAROOT/gluegen-rt-natives-macosx-universal.jar:$JAVAROOT/core.jar:$JAVAROOT/G4P.jar:$JAVAROOT/BlinkStick.jar:$JAVAROOT/hidapi-1.1.jar Properties diff --git a/host software/application.macosx/HIDSerialMonitor.app/Contents/Resources/Java/HIDSerialMonitor.jar b/host software/application.macosx/HIDSerialMonitor.app/Contents/Resources/Java/HIDSerialMonitor.jar index 99a104c16a57a8e0d13248117c3cb848ea0b4b19..1a82d62529812d27d9601942ea8c3e1e31386f97 100644 GIT binary patch delta 3693 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ຬh2MI%o}q?GCQMx@m!MT`mH7SEIzN{bEnmlqd~_PaEO6!@9Jyc)J{0B zn$-@8)nOf9lmhX|0Yr1$kabQ1xxi^&$0)`W^Z^$iHw%0^2);FdM{r!jF@=?9I42@W zBb)6p?48lXK*q@Ij#>t{bv!B(=Oy{8%diu>Oje9XLCkfn=%Azy0VOei^f4VrP%X2s z==dtW#&dUyswJ6hGqbTwBF#!;(CX{zx4r4X)tTC1F$O2`q=qLHmi;~SI{qC`Fgv90Lb;n+OIBukBJLDPr)>XF$B$%t4!3(URy-H8xnGKx@KX&x;ps8uns}w- zzoiQbjkrVeKXTB%D6^mI_+R`VYumP*5Gd5uZJVV-W?2j175qwn!!HTsZx(VLzm}$$ z8&71Vqg#_!>;~r|@(O;d<9GNyOCaOGN>Sam)_UF||HxxyCcL!f5=n}e>&u_z>hTwa z<+FA3Y`F9Xyei0lmCRn#G0r<0id}?KSX>u5oypTCysAJ~g@S;7+j2KcRFTp&RXqK6 zwL5E@L%Q;-5{8<8cUl1oXFFjv^^nabvuO-9`&H>AGzgm3nwgB138*=0uBOT+>T)`h zuF9PoL|T@TDNO}mN7vas)dgyvLcz9HR+OutKa;QtJ2h&7t`;geyKF16)5v(~_OZ1i zOoTd1SBoVP6@pwHreWtYG%jsr*b=AI*}6K%NnzSGiD=$`m*I87ua=PIb(&mXGS-;Oz9PFiX8Hk@YU}W?b%D zO0Cp!0@Z%iL{y7dxn#UHW!b!trQ+V@Y{`;?ZG zMpE-$TD-}B%;ts|%xl$Kbak;*gf?h;*RvXYQdBqVs!9^&8!{5|_L$a9lXnR}3WWG_ zU9~8ts+cy!3|kJtS;%LTFv}XR{i;n@>(r&1>R@rqLPCdotz1SxUQXevneVhl;lL91 zMj@YbrTowPE#!}PFlXew#TiSzQTIk(6`Yap31{SgYr+{Ty^${oXXG2e;ZpKE;dc># zZKF2c?hp=*;;hgy)NC2WIU}eIRm^{E1WQ8|ML!t9vXC0V@=)Oz>PFD`Fv%6p=l5)y z1`6{bMCA=su#%~0#8NbIWg)39m{6n+(0n?kmWL|T-4*J0d93n}VGUKT+Y%}bt`A-o zyxcc`ik1#%o>!aw;V=Dz*yCoF7E@%V?g0WG= zM=(gT!C)ef8zv@6nM`LKI);?Pmk!<-j0H2Ju%qETZlb(BTz@C!t>^kbjN+CN+)Dmi z^SDih!aUyN@~$WMdxQTJd>?r?Hcate7yK80hxZPL_XA}5fbdQTb~iudZ0_aeURUs5 z5qx@#cQAr{-80n}GR>-^p&3d3%HdMH50~NNxE%MP6(fk? zINIPDj8gFn!jhys9^8krhQs*GL(o{04^K%hbI7h`QEz9Z857dxQ_hh|)7wZa z^}K+>8uJ+0kGUbA8`Ciy?Vpksq>n&{^%74^O3ZReg0YlNe~JIU91Wj1 zfcc?t;i^0yXI~7Xq~B?fhsjY!r_aJEPl?+gNvaxR`CHt*k-Hfzrqm_a zMXT2Os@W^wV*r*O#6p?>fb(Ssp@*w|NAcqV^xs~js*0+L?;n457{2~+_$Xdhyv3e8 zik}tWF?{_HRqIS*|D-344kGQQC-30SyNEQm5>;+vTHk|MC608^*G5mG8oRSab}3*s^jAe;UPKW#!I1{y(o&*X=%467<#ZD zn{Y4R^9T4;Kj`?oT>M>uB5_Jp(x)0quPOL5v~lX;Z~0J@l2gj_^Jzv@YUH|bUd`Xw zaH72S0r<;nhf&mUVtx6N<9^9zVPT(>-(a<`s>pX;Lsil0y?ss&YwjO^#a%4yljtzp zYEl0%D%TcQ7w1)t<7zE`U6tBwMU=jtn&#;PjPip#As(VN!#IZzw)605!uF>KE1xCD z=gD!1@bEBO`7j&rh~w!(6u*iJO)YIvuc5;6wrneNIG4UHBb>O9f2Y^kFEkuh%OApX zVHZW&-~s9EVLTpov5_mcxd3y~BoKN?>z+KM3f_@d^%GD^)TvZ|Y=`@X@$OJwH3;() zD0kNzo%Mv!R;u%-aqabaqP>ySs~qa)unWYr*Iv(M+wm%Y+`p=N!8~pVw!TVcI?AIYs{Z~X5gbEn(J>wE%r;GMz zOjv<4)?Ce%aRIYwJ4zLh`iqmumO_DpY!|q(Z*cHetr1{f5azL|F4>Q=khhvwYbTG@ znP~qUo&FAQ0N*9BJJhsM-pV=6KXEzDs`(|iXGeng2srlyxD z2MBYF`%Ehh000*k002-+0Rj{N6aWYS2mtInFq7a8KMw3XFhg^U`%Ehh000*klPwQA K1_BNM0002!akrQN diff --git a/host software/application.macosx/source/HIDSerialMonitor.java b/host software/application.macosx/source/HIDSerialMonitor.java index 838ced1..838e217 100644 --- a/host software/application.macosx/source/HIDSerialMonitor.java +++ b/host software/application.macosx/source/HIDSerialMonitor.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; import java.util.HashMap; @@ -32,6 +33,8 @@ public class HIDSerialMonitor extends PApplet { + + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -85,6 +88,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -142,7 +150,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -187,7 +195,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.macosx/source/HIDSerialMonitor.pde b/host software/application.macosx/source/HIDSerialMonitor.pde index dbae403..b3aae78 100644 --- a/host software/application.macosx/source/HIDSerialMonitor.pde +++ b/host software/application.macosx/source/HIDSerialMonitor.pde @@ -5,8 +5,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -60,6 +62,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -117,7 +124,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -162,7 +169,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.windows32/lib/HIDSerialMonitor.jar b/host software/application.windows32/lib/HIDSerialMonitor.jar index 99a104c16a57a8e0d13248117c3cb848ea0b4b19..1a82d62529812d27d9601942ea8c3e1e31386f97 100644 GIT binary patch delta 3693 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ຬ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 K1_BNM0002!akrQN diff --git a/host software/application.windows32/lib/args.txt b/host software/application.windows32/lib/args.txt index a02affc..5fa713c 100644 --- a/host software/application.windows32/lib/args.txt +++ b/host software/application.windows32/lib/args.txt @@ -1,3 +1,3 @@ HIDSerialMonitor -HIDSerialMonitor.jar,core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-i586.jar,gluegen-rt-natives-windows-i586.jar,core.jar,G4P.jar,hidapi.jar \ No newline at end of file +HIDSerialMonitor.jar,core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-i586.jar,gluegen-rt-natives-windows-i586.jar,core.jar,G4P.jar,BlinkStick.jar,hidapi-1.1.jar \ No newline at end of file diff --git a/host software/application.windows32/source/HIDSerialMonitor.java b/host software/application.windows32/source/HIDSerialMonitor.java index 838ced1..838e217 100644 --- a/host software/application.windows32/source/HIDSerialMonitor.java +++ b/host software/application.windows32/source/HIDSerialMonitor.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; import java.util.HashMap; @@ -32,6 +33,8 @@ public class HIDSerialMonitor extends PApplet { + + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -85,6 +88,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -142,7 +150,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -187,7 +195,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.windows32/source/HIDSerialMonitor.pde b/host software/application.windows32/source/HIDSerialMonitor.pde index dbae403..b3aae78 100644 --- a/host software/application.windows32/source/HIDSerialMonitor.pde +++ b/host software/application.windows32/source/HIDSerialMonitor.pde @@ -5,8 +5,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -60,6 +62,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -117,7 +124,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -162,7 +169,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.windows64/lib/HIDSerialMonitor.jar b/host software/application.windows64/lib/HIDSerialMonitor.jar index 99a104c16a57a8e0d13248117c3cb848ea0b4b19..1a82d62529812d27d9601942ea8c3e1e31386f97 100644 GIT binary patch delta 3693 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ຬ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 K1_BNM0002!akrQN diff --git a/host software/application.windows64/lib/args.txt b/host software/application.windows64/lib/args.txt index fca02e0..f3a28ec 100644 --- a/host software/application.windows64/lib/args.txt +++ b/host software/application.windows64/lib/args.txt @@ -1,3 +1,3 @@ HIDSerialMonitor -HIDSerialMonitor.jar,core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-amd64.jar,gluegen-rt-natives-windows-amd64.jar,core.jar,G4P.jar,hidapi.jar \ No newline at end of file +HIDSerialMonitor.jar,core.jar,jogl-all.jar,gluegen-rt.jar,jogl-all-natives-windows-amd64.jar,gluegen-rt-natives-windows-amd64.jar,core.jar,G4P.jar,BlinkStick.jar,hidapi-1.1.jar \ No newline at end of file diff --git a/host software/application.windows64/source/HIDSerialMonitor.java b/host software/application.windows64/source/HIDSerialMonitor.java index 838ced1..838e217 100644 --- a/host software/application.windows64/source/HIDSerialMonitor.java +++ b/host software/application.windows64/source/HIDSerialMonitor.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; import java.util.HashMap; @@ -32,6 +33,8 @@ public class HIDSerialMonitor extends PApplet { + + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -85,6 +88,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -142,7 +150,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -187,7 +195,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n"); diff --git a/host software/application.windows64/source/HIDSerialMonitor.pde b/host software/application.windows64/source/HIDSerialMonitor.pde index dbae403..b3aae78 100644 --- a/host software/application.windows64/source/HIDSerialMonitor.pde +++ b/host software/application.windows64/source/HIDSerialMonitor.pde @@ -5,8 +5,10 @@ import com.codeminders.hidapi.HIDDevice; import java.io.IOException; import java.util.List; import java.util.ArrayList; +import java.util.LinkedList; import java.awt.Font; + GTextArea outputField; GTextField inputField; GButton sendButton; @@ -60,6 +62,11 @@ public void draw() { if( device != null && !paused ) { String result = deviceRead(); if( result != null ) { + + if(outputField.stext.getNbrLines() > 100){ + int loc = outputField.stext.getPlainText().indexOf("\n",1); + outputField.stext.deleteCharacters(0,loc); + } outputField.appendText(result); } } @@ -117,7 +124,7 @@ public HIDDeviceInfo[] deviceFindAllDescriptors() { public String deviceRead() { try { device.disableBlocking(); - byte[] data = new byte[8]; + byte[] data = new byte[10]; int read = device.read(data); if (read > 0) { String str = new String(); @@ -162,7 +169,13 @@ public void handleButtonEvents(GButton button, GEvent event) { if (device!=null) { pauseButton.setEnabled(false); sendButton.setEnabled(false); + try{ + device.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } device = null; + outputField = new GTextArea(this, 0, 100, 405, 400, G4P.SCROLLBARS_VERTICAL_ONLY); connectButton.setText("Connect"); connectButton.setTextBold(); outputField.appendText("Disconnected.\n");