37,8 → 37,9 |
public int version_major=-1; |
public int version_minor=-1; |
public int version_compatible=-1; |
|
|
public MKLCD LCD; |
|
public long connection_start_time=-1; |
|
|
52,12 → 53,16 |
String p_msg="--"; |
public String msg="BT_INIT"; |
|
public int data_count=0; |
public int debug_data_count=0; |
public int version_data_count=0; |
public int other_data_count=0; |
public int lcd_data_count=0; |
|
|
/****************** Section: public Methods ************************************************/ |
public MKCommunicator(String url) // Constructor with URL string e.g. "btspp://XXXXXXXXXXXX:1" - the X-Part is the MAC-Adress of the Bluetooth-Device connected to the Fligth-Control |
{ |
|
debug_data=new MKDebugData(); |
mk_url=url; // remember URL for connecting / reconnecting later |
|
76,6 → 81,7 |
connection_start_time=System.currentTimeMillis(); |
connected=true; // if we get here everything seems to be OK |
get_version(); |
LCD= new MKLCD(this); |
} |
catch (Exception ex) |
{ |
125,6 → 131,7 |
send_command(0,'v',new int[0]); |
} |
|
|
// send command to FC ( add crc and pack into pseudo Base64 |
public void send_command(int modul,char cmd,int[] params) |
{ |
133,6 → 140,28 |
send_buff[1]=(char)modul; |
send_buff[2]=cmd; |
|
for(int param_pos=0;param_pos<(params.length/3 + (params.length%3==0?0:1)) ;param_pos++) |
{ |
int a = (param_pos<params.length)?params[param_pos]:0; |
int b = ((param_pos+1)<params.length)?params[param_pos+1]:0; |
int c = ((param_pos+2)<params.length)?params[param_pos+2]:0; |
|
send_buff[3+param_pos*4] = (char)((a >> 2)+'=' ); |
send_buff[3+param_pos*4+1] = (char)('=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4))); |
send_buff[3+param_pos*4+2] = (char)('=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6))); |
send_buff[3+param_pos*4+3] = (char)('=' + ( c & 0x3f)); |
|
//send_buff[3+foo]='='; |
} |
|
/* for(int foo=0;foo<(params.length/3 + (params.length%3==0?0:1) )*4;foo++) |
{ |
int a = (foo<params.length) params[foo]; |
int a = params[foo]; |
|
//send_buff[3+foo]='='; |
} |
*/ |
try |
{ |
int tmp_crc=0; |
165,10 → 194,9 |
case 'D': // debug Data |
decoded_data=Decode64(data,3,50); |
debug_data=new MKDebugData(decoded_data); |
msg="Got Debug Data s:" + debug_data.sekunden + "zy:"+debug_data.zyklen + "ze:" + debug_data.zeit + connected + ">" + data_count; |
for (int ff=0;ff<8;ff++) |
msg+="\n d:" + (ff*2+1) + " " + debug_data.analog[ff*2] + " d2:" + (ff*2+2) + " " + debug_data.analog[ff*2+1] ; |
|
|
debug_data_count++; |
break; |
|
case 'V': // Version Info |
176,24 → 204,53 |
version_major=decoded_data[0]; |
version_minor=decoded_data[1]; |
version_compatible=decoded_data[2]; |
version_data_count++; |
|
break; |
|
case '0': |
case '1': |
case '2': |
case '3': |
LCD.handle_lcd_data(Decode64(data,3,20),data[2]-(int)'0'); |
lcd_data_count++; |
// decoded_data= |
|
|
// if ((data[2]-(int)'0')!=3) |
// get_LCD(); |
break; |
|
|
default: |
other_data_count++; |
break; |
|
} |
|
|
msg+=p_msg; |
msg+="OK"; |
data_count++; |
|
|
} |
|
String o_msg=""; |
|
public boolean force_disconnect=false; |
|
public void close_connections() |
{ |
force_disconnect=true; |
try{ reader.close(); } |
catch (Exception inner_ex) { } |
|
try{ writer.close(); } |
catch (Exception inner_ex) { } |
|
try{ connection.close(); } |
catch (Exception inner_ex) { } |
|
connected=false; |
} |
|
// Thread to recieve data from Connection |
public void run() |
{ |
205,7 → 262,7 |
{ |
if (!connected) |
{ |
connect(); |
if (!force_disconnect) connect(); |
} |
else |
try{ |
228,9 → 285,9 |
{ |
msg="Problem reading from MK"; |
// close the connection |
try{ reader.close(); connection.close(); } |
catch (Exception inner_ex) { } |
connected=false; |
close_connections(); |
|
|
} |
|
// sleep a bit to get someting more done |