Hey, I've been reading up on how to recieve UART messages and given it a
try with no success. The stack trace always returns with a couple of
"stream has been closed" and I can't seem to figure out what's up.
This is my Uart Thread:
public class MidiIn extends Thread
{
private InputStream inputStream;
/**
* Channels used for MIDI input
*/
private Uart midi_in_;
private AACSmain _main;
private boolean _running;
private final String DEBUG_TAG = "MIDI_IN: ";
public MidiIn(Uart MIDI, AACSmain m_, DigitalOutput led_) throws
ConnectionLostException, InterruptedException
{
Log.i(DEBUG_TAG ,"Constructor");
_main = m_;
midi_in_ = MIDI;
led_.write(false);
Thread.sleep(1);
led_.write(true);
inputStream = midi_in_.getInputStream();
_running = true;
Log.i(DEBUG_TAG ,"Constructor finished");
}
@Override
public void run()
{
while(_running)
{
Log.i(DEBUG_TAG ,"Looping MIDI in");
try
{
Thread.sleep(2);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
/**
* An array of bytes read from the input
*/
byte[] recievedData = new byte[3];
try
{
Log.i(DEBUG_TAG ,"Attempting read.. ");
if(inputStream.available() > 0)
<====== Always false
{
for (int i = 0 ; i < recievedData.length; i++)
{
inputStream.read(recievedData, 0,recievedData.length);
<==== this always returns stream closed
Log.i(DEBUG_TAG, String.format("readLine: %02x", recievedData[i]));
}
Log.i(DEBUG_TAG ,"Finished read.. ");
int byteZero = recievedData[0] & 0xFF;
int noteNumber = (int) (recievedData[1] & 0xFF); //Sets note number to int
int byte2 = recievedData[2] & 0xFF;
Log.i(DEBUG_TAG, "Databyte0: " + byteZero + " data1: " +
recievedData[1] + " data2: " + byte2);
if (recievedData[0] == (ShortMessage.NOTE_ON & 0xFF)) //If it was Note On,
set color of pad
_main.setColorOfPad(noteNumber);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Where the uart thread is initialized in main like this:
_uart = ioio_.openUart(new DigitalInput.Spec(MIDI_INPUT_PIN,
DigitalInput.Spec.Mode.PULL_DOWN),
new Spec(MIDI_OUTPUT_PIN,Mode.NORMAL),BAUD,Parity.NONE,StopBits.ONE);
_midiIn = new MidiIn(_uart, AACSmain.this, led_); //TODO
_midiIn.start(); //TODO
( BAUD = 31250, MIDI_OUTPUT_PIN = 7 & MIDI_INPUT_PIN = 6)
I've tried a few different solutions with a buffered reader and so on, but
nothing seems to work..
Just realized while typing, is it even necessary to specify the input in
pull down mode? Not sure why I did it this, some parts of the code might be
written in semi-awake state at 4 in the morning.. ;)
--
You received this message because you are subscribed to the Google Groups
"ioio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/ioio-users.
For more options, visit https://groups.google.com/d/optout.