NXT의 편지함에 글을 쓸 수는 있지만 읽을 수는 없습니다.MindStorms를 사용하는 MailBox를 통한 Android NXT 통신
설치 프로그램은 GitHub의 MindDroid를 시동기로 사용합니다.
SendBTCmessage (INT, INT 문자열 INT)가 새로운sendBTCmessage(0, BTCommunicator.START_PROGRAM, "bt1.rxe");
sendBTCmessage(1000, BTCommunicator.SENDMAILBOX, "Kilroy was here");
sendBTCmessage(3000, BTCommunicator.READMAILBOX,"",1);
...
공극 sendBTCmessage (INT 지연 INT 메시지 문자열 이름, INT MBOX) { 번들 myBundle = 새로운 번들 (); myBundle.putInt ("message", message); myBundle.putString ("name", name); myBundle.putInt ("MailBox", mBox); 메시지 myMessage = myHandler.obtainMessage(); myMessage.setData (myBundle); Log.d (TAG, String.format ("sendBTCmessageStringMbox % d % s mBox = % d", 지연, 메시지, 이름, mBox)); 이것은 어디 핸들러에 요청을 전송
if (delay == 0)
btcHandler.sendMessage(myMessage);
else
btcHandler.sendMessageDelayed(myMessage, delay);
}
...
case SENDMAILBOX:
Log.d(TAG,String.format("case SENDMAILBOX %d %s",myMessage.getData().getInt("value1"), myMessage.getData().getString("name")));
sendMailbox(myMessage.getData().getInt("MailBox"),myMessage.getData().getString("name"));
break;
case READMAILBOX:
Log.d(TAG,String.format("case ReadMAILBOX %d %s",myMessage.getData().getInt("MailBox"), myMessage.getData().getString("name")));
readMailbox(myMessage.getData().getInt("MailBox"));
break;
case START_PROGRAM:
startProgram(myMessage.getData().getString("name"));
break;
메시지는 "startProgram는"표준 더 준비하고, 잘 작동되는 ...
private void startProgram(String programName) {
byte[] message = LCPMessage.getStartProgramMessage(programName);
Log.d(TAG,String.format("startProgram %s %s",programName,LCPMessage.getStartProgramMessage(programName)));
sendMessageAndState(message);
}
private void readMailbox(int mBox){
byte[] message = LCPMessage.getReadMailboxMessage(mBox);
Log.d(TAG,String.format("readMailbox %d",mBox));
logByteArray(TAG,"sendMailBox",message);
sendMessageAndState(message);
}
private void sendMailbox(int mBox,String text){
byte[] message = LCPMessage.getMailBoxMessage(mBox,text);
Log.d(TAG,String.format("mail box message %s %d",text,message.length));
logByteArray(TAG,"sendMailBox",message);
sendMessageAndState(message);
}
최종 준비는 ...
public static byte[] getMailBoxMessage(int mBox, String text){
byte[] message = new byte[text.length()+5];
message[0] = DIRECT_COMMAND_NOREPLY;
message[1] = MESSAGE_WRITE;
message[2] = (byte)mBox;
message[3] = (byte)(text.length()+1);
for (int pos=0; pos<text.length(); pos++)
message[4+pos] = (byte) text.charAt(pos);
message[text.length()+4] = 0;
return message;
}
public static byte[] getReadMailboxMessage(int mBox){
byte[] message = new byte[5];
message[0] = DIRECT_COMMAND_REPLY;
message[1] = MESSAGE_READ;
message[2] = (byte)(mBox+10);
message[3] = (byte)mBox;
message[4] = (byte)0x01; //true
return message;
}
public static byte[] getStartProgramMessage(String programName) {
byte[] message = new byte[22];
message[0] = DIRECT_COMMAND_NOREPLY;
message[1] = START_PROGRAM;
// copy programName and end with 0 delimiter
for (int pos=0; pos<programName.length(); pos++)
message[2+pos] = (byte) programName.charAt(pos);
message[programName.length()+2] = 0;
return message;
}
내가 가진 문제는 메시지를받는 NXT 프로그램이 제대로 작동하지만 사서함에있는 내용을 읽는 방법을 알 수 없다는 것입니다. http://www.android-tele-health.com/bt1.rbt은 NXT에서 실행되는 프로그램입니다.
감사 어떤 도움을 ... 감사합니다 존