This took way longer than it should (and is a much more major victory to me than it should be) but I finally got a web page to host the current numerical sensor value of a light sensor running on my NXT. This took several days due to some stupid problems:
1. The NXT Direct Commands documentation explains that the getInputValues command sends a return byte package of 16 bytes, but I forgot that since I am using Bluetooth, another 2 bytes are tacked on the beginning. That caused my interpretation to be offset by 2 bytes for the longest time. Oops.
2. This one was even worse, but I blame it on not knowing anything about Java. So I didn't understand how the InputStream works, and I didn't at first realize that the return values from previous direct commands were already stored in the buffer, causing me to read the wrong value. Secondly, I didn't realize that the InputStream is reset each time I called the command (still not sure why...) So as of now, I am having it skip over the 5 bytes returned from the setInputMode command before reading the 18 byte package from the getInputValues command.
Here's what I've got...
long skipped = stream.skip(streamskip); int bytesRead = stream.read(data,0,18); Log.w("NxtBrick", "Bytes Read: " + Integer.toString(bytesRead)); String x = Integer.toString(((data[12] & 0xff) << 8) | (data[13] & 0xff));
Log.w("NxtBrick", "Sensor Value: " + x); return x;
And to write to NanoHTTPD:
NxtBrick nxt = ServerActivity.getNxt(); String answer=""; try { //nxt.playTone('a','c'); nxt.setInputMode((byte)0x00,(byte)0x06,(byte)0x80); answer=nxt.getInputValues((byte)0x00); } catch (IOException e) { e.printStackTrace(); } return new NanoHTTPD.Response(answer);