55import ioio .lib .api .exception .IncompatibilityException ;
66import ioio .lib .spi .Log ;
77import ioio .lib .util .IOIOLooper ;
8+ import ioio .lib .api .AnalogInput ;
89
910import java .util .concurrent .BlockingQueue ;
1011import java .util .concurrent .CountDownLatch ;
1112import java .util .concurrent .LinkedBlockingQueue ;
1213
13- public class AnalogInput extends AbstractLooperProvider implements ioio . lib . api . AnalogInput {
14+ public class AnalogInputImpl extends AbstractLooperProvider implements AnalogInput {
1415 private static final String TAG = "AnalogInput" ;
1516 private AnalogInputLooper looper ;
16- static final protected BlockingQueue <FloatConsumer <ioio . lib . api . AnalogInput >> INPUT_QUEUE = new LinkedBlockingQueue <>() ;
17+ protected BlockingQueue <FloatConsumer <AnalogInput >> inputQueue ;
1718
18- public AnalogInput () {
19+ public AnalogInputImpl () {
1920 super ();
21+ inputQueue = new LinkedBlockingQueue <>();
2022 Log .i (TAG , "created" );
2123 }
2224
@@ -39,65 +41,65 @@ public IOIOLooper createIOIOLooper(String connectionType, Object extra) {
3941
4042 @ Override
4143 public int getOverflowCount () {
42- return (int ) invokeFloat (ioio . lib . api . AnalogInput ::getOverflowCount );
44+ return (int ) invokeFloat (AnalogInput ::getOverflowCount );
4345 }
4446
4547 @ Override
4648 public float getReference () {
47- return invokeFloat (ioio . lib . api . AnalogInput ::getReference );
49+ return invokeFloat (AnalogInput ::getReference );
4850 }
4951
5052 @ Override
5153 public float getSampleRate () {
52- return invokeFloat (ioio . lib . api . AnalogInput ::getSampleRate );
54+ return invokeFloat (AnalogInput ::getSampleRate );
5355 }
5456
5557 @ Override
5658 public float getVoltage () {
57- return invokeFloat (ioio . lib . api . AnalogInput ::getVoltage );
59+ return invokeFloat (AnalogInput ::getVoltage );
5860 }
5961
6062 @ Override
6163 public float getVoltageBuffered () {
62- return invokeFloat (ioio . lib . api . AnalogInput ::getVoltageBuffered );
64+ return invokeFloat (AnalogInput ::getVoltageBuffered );
6365 }
6466
6567 @ Override
6668 public float getVoltageSync () {
67- return invokeFloat (ioio . lib . api . AnalogInput ::getVoltageSync );
69+ return invokeFloat (AnalogInput ::getVoltageSync );
6870 }
6971
7072 public void open (int pin ) {
7173 Log .i (TAG , "openInput" );
72- looper = new AnalogInputLooper (QUEUE , pin );
74+ looper = new AnalogInputLooper (QUEUE , inputQueue , pin );
7375 start ();
7476 }
7577
7678 @ Override
7779 public float read () throws InterruptedException , ConnectionLostException {
78- return invokeFloat (ioio . lib . api . AnalogInput ::read );
80+ return invokeFloat (AnalogInput ::read );
7981 }
8082
8183 @ Override
8284 public float readBuffered () {
83- return invokeFloat (ioio . lib . api . AnalogInput ::readBuffered );
85+ return invokeFloat (AnalogInput ::readBuffered );
8486 }
8587
8688 @ Override
8789 public float readSync () {
88- return invokeFloat (ioio . lib . api . AnalogInput ::readSync );
90+ return invokeFloat (AnalogInput ::readSync );
8991 }
9092
9193 @ Override
9294 public void setBuffer (int capacity ) {
9395
9496 }
9597
96- protected float invokeFloat (FloatConsumer <ioio . lib . api . AnalogInput > consumer ) {
98+ protected float invokeFloat (FloatConsumer <AnalogInput > consumer ) {
9799 final CountDownLatch latch = new CountDownLatch (1 );
98100 final float [] result = new float [1 ];
99101 try {
100- INPUT_QUEUE .put (e -> {
102+ inputQueue .put (e -> {
101103 result [0 ] = consumer .invoke (e );
102104 latch .countDown ();
103105 return result [0 ];
@@ -111,10 +113,14 @@ protected float invokeFloat(FloatConsumer<ioio.lib.api.AnalogInput> consumer) {
111113 }
112114
113115 static class AnalogInputLooper extends AbstractLooper {
114- private ioio .lib .api .AnalogInput analogInput ;
116+ private AnalogInput analogInput ;
117+ private final BlockingQueue <FloatConsumer <AnalogInput >> inputQueue ;
115118
116- public AnalogInputLooper (BlockingQueue <Consumer <IOIO >> queue , int pin ) {
119+ public AnalogInputLooper (BlockingQueue <Consumer <IOIO >> queue ,
120+ BlockingQueue <FloatConsumer <AnalogInput >> inputQueue ,
121+ int pin ) {
117122 super (queue , pin );
123+ this .inputQueue = inputQueue ;
118124 Log .i (TAG , "creating AnalogInputLooper" );
119125 }
120126
@@ -126,9 +132,9 @@ public void close() {
126132 @ Override
127133 public void loop () throws InterruptedException , ConnectionLostException {
128134 super .loop ();
129- if (!INPUT_QUEUE .isEmpty ()) {
135+ if (!inputQueue .isEmpty ()) {
130136 try {
131- INPUT_QUEUE .take ().invoke (analogInput );
137+ inputQueue .take ().invoke (analogInput );
132138 }
133139 catch (ConnectionLostException | IncompatibilityException e ) {
134140 throw new RuntimeException (e );
0 commit comments